<?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>93050</bug_id>
          
          <creation_ts>2012-08-02 17:02:38 -0700</creation_ts>
          <short_desc>Remove LayoutTypes abstraction</short_desc>
          <delta_ts>2012-11-07 16:37:51 -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>Platform</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>93037</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Emil A Eklund">eae</reporter>
          <assigned_to name="Emil A Eklund">eae</assigned_to>
          <cc>andersca</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dino</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>d-r</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>fmalita</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jamesr</cc>
    
    <cc>japhet</cc>
    
    <cc>jdiggs</cc>
    
    <cc>leviw</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>noam</cc>
    
    <cc>pdr</cc>
    
    <cc>rakuco</cc>
    
    <cc>schenney</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tkent</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>686004</commentid>
    <comment_count>0</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-08-02 17:02:38 -0700</bug_when>
    <thetext>LayoutTypes.h acts as an abstraction for types mapping LayoutRect/Point/Size to IntRect/Point/Size or FractionalLayoutRect/Point/Size. This abstraction should be removed now that all platforms use the FractionalLayout version (albeit with different fractions).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758838</commentid>
    <comment_count>1</comment_count>
      <attachid>172394</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-11-05 13:46:23 -0800</bug_when>
    <thetext>Created attachment 172394
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758847</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-05 13:50:54 -0800</bug_when>
    <thetext>Attachment 172394 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1
Source/WebCore/platform/graphics/LayoutRect.h:215:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/LayoutUnit.h:191:  wtf_ceil is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/graphics/LayoutRect.cpp:38:  Use &apos;using namespace std;&apos; instead of &apos;using std::max;&apos;.  [build/using_std] [4]
Source/WebCore/platform/graphics/LayoutRect.cpp:39:  Use &apos;using namespace std;&apos; instead of &apos;using std::min;&apos;.  [build/using_std] [4]
Source/WebCore/platform/graphics/LayoutBoxExtent.cpp:187:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/LayoutBoxExtent.cpp:193:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 6 in 125 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758854</commentid>
    <comment_count>3</comment_count>
      <attachid>172394</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-11-05 13:57:13 -0800</bug_when>
    <thetext>Comment on attachment 172394
Patch

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

&gt; Source/WebCore/rendering/RenderBox.cpp:366
&gt; +    return clientWidth() - min(LayoutUnit(0), layoutOverflowRect().x() - borderLeft());

Why not just LayoutUnit()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758866</commentid>
    <comment_count>4</comment_count>
      <attachid>172394</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-11-05 14:02:38 -0800</bug_when>
    <thetext>Comment on attachment 172394
Patch

Attachment 172394 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14726747</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758873</commentid>
    <comment_count>5</comment_count>
      <attachid>172394</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-11-05 14:05:14 -0800</bug_when>
    <thetext>Comment on attachment 172394
Patch

Attachment 172394 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14675328</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758901</commentid>
    <comment_count>6</comment_count>
      <attachid>172394</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-05 14:26:46 -0800</bug_when>
    <thetext>Comment on attachment 172394
Patch

Attachment 172394 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14745206</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758902</commentid>
    <comment_count>7</comment_count>
      <attachid>172408</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-11-05 14:27:59 -0800</bug_when>
    <thetext>Created attachment 172408
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758905</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-05 14:32:07 -0800</bug_when>
    <thetext>Attachment 172408 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1
Source/WebCore/platform/graphics/LayoutRect.h:215:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/LayoutUnit.h:191:  wtf_ceil is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/graphics/LayoutRect.cpp:38:  Use &apos;using namespace std;&apos; instead of &apos;using std::max;&apos;.  [build/using_std] [4]
Source/WebCore/platform/graphics/LayoutRect.cpp:39:  Use &apos;using namespace std;&apos; instead of &apos;using std::min;&apos;.  [build/using_std] [4]
Source/WebCore/platform/graphics/LayoutBoxExtent.cpp:187:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/LayoutBoxExtent.cpp:193:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 6 in 125 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758923</commentid>
    <comment_count>9</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-11-05 14:51:49 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 172394 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=172394&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBox.cpp:366
&gt; &gt; +    return clientWidth() - min(LayoutUnit(0), layoutOverflowRect().x() - borderLeft());
&gt; 
&gt; Why not just LayoutUnit()?

No reason, expanded the ZERO_LAYOUT_UNIT define which was LayoutUnit(0). Changed to LayoutUnit().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758958</commentid>
    <comment_count>10</comment_count>
      <attachid>172408</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-05 15:27:31 -0800</bug_when>
    <thetext>Comment on attachment 172408
Patch

Attachment 172408 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14682292</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758984</commentid>
    <comment_count>11</comment_count>
      <attachid>172408</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-05 16:08:13 -0800</bug_when>
    <thetext>Comment on attachment 172408
Patch

Attachment 172408 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14690297</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758989</commentid>
    <comment_count>12</comment_count>
      <attachid>172408</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-05 16:13:12 -0800</bug_when>
    <thetext>Comment on attachment 172408
Patch

Attachment 172408 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14728695</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758996</commentid>
    <comment_count>13</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-11-05 16:14:59 -0800</bug_when>
    <thetext>r133536 added a new dependency on LayoutTypes.h (which is why the mac and cr-linux bots fails), will upload a new patch momentarily.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759001</commentid>
    <comment_count>14</comment_count>
      <attachid>172430</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-11-05 16:18:25 -0800</bug_when>
    <thetext>Created attachment 172430
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759013</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-05 16:29:10 -0800</bug_when>
    <thetext>Attachment 172430 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1
Source/WebCore/platform/graphics/LayoutRect.h:215:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/LayoutUnit.h:191:  wtf_ceil is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/graphics/LayoutRect.cpp:38:  Use &apos;using namespace std;&apos; instead of &apos;using std::max;&apos;.  [build/using_std] [4]
Source/WebCore/platform/graphics/LayoutRect.cpp:39:  Use &apos;using namespace std;&apos; instead of &apos;using std::min;&apos;.  [build/using_std] [4]
Source/WebCore/platform/graphics/LayoutBoxExtent.cpp:187:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/LayoutBoxExtent.cpp:193:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 6 in 126 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759014</commentid>
    <comment_count>16</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-11-05 16:30:02 -0800</bug_when>
    <thetext>The style failure is to be expected, the other bots should all pass assuming they run before anyone else adds a new dependency...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759211</commentid>
    <comment_count>17</comment_count>
      <attachid>172430</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-05 20:47:13 -0800</bug_when>
    <thetext>Comment on attachment 172430
Patch

Attachment 172430 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14755036</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759224</commentid>
    <comment_count>18</comment_count>
      <attachid>172430</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-05 21:16:40 -0800</bug_when>
    <thetext>Comment on attachment 172430
Patch

Attachment 172430 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14665446</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759228</commentid>
    <comment_count>19</comment_count>
      <attachid>172430</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-05 21:27:35 -0800</bug_when>
    <thetext>Comment on attachment 172430
Patch

Attachment 172430 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14717942

New failing tests:
fast/css/text-overflow-ellipsis-bidi.html
fast/multicol/span/span-as-immediate-child-property-removal.html
fast/forms/basic-textareas-quirks.html
fast/forms/input-readonly-dimmed.html
fast/replaced/width100percent-textarea.html
fast/forms/input-text-scroll-left-on-blur.html
fast/css/text-overflow-input.html
svg/text/text-overflow-ellipsis-svgfont.html
fast/css/vertical-text-overflow-ellipsis-text-align-center.html
fast/css/text-overflow-ellipsis-strict.html
fast/multicol/span/clone-anonymous-block-non-inline-child-crash.html
fast/forms/input-readonly-autoscroll.html
fast/css/text-overflow-ellipsis.html
fast/forms/input-disabled-color.html
fast/multicol/span/anonymous-split-block-crash.html
fast/forms/search-rtl.html
fast/forms/basic-textareas.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759361</commentid>
    <comment_count>20</comment_count>
      <attachid>172430</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-06 01:01:18 -0800</bug_when>
    <thetext>Comment on attachment 172430
Patch

Attachment 172430 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14738186

New failing tests:
fast/css/vertical-text-overflow-ellipsis-text-align-center.html
fast/multicol/span/anonymous-split-block-crash.html
fast/css/text-overflow-ellipsis-text-align-center.html
svg/text/text-overflow-ellipsis-svgfont.html
fast/multicol/span/clone-anonymous-block-non-inline-child-crash.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759419</commentid>
    <comment_count>21</comment_count>
      <attachid>172430</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-06 01:56:26 -0800</bug_when>
    <thetext>Comment on attachment 172430
Patch

Attachment 172430 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14691331

New failing tests:
fast/css/vertical-text-overflow-ellipsis-text-align-center.html
fast/multicol/span/anonymous-split-block-crash.html
fast/css/text-overflow-ellipsis-text-align-center.html
svg/text/text-overflow-ellipsis-svgfont.html
fast/multicol/span/clone-anonymous-block-non-inline-child-crash.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759699</commentid>
    <comment_count>22</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-11-06 07:55:44 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 172430 [details])
&gt; Attachment 172430 [details] did not pass chromium-ews (chromium-xvfb):
&gt; Output: http://queues.webkit.org/results/14691331
&gt; 
&gt; New failing tests:
&gt; fast/css/vertical-text-overflow-ellipsis-text-align-center.html
&gt; fast/multicol/span/anonymous-split-block-crash.html
&gt; fast/css/text-overflow-ellipsis-text-align-center.html
&gt; svg/text/text-overflow-ellipsis-svgfont.html
&gt; fast/multicol/span/clone-anonymous-block-non-inline-child-crash.html

Failed tests? That seems very curious.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759708</commentid>
    <comment_count>23</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-11-06 08:03:24 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; Failed tests? That seems very curious.

Seems unlikely, rerunning all tests now just to make sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759714</commentid>
    <comment_count>24</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-11-06 08:10:07 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; (In reply to comment #22)
&gt; &gt; Failed tests? That seems very curious.
&gt; 
&gt; Seems unlikely, rerunning all tests now just to make sure.

I was thinking the same thing, though the multicol tests are notoriously finicky with changes in LayoutUnits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759971</commentid>
    <comment_count>25</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-11-06 12:56:48 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #23)
&gt; &gt; (In reply to comment #22)
&gt; &gt; &gt; Failed tests? That seems very curious.
&gt; &gt; 
&gt; &gt; Seems unlikely, rerunning all tests now just to make sure.
&gt; 
&gt; I was thinking the same thing, though the multicol tests are notoriously finicky with changes in LayoutUnits.

The failures are all due to the inline enclosingLayoutRect function in LayoutTypesInlineMethods.h masking a function of the same name LayoutRect.cpp.

The LayoutTypesInlineMethods versions is an alias for enclosingIntRect, this is likely incorrect but I&apos;ll make that change in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760010</commentid>
    <comment_count>26</comment_count>
      <attachid>172641</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-11-06 13:42:43 -0800</bug_when>
    <thetext>Created attachment 172641
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760012</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-06 13:47:48 -0800</bug_when>
    <thetext>Attachment 172641 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1
Source/WebCore/platform/graphics/LayoutRect.h:215:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/LayoutUnit.h:191:  wtf_ceil is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/graphics/LayoutRect.cpp:38:  Use &apos;using namespace std;&apos; instead of &apos;using std::max;&apos;.  [build/using_std] [4]
Source/WebCore/platform/graphics/LayoutRect.cpp:39:  Use &apos;using namespace std;&apos; instead of &apos;using std::min;&apos;.  [build/using_std] [4]
Source/WebCore/platform/graphics/LayoutBoxExtent.cpp:187:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/LayoutBoxExtent.cpp:193:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 6 in 123 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760060</commentid>
    <comment_count>28</comment_count>
      <attachid>172641</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-06 14:36:46 -0800</bug_when>
    <thetext>Comment on attachment 172641
Patch

Attachment 172641 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14744515</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760094</commentid>
    <comment_count>29</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-11-06 15:07:43 -0800</bug_when>
    <thetext>The cr-linux bot failed to remove the old FractionalLayoutUnit.h file even though it is marked as deleted in the patch :( It is almost like the bots don&apos;t like me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760097</commentid>
    <comment_count>30</comment_count>
      <attachid>172658</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-11-06 15:13:21 -0800</bug_when>
    <thetext>Created attachment 172658
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760102</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-06 15:19:10 -0800</bug_when>
    <thetext>Attachment 172658 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1
Source/WebCore/platform/graphics/LayoutRect.h:215:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/LayoutUnit.h:191:  wtf_ceil is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/graphics/LayoutRect.cpp:38:  Use &apos;using namespace std;&apos; instead of &apos;using std::max;&apos;.  [build/using_std] [4]
Source/WebCore/platform/graphics/LayoutRect.cpp:39:  Use &apos;using namespace std;&apos; instead of &apos;using std::min;&apos;.  [build/using_std] [4]
Source/WebCore/platform/graphics/LayoutBoxExtent.cpp:187:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/LayoutBoxExtent.cpp:193:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 6 in 123 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760260</commentid>
    <comment_count>32</comment_count>
      <attachid>172658</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-06 18:06:50 -0800</bug_when>
    <thetext>Comment on attachment 172658
Patch

Attachment 172658 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14755305</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760292</commentid>
    <comment_count>33</comment_count>
      <attachid>172658</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-06 18:58:20 -0800</bug_when>
    <thetext>Comment on attachment 172658
Patch

Attachment 172658 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14745534</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760293</commentid>
    <comment_count>34</comment_count>
      <attachid>172658</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-06 19:02:08 -0800</bug_when>
    <thetext>Comment on attachment 172658
Patch

Attachment 172658 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14748467</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760423</commentid>
    <comment_count>35</comment_count>
      <attachid>172658</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-06 23:52:30 -0800</bug_when>
    <thetext>Comment on attachment 172658
Patch

Attachment 172658 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14762159

New failing tests:
fast/transforms/rotated-transform-affects-scrolling-2.html
fast/clip/overflow-border-radius-composited.html
compositing/tiling/tile-cache-zoomed.html
fast/transforms/rotated-transform-affects-scrolling-1.html
transforms/2d/hindi-rotated.html
fast/clip/overflow-border-radius-transformed.html
fast/forms/validation-message-appearance.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760444</commentid>
    <comment_count>36</comment_count>
      <attachid>172658</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-07 00:50:24 -0800</bug_when>
    <thetext>Comment on attachment 172658
Patch

Attachment 172658 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14762172

New failing tests:
fast/transforms/rotated-transform-affects-scrolling-2.html
fast/clip/overflow-border-radius-composited.html
compositing/tiling/tile-cache-zoomed.html
fast/transforms/rotated-transform-affects-scrolling-1.html
transforms/2d/hindi-rotated.html
fast/clip/overflow-border-radius-transformed.html
fast/forms/validation-message-appearance.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760735</commentid>
    <comment_count>37</comment_count>
      <attachid>172815</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-11-07 08:36:41 -0800</bug_when>
    <thetext>Created attachment 172815
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760740</commentid>
    <comment_count>38</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-07 08:40:31 -0800</bug_when>
    <thetext>Attachment 172815 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1
Source/WebCore/platform/graphics/LayoutRect.h:215:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/LayoutUnit.h:191:  wtf_ceil is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/graphics/LayoutRect.cpp:38:  Use &apos;using namespace std;&apos; instead of &apos;using std::max;&apos;.  [build/using_std] [4]
Source/WebCore/platform/graphics/LayoutRect.cpp:39:  Use &apos;using namespace std;&apos; instead of &apos;using std::min;&apos;.  [build/using_std] [4]
Source/WebCore/platform/graphics/LayoutBoxExtent.cpp:187:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/LayoutBoxExtent.cpp:193:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 6 in 124 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760767</commentid>
    <comment_count>39</comment_count>
      <attachid>172815</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-07 09:28:02 -0800</bug_when>
    <thetext>Comment on attachment 172815
Patch

Attachment 172815 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14761371</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760796</commentid>
    <comment_count>40</comment_count>
      <attachid>172815</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-07 09:50:46 -0800</bug_when>
    <thetext>Comment on attachment 172815
Patch

Attachment 172815 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14759414</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760820</commentid>
    <comment_count>41</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-11-07 10:08:05 -0800</bug_when>
    <thetext>Passed on mac now and the cr-linux bot is broken again (didn&apos;t remove old files). Please review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760827</commentid>
    <comment_count>42</comment_count>
      <attachid>172815</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-11-07 10:15:20 -0800</bug_when>
    <thetext>Comment on attachment 172815
Patch

You may want to warn the troopers before trying to land this. I suspect there&apos;ll need to be some clobbers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761170</commentid>
    <comment_count>43</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-11-07 16:37:38 -0800</bug_when>
    <thetext>Committed r133779: &lt;http://trac.webkit.org/changeset/133779&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172394</attachid>
            <date>2012-11-05 13:46:23 -0800</date>
            <delta_ts>2012-11-05 14:27:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93050-20121105134437.patch</filename>
            <type>text/plain</type>
            <size>394718</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzUxOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MyBAQAorMjAxMi0xMS0wNSAgRW1pbCBB
IEVrbHVuZCAgPGVhZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmVtb3ZlIExheW91dFR5cGVz
IGFic3RyYWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05MzA1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFJlbW92ZSBMYXlvdXRUeXBlcyBhYnN0cmFjdGlvbiBhbmQgcmVuYW1lIEZyYWN0aW9uYWxM
YXlvdXQqIHRvCisgICAgICAgIExheW91dCogbm93IHRoYXQgYWxsIHBsYXRmb3JtcyB1c2UgdGhl
IEZyYWN0aW9uYWxMYXlvdXQgdmVyc2lvbgorICAgICAgICAoYWxiZWl0IHdpdGggZGlmZmVyZW50
IGZyYWN0aW9ucykuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBjaGFuZ2UgaW4gZnVuY3Rp
b25hbGl0eS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2Vm
aWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJDb3JlLmV4
cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3Bw
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaDoKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiBjc3Mv
TGVuZ3RoRnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKiBjc3MvTGVuZ3RoRnVuY3Rpb25zLmg6Cisg
ICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogZG9tL0RvY3VtZW50TWFya2VyQ29u
dHJvbGxlci5oOgorICAgICAgICAqIGRvbS9FbGVtZW50UmFyZURhdGEuaDoKKyAgICAgICAgKiBk
b20vTW91c2VSZWxhdGVkRXZlbnQuaDoKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAq
IGRvbS9Ub3VjaC5oOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAg
ICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaDoKKyAgICAgICAgKiBlZGl0aW5nL1JlbmRl
cmVkUG9zaXRpb24uaDoKKyAgICAgICAgKiBodG1sL0hUTUxBcmVhRWxlbWVudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvclRpbWVsaW5lQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvVGltZWxpbmVSZWNv
cmRGYWN0b3J5LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5
Lmg6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmg6CisgICAgICAgICogcGFn
ZS9Gb2N1c0NvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorICAgICAg
ICAqIHBhZ2UvUGFnZS5oOgorICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwOgor
ICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9G
cmFjdGlvbmFsTGF5b3V0VW5pdC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL0xheW91
dFVuaXQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRnJhY3Rpb25hbExh
eW91dFVuaXQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9MZW5ndGguaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9Qb3B1cE1lbnVDbGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hbmltYXRpb24vQW5p
bWF0aW9uVXRpbGl0aWVzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2lu
dC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRSZWN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRT
aXplLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94RXh0
ZW50Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExh
eW91dFBvaW50Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rp
b25hbExheW91dFJlY3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ZyYWN0aW9uYWxMYXlvdXRSZWN0Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRnJhY3Rpb25hbExheW91dFNpemUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbnRSZWN0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50LmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dEJveEV4
dGVudC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50Lmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxM
YXlvdXRCb3hFeHRlbnQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRQb2lu
dC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlv
bmFsTGF5b3V0UG9pbnQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rp
b25hbExheW91dFJlY3QuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJl
Y3QuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rp
b25hbExheW91dFJlY3QuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRTaXpl
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9u
YWxMYXlvdXRTaXplLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlck9wZXJh
dGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVy
UGFyYW1ldGVyTGlzdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyT3BlcmF0aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJPcGVyYXRpb25zLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9WYWxp
ZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFBvaW50UXQuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxMYXlvdXRSZWN0UXQu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxM
YXlvdXRTaXplUXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0
L0xheW91dFBvaW50UXQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9GcmFjdGlvbmFsTGF5b3V0UG9pbnRRdC5jcHAuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvTGF5b3V0UmVjdFF0LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvTGF5b3V0U2l6ZVF0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFNpemVRdC5jcHAuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25zLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25N
YXRyaXguY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNm
b3JtYXRpb25NYXRyaXguaDoKKyAgICAgICAgKiByZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0Lmg6
CisgICAgICAgICogcmVuZGVyaW5nL0NvbHVtbkluZm8uaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmg6CisgICAgICAgICogcmVuZGVyaW5nL0ZpbHRlckVm
ZmVjdFJlbmRlcmVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvR2FwUmVjdHMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0
VGVzdFJlc3VsdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0aW5nVHJhbnNmb3JtU3Rh
dGUuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgICogcmVuZGVy
aW5nL0xheW91dFJlcGFpbnRlci5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL0xheW91dFJlcGFp
bnRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRTdGF0ZS5oOgorICAgICAgICAqIHJl
bmRlcmluZy9MYXlvdXRUeXBlcy5oOgorICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRUeXBlc0lu
bGluZU1ldGhvZHMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUGFpbnRJbmZvLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
QmxvY2suaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNw
cDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJG
bGV4aWJsZUJveC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3Bw
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJHZW9tZXRyeU1hcC5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNlLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
cklubGluZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmg6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlz
dE1hcmtlci5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVs
dGlDb2x1bW5TZXQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJl
YWQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT3Zl
cmZsb3cuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUYWJsZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
aGVtZUNocm9taXVtQ29tbW9uLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVD
aHJvbWl1bUNvbW1vbi5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJWaWV3Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVj
ZUltYWdlLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuY3BwOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdHlsZS9TaGFkb3dEYXRhLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2Fj
aGVkSW1hZ2VTZXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZS5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oOgorCiAyMDEyLTExLTA1
ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBs
YXllciBib3JkZXJzIHRvIGNsZWFuaW5nIGFwcGVhciBhbmQgZGlzYXBwZWFyIG9uIHN3aXRjaGlu
ZwpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xODc1LDggKzE4NzUsOCBA
QCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbWlseS5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udEZlYXR1cmVTZXR0aW5ncy5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9G
cmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0
aW9uYWxMYXlvdXRSZWN0LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0xheW91dEJveEV4dGVu
dC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0LmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dlbmVy
YXRvckdlbmVyYXRlZEltYWdlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRy
ZWVOb2RlLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAx
MzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNv
cHkpCkBAIC00Mjc3LDcgKzQyNzcsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9GaWxlU3lzdGVtLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Zsb2F0Q29udmVyc2lv
bi5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GcmFjdGlvbmFsTGF5b3V0VW5pdC5oIFwK
KwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYXlvdXRVbml0LmggXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0dhbWVwYWRzLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hhc2hUb29s
cy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9IaXN0b2dyYW1TdXBwb3J0LmNwcCBcCkBA
IC00NDQxLDEyICs0NDQxLDEyIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNtb290aGluZ01vZGUuaCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFRyYWl0c01hc2suaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udFdpZHRoVmFyaWFudC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmNwcCBcCi0JU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oIFwK
LQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UG9pbnQu
aCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJl
Y3QuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5
b3V0UmVjdC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFs
TGF5b3V0U2l6ZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRC
b3hFeHRlbnQuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRC
b3hFeHRlbnQuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UG9p
bnQuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UmVjdC5jcHAg
XAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJlY3QuaCBcCisJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0U2l6ZS5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmggXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRvci5oIFwKQEAgLTQ5ODksOCArNDk4OSw2IEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmggXAotCVNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9MYXlvdXRUeXBlcy5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0
VHlwZXNJbmxpbmVNZXRob2RzLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRS
ZXBhaW50ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFJlcGFpbnRlci5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9PdmVybGFwVGVzdFJlcXVlc3RDbGllbnQu
aCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTk2OCw4ICs5NjgsOCBAQCBTT1VSQ0VTICs9
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNw
cCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5jcHAg
XAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcCBcCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50LmNwcCBcCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvTGF5b3V0UmVjdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZElt
YWdlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2Uu
Y3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAgXApAQCAt
Mjc4MSw5ICsyNzgxLDkgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
RmxvYXRQb2ludFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRmxvYXRSZWN0UXQu
Y3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9GbG9hdFNpemVRdC5jcHAgXAotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxMYXlvdXRQb2ludFF0LmNwcCBcCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFJlY3RRdC5jcHAgXAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxMYXlvdXRTaXplUXQuY3BwIFwKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9MYXlvdXRQb2ludFF0LmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvTGF5b3V0UmVjdFF0LmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTGF5b3V0U2l6
ZVF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhZGllbnRRdC5jcHAgXAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcCBcCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvSWNvblF0LmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2
aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTE0Nyw3ICsxNDcsNiBAQCBfX1pON1dlYkNvcmUxMU1lbW9yeUNhY2hlMTNzZXRD
YXBhY2l0aWVzCiBfX1pON1dlYkNvcmUxMU1lbW9yeUNhY2hlMTRldmljdFJlc291cmNlc0V2CiBf
X1pON1dlYkNvcmUxMU1lbW9yeUNhY2hlMTlnZXRPcmlnaW5zV2l0aENhY2hlRVJOM1dURjdIYXNo
U2V0SU5TMV82UmVmUHRySU5TXzE0U2VjdXJpdHlPcmlnaW5FRUVOU18xOFNlY3VyaXR5T3JpZ2lu
SGFzaEVOUzFfMTBIYXNoVHJhaXRzSVM1X0VFRUUKIF9fWk43V2ViQ29yZTExTWVtb3J5Q2FjaGUy
NXJlbW92ZVJlc291cmNlc1dpdGhPcmlnaW5FUE5TXzE0U2VjdXJpdHlPcmlnaW5FCi1fX1pON1dl
YkNvcmUxMVJlbmRlckxheWVyMTlzY3JvbGxSZWN0VG9WaXNpYmxlRVJLTlNfMjBGcmFjdGlvbmFs
TGF5b3V0UmVjdEVSS05TXzE1U2Nyb2xsQWxpZ25tZW50RVM2XwogX19aTjdXZWJDb3JlMTFVUkxX
aXRoRGF0YUVQNk5TRGF0YVA1TlNVUkwKIF9fWk43V2ViQ29yZTExbWVtb3J5Q2FjaGVFdgogX19a
TjdXZWJDb3JlMTFzdGFydE9mV29yZEVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRU5TXzlFV29yZFNp
ZGVFCkBAIC0xNTksNyArMTU4LDcgQEAgX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxNHNjcm9s
bE92ZXJmbAogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxNWhhbmRsZUFjY2Vzc0tleUVSS05T
XzIxUGxhdGZvcm1LZXlib2FyZEV2ZW50RQogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxNmhh
bmRsZVdoZWVsRXZlbnRFUktOU18xOFBsYXRmb3JtV2hlZWxFdmVudEUKIF9fWk43V2ViQ29yZTEy
RXZlbnRIYW5kbGVyMTdzY3JvbGxSZWN1cnNpdmVseUVOU18xNVNjcm9sbERpcmVjdGlvbkVOU18x
N1Njcm9sbEdyYW51bGFyaXR5RVBOU180Tm9kZUUKLV9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVy
MjBoaXRUZXN0UmVzdWx0QXRQb2ludEVSS05TXzIxRnJhY3Rpb25hbExheW91dFBvaW50RWJiTlNf
MTdIaXRUZXN0U2Nyb2xsYmFyc0VqUktOU18yMEZyYWN0aW9uYWxMYXlvdXRTaXplRQorX19aTjdX
ZWJDb3JlMTJFdmVudEhhbmRsZXIyMGhpdFRlc3RSZXN1bHRBdFBvaW50RVJLTlNfMTFMYXlvdXRQ
b2ludEViYk5TXzE3SGl0VGVzdFNjcm9sbGJhcnNFalJLTlNfMTBMYXlvdXRTaXplRQogX19aTjdX
ZWJDb3JlMTJFdmVudEhhbmRsZXIyMWhhbmRsZU1vdXNlUHJlc3NFdmVudEVSS05TXzE4UGxhdGZv
cm1Nb3VzZUV2ZW50RQogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyM2hhbmRsZU1vdXNlUmVs
ZWFzZUV2ZW50RVJLTlNfMThQbGF0Zm9ybU1vdXNlRXZlbnRFCiBfX1pON1dlYkNvcmUxMkV2ZW50
SGFuZGxlcjI0bG9naWNhbFNjcm9sbFJlY3Vyc2l2ZWx5RU5TXzIyU2Nyb2xsTG9naWNhbERpcmVj
dGlvbkVOU18xN1Njcm9sbEdyYW51bGFyaXR5RVBOU180Tm9kZUUKQEAgLTE4NSw4ICsxODQsNyBA
QCBfX1pON1dlYkNvcmUxMlByaW50Q29udGV4dDlzcG9vbFBhZ2VFUk5TCiBfX1pON1dlYkNvcmUx
MlByaW50Q29udGV4dDlzcG9vbFJlY3RFUk5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfN0ludFJl
Y3RFCiBfX1pON1dlYkNvcmUxMlByaW50Q29udGV4dEMxRVBOU181RnJhbWVFCiBfX1pON1dlYkNv
cmUxMlByaW50Q29udGV4dEQxRXYKLV9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVjdDE2cmVwYWlu
dFJlY3RhbmdsZUVSS05TXzIwRnJhY3Rpb25hbExheW91dFJlY3RFYgotX19aTjdXZWJDb3JlMTJS
ZW5kZXJPYmplY3QxOXNjcm9sbFJlY3RUb1Zpc2libGVFUktOU18yMEZyYWN0aW9uYWxMYXlvdXRS
ZWN0RVJLTlNfMTVTY3JvbGxBbGlnbm1lbnRFUzZfCitfX1pON1dlYkNvcmUxMlJlbmRlck9iamVj
dDE5c2Nyb2xsUmVjdFRvVmlzaWJsZUVSS05TXzEwTGF5b3V0UmVjdEVSS05TXzE1U2Nyb2xsQWxp
Z25tZW50RVM2XwogX19aTjdXZWJDb3JlMTJTaGFyZWRCdWZmZXIxMHdyYXBDRkRhdGFFUEs4X19D
RkRhdGEKIF9fWk43V2ViQ29yZTEyU2hhcmVkQnVmZmVyMTB3cmFwTlNEYXRhRVA2TlNEYXRhCiBf
X1pON1dlYkNvcmUxMlNoYXJlZEJ1ZmZlcjEyY3JlYXRlTlNEYXRhRXYKQEAgLTQ2Niw3ICs0NjQs
NiBAQCBfX1pON1dlYkNvcmUxNlZpc2libGVTZWxlY3Rpb25DMUVSS05TXzE1CiBfX1pON1dlYkNv
cmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUEtOU180Tm9kZUUKIF9fWk43V2ViQ29yZTE2Y3JlYXRlRnVs
bE1hcmt1cEVQS05TXzVSYW5nZUUKIF9fWk43V2ViQ29yZTE2ZGVsZXRlQWxsQ29va2llc0V2Ci1f
X1pON1dlYkNvcmUxNmVuY2xvc2luZ0ludFJlY3RFUktOU18yMEZyYWN0aW9uYWxMYXlvdXRSZWN0
RQogX19aTjdXZWJDb3JlMTZlbmNsb3NpbmdJbnRSZWN0RVJLTlNfOUZsb2F0UmVjdEUKIF9fWk43
V2ViQ29yZTE2aXNFbmRPZlBhcmFncmFwaEVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRU5TXzI3RWRp
dGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlRQogX19aTjdXZWJDb3JlMTZpc1VzZXJWaXNpYmxlVVJM
RVA4TlNTdHJpbmcKQEAgLTg2Miw3ICs4NTksNiBAQCBfX1pON1dlYkNvcmU3RWxlbWVudDlpbm5l
clRleHRFdgogX19aTjdXZWJDb3JlN0ludFJlY3Q1c2NhbGVFZgogX19aTjdXZWJDb3JlN0ludFJl
Y3Q1dW5pdGVFUktTMF8KIF9fWk43V2ViQ29yZTdJbnRSZWN0OWludGVyc2VjdEVSS1MwXwotX19a
TjdXZWJDb3JlN0ludFJlY3RDMUVSS05TXzIwRnJhY3Rpb25hbExheW91dFJlY3RFCiBfX1pON1dl
YkNvcmU3SW50UmVjdEMxRVJLTlNfOUZsb2F0UmVjdEUKIF9fWk43V2ViQ29yZTdJbnRTaXplQzFF
Uks2Q0dTaXplCiBfX1pON1dlYkNvcmU3UnVuTG9vcDE0cnVuRm9yRHVyYXRpb25FZApAQCAtMTAw
Miw5ICs5OTgsNyBAQCBfX1pON1dlYkNvcmU4dG9TdHJpbmdFUktOM1dURjZWZWN0b3JJTlNfCiBf
X1pON1dlYkNvcmU5RE9NV2luZG93MzBkaXNwYXRjaEFsbFBlbmRpbmdVbmxvYWRFdmVudHNFdgog
X19aTjdXZWJDb3JlOURPTVdpbmRvdzM2ZGlzcGF0Y2hBbGxQZW5kaW5nQmVmb3JlVW5sb2FkRXZl
bnRzRXYKIF9fWk43V2ViQ29yZTlGbG9hdFJlY3RDMUVSSzZDR1JlY3QKLV9fWk43V2ViQ29yZTlG
bG9hdFJlY3RDMUVSS05TXzIwRnJhY3Rpb25hbExheW91dFJlY3RFCiBfX1pON1dlYkNvcmU5Rmxv
YXRSZWN0QzFFUktOU183SW50UmVjdEUKLV9fWk43V2ViQ29yZTlGbG9hdFNpemVDMUVSS05TXzIw
RnJhY3Rpb25hbExheW91dFNpemVFCiBfX1pON1dlYkNvcmU5RmxvYXRTaXplQzFFUktOU183SW50
U2l6ZUUKIF9fWk43V2ViQ29yZTlGb250Q2FjaGUxM2ZvbnREYXRhQ291bnRFdgogX19aTjdXZWJD
b3JlOUZvbnRDYWNoZTIxaW5hY3RpdmVGb250RGF0YUNvdW50RXYKQEAgLTExODYsNiArMTE4MCw3
IEBAIF9fWk5LN1dlYkNvcmUxMVJlbmRlclN0eWxlNGZvbnRFdgogX19aTks3V2ViQ29yZTExU2Ny
aXB0VmFsdWU5Z2V0U3RyaW5nRVBOM0pTQzlFeGVjU3RhdGVFUk4zV1RGNlN0cmluZ0UKIF9fWk5L
N1dlYkNvcmUxMlJlbmRlck9iamVjdDE0ZW5jbG9zaW5nTGF5ZXJFdgogX19aTks3V2ViQ29yZTEy
UmVuZGVyT2JqZWN0MTVsb2NhbFRvQWJzb2x1dGVFUktOU18xMEZsb2F0UG9pbnRFagorX19aTks3
V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTZyZXBhaW50UmVjdGFuZ2xlRVJLTlNfMTBMYXlvdXRSZWN0
RWIKIF9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVjdDIwbG9jYWxUb0NvbnRhaW5lclF1YWRFUktO
U185RmxvYXRRdWFkRVBOU18yMlJlbmRlckxheWVyTW9kZWxPYmplY3RFalBiCiBfX1pOSzdXZWJD
b3JlMTJSZW5kZXJPYmplY3QyM2Fic29sdXRlQm91bmRpbmdCb3hSZWN0RWIKIF9fWk5LN1dlYkNv
cmUxMlJlbmRlck9iamVjdDM5cGl4ZWxTbmFwcGVkQWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0
RXYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzc0LDggKzM3NCw4IEBACiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNtb290aGluZ01vZGUuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRm9udFRyYWl0c01hc2suaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udFdpZHRoVmFyaWFudC5oJywKLSAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5oJywKLSAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0U2l6ZS5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL0xheW91dFNpemUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJh
dG9yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgnLApAQCAtNTU4LDggKzU1OCw2
IEBACiAgICAgICAgICAgICAncmVuZGVyaW5nL0lubGluZUZsb3dCb3guaCcsCiAgICAgICAgICAg
ICAncmVuZGVyaW5nL0lubGluZVRleHRCb3guaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL0xh
eW91dFN0YXRlLmgnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9MYXlvdXRUeXBlcy5oJywKLSAg
ICAgICAgICAgICdyZW5kZXJpbmcvTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgnLAogICAgICAg
ICAgICAgJ3JlbmRlcmluZy9MYXlvdXRSZXBhaW50ZXIuaCcsCiAgICAgICAgICAgICAncmVuZGVy
aW5nL092ZXJsYXBUZXN0UmVxdWVzdENsaWVudC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcv
UGFnaW5hdGlvbi5oJywKQEAgLTQ3ODYsNyArNDc4NCw3IEBACiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRQbGF0Zm9ybURhdGEuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
RnJhY3Rpb25hbExheW91dEJveEV4dGVudC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL0xheW91dEJveEV4dGVudC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL0dlbmVyYXRvckdlbmVyYXRlZEltYWdlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9HZW5lcmF0ZWRJbWFnZS5oJywKQEAgLTU5MDQsNyArNTkwMiw3IEBACiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UmVjdC5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9u
YWxMYXlvdXRSZWN0LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0
UmVjdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25N
YXRyaXguY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0Fm
ZmluZVRyYW5zZm9ybS5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yODM5MSw3ICsy
ODM5MSw3IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsYXRmb3JtXEZyYWN0aW9uYWxMYXlvdXRVbml0LmgiCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxwbGF0Zm9ybVxMYXlvdXRVbml0LmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKQEAg
LTI5NDc4LDI3ICsyOTQ3OCwyNyBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCi0J
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRnJhY3Rpb25hbExheW91dEJv
eEV4dGVudC5oIgorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXExheW91
dEJveEV4dGVudC5oIgogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCi0JCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5j
cHAiCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcTGF5b3V0Qm94RXh0
ZW50LmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZyYWN0aW9uYWxMYXlvdXRQb2ludC5oIgorCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXExheW91dFBvaW50LmgiCiAJCQkJCT4K
IAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxn
cmFwaGljc1xGcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAiCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcTGF5b3V0UmVjdC5jcHAiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJ
CQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGcmFjdGlv
bmFsTGF5b3V0UmVjdC5oIgorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XExheW91dFJlY3QuaCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQotCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZyYWN0aW9uYWxMYXlvdXRTaXplLmgiCisJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcTGF5b3V0U2l6ZS5oIgogCQkJ
CQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMzM1MTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTMwNCw2ICszMDQsMTMgQEAKIAkJMTQxMTVCNzIwOUY4NENENjAwQ0E0RkMxIC8q
IEpTTm9kZUZpbHRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNDExNUI3MDA5Rjg0Q0Q2MDBDQTRGQzEgLyogSlNOb2RlRmlsdGVyLmNwcCAqLzsg
fTsKIAkJMTQxMTVCNzMwOUY4NENENjAwQ0E0RkMxIC8qIEpTTm9kZUZpbHRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxMTVCNzEwOUY4NENENjAw
Q0E0RkMxIC8qIEpTTm9kZUZpbHRlci5oICovOyB9OwogCQkxNDE5RDJDNTBDRUE2RjYxMDBGRjUw
N0EgLyogVHJlZVNoYXJlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTQxOUQyQzQwQ0VBNkY2MTAwRkY1MDdBIC8qIFRyZWVTaGFyZWQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNDFEQzA0ODE2NDgz
NDhGMDAzNzFFNUEgLyogTGF5b3V0VW5pdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTQxREMwNDcxNjQ4MzQ4RjAwMzcxRTVBIC8qIExheW91dFVuaXQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNDFE
QzA0RjE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0Qm94RXh0ZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MURDMDQ5MTY0ODM0QjkwMDM3MUU1
QSAvKiBMYXlvdXRCb3hFeHRlbnQuY3BwICovOyB9OworCQkxNDFEQzA1MDE2NDgzNEI5MDAzNzFF
NUEgLyogTGF5b3V0Qm94RXh0ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDFEQzA0QTE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0Qm94RXh0ZW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTQx
REMwNTExNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dFBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDFEQzA0QjE2NDgzNEI5MDAzNzFFNUEgLyog
TGF5b3V0UG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkxNDFEQzA1MjE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0UmVjdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDFEQzA0QzE2NDgzNEI5
MDAzNzFFNUEgLyogTGF5b3V0UmVjdC5jcHAgKi87IH07CisJCTE0MURDMDUzMTY0ODM0QjkwMDM3
MUU1QSAvKiBMYXlvdXRSZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNDFEQzA0RDE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0UmVjdC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0MURDMDU0MTY0
ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRTaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNDFEQzA0RTE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0U2l6
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0
MjAxMUI2MEEwMDMxMzMwMDgzMDNGOSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQyMDExQjQwQTAwMzEz
MzAwODMwM0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi87IH07CiAJCTE0MjAxMUI3
MEEwMDMxMzMwMDgzMDNGOSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MjAxMUI1MEEwMDMxMzMwMDgzMDNG
OSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDJCOTdDOTEzMTM4OTQzMDA4QkVGNEIgLyogVGV4dENv
bnRyb2xJbm5lckVsZW1lbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0MkI5N0M3MTMxMzg5NDMwMDhCRUY0QiAvKiBUZXh0Q29udHJvbElubmVy
RWxlbWVudHMuY3BwICovOyB9OwpAQCAtMzEzLDEwICszMjAsNiBAQAogCQkxNDQ3NkFBODE1REM0
QkIxMDAzMDVEQjIgLyogV3JpdGluZ01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0NDc2QUE3MTVEQzRCQjEwMDMwNURCMiAvKiBXcml0aW5nTW9k
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0
NDlFMjRDMTA3RDRBODQwMEI1NzkzRiAvKiBKU0NhbGxiYWNrRGF0YS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0OUUyNEExMDdENEE4NDAwQjU3OTNG
IC8qIEpTQ2FsbGJhY2tEYXRhLmggKi87IH07CiAJCTE0NDlFMjg3MTA3RDREQjQwMEI1NzkzRiAv
KiBKU0NhbGxiYWNrRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNDQ5RTI4NjEwN0Q0REI0MDBCNTc5M0YgLyogSlNDYWxsYmFja0RhdGEuY3Bw
ICovOyB9OwotCQkxNDRGQ0U1MjE0RUM3OUJDMDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFVu
aXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NEZD
RTUxMTRFQzc5QkMwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0VW5pdC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTE0NEZDRTVEMTRFQzc5RTcw
MDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0U2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0RkNFNTgxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0
aW9uYWxMYXlvdXRTaXplLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJMTQ0RkNGRTAxNEVGMjUwOTAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRS
ZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
NEZDRkRFMTRFRjI1MDkwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAgKi87IH07
Ci0JCTE0NEZDRkUxMTRFRjI1MDkwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0RkNGREYxNEVG
MjUwOTAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ2NEUwNkMxMzVFQzEwNjAwRkRCMDBB
IC8qIEpTTWVkaWFMaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE0NjRFMDZCMTM1RUMxMDYwMEZEQjAwQSAvKiBKU01lZGlhTGlzdEN1
c3RvbS5jcHAgKi87IH07CiAJCTE0NkNDMTE1MTU2OTg4RTQwMDEwOUUzNyAvKiBMZW5ndGhCb3gu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2Q0Mx
MTMxNTY5ODhCRDAwMTA5RTM3IC8qIExlbmd0aEJveC5jcHAgKi87IH07CiAJCTE0NzdFNzc2MEJG
NDEzNEEwMDE1Mjg3MiAvKiBQYWdlQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3N0U3NzQwQkY0MTM0QTAwMTUyODcyIC8qIFBhZ2VDYWNo
ZS5jcHAgKi87IH07CkBAIC0zMjksOCArMzMyLDYgQEAKIAkJMTQ3OUZBRjIxMDlBRTM3NTAwREVE
NjU1IC8qIFJlbmRlclJ1YnlSdW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0NzlGQUVBMTA5QUUzNzUwMERFRDY1NSAvKiBSZW5kZXJSdWJ5UnVuLmgg
Ki87IH07CiAJCTE0NzlGQUYzMTA5QUUzNzUwMERFRDY1NSAvKiBSZW5kZXJSdWJ5VGV4dC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDc5RkFFQjEw
OUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieVRleHQuY3BwICovOyB9OwogCQkxNDc5RkFGNDEw
OUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieVRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NzlGQUVDMTA5QUUzNzUwMERFRDY1NSAvKiBSZW5k
ZXJSdWJ5VGV4dC5oICovOyB9OwotCQkxNDgyRTBDNjE1NkMzNkRFMDA5NjUwNjUgLyogRnJhY3Rp
b25hbExheW91dEJveEV4dGVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDgyRTBDNDE1NkMzNkRFMDA5NjUwNjUgLyogRnJhY3Rpb25hbExheW91
dEJveEV4dGVudC5jcHAgKi87IH07Ci0JCTE0ODJFMEM3MTU2QzM2REUwMDk2NTA2NSAvKiBGcmFj
dGlvbmFsTGF5b3V0Qm94RXh0ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDgyRTBDNTE1NkMzNkRFMDA5NjUwNjUgLyogRnJhY3Rpb25hbExheW91
dEJveEV4dGVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTE0OEFGREE1MEFGNTgzNjAwMDhDQzcwMCAvKiBFeGNlcHRpb25IYW5kbGVycy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4QUZEQTMwQUY1
ODM2MDAwOENDNzAwIC8qIEV4Y2VwdGlvbkhhbmRsZXJzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ4QUZEQTYwQUY1ODM2MDAwOENDNzAwIC8q
IEV4Y2VwdGlvbkhhbmRsZXJzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTQ4QUZEQTQwQUY1ODM2MDAwOENDNzAwIC8qIEV4Y2VwdGlvbkhhbmRsZXJz
Lm1tICovOyB9OwogCQkxNDk0N0ZGRDEyRjgwQ0QyMDBBMEY2MzEgLyogRG9jdW1lbnRPcmRlcmVk
TWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
OTQ3RkZCMTJGODBDRDIwMEEwRjYzMSAvKiBEb2N1bWVudE9yZGVyZWRNYXAuY3BwICovOyB9OwpA
QCAtOTIzLDcgKzkyNCw2IEBACiAJCTMxOUU2OUI1MTMyOTlCQkQwMDRBQzkxQSAvKiBXZWJLaXRB
bmltYXRpb25MaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxOUU2OUFGMTMyOTlCQkQwMDRBQzkxQSAvKiBXZWJLaXRBbmltYXRpb25MaXN0LmNw
cCAqLzsgfTsKIAkJMzE5RTY5QjYxMzI5OUJCRDAwNEFDOTFBIC8qIFdlYktpdEFuaW1hdGlvbkxp
c3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxOUU2
OUIwMTMyOTlCQkQwMDRBQzkxQSAvKiBXZWJLaXRBbmltYXRpb25MaXN0LmggKi87IH07CiAJCTMx
OUZCRDVGMTVEMkY0NjQwMDk2NDBBNiAvKiBDYWNoZWRJbWFnZUNsaWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE5RkJENUQxNUQyRjQ0NDAwOTY0
MEE2IC8qIENhY2hlZEltYWdlQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJMzFCODAxQkIxNUVDNThDNzAwQ0U2NDNEIC8qIExheW91dFR5
cGVzSW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODQ4OTRDQTgxNUVDNDg5NzAwQTQwNDgxIC8qIExheW91dFR5cGVzSW5saW5lTWV0
aG9kcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTMxQzBGRjIxMEU0Q0VCNkUwMDdENkZFNSAvKiBXZWJLaXRBbmltYXRpb25FdmVudC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUMwRkYxQjBFNENF
QjZFMDA3RDZGRTUgLyogV2ViS2l0QW5pbWF0aW9uRXZlbnQuY3BwICovOyB9OwogCQkzMUMwRkYy
MjBFNENFQjZFMDA3RDZGRTUgLyogV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQzBGRjFDMEU0Q0VCNkUwMDdENkZF
NSAvKiBXZWJLaXRBbmltYXRpb25FdmVudC5oICovOyB9OwogCQkzMUMwRkYyNDBFNENFQjZFMDA3
RDZGRTUgLyogV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQzBGRjFFMEU0Q0VCNkUwMDdENkZFNSAvKiBXZWJL
aXRUcmFuc2l0aW9uRXZlbnQuY3BwICovOyB9OwpAQCAtNTI4Myw4ICs1MjgzLDYgQEAKIAkJQjhE
QkRCNEMxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ4MTMwQjBGOEEwMEY1
Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmggKi87IH07CiAJCUI4REJEQjREMTMwQjBGOEEw
MEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ5MTMwQjBGOEEwMEY1Q0RCMSAv
KiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCAqLzsgfTsKIAkJQjhEQkRCNEUxMzBCMEY4
QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjRBMTMwQjBGOEEwMEY1Q0RCMSAv
KiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmggKi87IH07Ci0JCUJBQjFDMDZBMTRGQzM2Nzkw
MDQyMzNGQyAvKiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NEZDRTU0MTRFQzc5RTcwMDBEMTdBMyAvKiBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQlCQUNGMjkwMTEzQjJBMEQ1MDA3ODFGOTAgLyogTGF5b3V0VHlwZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJBQ0YyOTAwMTNC
MkEwRDUwMDc4MUY5MCAvKiBMYXlvdXRUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMDBGMDA0MEUwQTE4NTUwMEZEMDRFMyAvKiBET01G
aWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAw
RUZGRTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5oICovOyB9OwogCQlCQzAwRjAwNTBFMEEx
ODU1MDBGRDA0RTMgLyogRE9NRmlsZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDMDBFRkZGMEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLm1tICov
OyB9OwogCQlCQzAwRjAwNjBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZUludGVybmFsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAwRjAwMDBFMEEx
ODU1MDBGRDA0RTMgLyogRE9NRmlsZUludGVybmFsLmggKi87IH07CkBAIC03MzgzLDYgKzczODEs
MTMgQEAKIAkJMTQxOUQyQzQwQ0VBNkY2MTAwRkY1MDdBIC8qIFRyZWVTaGFyZWQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJlZVNoYXJlZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDFCOTRFNTA5RUM0MjIzMDAwRTk0MTMgLyogTW91c2VFdmVudC5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE1vdXNlRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDFCOTRFRTA5RUM0MjVBMDAwRTk0MTMgLyogVUlFdmVudC5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IFVJRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxNDFEQzA0NzE2NDgzNDhGMDAzNzFFNUEgLyogTGF5b3V0VW5pdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRVbml0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTE0MURDMDQ5MTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRCb3hFeHRlbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0Qm94RXh0ZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQxREMwNEExNjQ4MzRCOTAwMzcx
RTVBIC8qIExheW91dEJveEV4dGVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBMYXlvdXRCb3hFeHRlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQxREMw
NEIxNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dFBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IExheW91dFBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTE0MURDMDRDMTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRSZWN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dFJlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxNDFEQzA0RDE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0UmVjdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRSZWN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTE0MURDMDRFMTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRTaXpl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dFNpemUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQyMDExQUUwQTAwMzExNzAwODMwM0Y5IC8qIENTU1N0
eWxlRGVjbGFyYXRpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBDU1NTdHlsZURlY2xh
cmF0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQyMDExQjQwQTAwMzEz
MzAwODMwM0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNDU1NTdHlsZURlY2xhcmF0aW9uLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQyMDExQjUwQTAwMzEzMzAwODMwM0Y5IC8qIEpTQ1NTU3R5
bGVEZWNsYXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDU1NT
dHlsZURlY2xhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MzkzLDEx
ICs3Mzk4LDYgQEAKIAkJMTQ0NzZBQTcxNURDNEJCMTAwMzA1REIyIC8qIFdyaXRpbmdNb2RlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRpbmdNb2RlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NDlFMjRBMTA3RDRBODQwMEI1NzkzRiAvKiBKU0NhbGxi
YWNrRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbGxiYWNrRGF0
YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDQ5RTI4NjEwN0Q0REI0MDBCNTc5
M0YgLyogSlNDYWxsYmFja0RhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNDYWxsYmFja0RhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkx
NDRGQ0U1MTE0RUM3OUJDMDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFVuaXQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnJhY3Rpb25hbExheW91dFVuaXQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTQ0RkNFNTQxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0
aW9uYWxMYXlvdXRQb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTQ0RkNF
NTgxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRTaXplLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYWN0aW9uYWxMYXlvdXRTaXplLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTE0NEZDRkRFMTRFRjI1MDkwMDBEMTdBMyAvKiBGcmFjdGlvbmFs
TGF5b3V0UmVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGcmFj
dGlvbmFsTGF5b3V0UmVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0NEZD
RkRGMTRFRjI1MDkwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGcmFjdGlvbmFsTGF5b3V0UmVjdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNDY0RTA2QjEzNUVDMTA2MDBGREIwMEEgLyogSlNNZWRpYUxp
c3RDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNNZWRp
YUxpc3RDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDZDQzExMzE1
Njk4OEJEMDAxMDlFMzcgLyogTGVuZ3RoQm94LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IExlbmd0aEJveC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTE0NzdFNzc0MEJGNDEzNEEwMDE1Mjg3MiAvKiBQYWdlQ2FjaGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC03NDExLDggKzc0MTEsNiBAQAogCQkxNDc5RkFFQjEwOUFFMzc1MDBERUQ2
NTUgLyogUmVuZGVyUnVieVRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmVuZGVyUnVieVRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NDc5RkFFQzEwOUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieVRleHQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyUnVieVRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTQ4MTNCRjMwOUVERjg4RTAwRjc1N0UxIC8qIElETFBhcnNlci5wbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0LnNjcmlwdC5wZXJsOyBuYW1lID0gSURMUGFyc2VyLnBtOyBwYXRoID0gc2Ny
aXB0cy9JRExQYXJzZXIucG07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0ODJFMEM0
MTU2QzM2REUwMDk2NTA2NSAvKiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxNDgyRTBDNTE1NkMzNkRFMDA5NjUw
NjUgLyogRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTE0OEFGREEzMEFGNTgzNjAwMDhDQzcwMCAvKiBFeGNlcHRpb25IYW5kbGVy
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjZXB0aW9uSGFuZGxlcnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4QUZEQTQwQUY1ODM2MDAwOENDNzAw
IC8qIEV4Y2VwdGlvbkhhbmRsZXJzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IEV4Y2VwdGlvbkhhbmRsZXJzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxNDk0N0ZGQjEyRjgwQ0QyMDBBMEY2MzEgLyogRG9jdW1lbnRPcmRlcmVkTWFwLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERvY3VtZW50T3JkZXJlZE1hcC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05Mzc4LDcgKzkzNzYsNiBAQAogCQk4
NDg1MjI4NzExOTAxNzNDMDA2RURDN0YgLyogU1ZHVktlcm5FbGVtZW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1ZLZXJuRWxlbWVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0ODUyMjg4MTE5MDE3M0MwMDZFREM3RiAvKiBTVkdWS2Vy
bkVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVktlcm5FbGVt
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0ODUyMjg5MTE5MDE3M0MwMDZF
REM3RiAvKiBTVkdWS2VybkVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNWR1ZL
ZXJuRWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg0ODk0Q0E4MTVF
QzQ4OTcwMEE0MDQ4MSAvKiBMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0OUY3Nzc1MEVGRUM2MjAwMDkwODQ5RCAvKiBTdHJva2VT
dHlsZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Ryb2tlU3R5
bGVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0QTgxRjNCMEZDN0RG
RjAwMDk1NTMwMCAvKiBTb3VyY2VBbHBoYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBTb3VyY2VBbHBoYS5jcHA7IHBhdGggPSBmaWx0ZXJzL1NvdXJjZUFscGhhLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODRBODFGM0MwRkM3REZGMDAwOTU1MzAw
IC8qIFNvdXJjZUFscGhhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNvdXJj
ZUFscGhhLmg7IHBhdGggPSBmaWx0ZXJzL1NvdXJjZUFscGhhLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMjYxMSw3ICsxMjYwOCw2IEBACiAJCUI4REJEQjQ4MTMwQjBGOEEwMEY1
Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNldFNlbGVjdGlvbkNvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQjhEQkRCNDkxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3BlbGxpbmdDb3JyZWN0
aW9uQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI4REJEQjRBMTMw
QjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkFDRjI5MDAxM0IyQTBENTAwNzgxRjkwIC8qIExheW91
dFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dFR5cGVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDBFRkZFMEUwQTE4NTUwMEZEMDRFMyAv
KiBET01GaWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUZpbGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMEVGRkYwRTBBMTg1NTAwRkQwNEUzIC8q
IERPTUZpbGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01G
aWxlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAwRjAwMDBFMEExODU1MDBG
RDA0RTMgLyogRE9NRmlsZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERPTUZpbGVJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTk5
NzAsMTIgKzE5OTY2LDEyIEBACiAJCQkJMzcyMDIxOTgxMDYyMTNDNjAwRjI1QzRCIC8qIEZvbnRT
bW9vdGhpbmdNb2RlLmggKi8sCiAJCQkJMzc4NEMzNEEwRTExQUEzNDAwN0Q4RDQ4IC8qIEZvbnRU
cmFpdHNNYXNrLmggKi8sCiAJCQkJQkNFNDQxMzUxMkY3NDkwQjAwOUI4NEI4IC8qIEZvbnRXaWR0
aFZhcmlhbnQuaCAqLywKLQkJCQkxNDgyRTBDNDE1NkMzNkRFMDA5NjUwNjUgLyogRnJhY3Rpb25h
bExheW91dEJveEV4dGVudC5jcHAgKi8sCi0JCQkJMTQ4MkUwQzUxNTZDMzZERTAwOTY1MDY1IC8q
IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuaCAqLywKLQkJCQkxNDRGQ0U1NDE0RUM3OUU3MDAw
RDE3QTMgLyogRnJhY3Rpb25hbExheW91dFBvaW50LmggKi8sCi0JCQkJMTQ0RkNGREUxNEVGMjUw
OTAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcCAqLywKLQkJCQkxNDRGQ0ZERjE0
RUYyNTA5MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFJlY3QuaCAqLywKLQkJCQkxNDRGQ0U1
ODE0RUM3OUU3MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFNpemUuaCAqLywKKwkJCQkxNDFE
QzA0OTE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0Qm94RXh0ZW50LmNwcCAqLywKKwkJCQkxNDFE
QzA0QTE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0Qm94RXh0ZW50LmggKi8sCisJCQkJMTQxREMw
NEIxNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dFBvaW50LmggKi8sCisJCQkJMTQxREMwNEMxNjQ4
MzRCOTAwMzcxRTVBIC8qIExheW91dFJlY3QuY3BwICovLAorCQkJCTE0MURDMDREMTY0ODM0Qjkw
MDM3MUU1QSAvKiBMYXlvdXRSZWN0LmggKi8sCisJCQkJMTQxREMwNEUxNjQ4MzRCOTAwMzcxRTVB
IC8qIExheW91dFNpemUuaCAqLywKIAkJCQk0RkIzOTBBQzE1RUY2MUYzMDA3QUQ1MUYgLyogR2Vu
ZXJhdGVkSW1hZ2UuY3BwICovLAogCQkJCUJDMjNGMERBMERBRkY0QTQwMDlGREM5MSAvKiBHZW5l
cmF0ZWRJbWFnZS5oICovLAogCQkJCUJDRTA0Qzg5MERBRkY3QTAwMDdBMEY0MSAvKiBHZW5lcmF0
b3IuaCAqLywKQEAgLTIwODcxLDcgKzIwODY3LDcgQEAKIAkJCQlDNTdGRURFMDEyMTJFRTlDMDA5
N0JFNjUgLyogRmlsZVN5c3RlbS5jcHAgKi8sCiAJCQkJNTE0QjNGNzIwQzcyMjA0NzAwMDUzMERG
IC8qIEZpbGVTeXN0ZW0uaCAqLywKIAkJCQlCQzA3M0JBOTBDMzk5QjFGMDAwRjU5NzkgLyogRmxv
YXRDb252ZXJzaW9uLmggKi8sCi0JCQkJMTQ0RkNFNTExNEVDNzlCQzAwMEQxN0EzIC8qIEZyYWN0
aW9uYWxMYXlvdXRVbml0LmggKi8sCisJCQkJMTQxREMwNDcxNjQ4MzQ4RjAwMzcxRTVBIC8qIExh
eW91dFVuaXQuaCAqLywKIAkJCQlBODc0OEJERjEyQ0JGMkRDMDAxRkJBNDEgLyogSGFzaFRvb2xz
LmggKi8sCiAJCQkJRDZGREFFRjIxNDlDMDYxOTAwMzdCMUUxIC8qIEhpc3RvZ3JhbVN1cHBvcnQu
Y3BwICovLAogCQkJCUQ2MzBFMkFCMTQ5QkYzNDQwMDVCMkY5MyAvKiBIaXN0b2dyYW1TdXBwb3J0
LmggKi8sCkBAIC0yMTQ1Myw4ICsyMTQ0OSw2IEBACiAJCQkJQTEyMEFDQTAxM0Y5OTgzNzAwRkU0
QUM3IC8qIExheW91dFJlcGFpbnRlci5oICovLAogCQkJCTJEOTA2NjA0MEJFMTQxRDQwMDk1Njk5
OCAvKiBMYXlvdXRTdGF0ZS5jcHAgKi8sCiAJCQkJMkQ5MDY2MDUwQkUxNDFENDAwOTU2OTk4IC8q
IExheW91dFN0YXRlLmggKi8sCi0JCQkJQkFDRjI5MDAxM0IyQTBENTAwNzgxRjkwIC8qIExheW91
dFR5cGVzLmggKi8sCi0JCQkJODQ4OTRDQTgxNUVDNDg5NzAwQTQwNDgxIC8qIExheW91dFR5cGVz
SW5saW5lTWV0aG9kcy5oICovLAogCQkJCTM3NzRBQkEzMEZBMjFFQjQwMEFEN0RFOSAvKiBPdmVy
bGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLywKIAkJCQk5Mzc3QUI5RjE1REVGRUVGMDAzMUZEMDQg
LyogUGFnaW5hdGlvbi5oICovLAogCQkJCTA4ODUwNjdEMTFEQTA0NUIwMDE4MkI5OCAvKiBQYWlu
dEluZm8uaCAqLywKQEAgLTIzNTkxLDExICsyMzU4NSw2IEBACiAJCQkJNjU2RDM3M0EwQURCQTVE
RTAwQTQ1NTREIC8qIEZvcm1TdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE4ODVCOTMxMUI2
RkRBNjAwMzM4M0JCIC8qIEZvcm1TdWJtaXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzVD
NDc2RDA5QUM0RDYzMDBBNkFBQjQgLyogRm91bmRhdGlvbkV4dHJhcy5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMTQ4MkUwQzcxNTZDMzZERTAwOTY1MDY1IC8qIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRl
bnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUJBQjFDMDZBMTRGQzM2NzkwMDQyMzNGQyAvKiBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTE0NEZDRkUxMTRFRjI1MDkw
MDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTQ0
RkNFNUQxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRTaXplLmggaW4gSGVhZGVy
cyAqLywKLQkJCQkxNDRGQ0U1MjE0RUM3OUJDMDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFVu
aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NTMxMjNEMTFEMDQ3MUIwMEQ0RDA3NyAvKiBGcmFn
bWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1QkYwMjJGMDk3
NDgxNjMwMEM0MzE5NiAvKiBGcmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCMDcwRDMxMzBB
NDA5QzAwQTM3NjNDIC8qIEZyYW1lQWN0aW9uU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKQEAg
LTI0NDczLDggKzI0NDYyLDExIEBACiAJCQkJQTEyNTM4RDQxM0Y5QjYwQTAwMDI0NzU0IC8qIExh
eW91dFJlcGFpbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ5MDY2MDcwQkUxNDFENDAwOTU2
OTk4IC8qIExheW91dFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlENjMwRTJBQzE0OUJGMzQ0
MDA1QjJGOTMgLyogTGF5b3V0VGVzdFN1cHBvcnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUJBQ0Yy
OTAxMTNCMkEwRDUwMDc4MUY5MCAvKiBMYXlvdXRUeXBlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MzFCODAxQkIxNUVDNThDNzAwQ0U2NDNEIC8qIExheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMTQxREMwNDgxNjQ4MzQ4RjAwMzcxRTVBIC8qIExheW91dFVuaXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTE0MURDMDUwMTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRC
b3hFeHRlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0MURDMDUxMTY0ODM0QjkwMDM3MUU1QSAv
KiBMYXlvdXRQb2ludC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTQxREMwNTMxNjQ4MzRCOTAwMzcx
RTVBIC8qIExheW91dFJlY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0MURDMDU0MTY0ODM0Qjkw
MDM3MUU1QSAvKiBMYXlvdXRTaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTJERDhGNTBEOTFF
NkFGMDAwRjg5RUUgLyogTGVnYWN5V2ViQXJjaGl2ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNF
NjVCRUIwRUFDREYxNjAwN0U0NTMzIC8qIExlbmd0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNG
RjY0OTEwRUFEMTVDMjAwQzFENkY3IC8qIExlbmd0aEJveC5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
NjgxNSw4ICsyNjgwNyw2IEBACiAJCQkJNTE0Qzc2NEYwQ0U5MjM0RTAwN0VGM0NEIC8qIEZvcm1E
YXRhU3RyZWFtTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU2RDM3M0IwQURCQTVERTAwQTQ1
NTREIC8qIEZvcm1TdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTg4NUI5NDExQjZGREE2
MDAzMzgzQkIgLyogRm9ybVN1Ym1pc3Npb24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMTQ4MkUw
QzYxNTZDMzZERTAwOTY1MDY1IC8qIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJMTQ0RkNGRTAxNEVGMjUwOTAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlv
dXRSZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1QkYwMjJFMDk3NDgxNjMwMEM0MzE5NiAv
KiBGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0IwNzBEMjEzMEE0MDlDMDBBMzc2M0Mg
LyogRnJhbWVBY3Rpb25TY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc0QTg2MjIx
NEI3QURCQjAwM0ZEQzc2IC8qIEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlci5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTI3Nzc3LDYgKzI3NzY3LDggQEAKIAkJCQk5MzUyMDg0NTA5QkQ0M0I5MDBGMjAz
OEQgLyogTGFuZ3VhZ2UubW0gaW4gU291cmNlcyAqLywKIAkJCQkyOTE3QjU2MTE0NzM0OTZDMDA1
MkM5RDAgLyogTGF5ZXJGbHVzaFNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyOTE3
QjU2NjE0NzM0OTk1MDA1MkM5RDAgLyogTGF5ZXJGbHVzaFNjaGVkdWxlck1hYy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkxNDFEQzA0RjE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0Qm94RXh0ZW50
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE0MURDMDUyMTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlv
dXRSZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExMjBBQ0E0MTNGOTk4Q0EwMEZFNEFDNyAv
KiBMYXlvdXRSZXBhaW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ5MDY2MDYwQkUxNDFE
NDAwOTU2OTk4IC8qIExheW91dFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUQ2RkRBRUYz
MTQ5QzA2MTkwMDM3QjFFNSAvKiBMYXlvdXRUZXN0U3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLywK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QuY3BwCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjM0LDcgKzIzNCw3IEBAIExheW91dFJlY3QgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6
OmJvdW4KICAgICBmb3IgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBvc2l0aW9uUHJvdmlkZXIgPSBw
YXJlbnRPYmplY3QoKTsgcG9zaXRpb25Qcm92aWRlcjsgcG9zaXRpb25Qcm92aWRlciA9IHBvc2l0
aW9uUHJvdmlkZXItPnBhcmVudE9iamVjdCgpKSB7CiAgICAgICAgIGlmIChwb3NpdGlvblByb3Zp
ZGVyLT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkgewogICAgICAgICAgICAgTGF5b3V0
UmVjdCBwYXJlbnRSZWN0ID0gcG9zaXRpb25Qcm92aWRlci0+ZWxlbWVudFJlY3QoKTsKLSAgICAg
ICAgICAgIGJvdW5kaW5nQm94LnNldFNpemUoTGF5b3V0U2l6ZShwYXJlbnRSZWN0LndpZHRoKCks
IEZyYWN0aW9uYWxMYXlvdXRVbml0KHN0ZDo6bWluKDEwLjBmLCBwYXJlbnRSZWN0LmhlaWdodCgp
LnRvRmxvYXQoKSkpKSk7CisgICAgICAgICAgICBib3VuZGluZ0JveC5zZXRTaXplKExheW91dFNp
emUocGFyZW50UmVjdC53aWR0aCgpLCBMYXlvdXRVbml0KHN0ZDo6bWluKDEwLjBmLCBwYXJlbnRS
ZWN0LmhlaWdodCgpLnRvRmxvYXQoKSkpKSk7CiAgICAgICAgICAgICBib3VuZGluZ0JveC5zZXRM
b2NhdGlvbihwYXJlbnRSZWN0LmxvY2F0aW9uKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0LmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNyArMzAsNyBAQAogI2RlZmluZSBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdF9oCiAK
ICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMu
aCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw4ICszMSw3IEBACiAjZGVmaW5lIEFjY2Vzc2liaWxpdHlPYmplY3RfaAogCiAj
aW5jbHVkZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFJlY3QuaCIK
LSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNs
dWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKICNpbmNs
dWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAkocmV2aXNpb24g
MTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNkZWZpbmUgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdF9oCiAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdC5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5o
IgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9MZW5ndGhGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9MZW5ndGhGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAxMzM1MTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvTGVuZ3RoRnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkxlbmd0aEZ1
bmN0aW9ucy5oIgogCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRV
bml0LmgiCiAjaW5jbHVkZSAiTGVuZ3RoLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogCkBA
IC01NSwyMCArNTUsMjAgQEAgTGF5b3V0VW5pdCBtaW5pbXVtVmFsdWVGb3JMZW5ndGgoY29uc3Qg
TAogICAgIGNhc2UgVmlld3BvcnRQZXJjZW50YWdlV2lkdGg6CiAgICAgICAgIGlmIChyZW5kZXJW
aWV3KQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PExheW91dFVuaXQ+KHJlbmRlclZp
ZXctPnZpZXdwb3J0U2l6ZSgpLndpZHRoKCkgKiBsZW5ndGgudmlld3BvcnRQZXJjZW50YWdlTGVu
Z3RoKCkgLyAxMDAuMGYpOwotICAgICAgICByZXR1cm4gWkVST19MQVlPVVRfVU5JVDsKKyAgICAg
ICAgcmV0dXJuIDA7CiAgICAgY2FzZSBWaWV3cG9ydFBlcmNlbnRhZ2VIZWlnaHQ6CiAgICAgICAg
IGlmIChyZW5kZXJWaWV3KQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PExheW91dFVu
aXQ+KHJlbmRlclZpZXctPnZpZXdwb3J0U2l6ZSgpLmhlaWdodCgpICogbGVuZ3RoLnZpZXdwb3J0
UGVyY2VudGFnZUxlbmd0aCgpIC8gMTAwLjBmKTsKLSAgICAgICAgcmV0dXJuIFpFUk9fTEFZT1VU
X1VOSVQ7CisgICAgICAgIHJldHVybiAwOwogICAgIGNhc2UgVmlld3BvcnRQZXJjZW50YWdlTWlu
OgogICAgICAgICBpZiAocmVuZGVyVmlldykgewogICAgICAgICAgICAgSW50U2l6ZSB2aWV3cG9y
dFNpemUgPSByZW5kZXJWaWV3LT52aWV3cG9ydFNpemUoKTsKICAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxMYXlvdXRVbml0PihzdGQ6Om1pbih2aWV3cG9ydFNpemUud2lkdGgoKSwgdmll
d3BvcnRTaXplLmhlaWdodCgpKSAqIGxlbmd0aC52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSAv
IDEwMC4wZik7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFpFUk9fTEFZT1VUX1VOSVQ7Cisg
ICAgICAgIHJldHVybiAwOwogICAgIGNhc2UgRmlsbEF2YWlsYWJsZToKICAgICBjYXNlIEF1dG86
Ci0gICAgICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOworICAgICAgICByZXR1cm4gMDsKICAg
ICBjYXNlIFJlbGF0aXZlOgogICAgIGNhc2UgSW50cmluc2ljOgogICAgIGNhc2UgTWluSW50cmlu
c2ljOgpAQCAtNzcsMTAgKzc3LDEwIEBAIExheW91dFVuaXQgbWluaW11bVZhbHVlRm9yTGVuZ3Ro
KGNvbnN0IEwKICAgICBjYXNlIEZpdENvbnRlbnQ6CiAgICAgY2FzZSBVbmRlZmluZWQ6CiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gWkVST19MQVlPVVRfVU5J
VDsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOworICAgIHJldHVybiAwOwogfQogCiBMYXlvdXRV
bml0IHZhbHVlRm9yTGVuZ3RoKGNvbnN0IExlbmd0aCYgbGVuZ3RoLCBMYXlvdXRVbml0IG1heGlt
dW1WYWx1ZSwgUmVuZGVyVmlldyogcmVuZGVyVmlldywgYm9vbCByb3VuZFBlcmNlbnRhZ2VzKQpA
QCAtMTA0LDEwICsxMDQsMTAgQEAgTGF5b3V0VW5pdCB2YWx1ZUZvckxlbmd0aChjb25zdCBMZW5n
dGgmCiAgICAgY2FzZSBGaXRDb250ZW50OgogICAgIGNhc2UgVW5kZWZpbmVkOgogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIFpFUk9fTEFZT1VUX1VOSVQ7Cisg
ICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gWkVST19MQVlPVVRfVU5JVDsKKyAgICByZXR1cm4gMDsKIH0KIAogLy8gRklYTUU6IHdo
ZW4gc3VicGl4ZWwgbGF5b3V0IGlzIHN1cHBvcnRlZCB0aGlzIGNvcHkgb2YgZmxvYXRWYWx1ZUZv
ckxlbmd0aCgpIGNhbiBiZSByZW1vdmVkLiBTZWUgYnVnIDcxMTQzLgpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0xlbmd0aEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9MZW5ndGhGdW5jdGlvbnMuaAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0xlbmd0aEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBA
CiAjaWZuZGVmIExlbmd0aEZ1bmN0aW9uc19oCiAjZGVmaW5lIExlbmd0aEZ1bmN0aW9uc19oCiAK
LSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMTMz
NTE3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJJY29uVVJMLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
Q291bnRlcnMuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMu
aCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiTXV0YXRpb25PYnNlcnZlci5o
IgogI2luY2x1ZGUgIlBhZ2VWaXNpYmlsaXR5U3RhdGUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVNj
cmVlbi5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRy
b2xsZXIuaAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
TWFya2VyQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAKICNp
bmNsdWRlICJEb2N1bWVudE1hcmtlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRl
ICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50UmFyZURhdGEuaAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnRSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1LDcgQEAg
cHVibGljOgogCiBpbmxpbmUgSW50U2l6ZSBkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygp
CiB7Ci0gICAgcmV0dXJuIEludFNpemUoTUFYX0xBWU9VVF9VTklULCBNQVhfTEFZT1VUX1VOSVQp
OworICAgIHJldHVybiBJbnRTaXplKExheW91dFVuaXQ6Om1heCgpLCBMYXlvdXRVbml0OjptYXgo
KSk7CiB9CiAKIGlubGluZSBFbGVtZW50UmFyZURhdGE6OkVsZW1lbnRSYXJlRGF0YSgpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vTW91c2VSZWxhdGVkRXZlbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vTW91c2VSZWxhdGVkRXZlbnQuaAkocmV2aXNpb24gMTMzNTE3KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL01vdXNlUmVsYXRlZEV2ZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDcgKzI0LDcgQEAKICNpZm5kZWYgTW91c2VSZWxhdGVkRXZlbnRfaAogI2RlZmluZSBN
b3VzZVJlbGF0ZWRFdmVudF9oCiAKLSNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMu
aCIKKyNpbmNsdWRlICJMYXlvdXRQb2ludC5oIgogI2luY2x1ZGUgIlVJRXZlbnRXaXRoS2V5U3Rh
dGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiAx
MzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw5ICsyNyw4IEBACiAKICNpbmNsdWRlICJFZGl0aW5nQm91bmRhcnkuaCIKICNpbmNsdWRlICJF
dmVudFRhcmdldC5oIgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRSZWN0LmgiCiAjaW5jbHVk
ZSAiS1VSTEhhc2guaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91
dFJlY3QuaCIKICNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVy
U3R5bGVDb25zdGFudHMuaCIKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9Ub3VjaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ub3VjaC5oCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVG91Y2gu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2lmIEVOQUJMRShUT1VDSF9FVkVO
VFMpCiAKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzSW5s
aW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dFBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3Bw
CShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwogCiBzdGF0aWMgaW5saW5lIExheW91dFVuaXQgTm9YUG9zRm9yVmVydGljYWxB
cnJvd05hdmlnYXRpb24oKQogewotICAgIHJldHVybiBNSU5fTEFZT1VUX1VOSVQ7CisgICAgcmV0
dXJuIExheW91dFVuaXQ6Om1pbigpOwogfQogCiBDYXJldEJhc2U6OkNhcmV0QmFzZShDYXJldFZp
c2liaWxpdHkgdmlzaWJpbGl0eSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVT
ZWxlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiAjaW5jbHVk
ZSAiRWRpdGluZ1N0eWxlLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkxheW91
dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAj
aW5jbHVkZSAiU2Nyb2xsQmVoYXZpb3IuaCIKICNpbmNsdWRlICJUaW1lci5oIgpJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9uLmgJKHJldmlzaW9uIDEzMzUxNykK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVuZGVyZWRQb3NpdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiwxMSArMzIsMTEgQEAKICNkZWZpbmUgUmVuZGVyZWRQb3NpdGlvbl9oCiAKICNp
bmNsdWRlICJJbmxpbmVCb3guaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgogI2luY2x1ZGUg
IlRleHRBZmZpbml0eS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIExheW91dFVu
aXQ7CiBjbGFzcyBQb3NpdGlvbjsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFZpc2libGVQ
b3NpdGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuaAkocmV2aXNp
b24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2RlZmluZSBIVE1MQXJlYUVsZW1lbnRfaAog
CiAjaW5jbHVkZSAiSFRNTEFuY2hvckVsZW1lbnQuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5o
IgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvck92ZXJsYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yT3ZlcmxheS5oCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3
IEBACiAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgotI2luY2x1
ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogCiAjaW5jbHVkZSA8
d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmgJKHJldmlz
aW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGlu
ZUFnZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlICJJbnNw
ZWN0b3JCYXNlQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgogI2luY2x1
ZGUgIkluc3BlY3RvclZhbHVlcy5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVk
ZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtSW5zdHJ1bWVudGF0aW9uLmgiCiAj
aW5jbHVkZSAiU2NyaXB0R0NFdmVudC5oIgogI2luY2x1ZGUgIlNjcmlwdEdDRXZlbnRMaXN0ZW5l
ci5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9y
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVj
b3JkRmFjdG9yeS5jcHAJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICsz
Nyw3IEBACiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIK
ICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXNJbmxpbmVNZXRob2Rz
LmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5o
IgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKICNpbmNsdWRlICJTY3JpcHRDYWxsU3Rh
Y2suaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3Rv
cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNv
cmRGYWN0b3J5LmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBA
QAogI2lmbmRlZiBUaW1lbGluZVJlY29yZEZhY3RvcnlfaAogI2RlZmluZSBUaW1lbGluZVJlY29y
ZEZhY3RvcnlfaAogCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRS
ZWN0LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgJKHJldmlzaW9u
IDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2Uu
aCIKICNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2lu
Y2x1ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dFNpemUu
aCIKICNpbmNsdWRlICJTVkdJbWFnZUNhY2hlLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmgJKHJldmlzaW9uIDEzMzUx
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgRm9jdXNDb250cm9sbGVyX2gKIAogI2luY2x1
ZGUgIkZvY3VzRGlyZWN0aW9uLmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRl
ICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJBZGp1
c3RWaWV3U2l6ZU9yTm90LmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2lu
Y2x1ZGUgIlBhZ2luYXRpb24uaCIKICNpbmNsdWRlICJQYWludFBoYXNlLmgiCiAjaW5jbHVkZSAi
U2Nyb2xsVmlldy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBA
CiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgogI2luY2x1ZGUgIkZpbmRPcHRpb25zLmgi
CiAjaW5jbHVkZSAiTGF5b3V0TWlsZXN0b25lcy5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgi
CisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlBhZ2VWaXNpYmlsaXR5U3RhdGUu
aCIKICNpbmNsdWRlICJQYWdpbmF0aW9uLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCShyZXZpc2lv
biAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjQ1LDE5ICs2NDUsMTkgQEAgdm9pZCBkaXN0YW5jZURhdGFGb3JO
b2RlKEZvY3VzRGlyZWN0aW9uCiAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKICAgICBjYXNlIEZv
Y3VzRGlyZWN0aW9uTGVmdDoKICAgICAgICAgc2FtZUF4aXNEaXN0YW5jZSA9IGV4aXRQb2ludC54
KCkgLSBlbnRyeVBvaW50LngoKTsKLSAgICAgICAgb3RoZXJBeGlzRGlzdGFuY2UgPSBhYnNvbHV0
ZVZhbHVlKGV4aXRQb2ludC55KCkgLSBlbnRyeVBvaW50LnkoKSk7CisgICAgICAgIG90aGVyQXhp
c0Rpc3RhbmNlID0gKGV4aXRQb2ludC55KCkgLSBlbnRyeVBvaW50LnkoKSkuYWJzKCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKICAgICAgICAgc2FtZUF4aXNE
aXN0YW5jZSA9IGV4aXRQb2ludC55KCkgLSBlbnRyeVBvaW50LnkoKTsKLSAgICAgICAgb3RoZXJB
eGlzRGlzdGFuY2UgPSBhYnNvbHV0ZVZhbHVlKGV4aXRQb2ludC54KCkgLSBlbnRyeVBvaW50Lngo
KSk7CisgICAgICAgIG90aGVyQXhpc0Rpc3RhbmNlID0gKGV4aXRQb2ludC54KCkgLSBlbnRyeVBv
aW50LngoKSkuYWJzKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25S
aWdodDoKICAgICAgICAgc2FtZUF4aXNEaXN0YW5jZSA9IGVudHJ5UG9pbnQueCgpIC0gZXhpdFBv
aW50LngoKTsKLSAgICAgICAgb3RoZXJBeGlzRGlzdGFuY2UgPSBhYnNvbHV0ZVZhbHVlKGVudHJ5
UG9pbnQueSgpIC0gZXhpdFBvaW50LnkoKSk7CisgICAgICAgIG90aGVyQXhpc0Rpc3RhbmNlID0g
KGVudHJ5UG9pbnQueSgpIC0gZXhpdFBvaW50LnkoKSkuYWJzKCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgogICAgICAgICBzYW1lQXhpc0Rpc3RhbmNlID0g
ZW50cnlQb2ludC55KCkgLSBleGl0UG9pbnQueSgpOwotICAgICAgICBvdGhlckF4aXNEaXN0YW5j
ZSA9IGFic29sdXRlVmFsdWUoZW50cnlQb2ludC54KCkgLSBleGl0UG9pbnQueCgpKTsKKyAgICAg
ICAgb3RoZXJBeGlzRGlzdGFuY2UgPSAoZW50cnlQb2ludC54KCkgLSBleGl0UG9pbnQueCgpKS5h
YnMoKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5oCShy
ZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkZvY3VzRGly
ZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCi0jaW5jbHVkZSAi
TGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiTm9kZS5o
IgogCiAjaW5jbHVkZSA8bGltaXRzPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRnJh
Y3Rpb25hbExheW91dFVuaXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9GcmFjdGlvbmFsTGF5b3V0VW5pdC5oCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9GcmFjdGlvbmFsTGF5b3V0VW5pdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDgyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgRnJhY3Rpb25hbExheW91dFVuaXRfaAotI2RlZmluZSBGcmFj
dGlvbmFsTGF5b3V0VW5pdF9oCi0KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxsaW1p
dHM+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1NhdHVyYXRlZEFyaXRobWV0aWMuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWZkZWYgTkRFQlVHCi0KLSNkZWZpbmUgUkVQT1JUX09W
RVJGTE9XKGRvZXNPdmVyZmxvdykgKCh2b2lkKTApCi0KLSNlbHNlCi0KLSNkZWZpbmUgUkVQT1JU
X09WRVJGTE9XKGRvZXNPdmVyZmxvdykgZG8gXAotICAgIGlmICghKGRvZXNPdmVyZmxvdykpIHsg
XAotICAgICAgICBXVEZSZXBvcnRFcnJvcihfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlf
RlVOQ1RJT04sICIhKCVzKSIsICNkb2VzT3ZlcmZsb3cpOyBcCi0gICAgfSBcCi13aGlsZSAoMCkK
LQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotc3RhdGljIGNvbnN0IGlu
dCBrRml4ZWRQb2ludERlbm9taW5hdG9yID0gNjQ7Ci0jZWxzZQotc3RhdGljIGNvbnN0IGludCBr
Rml4ZWRQb2ludERlbm9taW5hdG9yID0gMTsKLSNlbmRpZgotY29uc3QgaW50IGludE1heEZvckxh
eW91dFVuaXQgPSBJTlRfTUFYIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKLWNvbnN0IGludCBp
bnRNaW5Gb3JMYXlvdXRVbml0ID0gSU5UX01JTiAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0K
LWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRVbml0IHsKLXB1YmxpYzoKLSAgICAvLyBGSVhNRTogSWRl
YWxseSB3ZSB3b3VsZCBoYXZlIHNpemVfdCB2ZXJzaW9ucyBvZiB0aGUgY29uc3RydWN0b3IgYW5k
IG9wZXJhdG9ycy4KLSAgICAvLyBIb3dldmVyIGR1ZSB0byBjb21waWxlciBhbmQgcGxhdGZvcm0g
ZGlmZmVyZW5jZXMgYWRkaW5nIHRob3NlIGFyZSBub24tdHJpdmlhbC4KLSAgICAvLyBTZWUgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgzODQ4IGZvciBkZXRhaWxzLgot
ICAgIAotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KCkgOiBtX3ZhbHVlKDApIHsgfQotI2lmIEVO
QUJMRShTVUJQSVhFTF9MQVlPVVQpCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQoaW50IHZhbHVl
KSB7IHNldFZhbHVlKHZhbHVlKTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KHVuc2lnbmVk
IHNob3J0IHZhbHVlKSB7IHNldFZhbHVlKHZhbHVlKTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRV
bml0KHVuc2lnbmVkIGludCB2YWx1ZSkgeyBzZXRWYWx1ZSh2YWx1ZSk7IH0KLSAgICBGcmFjdGlv
bmFsTGF5b3V0VW5pdChmbG9hdCB2YWx1ZSkKLSAgICB7Ci0jaWYgRU5BQkxFKFNBVFVSQVRFRF9M
QVlPVVRfQVJJVEhNRVRJQykKLSAgICAgICAgbV92YWx1ZSA9IGNsYW1wVG88ZmxvYXQ+KHZhbHVl
ICoga0ZpeGVkUG9pbnREZW5vbWluYXRvciwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KElOVF9NSU4pLCBz
dGF0aWNfY2FzdDxmbG9hdD4oSU5UX01BWCkpOwotI2Vsc2UKLSAgICAgICAgUkVQT1JUX09WRVJG
TE9XKGlzSW5Cb3VuZHModmFsdWUpKTsKLSAgICAgICAgbV92YWx1ZSA9IHZhbHVlICoga0ZpeGVk
UG9pbnREZW5vbWluYXRvcjsKLSNlbmRpZgotICAgIH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dChkb3VibGUgdmFsdWUpCi0gICAgewotI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRI
TUVUSUMpCi0gICAgICAgIG1fdmFsdWUgPSBjbGFtcFRvPGRvdWJsZT4odmFsdWUgKiBrRml4ZWRQ
b2ludERlbm9taW5hdG9yLCBzdGF0aWNfY2FzdDxkb3VibGU+KElOVF9NSU4pLCBzdGF0aWNfY2Fz
dDxkb3VibGU+KElOVF9NQVgpKTsKLSNlbHNlCi0gICAgICAgIFJFUE9SVF9PVkVSRkxPVyhpc0lu
Qm91bmRzKHZhbHVlKSk7Ci0gICAgICAgIG1fdmFsdWUgPSB2YWx1ZSAqIGtGaXhlZFBvaW50RGVu
b21pbmF0b3I7Ci0jZW5kaWYKLSAgICB9Ci0jZWxzZQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
KGludCB2YWx1ZSkgeyBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOyBtX3ZhbHVl
ID0gdmFsdWU7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCh1bnNpZ25lZCBzaG9ydCB2YWx1
ZSkgeyBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFsdWU7
IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCh1bnNpZ25lZCBpbnQgdmFsdWUpIHsgUkVQT1JU
X09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsgbV92YWx1ZSA9IHZhbHVlOyB9Ci0gICAgRnJh
Y3Rpb25hbExheW91dFVuaXQoZmxvYXQgdmFsdWUpIHsgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3Vu
ZHModmFsdWUpKTsgbV92YWx1ZSA9IHZhbHVlOyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQo
ZG91YmxlIHZhbHVlKSB7IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7IG1fdmFs
dWUgPSB2YWx1ZTsgfQotI2VuZGlmCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQoY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIHZhbHVlKSB7IG1fdmFsdWUgPSB2YWx1ZS5yYXdWYWx1ZSgpOyB9
Ci0KLSAgICBzdGF0aWMgRnJhY3Rpb25hbExheW91dFVuaXQgZnJvbUZsb2F0Q2VpbChmbG9hdCB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHY7Ci0jaWYgRU5BQkxF
KFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKLSAgICAgICAgdi5tX3ZhbHVlID0gY2xhbXBU
b0ludGVnZXIoY2VpbGYodmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yKSk7Ci0jZWxzZQot
ICAgICAgICBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOwotICAgICAgICB2Lm1f
dmFsdWUgPSBjZWlsZih2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3IpOwotI2VuZGlmCi0g
ICAgICAgIHJldHVybiB2OwotICAgIH0KLQotICAgIHN0YXRpYyBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBmcm9tRmxvYXRGbG9vcihmbG9hdCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxM
YXlvdXRVbml0IHY7Ci0jaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKLSAg
ICAgICAgdi5tX3ZhbHVlID0gY2xhbXBUb0ludGVnZXIoZmxvb3JmKHZhbHVlICoga0ZpeGVkUG9p
bnREZW5vbWluYXRvcikpOwotI2Vsc2UKLSAgICAgICAgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3Vu
ZHModmFsdWUpKTsKLSAgICAgICAgdi5tX3ZhbHVlID0gZmxvb3JmKHZhbHVlICoga0ZpeGVkUG9p
bnREZW5vbWluYXRvcik7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgfQotCi0gICAg
c3RhdGljIEZyYWN0aW9uYWxMYXlvdXRVbml0IGZyb21GbG9hdFJvdW5kKGZsb2F0IHZhbHVlKQot
ICAgIHsKLSNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQotICAgICAgICBp
ZiAodmFsdWUgPj0gMCkKLSAgICAgICAgICAgIHJldHVybiBjbGFtcCh2YWx1ZSArIGVwc2lsb24o
KSAvIDIuMGYpOwotICAgICAgICByZXR1cm4gY2xhbXAodmFsdWUgLSBlcHNpbG9uKCkgLyAyLjBm
KTsKLSNlbHNlCi0gICAgICAgIGlmICh2YWx1ZSA+PSAwKSB7Ci0gICAgICAgICAgICBSRVBPUlRf
T1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSArIGVwc2lsb24oKSAvIDIuMGYpKTsKLSAgICAgICAg
ICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdCh2YWx1ZSArIGVwc2lsb24oKSAvIDIuMGYp
OwotICAgICAgICB9Ci0gICAgICAgIFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlIC0g
ZXBzaWxvbigpIC8gMi4wZikpOwotICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQo
dmFsdWUgLSBlcHNpbG9uKCkgLyAyLjBmKTsKLSNlbmRpZgotICAgIH0KLQotI2lmIEVOQUJMRShT
VUJQSVhFTF9MQVlPVVQpCi0gICAgaW50IHRvSW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSAv
IGtGaXhlZFBvaW50RGVub21pbmF0b3I7IH0KLSAgICBmbG9hdCB0b0Zsb2F0KCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdmFsdWUpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRv
cjsgfQotICAgIGRvdWJsZSB0b0RvdWJsZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGRv
dWJsZT4obV92YWx1ZSkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOyB9Ci0gICAgZmxvYXQgY2Vp
bFRvRmxvYXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgZmxvYXQgZmxvYXRWYWx1ZSA9IHRvRmxv
YXQoKTsKLSAgICAgICAgaWYgKHN0YXRpY19jYXN0PGludD4oZmxvYXRWYWx1ZSAqIGtGaXhlZFBv
aW50RGVub21pbmF0b3IpID09IG1fdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gZmxvYXRWYWx1
ZTsKLSAgICAgICAgaWYgKGZsb2F0VmFsdWUgPiAwKQotICAgICAgICAgICAgcmV0dXJuIG5leHRh
ZnRlcmYoZmxvYXRWYWx1ZSwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpKTsKLSAg
ICAgICAgcmV0dXJuIG5leHRhZnRlcmYoZmxvYXRWYWx1ZSwgc3RkOjpudW1lcmljX2xpbWl0czxm
bG9hdD46Om1pbigpKTsKLSAgICB9Ci0jZWxzZQotICAgIGludCB0b0ludCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWU7IH0KLSAgICBmbG9hdCB0b0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG1fdmFsdWUpOyB9Ci0gICAgZG91YmxlIHRvRG91YmxlKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3ZhbHVlKTsgfQotICAgIGZsb2F0IGNlaWxUb0Zs
b2F0KCkgY29uc3QgeyByZXR1cm4gdG9GbG9hdCgpOyB9Ci0jZW5kaWYKLSAgICB1bnNpZ25lZCB0
b1Vuc2lnbmVkKCkgY29uc3QgeyBSRVBPUlRfT1ZFUkZMT1cobV92YWx1ZSA+PSAwKTsgcmV0dXJu
IHRvSW50KCk7IH0KLQotICAgIG9wZXJhdG9yIGludCgpIGNvbnN0IHsgcmV0dXJuIHRvSW50KCk7
IH0KLSAgICBvcGVyYXRvciB1bnNpZ25lZCgpIGNvbnN0IHsgcmV0dXJuIHRvVW5zaWduZWQoKTsg
fQotICAgIG9wZXJhdG9yIGZsb2F0KCkgY29uc3QgeyByZXR1cm4gdG9GbG9hdCgpOyB9Ci0gICAg
b3BlcmF0b3IgZG91YmxlKCkgY29uc3QgeyByZXR1cm4gdG9Eb3VibGUoKTsgfQotICAgIG9wZXJh
dG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0KLSAgICBGcmFjdGlvbmFsTGF5
b3V0VW5pdCBvcGVyYXRvcisrKGludCkKLSAgICB7Ci0gICAgICAgIG1fdmFsdWUgKz0ga0ZpeGVk
UG9pbnREZW5vbWluYXRvcjsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIGlu
bGluZSBpbnQgcmF3VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0gICAgaW5saW5l
IHZvaWQgc2V0UmF3VmFsdWUoaW50IHZhbHVlKSB7IG1fdmFsdWUgPSB2YWx1ZTsgfQotICAgIHZv
aWQgc2V0UmF3VmFsdWUobG9uZyBsb25nIHZhbHVlKQotICAgIHsKLSAgICAgICAgUkVQT1JUX09W
RVJGTE9XKHZhbHVlID4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSAmJiB2YWx1ZSA8
IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpOwotICAgICAgICBtX3ZhbHVlID0gc3Rh
dGljX2Nhc3Q8aW50Pih2YWx1ZSk7Ci0gICAgfQotCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQg
YWJzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJldHVyblZh
bHVlOwotICAgICAgICByZXR1cm5WYWx1ZS5zZXRSYXdWYWx1ZSg6OmFicyhtX3ZhbHVlKSk7Ci0g
ICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLSAgICB9Ci0jaWYgT1MoREFSV0lOKQotICAgIGlu
dCB3dGZfY2VpbCgpIGNvbnN0Ci0jZWxzZQotICAgIGludCBjZWlsKCkgY29uc3QKLSNlbmRpZgot
ICAgIHsKLSNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAgICAgICBpZiAobV92YWx1ZSA+
PSAwKQotICAgICAgICAgICAgcmV0dXJuIChtX3ZhbHVlICsga0ZpeGVkUG9pbnREZW5vbWluYXRv
ciAtIDEpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKLSAgICAgICAgcmV0dXJuIHRvSW50KCk7
Ci0jZWxzZQotICAgICAgICByZXR1cm4gbV92YWx1ZTsKLSNlbmRpZgotICAgIH0KLSAgICBpbnQg
cm91bmQoKSBjb25zdAotICAgIHsKLSNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKSAmJiBFTkFC
TEUoU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQotICAgICAgICBpZiAobV92YWx1ZSA+IDAp
Ci0gICAgICAgICAgICByZXR1cm4gc2F0dXJhdGVkQWRkaXRpb24ocmF3VmFsdWUoKSwga0ZpeGVk
UG9pbnREZW5vbWluYXRvciAvIDIpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKLSAgICAgICAg
cmV0dXJuIHNhdHVyYXRlZFN1YnRyYWN0aW9uKHJhd1ZhbHVlKCksIGtGaXhlZFBvaW50RGVub21p
bmF0b3IgLyAyKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0jZWxpZiBFTkFCTEUoU1VCUElY
RUxfTEFZT1VUKQotICAgICAgICBpZiAobV92YWx1ZSA+IDApCi0gICAgICAgICAgICByZXR1cm4g
KG1fdmFsdWUgKyAoa0ZpeGVkUG9pbnREZW5vbWluYXRvciAvIDIpKSAvIGtGaXhlZFBvaW50RGVu
b21pbmF0b3I7Ci0gICAgICAgIHJldHVybiAobV92YWx1ZSAtIChrRml4ZWRQb2ludERlbm9taW5h
dG9yIC8gMikpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKLSNlbHNlCi0gICAgICAgIHJldHVy
biBtX3ZhbHVlOwotI2VuZGlmCi0gICAgfQotCi0gICAgaW50IGZsb29yKCkgY29uc3QKLSAgICB7
Ci0jaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICAgICAgaWYgKG1fdmFsdWUgPj0gMCkK
LSAgICAgICAgICAgIHJldHVybiB0b0ludCgpOwotICAgICAgICByZXR1cm4gKG1fdmFsdWUgLSBr
Rml4ZWRQb2ludERlbm9taW5hdG9yICsgMSkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOwotI2Vs
c2UKLSAgICAgICAgcmV0dXJuIG1fdmFsdWU7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBGcmFjdGlv
bmFsTGF5b3V0VW5pdCBmcmFjdGlvbigpIGNvbnN0Ci0gICAgeyAgIAotICAgICAgICAvLyBBZGQg
dGhlIGZyYWN0aW9uIHRvIHRoZSBzaXplIChhcyBvcHBvc2VkIHRvIHRoZSBmdWxsIGxvY2F0aW9u
KSB0byBhdm9pZCBvdmVyZmxvd3MuCi0gICAgICAgIC8vIENvbXB1dGUgZnJhY3Rpb24gdXNpbmcg
dGhlIG1vZCBvcGVyYXRvciB0byBwcmVzZXJ2ZSB0aGUgc2lnbiBvZiB0aGUgdmFsdWUgYXMgaXQg
bWF5IGFmZmVjdCByb3VuZGluZy4KLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZnJhY3Rp
b247Ci0gICAgICAgIGZyYWN0aW9uLnNldFJhd1ZhbHVlKHJhd1ZhbHVlKCkgJSBrRml4ZWRQb2lu
dERlbm9taW5hdG9yKTsKLSAgICAgICAgcmV0dXJuIGZyYWN0aW9uOwotICAgIH0KLQotI2lmIEVO
QUJMRShTVUJQSVhFTF9MQVlPVVQpCi0gICAgc3RhdGljIGZsb2F0IGVwc2lsb24oKSB7IHJldHVy
biAxLjBmIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsgfQotI2Vsc2UKLSAgICBzdGF0aWMgaW50
IGVwc2lsb24oKSB7IHJldHVybiAwOyB9Ci0jZW5kaWYKLSAgICBzdGF0aWMgY29uc3QgRnJhY3Rp
b25hbExheW91dFVuaXQgbWF4KCkKLSAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
IG07Ci0gICAgICAgIG0ubV92YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7
Ci0gICAgICAgIHJldHVybiBtOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQgbWluKCkKLSAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG07Ci0g
ICAgICAgIG0ubV92YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCk7Ci0gICAg
ICAgIHJldHVybiBtOwotICAgIH0KLQotICAgIC8vIFZlcnNpb25zIG9mIG1heC9taW4gdGhhdCBh
cmUgc2xpZ2h0bHkgc21hbGxlci9sYXJnZXIgdGhhbiBtYXgvbWluKCkgdG8gYWxsb3cgZm9yIHJv
aW5kaW5nIHdpdGhvdXQgb3ZlcmZsb3dpbmcuCi0gICAgc3RhdGljIGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRVbml0IG5lYXJseU1heCgpCi0gICAgewotICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBtOwotICAgICAgICBtLm1fdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgp
IC0ga0ZpeGVkUG9pbnREZW5vbWluYXRvciAvIDI7Ci0gICAgICAgIHJldHVybiBtOwotICAgIH0K
LSAgICBzdGF0aWMgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQgbmVhcmx5TWluKCkKLSAgICB7
Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG07Ci0gICAgICAgIG0ubV92YWx1ZSA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkgKyBrRml4ZWRQb2ludERlbm9taW5hdG9yIC8g
MjsKLSAgICAgICAgcmV0dXJuIG07Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBjbGFtcChkb3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY2xh
bXBUbzxGcmFjdGlvbmFsTGF5b3V0VW5pdD4odmFsdWUsIEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpt
aW4oKSwgRnJhY3Rpb25hbExheW91dFVuaXQ6Om1heCgpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgc3RhdGljIGJvb2wgaXNJbkJvdW5kcyhpbnQgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gOjphYnModmFsdWUpIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkgLyBrRml4
ZWRQb2ludERlbm9taW5hdG9yOwotICAgIH0KLSAgICBzdGF0aWMgYm9vbCBpc0luQm91bmRzKHVu
c2lnbmVkIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlIDw9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSAvIGtGaXhlZFBvaW50
RGVub21pbmF0b3I7Ci0gICAgfQotICAgIHN0YXRpYyBib29sIGlzSW5Cb3VuZHMoZG91YmxlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDo6ZmFicyh2YWx1ZSkgPD0gc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptYXgoKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0gICAgfQotICAg
IAotICAgIGlubGluZSB2b2lkIHNldFZhbHVlKGludCB2YWx1ZSkKLSAgICB7Ci0jaWYgRU5BQkxF
KFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKLSAgICAgICAgaWYgKHZhbHVlID4gaW50TWF4
Rm9yTGF5b3V0VW5pdCkKLSAgICAgICAgICAgIG1fdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1heCgpOwotICAgICAgICBlbHNlIGlmICh2YWx1ZSA8IGludE1pbkZvckxheW91dFVu
aXQpCi0gICAgICAgICAgICBtX3ZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4o
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV92YWx1ZSA9IHZhbHVlICoga0ZpeGVkUG9p
bnREZW5vbWluYXRvcjsKLSNlbHNlCi0gICAgICAgIFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRz
KHZhbHVlKSk7Ci0gICAgICAgIG1fdmFsdWUgPSB2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0
b3I7Ci0jZW5kaWYKLSAgICB9Ci0gICAgaW5saW5lIHZvaWQgc2V0VmFsdWUodW5zaWduZWQgdmFs
dWUpCi0gICAgewotI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCi0gICAg
ICAgIGlmICh2YWx1ZSA+PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW50TWF4Rm9yTGF5b3V0VW5p
dCkpCi0gICAgICAgICAgICBtX3ZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV92YWx1ZSA9IHZhbHVlICoga0ZpeGVkUG9p
bnREZW5vbWluYXRvcjsKLSNlbHNlCi0gICAgICAgIFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRz
KHZhbHVlKSk7Ci0gICAgICAgIG1fdmFsdWUgPSB2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0
b3I7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBpbnQgbV92YWx1ZTsKLX07Ci0KLWlubGluZSBib29s
IG9wZXJhdG9yPD0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgPD0gYi5yYXdWYWx1
ZSgpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBhLCBmbG9hdCBiKQotewotICAgIHJldHVybiBhLnRvRmxvYXQoKSA8PSBiOwotfQotCi1p
bmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQg
YikKLXsKLSAgICByZXR1cm4gYSA8PSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKLX0KLQotaW5s
aW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYikKLXsKLSAgICByZXR1cm4gYSA8PSBiLnRvRmxvYXQoKTsKLX0KLQotaW5saW5lIGJv
b2wgb3BlcmF0b3I8PShjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIp
Ci17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpIDw9IGI7Ci19Ci0KLWlubGlu
ZSBib29sIG9wZXJhdG9yPj0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgPj0gYi5y
YXdWYWx1ZSgpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRVbml0JiBhLCBpbnQgYikKLXsKLSAgICByZXR1cm4gYSA+PSBGcmFjdGlvbmFsTGF5b3V0
VW5pdChiKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBmbG9hdCBhLCBjb25z
dCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gYSA+PSBiLnRvRmxvYXQo
KTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYSwgZmxvYXQgYikKLXsKLSAgICByZXR1cm4gYS50b0Zsb2F0KCkgPj0gYjsKLX0KLQotaW5s
aW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVu
aXQmIGIpCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpID49IGI7Ci19Ci0K
LWlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29u
c3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJuIGEucmF3VmFsdWUoKSA8
IGIucmF3VmFsdWUoKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBhLCBpbnQgYikKLXsKLSAgICByZXR1cm4gYSA8IEZyYWN0aW9uYWxMYXlv
dXRVbml0KGIpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGEsIGZsb2F0IGIpCi17Ci0gICAgcmV0dXJuIGEudG9GbG9hdCgpIDwgYjsKLX0K
LQotaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBk
b3VibGUgYikKLXsKLSAgICByZXR1cm4gYS50b0RvdWJsZSgpIDwgYjsKLX0KLQotaW5saW5lIGJv
b2wgb3BlcmF0b3I8KGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikK
LXsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgPCBiOwotfQotCi1pbmxpbmUg
Ym9vbCBvcGVyYXRvcjwoY29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGIpCi17Ci0gICAgcmV0dXJuIGEgPCBiLnRvRmxvYXQoKTsKLX0KLQotaW5saW5lIGJvb2wgb3Bl
cmF0b3I+KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gYS5yYXdWYWx1ZSgpID4gYi5yYXdWYWx1ZSgpOwot
fQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEs
IGRvdWJsZSBiKQotewotICAgIHJldHVybiBhLnRvRG91YmxlKCkgPiBiOwotfQotCi1pbmxpbmUg
Ym9vbCBvcGVyYXRvcj4oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCi17
Ci0gICAgcmV0dXJuIGEudG9GbG9hdCgpID4gYjsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I+
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKLXsKLSAgICByZXR1cm4gYSA+
IEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29u
c3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBG
cmFjdGlvbmFsTGF5b3V0VW5pdChhKSA+IGI7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPihj
b25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1
cm4gYSA+IGIudG9GbG9hdCgpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgZG91
YmxlIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBhID4g
Yi50b0RvdWJsZSgpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICBy
ZXR1cm4gYS5yYXdWYWx1ZSgpICE9IGIucmF3VmFsdWUoKTsKLX0KLQotaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKLXsKLSAgICBy
ZXR1cm4gYSAhPSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKLX0KLQotaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0g
ICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpICE9IGI7Ci19Ci0KLWlubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQotewotICAg
IHJldHVybiBhICE9IEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOwotfQotCi1pbmxpbmUgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gYS5yYXdWYWx1ZSgpID09IGIucmF3VmFsdWUo
KTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYSwgaW50IGIpCi17Ci0gICAgcmV0dXJuIGEgPT0gRnJhY3Rpb25hbExheW91dFVuaXQoYik7
Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgaW50IGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSA9
PSBiOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBhLCBmbG9hdCBiKQotewotICAgIHJldHVybiBhLnRvRmxvYXQoKSA9PSBiOwotfQotCi1p
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBiKQotewotICAgIHJldHVybiBhID09IGIudG9GbG9hdCgpOwotfQotCi0vLyBGb3Ig
bXVsdGlwbGljYXRpb24gdGhhdCdzIHByb25lIHRvIG92ZXJmbG93LCB0aGlzIGJvdW5kcyBpdCB0
byBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWF4KCkgYW5kIDo6bWluKCkKLWlubGluZSBGcmFjdGlv
bmFsTGF5b3V0VW5pdCBib3VuZGVkTXVsdGlwbHkoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotI2lmIEVOQUJMRShTVUJQSVhF
TF9MQVlPVVQpCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOwotICAgIGxvbmcg
bG9uZyByYXdWYWwgPSBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGEucmF3VmFsdWUoKSkgKiBiLnJh
d1ZhbHVlKCkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOwotICAgIGlmIChyYXdWYWwgPiBzdGQ6
Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQotICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExh
eW91dFVuaXQ6Om1heCgpOwotICAgIGlmIChyYXdWYWwgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1pbigpKQotICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQ6Om1pbigpOwot
ICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShyYXdWYWwpOwotICAgIHJldHVybiByZXR1cm5WYWw7
Ci0jZWxzZQotICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgKiBiLnJhd1ZhbHVlKCk7Ci0jZW5kaWYK
LX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKihjb25zdCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0jaWYg
RU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkgJiYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhN
RVRJQykKLSAgICByZXR1cm4gYm91bmRlZE11bHRpcGx5KGEsIGIpOwotI2VsaWYgRU5BQkxFKFNV
QlBJWEVMX0xBWU9VVCkKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7Ci0gICAg
bG9uZyBsb25nIHJhd1ZhbCA9IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oYS5yYXdWYWx1ZSgpKSAq
IGIucmF3VmFsdWUoKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0gICAgcmV0dXJuVmFsLnNl
dFJhd1ZhbHVlKHJhd1ZhbCk7Ci0gICAgcmV0dXJuIHJldHVyblZhbDsKLSNlbHNlCi0gICAgcmV0
dXJuIGEucmF3VmFsdWUoKSAqIGIucmF3VmFsdWUoKTsKLSNlbmRpZgotfSAgICAKLQotaW5saW5l
IGRvdWJsZSBvcGVyYXRvciooY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGRvdWJsZSBi
KQotewotICAgIHJldHVybiBhLnRvRG91YmxlKCkgKiBiOwotfQotCi1pbmxpbmUgZmxvYXQgb3Bl
cmF0b3IqKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQotewotICAgIHJl
dHVybiBhLnRvRmxvYXQoKSAqIGI7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBv
cGVyYXRvciooY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQotewotICAgIHJl
dHVybiBhICogRnJhY3Rpb25hbExheW91dFVuaXQoYik7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBvcGVyYXRvciooY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIHVuc2ln
bmVkIGIpCi17Ci0gICAgcmV0dXJuIGEgKiBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKLX0KLQot
aW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKih1bnNpZ25lZCBhLCBjb25zdCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVu
aXQoYSkgKiBiOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IqKGNv
bnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFVuaXQoYSkgKiBiOwotfQotCi1pbmxpbmUgZmxvYXQgb3BlcmF0b3Iq
KGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJl
dHVybiBhICogYi50b0Zsb2F0KCk7Ci19Ci0KLWlubGluZSBkb3VibGUgb3BlcmF0b3IqKGNvbnN0
IGRvdWJsZSBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4g
YSAqIGIudG9Eb3VibGUoKTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJh
dG9yLyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGIpCi17Ci0jaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCByZXR1cm5WYWw7Ci0gICAgbG9uZyBsb25nIHJhd1ZhbCA9IHN0YXRpY19jYXN0
PGxvbmcgbG9uZz4oa0ZpeGVkUG9pbnREZW5vbWluYXRvcikgKiBhLnJhd1ZhbHVlKCkgLyBiLnJh
d1ZhbHVlKCk7Ci0gICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKHJhd1ZhbCk7Ci0gICAgcmV0dXJu
IHJldHVyblZhbDsKLSNlbHNlCi0gICAgcmV0dXJuIGEucmF3VmFsdWUoKSAvIGIucmF3VmFsdWUo
KTsKLSNlbmRpZgotfSAgICAKLQotaW5saW5lIGZsb2F0IG9wZXJhdG9yLyhjb25zdCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKLXsKLSAgICByZXR1cm4gYS50b0Zsb2F0KCkgLyBi
OwotfQotCi1pbmxpbmUgZG91YmxlIG9wZXJhdG9yLyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYSwgZG91YmxlIGIpCi17Ci0gICAgcmV0dXJuIGEudG9Eb3VibGUoKSAvIGI7Ci19Ci0KLWlu
bGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci8oY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGEsIGludCBiKQotewotICAgIHJldHVybiBhIC8gRnJhY3Rpb25hbExheW91dFVuaXQo
Yik7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci8oY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGEsIHVuc2lnbmVkIGludCBiKQotewotICAgIHJldHVybiBhIC8g
RnJhY3Rpb25hbExheW91dFVuaXQoYik7Ci19Ci0KLWlubGluZSBmbG9hdCBvcGVyYXRvci8oY29u
c3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJu
IGEgLyBiLnRvRmxvYXQoKTsKLX0KLQotaW5saW5lIGRvdWJsZSBvcGVyYXRvci8oY29uc3QgZG91
YmxlIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBhIC8g
Yi50b0RvdWJsZSgpOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3Iv
KGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1
cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgLyBiOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExh
eW91dFVuaXQgb3BlcmF0b3IvKHVuc2lnbmVkIGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYikKLXsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgLyBiOwotfQot
Ci1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICBGcmFj
dGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7Ci0jaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRf
QVJJVEhNRVRJQykKLSAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUoc2F0dXJhdGVkQWRkaXRpb24o
YS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKLSNlbHNlCi0gICAgcmV0dXJuVmFsLnNldFJh
d1ZhbHVlKGEucmF3VmFsdWUoKSArIGIucmF3VmFsdWUoKSk7Ci0jZW5kaWYKLSAgICByZXR1cm4g
cmV0dXJuVmFsOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IrKGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKLXsKLSAgICByZXR1cm4gYSArIEZy
YWN0aW9uYWxMYXlvdXRVbml0KGIpOwotfQotCi1pbmxpbmUgZmxvYXQgb3BlcmF0b3IrKGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQotewotICAgIHJldHVybiBhLnRvRmxv
YXQoKSArIGI7Ci19Ci0KLWlubGluZSBkb3VibGUgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRVbml0JiBhLCBkb3VibGUgYikKLXsKLSAgICByZXR1cm4gYS50b0RvdWJsZSgpICsgYjsK
LX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKyhjb25zdCBpbnQgYSwg
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxM
YXlvdXRVbml0KGEpICsgYjsKLX0KLQotaW5saW5lIGZsb2F0IG9wZXJhdG9yKyhjb25zdCBmbG9h
dCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gYSArIGIu
dG9GbG9hdCgpOwotfQotCi1pbmxpbmUgZG91YmxlIG9wZXJhdG9yKyhjb25zdCBkb3VibGUgYSwg
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJuIGEgKyBiLnRvRG91
YmxlKCk7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci0oY29uc3Qg
RnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQot
ewotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJldHVyblZhbDsKLSNpZiBFTkFCTEUoU0FUVVJB
VEVEX0xBWU9VVF9BUklUSE1FVElDKQotICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShzYXR1cmF0
ZWRTdWJ0cmFjdGlvbihhLnJhd1ZhbHVlKCksIGIucmF3VmFsdWUoKSkpOwotI2Vsc2UKLSAgICBy
ZXR1cm5WYWwuc2V0UmF3VmFsdWUoYS5yYXdWYWx1ZSgpIC0gYi5yYXdWYWx1ZSgpKTsKLSNlbmRp
ZgotICAgIHJldHVybiByZXR1cm5WYWw7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQotewotICAg
IHJldHVybiBhIC0gRnJhY3Rpb25hbExheW91dFVuaXQoYik7Ci19Ci0KLWlubGluZSBGcmFjdGlv
bmFsTGF5b3V0VW5pdCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIHVu
c2lnbmVkIGIpCi17Ci0gICAgcmV0dXJuIGEgLSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKLX0K
LQotaW5saW5lIGZsb2F0IG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwg
ZmxvYXQgYikKLXsKLSAgICByZXR1cm4gYS50b0Zsb2F0KCkgLSBiOwotfQotCi1pbmxpbmUgRnJh
Y3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3ItKGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgLSBi
OwotfQotCi1pbmxpbmUgZmxvYXQgb3BlcmF0b3ItKGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBhIC0gYi50b0Zsb2F0KCk7Ci19Ci0K
LWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGEpCi17Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOwotICAg
IHJldHVyblZhbC5zZXRSYXdWYWx1ZSgtYS5yYXdWYWx1ZSgpKTsKLSAgICByZXR1cm4gcmV0dXJu
VmFsOwotfQotCi0vLyBGb3IgcmV0dXJuaW5nIHRoZSByZW1haW5kZXIgYWZ0ZXIgYSBkaXZpc2lv
biB3aXRoIGludGVnZXIgcmVzdWx0cy4KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBpbnRN
b2QoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBiKQotewotI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCi0gICAgLy8gVGhpcyBjYWxj
dWxhdGVzIHRoZSBtb2R1bG8gc28gdGhhdDogYSA9IHN0YXRpY19jYXN0PGludD4oYSAvIGIpICog
YiArIGludE1vZChhLCBiKS4KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7Ci0g
ICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKGEucmF3VmFsdWUoKSAlIGIucmF3VmFsdWUoKSk7Ci0g
ICAgcmV0dXJuIHJldHVyblZhbDsKLSNlbHNlCi0gICAgcmV0dXJuIGEucmF3VmFsdWUoKSAlIGIu
cmF3VmFsdWUoKTsKLSNlbmRpZgotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3Bl
cmF0b3IlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgYikKLXsKLSNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAgIC8vIFRoaXMg
Y2FsY3VsYXRlcyB0aGUgbW9kdWxvIHNvIHRoYXQ6IGEgPSAoYSAvIGIpICogYiArIGEgJSBiLgot
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJldHVyblZhbDsKLSAgICBsb25nIGxvbmcgcmF3VmFs
ID0gKHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oa0ZpeGVkUG9pbnREZW5vbWluYXRvcikgKiBhLnJh
d1ZhbHVlKCkpICUgYi5yYXdWYWx1ZSgpOwotICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShyYXdW
YWwgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yKTsKLSAgICByZXR1cm4gcmV0dXJuVmFsOwotI2Vs
c2UKLSAgICByZXR1cm4gYS5yYXdWYWx1ZSgpICUgYi5yYXdWYWx1ZSgpOwotI2VuZGlmCi19Ci0K
LWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvciUoY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGEsIGludCBiKQotewotICAgIHJldHVybiBhICUgRnJhY3Rpb25hbExheW91dFVu
aXQoYik7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvciUoaW50IGEs
IGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBGcmFjdGlvbmFs
TGF5b3V0VW5pdChhKSAlIGI7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3Bl
cmF0b3IrPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVu
aXQmIGIpCi17Ci0jaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKLSAgICBh
LnNldFJhd1ZhbHVlKHNhdHVyYXRlZEFkZGl0aW9uKGEucmF3VmFsdWUoKSwgYi5yYXdWYWx1ZSgp
KSk7Ci0jZWxzZQotICAgIGEgPSBhICsgYjsKLSNlbmRpZgotICAgIHJldHVybiBhOwotfQotCi1p
bmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yKz0oRnJhY3Rpb25hbExheW91dFVu
aXQmIGEsIGludCBiKQotewotICAgIGEgPSBhICsgYjsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvcis9KEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBhLCBmbG9hdCBiKQotewotICAgIGEgPSBhICsgYjsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5s
aW5lIGZsb2F0JiBvcGVyYXRvcis9KGZsb2F0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYikKLXsKLSAgICBhID0gYSArIGI7Ci0gICAgcmV0dXJuIGE7Ci19Ci0KLWlubGluZSBGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3ItPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50
IGIpCi17Ci0gICAgYSA9IGEgLSBiOwotICAgIHJldHVybiBhOwotfQotCi1pbmxpbmUgRnJhY3Rp
b25hbExheW91dFVuaXQmIG9wZXJhdG9yLT0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VU
X0FSSVRITUVUSUMpCi0gICAgYS5zZXRSYXdWYWx1ZShzYXR1cmF0ZWRTdWJ0cmFjdGlvbihhLnJh
d1ZhbHVlKCksIGIucmF3VmFsdWUoKSkpOwotI2Vsc2UKLSAgICBhID0gYSAtIGI7Ci0jZW5kaWYK
LSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRv
ci09KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQotewotICAgIGEgPSBhIC0gYjsK
LSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5lIGZsb2F0JiBvcGVyYXRvci09KGZsb2F0JiBhLCBj
b25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICBhID0gYSAtIGI7Ci0gICAgcmV0
dXJuIGE7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3IqPShGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0g
ICAgYSA9IGEgKiBiOwotICAgIHJldHVybiBhOwotfQotLy8gb3BlcmF0b3IqPShGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYSwgaW50IGIpIGlzIHN1cHBvcnRlZCBieSB0aGUgb3BlcmF0b3IgYWJvdmUg
cGx1cyBGcmFjdGlvbmFsTGF5b3V0VW5pdChpbnQpLgotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91
dFVuaXQmIG9wZXJhdG9yKj0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCi17Ci0g
ICAgYSA9IGEgKiBiOwotICAgIHJldHVybiBhOwotfQotCi1pbmxpbmUgZmxvYXQmIG9wZXJhdG9y
Kj0oZmxvYXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIGEgPSBh
ICogYjsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBv
cGVyYXRvci89KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYikKLXsKLSAgICBhID0gYSAvIGI7Ci0gICAgcmV0dXJuIGE7Ci19Ci0vLyBvcGVyYXRv
ci89KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikgaXMgc3VwcG9ydGVkIGJ5IHRoZSBv
cGVyYXRvciBhYm92ZSBwbHVzIEZyYWN0aW9uYWxMYXlvdXRVbml0KGludCkuCi0KLWlubGluZSBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3IvPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwg
ZmxvYXQgYikKLXsKLSAgICBhID0gYSAvIGI7Ci0gICAgcmV0dXJuIGE7Ci19Ci0KLWlubGluZSBm
bG9hdCYgb3BlcmF0b3IvPShmbG9hdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIp
Ci17Ci0gICAgYSA9IGEgLyBiOwotICAgIHJldHVybiBhOwotfQotCi1pbmxpbmUgaW50IHNuYXBT
aXplVG9QaXhlbChGcmFjdGlvbmFsTGF5b3V0VW5pdCBzaXplLCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBsb2NhdGlvbikgCi17Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgZnJhY3Rpb24gPSBsb2Nh
dGlvbi5mcmFjdGlvbigpOwotICAgIHJldHVybiAoZnJhY3Rpb24gKyBzaXplKS5yb3VuZCgpIC0g
ZnJhY3Rpb24ucm91bmQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gRnJhY3Rpb25hbExheW91dFVuaXRfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
TGF5b3V0VW5pdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xheW91
dFVuaXQuaAkocmV2aXNpb24gMTMzNTE3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9G
cmFjdGlvbmFsTGF5b3V0VW5pdC5oOjEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0xheW91dFVuaXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgyNSBAQAorLyoKKyAqIENv
cHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZy
YWN0aW9uYWxMYXlvdXRVbml0X2gKKyNkZWZpbmUgRnJhY3Rpb25hbExheW91dFVuaXRfaAorCisj
aW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPG1hdGguaD4K
KyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1
ZGUgPHd0Zi9TYXR1cmF0ZWRBcml0aG1ldGljLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
I2lmZGVmIE5ERUJVRworCisjZGVmaW5lIFJFUE9SVF9PVkVSRkxPVyhkb2VzT3ZlcmZsb3cpICgo
dm9pZCkwKQorCisjZWxzZQorCisjZGVmaW5lIFJFUE9SVF9PVkVSRkxPVyhkb2VzT3ZlcmZsb3cp
IGRvIFwKKyAgICBpZiAoIShkb2VzT3ZlcmZsb3cpKSB7IFwKKyAgICAgICAgV1RGUmVwb3J0RXJy
b3IoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAiISglcykiLCAjZG9l
c092ZXJmbG93KTsgXAorICAgIH0gXAord2hpbGUgKDApCisKKyNlbmRpZgorCisjaWYgRU5BQkxF
KFNVQlBJWEVMX0xBWU9VVCkKK3N0YXRpYyBjb25zdCBpbnQga0ZpeGVkUG9pbnREZW5vbWluYXRv
ciA9IDY0OworI2Vsc2UKK3N0YXRpYyBjb25zdCBpbnQga0ZpeGVkUG9pbnREZW5vbWluYXRvciA9
IDE7CisjZW5kaWYKK2NvbnN0IGludCBpbnRNYXhGb3JMYXlvdXRVbml0ID0gSU5UX01BWCAvIGtG
aXhlZFBvaW50RGVub21pbmF0b3I7Citjb25zdCBpbnQgaW50TWluRm9yTGF5b3V0VW5pdCA9IElO
VF9NSU4gLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOworCitjbGFzcyBGcmFjdGlvbmFsTGF5b3V0
VW5pdCB7CitwdWJsaWM6CisgICAgLy8gRklYTUU6IElkZWFsbHkgd2Ugd291bGQgaGF2ZSBzaXpl
X3QgdmVyc2lvbnMgb2YgdGhlIGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRvcnMuCisgICAgLy8gSG93
ZXZlciBkdWUgdG8gY29tcGlsZXIgYW5kIHBsYXRmb3JtIGRpZmZlcmVuY2VzIGFkZGluZyB0aG9z
ZSBhcmUgbm9uLXRyaXZpYWwuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04Mzg0OCBmb3IgZGV0YWlscy4KKyAgICAKKyAgICBGcmFjdGlvbmFsTGF5
b3V0VW5pdCgpIDogbV92YWx1ZSgwKSB7IH0KKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQor
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KGludCB2YWx1ZSkgeyBzZXRWYWx1ZSh2YWx1ZSk7IH0K
KyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCh1bnNpZ25lZCBzaG9ydCB2YWx1ZSkgeyBzZXRWYWx1
ZSh2YWx1ZSk7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCh1bnNpZ25lZCBpbnQgdmFsdWUp
IHsgc2V0VmFsdWUodmFsdWUpOyB9CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQoZmxvYXQgdmFs
dWUpCisgICAgeworI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCisgICAg
ICAgIG1fdmFsdWUgPSBjbGFtcFRvPGZsb2F0Pih2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0
b3IsIHN0YXRpY19jYXN0PGZsb2F0PihJTlRfTUlOKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KElOVF9N
QVgpKTsKKyNlbHNlCisgICAgICAgIFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7
CisgICAgICAgIG1fdmFsdWUgPSB2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3I7CisjZW5k
aWYKKyAgICB9CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQoZG91YmxlIHZhbHVlKQorICAgIHsK
KyNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQorICAgICAgICBtX3ZhbHVl
ID0gY2xhbXBUbzxkb3VibGU+KHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvciwgc3RhdGlj
X2Nhc3Q8ZG91YmxlPihJTlRfTUlOKSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihJTlRfTUFYKSk7Cisj
ZWxzZQorICAgICAgICBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOworICAgICAg
ICBtX3ZhbHVlID0gdmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yOworI2VuZGlmCisgICAg
fQorI2Vsc2UKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdChpbnQgdmFsdWUpIHsgUkVQT1JUX09W
RVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsgbV92YWx1ZSA9IHZhbHVlOyB9CisgICAgRnJhY3Rp
b25hbExheW91dFVuaXQodW5zaWduZWQgc2hvcnQgdmFsdWUpIHsgUkVQT1JUX09WRVJGTE9XKGlz
SW5Cb3VuZHModmFsdWUpKTsgbV92YWx1ZSA9IHZhbHVlOyB9CisgICAgRnJhY3Rpb25hbExheW91
dFVuaXQodW5zaWduZWQgaW50IHZhbHVlKSB7IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZh
bHVlKSk7IG1fdmFsdWUgPSB2YWx1ZTsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KGZsb2F0
IHZhbHVlKSB7IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7IG1fdmFsdWUgPSB2
YWx1ZTsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KGRvdWJsZSB2YWx1ZSkgeyBSRVBPUlRf
T1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFsdWU7IH0KKyNlbmRpZgor
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiB2YWx1
ZSkgeyBtX3ZhbHVlID0gdmFsdWUucmF3VmFsdWUoKTsgfQorCisgICAgc3RhdGljIEZyYWN0aW9u
YWxMYXlvdXRVbml0IGZyb21GbG9hdENlaWwoZmxvYXQgdmFsdWUpCisgICAgeworICAgICAgICBG
cmFjdGlvbmFsTGF5b3V0VW5pdCB2OworI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRI
TUVUSUMpCisgICAgICAgIHYubV92YWx1ZSA9IGNsYW1wVG9JbnRlZ2VyKGNlaWxmKHZhbHVlICog
a0ZpeGVkUG9pbnREZW5vbWluYXRvcikpOworI2Vsc2UKKyAgICAgICAgUkVQT1JUX09WRVJGTE9X
KGlzSW5Cb3VuZHModmFsdWUpKTsKKyAgICAgICAgdi5tX3ZhbHVlID0gY2VpbGYodmFsdWUgKiBr
Rml4ZWRQb2ludERlbm9taW5hdG9yKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gdjsKKyAgICB9
CisKKyAgICBzdGF0aWMgRnJhY3Rpb25hbExheW91dFVuaXQgZnJvbUZsb2F0Rmxvb3IoZmxvYXQg
dmFsdWUpCisgICAgeworICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB2OworI2lmIEVOQUJM
RShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCisgICAgICAgIHYubV92YWx1ZSA9IGNsYW1w
VG9JbnRlZ2VyKGZsb29yZih2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3IpKTsKKyNlbHNl
CisgICAgICAgIFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7CisgICAgICAgIHYu
bV92YWx1ZSA9IGZsb29yZih2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3IpOworI2VuZGlm
CisgICAgICAgIHJldHVybiB2OworICAgIH0KKworICAgIHN0YXRpYyBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBmcm9tRmxvYXRSb3VuZChmbG9hdCB2YWx1ZSkKKyAgICB7CisjaWYgRU5BQkxFKFNBVFVS
QVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKKyAgICAgICAgaWYgKHZhbHVlID49IDApCisgICAgICAg
ICAgICByZXR1cm4gY2xhbXAodmFsdWUgKyBlcHNpbG9uKCkgLyAyLjBmKTsKKyAgICAgICAgcmV0
dXJuIGNsYW1wKHZhbHVlIC0gZXBzaWxvbigpIC8gMi4wZik7CisjZWxzZQorICAgICAgICBpZiAo
dmFsdWUgPj0gMCkgeworICAgICAgICAgICAgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFs
dWUgKyBlcHNpbG9uKCkgLyAyLjBmKSk7CisgICAgICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExh
eW91dFVuaXQodmFsdWUgKyBlcHNpbG9uKCkgLyAyLjBmKTsKKyAgICAgICAgfQorICAgICAgICBS
RVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSAtIGVwc2lsb24oKSAvIDIuMGYpKTsKKyAg
ICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KHZhbHVlIC0gZXBzaWxvbigpIC8gMi4w
Zik7CisjZW5kaWYKKyAgICB9CisKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIGlu
dCB0b0ludCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgLyBrRml4ZWRQb2ludERlbm9taW5hdG9y
OyB9CisgICAgZmxvYXQgdG9GbG9hdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0
PihtX3ZhbHVlKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7IH0KKyAgICBkb3VibGUgdG9Eb3Vi
bGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdmFsdWUpIC8ga0ZpeGVk
UG9pbnREZW5vbWluYXRvcjsgfQorICAgIGZsb2F0IGNlaWxUb0Zsb2F0KCkgY29uc3QKKyAgICB7
CisgICAgICAgIGZsb2F0IGZsb2F0VmFsdWUgPSB0b0Zsb2F0KCk7CisgICAgICAgIGlmIChzdGF0
aWNfY2FzdDxpbnQ+KGZsb2F0VmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yKSA9PSBtX3Zh
bHVlKQorICAgICAgICAgICAgcmV0dXJuIGZsb2F0VmFsdWU7CisgICAgICAgIGlmIChmbG9hdFZh
bHVlID4gMCkKKyAgICAgICAgICAgIHJldHVybiBuZXh0YWZ0ZXJmKGZsb2F0VmFsdWUsIHN0ZDo6
bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSk7CisgICAgICAgIHJldHVybiBuZXh0YWZ0ZXJm
KGZsb2F0VmFsdWUsIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptaW4oKSk7CisgICAgfQor
I2Vsc2UKKyAgICBpbnQgdG9JbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgZmxv
YXQgdG9GbG9hdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX3ZhbHVlKTsg
fQorICAgIGRvdWJsZSB0b0RvdWJsZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJs
ZT4obV92YWx1ZSk7IH0KKyAgICBmbG9hdCBjZWlsVG9GbG9hdCgpIGNvbnN0IHsgcmV0dXJuIHRv
RmxvYXQoKTsgfQorI2VuZGlmCisgICAgdW5zaWduZWQgdG9VbnNpZ25lZCgpIGNvbnN0IHsgUkVQ
T1JUX09WRVJGTE9XKG1fdmFsdWUgPj0gMCk7IHJldHVybiB0b0ludCgpOyB9CisKKyAgICBvcGVy
YXRvciBpbnQoKSBjb25zdCB7IHJldHVybiB0b0ludCgpOyB9CisgICAgb3BlcmF0b3IgdW5zaWdu
ZWQoKSBjb25zdCB7IHJldHVybiB0b1Vuc2lnbmVkKCk7IH0KKyAgICBvcGVyYXRvciBmbG9hdCgp
IGNvbnN0IHsgcmV0dXJuIHRvRmxvYXQoKTsgfQorICAgIG9wZXJhdG9yIGRvdWJsZSgpIGNvbnN0
IHsgcmV0dXJuIHRvRG91YmxlKCk7IH0KKyAgICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZTsgfQorCisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IrKyhpbnQp
CisgICAgeworICAgICAgICBtX3ZhbHVlICs9IGtGaXhlZFBvaW50RGVub21pbmF0b3I7CisgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBpbmxpbmUgaW50IHJhd1ZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIGlubGluZSB2b2lkIHNldFJhd1ZhbHVlKGludCB2
YWx1ZSkgeyBtX3ZhbHVlID0gdmFsdWU7IH0KKyAgICB2b2lkIHNldFJhd1ZhbHVlKGxvbmcgbG9u
ZyB2YWx1ZSkKKyAgICB7CisgICAgICAgIFJFUE9SVF9PVkVSRkxPVyh2YWx1ZSA+IHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50Pjo6bWluKCkgJiYgdmFsdWUgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1heCgpKTsKKyAgICAgICAgbV92YWx1ZSA9IHN0YXRpY19jYXN0PGludD4odmFsdWUpOwor
ICAgIH0KKworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGFicygpIGNvbnN0CisgICAgeworICAg
ICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWx1ZTsKKyAgICAgICAgcmV0dXJuVmFs
dWUuc2V0UmF3VmFsdWUoOjphYnMobV92YWx1ZSkpOworICAgICAgICByZXR1cm4gcmV0dXJuVmFs
dWU7CisgICAgfQorI2lmIE9TKERBUldJTikKKyAgICBpbnQgd3RmX2NlaWwoKSBjb25zdAorI2Vs
c2UKKyAgICBpbnQgY2VpbCgpIGNvbnN0CisjZW5kaWYKKyAgICB7CisjaWYgRU5BQkxFKFNVQlBJ
WEVMX0xBWU9VVCkKKyAgICAgICAgaWYgKG1fdmFsdWUgPj0gMCkKKyAgICAgICAgICAgIHJldHVy
biAobV92YWx1ZSArIGtGaXhlZFBvaW50RGVub21pbmF0b3IgLSAxKSAvIGtGaXhlZFBvaW50RGVu
b21pbmF0b3I7CisgICAgICAgIHJldHVybiB0b0ludCgpOworI2Vsc2UKKyAgICAgICAgcmV0dXJu
IG1fdmFsdWU7CisjZW5kaWYKKyAgICB9CisgICAgaW50IHJvdW5kKCkgY29uc3QKKyAgICB7Cisj
aWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkgJiYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJ
VEhNRVRJQykKKyAgICAgICAgaWYgKG1fdmFsdWUgPiAwKQorICAgICAgICAgICAgcmV0dXJuIHNh
dHVyYXRlZEFkZGl0aW9uKHJhd1ZhbHVlKCksIGtGaXhlZFBvaW50RGVub21pbmF0b3IgLyAyKSAv
IGtGaXhlZFBvaW50RGVub21pbmF0b3I7CisgICAgICAgIHJldHVybiBzYXR1cmF0ZWRTdWJ0cmFj
dGlvbihyYXdWYWx1ZSgpLCBrRml4ZWRQb2ludERlbm9taW5hdG9yIC8gMikgLyBrRml4ZWRQb2lu
dERlbm9taW5hdG9yOworI2VsaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKKyAgICAgICAgaWYg
KG1fdmFsdWUgPiAwKQorICAgICAgICAgICAgcmV0dXJuIChtX3ZhbHVlICsgKGtGaXhlZFBvaW50
RGVub21pbmF0b3IgLyAyKSkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOworICAgICAgICByZXR1
cm4gKG1fdmFsdWUgLSAoa0ZpeGVkUG9pbnREZW5vbWluYXRvciAvIDIpKSAvIGtGaXhlZFBvaW50
RGVub21pbmF0b3I7CisjZWxzZQorICAgICAgICByZXR1cm4gbV92YWx1ZTsKKyNlbmRpZgorICAg
IH0KKworICAgIGludCBmbG9vcigpIGNvbnN0CisgICAgeworI2lmIEVOQUJMRShTVUJQSVhFTF9M
QVlPVVQpCisgICAgICAgIGlmIChtX3ZhbHVlID49IDApCisgICAgICAgICAgICByZXR1cm4gdG9J
bnQoKTsKKyAgICAgICAgcmV0dXJuIChtX3ZhbHVlIC0ga0ZpeGVkUG9pbnREZW5vbWluYXRvciAr
IDEpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKKyNlbHNlCisgICAgICAgIHJldHVybiBtX3Zh
bHVlOworI2VuZGlmCisgICAgfQorCisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZnJhY3Rpb24o
KSBjb25zdAorICAgIHsgICAKKyAgICAgICAgLy8gQWRkIHRoZSBmcmFjdGlvbiB0byB0aGUgc2l6
ZSAoYXMgb3Bwb3NlZCB0byB0aGUgZnVsbCBsb2NhdGlvbikgdG8gYXZvaWQgb3ZlcmZsb3dzLgor
ICAgICAgICAvLyBDb21wdXRlIGZyYWN0aW9uIHVzaW5nIHRoZSBtb2Qgb3BlcmF0b3IgdG8gcHJl
c2VydmUgdGhlIHNpZ24gb2YgdGhlIHZhbHVlIGFzIGl0IG1heSBhZmZlY3Qgcm91bmRpbmcuCisg
ICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGZyYWN0aW9uOworICAgICAgICBmcmFjdGlvbi5z
ZXRSYXdWYWx1ZShyYXdWYWx1ZSgpICUga0ZpeGVkUG9pbnREZW5vbWluYXRvcik7CisgICAgICAg
IHJldHVybiBmcmFjdGlvbjsKKyAgICB9CisKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQor
ICAgIHN0YXRpYyBmbG9hdCBlcHNpbG9uKCkgeyByZXR1cm4gMS4wZiAvIGtGaXhlZFBvaW50RGVu
b21pbmF0b3I7IH0KKyNlbHNlCisgICAgc3RhdGljIGludCBlcHNpbG9uKCkgeyByZXR1cm4gMDsg
fQorI2VuZGlmCisgICAgc3RhdGljIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0IG1heCgpCisg
ICAgeworICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtOworICAgICAgICBtLm1fdmFsdWUg
PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOworICAgICAgICByZXR1cm4gbTsKKyAg
ICB9CisgICAgc3RhdGljIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0IG1pbigpCisgICAgewor
ICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtOworICAgICAgICBtLm1fdmFsdWUgPSBzdGQ6
Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpOworICAgICAgICByZXR1cm4gbTsKKyAgICB9CisK
KyAgICAvLyBWZXJzaW9ucyBvZiBtYXgvbWluIHRoYXQgYXJlIHNsaWdodGx5IHNtYWxsZXIvbGFy
Z2VyIHRoYW4gbWF4L21pbigpIHRvIGFsbG93IGZvciByb2luZGluZyB3aXRob3V0IG92ZXJmbG93
aW5nLgorICAgIHN0YXRpYyBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBuZWFybHlNYXgoKQor
ICAgIHsKKyAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbTsKKyAgICAgICAgbS5tX3ZhbHVl
ID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSAtIGtGaXhlZFBvaW50RGVub21pbmF0
b3IgLyAyOworICAgICAgICByZXR1cm4gbTsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0IG5lYXJseU1pbigpCisgICAgeworICAgICAgICBGcmFjdGlvbmFsTGF5
b3V0VW5pdCBtOworICAgICAgICBtLm1fdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46
Om1pbigpICsga0ZpeGVkUG9pbnREZW5vbWluYXRvciAvIDI7CisgICAgICAgIHJldHVybiBtOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgRnJhY3Rpb25hbExheW91dFVuaXQgY2xhbXAoZG91Ymxl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNsYW1wVG88RnJhY3Rpb25hbExheW91dFVu
aXQ+KHZhbHVlLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWluKCksIEZyYWN0aW9uYWxMYXlvdXRV
bml0OjptYXgoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIGlzSW5Cb3Vu
ZHMoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDo6YWJzKHZhbHVlKSA8PSBzdGQ6
Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKKyAg
ICB9CisgICAgc3RhdGljIGJvb2wgaXNJbkJvdW5kcyh1bnNpZ25lZCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB2YWx1ZSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptYXgoKSkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOworICAgIH0KKyAg
ICBzdGF0aWMgYm9vbCBpc0luQm91bmRzKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiA6OmZhYnModmFsdWUpIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkgLyBr
Rml4ZWRQb2ludERlbm9taW5hdG9yOworICAgIH0KKyAgICAKKyAgICBpbmxpbmUgdm9pZCBzZXRW
YWx1ZShpbnQgdmFsdWUpCisgICAgeworI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRI
TUVUSUMpCisgICAgICAgIGlmICh2YWx1ZSA+IGludE1heEZvckxheW91dFVuaXQpCisgICAgICAg
ICAgICBtX3ZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKKyAgICAgICAg
ZWxzZSBpZiAodmFsdWUgPCBpbnRNaW5Gb3JMYXlvdXRVbml0KQorICAgICAgICAgICAgbV92YWx1
ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1fdmFsdWUgPSB2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3I7CisjZWxzZQor
ICAgICAgICBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOworICAgICAgICBtX3Zh
bHVlID0gdmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yOworI2VuZGlmCisgICAgfQorICAg
IGlubGluZSB2b2lkIHNldFZhbHVlKHVuc2lnbmVkIHZhbHVlKQorICAgIHsKKyNpZiBFTkFCTEUo
U0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQorICAgICAgICBpZiAodmFsdWUgPj0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGludE1heEZvckxheW91dFVuaXQpKQorICAgICAgICAgICAgbV92YWx1
ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1fdmFsdWUgPSB2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3I7CisjZWxzZQor
ICAgICAgICBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOworICAgICAgICBtX3Zh
bHVlID0gdmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yOworI2VuZGlmCisgICAgfQorCisg
ICAgaW50IG1fdmFsdWU7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAg
ICByZXR1cm4gYS5yYXdWYWx1ZSgpIDw9IGIucmF3VmFsdWUoKTsKK30KKworaW5saW5lIGJvb2wg
b3BlcmF0b3I8PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK3sKKyAg
ICByZXR1cm4gYS50b0Zsb2F0KCkgPD0gYjsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I8PShj
b25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCit7CisgICAgcmV0dXJuIGEgPD0g
RnJhY3Rpb25hbExheW91dFVuaXQoYik7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPD0oY29u
c3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJu
IGEgPD0gYi50b0Zsb2F0KCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgaW50
IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBGcmFjdGlv
bmFsTGF5b3V0VW5pdChhKSA8PSBiOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikK
K3sKKyAgICByZXR1cm4gYS5yYXdWYWx1ZSgpID49IGIucmF3VmFsdWUoKTsKK30KKworaW5saW5l
IGJvb2wgb3BlcmF0b3I+PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCit7
CisgICAgcmV0dXJuIGEgPj0gRnJhY3Rpb25hbExheW91dFVuaXQoYik7Cit9CisKK2lubGluZSBi
b29sIG9wZXJhdG9yPj0oY29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGIpCit7CisgICAgcmV0dXJuIGEgPj0gYi50b0Zsb2F0KCk7Cit9CisKK2lubGluZSBib29sIG9w
ZXJhdG9yPj0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCit7CisgICAg
cmV0dXJuIGEudG9GbG9hdCgpID49IGI7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPj0oY29u
c3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBG
cmFjdGlvbmFsTGF5b3V0VW5pdChhKSA+PSBiOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcjwo
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBiKQoreworICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgPCBiLnJhd1ZhbHVlKCk7Cit9CisKK2lu
bGluZSBib29sIG9wZXJhdG9yPChjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIp
Cit7CisgICAgcmV0dXJuIGEgPCBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKK30KKworaW5saW5l
IGJvb2wgb3BlcmF0b3I8KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQor
eworICAgIHJldHVybiBhLnRvRmxvYXQoKSA8IGI7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9y
PChjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZG91YmxlIGIpCit7CisgICAgcmV0dXJu
IGEudG9Eb3VibGUoKSA8IGI7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBpbnQg
YSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEZyYWN0aW9u
YWxMYXlvdXRVbml0KGEpIDwgYjsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IGZs
b2F0IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBhIDwg
Yi50b0Zsb2F0KCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0
dXJuIGEucmF3VmFsdWUoKSA+IGIucmF3VmFsdWUoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0
b3I+KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBkb3VibGUgYikKK3sKKyAgICByZXR1
cm4gYS50b0RvdWJsZSgpID4gYjsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQoreworICAgIHJldHVybiBhLnRvRmxvYXQo
KSA+IGI7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYSwgaW50IGIpCit7CisgICAgcmV0dXJuIGEgPiBGcmFjdGlvbmFsTGF5b3V0VW5pdChi
KTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkg
PiBiOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgZmxvYXQgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEgPiBiLnRvRmxvYXQoKTsKK30K
KworaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IGRvdWJsZSBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4gYSA+IGIudG9Eb3VibGUoKTsKK30KKworaW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3Qg
RnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEucmF3VmFsdWUoKSAhPSBi
LnJhd1ZhbHVlKCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJhY3Rpb25h
bExheW91dFVuaXQmIGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEgIT0gRnJhY3Rpb25hbExh
eW91dFVuaXQoYik7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgaW50IGEsIGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5
b3V0VW5pdChhKSAhPSBiOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK3sKKyAgICByZXR1cm4gYSAhPSBGcmFjdGlvbmFs
TGF5b3V0VW5pdChiKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAg
cmV0dXJuIGEucmF3VmFsdWUoKSA9PSBiLnJhd1ZhbHVlKCk7Cit9CisKK2lubGluZSBib29sIG9w
ZXJhdG9yPT0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQoreworICAgIHJl
dHVybiBhID09IEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworfQorCitpbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAg
ICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgPT0gYjsKK30KKworaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK3sKKyAg
ICByZXR1cm4gYS50b0Zsb2F0KCkgPT0gYjsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1
cm4gYSA9PSBiLnRvRmxvYXQoKTsKK30KKworLy8gRm9yIG11bHRpcGxpY2F0aW9uIHRoYXQncyBw
cm9uZSB0byBvdmVyZmxvdywgdGhpcyBib3VuZHMgaXQgdG8gRnJhY3Rpb25hbExheW91dFVuaXQ6
Om1heCgpIGFuZCA6Om1pbigpCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgYm91bmRlZE11
bHRpcGx5KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgYikKK3sKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IHJldHVyblZhbDsKKyAgICBsb25nIGxvbmcgcmF3VmFsID0gc3RhdGljX2Nh
c3Q8bG9uZyBsb25nPihhLnJhd1ZhbHVlKCkpICogYi5yYXdWYWx1ZSgpIC8ga0ZpeGVkUG9pbnRE
ZW5vbWluYXRvcjsKKyAgICBpZiAocmF3VmFsID4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKSkKKyAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0OjptYXgoKTsKKyAgICBp
ZiAocmF3VmFsIDwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSkKKyAgICAgICAgcmV0
dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0OjptaW4oKTsKKyAgICByZXR1cm5WYWwuc2V0UmF3VmFs
dWUocmF3VmFsKTsKKyAgICByZXR1cm4gcmV0dXJuVmFsOworI2Vsc2UKKyAgICByZXR1cm4gYS5y
YXdWYWx1ZSgpICogYi5yYXdWYWx1ZSgpOworI2VuZGlmCit9CisKK2lubGluZSBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBvcGVyYXRvciooY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQp
ICYmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCisgICAgcmV0dXJuIGJvdW5k
ZWRNdWx0aXBseShhLCBiKTsKKyNlbGlmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisgICAgRnJh
Y3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOworICAgIGxvbmcgbG9uZyByYXdWYWwgPSBzdGF0
aWNfY2FzdDxsb25nIGxvbmc+KGEucmF3VmFsdWUoKSkgKiBiLnJhd1ZhbHVlKCkgLyBrRml4ZWRQ
b2ludERlbm9taW5hdG9yOworICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShyYXdWYWwpOworICAg
IHJldHVybiByZXR1cm5WYWw7CisjZWxzZQorICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgKiBiLnJh
d1ZhbHVlKCk7CisjZW5kaWYKK30gICAgCisKK2lubGluZSBkb3VibGUgb3BlcmF0b3IqKGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBkb3VibGUgYikKK3sKKyAgICByZXR1cm4gYS50b0Rv
dWJsZSgpICogYjsKK30KKworaW5saW5lIGZsb2F0IG9wZXJhdG9yKihjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK3sKKyAgICByZXR1cm4gYS50b0Zsb2F0KCkgKiBiOwor
fQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IqKGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK3sKKyAgICByZXR1cm4gYSAqIEZyYWN0aW9uYWxMYXlv
dXRVbml0KGIpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IqKGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCB1bnNpZ25lZCBiKQoreworICAgIHJldHVybiBh
ICogRnJhY3Rpb25hbExheW91dFVuaXQoYik7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBvcGVyYXRvcioodW5zaWduZWQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIp
Cit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpICogYjsKK30KKworaW5saW5l
IEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKihjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rp
b25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEp
ICogYjsKK30KKworaW5saW5lIGZsb2F0IG9wZXJhdG9yKihjb25zdCBmbG9hdCBhLCBjb25zdCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4gYSAqIGIudG9GbG9hdCgpOwor
fQorCitpbmxpbmUgZG91YmxlIG9wZXJhdG9yKihjb25zdCBkb3VibGUgYSwgY29uc3QgRnJhY3Rp
b25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEgKiBiLnRvRG91YmxlKCk7Cit9CisK
K2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci8oY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworI2lmIEVOQUJM
RShTVUJQSVhFTF9MQVlPVVQpCisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOwor
ICAgIGxvbmcgbG9uZyByYXdWYWwgPSBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGtGaXhlZFBvaW50
RGVub21pbmF0b3IpICogYS5yYXdWYWx1ZSgpIC8gYi5yYXdWYWx1ZSgpOworICAgIHJldHVyblZh
bC5zZXRSYXdWYWx1ZShyYXdWYWwpOworICAgIHJldHVybiByZXR1cm5WYWw7CisjZWxzZQorICAg
IHJldHVybiBhLnJhd1ZhbHVlKCkgLyBiLnJhd1ZhbHVlKCk7CisjZW5kaWYKK30gICAgCisKK2lu
bGluZSBmbG9hdCBvcGVyYXRvci8oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0
IGIpCit7CisgICAgcmV0dXJuIGEudG9GbG9hdCgpIC8gYjsKK30KKworaW5saW5lIGRvdWJsZSBv
cGVyYXRvci8oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGRvdWJsZSBiKQoreworICAg
IHJldHVybiBhLnRvRG91YmxlKCkgLyBiOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVu
aXQgb3BlcmF0b3IvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK3sKKyAg
ICByZXR1cm4gYSAvIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworfQorCitpbmxpbmUgRnJhY3Rp
b25hbExheW91dFVuaXQgb3BlcmF0b3IvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCB1
bnNpZ25lZCBpbnQgYikKK3sKKyAgICByZXR1cm4gYSAvIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIp
OworfQorCitpbmxpbmUgZmxvYXQgb3BlcmF0b3IvKGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBhIC8gYi50b0Zsb2F0KCk7Cit9CisK
K2lubGluZSBkb3VibGUgb3BlcmF0b3IvKGNvbnN0IGRvdWJsZSBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4gYSAvIGIudG9Eb3VibGUoKTsKK30KKworaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLyhjb25zdCBpbnQgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0
KGEpIC8gYjsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLyh1bnNp
Z25lZCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJu
IEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpIC8gYjsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlv
dXRVbml0IG9wZXJhdG9yKyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJu
VmFsOworI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCisgICAgcmV0dXJu
VmFsLnNldFJhd1ZhbHVlKHNhdHVyYXRlZEFkZGl0aW9uKGEucmF3VmFsdWUoKSwgYi5yYXdWYWx1
ZSgpKSk7CisjZWxzZQorICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShhLnJhd1ZhbHVlKCkgKyBi
LnJhd1ZhbHVlKCkpOworI2VuZGlmCisgICAgcmV0dXJuIHJldHVyblZhbDsKK30KKworaW5saW5l
IEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYSwgaW50IGIpCit7CisgICAgcmV0dXJuIGEgKyBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsK
K30KKworaW5saW5lIGZsb2F0IG9wZXJhdG9yKyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
YSwgZmxvYXQgYikKK3sKKyAgICByZXR1cm4gYS50b0Zsb2F0KCkgKyBiOworfQorCitpbmxpbmUg
ZG91YmxlIG9wZXJhdG9yKyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZG91YmxlIGIp
Cit7CisgICAgcmV0dXJuIGEudG9Eb3VibGUoKSArIGI7Cit9CisKK2lubGluZSBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBvcGVyYXRvcisoY29uc3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBiKQoreworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSArIGI7Cit9CisK
K2lubGluZSBmbG9hdCBvcGVyYXRvcisoY29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEgKyBiLnRvRmxvYXQoKTsKK30KKworaW5saW5l
IGRvdWJsZSBvcGVyYXRvcisoY29uc3QgZG91YmxlIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBiKQoreworICAgIHJldHVybiBhICsgYi50b0RvdWJsZSgpOworfQorCitpbmxpbmUgRnJh
Y3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICBGcmFjdGlvbmFsTGF5b3V0
VW5pdCByZXR1cm5WYWw7CisjaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykK
KyAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUoc2F0dXJhdGVkU3VidHJhY3Rpb24oYS5yYXdWYWx1
ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKKyNlbHNlCisgICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKGEu
cmF3VmFsdWUoKSAtIGIucmF3VmFsdWUoKSk7CisjZW5kaWYKKyAgICByZXR1cm4gcmV0dXJuVmFs
OworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3ItKGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK3sKKyAgICByZXR1cm4gYSAtIEZyYWN0aW9uYWxM
YXlvdXRVbml0KGIpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3It
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCB1bnNpZ25lZCBiKQoreworICAgIHJldHVy
biBhIC0gRnJhY3Rpb25hbExheW91dFVuaXQoYik7Cit9CisKK2lubGluZSBmbG9hdCBvcGVyYXRv
ci0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJu
IGEudG9GbG9hdCgpIC0gYjsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJh
dG9yLShjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAg
cmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpIC0gYjsKK30KKworaW5saW5lIGZsb2F0IG9w
ZXJhdG9yLShjb25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sK
KyAgICByZXR1cm4gYSAtIGIudG9GbG9hdCgpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91
dFVuaXQgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhKQoreworICAgIEZy
YWN0aW9uYWxMYXlvdXRVbml0IHJldHVyblZhbDsKKyAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUo
LWEucmF3VmFsdWUoKSk7CisgICAgcmV0dXJuIHJldHVyblZhbDsKK30KKworLy8gRm9yIHJldHVy
bmluZyB0aGUgcmVtYWluZGVyIGFmdGVyIGEgZGl2aXNpb24gd2l0aCBpbnRlZ2VyIHJlc3VsdHMu
CitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgaW50TW9kKGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyNpZiBFTkFCTEUo
U1VCUElYRUxfTEFZT1VUKQorICAgIC8vIFRoaXMgY2FsY3VsYXRlcyB0aGUgbW9kdWxvIHNvIHRo
YXQ6IGEgPSBzdGF0aWNfY2FzdDxpbnQ+KGEgLyBiKSAqIGIgKyBpbnRNb2QoYSwgYikuCisgICAg
RnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOworICAgIHJldHVyblZhbC5zZXRSYXdWYWx1
ZShhLnJhd1ZhbHVlKCkgJSBiLnJhd1ZhbHVlKCkpOworICAgIHJldHVybiByZXR1cm5WYWw7Cisj
ZWxzZQorICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgJSBiLnJhd1ZhbHVlKCk7CisjZW5kaWYKK30K
KworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yJShjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisjaWYgRU5B
QkxFKFNVQlBJWEVMX0xBWU9VVCkKKyAgICAvLyBUaGlzIGNhbGN1bGF0ZXMgdGhlIG1vZHVsbyBz
byB0aGF0OiBhID0gKGEgLyBiKSAqIGIgKyBhICUgYi4KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dCByZXR1cm5WYWw7CisgICAgbG9uZyBsb25nIHJhd1ZhbCA9IChzdGF0aWNfY2FzdDxsb25nIGxv
bmc+KGtGaXhlZFBvaW50RGVub21pbmF0b3IpICogYS5yYXdWYWx1ZSgpKSAlIGIucmF3VmFsdWUo
KTsKKyAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUocmF3VmFsIC8ga0ZpeGVkUG9pbnREZW5vbWlu
YXRvcik7CisgICAgcmV0dXJuIHJldHVyblZhbDsKKyNlbHNlCisgICAgcmV0dXJuIGEucmF3VmFs
dWUoKSAlIGIucmF3VmFsdWUoKTsKKyNlbmRpZgorfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91
dFVuaXQgb3BlcmF0b3IlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK3sK
KyAgICByZXR1cm4gYSAlIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworfQorCitpbmxpbmUgRnJh
Y3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IlKGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYikKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgJSBiOworfQor
CitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yKz0oRnJhY3Rpb25hbExheW91
dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworI2lmIEVOQUJMRShT
QVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCisgICAgYS5zZXRSYXdWYWx1ZShzYXR1cmF0ZWRB
ZGRpdGlvbihhLnJhd1ZhbHVlKCksIGIucmF3VmFsdWUoKSkpOworI2Vsc2UKKyAgICBhID0gYSAr
IGI7CisjZW5kaWYKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBvcGVyYXRvcis9KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK3sKKyAgICBh
ID0gYSArIGI7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgb3BlcmF0b3IrPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK3sKKyAgICBh
ID0gYSArIGI7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBmbG9hdCYgb3BlcmF0b3IrPShm
bG9hdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgYSA9IGEgKyBi
OworICAgIHJldHVybiBhOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJh
dG9yLT0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQoreworICAgIGEgPSBhIC0gYjsK
KyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRv
ci09KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
YikKK3sKKyNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQorICAgIGEuc2V0
UmF3VmFsdWUoc2F0dXJhdGVkU3VidHJhY3Rpb24oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkp
KTsKKyNlbHNlCisgICAgYSA9IGEgLSBiOworI2VuZGlmCisgICAgcmV0dXJuIGE7Cit9CisKK2lu
bGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3ItPShGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYSwgZmxvYXQgYikKK3sKKyAgICBhID0gYSAtIGI7CisgICAgcmV0dXJuIGE7Cit9CisKK2lu
bGluZSBmbG9hdCYgb3BlcmF0b3ItPShmbG9hdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVu
aXQmIGIpCit7CisgICAgYSA9IGEgLSBiOworICAgIHJldHVybiBhOworfQorCitpbmxpbmUgRnJh
Y3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yKj0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIGEgPSBhICogYjsKKyAgICByZXR1
cm4gYTsKK30KKy8vIG9wZXJhdG9yKj0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKSBp
cyBzdXBwb3J0ZWQgYnkgdGhlIG9wZXJhdG9yIGFib3ZlIHBsdXMgRnJhY3Rpb25hbExheW91dFVu
aXQoaW50KS4KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvcio9KEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQoreworICAgIGEgPSBhICogYjsKKyAgICByZXR1
cm4gYTsKK30KKworaW5saW5lIGZsb2F0JiBvcGVyYXRvcio9KGZsb2F0JiBhLCBjb25zdCBGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICBhID0gYSAqIGI7CisgICAgcmV0dXJuIGE7Cit9
CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3IvPShGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgYSA9IGEg
LyBiOworICAgIHJldHVybiBhOworfQorLy8gb3BlcmF0b3IvPShGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYSwgaW50IGIpIGlzIHN1cHBvcnRlZCBieSB0aGUgb3BlcmF0b3IgYWJvdmUgcGx1cyBGcmFj
dGlvbmFsTGF5b3V0VW5pdChpbnQpLgorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9w
ZXJhdG9yLz0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCit7CisgICAgYSA9IGEg
LyBiOworICAgIHJldHVybiBhOworfQorCitpbmxpbmUgZmxvYXQmIG9wZXJhdG9yLz0oZmxvYXQm
IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIGEgPSBhIC8gYjsKKyAg
ICByZXR1cm4gYTsKK30KKworaW5saW5lIGludCBzbmFwU2l6ZVRvUGl4ZWwoRnJhY3Rpb25hbExh
eW91dFVuaXQgc2l6ZSwgRnJhY3Rpb25hbExheW91dFVuaXQgbG9jYXRpb24pIAoreworICAgIEZy
YWN0aW9uYWxMYXlvdXRVbml0IGZyYWN0aW9uID0gbG9jYXRpb24uZnJhY3Rpb24oKTsKKyAgICBy
ZXR1cm4gKGZyYWN0aW9uICsgc2l6ZSkucm91bmQoKSAtIGZyYWN0aW9uLnJvdW5kKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEZyYWN0aW9uYWxMYXlvdXRVbml0
X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xheW91dFVuaXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYXlvdXRVbml0LmgJKHJldmlzaW9uIDEzMzUx
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xheW91dFVuaXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsOCArMjgsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEZyYWN0
aW9uYWxMYXlvdXRVbml0X2gKLSNkZWZpbmUgRnJhY3Rpb25hbExheW91dFVuaXRfaAorI2lmbmRl
ZiBMYXlvdXRVbml0X2gKKyNkZWZpbmUgTGF5b3V0VW5pdF9oCiAKICNpbmNsdWRlIDxsaW1pdHMu
aD4KICNpbmNsdWRlIDxsaW1pdHM+CkBAIC02MiwxOCArNjIsMTggQEAgc3RhdGljIGNvbnN0IGlu
dCBrRml4ZWRQb2ludERlbm9taW5hdG9yCiBjb25zdCBpbnQgaW50TWF4Rm9yTGF5b3V0VW5pdCA9
IElOVF9NQVggLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOwogY29uc3QgaW50IGludE1pbkZvckxh
eW91dFVuaXQgPSBJTlRfTUlOIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKIAotY2xhc3MgRnJh
Y3Rpb25hbExheW91dFVuaXQgeworY2xhc3MgTGF5b3V0VW5pdCB7CiBwdWJsaWM6CiAgICAgLy8g
RklYTUU6IElkZWFsbHkgd2Ugd291bGQgaGF2ZSBzaXplX3QgdmVyc2lvbnMgb2YgdGhlIGNvbnN0
cnVjdG9yIGFuZCBvcGVyYXRvcnMuCiAgICAgLy8gSG93ZXZlciBkdWUgdG8gY29tcGlsZXIgYW5k
IHBsYXRmb3JtIGRpZmZlcmVuY2VzIGFkZGluZyB0aG9zZSBhcmUgbm9uLXRyaXZpYWwuCiAgICAg
Ly8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mzg0OCBmb3Ig
ZGV0YWlscy4KICAgICAKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCgpIDogbV92YWx1ZSgwKSB7
IH0KKyAgICBMYXlvdXRVbml0KCkgOiBtX3ZhbHVlKDApIHsgfQogI2lmIEVOQUJMRShTVUJQSVhF
TF9MQVlPVVQpCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQoaW50IHZhbHVlKSB7IHNldFZhbHVl
KHZhbHVlKTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KHVuc2lnbmVkIHNob3J0IHZhbHVl
KSB7IHNldFZhbHVlKHZhbHVlKTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KHVuc2lnbmVk
IGludCB2YWx1ZSkgeyBzZXRWYWx1ZSh2YWx1ZSk7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dChmbG9hdCB2YWx1ZSkKKyAgICBMYXlvdXRVbml0KGludCB2YWx1ZSkgeyBzZXRWYWx1ZSh2YWx1
ZSk7IH0KKyAgICBMYXlvdXRVbml0KHVuc2lnbmVkIHNob3J0IHZhbHVlKSB7IHNldFZhbHVlKHZh
bHVlKTsgfQorICAgIExheW91dFVuaXQodW5zaWduZWQgdmFsdWUpIHsgc2V0VmFsdWUodmFsdWUp
OyB9CisgICAgTGF5b3V0VW5pdChmbG9hdCB2YWx1ZSkKICAgICB7CiAjaWYgRU5BQkxFKFNBVFVS
QVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKICAgICAgICAgbV92YWx1ZSA9IGNsYW1wVG88ZmxvYXQ+
KHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvciwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KElOVF9N
SU4pLCBzdGF0aWNfY2FzdDxmbG9hdD4oSU5UX01BWCkpOwpAQCAtODIsNyArODIsNyBAQCBwdWJs
aWM6CiAgICAgICAgIG1fdmFsdWUgPSB2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3I7CiAj
ZW5kaWYKICAgICB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQoZG91YmxlIHZhbHVlKQorICAg
IExheW91dFVuaXQoZG91YmxlIHZhbHVlKQogICAgIHsKICNpZiBFTkFCTEUoU0FUVVJBVEVEX0xB
WU9VVF9BUklUSE1FVElDKQogICAgICAgICBtX3ZhbHVlID0gY2xhbXBUbzxkb3VibGU+KHZhbHVl
ICoga0ZpeGVkUG9pbnREZW5vbWluYXRvciwgc3RhdGljX2Nhc3Q8ZG91YmxlPihJTlRfTUlOKSwg
c3RhdGljX2Nhc3Q8ZG91YmxlPihJTlRfTUFYKSk7CkBAIC05MiwxNyArOTIsMTcgQEAgcHVibGlj
OgogI2VuZGlmCiAgICAgfQogI2Vsc2UKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdChpbnQgdmFs
dWUpIHsgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsgbV92YWx1ZSA9IHZhbHVl
OyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQodW5zaWduZWQgc2hvcnQgdmFsdWUpIHsgUkVQ
T1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsgbV92YWx1ZSA9IHZhbHVlOyB9Ci0gICAg
RnJhY3Rpb25hbExheW91dFVuaXQodW5zaWduZWQgaW50IHZhbHVlKSB7IFJFUE9SVF9PVkVSRkxP
Vyhpc0luQm91bmRzKHZhbHVlKSk7IG1fdmFsdWUgPSB2YWx1ZTsgfQotICAgIEZyYWN0aW9uYWxM
YXlvdXRVbml0KGZsb2F0IHZhbHVlKSB7IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVl
KSk7IG1fdmFsdWUgPSB2YWx1ZTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KGRvdWJsZSB2
YWx1ZSkgeyBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFs
dWU7IH0KKyAgICBMYXlvdXRVbml0KGludCB2YWx1ZSkgeyBSRVBPUlRfT1ZFUkZMT1coaXNJbkJv
dW5kcyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFsdWU7IH0KKyAgICBMYXlvdXRVbml0KHVuc2lnbmVk
IHNob3J0IHZhbHVlKSB7IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7IG1fdmFs
dWUgPSB2YWx1ZTsgfQorICAgIExheW91dFVuaXQodW5zaWduZWQgdmFsdWUpIHsgUkVQT1JUX09W
RVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsgbV92YWx1ZSA9IHZhbHVlOyB9CisgICAgTGF5b3V0
VW5pdChmbG9hdCB2YWx1ZSkgeyBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOyBt
X3ZhbHVlID0gdmFsdWU7IH0KKyAgICBMYXlvdXRVbml0KGRvdWJsZSB2YWx1ZSkgeyBSRVBPUlRf
T1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFsdWU7IH0KICNlbmRpZgot
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiB2YWx1
ZSkgeyBtX3ZhbHVlID0gdmFsdWUucmF3VmFsdWUoKTsgfQorICAgIExheW91dFVuaXQoY29uc3Qg
TGF5b3V0VW5pdCYgdmFsdWUpIHsgbV92YWx1ZSA9IHZhbHVlLnJhd1ZhbHVlKCk7IH0KIAotICAg
IHN0YXRpYyBGcmFjdGlvbmFsTGF5b3V0VW5pdCBmcm9tRmxvYXRDZWlsKGZsb2F0IHZhbHVlKQor
ICAgIHN0YXRpYyBMYXlvdXRVbml0IGZyb21GbG9hdENlaWwoZmxvYXQgdmFsdWUpCiAgICAgewot
ICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB2OworICAgICAgICBMYXlvdXRVbml0IHY7CiAj
aWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKICAgICAgICAgdi5tX3ZhbHVl
ID0gY2xhbXBUb0ludGVnZXIoY2VpbGYodmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yKSk7
CiAjZWxzZQpAQCAtMTEyLDkgKzExMiw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHY7CiAg
ICAgfQogCi0gICAgc3RhdGljIEZyYWN0aW9uYWxMYXlvdXRVbml0IGZyb21GbG9hdEZsb29yKGZs
b2F0IHZhbHVlKQorICAgIHN0YXRpYyBMYXlvdXRVbml0IGZyb21GbG9hdEZsb29yKGZsb2F0IHZh
bHVlKQogICAgIHsKLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgdjsKKyAgICAgICAgTGF5
b3V0VW5pdCB2OwogI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCiAgICAg
ICAgIHYubV92YWx1ZSA9IGNsYW1wVG9JbnRlZ2VyKGZsb29yZih2YWx1ZSAqIGtGaXhlZFBvaW50
RGVub21pbmF0b3IpKTsKICNlbHNlCkBAIC0xMjQsNyArMTI0LDcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gdjsKICAgICB9CiAKLSAgICBzdGF0aWMgRnJhY3Rpb25hbExheW91dFVuaXQgZnJv
bUZsb2F0Um91bmQoZmxvYXQgdmFsdWUpCisgICAgc3RhdGljIExheW91dFVuaXQgZnJvbUZsb2F0
Um91bmQoZmxvYXQgdmFsdWUpCiAgICAgewogI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FS
SVRITUVUSUMpCiAgICAgICAgIGlmICh2YWx1ZSA+PSAwKQpAQCAtMTMzLDEwICsxMzMsMTAgQEAg
cHVibGljOgogI2Vsc2UKICAgICAgICAgaWYgKHZhbHVlID49IDApIHsKICAgICAgICAgICAgIFJF
UE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlICsgZXBzaWxvbigpIC8gMi4wZikpOwotICAg
ICAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KHZhbHVlICsgZXBzaWxvbigpIC8g
Mi4wZik7CisgICAgICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCh2YWx1ZSArIGVwc2lsb24oKSAv
IDIuMGYpOwogICAgICAgICB9CiAgICAgICAgIFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZh
bHVlIC0gZXBzaWxvbigpIC8gMi4wZikpOwotICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91
dFVuaXQodmFsdWUgLSBlcHNpbG9uKCkgLyAyLjBmKTsKKyAgICAgICAgcmV0dXJuIExheW91dFVu
aXQodmFsdWUgLSBlcHNpbG9uKCkgLyAyLjBmKTsKICNlbmRpZgogICAgIH0KIApAQCAtMTY3LDcg
KzE2Nyw3IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBkb3VibGUoKSBjb25zdCB7IHJldHVybiB0
b0RvdWJsZSgpOyB9CiAgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7
IH0KIAotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKysoaW50KQorICAgIExheW91
dFVuaXQgb3BlcmF0b3IrKyhpbnQpCiAgICAgewogICAgICAgICBtX3ZhbHVlICs9IGtGaXhlZFBv
aW50RGVub21pbmF0b3I7CiAgICAgICAgIHJldHVybiAqdGhpczsKQEAgLTE4MSw5ICsxODEsOSBA
QCBwdWJsaWM6CiAgICAgICAgIG1fdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKTsKICAg
ICB9CiAKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBhYnMoKSBjb25zdAorICAgIExheW91dFVu
aXQgYWJzKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJldHVy
blZhbHVlOworICAgICAgICBMYXlvdXRVbml0IHJldHVyblZhbHVlOwogICAgICAgICByZXR1cm5W
YWx1ZS5zZXRSYXdWYWx1ZSg6OmFicyhtX3ZhbHVlKSk7CiAgICAgICAgIHJldHVybiByZXR1cm5W
YWx1ZTsKICAgICB9CkBAIC0yMjcsMTEgKzIyNywxMSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9
CiAKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBmcmFjdGlvbigpIGNvbnN0CisgICAgTGF5b3V0
VW5pdCBmcmFjdGlvbigpIGNvbnN0CiAgICAgeyAgIAogICAgICAgICAvLyBBZGQgdGhlIGZyYWN0
aW9uIHRvIHRoZSBzaXplIChhcyBvcHBvc2VkIHRvIHRoZSBmdWxsIGxvY2F0aW9uKSB0byBhdm9p
ZCBvdmVyZmxvd3MuCiAgICAgICAgIC8vIENvbXB1dGUgZnJhY3Rpb24gdXNpbmcgdGhlIG1vZCBv
cGVyYXRvciB0byBwcmVzZXJ2ZSB0aGUgc2lnbiBvZiB0aGUgdmFsdWUgYXMgaXQgbWF5IGFmZmVj
dCByb3VuZGluZy4KLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZnJhY3Rpb247CisgICAg
ICAgIExheW91dFVuaXQgZnJhY3Rpb247CiAgICAgICAgIGZyYWN0aW9uLnNldFJhd1ZhbHVlKHJh
d1ZhbHVlKCkgJSBrRml4ZWRQb2ludERlbm9taW5hdG9yKTsKICAgICAgICAgcmV0dXJuIGZyYWN0
aW9uOwogICAgIH0KQEAgLTI0MSwzNiArMjQxLDM2IEBAIHB1YmxpYzoKICNlbHNlCiAgICAgc3Rh
dGljIGludCBlcHNpbG9uKCkgeyByZXR1cm4gMDsgfQogI2VuZGlmCi0gICAgc3RhdGljIGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0IG1heCgpCisgICAgc3RhdGljIGNvbnN0IExheW91dFVuaXQg
bWF4KCkKICAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG07CisgICAgICAgIExh
eW91dFVuaXQgbTsKICAgICAgICAgbS5tX3ZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptYXgoKTsKICAgICAgICAgcmV0dXJuIG07CiAgICAgfQotICAgIHN0YXRpYyBjb25zdCBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBtaW4oKQorICAgIHN0YXRpYyBjb25zdCBMYXlvdXRVbml0IG1pbigp
CiAgICAgewotICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtOworICAgICAgICBMYXlvdXRV
bml0IG07CiAgICAgICAgIG0ubV92YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWlu
KCk7CiAgICAgICAgIHJldHVybiBtOwogICAgIH0KIAogICAgIC8vIFZlcnNpb25zIG9mIG1heC9t
aW4gdGhhdCBhcmUgc2xpZ2h0bHkgc21hbGxlci9sYXJnZXIgdGhhbiBtYXgvbWluKCkgdG8gYWxs
b3cgZm9yIHJvaW5kaW5nIHdpdGhvdXQgb3ZlcmZsb3dpbmcuCi0gICAgc3RhdGljIGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRVbml0IG5lYXJseU1heCgpCisgICAgc3RhdGljIGNvbnN0IExheW91dFVu
aXQgbmVhcmx5TWF4KCkKICAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG07Cisg
ICAgICAgIExheW91dFVuaXQgbTsKICAgICAgICAgbS5tX3ZhbHVlID0gc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKSAtIGtGaXhlZFBvaW50RGVub21pbmF0b3IgLyAyOwogICAgICAgICBy
ZXR1cm4gbTsKICAgICB9Ci0gICAgc3RhdGljIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0IG5l
YXJseU1pbigpCisgICAgc3RhdGljIGNvbnN0IExheW91dFVuaXQgbmVhcmx5TWluKCkKICAgICB7
Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG07CisgICAgICAgIExheW91dFVuaXQgbTsK
ICAgICAgICAgbS5tX3ZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSArIGtG
aXhlZFBvaW50RGVub21pbmF0b3IgLyAyOwogICAgICAgICByZXR1cm4gbTsKICAgICB9CiAgICAg
Ci0gICAgc3RhdGljIEZyYWN0aW9uYWxMYXlvdXRVbml0IGNsYW1wKGRvdWJsZSB2YWx1ZSkKKyAg
ICBzdGF0aWMgTGF5b3V0VW5pdCBjbGFtcChkb3VibGUgdmFsdWUpCiAgICAgewotICAgICAgICBy
ZXR1cm4gY2xhbXBUbzxGcmFjdGlvbmFsTGF5b3V0VW5pdD4odmFsdWUsIEZyYWN0aW9uYWxMYXlv
dXRVbml0OjptaW4oKSwgRnJhY3Rpb25hbExheW91dFVuaXQ6Om1heCgpKTsKKyAgICAgICAgcmV0
dXJuIGNsYW1wVG88TGF5b3V0VW5pdD4odmFsdWUsIExheW91dFVuaXQ6Om1pbigpLCBMYXlvdXRV
bml0OjptYXgoKSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMzE3LDE3NiArMzE3LDE3NiBAQCBw
cml2YXRlOgogICAgIGludCBtX3ZhbHVlOwogfTsKIAotaW5saW5lIGJvb2wgb3BlcmF0b3I8PShj
b25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IExheW91dFVuaXQmIGEsIGNvbnN0IExh
eW91dFVuaXQmIGIpCiB7CiAgICAgcmV0dXJuIGEucmF3VmFsdWUoKSA8PSBiLnJhd1ZhbHVlKCk7
CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGEsIGZsb2F0IGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IExheW91dFVuaXQmIGEs
IGZsb2F0IGIpCiB7CiAgICAgcmV0dXJuIGEudG9GbG9hdCgpIDw9IGI7CiB9CiAKLWlubGluZSBi
b29sIG9wZXJhdG9yPD0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQoraW5s
aW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBMYXlvdXRVbml0JiBhLCBpbnQgYikKIHsKLSAgICBy
ZXR1cm4gYSA8PSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKKyAgICByZXR1cm4gYSA8PSBMYXlv
dXRVbml0KGIpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IGZsb2F0IGEsIGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25z
dCBmbG9hdCBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewogICAgIHJldHVybiBhIDw9IGIudG9G
bG9hdCgpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IGludCBhLCBjb25zdCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgaW50
IGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRV
bml0KGEpIDw9IGI7CisgICAgcmV0dXJuIExheW91dFVuaXQoYSkgPD0gYjsKIH0KIAotaW5saW5l
IGJvb2wgb3BlcmF0b3I+PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IExheW91
dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAgICAgcmV0dXJuIGEucmF3VmFsdWUo
KSA+PSBiLnJhd1ZhbHVlKCk7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25z
dCBMYXlvdXRVbml0JiBhLCBpbnQgYikKIHsKLSAgICByZXR1cm4gYSA+PSBGcmFjdGlvbmFsTGF5
b3V0VW5pdChiKTsKKyAgICByZXR1cm4gYSA+PSBMYXlvdXRVbml0KGIpOwogfQogCi1pbmxpbmUg
Ym9vbCBvcGVyYXRvcj49KGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBmbG9hdCBhLCBjb25zdCBMYXlvdXRV
bml0JiBiKQogewogICAgIHJldHVybiBhID49IGIudG9GbG9hdCgpOwogfQogCi1pbmxpbmUgYm9v
bCBvcGVyYXRvcj49KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQoraW5s
aW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQogewogICAg
IHJldHVybiBhLnRvRmxvYXQoKSA+PSBiOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNv
bnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBib29sIG9w
ZXJhdG9yPj0oY29uc3QgaW50IGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7Ci0gICAgcmV0dXJu
IEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpID49IGI7CisgICAgcmV0dXJuIExheW91dFVuaXQoYSkg
Pj0gYjsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBib29sIG9wZXJh
dG9yPChjb25zdCBMYXlvdXRVbml0JiBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewogICAgIHJl
dHVybiBhLnJhd1ZhbHVlKCkgPCBiLnJhd1ZhbHVlKCk7CiB9CiAKLWlubGluZSBib29sIG9wZXJh
dG9yPChjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCitpbmxpbmUgYm9vbCBv
cGVyYXRvcjwoY29uc3QgTGF5b3V0VW5pdCYgYSwgaW50IGIpCiB7Ci0gICAgcmV0dXJuIGEgPCBG
cmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKKyAgICByZXR1cm4gYSA8IExheW91dFVuaXQoYik7CiB9
CiAKLWlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwg
ZmxvYXQgYikKK2lubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBMYXlvdXRVbml0JiBhLCBmbG9h
dCBiKQogewogICAgIHJldHVybiBhLnRvRmxvYXQoKSA8IGI7CiB9CiAKLWlubGluZSBib29sIG9w
ZXJhdG9yPChjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZG91YmxlIGIpCitpbmxpbmUg
Ym9vbCBvcGVyYXRvcjwoY29uc3QgTGF5b3V0VW5pdCYgYSwgZG91YmxlIGIpCiB7CiAgICAgcmV0
dXJuIGEudG9Eb3VibGUoKSA8IGI7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBp
bnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRv
cjwoY29uc3QgaW50IGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7Ci0gICAgcmV0dXJuIEZyYWN0
aW9uYWxMYXlvdXRVbml0KGEpIDwgYjsKKyAgICByZXR1cm4gTGF5b3V0VW5pdChhKSA8IGI7CiB9
CiAKLWlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYikKK2lubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBmbG9hdCBhLCBjb25z
dCBMYXlvdXRVbml0JiBiKQogewogICAgIHJldHVybiBhIDwgYi50b0Zsb2F0KCk7CiB9CiAKLWlu
bGluZSBib29sIG9wZXJhdG9yPihjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3Qg
RnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgTGF5
b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1cm4gYS5yYXdWYWx1
ZSgpID4gYi5yYXdWYWx1ZSgpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGEsIGRvdWJsZSBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I+KGNv
bnN0IExheW91dFVuaXQmIGEsIGRvdWJsZSBiKQogewogICAgIHJldHVybiBhLnRvRG91YmxlKCkg
PiBiOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgRnJhY3Rpb25hbExheW91dFVu
aXQmIGEsIGZsb2F0IGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgTGF5b3V0VW5pdCYg
YSwgZmxvYXQgYikKIHsKICAgICByZXR1cm4gYS50b0Zsb2F0KCkgPiBiOwogfQogCi1pbmxpbmUg
Ym9vbCBvcGVyYXRvcj4oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQoraW5s
aW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IExheW91dFVuaXQmIGEsIGludCBiKQogewotICAgIHJl
dHVybiBhID4gRnJhY3Rpb25hbExheW91dFVuaXQoYik7CisgICAgcmV0dXJuIGEgPiBMYXlvdXRV
bml0KGIpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgaW50IGEsIGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IGludCBh
LCBjb25zdCBMYXlvdXRVbml0JiBiKQogewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5p
dChhKSA+IGI7CisgICAgcmV0dXJuIExheW91dFVuaXQoYSkgPiBiOwogfQogCi1pbmxpbmUgYm9v
bCBvcGVyYXRvcj4oY29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIp
CitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgZmxvYXQgYSwgY29uc3QgTGF5b3V0VW5pdCYg
YikKIHsKICAgICByZXR1cm4gYSA+IGIudG9GbG9hdCgpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVy
YXRvcj4oY29uc3QgZG91YmxlIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5s
aW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IGRvdWJsZSBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQog
ewogICAgIHJldHVybiBhID4gYi50b0RvdWJsZSgpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYikKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgTGF5b3V0VW5pdCYgYSwgY29u
c3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1cm4gYS5yYXdWYWx1ZSgpICE9IGIucmF3VmFs
dWUoKTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYSwgZmxvYXQgYikKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgTGF5b3V0VW5p
dCYgYSwgZmxvYXQgYikKIHsKLSAgICByZXR1cm4gYSAhPSBGcmFjdGlvbmFsTGF5b3V0VW5pdChi
KTsKKyAgICByZXR1cm4gYSAhPSBMYXlvdXRVbml0KGIpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgaW50IGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7Ci0g
ICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpICE9IGI7CisgICAgcmV0dXJuIExheW91
dFVuaXQoYSkgIT0gYjsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IExh
eW91dFVuaXQmIGEsIGludCBiKQogewotICAgIHJldHVybiBhICE9IEZyYWN0aW9uYWxMYXlvdXRV
bml0KGIpOworICAgIHJldHVybiBhICE9IExheW91dFVuaXQoYik7CiB9CiAKLWlubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMYXlvdXRVbml0
JiBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewogICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgPT0g
Yi5yYXdWYWx1ZSgpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgTGF5
b3V0VW5pdCYgYSwgaW50IGIpCiB7Ci0gICAgcmV0dXJuIGEgPT0gRnJhY3Rpb25hbExheW91dFVu
aXQoYik7CisgICAgcmV0dXJuIGEgPT0gTGF5b3V0VW5pdChiKTsKIH0KIAotaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGludCBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQog
ewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSA9PSBiOworICAgIHJldHVybiBM
YXlvdXRVbml0KGEpID09IGI7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IExheW91dFVuaXQmIGEsIGZsb2F0IGIpCiB7CiAgICAgcmV0dXJuIGEudG9GbG9hdCgpID09
IGI7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgZmxvYXQgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGZsb2F0
IGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAgICAgcmV0dXJuIGEgPT0gYi50b0Zsb2F0KCk7
CiB9CiAKLS8vIEZvciBtdWx0aXBsaWNhdGlvbiB0aGF0J3MgcHJvbmUgdG8gb3ZlcmZsb3csIHRo
aXMgYm91bmRzIGl0IHRvIEZyYWN0aW9uYWxMYXlvdXRVbml0OjptYXgoKSBhbmQgOjptaW4oKQot
aW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IGJvdW5kZWRNdWx0aXBseShjb25zdCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCisvLyBGb3Ig
bXVsdGlwbGljYXRpb24gdGhhdCdzIHByb25lIHRvIG92ZXJmbG93LCB0aGlzIGJvdW5kcyBpdCB0
byBMYXlvdXRVbml0OjptYXgoKSBhbmQgOjptaW4oKQoraW5saW5lIExheW91dFVuaXQgYm91bmRl
ZE11bHRpcGx5KGNvbnN0IExheW91dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAj
aWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1
cm5WYWw7CisgICAgTGF5b3V0VW5pdCByZXR1cm5WYWw7CiAgICAgbG9uZyBsb25nIHJhd1ZhbCA9
IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oYS5yYXdWYWx1ZSgpKSAqIGIucmF3VmFsdWUoKSAvIGtG
aXhlZFBvaW50RGVub21pbmF0b3I7CiAgICAgaWYgKHJhd1ZhbCA+IHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50Pjo6bWF4KCkpCi0gICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWF4
KCk7CisgICAgICAgIHJldHVybiBMYXlvdXRVbml0OjptYXgoKTsKICAgICBpZiAocmF3VmFsIDwg
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSkKLSAgICAgICAgcmV0dXJuIEZyYWN0aW9u
YWxMYXlvdXRVbml0OjptaW4oKTsKKyAgICAgICAgcmV0dXJuIExheW91dFVuaXQ6Om1pbigpOwog
ICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShyYXdWYWwpOwogICAgIHJldHVybiByZXR1cm5WYWw7
CiAjZWxzZQpAQCAtNDk0LDEyICs0OTQsMTIgQEAgaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0
IGJvdW5kZWRNdWx0aQogI2VuZGlmCiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBv
cGVyYXRvciooY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRVbml0JiBiKQoraW5saW5lIExheW91dFVuaXQgb3BlcmF0b3IqKGNvbnN0IExheW91dFVu
aXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9V
VCkgJiYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKICAgICByZXR1cm4gYm91
bmRlZE11bHRpcGx5KGEsIGIpOwogI2VsaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICBG
cmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7CisgICAgTGF5b3V0VW5pdCByZXR1cm5WYWw7
CiAgICAgbG9uZyBsb25nIHJhd1ZhbCA9IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oYS5yYXdWYWx1
ZSgpKSAqIGIucmF3VmFsdWUoKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7CiAgICAgcmV0dXJu
VmFsLnNldFJhd1ZhbHVlKHJhd1ZhbCk7CiAgICAgcmV0dXJuIHJldHVyblZhbDsKQEAgLTUwOCw1
MCArNTA4LDUwIEBAIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvciooY28KICNl
bmRpZgogfSAgICAKIAotaW5saW5lIGRvdWJsZSBvcGVyYXRvciooY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGEsIGRvdWJsZSBiKQoraW5saW5lIGRvdWJsZSBvcGVyYXRvciooY29uc3QgTGF5
b3V0VW5pdCYgYSwgZG91YmxlIGIpCiB7CiAgICAgcmV0dXJuIGEudG9Eb3VibGUoKSAqIGI7CiB9
CiAKLWlubGluZSBmbG9hdCBvcGVyYXRvciooY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEs
IGZsb2F0IGIpCitpbmxpbmUgZmxvYXQgb3BlcmF0b3IqKGNvbnN0IExheW91dFVuaXQmIGEsIGZs
b2F0IGIpCiB7CiAgICAgcmV0dXJuIGEudG9GbG9hdCgpICogYjsKIH0KIAotaW5saW5lIEZyYWN0
aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKihjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwg
aW50IGIpCitpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvciooY29uc3QgTGF5b3V0VW5pdCYgYSwg
aW50IGIpCiB7Ci0gICAgcmV0dXJuIGEgKiBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKKyAgICBy
ZXR1cm4gYSAqIExheW91dFVuaXQoYik7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBvcGVyYXRvciooY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIHVuc2lnbmVkIGIpCitp
bmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvciooY29uc3QgTGF5b3V0VW5pdCYgYSwgdW5zaWduZWQg
YikKIHsKLSAgICByZXR1cm4gYSAqIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworICAgIHJldHVy
biBhICogTGF5b3V0VW5pdChiKTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9w
ZXJhdG9yKih1bnNpZ25lZCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGlu
ZSBMYXlvdXRVbml0IG9wZXJhdG9yKih1bnNpZ25lZCBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQog
ewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSAqIGI7CisgICAgcmV0dXJuIExh
eW91dFVuaXQoYSkgKiBiOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0
b3IqKGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBM
YXlvdXRVbml0IG9wZXJhdG9yKihjb25zdCBpbnQgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsK
LSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgKiBiOworICAgIHJldHVybiBMYXlv
dXRVbml0KGEpICogYjsKIH0KIAotaW5saW5lIGZsb2F0IG9wZXJhdG9yKihjb25zdCBmbG9hdCBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBmbG9hdCBvcGVyYXRvcioo
Y29uc3QgZmxvYXQgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1cm4gYSAqIGIu
dG9GbG9hdCgpOwogfQogCi1pbmxpbmUgZG91YmxlIG9wZXJhdG9yKihjb25zdCBkb3VibGUgYSwg
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgZG91YmxlIG9wZXJhdG9yKihj
b25zdCBkb3VibGUgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1cm4gYSAqIGIu
dG9Eb3VibGUoKTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLyhj
b25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGIpCitpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvci8oY29uc3QgTGF5b3V0VW5pdCYgYSwgY29u
c3QgTGF5b3V0VW5pdCYgYikKIHsKICNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAgIEZy
YWN0aW9uYWxMYXlvdXRVbml0IHJldHVyblZhbDsKKyAgICBMYXlvdXRVbml0IHJldHVyblZhbDsK
ICAgICBsb25nIGxvbmcgcmF3VmFsID0gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihrRml4ZWRQb2lu
dERlbm9taW5hdG9yKSAqIGEucmF3VmFsdWUoKSAvIGIucmF3VmFsdWUoKTsKICAgICByZXR1cm5W
YWwuc2V0UmF3VmFsdWUocmF3VmFsKTsKICAgICByZXR1cm4gcmV0dXJuVmFsOwpAQCAtNTYwLDQ5
ICs1NjAsNDkgQEAgaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLyhjbwogI2Vu
ZGlmCiB9ICAgIAogCi1pbmxpbmUgZmxvYXQgb3BlcmF0b3IvKGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBhLCBmbG9hdCBiKQoraW5saW5lIGZsb2F0IG9wZXJhdG9yLyhjb25zdCBMYXlvdXRV
bml0JiBhLCBmbG9hdCBiKQogewogICAgIHJldHVybiBhLnRvRmxvYXQoKSAvIGI7CiB9CiAKLWlu
bGluZSBkb3VibGUgb3BlcmF0b3IvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBkb3Vi
bGUgYikKK2lubGluZSBkb3VibGUgb3BlcmF0b3IvKGNvbnN0IExheW91dFVuaXQmIGEsIGRvdWJs
ZSBiKQogewogICAgIHJldHVybiBhLnRvRG91YmxlKCkgLyBiOwogfQogCi1pbmxpbmUgRnJhY3Rp
b25hbExheW91dFVuaXQgb3BlcmF0b3IvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBp
bnQgYikKK2lubGluZSBMYXlvdXRVbml0IG9wZXJhdG9yLyhjb25zdCBMYXlvdXRVbml0JiBhLCBp
bnQgYikKIHsKLSAgICByZXR1cm4gYSAvIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworICAgIHJl
dHVybiBhIC8gTGF5b3V0VW5pdChiKTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0
IG9wZXJhdG9yLyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgdW5zaWduZWQgaW50IGIp
CitpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvci8oY29uc3QgTGF5b3V0VW5pdCYgYSwgdW5zaWdu
ZWQgYikKIHsKLSAgICByZXR1cm4gYSAvIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworICAgIHJl
dHVybiBhIC8gTGF5b3V0VW5pdChiKTsKIH0KIAotaW5saW5lIGZsb2F0IG9wZXJhdG9yLyhjb25z
dCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBmbG9hdCBv
cGVyYXRvci8oY29uc3QgZmxvYXQgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1
cm4gYSAvIGIudG9GbG9hdCgpOwogfQogCi1pbmxpbmUgZG91YmxlIG9wZXJhdG9yLyhjb25zdCBk
b3VibGUgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgZG91YmxlIG9w
ZXJhdG9yLyhjb25zdCBkb3VibGUgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1
cm4gYSAvIGIudG9Eb3VibGUoKTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9w
ZXJhdG9yLyhjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxp
bmUgTGF5b3V0VW5pdCBvcGVyYXRvci8oY29uc3QgaW50IGEsIGNvbnN0IExheW91dFVuaXQmIGIp
CiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpIC8gYjsKKyAgICByZXR1cm4g
TGF5b3V0VW5pdChhKSAvIGI7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVy
YXRvci8odW5zaWduZWQgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5s
aW5lIExheW91dFVuaXQgb3BlcmF0b3IvKHVuc2lnbmVkIGEsIGNvbnN0IExheW91dFVuaXQmIGIp
CiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpIC8gYjsKKyAgICByZXR1cm4g
TGF5b3V0VW5pdChhKSAvIGI7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVy
YXRvcisoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBiKQoraW5saW5lIExheW91dFVuaXQgb3BlcmF0b3IrKGNvbnN0IExheW91dFVuaXQm
IGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0
dXJuVmFsOworICAgIExheW91dFVuaXQgcmV0dXJuVmFsOwogI2lmIEVOQUJMRShTQVRVUkFURURf
TEFZT1VUX0FSSVRITUVUSUMpCiAgICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKHNhdHVyYXRlZEFk
ZGl0aW9uKGEucmF3VmFsdWUoKSwgYi5yYXdWYWx1ZSgpKSk7CiAjZWxzZQpAQCAtNjExLDM5ICs2
MTEsMzkgQEAgaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKyhjbwogICAgIHJl
dHVybiByZXR1cm5WYWw7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRv
cisoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQoraW5saW5lIExheW91dFVu
aXQgb3BlcmF0b3IrKGNvbnN0IExheW91dFVuaXQmIGEsIGludCBiKQogewotICAgIHJldHVybiBh
ICsgRnJhY3Rpb25hbExheW91dFVuaXQoYik7CisgICAgcmV0dXJuIGEgKyBMYXlvdXRVbml0KGIp
OwogfQogCi1pbmxpbmUgZmxvYXQgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBhLCBmbG9hdCBiKQoraW5saW5lIGZsb2F0IG9wZXJhdG9yKyhjb25zdCBMYXlvdXRVbml0JiBh
LCBmbG9hdCBiKQogewogICAgIHJldHVybiBhLnRvRmxvYXQoKSArIGI7CiB9CiAKLWlubGluZSBk
b3VibGUgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBkb3VibGUgYikK
K2lubGluZSBkb3VibGUgb3BlcmF0b3IrKGNvbnN0IExheW91dFVuaXQmIGEsIGRvdWJsZSBiKQog
ewogICAgIHJldHVybiBhLnRvRG91YmxlKCkgKyBiOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExh
eW91dFVuaXQgb3BlcmF0b3IrKGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYikKK2lubGluZSBMYXlvdXRVbml0IG9wZXJhdG9yKyhjb25zdCBpbnQgYSwgY29uc3QgTGF5
b3V0VW5pdCYgYikKIHsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgKyBiOwor
ICAgIHJldHVybiBMYXlvdXRVbml0KGEpICsgYjsKIH0KIAotaW5saW5lIGZsb2F0IG9wZXJhdG9y
Kyhjb25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBm
bG9hdCBvcGVyYXRvcisoY29uc3QgZmxvYXQgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAg
ICByZXR1cm4gYSArIGIudG9GbG9hdCgpOwogfQogCi1pbmxpbmUgZG91YmxlIG9wZXJhdG9yKyhj
b25zdCBkb3VibGUgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgZG91
YmxlIG9wZXJhdG9yKyhjb25zdCBkb3VibGUgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAg
ICByZXR1cm4gYSArIGIudG9Eb3VibGUoKTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRV
bml0IG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rp
b25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvci0oY29uc3QgTGF5
b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKLSAgICBGcmFjdGlvbmFsTGF5b3V0
VW5pdCByZXR1cm5WYWw7CisgICAgTGF5b3V0VW5pdCByZXR1cm5WYWw7CiAjaWYgRU5BQkxFKFNB
VFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKICAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUoc2F0
dXJhdGVkU3VidHJhY3Rpb24oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKICNlbHNlCkBA
IC02NTIsNDQgKzY1Miw0NCBAQCBpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3It
KGNvCiAgICAgcmV0dXJuIHJldHVyblZhbDsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRV
bml0IG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCitpbmxp
bmUgTGF5b3V0VW5pdCBvcGVyYXRvci0oY29uc3QgTGF5b3V0VW5pdCYgYSwgaW50IGIpCiB7Ci0g
ICAgcmV0dXJuIGEgLSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKKyAgICByZXR1cm4gYSAtIExh
eW91dFVuaXQoYik7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci0o
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIHVuc2lnbmVkIGIpCitpbmxpbmUgTGF5b3V0
VW5pdCBvcGVyYXRvci0oY29uc3QgTGF5b3V0VW5pdCYgYSwgdW5zaWduZWQgYikKIHsKLSAgICBy
ZXR1cm4gYSAtIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworICAgIHJldHVybiBhIC0gTGF5b3V0
VW5pdChiKTsKIH0KIAotaW5saW5lIGZsb2F0IG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgYSwgZmxvYXQgYikKK2lubGluZSBmbG9hdCBvcGVyYXRvci0oY29uc3QgTGF5b3V0
VW5pdCYgYSwgZmxvYXQgYikKIHsKICAgICByZXR1cm4gYS50b0Zsb2F0KCkgLSBiOwogfQogCi1p
bmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3ItKGNvbnN0IGludCBhLCBjb25zdCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBMYXlvdXRVbml0IG9wZXJhdG9yLShjb25z
dCBpbnQgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExh
eW91dFVuaXQoYSkgLSBiOworICAgIHJldHVybiBMYXlvdXRVbml0KGEpIC0gYjsKIH0KIAotaW5s
aW5lIGZsb2F0IG9wZXJhdG9yLShjb25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYikKK2lubGluZSBmbG9hdCBvcGVyYXRvci0oY29uc3QgZmxvYXQgYSwgY29uc3QgTGF5
b3V0VW5pdCYgYikKIHsKICAgICByZXR1cm4gYSAtIGIudG9GbG9hdCgpOwogfQogCi1pbmxpbmUg
RnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBhKQoraW5saW5lIExheW91dFVuaXQgb3BlcmF0b3ItKGNvbnN0IExheW91dFVuaXQmIGEpCiB7
Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOworICAgIExheW91dFVuaXQgcmV0
dXJuVmFsOwogICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZSgtYS5yYXdWYWx1ZSgpKTsKICAgICBy
ZXR1cm4gcmV0dXJuVmFsOwogfQogCiAvLyBGb3IgcmV0dXJuaW5nIHRoZSByZW1haW5kZXIgYWZ0
ZXIgYSBkaXZpc2lvbiB3aXRoIGludGVnZXIgcmVzdWx0cy4KLWlubGluZSBGcmFjdGlvbmFsTGF5
b3V0VW5pdCBpbnRNb2QoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIExheW91dFVuaXQgaW50TW9kKGNvbnN0IExheW91
dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAjaWYgRU5BQkxFKFNVQlBJWEVMX0xB
WU9VVCkKICAgICAvLyBUaGlzIGNhbGN1bGF0ZXMgdGhlIG1vZHVsbyBzbyB0aGF0OiBhID0gc3Rh
dGljX2Nhc3Q8aW50PihhIC8gYikgKiBiICsgaW50TW9kKGEsIGIpLgotICAgIEZyYWN0aW9uYWxM
YXlvdXRVbml0IHJldHVyblZhbDsKKyAgICBMYXlvdXRVbml0IHJldHVyblZhbDsKICAgICByZXR1
cm5WYWwuc2V0UmF3VmFsdWUoYS5yYXdWYWx1ZSgpICUgYi5yYXdWYWx1ZSgpKTsKICAgICByZXR1
cm4gcmV0dXJuVmFsOwogI2Vsc2UKQEAgLTY5NywxMSArNjk3LDExIEBAIGlubGluZSBGcmFjdGlv
bmFsTGF5b3V0VW5pdCBpbnRNb2QoY29uc3QKICNlbmRpZgogfQogCi1pbmxpbmUgRnJhY3Rpb25h
bExheW91dFVuaXQgb3BlcmF0b3IlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25z
dCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBMYXlvdXRVbml0IG9wZXJhdG9yJShj
b25zdCBMYXlvdXRVbml0JiBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewogI2lmIEVOQUJMRShT
VUJQSVhFTF9MQVlPVVQpCiAgICAgLy8gVGhpcyBjYWxjdWxhdGVzIHRoZSBtb2R1bG8gc28gdGhh
dDogYSA9IChhIC8gYikgKiBiICsgYSAlIGIuCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0
dXJuVmFsOworICAgIExheW91dFVuaXQgcmV0dXJuVmFsOwogICAgIGxvbmcgbG9uZyByYXdWYWwg
PSAoc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihrRml4ZWRQb2ludERlbm9taW5hdG9yKSAqIGEucmF3
VmFsdWUoKSkgJSBiLnJhd1ZhbHVlKCk7CiAgICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKHJhd1Zh
bCAvIGtGaXhlZFBvaW50RGVub21pbmF0b3IpOwogICAgIHJldHVybiByZXR1cm5WYWw7CkBAIC03
MTAsMTcgKzcxMCwxNyBAQCBpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IlKGNv
CiAjZW5kaWYKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yJShjb25z
dCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCitpbmxpbmUgTGF5b3V0VW5pdCBvcGVy
YXRvciUoY29uc3QgTGF5b3V0VW5pdCYgYSwgaW50IGIpCiB7Ci0gICAgcmV0dXJuIGEgJSBGcmFj
dGlvbmFsTGF5b3V0VW5pdChiKTsKKyAgICByZXR1cm4gYSAlIExheW91dFVuaXQoYik7CiB9CiAK
LWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvciUoaW50IGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIExheW91dFVuaXQgb3BlcmF0b3IlKGludCBhLCBj
b25zdCBMYXlvdXRVbml0JiBiKQogewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChh
KSAlIGI7CisgICAgcmV0dXJuIExheW91dFVuaXQoYSkgJSBiOwogfQogCi1pbmxpbmUgRnJhY3Rp
b25hbExheW91dFVuaXQmIG9wZXJhdG9yKz0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIExheW91dFVuaXQmIG9wZXJhdG9yKz0o
TGF5b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICNpZiBFTkFCTEUoU0FUVVJB
VEVEX0xBWU9VVF9BUklUSE1FVElDKQogICAgIGEuc2V0UmF3VmFsdWUoc2F0dXJhdGVkQWRkaXRp
b24oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKQEAgLTczMCwzMSArNzMwLDMxIEBAIGlu
bGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3IrPSgKICAgICByZXR1cm4gYTsKIH0K
IAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvcis9KEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBhLCBpbnQgYikKK2lubGluZSBMYXlvdXRVbml0JiBvcGVyYXRvcis9KExheW91dFVu
aXQmIGEsIGludCBiKQogewogICAgIGEgPSBhICsgYjsKICAgICByZXR1cm4gYTsKIH0KIAotaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvcis9KEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBhLCBmbG9hdCBiKQoraW5saW5lIExheW91dFVuaXQmIG9wZXJhdG9yKz0oTGF5b3V0VW5pdCYg
YSwgZmxvYXQgYikKIHsKICAgICBhID0gYSArIGI7CiAgICAgcmV0dXJuIGE7CiB9CiAKLWlubGlu
ZSBmbG9hdCYgb3BlcmF0b3IrPShmbG9hdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGIpCitpbmxpbmUgZmxvYXQmIG9wZXJhdG9yKz0oZmxvYXQmIGEsIGNvbnN0IExheW91dFVuaXQm
IGIpCiB7CiAgICAgYSA9IGEgKyBiOwogICAgIHJldHVybiBhOwogfQogCi1pbmxpbmUgRnJhY3Rp
b25hbExheW91dFVuaXQmIG9wZXJhdG9yLT0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBi
KQoraW5saW5lIExheW91dFVuaXQmIG9wZXJhdG9yLT0oTGF5b3V0VW5pdCYgYSwgaW50IGIpCiB7
CiAgICAgYSA9IGEgLSBiOwogICAgIHJldHVybiBhOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExh
eW91dFVuaXQmIG9wZXJhdG9yLT0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIExheW91dFVuaXQmIG9wZXJhdG9yLT0oTGF5b3V0
VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICNpZiBFTkFCTEUoU0FUVVJBVEVEX0xB
WU9VVF9BUklUSE1FVElDKQogICAgIGEuc2V0UmF3VmFsdWUoc2F0dXJhdGVkU3VidHJhY3Rpb24o
YS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKQEAgLTc2NCw2MiArNzY0LDEwMiBAQCBpbmxp
bmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yLT0oCiAgICAgcmV0dXJuIGE7CiB9CiAK
LWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3ItPShGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYSwgZmxvYXQgYikKK2lubGluZSBMYXlvdXRVbml0JiBvcGVyYXRvci09KExheW91dFVu
aXQmIGEsIGZsb2F0IGIpCiB7CiAgICAgYSA9IGEgLSBiOwogICAgIHJldHVybiBhOwogfQogCi1p
bmxpbmUgZmxvYXQmIG9wZXJhdG9yLT0oZmxvYXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBiKQoraW5saW5lIGZsb2F0JiBvcGVyYXRvci09KGZsb2F0JiBhLCBjb25zdCBMYXlvdXRV
bml0JiBiKQogewogICAgIGEgPSBhIC0gYjsKICAgICByZXR1cm4gYTsKIH0KIAotaW5saW5lIEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvcio9KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBj
b25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBMYXlvdXRVbml0JiBvcGVyYXRv
cio9KExheW91dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAgICAgYSA9IGEgKiBi
OwogICAgIHJldHVybiBhOwogfQotLy8gb3BlcmF0b3IqPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
YSwgaW50IGIpIGlzIHN1cHBvcnRlZCBieSB0aGUgb3BlcmF0b3IgYWJvdmUgcGx1cyBGcmFjdGlv
bmFsTGF5b3V0VW5pdChpbnQpLgorLy8gb3BlcmF0b3IqPShMYXlvdXRVbml0JiBhLCBpbnQgYikg
aXMgc3VwcG9ydGVkIGJ5IHRoZSBvcGVyYXRvciBhYm92ZSBwbHVzIExheW91dFVuaXQoaW50KS4K
IAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvcio9KEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBhLCBmbG9hdCBiKQoraW5saW5lIExheW91dFVuaXQmIG9wZXJhdG9yKj0oTGF5b3V0
VW5pdCYgYSwgZmxvYXQgYikKIHsKICAgICBhID0gYSAqIGI7CiAgICAgcmV0dXJuIGE7CiB9CiAK
LWlubGluZSBmbG9hdCYgb3BlcmF0b3IqPShmbG9hdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGIpCitpbmxpbmUgZmxvYXQmIG9wZXJhdG9yKj0oZmxvYXQmIGEsIGNvbnN0IExheW91
dFVuaXQmIGIpCiB7CiAgICAgYSA9IGEgKiBiOwogICAgIHJldHVybiBhOwogfQogCi1pbmxpbmUg
RnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yLz0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEs
IGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIExheW91dFVuaXQmIG9wZXJh
dG9yLz0oTGF5b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICBhID0gYSAv
IGI7CiAgICAgcmV0dXJuIGE7CiB9Ci0vLyBvcGVyYXRvci89KEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBhLCBpbnQgYikgaXMgc3VwcG9ydGVkIGJ5IHRoZSBvcGVyYXRvciBhYm92ZSBwbHVzIEZyYWN0
aW9uYWxMYXlvdXRVbml0KGludCkuCisvLyBvcGVyYXRvci89KExheW91dFVuaXQmIGEsIGludCBi
KSBpcyBzdXBwb3J0ZWQgYnkgdGhlIG9wZXJhdG9yIGFib3ZlIHBsdXMgTGF5b3V0VW5pdChpbnQp
LgogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yLz0oRnJhY3Rpb25hbExh
eW91dFVuaXQmIGEsIGZsb2F0IGIpCitpbmxpbmUgTGF5b3V0VW5pdCYgb3BlcmF0b3IvPShMYXlv
dXRVbml0JiBhLCBmbG9hdCBiKQogewogICAgIGEgPSBhIC8gYjsKICAgICByZXR1cm4gYTsKIH0K
IAotaW5saW5lIGZsb2F0JiBvcGVyYXRvci89KGZsb2F0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgYikKK2lubGluZSBmbG9hdCYgb3BlcmF0b3IvPShmbG9hdCYgYSwgY29uc3QgTGF5
b3V0VW5pdCYgYikKIHsKICAgICBhID0gYSAvIGI7CiAgICAgcmV0dXJuIGE7CiB9CiAKLWlubGlu
ZSBpbnQgc25hcFNpemVUb1BpeGVsKEZyYWN0aW9uYWxMYXlvdXRVbml0IHNpemUsIEZyYWN0aW9u
YWxMYXlvdXRVbml0IGxvY2F0aW9uKSAKK2lubGluZSBpbnQgc25hcFNpemVUb1BpeGVsKExheW91
dFVuaXQgc2l6ZSwgTGF5b3V0VW5pdCBsb2NhdGlvbikgCiB7Ci0gICAgRnJhY3Rpb25hbExheW91
dFVuaXQgZnJhY3Rpb24gPSBsb2NhdGlvbi5mcmFjdGlvbigpOworICAgIExheW91dFVuaXQgZnJh
Y3Rpb24gPSBsb2NhdGlvbi5mcmFjdGlvbigpOwogICAgIHJldHVybiAoZnJhY3Rpb24gKyBzaXpl
KS5yb3VuZCgpIC0gZnJhY3Rpb24ucm91bmQoKTsKIH0KIAorCitpbmxpbmUgaW50IHJvdW5kVG9J
bnQoTGF5b3V0VW5pdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUucm91bmQoKTsKK30KKwor
aW5saW5lIGludCBmbG9vclRvSW50KExheW91dFVuaXQgdmFsdWUpCit7CisgICAgcmV0dXJuIHZh
bHVlLmZsb29yKCk7Cit9CisKK2lubGluZSBMYXlvdXRVbml0IHJvdW5kZWRMYXlvdXRVbml0KGZs
b2F0IHZhbHVlKQoreworI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisgICAgcmV0dXJuIExh
eW91dFVuaXQ6OmZyb21GbG9hdFJvdW5kKHZhbHVlKTsKKyNlbHNlCisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGludD4obHJvdW5kZih2YWx1ZSkpOworI2VuZGlmCit9CisKK2lubGluZSBMYXlvdXRV
bml0IGNlaWxlZExheW91dFVuaXQoZmxvYXQgdmFsdWUpCit7CisjaWYgRU5BQkxFKFNVQlBJWEVM
X0xBWU9VVCkKKyAgICByZXR1cm4gTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbCh2YWx1ZSk7Cisj
ZWxzZQorICAgIHJldHVybiBjZWlsZih2YWx1ZSk7CisjZW5kaWYKK30KKworaW5saW5lIExheW91
dFVuaXQgbGF5b3V0TW9kKGNvbnN0IExheW91dFVuaXQmIG51bWVyYXRvciwgY29uc3QgTGF5b3V0
VW5pdCYgZGVub21pbmF0b3IpCit7CisgICAgcmV0dXJuIG51bWVyYXRvciAlIGRlbm9taW5hdG9y
OworfQorCitpbmxpbmUgYm9vbCBpc0ludGVnZXJWYWx1ZShjb25zdCBMYXlvdXRVbml0IHZhbHVl
KQoreworICAgIHJldHVybiB2YWx1ZS50b0ludCgpID09IHZhbHVlOworfQorCisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEZyYWN0aW9uYWxMYXlvdXRVbml0X2gKKyNlbmRp
ZiAvLyBMYXlvdXRVbml0X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCShyZXZpc2lv
biAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguaAkod29ya2luZyBj
b3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCh0ICE9IENhbGN1
bGF0ZWQpOwogICAgIH0KICAgICAKLSAgICBMZW5ndGgoRnJhY3Rpb25hbExheW91dFVuaXQgdiwg
TGVuZ3RoVHlwZSB0LCBib29sIHEgPSBmYWxzZSkKKyAgICBMZW5ndGgoTGF5b3V0VW5pdCB2LCBM
ZW5ndGhUeXBlIHQsIGJvb2wgcSA9IGZhbHNlKQogICAgICAgICA6IG1fZmxvYXRWYWx1ZSh2LnRv
RmxvYXQoKSksIG1fcXVpcmsocSksIG1fdHlwZSh0KSwgbV9pc0Zsb2F0KHRydWUpCiAgICAgewog
ICAgICAgICBBU1NFUlQodCAhPSBDYWxjdWxhdGVkKTsKQEAgLTE3Miw3ICsxNzIsNyBAQCBwdWJs
aWM6CiAgICAgICAgIG1faXNGbG9hdCA9IHRydWU7ICAgIAogICAgIH0KIAotICAgIHZvaWQgc2V0
VmFsdWUoTGVuZ3RoVHlwZSB0LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCB2YWx1ZSkKKyAgICB2b2lk
IHNldFZhbHVlKExlbmd0aFR5cGUgdCwgTGF5b3V0VW5pdCB2YWx1ZSkKICAgICB7CiAgICAgICAg
IG1fdHlwZSA9IHQ7CiAgICAgICAgIG1fZmxvYXRWYWx1ZSA9IHZhbHVlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51Q2xpZW50LmgJKHJldmlzaW9uIDEzMzUxNykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudUNsaWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw3ICsyMiw3IEBACiAjaWZuZGVmIFBvcHVwTWVudUNsaWVudF9oCiAjZGVmaW5lIFBv
cHVwTWVudUNsaWVudF9oCiAKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxh
eW91dFVuaXQuaCIKICNpbmNsdWRlICJQb3B1cE1lbnVTdHlsZS5oIgogI2luY2x1ZGUgIlNjcm9s
bFR5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb25VdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uVXRpbGl0aWVzLmgJKHJl
dmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9Bbmlt
YXRpb25VdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2lmbmRl
ZiBBbmltYXRpb25VdGlsaXRpZXNfaAogI2RlZmluZSBBbmltYXRpb25VdGlsaXRpZXNfaAogCi0j
aW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFVuaXQuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgor
I2luY2x1ZGUgIkxheW91dFVuaXQuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01Miw3ICs1Miw3IEBAIGlubGluZSBmbG9hdCBibGVuZChm
bG9hdCBmcm9tLCBmbG9hdCB0bywKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGZyb20g
KyAodG8gLSBmcm9tKSAqIHByb2dyZXNzKTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRV
bml0IGJsZW5kKEZyYWN0aW9uYWxMYXlvdXRVbml0IGZyb20sIEZyYWN0aW9uYWxMYXlvdXRVbml0
IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitpbmxpbmUgTGF5b3V0VW5pdCBibGVuZChMYXlvdXRVbml0
IGZyb20sIExheW91dFVuaXQgdG8sIGRvdWJsZSBwcm9ncmVzcykKIHsgIAogICAgIHJldHVybiBm
cm9tICsgKHRvIC0gZnJvbSkgKiBwcm9ncmVzczsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwCShyZXZpc2lvbiAxMzM1MTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDEwIEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogCiAj
aW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFBv
aW50LmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25h
bExheW91dFNpemUuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIkxheW91dFBv
aW50LmgiCisjaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9u
TWF0cml4LmgiCiAjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPG1hdGguaD4KQEAgLTQyLDcg
KzQyLDcgQEAgRmxvYXRQb2ludDo6RmxvYXRQb2ludChjb25zdCBJbnRQb2ludCYgcAogewogfQog
Ci1GbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcCkg
OiBtX3gocC54KCkpLCBtX3kocC55KCkpCitGbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IExh
eW91dFBvaW50JiBwKSA6IG1feChwLngoKSksIG1feShwLnkoKSkKIHsKIH0KIApAQCAtNjEsMTMg
KzYxLDEzIEBAIGZsb2F0IEZsb2F0UG9pbnQ6Omxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJuIHNx
cnRmKGxlbmd0aFNxdWFyZWQoKSk7CiB9CiAKLXZvaWQgRmxvYXRQb2ludDo6bW92ZShjb25zdCBG
cmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkKK3ZvaWQgRmxvYXRQb2ludDo6bW92ZShjb25zdCBM
YXlvdXRTaXplJiBzaXplKQogewogICAgIG1feCArPSBzaXplLndpZHRoKCk7CiAgICAgbV95ICs9
IHNpemUuaGVpZ2h0KCk7CiB9CiAKLXZvaWQgRmxvYXRQb2ludDo6bW92ZUJ5KGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRQb2ludCYgcG9pbnQpCit2b2lkIEZsb2F0UG9pbnQ6Om1vdmVCeShjb25zdCBM
YXlvdXRQb2ludCYgcG9pbnQpCiB7CiAgICAgbV94ICs9IHBvaW50LngoKTsKICAgICBtX3kgKz0g
cG9pbnQueSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQ
b2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UG9pbnQuaAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRQb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxNSArNjgsMTUgQEAg
Y2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiBjbGFz
cyBJbnRQb2ludDsKIGNsYXNzIEludFNpemU7Ci1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0UG9pbnQ7
Ci1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0U2l6ZTsKK2NsYXNzIExheW91dFBvaW50OworY2xhc3Mg
TGF5b3V0U2l6ZTsKIAogY2xhc3MgRmxvYXRQb2ludCB7CiBwdWJsaWM6CiAgICAgRmxvYXRQb2lu
dCgpIDogbV94KDApLCBtX3koMCkgeyB9CiAgICAgRmxvYXRQb2ludChmbG9hdCB4LCBmbG9hdCB5
KSA6IG1feCh4KSwgbV95KHkpIHsgfQogICAgIEZsb2F0UG9pbnQoY29uc3QgSW50UG9pbnQmKTsK
LSAgICBGbG9hdFBvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYpOworICAgIEZsb2F0
UG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmKTsKICAgICBleHBsaWNpdCBGbG9hdFBvaW50KGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSkgOiBtX3goc2l6ZS53aWR0aCgpKSwgbV95KHNpemUuaGVpZ2h0KCkp
IHsgfQogCiAgICAgc3RhdGljIEZsb2F0UG9pbnQgemVybygpIHsgcmV0dXJuIEZsb2F0UG9pbnQo
KTsgfQpAQCAtMTAzLDcgKzEwMyw3IEBAIHB1YmxpYzoKICAgICAgICAgbV94ICs9IGEud2lkdGgo
KTsKICAgICAgICAgbV95ICs9IGEuaGVpZ2h0KCk7CiAgICAgfQotICAgIHZvaWQgbW92ZShjb25z
dCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYpOworICAgIHZvaWQgbW92ZShjb25zdCBMYXlvdXRTaXpl
Jik7CiAgICAgdm9pZCBtb3ZlKGNvbnN0IEZsb2F0U2l6ZSYgYSkKICAgICB7CiAgICAgICAgIG1f
eCArPSBhLndpZHRoKCk7CkBAIC0xMTQsNyArMTE0LDcgQEAgcHVibGljOgogICAgICAgICBtX3gg
Kz0gYS54KCk7CiAgICAgICAgIG1feSArPSBhLnkoKTsKICAgICB9Ci0gICAgdm9pZCBtb3ZlQnko
Y29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50Jik7CisgICAgdm9pZCBtb3ZlQnkoY29uc3QgTGF5
b3V0UG9pbnQmKTsKICAgICB2b2lkIG1vdmVCeShjb25zdCBGbG9hdFBvaW50JiBhKQogICAgIHsK
ICAgICAgICAgbV94ICs9IGEueCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRSZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw4ICsyOCw4IEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAKICNpbmNsdWRlICJGbG9hdENv
bnZlcnNpb24uaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUg
IkludFJlY3QuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGht
PgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtNDMs
NyArNDMsNyBAQCBGbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBJbnRSZWN0JiByKSA6CiB7CiB9
CiAKLUZsb2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiByKSA6
IG1fbG9jYXRpb24oci5sb2NhdGlvbigpKSwgbV9zaXplKHIuc2l6ZSgpKQorRmxvYXRSZWN0OjpG
bG9hdFJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcikgOiBtX2xvY2F0aW9uKHIubG9jYXRpb24oKSks
IG1fc2l6ZShyLnNpemUoKSkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3
ICs3NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFZHUmVjdDsKICNlbmRpZgogCi1j
bGFzcyBGcmFjdGlvbmFsTGF5b3V0UmVjdDsKK2NsYXNzIExheW91dFJlY3Q7CiBjbGFzcyBJbnRS
ZWN0OwogY2xhc3MgSW50UG9pbnQ7CiAKQEAgLTkxLDcgKzkxLDcgQEAgcHVibGljOgogICAgIEZs
b2F0UmVjdChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQogICAg
ICAgICA6IG1fbG9jYXRpb24oRmxvYXRQb2ludCh4LCB5KSksIG1fc2l6ZShGbG9hdFNpemUod2lk
dGgsIGhlaWdodCkpIHsgfQogICAgIEZsb2F0UmVjdChjb25zdCBJbnRSZWN0Jik7Ci0gICAgRmxv
YXRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0Jik7CisgICAgRmxvYXRSZWN0KGNvbnN0
IExheW91dFJlY3QmKTsKIAogICAgIHN0YXRpYyBGbG9hdFJlY3QgbmFycm93UHJlY2lzaW9uKGRv
dWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0KTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuY3BwCShyZXZp
c2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNp
emUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNyw5IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0
U2l6ZS5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkludFNpemUu
aCIKKyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCiAjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUg
PG1hdGguaD4KIApAQCAtNDEsNyArNDEsNyBAQCBGbG9hdFNpemU6OkZsb2F0U2l6ZShjb25zdCBJ
bnRTaXplJiBzaXplCiB7CiB9CiAKLUZsb2F0U2l6ZTo6RmxvYXRTaXplKGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRTaXplJiBzaXplKSA6IG1fd2lkdGgoc2l6ZS53aWR0aCgpKSwgbV9oZWlnaHQoc2l6
ZS5oZWlnaHQoKSkKK0Zsb2F0U2l6ZTo6RmxvYXRTaXplKGNvbnN0IExheW91dFNpemUmIHNpemUp
IDogbV93aWR0aChzaXplLndpZHRoKCkpLCBtX2hlaWdodChzaXplLmhlaWdodCgpKQogewogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAko
cmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRTaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDE0ICs2MCwxNCBAQCB0eXBlZGVmIHN0cnVj
dCBfTlNTaXplIE5TU2l6ZTsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW50U2l6ZTsK
LWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRTaXplOworY2xhc3MgTGF5b3V0U2l6ZTsKIAogY2xhc3Mg
RmxvYXRTaXplIHsKIHB1YmxpYzoKICAgICBGbG9hdFNpemUoKSA6IG1fd2lkdGgoMCksIG1faGVp
Z2h0KDApIHsgfQogICAgIEZsb2F0U2l6ZShmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KSA6IG1f
d2lkdGgod2lkdGgpLCBtX2hlaWdodChoZWlnaHQpIHsgfQogICAgIEZsb2F0U2l6ZShjb25zdCBJ
bnRTaXplJik7Ci0gICAgRmxvYXRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJik7Cisg
ICAgRmxvYXRTaXplKGNvbnN0IExheW91dFNpemUmKTsKIAogICAgIHN0YXRpYyBGbG9hdFNpemUg
bmFycm93UHJlY2lzaW9uKGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0
aW9uYWxMYXlvdXRCb3hFeHRlbnQuY3BwCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSwxOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMiwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LUZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmxvZ2ljYWxU
b3AoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fdG9wIDogbV9sZWZ0OwotfQotCi1GcmFj
dGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Ojpsb2dpY2FsQm90dG9t
KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAotewotICAgIHJldHVybiBpc0hvcml6b250
YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX2JvdHRvbSA6IG1fcmlnaHQ7Ci19Ci0KLUZy
YWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmxvZ2ljYWxMZWZ0
KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAotewotICAgIHJldHVybiBpc0hvcml6b250
YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX2xlZnQgOiBtX3RvcDsKLX0KLQotRnJhY3Rp
b25hbExheW91dFVuaXQgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6bG9naWNhbFJpZ2h0KFdy
aXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAotewotICAgIHJldHVybiBpc0hvcml6b250YWxX
cml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX3JpZ2h0IDogbV9ib3R0b207Ci19Ci0KLUZyYWN0
aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmJlZm9yZShXcml0aW5n
TW9kZSB3cml0aW5nTW9kZSkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKHdyaXRpbmdNb2RlKSB7Ci0g
ICAgY2FzZSBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlOgotICAgICAgICByZXR1cm4gbV90b3A7Ci0g
ICAgY2FzZSBCb3R0b21Ub1RvcFdyaXRpbmdNb2RlOgotICAgICAgICByZXR1cm4gbV9ib3R0b207
Ci0gICAgY2FzZSBMZWZ0VG9SaWdodFdyaXRpbmdNb2RlOgotICAgICAgICByZXR1cm4gbV9sZWZ0
OwotICAgIGNhc2UgUmlnaHRUb0xlZnRXcml0aW5nTW9kZToKLSAgICAgICAgcmV0dXJuIG1fcmln
aHQ7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBtX3RvcDsK
LX0KLQotRnJhY3Rpb25hbExheW91dFVuaXQgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6YWZ0
ZXIoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0Ci17Ci0gICAgc3dpdGNoICh3cml0aW5n
TW9kZSkgewotICAgIGNhc2UgVG9wVG9Cb3R0b21Xcml0aW5nTW9kZToKLSAgICAgICAgcmV0dXJu
IG1fYm90dG9tOwotICAgIGNhc2UgQm90dG9tVG9Ub3BXcml0aW5nTW9kZToKLSAgICAgICAgcmV0
dXJuIG1fdG9wOwotICAgIGNhc2UgTGVmdFRvUmlnaHRXcml0aW5nTW9kZToKLSAgICAgICAgcmV0
dXJuIG1fcmlnaHQ7Ci0gICAgY2FzZSBSaWdodFRvTGVmdFdyaXRpbmdNb2RlOgotICAgICAgICBy
ZXR1cm4gbV9sZWZ0OwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gbV9ib3R0b207Ci19Ci0KLUZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRC
b3hFeHRlbnQ6OnN0YXJ0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRp
cmVjdGlvbikgY29uc3QKLXsKLSAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGlu
Z01vZGUpKQotICAgICAgICByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24p
ID8gbV9sZWZ0IDogbV9yaWdodDsKLSAgICByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbihk
aXJlY3Rpb24pID8gbV90b3AgOiBtX2JvdHRvbTsKLX0KLQotRnJhY3Rpb25hbExheW91dFVuaXQg
RnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6ZW5kKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikgY29uc3QKLXsKLSAgICBpZiAoaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUod3JpdGluZ01vZGUpKQotICAgICAgICByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVj
dGlvbihkaXJlY3Rpb24pID8gbV9yaWdodCA6IG1fbGVmdDsKLSAgICByZXR1cm4gaXNMZWZ0VG9S
aWdodERpcmVjdGlvbihkaXJlY3Rpb24pID8gbV9ib3R0b20gOiBtX3RvcDsKLX0KLQotdm9pZCBG
cmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzZXRCZWZvcmUoV3JpdGluZ01vZGUgd3JpdGluZ01v
ZGUsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKQotewotICAgIHN3aXRjaCAod3JpdGluZ01v
ZGUpIHsKLSAgICBjYXNlIFRvcFRvQm90dG9tV3JpdGluZ01vZGU6Ci0gICAgICAgIG1fdG9wID0g
dmFsdWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQm90dG9tVG9Ub3BXcml0aW5nTW9kZToK
LSAgICAgICAgbV9ib3R0b20gPSB2YWx1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMZWZ0
VG9SaWdodFdyaXRpbmdNb2RlOgotICAgICAgICBtX2xlZnQgPSB2YWx1ZTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBSaWdodFRvTGVmdFdyaXRpbmdNb2RlOgotICAgICAgICBtX3JpZ2h0ID0g
dmFsdWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICBtX3RvcCA9IHZhbHVlOwotICAgIH0KLX0KLQotdm9pZCBGcmFj
dGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzZXRBZnRlcihXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwg
RnJhY3Rpb25hbExheW91dFVuaXQgdmFsdWUpCi17Ci0gICAgc3dpdGNoICh3cml0aW5nTW9kZSkg
ewotICAgIGNhc2UgVG9wVG9Cb3R0b21Xcml0aW5nTW9kZToKLSAgICAgICAgbV9ib3R0b20gPSB2
YWx1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCb3R0b21Ub1RvcFdyaXRpbmdNb2RlOgot
ICAgICAgICBtX3RvcCA9IHZhbHVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExlZnRUb1Jp
Z2h0V3JpdGluZ01vZGU6Ci0gICAgICAgIG1fcmlnaHQgPSB2YWx1ZTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBSaWdodFRvTGVmdFdyaXRpbmdNb2RlOgotICAgICAgICBtX2xlZnQgPSB2YWx1
ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIG1fYm90dG9tID0gdmFsdWU7Ci0gICAgfQotfQotCi12b2lkIEZyYWN0
aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OnNldFN0YXJ0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgRnJhY3Rpb25hbExheW91dFVuaXQgdmFsdWUpCi17Ci0g
ICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkgewotICAgICAgICBp
ZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24pKQotICAgICAgICAgICAgbV9sZWZ0
ID0gdmFsdWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fcmlnaHQgPSB2YWx1ZTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24p
KQotICAgICAgICAgICAgbV90b3AgPSB2YWx1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
bV9ib3R0b20gPSB2YWx1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgRnJhY3Rpb25hbExheW91dEJveEV4
dGVudDo6c2V0RW5kKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVj
dGlvbiwgRnJhY3Rpb25hbExheW91dFVuaXQgdmFsdWUpCi17Ci0gICAgaWYgKGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkgewotICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodERp
cmVjdGlvbihkaXJlY3Rpb24pKQotICAgICAgICAgICAgbV9yaWdodCA9IHZhbHVlOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBtX2xlZnQgPSB2YWx1ZTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBpZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24pKQotICAgICAgICAgICAgbV9i
b3R0b20gPSB2YWx1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV90b3AgPSB2YWx1ZTsK
LSAgICB9Ci19Ci0KLUZyYWN0aW9uYWxMYXlvdXRVbml0JiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0
ZW50OjptdXRhYmxlTG9naWNhbExlZnQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCi17Ci0gICAg
cmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fbGVmdCA6IG1f
dG9wOwotfQotCi1GcmFjdGlvbmFsTGF5b3V0VW5pdCYgRnJhY3Rpb25hbExheW91dEJveEV4dGVu
dDo6bXV0YWJsZUxvZ2ljYWxSaWdodChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKLXsKLSAgICBy
ZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9yaWdodCA6IG1f
Ym90dG9tOwotfQotCi1GcmFjdGlvbmFsTGF5b3V0VW5pdCYgRnJhY3Rpb25hbExheW91dEJveEV4
dGVudDo6bXV0YWJsZUJlZm9yZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKLXsKLSAgICByZXR1
cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gKGlzRmxpcHBlZEJsb2Nr
c1dyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fYm90dG9tIDogbV90b3ApIDoKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlzRmxpcHBlZEJsb2Nr
c1dyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fcmlnaHQ6IG1fbGVmdCk7Ci19Ci0KLUZyYWN0
aW9uYWxMYXlvdXRVbml0JiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjptdXRhYmxlQWZ0ZXIo
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCi17Ci0gICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKHdyaXRpbmdNb2RlKSA/IChpc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSh3cml0aW5n
TW9kZSkgPyBtX3RvcCA6IG1fYm90dG9tKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChpc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSh3cml0aW5n
TW9kZSkgPyBtX2xlZnQ6IG1fcmlnaHQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94
RXh0ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMiwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEZyYWN0aW9uYWxMYXlvdXRCb3hF
eHRlbnRfaAotI2RlZmluZSBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50X2gKLQotI2luY2x1ZGUg
IkZyYWN0aW9uYWxMYXlvdXRVbml0LmgiCi0jaW5jbHVkZSAiVGV4dERpcmVjdGlvbi5oIgotI2lu
Y2x1ZGUgIldyaXRpbmdNb2RlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRnJh
Y3Rpb25hbExheW91dEJveEV4dGVudCB7Ci1wdWJsaWM6Ci0gICAgRnJhY3Rpb25hbExheW91dEJv
eEV4dGVudCgpIDogbV90b3AoMCksIG1fcmlnaHQoMCksIG1fYm90dG9tKDApLCBtX2xlZnQoMCkg
eyB9Ci0gICAgRnJhY3Rpb25hbExheW91dEJveEV4dGVudChGcmFjdGlvbmFsTGF5b3V0VW5pdCB0
b3AsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJpZ2h0LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBib3R0
b20sIEZyYWN0aW9uYWxMYXlvdXRVbml0IGxlZnQpCi0gICAgICAgIDogbV90b3AodG9wKSwgbV9y
aWdodChyaWdodCksIG1fYm90dG9tKGJvdHRvbSksIG1fbGVmdChsZWZ0KSB7IH0KLQotICAgIGlu
bGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCB0b3AoKSBjb25zdCB7IHJldHVybiBtX3RvcDsgfQot
ICAgIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCByaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmlnaHQ7IH0KLSAgICBpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgYm90dG9tKCkgY29uc3Qg
eyByZXR1cm4gbV9ib3R0b207IH0KLSAgICBpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgbGVm
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVmdDsgfQotCi0gICAgaW5saW5lIHZvaWQgc2V0VG9wKEZy
YWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKSB7IG1fdG9wID0gdmFsdWU7IH0KLSAgICBpbmxpbmUg
dm9pZCBzZXRSaWdodChGcmFjdGlvbmFsTGF5b3V0VW5pdCB2YWx1ZSkgeyBtX3JpZ2h0ID0gdmFs
dWU7IH0KLSAgICBpbmxpbmUgdm9pZCBzZXRCb3R0b20oRnJhY3Rpb25hbExheW91dFVuaXQgdmFs
dWUpIHsgbV9ib3R0b20gPSB2YWx1ZTsgfQotICAgIGlubGluZSB2b2lkIHNldExlZnQoRnJhY3Rp
b25hbExheW91dFVuaXQgdmFsdWUpIHsgbV9sZWZ0ID0gdmFsdWU7IH0KLQotICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IGxvZ2ljYWxUb3AoV3JpdGluZ01vZGUpIGNvbnN0OwotICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20oV3JpdGluZ01vZGUpIGNvbnN0OwotICAgIEZyYWN0
aW9uYWxMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KFdyaXRpbmdNb2RlKSBjb25zdDsKLSAgICBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQoV3JpdGluZ01vZGUpIGNvbnN0OwotCi0gICAg
RnJhY3Rpb25hbExheW91dFVuaXQgYmVmb3JlKFdyaXRpbmdNb2RlKSBjb25zdDsKLSAgICBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBhZnRlcihXcml0aW5nTW9kZSkgY29uc3Q7Ci0gICAgRnJhY3Rpb25h
bExheW91dFVuaXQgc3RhcnQoV3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24pIGNvbnN0OwotICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0IGVuZChXcml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbikgY29u
c3Q7Ci0KLSAgICB2b2lkIHNldEJlZm9yZShXcml0aW5nTW9kZSwgRnJhY3Rpb25hbExheW91dFVu
aXQpOwotICAgIHZvaWQgc2V0QWZ0ZXIoV3JpdGluZ01vZGUsIEZyYWN0aW9uYWxMYXlvdXRVbml0
KTsKLSAgICB2b2lkIHNldFN0YXJ0KFdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uLCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCk7Ci0gICAgdm9pZCBzZXRFbmQoV3JpdGluZ01vZGUsIFRleHREaXJlY3Rp
b24sIEZyYWN0aW9uYWxMYXlvdXRVbml0KTsKLQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBt
dXRhYmxlTG9naWNhbExlZnQoV3JpdGluZ01vZGUpOwotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBtdXRhYmxlTG9naWNhbFJpZ2h0KFdyaXRpbmdNb2RlKTsKLQotICAgIEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBtdXRhYmxlQmVmb3JlKFdyaXRpbmdNb2RlKTsKLSAgICBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgbXV0YWJsZUFmdGVyKFdyaXRpbmdNb2RlKTsKLQotcHJpdmF0ZToKLSAgICBGcmFjdGlv
bmFsTGF5b3V0VW5pdCBtX3RvcDsKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtX3JpZ2h0Owot
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1fYm90dG9tOwotICAgIEZyYWN0aW9uYWxMYXlvdXRV
bml0IG1fbGVmdDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEZy
YWN0aW9uYWxMYXlvdXRCb3hFeHRlbnRfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFBvaW50LmgJKHJldmlzaW9u
IDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxM
YXlvdXRQb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5MiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRnJh
Y3Rpb25hbExheW91dFBvaW50X2gKLSNkZWZpbmUgRnJhY3Rpb25hbExheW91dFBvaW50X2gKLQot
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0U2l6ZS5o
IgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLSNpZiBQTEFURk9STShRVCkKLSNpbmNs
dWRlIDxxZ2xvYmFsLmg+Ci1RVF9CRUdJTl9OQU1FU1BBQ0UKLWNsYXNzIFFQb2ludDsKLWNsYXNz
IFFQb2ludEY7Ci1RVF9FTkRfTkFNRVNQQUNFCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgewotcHVibGljOgotICAgIEZyYWN0aW9u
YWxMYXlvdXRQb2ludCgpIDogbV94KDApLCBtX3koMCkgeyB9Ci0gICAgRnJhY3Rpb25hbExheW91
dFBvaW50KEZyYWN0aW9uYWxMYXlvdXRVbml0IHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHkpIDog
bV94KHgpLCBtX3koeSkgeyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFBvaW50KGNvbnN0IEludFBv
aW50JiBwb2ludCkgOiBtX3gocG9pbnQueCgpKSwgbV95KHBvaW50LnkoKSkgeyB9Ci0gICAgZXhw
bGljaXQgRnJhY3Rpb25hbExheW91dFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHNpemUpIDogbV94
KHNpemUueCgpKSwgbV95KHNpemUueSgpKSB7IH0KLSAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpIDogbV94KHNpemUud2lk
dGgoKSksIG1feShzaXplLmhlaWdodCgpKSB7IH0KLQotICAgIHN0YXRpYyBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQgemVybygpIHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludCgpOyB9Ci0KLSAg
ICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB4KCkgY29uc3QgeyByZXR1cm4gbV94OyB9Ci0gICAgRnJh
Y3Rpb25hbExheW91dFVuaXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQotCi0gICAgdm9pZCBz
ZXRYKEZyYWN0aW9uYWxMYXlvdXRVbml0IHgpIHsgbV94ID0geDsgfQotICAgIHZvaWQgc2V0WShG
cmFjdGlvbmFsTGF5b3V0VW5pdCB5KSB7IG1feSA9IHk7IH0KLQotICAgIHZvaWQgbW92ZShjb25z
dCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgcykgeyBtb3ZlKHMud2lkdGgoKSwgcy5oZWlnaHQoKSk7
IH0gCi0gICAgdm9pZCBtb3ZlQnkoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBvZmZzZXQp
IHsgbW92ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsgfQotICAgIHZvaWQgbW92ZShGcmFjdGlv
bmFsTGF5b3V0VW5pdCBkeCwgRnJhY3Rpb25hbExheW91dFVuaXQgZHkpIHsgbV94ICs9IGR4OyBt
X3kgKz0gZHk7IH0KLSAgICB2b2lkIHNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSkKLSAgICB7Ci0g
ICAgICAgIG1feCAqPSBzeDsKLSAgICAgICAgbV95ICo9IHN5OwotICAgIH0KLSAgICAKLSAgICBG
cmFjdGlvbmFsTGF5b3V0UG9pbnQgZXhwYW5kZWRUbyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9p
bnQmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQ
b2ludChzdGQ6Om1heChtX3gsIG90aGVyLm1feCksIHN0ZDo6bWF4KG1feSwgb3RoZXIubV95KSk7
Ci0gICAgfQotCi0gICAgRnJhY3Rpb25hbExheW91dFBvaW50IHNocnVua1RvKGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRQb2ludCYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gRnJh
Y3Rpb25hbExheW91dFBvaW50KHN0ZDo6bWluKG1feCwgb3RoZXIubV94KSwgc3RkOjptaW4obV95
LCBvdGhlci5tX3kpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsYW1wTmVnYXRpdmVUb1plcm8oKQot
ICAgIHsKLSAgICAgICAgKnRoaXMgPSBleHBhbmRlZFRvKHplcm8oKSk7Ci0gICAgfQotCi0gICAg
RnJhY3Rpb25hbExheW91dFBvaW50IHRyYW5zcG9zZWRQb2ludCgpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KG1feSwgbV94KTsKLSAgICB9Ci0KLSNp
ZiBQTEFURk9STShRVCkKLSAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3Qg
UVBvaW50Jik7Ci0gICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFBvaW50KGNvbnN0IFFQb2lu
dEYmKTsKLSAgICBvcGVyYXRvciBRUG9pbnRGKCkgY29uc3Q7Ci0jZW5kaWYKLQotcHJpdmF0ZToK
LSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtX3gsIG1feTsKLX07Ci0KLWlubGluZSBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQmIG9wZXJhdG9yKz0oRnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25z
dCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKLXsKLSAgICBhLm1vdmUoYi53aWR0aCgpLCBiLmhl
aWdodCgpKTsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2lu
dCYgb3BlcmF0b3ItPShGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRTaXplJiBiKQotewotICAgIGEubW92ZSgtYi53aWR0aCgpLCAtYi5oZWlnaHQoKSk7Ci0g
ICAgcmV0dXJuIGE7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgb3BlcmF0b3Ir
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNp
emUmIGIpCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChhLngoKSArIGIud2lk
dGgoKSwgYS55KCkgKyBiLmhlaWdodCgpKTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCBvcGVyYXRvcisoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQmIGIpCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2lu
dChhLngoKSArIGIueCgpLCBhLnkoKSArIGIueSgpKTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxM
YXlvdXRTaXplIG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYikKLXsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91
dFNpemUoYS54KCkgLSBiLngoKSwgYS55KCkgLSBiLnkoKSk7Ci19Ci0KLWlubGluZSBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwg
Y29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxM
YXlvdXRQb2ludChhLngoKSAtIGIud2lkdGgoKSwgYS55KCkgLSBiLmhlaWdodCgpKTsKLX0KLQot
aW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExh
eW91dFBvaW50JiBwb2ludCkKLXsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KC1w
b2ludC54KCksIC1wb2ludC55KCkpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBi
KQotewotICAgIHJldHVybiBhLngoKSA9PSBiLngoKSAmJiBhLnkoKSA9PSBiLnkoKTsKLX0KLQot
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYikKLXsKLSAgICByZXR1cm4gYS54KCkgIT0gYi54
KCkgfHwgYS55KCkgIT0gYi55KCk7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQg
dG9Qb2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkKLXsKLSAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFBvaW50KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci19Ci0K
LWlubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSB0b1NpemUoY29uc3QgRnJhY3Rpb25hbExheW91
dFBvaW50JiBhKQotewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShhLngoKSwgYS55
KCkpOwotfQotCi1pbmxpbmUgSW50UG9pbnQgZmxvb3JlZEludFBvaW50KGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRQb2ludCYgcG9pbnQpCi17Ci0gICAgcmV0dXJuIEludFBvaW50KHBvaW50LngoKS5m
bG9vcigpLCBwb2ludC55KCkuZmxvb3IoKSk7Ci19Ci0KLWlubGluZSBJbnRQb2ludCByb3VuZGVk
SW50UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBwb2ludCkKLXsKLSAgICByZXR1
cm4gSW50UG9pbnQocG9pbnQueCgpLnJvdW5kKCksIHBvaW50LnkoKS5yb3VuZCgpKTsKLX0KLQot
aW5saW5lIEludFBvaW50IHJvdW5kZWRJbnRQb2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6
ZSYgc2l6ZSkKLXsKLSAgICByZXR1cm4gSW50UG9pbnQoc2l6ZS53aWR0aCgpLnJvdW5kKCksIHNp
emUuaGVpZ2h0KCkucm91bmQoKSk7Ci19Ci0KLWlubGluZSBJbnRQb2ludCBjZWlsZWRJbnRQb2lu
dChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50KQotewotICAgIHJldHVybiBJbnRQ
b2ludChwb2ludC54KCkuY2VpbCgpLCBwb2ludC55KCkuY2VpbCgpKTsKLX0KLQotaW5saW5lIEZy
YWN0aW9uYWxMYXlvdXRQb2ludCBmbG9vcmVkRnJhY3Rpb25hbExheW91dFBvaW50KGNvbnN0IEZs
b2F0UG9pbnQmIHApCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChGcmFjdGlv
bmFsTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Rmxvb3IocC54KCkpLCBGcmFjdGlvbmFsTGF5b3V0VW5p
dDo6ZnJvbUZsb2F0Rmxvb3IocC55KCkpKTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCBjZWlsZWRGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkKLXsK
LSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpm
cm9tRmxvYXRDZWlsKHAueCgpKSwgRnJhY3Rpb25hbExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwo
cC55KCkpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRnJhY3Rp
b25hbExheW91dFBvaW50X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAJKHJldmlzaW9uIDEzMzUx
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRS
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFJlY3QuaCIKLQotI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRVbml0LmgiCi0jaW5jbHVkZSA8YWxn
b3JpdGhtPgotCi11c2luZyBzdGQ6Om1heDsKLXVzaW5nIHN0ZDo6bWluOwotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLUZyYWN0aW9uYWxMYXlvdXRSZWN0OjpGcmFjdGlvbmFsTGF5b3V0UmVjdChj
b25zdCBGbG9hdFJlY3QmIHIpCi0gICAgOiBtX2xvY2F0aW9uKEZyYWN0aW9uYWxMYXlvdXRQb2lu
dChyLmxvY2F0aW9uKCkpKQotICAgICwgbV9zaXplKEZyYWN0aW9uYWxMYXlvdXRTaXplKHIuc2l6
ZSgpKSkKLXsKLX0KLQotYm9vbCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6aW50ZXJzZWN0cyhjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgLy8gQ2hlY2tpbmcg
ZW1wdGluZXNzIGhhbmRsZXMgbmVnYXRpdmUgd2lkdGhzIGFzIHdlbGwgYXMgemVyby4KLSAgICBy
ZXR1cm4gIWlzRW1wdHkoKSAmJiAhb3RoZXIuaXNFbXB0eSgpCi0gICAgICAgICYmIHgoKSA8IG90
aGVyLm1heFgoKSAmJiBvdGhlci54KCkgPCBtYXhYKCkKLSAgICAgICAgJiYgeSgpIDwgb3RoZXIu
bWF4WSgpICYmIG90aGVyLnkoKSA8IG1heFkoKTsKLX0KLQotYm9vbCBGcmFjdGlvbmFsTGF5b3V0
UmVjdDo6Y29udGFpbnMoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90aGVyKSBjb25zdAot
ewotICAgIHJldHVybiB4KCkgPD0gb3RoZXIueCgpICYmIG1heFgoKSA+PSBvdGhlci5tYXhYKCkK
LSAgICAgICAgJiYgeSgpIDw9IG90aGVyLnkoKSAmJiBtYXhZKCkgPj0gb3RoZXIubWF4WSgpOwot
fQotCi12b2lkIEZyYWN0aW9uYWxMYXlvdXRSZWN0OjppbnRlcnNlY3QoY29uc3QgRnJhY3Rpb25h
bExheW91dFJlY3QmIG90aGVyKQotewotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdMb2Nh
dGlvbihtYXgoeCgpLCBvdGhlci54KCkpLCBtYXgoeSgpLCBvdGhlci55KCkpKTsKLSAgICBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQgbmV3TWF4UG9pbnQobWluKG1heFgoKSwgb3RoZXIubWF4WCgpKSwg
bWluKG1heFkoKSwgb3RoZXIubWF4WSgpKSk7Ci0KLSAgICAvLyBSZXR1cm4gYSBjbGVhbiBlbXB0
eSByZWN0YW5nbGUgZm9yIG5vbi1pbnRlcnNlY3RpbmcgY2FzZXMuCi0gICAgaWYgKG5ld0xvY2F0
aW9uLngoKSA+PSBuZXdNYXhQb2ludC54KCkgfHwgbmV3TG9jYXRpb24ueSgpID49IG5ld01heFBv
aW50LnkoKSkgewotICAgICAgICBuZXdMb2NhdGlvbiA9IEZyYWN0aW9uYWxMYXlvdXRQb2ludCgw
LCAwKTsKLSAgICAgICAgbmV3TWF4UG9pbnQgPSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoMCwgMCk7
Ci0gICAgfQotCi0gICAgbV9sb2NhdGlvbiA9IG5ld0xvY2F0aW9uOwotICAgIG1fc2l6ZSA9IG5l
d01heFBvaW50IC0gbmV3TG9jYXRpb247Ci19Ci0KLXZvaWQgRnJhY3Rpb25hbExheW91dFJlY3Q6
OnVuaXRlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBvdGhlcikKLXsKLSAgICAvLyBIYW5k
bGUgZW1wdHkgc3BlY2lhbCBjYXNlcyBmaXJzdC4KLSAgICBpZiAob3RoZXIuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKGlzRW1wdHkoKSkgewotICAgICAgICAqdGhpcyA9IG90
aGVyOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRnJhY3Rpb25hbExheW91dFBvaW50
IG5ld0xvY2F0aW9uKG1pbih4KCksIG90aGVyLngoKSksIG1pbih5KCksIG90aGVyLnkoKSkpOwot
ICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdNYXhQb2ludChtYXgobWF4WCgpLCBvdGhlci5t
YXhYKCkpLCBtYXgobWF4WSgpLCBvdGhlci5tYXhZKCkpKTsKLQotICAgIG1fbG9jYXRpb24gPSBu
ZXdMb2NhdGlvbjsKLSAgICBtX3NpemUgPSBuZXdNYXhQb2ludCAtIG5ld0xvY2F0aW9uOwotfQot
Ci12b2lkIEZyYWN0aW9uYWxMYXlvdXRSZWN0Ojp1bml0ZUlmTm9uWmVybyhjb25zdCBGcmFjdGlv
bmFsTGF5b3V0UmVjdCYgb3RoZXIpCi17Ci0gICAgLy8gSGFuZGxlIGVtcHR5IHNwZWNpYWwgY2Fz
ZXMgZmlyc3QuCi0gICAgaWYgKCFvdGhlci53aWR0aCgpICYmICFvdGhlci5oZWlnaHQoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmICghd2lkdGgoKSAmJiAhaGVpZ2h0KCkpIHsKLSAgICAgICAg
KnRoaXMgPSBvdGhlcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEZyYWN0aW9uYWxM
YXlvdXRQb2ludCBuZXdMb2NhdGlvbihtaW4oeCgpLCBvdGhlci54KCkpLCBtaW4oeSgpLCBvdGhl
ci55KCkpKTsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbmV3TWF4UG9pbnQobWF4KG1heFgo
KSwgb3RoZXIubWF4WCgpKSwgbWF4KG1heFkoKSwgb3RoZXIubWF4WSgpKSk7Ci0KLSAgICBtX2xv
Y2F0aW9uID0gbmV3TG9jYXRpb247Ci0gICAgbV9zaXplID0gbmV3TWF4UG9pbnQgLSBuZXdMb2Nh
dGlvbjsKLX0KLQotdm9pZCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6c2NhbGUoZmxvYXQgcykKLXsK
LSAgICBtX2xvY2F0aW9uLnNjYWxlKHMsIHMpOwotICAgIG1fc2l6ZS5zY2FsZShzKTsKLX0KLQot
RnJhY3Rpb25hbExheW91dFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxGcmFjdGlvbmFsTGF5
b3V0UmVjdD4mIHJlY3RzKQotewotICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0IHJlc3VsdDsKLQot
ICAgIHNpemVfdCBjb3VudCA9IHJlY3RzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNvdW50OyArK2kpCi0gICAgICAgIHJlc3VsdC51bml0ZShyZWN0c1tpXSk7Ci0KLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1JbnRSZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgRnJhY3Rp
b25hbExheW91dFJlY3QmIHJlY3QpCi17Ci0gICAgSW50UG9pbnQgbG9jYXRpb24gPSBmbG9vcmVk
SW50UG9pbnQocmVjdC5taW5YTWluWUNvcm5lcigpKTsKLSAgICBJbnRQb2ludCBtYXhQb2ludCA9
IGNlaWxlZEludFBvaW50KHJlY3QubWF4WE1heFlDb3JuZXIoKSk7Ci0KLSAgICByZXR1cm4gSW50
UmVjdChsb2NhdGlvbiwgbWF4UG9pbnQgLSBsb2NhdGlvbik7Ci19Ci0KLUZyYWN0aW9uYWxMYXlv
dXRSZWN0IGVuY2xvc2luZ0ZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKLXsKLSNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAgIEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCBsb2NhdGlvbiA9IGZsb29yZWRGcmFjdGlvbmFsTGF5b3V0UG9pbnQocmVjdC5taW5YTWlu
WUNvcm5lcigpKTsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbWF4UG9pbnQgPSBjZWlsZWRG
cmFjdGlvbmFsTGF5b3V0UG9pbnQocmVjdC5tYXhYTWF4WUNvcm5lcigpKTsKLQotICAgIHJldHVy
biBGcmFjdGlvbmFsTGF5b3V0UmVjdChsb2NhdGlvbiwgbWF4UG9pbnQgLSBsb2NhdGlvbik7Ci0j
ZWxzZQotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHJlY3QpOwotI2VuZGlmCi19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuaAkocmV2aXNpb24gMTMzNTE3
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
YykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgot
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEZyYWN0aW9uYWxM
YXlvdXRSZWN0X2gKLSNkZWZpbmUgRnJhY3Rpb25hbExheW91dFJlY3RfaAotCi0jaW5jbHVkZSAi
RnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oIgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRQ
b2ludC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0K
LSNpZiBQTEFURk9STShRVCkKLSNpbmNsdWRlIDxxZ2xvYmFsLmg+Ci1RVF9CRUdJTl9OQU1FU1BB
Q0UKLWNsYXNzIFFSZWN0OwotY2xhc3MgUVJlY3RGOwotUVRfRU5EX05BTUVTUEFDRQotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRmxvYXRSZWN0OwotCi1jbGFzcyBGcmFj
dGlvbmFsTGF5b3V0UmVjdCB7Ci1wdWJsaWM6Ci0gICAgRnJhY3Rpb25hbExheW91dFJlY3QoKSB7
IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQm
IGxvY2F0aW9uLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkKLSAgICAgICAgOiBt
X2xvY2F0aW9uKGxvY2F0aW9uKSwgbV9zaXplKHNpemUpIHsgfQotICAgIEZyYWN0aW9uYWxMYXlv
dXRSZWN0KEZyYWN0aW9uYWxMYXlvdXRVbml0IHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHksIEZy
YWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBoZWlnaHQpCi0g
ICAgICAgIDogbV9sb2NhdGlvbihGcmFjdGlvbmFsTGF5b3V0UG9pbnQoeCwgeSkpLCBtX3NpemUo
RnJhY3Rpb25hbExheW91dFNpemUod2lkdGgsIGhlaWdodCkpIHsgfQotICAgIEZyYWN0aW9uYWxM
YXlvdXRSZWN0KGNvbnN0IEZsb2F0UG9pbnQmIGxvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIHNp
emUpCi0gICAgICAgIDogbV9sb2NhdGlvbihsb2NhdGlvbiksIG1fc2l6ZShzaXplKSB7IH0KLSAg
ICBGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSA6IG1fbG9jYXRpb24o
cmVjdC5sb2NhdGlvbigpKSwgbV9zaXplKHJlY3Quc2l6ZSgpKSB7IH0KLQotICAgIGV4cGxpY2l0
IEZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOyAvLyBkb24ndCBkbyB0aGlz
IGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQotICAgICAgICAKLSAgICBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQgbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9Ci0gICAgRnJh
Y3Rpb25hbExheW91dFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotCi0gICAg
SW50UG9pbnQgcGl4ZWxTbmFwcGVkTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiByb3VuZGVkSW50
UG9pbnQobV9sb2NhdGlvbik7IH0KLSAgICBJbnRTaXplIHBpeGVsU25hcHBlZFNpemUoKSBjb25z
dCB7IHJldHVybiBJbnRTaXplKHNuYXBTaXplVG9QaXhlbChtX3NpemUud2lkdGgoKSwgbV9sb2Nh
dGlvbi54KCkpLCBzbmFwU2l6ZVRvUGl4ZWwobV9zaXplLmhlaWdodCgpLCBtX2xvY2F0aW9uLnko
KSkpOyB9Ci0KLSAgICB2b2lkIHNldExvY2F0aW9uKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2lu
dCYgbG9jYXRpb24pIHsgbV9sb2NhdGlvbiA9IGxvY2F0aW9uOyB9Ci0gICAgdm9pZCBzZXRTaXpl
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KLQot
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHgoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uLngo
KTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHkoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0
aW9uLnkoKTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1heFgoKSBjb25zdCB7IHJldHVy
biB4KCkgKyB3aWR0aCgpOyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgbWF4WSgpIGNvbnN0
IHsgcmV0dXJuIHkoKSArIGhlaWdodCgpOyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgd2lk
dGgoKSBjb25zdCB7IHJldHVybiBtX3NpemUud2lkdGgoKTsgfQotICAgIEZyYWN0aW9uYWxMYXlv
dXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQotCi0gICAg
aW50IHBpeGVsU25hcHBlZFgoKSBjb25zdCB7IHJldHVybiB4KCkucm91bmQoKTsgfQotICAgIGlu
dCBwaXhlbFNuYXBwZWRZKCkgY29uc3QgeyByZXR1cm4geSgpLnJvdW5kKCk7IH0KLSAgICBpbnQg
cGl4ZWxTbmFwcGVkV2lkdGgoKSBjb25zdCB7IHJldHVybiBzbmFwU2l6ZVRvUGl4ZWwod2lkdGgo
KSwgeCgpKTsgfQotICAgIGludCBwaXhlbFNuYXBwZWRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBz
bmFwU2l6ZVRvUGl4ZWwoaGVpZ2h0KCksIHkoKSk7IH0KLSAgICBpbnQgcGl4ZWxTbmFwcGVkTWF4
WCgpIGNvbnN0IHsgcmV0dXJuIChtX2xvY2F0aW9uLngoKSArIG1fc2l6ZS53aWR0aCgpKS5yb3Vu
ZCgpOyB9Ci0gICAgaW50IHBpeGVsU25hcHBlZE1heFkoKSBjb25zdCB7IHJldHVybiAobV9sb2Nh
dGlvbi55KCkgKyBtX3NpemUuaGVpZ2h0KCkpLnJvdW5kKCk7IH0KLQotICAgIHZvaWQgc2V0WChG
cmFjdGlvbmFsTGF5b3V0VW5pdCB4KSB7IG1fbG9jYXRpb24uc2V0WCh4KTsgfQotICAgIHZvaWQg
c2V0WShGcmFjdGlvbmFsTGF5b3V0VW5pdCB5KSB7IG1fbG9jYXRpb24uc2V0WSh5KTsgfQotICAg
IHZvaWQgc2V0V2lkdGgoRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgpIHsgbV9zaXplLnNldFdp
ZHRoKHdpZHRoKTsgfQotICAgIHZvaWQgc2V0SGVpZ2h0KEZyYWN0aW9uYWxMYXlvdXRVbml0IGhl
aWdodCkgeyBtX3NpemUuc2V0SGVpZ2h0KGhlaWdodCk7IH0KLQotICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0KLQotICAgIC8vIE5PVEU6IFRoZSBy
ZXN1bHQgaXMgcm91bmRlZCB0byBpbnRlZ2VyIHZhbHVlcywgYW5kIHRodXMgbWF5IGJlIG5vdCB0
aGUgZXhhY3QKLSAgICAvLyBjZW50ZXIgcG9pbnQuCi0gICAgRnJhY3Rpb25hbExheW91dFBvaW50
IGNlbnRlcigpIGNvbnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludCh4KCkgKyB3aWR0
aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAyKTsgfQotCi0gICAgdm9pZCBtb3ZlKGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1fbG9jYXRpb24gKz0gc2l6ZTsgfSAKLSAgICB2
b2lkIG1vdmVCeShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIG9mZnNldCkgeyBtX2xvY2F0
aW9uLm1vdmUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7IH0KLSAgICB2b2lkIG1vdmUoRnJhY3Rp
b25hbExheW91dFVuaXQgZHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGR5KSB7IG1fbG9jYXRpb24u
bW92ZShkeCwgZHkpOyB9IAotCi0gICAgdm9pZCBleHBhbmQoY29uc3QgRnJhY3Rpb25hbExheW91
dFNpemUmIHNpemUpIHsgbV9zaXplICs9IHNpemU7IH0KLSAgICB2b2lkIGV4cGFuZChjb25zdCBG
cmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50JiBib3gpCi0gICAgewotICAgICAgICBtX2xvY2F0aW9u
Lm1vdmUoLWJveC5sZWZ0KCksIC1ib3gudG9wKCkpOwotICAgICAgICBtX3NpemUuZXhwYW5kKGJv
eC5sZWZ0KCkgKyBib3gucmlnaHQoKSwgYm94LnRvcCgpICsgYm94LmJvdHRvbSgpKTsKLSAgICB9
Ci0gICAgdm9pZCBleHBhbmQoRnJhY3Rpb25hbExheW91dFVuaXQgZHcsIEZyYWN0aW9uYWxMYXlv
dXRVbml0IGRoKSB7IG1fc2l6ZS5leHBhbmQoZHcsIGRoKTsgfQotICAgIHZvaWQgY29udHJhY3Qo
Y29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpIHsgbV9zaXplIC09IHNpemU7IH0KLSAg
ICB2b2lkIGNvbnRyYWN0KEZyYWN0aW9uYWxMYXlvdXRVbml0IGR3LCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBkaCkgeyBtX3NpemUuZXhwYW5kKC1kdywgLWRoKTsgfQotCi0gICAgdm9pZCBzaGlmdFhF
ZGdlVG8oRnJhY3Rpb25hbExheW91dFVuaXQgZWRnZSkKLSAgICB7Ci0gICAgICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IGRlbHRhID0gZWRnZSAtIHgoKTsKLSAgICAgICAgc2V0WChlZGdlKTsKLSAg
ICAgICAgc2V0V2lkdGgoc3RkOjptYXg8RnJhY3Rpb25hbExheW91dFVuaXQ+KDAsIHdpZHRoKCkg
LSBkZWx0YSkpOwotICAgIH0KLSAgICB2b2lkIHNoaWZ0TWF4WEVkZ2VUbyhGcmFjdGlvbmFsTGF5
b3V0VW5pdCBlZGdlKQotICAgIHsKLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZGVsdGEg
PSBlZGdlIC0gbWF4WCgpOwotICAgICAgICBzZXRXaWR0aChzdGQ6Om1heDxGcmFjdGlvbmFsTGF5
b3V0VW5pdD4oMCwgd2lkdGgoKSArIGRlbHRhKSk7Ci0gICAgfQotICAgIHZvaWQgc2hpZnRZRWRn
ZVRvKEZyYWN0aW9uYWxMYXlvdXRVbml0IGVkZ2UpCi0gICAgewotICAgICAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBkZWx0YSA9IGVkZ2UgLSB5KCk7Ci0gICAgICAgIHNldFkoZWRnZSk7Ci0gICAg
ICAgIHNldEhlaWdodChzdGQ6Om1heDxGcmFjdGlvbmFsTGF5b3V0VW5pdD4oMCwgaGVpZ2h0KCkg
LSBkZWx0YSkpOwotICAgIH0KLSAgICB2b2lkIHNoaWZ0TWF4WUVkZ2VUbyhGcmFjdGlvbmFsTGF5
b3V0VW5pdCBlZGdlKQotICAgIHsKLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZGVsdGEg
PSBlZGdlIC0gbWF4WSgpOwotICAgICAgICBzZXRIZWlnaHQoc3RkOjptYXg8RnJhY3Rpb25hbExh
eW91dFVuaXQ+KDAsIGhlaWdodCgpICsgZGVsdGEpKTsKLSAgICB9Ci0KLSAgICBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQgbWluWE1pbllDb3JuZXIoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9
IC8vIHR5cGljYWxseSB0b3BMZWZ0Ci0gICAgRnJhY3Rpb25hbExheW91dFBvaW50IG1heFhNaW5Z
Q29ybmVyKCkgY29uc3QgeyByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KG1fbG9jYXRpb24u
eCgpICsgbV9zaXplLndpZHRoKCksIG1fbG9jYXRpb24ueSgpKTsgfSAvLyB0eXBpY2FsbHkgdG9w
UmlnaHQKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbWluWE1heFlDb3JuZXIoKSBjb25zdCB7
IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQobV9sb2NhdGlvbi54KCksIG1fbG9jYXRpb24u
eSgpICsgbV9zaXplLmhlaWdodCgpKTsgfSAvLyB0eXBpY2FsbHkgYm90dG9tTGVmdAotICAgIEZy
YWN0aW9uYWxMYXlvdXRQb2ludCBtYXhYTWF4WUNvcm5lcigpIGNvbnN0IHsgcmV0dXJuIEZyYWN0
aW9uYWxMYXlvdXRQb2ludChtX2xvY2F0aW9uLngoKSArIG1fc2l6ZS53aWR0aCgpLCBtX2xvY2F0
aW9uLnkoKSArIG1fc2l6ZS5oZWlnaHQoKSk7IH0gLy8gdHlwaWNhbGx5IGJvdHRvbVJpZ2h0Ci0g
ICAgCi0gICAgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JikgY29u
c3Q7Ci0gICAgYm9vbCBjb250YWlucyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpIGNvbnN0
OwotCi0gICAgLy8gVGhpcyBjaGVja3MgdG8gc2VlIGlmIHRoZSByZWN0IGNvbnRhaW5zIHgseSBp
biB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuCi0gICAgLy8gRXF1aXZhbGVudCB0byBjaGVja2luZyBp
ZiB0aGUgcmVjdCBjb250YWlucyBhIDF4MSByZWN0IGJlbG93IGFuZCB0byB0aGUgcmlnaHQgb2Yg
KHB4LHB5KS4KLSAgICBib29sIGNvbnRhaW5zKEZyYWN0aW9uYWxMYXlvdXRVbml0IHB4LCBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBweSkgY29uc3QKLSAgICAgICAgeyByZXR1cm4gcHggPj0geCgpICYm
IHB4IDwgbWF4WCgpICYmIHB5ID49IHkoKSAmJiBweSA8IG1heFkoKTsgfQotICAgIGJvb2wgY29u
dGFpbnMoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBwb2ludCkgY29uc3QgeyByZXR1cm4g
Y29udGFpbnMocG9pbnQueCgpLCBwb2ludC55KCkpOyB9Ci0KLSAgICB2b2lkIGludGVyc2VjdChj
b25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpOwotICAgIHZvaWQgdW5pdGUoY29uc3QgRnJhY3Rp
b25hbExheW91dFJlY3QmKTsKLSAgICB2b2lkIHVuaXRlSWZOb25aZXJvKGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRSZWN0Jik7Ci0KLSAgICB2b2lkIGluZmxhdGVYKEZyYWN0aW9uYWxMYXlvdXRVbml0
IGR4KQotICAgIHsKLSAgICAgICAgbV9sb2NhdGlvbi5zZXRYKG1fbG9jYXRpb24ueCgpIC0gZHgp
OwotICAgICAgICBtX3NpemUuc2V0V2lkdGgobV9zaXplLndpZHRoKCkgKyBkeCArIGR4KTsKLSAg
ICB9Ci0gICAgdm9pZCBpbmZsYXRlWShGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeSkKLSAgICB7Ci0g
ICAgICAgIG1fbG9jYXRpb24uc2V0WShtX2xvY2F0aW9uLnkoKSAtIGR5KTsKLSAgICAgICAgbV9z
aXplLnNldEhlaWdodChtX3NpemUuaGVpZ2h0KCkgKyBkeSArIGR5KTsKLSAgICB9Ci0gICAgdm9p
ZCBpbmZsYXRlKEZyYWN0aW9uYWxMYXlvdXRVbml0IGQpIHsgaW5mbGF0ZVgoZCk7IGluZmxhdGVZ
KGQpOyB9Ci0gICAgdm9pZCBzY2FsZShmbG9hdCBzKTsKLQotICAgIEZyYWN0aW9uYWxMYXlvdXRS
ZWN0IHRyYW5zcG9zZWRSZWN0KCkgY29uc3QgeyByZXR1cm4gRnJhY3Rpb25hbExheW91dFJlY3Qo
bV9sb2NhdGlvbi50cmFuc3Bvc2VkUG9pbnQoKSwgbV9zaXplLnRyYW5zcG9zZWRTaXplKCkpOyB9
Ci0KLSAgICBzdGF0aWMgRnJhY3Rpb25hbExheW91dFJlY3QgaW5maW5pdGVSZWN0KCkKLSAgICB7
Ci0gICAgICAgIC8vIFJldHVybiBhIHJlY3QgdGhhdCBpcyBzbGlnaHRseSBzbWFsbGVyIHRoYW4g
dGhlIHRydWUgbWF4IHJlY3QgdG8gYWxsb3cgcGl4ZWxTbmFwcGluZyB0byByb3VuZCB1cCB0byB0
aGUgbmVhcmVzdCBJbnRSZWN0IHdpdGhvdXQgb3ZlcmZsb3dpbmcuCi0gICAgICAgIHJldHVybiBG
cmFjdGlvbmFsTGF5b3V0UmVjdChGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bmVhcmx5TWluKCkgLyAy
LCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bmVhcmx5TWluKCkgLyAyLCBGcmFjdGlvbmFsTGF5b3V0
VW5pdDo6bmVhcmx5TWF4KCksIEZyYWN0aW9uYWxMYXlvdXRVbml0OjpuZWFybHlNYXgoKSk7Ci0g
ICAgfQotCi0jaWYgUExBVEZPUk0oUVQpCi0gICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFJl
Y3QoY29uc3QgUVJlY3QmKTsKLSAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25z
dCBRUmVjdEYmKTsKLSAgICBvcGVyYXRvciBRUmVjdEYoKSBjb25zdDsKLSNlbmRpZgotCi1wcml2
YXRlOgotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBtX2xvY2F0aW9uOwotICAgIEZyYWN0aW9u
YWxMYXlvdXRTaXplIG1fc2l6ZTsKLX07Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UmVjdCBp
bnRlcnNlY3Rpb24oY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRSZWN0JiBiKQotewotICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0IGMgPSBhOwotICAg
IGMuaW50ZXJzZWN0KGIpOwotICAgIHJldHVybiBjOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExh
eW91dFJlY3QgdW5pb25SZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBhLCBjb25zdCBG
cmFjdGlvbmFsTGF5b3V0UmVjdCYgYikKLXsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCBjID0g
YTsKLSAgICBjLnVuaXRlKGIpOwotICAgIHJldHVybiBjOwotfQotCi1GcmFjdGlvbmFsTGF5b3V0
UmVjdCB1bmlvblJlY3QoY29uc3QgVmVjdG9yPEZyYWN0aW9uYWxMYXlvdXRSZWN0PiYpOwotCi1p
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBhLCBjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYikKLXsKLSAgICByZXR1cm4gYS5sb2NhdGlvbigpID09
IGIubG9jYXRpb24oKSAmJiBhLnNpemUoKSA9PSBiLnNpemUoKTsKLX0KLQotaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYSwgY29uc3QgRnJhY3Rpb25h
bExheW91dFJlY3QmIGIpCi17Ci0gICAgcmV0dXJuIGEubG9jYXRpb24oKSAhPSBiLmxvY2F0aW9u
KCkgfHwgYS5zaXplKCkgIT0gYi5zaXplKCk7Ci19Ci0KLWlubGluZSBJbnRSZWN0IHBpeGVsU25h
cHBlZEludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIHJlY3QpCi17Ci0jaWYgRU5B
QkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICByZXR1cm4gSW50UmVjdChyb3VuZGVkSW50UG9pbnQo
cmVjdC5sb2NhdGlvbigpKSwgSW50U2l6ZShzbmFwU2l6ZVRvUGl4ZWwocmVjdC53aWR0aCgpLCBy
ZWN0LngoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc25hcFNpemVUb1BpeGVsKHJlY3QuaGVpZ2h0KCksIHJlY3QueSgpKSkp
OwotCi0jZWxzZQotICAgIHJldHVybiBJbnRSZWN0KHJlY3QpOwotI2VuZGlmCi19Ci0KLUludFJl
Y3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpOwotRnJhY3Rp
b25hbExheW91dFJlY3QgZW5jbG9zaW5nRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgRmxvYXRS
ZWN0Jik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEZyYWN0aW9uYWxM
YXlvdXRSZWN0X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0
aW9uYWxMYXlvdXRTaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFNpemUuaAkocmV2aXNpb24gMTMzNTE3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFNpemUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSwxNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMiwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEZyYWN0aW9uYWxMYXlvdXRTaXpl
X2gKLSNkZWZpbmUgRnJhY3Rpb25hbExheW91dFNpemVfaAotCi0jaW5jbHVkZSAiRmxvYXRTaXpl
LmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFVuaXQuaCIKLSNpbmNsdWRlICJJbnRTaXpl
LmgiCi0KLSNpZiBQTEFURk9STShRVCkKLSNpbmNsdWRlIDxxZ2xvYmFsLmg+Ci1RVF9CRUdJTl9O
QU1FU1BBQ0UKLWNsYXNzIFFTaXplOwotY2xhc3MgUVNpemVGOwotUVRfRU5EX05BTUVTUEFDRQot
I2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRnJhY3Rpb25hbExheW91dFBv
aW50OwotCi1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0U2l6ZSB7Ci1wdWJsaWM6Ci0gICAgRnJhY3Rp
b25hbExheW91dFNpemUoKSA6IG1fd2lkdGgoMCksIG1faGVpZ2h0KDApIHsgfQotICAgIEZyYWN0
aW9uYWxMYXlvdXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpIDogbV93aWR0aChzaXplLndpZHRo
KCkpLCBtX2hlaWdodChzaXplLmhlaWdodCgpKSB7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0U2l6
ZShGcmFjdGlvbmFsTGF5b3V0VW5pdCB3aWR0aCwgRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0
KSA6IG1fd2lkdGgod2lkdGgpLCBtX2hlaWdodChoZWlnaHQpIHsgfQotCi0gICAgZXhwbGljaXQg
RnJhY3Rpb25hbExheW91dFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKSA6IG1fd2lkdGgoc2l6
ZS53aWR0aCgpKSwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkgeyB9Ci0gICAgCi0gICAgRnJhY3Rp
b25hbExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9Ci0gICAgRnJh
Y3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KLQot
ICAgIHZvaWQgc2V0V2lkdGgoRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgpIHsgbV93aWR0aCA9
IHdpZHRoOyB9Ci0gICAgdm9pZCBzZXRIZWlnaHQoRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0
KSB7IG1faGVpZ2h0ID0gaGVpZ2h0OyB9Ci0KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiBtX3dpZHRoIDw9IDAgfHwgbV9oZWlnaHQgPD0gMDsgfQotICAgIGJvb2wgaXNaZXJvKCkg
Y29uc3QgeyByZXR1cm4gIW1fd2lkdGggJiYgIW1faGVpZ2h0OyB9Ci0KLSAgICBmbG9hdCBhc3Bl
Y3RSYXRpbygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX3dpZHRoKSAvIHN0
YXRpY19jYXN0PGZsb2F0PihtX2hlaWdodCk7IH0KLSAgICAKLSAgICB2b2lkIGV4cGFuZChGcmFj
dGlvbmFsTGF5b3V0VW5pdCB3aWR0aCwgRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KQotICAg
IHsKLSAgICAgICAgbV93aWR0aCArPSB3aWR0aDsKLSAgICAgICAgbV9oZWlnaHQgKz0gaGVpZ2h0
OwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNjYWxlKGZsb2F0IHNjYWxlKQotICAgIHsKLSAgICAg
ICAgbV93aWR0aCAqPSBzY2FsZTsKLSAgICAgICAgbV9oZWlnaHQgKj0gc2NhbGU7Ci0gICAgfQot
Ci0gICAgdm9pZCBzY2FsZShmbG9hdCB3aWR0aFNjYWxlLCBmbG9hdCBoZWlnaHRTY2FsZSkKLSAg
ICB7Ci0gICAgICAgIG1fd2lkdGggKj0gd2lkdGhTY2FsZTsKLSAgICAgICAgbV9oZWlnaHQgKj0g
aGVpZ2h0U2NhbGU7Ci0gICAgfQotICAgIAotICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplIGV4cGFu
ZGVkVG8oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIG90aGVyKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKG1fd2lkdGggPiBvdGhlci5tX3dpZHRo
ID8gbV93aWR0aCA6IG90aGVyLm1fd2lkdGgsCi0gICAgICAgICAgICBtX2hlaWdodCA+IG90aGVy
Lm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdodCk7Ci0gICAgfQotCi0gICAgRnJh
Y3Rpb25hbExheW91dFNpemUgc2hydW5rVG8oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIG90
aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKG1f
d2lkdGggPCBvdGhlci5tX3dpZHRoID8gbV93aWR0aCA6IG90aGVyLm1fd2lkdGgsCi0gICAgICAg
ICAgICBtX2hlaWdodCA8IG90aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdo
dCk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGFtcE5lZ2F0aXZlVG9aZXJvKCkKLSAgICB7Ci0gICAg
ICAgICp0aGlzID0gZXhwYW5kZWRUbyhGcmFjdGlvbmFsTGF5b3V0U2l6ZSgpKTsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBjbGFtcFRvTWluaW11bVNpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFNp
emUmIG1pbmltdW1TaXplKQotICAgIHsKLSAgICAgICAgaWYgKG1fd2lkdGggPCBtaW5pbXVtU2l6
ZS53aWR0aCgpKQotICAgICAgICAgICAgbV93aWR0aCA9IG1pbmltdW1TaXplLndpZHRoKCk7Ci0g
ICAgICAgIGlmIChtX2hlaWdodCA8IG1pbmltdW1TaXplLmhlaWdodCgpKQotICAgICAgICAgICAg
bV9oZWlnaHQgPSBtaW5pbXVtU2l6ZS5oZWlnaHQoKTsKLSAgICB9Ci0KLSAgICBGcmFjdGlvbmFs
TGF5b3V0U2l6ZSB0cmFuc3Bvc2VkU2l6ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFNpemUobV9oZWlnaHQsIG1fd2lkdGgpOwotICAgIH0KLQotI2lmIFBM
QVRGT1JNKFFUKQotICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0IFFTaXpl
Jik7Ci0gICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFNpemUoY29uc3QgUVNpemVGJik7Ci0g
ICAgb3BlcmF0b3IgUVNpemVGKCkgY29uc3Q7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBtX3dpZHRoLCBtX2hlaWdodDsKLX07Ci0KLWlubGluZSBGcmFjdGlv
bmFsTGF5b3V0U2l6ZSYgb3BlcmF0b3IrPShGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYSwgY29uc3Qg
RnJhY3Rpb25hbExheW91dFNpemUmIGIpCi17Ci0gICAgYS5zZXRXaWR0aChhLndpZHRoKCkgKyBi
LndpZHRoKCkpOwotICAgIGEuc2V0SGVpZ2h0KGEuaGVpZ2h0KCkgKyBiLmhlaWdodCgpKTsKLSAg
ICByZXR1cm4gYTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplJiBvcGVyYXRvci09
KEZyYWN0aW9uYWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikK
LXsKLSAgICBhLnNldFdpZHRoKGEud2lkdGgoKSAtIGIud2lkdGgoKSk7Ci0gICAgYS5zZXRIZWln
aHQoYS5oZWlnaHQoKSAtIGIuaGVpZ2h0KCkpOwotICAgIHJldHVybiBhOwotfQotCi1pbmxpbmUg
RnJhY3Rpb25hbExheW91dFNpemUgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXpl
JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKLXsKLSAgICByZXR1cm4gRnJhY3Rp
b25hbExheW91dFNpemUoYS53aWR0aCgpICsgYi53aWR0aCgpLCBhLmhlaWdodCgpICsgYi5oZWln
aHQoKSk7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSBvcGVyYXRvci0oY29uc3Qg
RnJhY3Rpb25hbExheW91dFNpemUmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQot
ewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShhLndpZHRoKCkgLSBiLndpZHRoKCks
IGEuaGVpZ2h0KCkgLSBiLmhlaWdodCgpKTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRT
aXplIG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkKLXsKLSAgICBy
ZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUoLXNpemUud2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkp
OwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXpl
JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKLXsKLSAgICByZXR1cm4gYS53aWR0
aCgpID09IGIud2lkdGgoKSAmJiBhLmhlaWdodCgpID09IGIuaGVpZ2h0KCk7Ci19Ci0KLWlubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGEsIGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRTaXplJiBiKQotewotICAgIHJldHVybiBhLndpZHRoKCkgIT0gYi53aWR0
aCgpIHx8IGEuaGVpZ2h0KCkgIT0gYi5oZWlnaHQoKTsKLX0KLQotaW5saW5lIEludFNpemUgZmxv
b3JlZEludFNpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHMpCi17Ci0gICAgcmV0dXJu
IEludFNpemUocy53aWR0aCgpLmZsb29yKCksIHMuaGVpZ2h0KCkuZmxvb3IoKSk7Ci19Ci0KLWlu
bGluZSBJbnRTaXplIHJvdW5kZWRJbnRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBz
KQotewotICAgIHJldHVybiBJbnRTaXplKHMud2lkdGgoKS5yb3VuZCgpLCBzLmhlaWdodCgpLnJv
dW5kKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBGcmFjdGlv
bmFsTGF5b3V0U2l6ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0xheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiTGF5b3V0
VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUg
IlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5jcHAJKHJldmlz
aW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
TGF5ZXJBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJBbmlt
YXRpb24uaCIKIAotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRTaXplLmgiCisjaW5jbHVkZSAi
TGF5b3V0U2l6ZS5oIgogI2luY2x1ZGUgIlVuaXRCZXppZXIuaCIKICNpbmNsdWRlIDx3dGYvQ3Vy
cmVudFRpbWUuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50
UmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW50UmVjdC5jcHAJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ludFJlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogCi0jaW5jbHVkZSAiRnJh
Y3Rpb25hbExheW91dFJlY3QuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJM
YXlvdXRSZWN0LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogCiB1c2luZyBzdGQ6Om1heDsKQEAg
LTQxLDcgKzQxLDcgQEAgSW50UmVjdDo6SW50UmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCiB7CiB9
CiAKLUludFJlY3Q6OkludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIHIpCitJbnRS
ZWN0OjpJbnRSZWN0KGNvbnN0IExheW91dFJlY3QmIHIpCiAgICAgOiBtX2xvY2F0aW9uKHIueCgp
LCByLnkoKSkKICAgICAsIG1fc2l6ZShyLndpZHRoKCksIHIuaGVpZ2h0KCkpCiB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCShyZXZpc2lvbiAxMzM1
MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgc3RydWN0IFNrSVJlY3Q7CiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRSZWN0Owor
Y2xhc3MgTGF5b3V0UmVjdDsKIAogY2xhc3MgSW50UmVjdCB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX2xvY2F0aW9u
KEludFBvaW50KHgsIHkpKSwgbV9zaXplKEludFNpemUod2lkdGgsIGhlaWdodCkpIHsgfQogCiAg
ICAgZXhwbGljaXQgSW50UmVjdChjb25zdCBGbG9hdFJlY3QmKTsgLy8gZG9uJ3QgZG8gdGhpcyBp
bXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKLSAgICBleHBsaWNpdCBJbnRSZWN0KGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRSZWN0Jik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBp
dCdzIGxvc3N5CisgICAgZXhwbGljaXQgSW50UmVjdChjb25zdCBMYXlvdXRSZWN0Jik7IC8vIGRv
bid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CiAgICAgICAgIAogICAgIElu
dFBvaW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfQogICAgIEludFNp
emUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRCb3hFeHRlbnQuY3BwCShyZXZpc2lv
biAxMzM1MTcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9u
YWxMYXlvdXRCb3hFeHRlbnQuY3BwOjEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0xheW91dEJveEV4dGVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
OTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRCb3hF
eHRlbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGcmFjdGlvbmFsTGF5b3V0VW5pdCBG
cmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Ojpsb2dpY2FsVG9wKFdyaXRpbmdNb2RlIHdyaXRpbmdN
b2RlKSBjb25zdAoreworICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5n
TW9kZSkgPyBtX3RvcCA6IG1fbGVmdDsKK30KKworRnJhY3Rpb25hbExheW91dFVuaXQgRnJhY3Rp
b25hbExheW91dEJveEV4dGVudDo6bG9naWNhbEJvdHRvbShXcml0aW5nTW9kZSB3cml0aW5nTW9k
ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01v
ZGUpID8gbV9ib3R0b20gOiBtX3JpZ2h0OworfQorCitGcmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFj
dGlvbmFsTGF5b3V0Qm94RXh0ZW50Ojpsb2dpY2FsTGVmdChXcml0aW5nTW9kZSB3cml0aW5nTW9k
ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01v
ZGUpID8gbV9sZWZ0IDogbV90b3A7Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9u
YWxMYXlvdXRCb3hFeHRlbnQ6OmxvZ2ljYWxSaWdodChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkg
Y29uc3QKK3sKKyAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUp
ID8gbV9yaWdodCA6IG1fYm90dG9tOworfQorCitGcmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlv
bmFsTGF5b3V0Qm94RXh0ZW50OjpiZWZvcmUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0
Cit7CisgICAgc3dpdGNoICh3cml0aW5nTW9kZSkgeworICAgIGNhc2UgVG9wVG9Cb3R0b21Xcml0
aW5nTW9kZToKKyAgICAgICAgcmV0dXJuIG1fdG9wOworICAgIGNhc2UgQm90dG9tVG9Ub3BXcml0
aW5nTW9kZToKKyAgICAgICAgcmV0dXJuIG1fYm90dG9tOworICAgIGNhc2UgTGVmdFRvUmlnaHRX
cml0aW5nTW9kZToKKyAgICAgICAgcmV0dXJuIG1fbGVmdDsKKyAgICBjYXNlIFJpZ2h0VG9MZWZ0
V3JpdGluZ01vZGU6CisgICAgICAgIHJldHVybiBtX3JpZ2h0OworICAgIH0KKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbV90b3A7Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRV
bml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmFmdGVyKFdyaXRpbmdNb2RlIHdyaXRpbmdN
b2RlKSBjb25zdAoreworICAgIHN3aXRjaCAod3JpdGluZ01vZGUpIHsKKyAgICBjYXNlIFRvcFRv
Qm90dG9tV3JpdGluZ01vZGU6CisgICAgICAgIHJldHVybiBtX2JvdHRvbTsKKyAgICBjYXNlIEJv
dHRvbVRvVG9wV3JpdGluZ01vZGU6CisgICAgICAgIHJldHVybiBtX3RvcDsKKyAgICBjYXNlIExl
ZnRUb1JpZ2h0V3JpdGluZ01vZGU6CisgICAgICAgIHJldHVybiBtX3JpZ2h0OworICAgIGNhc2Ug
UmlnaHRUb0xlZnRXcml0aW5nTW9kZToKKyAgICAgICAgcmV0dXJuIG1fbGVmdDsKKyAgICB9Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG1fYm90dG9tOworfQorCitGcmFj
dGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzdGFydChXcml0aW5n
TW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0Cit7CisgICAg
aWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkKKyAgICAgICAgcmV0dXJu
IGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSA/IG1fbGVmdCA6IG1fcmlnaHQ7Cisg
ICAgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSA/IG1fdG9wIDogbV9i
b3R0b207Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRl
bnQ6OmVuZChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24p
IGNvbnN0Cit7CisgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkK
KyAgICAgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSA/IG1fcmln
aHQgOiBtX2xlZnQ7CisgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9u
KSA/IG1fYm90dG9tIDogbV90b3A7Cit9CisKK3ZvaWQgRnJhY3Rpb25hbExheW91dEJveEV4dGVu
dDo6c2V0QmVmb3JlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCB2YWx1ZSkKK3sKKyAgICBzd2l0Y2ggKHdyaXRpbmdNb2RlKSB7CisgICAgY2FzZSBUb3BUb0Jv
dHRvbVdyaXRpbmdNb2RlOgorICAgICAgICBtX3RvcCA9IHZhbHVlOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEJvdHRvbVRvVG9wV3JpdGluZ01vZGU6CisgICAgICAgIG1fYm90dG9tID0gdmFs
dWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGVmdFRvUmlnaHRXcml0aW5nTW9kZToKKyAg
ICAgICAgbV9sZWZ0ID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmlnaHRUb0xl
ZnRXcml0aW5nTW9kZToKKyAgICAgICAgbV9yaWdodCA9IHZhbHVlOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgbV90
b3AgPSB2YWx1ZTsKKyAgICB9Cit9CisKK3ZvaWQgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6
c2V0QWZ0ZXIoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHZh
bHVlKQoreworICAgIHN3aXRjaCAod3JpdGluZ01vZGUpIHsKKyAgICBjYXNlIFRvcFRvQm90dG9t
V3JpdGluZ01vZGU6CisgICAgICAgIG1fYm90dG9tID0gdmFsdWU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQm90dG9tVG9Ub3BXcml0aW5nTW9kZToKKyAgICAgICAgbV90b3AgPSB2YWx1ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMZWZ0VG9SaWdodFdyaXRpbmdNb2RlOgorICAgICAg
ICBtX3JpZ2h0ID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmlnaHRUb0xlZnRX
cml0aW5nTW9kZToKKyAgICAgICAgbV9sZWZ0ID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBtX2JvdHRv
bSA9IHZhbHVlOworICAgIH0KK30KKwordm9pZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Ojpz
ZXRTdGFydChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24s
IEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKQoreworICAgIGlmIChpc0hvcml6b250YWxXcml0
aW5nTW9kZSh3cml0aW5nTW9kZSkpIHsKKyAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oZGlyZWN0aW9uKSkKKyAgICAgICAgICAgIG1fbGVmdCA9IHZhbHVlOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX3JpZ2h0ID0gdmFsdWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYg
KGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSkKKyAgICAgICAgICAgIG1fdG9wID0g
dmFsdWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYm90dG9tID0gdmFsdWU7CisgICAg
fQorfQorCit2b2lkIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OnNldEVuZChXcml0aW5nTW9k
ZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIEZyYWN0aW9uYWxMYXlvdXRV
bml0IHZhbHVlKQoreworICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9k
ZSkpIHsKKyAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSkKKyAg
ICAgICAgICAgIG1fcmlnaHQgPSB2YWx1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9s
ZWZ0ID0gdmFsdWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oZGlyZWN0aW9uKSkKKyAgICAgICAgICAgIG1fYm90dG9tID0gdmFsdWU7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1fdG9wID0gdmFsdWU7CisgICAgfQorfQorCitGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6bXV0YWJsZUxvZ2ljYWxMZWZ0
KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQoreworICAgIHJldHVybiBpc0hvcml6b250YWxXcml0
aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX2xlZnQgOiBtX3RvcDsKK30KKworRnJhY3Rpb25hbExh
eW91dFVuaXQmIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6Om11dGFibGVMb2dpY2FsUmlnaHQo
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCit7CisgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fcmlnaHQgOiBtX2JvdHRvbTsKK30KKworRnJhY3Rpb25h
bExheW91dFVuaXQmIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6Om11dGFibGVCZWZvcmUoV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUpCit7CisgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKHdyaXRpbmdNb2RlKSA/IChpc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSh3cml0aW5nTW9k
ZSkgPyBtX2JvdHRvbSA6IG1fdG9wKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChpc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSh3cml0aW5nTW9k
ZSkgPyBtX3JpZ2h0OiBtX2xlZnQpOworfQorCitGcmFjdGlvbmFsTGF5b3V0VW5pdCYgRnJhY3Rp
b25hbExheW91dEJveEV4dGVudDo6bXV0YWJsZUFmdGVyKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2Rl
KQoreworICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyAo
aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV90b3AgOiBtX2JvdHRv
bSkgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9sZWZ0OiBtX3JpZ2h0
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRCb3hFeHRlbnQuY3BwCShyZXZpc2lvbiAx
MzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRCb3hFeHRl
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwzMSArMjksMzEgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oIgorI2lu
Y2x1ZGUgIkxheW91dEJveEV4dGVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZyYWN0
aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmxvZ2ljYWxUb3AoV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0CitMYXlvdXRVbml0IExheW91dEJveEV4dGVudDo6
bG9naWNhbFRvcChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QKIHsKICAgICByZXR1cm4g
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV90b3AgOiBtX2xlZnQ7CiB9
CiAKLUZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmxvZ2lj
YWxCb3R0b20oV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0CitMYXlvdXRVbml0IExheW91
dEJveEV4dGVudDo6bG9naWNhbEJvdHRvbShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QK
IHsKICAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9i
b3R0b20gOiBtX3JpZ2h0OwogfQogCi1GcmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5
b3V0Qm94RXh0ZW50Ojpsb2dpY2FsTGVmdChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QK
K0xheW91dFVuaXQgTGF5b3V0Qm94RXh0ZW50Ojpsb2dpY2FsTGVmdChXcml0aW5nTW9kZSB3cml0
aW5nTW9kZSkgY29uc3QKIHsKICAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3Jp
dGluZ01vZGUpID8gbV9sZWZ0IDogbV90b3A7CiB9CiAKLUZyYWN0aW9uYWxMYXlvdXRVbml0IEZy
YWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmxvZ2ljYWxSaWdodChXcml0aW5nTW9kZSB3cml0aW5n
TW9kZSkgY29uc3QKK0xheW91dFVuaXQgTGF5b3V0Qm94RXh0ZW50Ojpsb2dpY2FsUmlnaHQoV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fcmlnaHQgOiBtX2JvdHRvbTsKIH0KIAotRnJhY3Rp
b25hbExheW91dFVuaXQgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6YmVmb3JlKFdyaXRpbmdN
b2RlIHdyaXRpbmdNb2RlKSBjb25zdAorTGF5b3V0VW5pdCBMYXlvdXRCb3hFeHRlbnQ6OmJlZm9y
ZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QKIHsKICAgICBzd2l0Y2ggKHdyaXRpbmdN
b2RlKSB7CiAgICAgY2FzZSBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlOgpAQCAtNjksNyArNjksNyBA
QCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94CiAgICAgcmV0dXJuIG1f
dG9wOwogfQogCi1GcmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50
OjphZnRlcihXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QKK0xheW91dFVuaXQgTGF5b3V0
Qm94RXh0ZW50OjphZnRlcihXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QKIHsKICAgICBz
d2l0Y2ggKHdyaXRpbmdNb2RlKSB7CiAgICAgY2FzZSBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlOgpA
QCAtODUsMjEgKzg1LDIxIEBAIEZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRC
b3gKICAgICByZXR1cm4gbV9ib3R0b207CiB9CiAKLUZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0
aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OnN0YXJ0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbikgY29uc3QKK0xheW91dFVuaXQgTGF5b3V0Qm94RXh0ZW50Ojpz
dGFydChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pIGNv
bnN0CiB7CiAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkKICAg
ICAgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSA/IG1fbGVmdCA6
IG1fcmlnaHQ7CiAgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSA/
IG1fdG9wIDogbV9ib3R0b207CiB9CiAKLUZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxM
YXlvdXRCb3hFeHRlbnQ6OmVuZChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlv
biBkaXJlY3Rpb24pIGNvbnN0CitMYXlvdXRVbml0IExheW91dEJveEV4dGVudDo6ZW5kKFdyaXRp
bmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikgY29uc3QKIHsKICAg
ICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKQogICAgICAgICByZXR1
cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24pID8gbV9yaWdodCA6IG1fbGVmdDsK
ICAgICByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24pID8gbV9ib3R0b20g
OiBtX3RvcDsKIH0KIAotdm9pZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzZXRCZWZvcmUo
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKQordm9p
ZCBMYXlvdXRCb3hFeHRlbnQ6OnNldEJlZm9yZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgTGF5
b3V0VW5pdCB2YWx1ZSkKIHsKICAgICBzd2l0Y2ggKHdyaXRpbmdNb2RlKSB7CiAgICAgY2FzZSBU
b3BUb0JvdHRvbVdyaXRpbmdNb2RlOgpAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgRnJhY3Rpb25h
bExheW91dEJveEV4dGVudDo6c2V0QmVmb3IKICAgICB9CiB9CiAKLXZvaWQgRnJhY3Rpb25hbExh
eW91dEJveEV4dGVudDo6c2V0QWZ0ZXIoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIEZyYWN0aW9u
YWxMYXlvdXRVbml0IHZhbHVlKQordm9pZCBMYXlvdXRCb3hFeHRlbnQ6OnNldEFmdGVyKFdyaXRp
bmdNb2RlIHdyaXRpbmdNb2RlLCBMYXlvdXRVbml0IHZhbHVlKQogewogICAgIHN3aXRjaCAod3Jp
dGluZ01vZGUpIHsKICAgICBjYXNlIFRvcFRvQm90dG9tV3JpdGluZ01vZGU6CkBAIC0xNDEsNyAr
MTQxLDcgQEAgdm9pZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzZXRBZnRlcgogICAgIH0K
IH0KIAotdm9pZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzZXRTdGFydChXcml0aW5nTW9k
ZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIEZyYWN0aW9uYWxMYXlvdXRV
bml0IHZhbHVlKQordm9pZCBMYXlvdXRCb3hFeHRlbnQ6OnNldFN0YXJ0KFdyaXRpbmdNb2RlIHdy
aXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgTGF5b3V0VW5pdCB2YWx1ZSkKIHsK
ICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKSB7CiAgICAgICAg
IGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKGRpcmVjdGlvbikpCkBAIC0xNTYsNyArMTU2LDcg
QEAgdm9pZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzZXRTdGFydAogICAgIH0KIH0KIAot
dm9pZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzZXRFbmQoV3JpdGluZ01vZGUgd3JpdGlu
Z01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCB2YWx1
ZSkKK3ZvaWQgTGF5b3V0Qm94RXh0ZW50OjpzZXRFbmQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUs
IFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBMYXlvdXRVbml0IHZhbHVlKQogewogICAgIGlmIChp
c0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpIHsKICAgICAgICAgaWYgKGlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSkKQEAgLTE3MSwyMyArMTcxLDIzIEBAIHZvaWQg
RnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6c2V0RW5kKFcKICAgICB9CiB9CiAKLUZyYWN0aW9u
YWxMYXlvdXRVbml0JiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjptdXRhYmxlTG9naWNhbExl
ZnQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCitMYXlvdXRVbml0JiBMYXlvdXRCb3hFeHRlbnQ6
Om11dGFibGVMb2dpY2FsTGVmdChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKIHsKICAgICByZXR1
cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9sZWZ0IDogbV90b3A7
CiB9CiAKLUZyYWN0aW9uYWxMYXlvdXRVbml0JiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Ojpt
dXRhYmxlTG9naWNhbFJpZ2h0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQorTGF5b3V0VW5pdCYg
TGF5b3V0Qm94RXh0ZW50OjptdXRhYmxlTG9naWNhbFJpZ2h0KFdyaXRpbmdNb2RlIHdyaXRpbmdN
b2RlKQogewogICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkg
PyBtX3JpZ2h0IDogbV9ib3R0b207CiB9CiAKLUZyYWN0aW9uYWxMYXlvdXRVbml0JiBGcmFjdGlv
bmFsTGF5b3V0Qm94RXh0ZW50OjptdXRhYmxlQmVmb3JlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2Rl
KQorTGF5b3V0VW5pdCYgTGF5b3V0Qm94RXh0ZW50OjptdXRhYmxlQmVmb3JlKFdyaXRpbmdNb2Rl
IHdyaXRpbmdNb2RlKQogewogICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0
aW5nTW9kZSkgPyAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9i
b3R0b20gOiBtX3RvcCkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9y
aWdodDogbV9sZWZ0KTsKIH0KIAotRnJhY3Rpb25hbExheW91dFVuaXQmIEZyYWN0aW9uYWxMYXlv
dXRCb3hFeHRlbnQ6Om11dGFibGVBZnRlcihXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKK0xheW91
dFVuaXQmIExheW91dEJveEV4dGVudDo6bXV0YWJsZUFmdGVyKFdyaXRpbmdNb2RlIHdyaXRpbmdN
b2RlKQogewogICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkg
PyAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV90b3AgOiBtX2Jv
dHRvbSkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9sZWZ0OiBtX3Jp
Z2h0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dEJveEV4
dGVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xh
eW91dEJveEV4dGVudC5oCShyZXZpc2lvbiAxMzM1MTcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuaDoxMzM1MTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRCb3hFeHRlbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRnJhY3Rpb25hbExheW91dEJveEV4dGVu
dF9oCisjZGVmaW5lIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnRfaAorCisjaW5jbHVkZSAiRnJh
Y3Rpb25hbExheW91dFVuaXQuaCIKKyNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCisjaW5jbHVk
ZSAiV3JpdGluZ01vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGcmFjdGlv
bmFsTGF5b3V0Qm94RXh0ZW50IHsKK3B1YmxpYzoKKyAgICBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0
ZW50KCkgOiBtX3RvcCgwKSwgbV9yaWdodCgwKSwgbV9ib3R0b20oMCksIG1fbGVmdCgwKSB7IH0K
KyAgICBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50KEZyYWN0aW9uYWxMYXlvdXRVbml0IHRvcCwg
RnJhY3Rpb25hbExheW91dFVuaXQgcmlnaHQsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGJvdHRvbSwg
RnJhY3Rpb25hbExheW91dFVuaXQgbGVmdCkKKyAgICAgICAgOiBtX3RvcCh0b3ApLCBtX3JpZ2h0
KHJpZ2h0KSwgbV9ib3R0b20oYm90dG9tKSwgbV9sZWZ0KGxlZnQpIHsgfQorCisgICAgaW5saW5l
IEZyYWN0aW9uYWxMYXlvdXRVbml0IHRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wOyB9CisgICAg
aW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yaWdo
dDsgfQorICAgIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBib3R0b20oKSBjb25zdCB7IHJl
dHVybiBtX2JvdHRvbTsgfQorICAgIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBsZWZ0KCkg
Y29uc3QgeyByZXR1cm4gbV9sZWZ0OyB9CisKKyAgICBpbmxpbmUgdm9pZCBzZXRUb3AoRnJhY3Rp
b25hbExheW91dFVuaXQgdmFsdWUpIHsgbV90b3AgPSB2YWx1ZTsgfQorICAgIGlubGluZSB2b2lk
IHNldFJpZ2h0KEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKSB7IG1fcmlnaHQgPSB2YWx1ZTsg
fQorICAgIGlubGluZSB2b2lkIHNldEJvdHRvbShGcmFjdGlvbmFsTGF5b3V0VW5pdCB2YWx1ZSkg
eyBtX2JvdHRvbSA9IHZhbHVlOyB9CisgICAgaW5saW5lIHZvaWQgc2V0TGVmdChGcmFjdGlvbmFs
TGF5b3V0VW5pdCB2YWx1ZSkgeyBtX2xlZnQgPSB2YWx1ZTsgfQorCisgICAgRnJhY3Rpb25hbExh
eW91dFVuaXQgbG9naWNhbFRvcChXcml0aW5nTW9kZSkgY29uc3Q7CisgICAgRnJhY3Rpb25hbExh
eW91dFVuaXQgbG9naWNhbEJvdHRvbShXcml0aW5nTW9kZSkgY29uc3Q7CisgICAgRnJhY3Rpb25h
bExheW91dFVuaXQgbG9naWNhbExlZnQoV3JpdGluZ01vZGUpIGNvbnN0OworICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IGxvZ2ljYWxSaWdodChXcml0aW5nTW9kZSkgY29uc3Q7CisKKyAgICBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBiZWZvcmUoV3JpdGluZ01vZGUpIGNvbnN0OworICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IGFmdGVyKFdyaXRpbmdNb2RlKSBjb25zdDsKKyAgICBGcmFjdGlvbmFsTGF5
b3V0VW5pdCBzdGFydChXcml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbikgY29uc3Q7CisgICAgRnJh
Y3Rpb25hbExheW91dFVuaXQgZW5kKFdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uKSBjb25zdDsK
KworICAgIHZvaWQgc2V0QmVmb3JlKFdyaXRpbmdNb2RlLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCk7
CisgICAgdm9pZCBzZXRBZnRlcihXcml0aW5nTW9kZSwgRnJhY3Rpb25hbExheW91dFVuaXQpOwor
ICAgIHZvaWQgc2V0U3RhcnQoV3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24sIEZyYWN0aW9uYWxM
YXlvdXRVbml0KTsKKyAgICB2b2lkIHNldEVuZChXcml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiwg
RnJhY3Rpb25hbExheW91dFVuaXQpOworCisgICAgRnJhY3Rpb25hbExheW91dFVuaXQmIG11dGFi
bGVMb2dpY2FsTGVmdChXcml0aW5nTW9kZSk7CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQmIG11
dGFibGVMb2dpY2FsUmlnaHQoV3JpdGluZ01vZGUpOworCisgICAgRnJhY3Rpb25hbExheW91dFVu
aXQmIG11dGFibGVCZWZvcmUoV3JpdGluZ01vZGUpOworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBtdXRhYmxlQWZ0ZXIoV3JpdGluZ01vZGUpOworCitwcml2YXRlOgorICAgIEZyYWN0aW9uYWxM
YXlvdXRVbml0IG1fdG9wOworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1fcmlnaHQ7CisgICAg
RnJhY3Rpb25hbExheW91dFVuaXQgbV9ib3R0b207CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQg
bV9sZWZ0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRnJhY3Rp
b25hbExheW91dEJveEV4dGVudF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9MYXlvdXRCb3hFeHRlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9MYXlvdXRCb3hFeHRlbnQuaAkocmV2aXNpb24gMTMzNTE3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDU5ICsyOCw1OSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVm
IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnRfaAotI2RlZmluZSBGcmFjdGlvbmFsTGF5b3V0Qm94
RXh0ZW50X2gKKyNpZm5kZWYgTGF5b3V0Qm94RXh0ZW50X2gKKyNkZWZpbmUgTGF5b3V0Qm94RXh0
ZW50X2gKIAotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRVbml0LmgiCisjaW5jbHVkZSAiTGF5
b3V0VW5pdC5oIgogI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKICNpbmNsdWRlICJXcml0aW5n
TW9kZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRC
b3hFeHRlbnQgeworY2xhc3MgTGF5b3V0Qm94RXh0ZW50IHsKIHB1YmxpYzoKLSAgICBGcmFjdGlv
bmFsTGF5b3V0Qm94RXh0ZW50KCkgOiBtX3RvcCgwKSwgbV9yaWdodCgwKSwgbV9ib3R0b20oMCks
IG1fbGVmdCgwKSB7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50KEZyYWN0aW9uYWxM
YXlvdXRVbml0IHRvcCwgRnJhY3Rpb25hbExheW91dFVuaXQgcmlnaHQsIEZyYWN0aW9uYWxMYXlv
dXRVbml0IGJvdHRvbSwgRnJhY3Rpb25hbExheW91dFVuaXQgbGVmdCkKKyAgICBMYXlvdXRCb3hF
eHRlbnQoKSA6IG1fdG9wKDApLCBtX3JpZ2h0KDApLCBtX2JvdHRvbSgwKSwgbV9sZWZ0KDApIHsg
fQorICAgIExheW91dEJveEV4dGVudChMYXlvdXRVbml0IHRvcCwgTGF5b3V0VW5pdCByaWdodCwg
TGF5b3V0VW5pdCBib3R0b20sIExheW91dFVuaXQgbGVmdCkKICAgICAgICAgOiBtX3RvcCh0b3Ap
LCBtX3JpZ2h0KHJpZ2h0KSwgbV9ib3R0b20oYm90dG9tKSwgbV9sZWZ0KGxlZnQpIHsgfQogCi0g
ICAgaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IHRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9w
OyB9Ci0gICAgaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJpZ2h0KCkgY29uc3QgeyByZXR1
cm4gbV9yaWdodDsgfQotICAgIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBib3R0b20oKSBj
b25zdCB7IHJldHVybiBtX2JvdHRvbTsgfQotICAgIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBsZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0OyB9Ci0KLSAgICBpbmxpbmUgdm9pZCBzZXRU
b3AoRnJhY3Rpb25hbExheW91dFVuaXQgdmFsdWUpIHsgbV90b3AgPSB2YWx1ZTsgfQotICAgIGlu
bGluZSB2b2lkIHNldFJpZ2h0KEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKSB7IG1fcmlnaHQg
PSB2YWx1ZTsgfQotICAgIGlubGluZSB2b2lkIHNldEJvdHRvbShGcmFjdGlvbmFsTGF5b3V0VW5p
dCB2YWx1ZSkgeyBtX2JvdHRvbSA9IHZhbHVlOyB9Ci0gICAgaW5saW5lIHZvaWQgc2V0TGVmdChG
cmFjdGlvbmFsTGF5b3V0VW5pdCB2YWx1ZSkgeyBtX2xlZnQgPSB2YWx1ZTsgfQotCi0gICAgRnJh
Y3Rpb25hbExheW91dFVuaXQgbG9naWNhbFRvcChXcml0aW5nTW9kZSkgY29uc3Q7Ci0gICAgRnJh
Y3Rpb25hbExheW91dFVuaXQgbG9naWNhbEJvdHRvbShXcml0aW5nTW9kZSkgY29uc3Q7Ci0gICAg
RnJhY3Rpb25hbExheW91dFVuaXQgbG9naWNhbExlZnQoV3JpdGluZ01vZGUpIGNvbnN0OwotICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0IGxvZ2ljYWxSaWdodChXcml0aW5nTW9kZSkgY29uc3Q7Ci0K
LSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBiZWZvcmUoV3JpdGluZ01vZGUpIGNvbnN0OwotICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0IGFmdGVyKFdyaXRpbmdNb2RlKSBjb25zdDsKLSAgICBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBzdGFydChXcml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbikgY29uc3Q7
Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgZW5kKFdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9u
KSBjb25zdDsKLQotICAgIHZvaWQgc2V0QmVmb3JlKFdyaXRpbmdNb2RlLCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCk7Ci0gICAgdm9pZCBzZXRBZnRlcihXcml0aW5nTW9kZSwgRnJhY3Rpb25hbExheW91
dFVuaXQpOwotICAgIHZvaWQgc2V0U3RhcnQoV3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24sIEZy
YWN0aW9uYWxMYXlvdXRVbml0KTsKLSAgICB2b2lkIHNldEVuZChXcml0aW5nTW9kZSwgVGV4dERp
cmVjdGlvbiwgRnJhY3Rpb25hbExheW91dFVuaXQpOworICAgIGlubGluZSBMYXlvdXRVbml0IHRv
cCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wOyB9CisgICAgaW5saW5lIExheW91dFVuaXQgcmlnaHQo
KSBjb25zdCB7IHJldHVybiBtX3JpZ2h0OyB9CisgICAgaW5saW5lIExheW91dFVuaXQgYm90dG9t
KCkgY29uc3QgeyByZXR1cm4gbV9ib3R0b207IH0KKyAgICBpbmxpbmUgTGF5b3V0VW5pdCBsZWZ0
KCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0OyB9CisKKyAgICBpbmxpbmUgdm9pZCBzZXRUb3AoTGF5
b3V0VW5pdCB2YWx1ZSkgeyBtX3RvcCA9IHZhbHVlOyB9CisgICAgaW5saW5lIHZvaWQgc2V0Umln
aHQoTGF5b3V0VW5pdCB2YWx1ZSkgeyBtX3JpZ2h0ID0gdmFsdWU7IH0KKyAgICBpbmxpbmUgdm9p
ZCBzZXRCb3R0b20oTGF5b3V0VW5pdCB2YWx1ZSkgeyBtX2JvdHRvbSA9IHZhbHVlOyB9CisgICAg
aW5saW5lIHZvaWQgc2V0TGVmdChMYXlvdXRVbml0IHZhbHVlKSB7IG1fbGVmdCA9IHZhbHVlOyB9
CisKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3AoV3JpdGluZ01vZGUpIGNvbnN0OworICAgIExh
eW91dFVuaXQgbG9naWNhbEJvdHRvbShXcml0aW5nTW9kZSkgY29uc3Q7CisgICAgTGF5b3V0VW5p
dCBsb2dpY2FsTGVmdChXcml0aW5nTW9kZSkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
UmlnaHQoV3JpdGluZ01vZGUpIGNvbnN0OworCisgICAgTGF5b3V0VW5pdCBiZWZvcmUoV3JpdGlu
Z01vZGUpIGNvbnN0OworICAgIExheW91dFVuaXQgYWZ0ZXIoV3JpdGluZ01vZGUpIGNvbnN0Owor
ICAgIExheW91dFVuaXQgc3RhcnQoV3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24pIGNvbnN0Owor
ICAgIExheW91dFVuaXQgZW5kKFdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uKSBjb25zdDsKKwor
ICAgIHZvaWQgc2V0QmVmb3JlKFdyaXRpbmdNb2RlLCBMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNl
dEFmdGVyKFdyaXRpbmdNb2RlLCBMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNldFN0YXJ0KFdyaXRp
bmdNb2RlLCBUZXh0RGlyZWN0aW9uLCBMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNldEVuZChXcml0
aW5nTW9kZSwgVGV4dERpcmVjdGlvbiwgTGF5b3V0VW5pdCk7CiAKLSAgICBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgbXV0YWJsZUxvZ2ljYWxMZWZ0KFdyaXRpbmdNb2RlKTsKLSAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgbXV0YWJsZUxvZ2ljYWxSaWdodChXcml0aW5nTW9kZSk7CisgICAgTGF5b3V0
VW5pdCYgbXV0YWJsZUxvZ2ljYWxMZWZ0KFdyaXRpbmdNb2RlKTsKKyAgICBMYXlvdXRVbml0JiBt
dXRhYmxlTG9naWNhbFJpZ2h0KFdyaXRpbmdNb2RlKTsKIAotICAgIEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBtdXRhYmxlQmVmb3JlKFdyaXRpbmdNb2RlKTsKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgbXV0YWJsZUFmdGVyKFdyaXRpbmdNb2RlKTsKKyAgICBMYXlvdXRVbml0JiBtdXRhYmxlQmVm
b3JlKFdyaXRpbmdNb2RlKTsKKyAgICBMYXlvdXRVbml0JiBtdXRhYmxlQWZ0ZXIoV3JpdGluZ01v
ZGUpOwogCiBwcml2YXRlOgotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1fdG9wOwotICAgIEZy
YWN0aW9uYWxMYXlvdXRVbml0IG1fcmlnaHQ7Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgbV9i
b3R0b207Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgbV9sZWZ0OworICAgIExheW91dFVuaXQg
bV90b3A7CisgICAgTGF5b3V0VW5pdCBtX3JpZ2h0OworICAgIExheW91dFVuaXQgbV9ib3R0b207
CisgICAgTGF5b3V0VW5pdCBtX2xlZnQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
LSNlbmRpZiAvLyBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50X2gKKyNlbmRpZiAvLyBMYXlvdXRC
b3hFeHRlbnRfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0
UG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9M
YXlvdXRQb2ludC5oCShyZXZpc2lvbiAxMzM1MTcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRQb2ludC5oOjEzMzUxNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBGcmFjdGlvbmFsTGF5b3V0UG9pbnRfaAorI2RlZmluZSBG
cmFjdGlvbmFsTGF5b3V0UG9pbnRfaAorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1
ZGUgIkZyYWN0aW9uYWxMYXlvdXRTaXplLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
KworI2lmIFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgPHFnbG9iYWwuaD4KK1FUX0JFR0lOX05BTUVT
UEFDRQorY2xhc3MgUVBvaW50OworY2xhc3MgUVBvaW50RjsKK1FUX0VORF9OQU1FU1BBQ0UKKyNl
bmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZyYWN0aW9uYWxMYXlvdXRQb2lu
dCB7CitwdWJsaWM6CisgICAgRnJhY3Rpb25hbExheW91dFBvaW50KCkgOiBtX3goMCksIG1feSgw
KSB7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoRnJhY3Rpb25hbExheW91dFVuaXQgeCwg
RnJhY3Rpb25hbExheW91dFVuaXQgeSkgOiBtX3goeCksIG1feSh5KSB7IH0KKyAgICBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KSA6IG1feChwb2ludC54KCkpLCBt
X3kocG9pbnQueSgpKSB7IH0KKyAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29u
c3QgRmxvYXRQb2ludCYgc2l6ZSkgOiBtX3goc2l6ZS54KCkpLCBtX3koc2l6ZS55KCkpIHsgfQor
ICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRQb2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0
U2l6ZSYgc2l6ZSkgOiBtX3goc2l6ZS53aWR0aCgpKSwgbV95KHNpemUuaGVpZ2h0KCkpIHsgfQor
CisgICAgc3RhdGljIEZyYWN0aW9uYWxMYXlvdXRQb2ludCB6ZXJvKCkgeyByZXR1cm4gRnJhY3Rp
b25hbExheW91dFBvaW50KCk7IH0KKworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHgoKSBjb25z
dCB7IHJldHVybiBtX3g7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB5KCkgY29uc3QgeyBy
ZXR1cm4gbV95OyB9CisKKyAgICB2b2lkIHNldFgoRnJhY3Rpb25hbExheW91dFVuaXQgeCkgeyBt
X3ggPSB4OyB9CisgICAgdm9pZCBzZXRZKEZyYWN0aW9uYWxMYXlvdXRVbml0IHkpIHsgbV95ID0g
eTsgfQorCisgICAgdm9pZCBtb3ZlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzKSB7IG1v
dmUocy53aWR0aCgpLCBzLmhlaWdodCgpKTsgfSAKKyAgICB2b2lkIG1vdmVCeShjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQmIG9mZnNldCkgeyBtb3ZlKG9mZnNldC54KCksIG9mZnNldC55KCkp
OyB9CisgICAgdm9pZCBtb3ZlKEZyYWN0aW9uYWxMYXlvdXRVbml0IGR4LCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCBkeSkgeyBtX3ggKz0gZHg7IG1feSArPSBkeTsgfQorICAgIHZvaWQgc2NhbGUoZmxv
YXQgc3gsIGZsb2F0IHN5KQorICAgIHsKKyAgICAgICAgbV94ICo9IHN4OworICAgICAgICBtX3kg
Kj0gc3k7CisgICAgfQorICAgIAorICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBleHBhbmRlZFRv
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KHN0ZDo6bWF4KG1feCwgb3RoZXIubV94KSwg
c3RkOjptYXgobV95LCBvdGhlci5tX3kpKTsKKyAgICB9CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQgc2hydW5rVG8oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoc3RkOjptaW4obV94
LCBvdGhlci5tX3gpLCBzdGQ6Om1pbihtX3ksIG90aGVyLm1feSkpOworICAgIH0KKworICAgIHZv
aWQgY2xhbXBOZWdhdGl2ZVRvWmVybygpCisgICAgeworICAgICAgICAqdGhpcyA9IGV4cGFuZGVk
VG8oemVybygpKTsKKyAgICB9CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgdHJhbnNwb3Nl
ZFBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9p
bnQobV95LCBtX3gpOworICAgIH0KKworI2lmIFBMQVRGT1JNKFFUKQorICAgIGV4cGxpY2l0IEZy
YWN0aW9uYWxMYXlvdXRQb2ludChjb25zdCBRUG9pbnQmKTsKKyAgICBleHBsaWNpdCBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQoY29uc3QgUVBvaW50RiYpOworICAgIG9wZXJhdG9yIFFQb2ludEYoKSBj
b25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1feCwg
bV95OworfTsKKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgb3BlcmF0b3IrPShGcmFj
dGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQorewor
ICAgIGEubW92ZShiLndpZHRoKCksIGIuaGVpZ2h0KCkpOworICAgIHJldHVybiBhOworfQorCitp
bmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50JiBvcGVyYXRvci09KEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCit7CisgICAgYS5tb3ZlKC1i
LndpZHRoKCksIC1iLmhlaWdodCgpKTsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEZyYWN0
aW9uYWxMYXlvdXRQb2ludCBvcGVyYXRvcisoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25h
bExheW91dFBvaW50KGEueCgpICsgYi53aWR0aCgpLCBhLnkoKSArIGIuaGVpZ2h0KCkpOworfQor
CitpbmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50IG9wZXJhdG9yKyhjb25zdCBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYikKK3sKKyAgICBy
ZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KGEueCgpICsgYi54KCksIGEueSgpICsgYi55KCkp
OworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFNpemUgb3BlcmF0b3ItKGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBiKQorewor
ICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShhLngoKSAtIGIueCgpLCBhLnkoKSAtIGIu
eSgpKTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBvcGVyYXRvci0oY29uc3Qg
RnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikK
K3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KGEueCgpIC0gYi53aWR0aCgpLCBh
LnkoKSAtIGIuaGVpZ2h0KCkpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50IG9w
ZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50KQoreworICAgIHJldHVy
biBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoLXBvaW50LngoKSwgLXBvaW50LnkoKSk7Cit9CisKK2lu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGIpCit7CisgICAgcmV0dXJuIGEueCgpID09IGIueCgp
ICYmIGEueSgpID09IGIueSgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBiKQor
eworICAgIHJldHVybiBhLngoKSAhPSBiLngoKSB8fCBhLnkoKSAhPSBiLnkoKTsKK30KKworaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCB0b1BvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRT
aXplJiBzaXplKQoreworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoc2l6ZS53aWR0
aCgpLCBzaXplLmhlaWdodCgpKTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplIHRv
U2l6ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEpCit7CisgICAgcmV0dXJuIEZyYWN0
aW9uYWxMYXlvdXRTaXplKGEueCgpLCBhLnkoKSk7Cit9CisKK2lubGluZSBJbnRQb2ludCBmbG9v
cmVkSW50UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBwb2ludCkKK3sKKyAgICBy
ZXR1cm4gSW50UG9pbnQocG9pbnQueCgpLmZsb29yKCksIHBvaW50LnkoKS5mbG9vcigpKTsKK30K
KworaW5saW5lIEludFBvaW50IHJvdW5kZWRJbnRQb2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQmIHBvaW50KQoreworICAgIHJldHVybiBJbnRQb2ludChwb2ludC54KCkucm91bmQoKSwg
cG9pbnQueSgpLnJvdW5kKCkpOworfQorCitpbmxpbmUgSW50UG9pbnQgcm91bmRlZEludFBvaW50
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKQoreworICAgIHJldHVybiBJbnRQb2lu
dChzaXplLndpZHRoKCkucm91bmQoKSwgc2l6ZS5oZWlnaHQoKS5yb3VuZCgpKTsKK30KKworaW5s
aW5lIEludFBvaW50IGNlaWxlZEludFBvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYg
cG9pbnQpCit7CisgICAgcmV0dXJuIEludFBvaW50KHBvaW50LngoKS5jZWlsKCksIHBvaW50Lnko
KS5jZWlsKCkpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50IGZsb29yZWRGcmFj
dGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICByZXR1cm4gRnJh
Y3Rpb25hbExheW91dFBvaW50KEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpmcm9tRmxvYXRGbG9vcihw
LngoKSksIEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpmcm9tRmxvYXRGbG9vcihwLnkoKSkpOworfQor
CitpbmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50IGNlaWxlZEZyYWN0aW9uYWxMYXlvdXRQb2lu
dChjb25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9p
bnQoRnJhY3Rpb25hbExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwocC54KCkpLCBGcmFjdGlvbmFs
TGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChwLnkoKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBGcmFjdGlvbmFsTGF5b3V0UG9pbnRfaApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UG9pbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRQb2ludC5oCShyZXZpc2lvbiAx
MzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRQb2ludC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMSArMjgsMTEgQEAKICAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAotI2lmbmRlZiBGcmFjdGlvbmFsTGF5b3V0UG9pbnRfaAotI2RlZmluZSBGcmFjdGlvbmFsTGF5
b3V0UG9pbnRfaAorI2lmbmRlZiBMYXlvdXRQb2ludF9oCisjZGVmaW5lIExheW91dFBvaW50X2gK
IAogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0U2l6
ZS5oIgorI2luY2x1ZGUgIkxheW91dFNpemUuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgogCiAjaWYgUExBVEZPUk0oUVQpCkBAIC00NSwzOSArNDUsMzkgQEAgUVRfRU5EX05BTUVTUEFD
RQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRQb2ludCB7
CitjbGFzcyBMYXlvdXRQb2ludCB7CiBwdWJsaWM6Ci0gICAgRnJhY3Rpb25hbExheW91dFBvaW50
KCkgOiBtX3goMCksIG1feSgwKSB7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoRnJhY3Rp
b25hbExheW91dFVuaXQgeCwgRnJhY3Rpb25hbExheW91dFVuaXQgeSkgOiBtX3goeCksIG1feSh5
KSB7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KSA6
IG1feChwb2ludC54KCkpLCBtX3kocG9pbnQueSgpKSB7IH0KLSAgICBleHBsaWNpdCBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgc2l6ZSkgOiBtX3goc2l6ZS54KCkpLCBt
X3koc2l6ZS55KCkpIHsgfQotICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRQb2ludChjb25z
dCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkgOiBtX3goc2l6ZS53aWR0aCgpKSwgbV95KHNp
emUuaGVpZ2h0KCkpIHsgfQotCi0gICAgc3RhdGljIEZyYWN0aW9uYWxMYXlvdXRQb2ludCB6ZXJv
KCkgeyByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KCk7IH0KLQotICAgIEZyYWN0aW9uYWxM
YXlvdXRVbml0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0
VW5pdCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9Ci0KLSAgICB2b2lkIHNldFgoRnJhY3Rpb25h
bExheW91dFVuaXQgeCkgeyBtX3ggPSB4OyB9Ci0gICAgdm9pZCBzZXRZKEZyYWN0aW9uYWxMYXlv
dXRVbml0IHkpIHsgbV95ID0geTsgfQotCi0gICAgdm9pZCBtb3ZlKGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRTaXplJiBzKSB7IG1vdmUocy53aWR0aCgpLCBzLmhlaWdodCgpKTsgfSAKLSAgICB2b2lk
IG1vdmVCeShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIG9mZnNldCkgeyBtb3ZlKG9mZnNl
dC54KCksIG9mZnNldC55KCkpOyB9Ci0gICAgdm9pZCBtb3ZlKEZyYWN0aW9uYWxMYXlvdXRVbml0
IGR4LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeSkgeyBtX3ggKz0gZHg7IG1feSArPSBkeTsgfQor
ICAgIExheW91dFBvaW50KCkgOiBtX3goMCksIG1feSgwKSB7IH0KKyAgICBMYXlvdXRQb2ludChM
YXlvdXRVbml0IHgsIExheW91dFVuaXQgeSkgOiBtX3goeCksIG1feSh5KSB7IH0KKyAgICBMYXlv
dXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpIDogbV94KHBvaW50LngoKSksIG1feShwb2lu
dC55KCkpIHsgfQorICAgIGV4cGxpY2l0IExheW91dFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHNp
emUpIDogbV94KHNpemUueCgpKSwgbV95KHNpemUueSgpKSB7IH0KKyAgICBleHBsaWNpdCBMYXlv
dXRQb2ludChjb25zdCBMYXlvdXRTaXplJiBzaXplKSA6IG1feChzaXplLndpZHRoKCkpLCBtX3ko
c2l6ZS5oZWlnaHQoKSkgeyB9CisKKyAgICBzdGF0aWMgTGF5b3V0UG9pbnQgemVybygpIHsgcmV0
dXJuIExheW91dFBvaW50KCk7IH0KKworICAgIExheW91dFVuaXQgeCgpIGNvbnN0IHsgcmV0dXJu
IG1feDsgfQorICAgIExheW91dFVuaXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQorCisgICAg
dm9pZCBzZXRYKExheW91dFVuaXQgeCkgeyBtX3ggPSB4OyB9CisgICAgdm9pZCBzZXRZKExheW91
dFVuaXQgeSkgeyBtX3kgPSB5OyB9CisKKyAgICB2b2lkIG1vdmUoY29uc3QgTGF5b3V0U2l6ZSYg
cykgeyBtb3ZlKHMud2lkdGgoKSwgcy5oZWlnaHQoKSk7IH0gCisgICAgdm9pZCBtb3ZlQnkoY29u
c3QgTGF5b3V0UG9pbnQmIG9mZnNldCkgeyBtb3ZlKG9mZnNldC54KCksIG9mZnNldC55KCkpOyB9
CisgICAgdm9pZCBtb3ZlKExheW91dFVuaXQgZHgsIExheW91dFVuaXQgZHkpIHsgbV94ICs9IGR4
OyBtX3kgKz0gZHk7IH0KICAgICB2b2lkIHNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSkKICAgICB7
CiAgICAgICAgIG1feCAqPSBzeDsKICAgICAgICAgbV95ICo9IHN5OwogICAgIH0KICAgICAKLSAg
ICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgZXhwYW5kZWRUbyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQmIG90aGVyKSBjb25zdAorICAgIExheW91dFBvaW50IGV4cGFuZGVkVG8oY29uc3QgTGF5
b3V0UG9pbnQmIG90aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxM
YXlvdXRQb2ludChzdGQ6Om1heChtX3gsIG90aGVyLm1feCksIHN0ZDo6bWF4KG1feSwgb3RoZXIu
bV95KSk7CisgICAgICAgIHJldHVybiBMYXlvdXRQb2ludChzdGQ6Om1heChtX3gsIG90aGVyLm1f
eCksIHN0ZDo6bWF4KG1feSwgb3RoZXIubV95KSk7CiAgICAgfQogCi0gICAgRnJhY3Rpb25hbExh
eW91dFBvaW50IHNocnVua1RvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgb3RoZXIpIGNv
bnN0CisgICAgTGF5b3V0UG9pbnQgc2hydW5rVG8oY29uc3QgTGF5b3V0UG9pbnQmIG90aGVyKSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChzdGQ6Om1p
bihtX3gsIG90aGVyLm1feCksIHN0ZDo6bWluKG1feSwgb3RoZXIubV95KSk7CisgICAgICAgIHJl
dHVybiBMYXlvdXRQb2ludChzdGQ6Om1pbihtX3gsIG90aGVyLm1feCksIHN0ZDo6bWluKG1feSwg
b3RoZXIubV95KSk7CiAgICAgfQogCiAgICAgdm9pZCBjbGFtcE5lZ2F0aXZlVG9aZXJvKCkKQEAg
LTg1LDEwOCArODUsMTM3IEBAIHB1YmxpYzoKICAgICAgICAgKnRoaXMgPSBleHBhbmRlZFRvKHpl
cm8oKSk7CiAgICAgfQogCi0gICAgRnJhY3Rpb25hbExheW91dFBvaW50IHRyYW5zcG9zZWRQb2lu
dCgpIGNvbnN0CisgICAgTGF5b3V0UG9pbnQgdHJhbnNwb3NlZFBvaW50KCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQobV95LCBtX3gpOworICAgICAg
ICByZXR1cm4gTGF5b3V0UG9pbnQobV95LCBtX3gpOwogICAgIH0KIAogI2lmIFBMQVRGT1JNKFFU
KQotICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRQb2ludChjb25zdCBRUG9pbnQmKTsKLSAg
ICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgUVBvaW50RiYpOworICAgIGV4
cGxpY2l0IExheW91dFBvaW50KGNvbnN0IFFQb2ludCYpOworICAgIGV4cGxpY2l0IExheW91dFBv
aW50KGNvbnN0IFFQb2ludEYmKTsKICAgICBvcGVyYXRvciBRUG9pbnRGKCkgY29uc3Q7CiAjZW5k
aWYKIAogcHJpdmF0ZToKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtX3gsIG1feTsKKyAgICBM
YXlvdXRVbml0IG1feCwgbV95OwogfTsKIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCYg
b3BlcmF0b3IrPShGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRTaXplJiBiKQoraW5saW5lIExheW91dFBvaW50JiBvcGVyYXRvcis9KExheW91dFBvaW50JiBh
LCBjb25zdCBMYXlvdXRTaXplJiBiKQogewogICAgIGEubW92ZShiLndpZHRoKCksIGIuaGVpZ2h0
KCkpOwogICAgIHJldHVybiBhOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50JiBv
cGVyYXRvci09KEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91
dFNpemUmIGIpCitpbmxpbmUgTGF5b3V0UG9pbnQmIG9wZXJhdG9yLT0oTGF5b3V0UG9pbnQmIGEs
IGNvbnN0IExheW91dFNpemUmIGIpCiB7CiAgICAgYS5tb3ZlKC1iLndpZHRoKCksIC1iLmhlaWdo
dCgpKTsKICAgICByZXR1cm4gYTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBv
cGVyYXRvcisoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0U2l6ZSYgYikKK2lubGluZSBMYXlvdXRQb2ludCBvcGVyYXRvcisoY29uc3QgTGF5b3V0
UG9pbnQmIGEsIGNvbnN0IExheW91dFNpemUmIGIpCiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxM
YXlvdXRQb2ludChhLngoKSArIGIud2lkdGgoKSwgYS55KCkgKyBiLmhlaWdodCgpKTsKKyAgICBy
ZXR1cm4gTGF5b3V0UG9pbnQoYS54KCkgKyBiLndpZHRoKCksIGEueSgpICsgYi5oZWlnaHQoKSk7
CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgb3BlcmF0b3IrKGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBiKQoraW5s
aW5lIExheW91dFBvaW50IG9wZXJhdG9yKyhjb25zdCBMYXlvdXRQb2ludCYgYSwgY29uc3QgTGF5
b3V0UG9pbnQmIGIpCiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChhLngoKSAr
IGIueCgpLCBhLnkoKSArIGIueSgpKTsKKyAgICByZXR1cm4gTGF5b3V0UG9pbnQoYS54KCkgKyBi
LngoKSwgYS55KCkgKyBiLnkoKSk7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSBv
cGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQmIGIpCitpbmxpbmUgTGF5b3V0U2l6ZSBvcGVyYXRvci0oY29uc3QgTGF5b3V0
UG9pbnQmIGEsIGNvbnN0IExheW91dFBvaW50JiBiKQogewotICAgIHJldHVybiBGcmFjdGlvbmFs
TGF5b3V0U2l6ZShhLngoKSAtIGIueCgpLCBhLnkoKSAtIGIueSgpKTsKKyAgICByZXR1cm4gTGF5
b3V0U2l6ZShhLngoKSAtIGIueCgpLCBhLnkoKSAtIGIueSgpKTsKIH0KIAotaW5saW5lIEZyYWN0
aW9uYWxMYXlvdXRQb2ludCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK2lubGluZSBMYXlvdXRQb2ludCBvcGVy
YXRvci0oY29uc3QgTGF5b3V0UG9pbnQmIGEsIGNvbnN0IExheW91dFNpemUmIGIpCiB7Ci0gICAg
cmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChhLngoKSAtIGIud2lkdGgoKSwgYS55KCkgLSBi
LmhlaWdodCgpKTsKKyAgICByZXR1cm4gTGF5b3V0UG9pbnQoYS54KCkgLSBiLndpZHRoKCksIGEu
eSgpIC0gYi5oZWlnaHQoKSk7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgb3Bl
cmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcG9pbnQpCitpbmxpbmUgTGF5b3V0
UG9pbnQgb3BlcmF0b3ItKGNvbnN0IExheW91dFBvaW50JiBwb2ludCkKIHsKLSAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFBvaW50KC1wb2ludC54KCksIC1wb2ludC55KCkpOworICAgIHJldHVy
biBMYXlvdXRQb2ludCgtcG9pbnQueCgpLCAtcG9pbnQueSgpKTsKIH0KIAotaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRQb2ludCYgYikKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgTGF5b3V0UG9p
bnQmIGEsIGNvbnN0IExheW91dFBvaW50JiBiKQogewogICAgIHJldHVybiBhLngoKSA9PSBiLngo
KSAmJiBhLnkoKSA9PSBiLnkoKTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBG
cmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYikK
K2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgTGF5b3V0UG9pbnQmIGEsIGNvbnN0IExheW91
dFBvaW50JiBiKQogewogICAgIHJldHVybiBhLngoKSAhPSBiLngoKSB8fCBhLnkoKSAhPSBiLnko
KTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCB0b1BvaW50KGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRTaXplJiBzaXplKQoraW5saW5lIExheW91dFBvaW50IHRvUG9pbnQoY29uc3Qg
TGF5b3V0U2l6ZSYgc2l6ZSkKIHsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgcmV0dXJuIExheW91dFBvaW50KHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6
ZSB0b1NpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBhKQoraW5saW5lIExheW91dFBv
aW50IHRvTGF5b3V0UG9pbnQoY29uc3QgTGF5b3V0U2l6ZSYgcCkKIHsKLSAgICByZXR1cm4gRnJh
Y3Rpb25hbExheW91dFNpemUoYS54KCksIGEueSgpKTsKKyAgICByZXR1cm4gTGF5b3V0UG9pbnQo
cC53aWR0aCgpLCBwLmhlaWdodCgpKTsKIH0KIAotaW5saW5lIEludFBvaW50IGZsb29yZWRJbnRQ
b2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50KQoraW5saW5lIExheW91dFNp
emUgdG9TaXplKGNvbnN0IExheW91dFBvaW50JiBhKQoreworICAgIHJldHVybiBMYXlvdXRTaXpl
KGEueCgpLCBhLnkoKSk7Cit9CisKK2lubGluZSBMYXlvdXRQb2ludCByb3VuZGVkTGF5b3V0UG9p
bnQoY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQor
ICAgIHJldHVybiBMYXlvdXRQb2ludChwKTsKKyNlbHNlCisgICAgcmV0dXJuIHJvdW5kZWRJbnRQ
b2ludChwKTsKKyNlbmRpZgorfQorCitpbmxpbmUgSW50UG9pbnQgZmxvb3JlZEludFBvaW50KGNv
bnN0IExheW91dFBvaW50JiBwb2ludCkKIHsKICAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgp
LmZsb29yKCksIHBvaW50LnkoKS5mbG9vcigpKTsKIH0KIAotaW5saW5lIEludFBvaW50IHJvdW5k
ZWRJbnRQb2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50KQoraW5saW5lIElu
dFBvaW50IHJvdW5kZWRJbnRQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCiB7CiAgICAg
cmV0dXJuIEludFBvaW50KHBvaW50LngoKS5yb3VuZCgpLCBwb2ludC55KCkucm91bmQoKSk7CiB9
CiAKLWlubGluZSBJbnRQb2ludCByb3VuZGVkSW50UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91
dFNpemUmIHNpemUpCitpbmxpbmUgSW50UG9pbnQgcm91bmRlZEludFBvaW50KGNvbnN0IExheW91
dFNpemUmIHNpemUpCiB7CiAgICAgcmV0dXJuIEludFBvaW50KHNpemUud2lkdGgoKS5yb3VuZCgp
LCBzaXplLmhlaWdodCgpLnJvdW5kKCkpOwogfQogCi1pbmxpbmUgSW50UG9pbnQgY2VpbGVkSW50
UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBwb2ludCkKK2lubGluZSBJbnRQb2lu
dCBjZWlsZWRJbnRQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCiB7CiAgICAgcmV0dXJu
IEludFBvaW50KHBvaW50LngoKS5jZWlsKCksIHBvaW50LnkoKS5jZWlsKCkpOwogfQogCi1pbmxp
bmUgRnJhY3Rpb25hbExheW91dFBvaW50IGZsb29yZWRGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29u
c3QgRmxvYXRQb2ludCYgcCkKK2lubGluZSBMYXlvdXRQb2ludCBmbG9vcmVkTGF5b3V0UG9pbnQo
Y29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICByZXR1cm4gTGF5b3V0UG9pbnQoTGF5b3V0VW5p
dDo6ZnJvbUZsb2F0Rmxvb3IocC54KCkpLCBMYXlvdXRVbml0Ojpmcm9tRmxvYXRGbG9vcihwLnko
KSkpOworfQorCitpbmxpbmUgTGF5b3V0UG9pbnQgZmxvb3JlZExheW91dFBvaW50KGNvbnN0IEZs
b2F0U2l6ZSYgcCkKK3sKKyAgICByZXR1cm4gTGF5b3V0UG9pbnQoTGF5b3V0VW5pdDo6ZnJvbUZs
b2F0Rmxvb3IocC53aWR0aCgpKSwgTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Rmxvb3IocC5oZWlnaHQo
KSkpOworfQorCitpbmxpbmUgTGF5b3V0UG9pbnQgY2VpbGVkTGF5b3V0UG9pbnQoY29uc3QgRmxv
YXRQb2ludCYgcCkKK3sKKyAgICByZXR1cm4gTGF5b3V0UG9pbnQoTGF5b3V0VW5pdDo6ZnJvbUZs
b2F0Q2VpbChwLngoKSksIExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwocC55KCkpKTsKK30KKwor
aW5saW5lIExheW91dFNpemUgdG9MYXlvdXRTaXplKGNvbnN0IExheW91dFBvaW50JiBwKQogewot
ICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoRnJhY3Rpb25hbExheW91dFVuaXQ6OmZy
b21GbG9hdEZsb29yKHAueCgpKSwgRnJhY3Rpb25hbExheW91dFVuaXQ6OmZyb21GbG9hdEZsb29y
KHAueSgpKSk7CisgICAgcmV0dXJuIExheW91dFNpemUocC54KCksIHAueSgpKTsKIH0KIAotaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBjZWlsZWRGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29u
c3QgRmxvYXRQb2ludCYgcCkKK2lubGluZSBJbnRTaXplIHBpeGVsU25hcHBlZEludFNpemUoY29u
c3QgTGF5b3V0U2l6ZSYgcywgY29uc3QgTGF5b3V0UG9pbnQmIHApCiB7Ci0gICAgcmV0dXJuIEZy
YWN0aW9uYWxMYXlvdXRQb2ludChGcmFjdGlvbmFsTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChw
LngoKSksIEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKHAueSgpKSk7CisgICAg
cmV0dXJuIEludFNpemUoc25hcFNpemVUb1BpeGVsKHMud2lkdGgoKSwgcC54KCkpLCBzbmFwU2l6
ZVRvUGl4ZWwocy5oZWlnaHQoKSwgcC55KCkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCi0jZW5kaWYgLy8gRnJhY3Rpb25hbExheW91dFBvaW50X2gKKyNlbmRpZiAvLyBMYXlvdXRQ
b2ludF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlv
dXRSZWN0LmNwcAkocmV2aXNpb24gMTMzNTE3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHA6MTMzNTE3KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UmVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZyYWN0aW9uYWxM
YXlvdXRSZWN0LmgiCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGcmFjdGlv
bmFsTGF5b3V0VW5pdC5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKwordXNpbmcgc3RkOjptYXg7
Cit1c2luZyBzdGQ6Om1pbjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGcmFjdGlvbmFsTGF5
b3V0UmVjdDo6RnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQorICAgIDog
bV9sb2NhdGlvbihGcmFjdGlvbmFsTGF5b3V0UG9pbnQoci5sb2NhdGlvbigpKSkKKyAgICAsIG1f
c2l6ZShGcmFjdGlvbmFsTGF5b3V0U2l6ZShyLnNpemUoKSkpCit7Cit9CisKK2Jvb2wgRnJhY3Rp
b25hbExheW91dFJlY3Q6OmludGVyc2VjdHMoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90
aGVyKSBjb25zdAoreworICAgIC8vIENoZWNraW5nIGVtcHRpbmVzcyBoYW5kbGVzIG5lZ2F0aXZl
IHdpZHRocyBhcyB3ZWxsIGFzIHplcm8uCisgICAgcmV0dXJuICFpc0VtcHR5KCkgJiYgIW90aGVy
LmlzRW1wdHkoKQorICAgICAgICAmJiB4KCkgPCBvdGhlci5tYXhYKCkgJiYgb3RoZXIueCgpIDwg
bWF4WCgpCisgICAgICAgICYmIHkoKSA8IG90aGVyLm1heFkoKSAmJiBvdGhlci55KCkgPCBtYXhZ
KCk7Cit9CisKK2Jvb2wgRnJhY3Rpb25hbExheW91dFJlY3Q6OmNvbnRhaW5zKGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRSZWN0JiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4geCgpIDw9IG90aGVy
LngoKSAmJiBtYXhYKCkgPj0gb3RoZXIubWF4WCgpCisgICAgICAgICYmIHkoKSA8PSBvdGhlci55
KCkgJiYgbWF4WSgpID49IG90aGVyLm1heFkoKTsKK30KKwordm9pZCBGcmFjdGlvbmFsTGF5b3V0
UmVjdDo6aW50ZXJzZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBvdGhlcikKK3sKKyAg
ICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbmV3TG9jYXRpb24obWF4KHgoKSwgb3RoZXIueCgpKSwg
bWF4KHkoKSwgb3RoZXIueSgpKSk7CisgICAgRnJhY3Rpb25hbExheW91dFBvaW50IG5ld01heFBv
aW50KG1pbihtYXhYKCksIG90aGVyLm1heFgoKSksIG1pbihtYXhZKCksIG90aGVyLm1heFkoKSkp
OworCisgICAgLy8gUmV0dXJuIGEgY2xlYW4gZW1wdHkgcmVjdGFuZ2xlIGZvciBub24taW50ZXJz
ZWN0aW5nIGNhc2VzLgorICAgIGlmIChuZXdMb2NhdGlvbi54KCkgPj0gbmV3TWF4UG9pbnQueCgp
IHx8IG5ld0xvY2F0aW9uLnkoKSA+PSBuZXdNYXhQb2ludC55KCkpIHsKKyAgICAgICAgbmV3TG9j
YXRpb24gPSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoMCwgMCk7CisgICAgICAgIG5ld01heFBvaW50
ID0gRnJhY3Rpb25hbExheW91dFBvaW50KDAsIDApOworICAgIH0KKworICAgIG1fbG9jYXRpb24g
PSBuZXdMb2NhdGlvbjsKKyAgICBtX3NpemUgPSBuZXdNYXhQb2ludCAtIG5ld0xvY2F0aW9uOwor
fQorCit2b2lkIEZyYWN0aW9uYWxMYXlvdXRSZWN0Ojp1bml0ZShjb25zdCBGcmFjdGlvbmFsTGF5
b3V0UmVjdCYgb3RoZXIpCit7CisgICAgLy8gSGFuZGxlIGVtcHR5IHNwZWNpYWwgY2FzZXMgZmly
c3QuCisgICAgaWYgKG90aGVyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChp
c0VtcHR5KCkpIHsKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdMb2NhdGlvbihtaW4oeCgpLCBvdGhl
ci54KCkpLCBtaW4oeSgpLCBvdGhlci55KCkpKTsKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQg
bmV3TWF4UG9pbnQobWF4KG1heFgoKSwgb3RoZXIubWF4WCgpKSwgbWF4KG1heFkoKSwgb3RoZXIu
bWF4WSgpKSk7CisKKyAgICBtX2xvY2F0aW9uID0gbmV3TG9jYXRpb247CisgICAgbV9zaXplID0g
bmV3TWF4UG9pbnQgLSBuZXdMb2NhdGlvbjsKK30KKwordm9pZCBGcmFjdGlvbmFsTGF5b3V0UmVj
dDo6dW5pdGVJZk5vblplcm8oY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90aGVyKQorewor
ICAgIC8vIEhhbmRsZSBlbXB0eSBzcGVjaWFsIGNhc2VzIGZpcnN0LgorICAgIGlmICghb3RoZXIu
d2lkdGgoKSAmJiAhb3RoZXIuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXdp
ZHRoKCkgJiYgIWhlaWdodCgpKSB7CisgICAgICAgICp0aGlzID0gb3RoZXI7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbmV3TG9jYXRpb24obWlu
KHgoKSwgb3RoZXIueCgpKSwgbWluKHkoKSwgb3RoZXIueSgpKSk7CisgICAgRnJhY3Rpb25hbExh
eW91dFBvaW50IG5ld01heFBvaW50KG1heChtYXhYKCksIG90aGVyLm1heFgoKSksIG1heChtYXhZ
KCksIG90aGVyLm1heFkoKSkpOworCisgICAgbV9sb2NhdGlvbiA9IG5ld0xvY2F0aW9uOworICAg
IG1fc2l6ZSA9IG5ld01heFBvaW50IC0gbmV3TG9jYXRpb247Cit9CisKK3ZvaWQgRnJhY3Rpb25h
bExheW91dFJlY3Q6OnNjYWxlKGZsb2F0IHMpCit7CisgICAgbV9sb2NhdGlvbi5zY2FsZShzLCBz
KTsKKyAgICBtX3NpemUuc2NhbGUocyk7Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRSZWN0IHVuaW9u
UmVjdChjb25zdCBWZWN0b3I8RnJhY3Rpb25hbExheW91dFJlY3Q+JiByZWN0cykKK3sKKyAgICBG
cmFjdGlvbmFsTGF5b3V0UmVjdCByZXN1bHQ7CisKKyAgICBzaXplX3QgY291bnQgPSByZWN0cy5z
aXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICBy
ZXN1bHQudW5pdGUocmVjdHNbaV0pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSW50UmVj
dCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiByZWN0KQorewor
ICAgIEludFBvaW50IGxvY2F0aW9uID0gZmxvb3JlZEludFBvaW50KHJlY3QubWluWE1pbllDb3Ju
ZXIoKSk7CisgICAgSW50UG9pbnQgbWF4UG9pbnQgPSBjZWlsZWRJbnRQb2ludChyZWN0Lm1heFhN
YXhZQ29ybmVyKCkpOworCisgICAgcmV0dXJuIEludFJlY3QobG9jYXRpb24sIG1heFBvaW50IC0g
bG9jYXRpb24pOworfQorCitGcmFjdGlvbmFsTGF5b3V0UmVjdCBlbmNsb3NpbmdGcmFjdGlvbmFs
TGF5b3V0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisjaWYgRU5BQkxFKFNVQlBJWEVM
X0xBWU9VVCkKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbG9jYXRpb24gPSBmbG9vcmVkRnJh
Y3Rpb25hbExheW91dFBvaW50KHJlY3QubWluWE1pbllDb3JuZXIoKSk7CisgICAgRnJhY3Rpb25h
bExheW91dFBvaW50IG1heFBvaW50ID0gY2VpbGVkRnJhY3Rpb25hbExheW91dFBvaW50KHJlY3Qu
bWF4WE1heFlDb3JuZXIoKSk7CisKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFJlY3QobG9j
YXRpb24sIG1heFBvaW50IC0gbG9jYXRpb24pOworI2Vsc2UKKyAgICByZXR1cm4gZW5jbG9zaW5n
SW50UmVjdChyZWN0KTsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0LmNwcAko
cmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5
b3V0UmVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsyOSwxMCBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIgorI2lu
Y2x1ZGUgIkxheW91dFJlY3QuaCIKIAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUg
IkZyYWN0aW9uYWxMYXlvdXRVbml0LmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgogI2luY2x1
ZGUgPGFsZ29yaXRobT4KIAogdXNpbmcgc3RkOjptYXg7CkBAIC00MCwxMyArNDAsMTMgQEAgdXNp
bmcgc3RkOjptaW47CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRnJhY3Rpb25hbExheW91dFJl
Y3Q6OkZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKLSAgICA6IG1fbG9j
YXRpb24oRnJhY3Rpb25hbExheW91dFBvaW50KHIubG9jYXRpb24oKSkpCi0gICAgLCBtX3NpemUo
RnJhY3Rpb25hbExheW91dFNpemUoci5zaXplKCkpKQorTGF5b3V0UmVjdDo6TGF5b3V0UmVjdChj
b25zdCBGbG9hdFJlY3QmIHIpCisgICAgOiBtX2xvY2F0aW9uKExheW91dFBvaW50KHIubG9jYXRp
b24oKSkpCisgICAgLCBtX3NpemUoTGF5b3V0U2l6ZShyLnNpemUoKSkpCiB7CiB9CiAKLWJvb2wg
RnJhY3Rpb25hbExheW91dFJlY3Q6OmludGVyc2VjdHMoY29uc3QgRnJhY3Rpb25hbExheW91dFJl
Y3QmIG90aGVyKSBjb25zdAorYm9vbCBMYXlvdXRSZWN0OjppbnRlcnNlY3RzKGNvbnN0IExheW91
dFJlY3QmIG90aGVyKSBjb25zdAogewogICAgIC8vIENoZWNraW5nIGVtcHRpbmVzcyBoYW5kbGVz
IG5lZ2F0aXZlIHdpZHRocyBhcyB3ZWxsIGFzIHplcm8uCiAgICAgcmV0dXJuICFpc0VtcHR5KCkg
JiYgIW90aGVyLmlzRW1wdHkoKQpAQCAtNTQsMjggKzU0LDI4IEBAIGJvb2wgRnJhY3Rpb25hbExh
eW91dFJlY3Q6OmludGVyc2VjdHMoY28KICAgICAgICAgJiYgeSgpIDwgb3RoZXIubWF4WSgpICYm
IG90aGVyLnkoKSA8IG1heFkoKTsKIH0KIAotYm9vbCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6Y29u
dGFpbnMoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90aGVyKSBjb25zdAorYm9vbCBMYXlv
dXRSZWN0Ojpjb250YWlucyhjb25zdCBMYXlvdXRSZWN0JiBvdGhlcikgY29uc3QKIHsKICAgICBy
ZXR1cm4geCgpIDw9IG90aGVyLngoKSAmJiBtYXhYKCkgPj0gb3RoZXIubWF4WCgpCiAgICAgICAg
ICYmIHkoKSA8PSBvdGhlci55KCkgJiYgbWF4WSgpID49IG90aGVyLm1heFkoKTsKIH0KIAotdm9p
ZCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6aW50ZXJzZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRS
ZWN0JiBvdGhlcikKK3ZvaWQgTGF5b3V0UmVjdDo6aW50ZXJzZWN0KGNvbnN0IExheW91dFJlY3Qm
IG90aGVyKQogewotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdMb2NhdGlvbihtYXgoeCgp
LCBvdGhlci54KCkpLCBtYXgoeSgpLCBvdGhlci55KCkpKTsKLSAgICBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQgbmV3TWF4UG9pbnQobWluKG1heFgoKSwgb3RoZXIubWF4WCgpKSwgbWluKG1heFkoKSwg
b3RoZXIubWF4WSgpKSk7CisgICAgTGF5b3V0UG9pbnQgbmV3TG9jYXRpb24obWF4KHgoKSwgb3Ro
ZXIueCgpKSwgbWF4KHkoKSwgb3RoZXIueSgpKSk7CisgICAgTGF5b3V0UG9pbnQgbmV3TWF4UG9p
bnQobWluKG1heFgoKSwgb3RoZXIubWF4WCgpKSwgbWluKG1heFkoKSwgb3RoZXIubWF4WSgpKSk7
CiAKICAgICAvLyBSZXR1cm4gYSBjbGVhbiBlbXB0eSByZWN0YW5nbGUgZm9yIG5vbi1pbnRlcnNl
Y3RpbmcgY2FzZXMuCiAgICAgaWYgKG5ld0xvY2F0aW9uLngoKSA+PSBuZXdNYXhQb2ludC54KCkg
fHwgbmV3TG9jYXRpb24ueSgpID49IG5ld01heFBvaW50LnkoKSkgewotICAgICAgICBuZXdMb2Nh
dGlvbiA9IEZyYWN0aW9uYWxMYXlvdXRQb2ludCgwLCAwKTsKLSAgICAgICAgbmV3TWF4UG9pbnQg
PSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoMCwgMCk7CisgICAgICAgIG5ld0xvY2F0aW9uID0gTGF5
b3V0UG9pbnQoMCwgMCk7CisgICAgICAgIG5ld01heFBvaW50ID0gTGF5b3V0UG9pbnQoMCwgMCk7
CiAgICAgfQogCiAgICAgbV9sb2NhdGlvbiA9IG5ld0xvY2F0aW9uOwogICAgIG1fc2l6ZSA9IG5l
d01heFBvaW50IC0gbmV3TG9jYXRpb247CiB9CiAKLXZvaWQgRnJhY3Rpb25hbExheW91dFJlY3Q6
OnVuaXRlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBvdGhlcikKK3ZvaWQgTGF5b3V0UmVj
dDo6dW5pdGUoY29uc3QgTGF5b3V0UmVjdCYgb3RoZXIpCiB7CiAgICAgLy8gSGFuZGxlIGVtcHR5
IHNwZWNpYWwgY2FzZXMgZmlyc3QuCiAgICAgaWYgKG90aGVyLmlzRW1wdHkoKSkKQEAgLTg1LDE0
ICs4NSwxNCBAQCB2b2lkIEZyYWN0aW9uYWxMYXlvdXRSZWN0Ojp1bml0ZShjb25zdCBGCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbmV3TG9jYXRp
b24obWluKHgoKSwgb3RoZXIueCgpKSwgbWluKHkoKSwgb3RoZXIueSgpKSk7Ci0gICAgRnJhY3Rp
b25hbExheW91dFBvaW50IG5ld01heFBvaW50KG1heChtYXhYKCksIG90aGVyLm1heFgoKSksIG1h
eChtYXhZKCksIG90aGVyLm1heFkoKSkpOworICAgIExheW91dFBvaW50IG5ld0xvY2F0aW9uKG1p
bih4KCksIG90aGVyLngoKSksIG1pbih5KCksIG90aGVyLnkoKSkpOworICAgIExheW91dFBvaW50
IG5ld01heFBvaW50KG1heChtYXhYKCksIG90aGVyLm1heFgoKSksIG1heChtYXhZKCksIG90aGVy
Lm1heFkoKSkpOwogCiAgICAgbV9sb2NhdGlvbiA9IG5ld0xvY2F0aW9uOwogICAgIG1fc2l6ZSA9
IG5ld01heFBvaW50IC0gbmV3TG9jYXRpb247CiB9CiAKLXZvaWQgRnJhY3Rpb25hbExheW91dFJl
Y3Q6OnVuaXRlSWZOb25aZXJvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBvdGhlcikKK3Zv
aWQgTGF5b3V0UmVjdDo6dW5pdGVJZk5vblplcm8oY29uc3QgTGF5b3V0UmVjdCYgb3RoZXIpCiB7
CiAgICAgLy8gSGFuZGxlIGVtcHR5IHNwZWNpYWwgY2FzZXMgZmlyc3QuCiAgICAgaWYgKCFvdGhl
ci53aWR0aCgpICYmICFvdGhlci5oZWlnaHQoKSkKQEAgLTEwMiwyMiArMTAyLDIyIEBAIHZvaWQg
RnJhY3Rpb25hbExheW91dFJlY3Q6OnVuaXRlSWZOb25aZXIKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdMb2NhdGlvbihtaW4oeCgpLCBvdGhl
ci54KCkpLCBtaW4oeSgpLCBvdGhlci55KCkpKTsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQg
bmV3TWF4UG9pbnQobWF4KG1heFgoKSwgb3RoZXIubWF4WCgpKSwgbWF4KG1heFkoKSwgb3RoZXIu
bWF4WSgpKSk7CisgICAgTGF5b3V0UG9pbnQgbmV3TG9jYXRpb24obWluKHgoKSwgb3RoZXIueCgp
KSwgbWluKHkoKSwgb3RoZXIueSgpKSk7CisgICAgTGF5b3V0UG9pbnQgbmV3TWF4UG9pbnQobWF4
KG1heFgoKSwgb3RoZXIubWF4WCgpKSwgbWF4KG1heFkoKSwgb3RoZXIubWF4WSgpKSk7CiAKICAg
ICBtX2xvY2F0aW9uID0gbmV3TG9jYXRpb247CiAgICAgbV9zaXplID0gbmV3TWF4UG9pbnQgLSBu
ZXdMb2NhdGlvbjsKIH0KIAotdm9pZCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6c2NhbGUoZmxvYXQg
cykKK3ZvaWQgTGF5b3V0UmVjdDo6c2NhbGUoZmxvYXQgcykKIHsKICAgICBtX2xvY2F0aW9uLnNj
YWxlKHMsIHMpOwogICAgIG1fc2l6ZS5zY2FsZShzKTsKIH0KIAotRnJhY3Rpb25hbExheW91dFJl
Y3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxGcmFjdGlvbmFsTGF5b3V0UmVjdD4mIHJlY3RzKQor
TGF5b3V0UmVjdCB1bmlvblJlY3QoY29uc3QgVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cykKIHsK
LSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCByZXN1bHQ7CisgICAgTGF5b3V0UmVjdCByZXN1bHQ7
CiAKICAgICBzaXplX3QgY291bnQgPSByZWN0cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBjb3VudDsgKytpKQpAQCAtMTI2LDcgKzEyNiw3IEBAIEZyYWN0aW9uYWxMYXlvdXRS
ZWN0IHVuaW9uUmVjdChjb25zdCBWZWMKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1JbnRSZWN0
IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIHJlY3QpCitJbnRS
ZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkKIHsKICAgICBJbnRQ
b2ludCBsb2NhdGlvbiA9IGZsb29yZWRJbnRQb2ludChyZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwog
ICAgIEludFBvaW50IG1heFBvaW50ID0gY2VpbGVkSW50UG9pbnQocmVjdC5tYXhYTWF4WUNvcm5l
cigpKTsKQEAgLTEzNCwxMyArMTM0LDEzIEBAIEludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25z
dCBGcmFjdGlvbmEKICAgICByZXR1cm4gSW50UmVjdChsb2NhdGlvbiwgbWF4UG9pbnQgLSBsb2Nh
dGlvbik7CiB9CiAKLUZyYWN0aW9uYWxMYXlvdXRSZWN0IGVuY2xvc2luZ0ZyYWN0aW9uYWxMYXlv
dXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK0xheW91dFJlY3QgZW5jbG9zaW5nTGF5b3V0
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9V
VCkKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbG9jYXRpb24gPSBmbG9vcmVkRnJhY3Rpb25h
bExheW91dFBvaW50KHJlY3QubWluWE1pbllDb3JuZXIoKSk7Ci0gICAgRnJhY3Rpb25hbExheW91
dFBvaW50IG1heFBvaW50ID0gY2VpbGVkRnJhY3Rpb25hbExheW91dFBvaW50KHJlY3QubWF4WE1h
eFlDb3JuZXIoKSk7CisgICAgTGF5b3V0UG9pbnQgbG9jYXRpb24gPSBmbG9vcmVkTGF5b3V0UG9p
bnQocmVjdC5taW5YTWluWUNvcm5lcigpKTsKKyAgICBMYXlvdXRQb2ludCBtYXhQb2ludCA9IGNl
aWxlZExheW91dFBvaW50KHJlY3QubWF4WE1heFlDb3JuZXIoKSk7CiAKLSAgICByZXR1cm4gRnJh
Y3Rpb25hbExheW91dFJlY3QobG9jYXRpb24sIG1heFBvaW50IC0gbG9jYXRpb24pOworICAgIHJl
dHVybiBMYXlvdXRSZWN0KGxvY2F0aW9uLCBtYXhQb2ludCAtIGxvY2F0aW9uKTsKICNlbHNlCiAg
ICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QocmVjdCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJlY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0LmgJKHJldmlzaW9uIDEzMzUx
NykJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91
dFJlY3QuaDoxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlv
dXRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGcmFjdGlv
bmFsTGF5b3V0UmVjdF9oCisjZGVmaW5lIEZyYWN0aW9uYWxMYXlvdXRSZWN0X2gKKworI2luY2x1
ZGUgIkZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuaCIKKyNpbmNsdWRlICJGcmFjdGlvbmFsTGF5
b3V0UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCisjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8cWdsb2JhbC5oPgorUVRfQkVHSU5fTkFN
RVNQQUNFCitjbGFzcyBRUmVjdDsKK2NsYXNzIFFSZWN0RjsKK1FUX0VORF9OQU1FU1BBQ0UKKyNl
bmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZsb2F0UmVjdDsKKworY2xhc3Mg
RnJhY3Rpb25hbExheW91dFJlY3QgeworcHVibGljOgorICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0
KCkgeyB9CisgICAgRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFBv
aW50JiBsb2NhdGlvbiwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpCisgICAgICAg
IDogbV9sb2NhdGlvbihsb2NhdGlvbiksIG1fc2l6ZShzaXplKSB7IH0KKyAgICBGcmFjdGlvbmFs
TGF5b3V0UmVjdChGcmFjdGlvbmFsTGF5b3V0VW5pdCB4LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCB5
LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCB3aWR0aCwgRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0
KQorICAgICAgICA6IG1fbG9jYXRpb24oRnJhY3Rpb25hbExheW91dFBvaW50KHgsIHkpKSwgbV9z
aXplKEZyYWN0aW9uYWxMYXlvdXRTaXplKHdpZHRoLCBoZWlnaHQpKSB7IH0KKyAgICBGcmFjdGlv
bmFsTGF5b3V0UmVjdChjb25zdCBGbG9hdFBvaW50JiBsb2NhdGlvbiwgY29uc3QgRmxvYXRTaXpl
JiBzaXplKQorICAgICAgICA6IG1fbG9jYXRpb24obG9jYXRpb24pLCBtX3NpemUoc2l6ZSkgeyB9
CisgICAgRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgOiBtX2xvY2F0
aW9uKHJlY3QubG9jYXRpb24oKSksIG1fc2l6ZShyZWN0LnNpemUoKSkgeyB9CisKKyAgICBleHBs
aWNpdCBGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBGbG9hdFJlY3QmKTsgLy8gZG9uJ3QgZG8g
dGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKKyAgICAgICAgCisgICAgRnJhY3Rpb25h
bExheW91dFBvaW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfQorICAg
IEZyYWN0aW9uYWxMYXlvdXRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKwor
ICAgIEludFBvaW50IHBpeGVsU25hcHBlZExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gcm91bmRl
ZEludFBvaW50KG1fbG9jYXRpb24pOyB9CisgICAgSW50U2l6ZSBwaXhlbFNuYXBwZWRTaXplKCkg
Y29uc3QgeyByZXR1cm4gSW50U2l6ZShzbmFwU2l6ZVRvUGl4ZWwobV9zaXplLndpZHRoKCksIG1f
bG9jYXRpb24ueCgpKSwgc25hcFNpemVUb1BpeGVsKG1fc2l6ZS5oZWlnaHQoKSwgbV9sb2NhdGlv
bi55KCkpKTsgfQorCisgICAgdm9pZCBzZXRMb2NhdGlvbihjb25zdCBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQmIGxvY2F0aW9uKSB7IG1fbG9jYXRpb24gPSBsb2NhdGlvbjsgfQorICAgIHZvaWQgc2V0
U2l6ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9
CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB4KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlv
bi54KCk7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB5KCkgY29uc3QgeyByZXR1cm4gbV9s
b2NhdGlvbi55KCk7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtYXhYKCkgY29uc3QgeyBy
ZXR1cm4geCgpICsgd2lkdGgoKTsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1heFkoKSBj
b25zdCB7IHJldHVybiB5KCkgKyBoZWlnaHQoKTsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9zaXplLndpZHRoKCk7IH0KKyAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaGVpZ2h0KCk7IH0KKwor
ICAgIGludCBwaXhlbFNuYXBwZWRYKCkgY29uc3QgeyByZXR1cm4geCgpLnJvdW5kKCk7IH0KKyAg
ICBpbnQgcGl4ZWxTbmFwcGVkWSgpIGNvbnN0IHsgcmV0dXJuIHkoKS5yb3VuZCgpOyB9CisgICAg
aW50IHBpeGVsU25hcHBlZFdpZHRoKCkgY29uc3QgeyByZXR1cm4gc25hcFNpemVUb1BpeGVsKHdp
ZHRoKCksIHgoKSk7IH0KKyAgICBpbnQgcGl4ZWxTbmFwcGVkSGVpZ2h0KCkgY29uc3QgeyByZXR1
cm4gc25hcFNpemVUb1BpeGVsKGhlaWdodCgpLCB5KCkpOyB9CisgICAgaW50IHBpeGVsU25hcHBl
ZE1heFgoKSBjb25zdCB7IHJldHVybiAobV9sb2NhdGlvbi54KCkgKyBtX3NpemUud2lkdGgoKSku
cm91bmQoKTsgfQorICAgIGludCBwaXhlbFNuYXBwZWRNYXhZKCkgY29uc3QgeyByZXR1cm4gKG1f
bG9jYXRpb24ueSgpICsgbV9zaXplLmhlaWdodCgpKS5yb3VuZCgpOyB9CisKKyAgICB2b2lkIHNl
dFgoRnJhY3Rpb25hbExheW91dFVuaXQgeCkgeyBtX2xvY2F0aW9uLnNldFgoeCk7IH0KKyAgICB2
b2lkIHNldFkoRnJhY3Rpb25hbExheW91dFVuaXQgeSkgeyBtX2xvY2F0aW9uLnNldFkoeSk7IH0K
KyAgICB2b2lkIHNldFdpZHRoKEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKSB7IG1fc2l6ZS5z
ZXRXaWR0aCh3aWR0aCk7IH0KKyAgICB2b2lkIHNldEhlaWdodChGcmFjdGlvbmFsTGF5b3V0VW5p
dCBoZWlnaHQpIHsgbV9zaXplLnNldEhlaWdodChoZWlnaHQpOyB9CisKKyAgICBib29sIGlzRW1w
dHkoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaXNFbXB0eSgpOyB9CisKKyAgICAvLyBOT1RFOiBU
aGUgcmVzdWx0IGlzIHJvdW5kZWQgdG8gaW50ZWdlciB2YWx1ZXMsIGFuZCB0aHVzIG1heSBiZSBu
b3QgdGhlIGV4YWN0CisgICAgLy8gY2VudGVyIHBvaW50LgorICAgIEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCBjZW50ZXIoKSBjb25zdCB7IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoeCgpICsg
d2lkdGgoKSAvIDIsIHkoKSArIGhlaWdodCgpIC8gMik7IH0KKworICAgIHZvaWQgbW92ZShjb25z
dCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkgeyBtX2xvY2F0aW9uICs9IHNpemU7IH0gCisg
ICAgdm9pZCBtb3ZlQnkoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBvZmZzZXQpIHsgbV9s
b2NhdGlvbi5tb3ZlKG9mZnNldC54KCksIG9mZnNldC55KCkpOyB9CisgICAgdm9pZCBtb3ZlKEZy
YWN0aW9uYWxMYXlvdXRVbml0IGR4LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeSkgeyBtX2xvY2F0
aW9uLm1vdmUoZHgsIGR5KTsgfSAKKworICAgIHZvaWQgZXhwYW5kKGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRTaXplJiBzaXplKSB7IG1fc2l6ZSArPSBzaXplOyB9CisgICAgdm9pZCBleHBhbmQoY29u
c3QgRnJhY3Rpb25hbExheW91dEJveEV4dGVudCYgYm94KQorICAgIHsKKyAgICAgICAgbV9sb2Nh
dGlvbi5tb3ZlKC1ib3gubGVmdCgpLCAtYm94LnRvcCgpKTsKKyAgICAgICAgbV9zaXplLmV4cGFu
ZChib3gubGVmdCgpICsgYm94LnJpZ2h0KCksIGJveC50b3AoKSArIGJveC5ib3R0b20oKSk7Cisg
ICAgfQorICAgIHZvaWQgZXhwYW5kKEZyYWN0aW9uYWxMYXlvdXRVbml0IGR3LCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBkaCkgeyBtX3NpemUuZXhwYW5kKGR3LCBkaCk7IH0KKyAgICB2b2lkIGNvbnRy
YWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1fc2l6ZSAtPSBzaXplOyB9
CisgICAgdm9pZCBjb250cmFjdChGcmFjdGlvbmFsTGF5b3V0VW5pdCBkdywgRnJhY3Rpb25hbExh
eW91dFVuaXQgZGgpIHsgbV9zaXplLmV4cGFuZCgtZHcsIC1kaCk7IH0KKworICAgIHZvaWQgc2hp
ZnRYRWRnZVRvKEZyYWN0aW9uYWxMYXlvdXRVbml0IGVkZ2UpCisgICAgeworICAgICAgICBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBkZWx0YSA9IGVkZ2UgLSB4KCk7CisgICAgICAgIHNldFgoZWRnZSk7
CisgICAgICAgIHNldFdpZHRoKHN0ZDo6bWF4PEZyYWN0aW9uYWxMYXlvdXRVbml0PigwLCB3aWR0
aCgpIC0gZGVsdGEpKTsKKyAgICB9CisgICAgdm9pZCBzaGlmdE1heFhFZGdlVG8oRnJhY3Rpb25h
bExheW91dFVuaXQgZWRnZSkKKyAgICB7CisgICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRl
bHRhID0gZWRnZSAtIG1heFgoKTsKKyAgICAgICAgc2V0V2lkdGgoc3RkOjptYXg8RnJhY3Rpb25h
bExheW91dFVuaXQ+KDAsIHdpZHRoKCkgKyBkZWx0YSkpOworICAgIH0KKyAgICB2b2lkIHNoaWZ0
WUVkZ2VUbyhGcmFjdGlvbmFsTGF5b3V0VW5pdCBlZGdlKQorICAgIHsKKyAgICAgICAgRnJhY3Rp
b25hbExheW91dFVuaXQgZGVsdGEgPSBlZGdlIC0geSgpOworICAgICAgICBzZXRZKGVkZ2UpOwor
ICAgICAgICBzZXRIZWlnaHQoc3RkOjptYXg8RnJhY3Rpb25hbExheW91dFVuaXQ+KDAsIGhlaWdo
dCgpIC0gZGVsdGEpKTsKKyAgICB9CisgICAgdm9pZCBzaGlmdE1heFlFZGdlVG8oRnJhY3Rpb25h
bExheW91dFVuaXQgZWRnZSkKKyAgICB7CisgICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRl
bHRhID0gZWRnZSAtIG1heFkoKTsKKyAgICAgICAgc2V0SGVpZ2h0KHN0ZDo6bWF4PEZyYWN0aW9u
YWxMYXlvdXRVbml0PigwLCBoZWlnaHQoKSArIGRlbHRhKSk7CisgICAgfQorCisgICAgRnJhY3Rp
b25hbExheW91dFBvaW50IG1pblhNaW5ZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlv
bjsgfSAvLyB0eXBpY2FsbHkgdG9wTGVmdAorICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBtYXhY
TWluWUNvcm5lcigpIGNvbnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChtX2xvY2F0
aW9uLngoKSArIG1fc2l6ZS53aWR0aCgpLCBtX2xvY2F0aW9uLnkoKSk7IH0gLy8gdHlwaWNhbGx5
IHRvcFJpZ2h0CisgICAgRnJhY3Rpb25hbExheW91dFBvaW50IG1pblhNYXhZQ29ybmVyKCkgY29u
c3QgeyByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KG1fbG9jYXRpb24ueCgpLCBtX2xvY2F0
aW9uLnkoKSArIG1fc2l6ZS5oZWlnaHQoKSk7IH0gLy8gdHlwaWNhbGx5IGJvdHRvbUxlZnQKKyAg
ICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbWF4WE1heFlDb3JuZXIoKSBjb25zdCB7IHJldHVybiBG
cmFjdGlvbmFsTGF5b3V0UG9pbnQobV9sb2NhdGlvbi54KCkgKyBtX3NpemUud2lkdGgoKSwgbV9s
b2NhdGlvbi55KCkgKyBtX3NpemUuaGVpZ2h0KCkpOyB9IC8vIHR5cGljYWxseSBib3R0b21SaWdo
dAorICAgIAorICAgIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYp
IGNvbnN0OworICAgIGJvb2wgY29udGFpbnMoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKSBj
b25zdDsKKworICAgIC8vIFRoaXMgY2hlY2tzIHRvIHNlZSBpZiB0aGUgcmVjdCBjb250YWlucyB4
LHkgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlLgorICAgIC8vIEVxdWl2YWxlbnQgdG8gY2hlY2tp
bmcgaWYgdGhlIHJlY3QgY29udGFpbnMgYSAxeDEgcmVjdCBiZWxvdyBhbmQgdG8gdGhlIHJpZ2h0
IG9mIChweCxweSkuCisgICAgYm9vbCBjb250YWlucyhGcmFjdGlvbmFsTGF5b3V0VW5pdCBweCwg
RnJhY3Rpb25hbExheW91dFVuaXQgcHkpIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIHB4ID49IHgo
KSAmJiBweCA8IG1heFgoKSAmJiBweSA+PSB5KCkgJiYgcHkgPCBtYXhZKCk7IH0KKyAgICBib29s
IGNvbnRhaW5zKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0
dXJuIGNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsgfQorCisgICAgdm9pZCBpbnRlcnNl
Y3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKTsKKyAgICB2b2lkIHVuaXRlKGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRSZWN0Jik7CisgICAgdm9pZCB1bml0ZUlmTm9uWmVybyhjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UmVjdCYpOworCisgICAgdm9pZCBpbmZsYXRlWChGcmFjdGlvbmFsTGF5b3V0
VW5pdCBkeCkKKyAgICB7CisgICAgICAgIG1fbG9jYXRpb24uc2V0WChtX2xvY2F0aW9uLngoKSAt
IGR4KTsKKyAgICAgICAgbV9zaXplLnNldFdpZHRoKG1fc2l6ZS53aWR0aCgpICsgZHggKyBkeCk7
CisgICAgfQorICAgIHZvaWQgaW5mbGF0ZVkoRnJhY3Rpb25hbExheW91dFVuaXQgZHkpCisgICAg
eworICAgICAgICBtX2xvY2F0aW9uLnNldFkobV9sb2NhdGlvbi55KCkgLSBkeSk7CisgICAgICAg
IG1fc2l6ZS5zZXRIZWlnaHQobV9zaXplLmhlaWdodCgpICsgZHkgKyBkeSk7CisgICAgfQorICAg
IHZvaWQgaW5mbGF0ZShGcmFjdGlvbmFsTGF5b3V0VW5pdCBkKSB7IGluZmxhdGVYKGQpOyBpbmZs
YXRlWShkKTsgfQorICAgIHZvaWQgc2NhbGUoZmxvYXQgcyk7CisKKyAgICBGcmFjdGlvbmFsTGF5
b3V0UmVjdCB0cmFuc3Bvc2VkUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRS
ZWN0KG1fbG9jYXRpb24udHJhbnNwb3NlZFBvaW50KCksIG1fc2l6ZS50cmFuc3Bvc2VkU2l6ZSgp
KTsgfQorCisgICAgc3RhdGljIEZyYWN0aW9uYWxMYXlvdXRSZWN0IGluZmluaXRlUmVjdCgpCisg
ICAgeworICAgICAgICAvLyBSZXR1cm4gYSByZWN0IHRoYXQgaXMgc2xpZ2h0bHkgc21hbGxlciB0
aGFuIHRoZSB0cnVlIG1heCByZWN0IHRvIGFsbG93IHBpeGVsU25hcHBpbmcgdG8gcm91bmQgdXAg
dG8gdGhlIG5lYXJlc3QgSW50UmVjdCB3aXRob3V0IG92ZXJmbG93aW5nLgorICAgICAgICByZXR1
cm4gRnJhY3Rpb25hbExheW91dFJlY3QoRnJhY3Rpb25hbExheW91dFVuaXQ6Om5lYXJseU1pbigp
IC8gMiwgRnJhY3Rpb25hbExheW91dFVuaXQ6Om5lYXJseU1pbigpIC8gMiwgRnJhY3Rpb25hbExh
eW91dFVuaXQ6Om5lYXJseU1heCgpLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bmVhcmx5TWF4KCkp
OworICAgIH0KKworI2lmIFBMQVRGT1JNKFFUKQorICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlv
dXRSZWN0KGNvbnN0IFFSZWN0Jik7CisgICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFJlY3Qo
Y29uc3QgUVJlY3RGJik7CisgICAgb3BlcmF0b3IgUVJlY3RGKCkgY29uc3Q7CisjZW5kaWYKKwor
cHJpdmF0ZToKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbV9sb2NhdGlvbjsKKyAgICBGcmFj
dGlvbmFsTGF5b3V0U2l6ZSBtX3NpemU7Cit9OworCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFJl
Y3QgaW50ZXJzZWN0aW9uKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBhLCBjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UmVjdCYgYikKK3sKKyAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCBjID0gYTsK
KyAgICBjLmludGVyc2VjdChiKTsKKyAgICByZXR1cm4gYzsKK30KKworaW5saW5lIEZyYWN0aW9u
YWxMYXlvdXRSZWN0IHVuaW9uUmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYSwgY29u
c3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGIpCit7CisgICAgRnJhY3Rpb25hbExheW91dFJlY3Qg
YyA9IGE7CisgICAgYy51bml0ZShiKTsKKyAgICByZXR1cm4gYzsKK30KKworRnJhY3Rpb25hbExh
eW91dFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxGcmFjdGlvbmFsTGF5b3V0UmVjdD4mKTsK
KworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYSwg
Y29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGIpCit7CisgICAgcmV0dXJuIGEubG9jYXRpb24o
KSA9PSBiLmxvY2F0aW9uKCkgJiYgYS5zaXplKCkgPT0gYi5zaXplKCk7Cit9CisKK2lubGluZSBi
b29sIG9wZXJhdG9yIT0oY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRSZWN0JiBiKQoreworICAgIHJldHVybiBhLmxvY2F0aW9uKCkgIT0gYi5sb2Nh
dGlvbigpIHx8IGEuc2l6ZSgpICE9IGIuc2l6ZSgpOworfQorCitpbmxpbmUgSW50UmVjdCBwaXhl
bFNuYXBwZWRJbnRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiByZWN0KQoreworI2lm
IEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisgICAgcmV0dXJuIEludFJlY3Qocm91bmRlZEludFBv
aW50KHJlY3QubG9jYXRpb24oKSksIEludFNpemUoc25hcFNpemVUb1BpeGVsKHJlY3Qud2lkdGgo
KSwgcmVjdC54KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNuYXBTaXplVG9QaXhlbChyZWN0LmhlaWdodCgpLCByZWN0Lnko
KSkpKTsKKworI2Vsc2UKKyAgICByZXR1cm4gSW50UmVjdChyZWN0KTsKKyNlbmRpZgorfQorCitJ
bnRSZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKTsKK0Zy
YWN0aW9uYWxMYXlvdXRSZWN0IGVuY2xvc2luZ0ZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBGcmFjdGlv
bmFsTGF5b3V0UmVjdF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9M
YXlvdXRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvTGF5b3V0UmVjdC5oCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEyICsyOCwx
MiBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEZyYWN0aW9uYWxMYXlvdXRSZWN0
X2gKLSNkZWZpbmUgRnJhY3Rpb25hbExheW91dFJlY3RfaAorI2lmbmRlZiBMYXlvdXRSZWN0X2gK
KyNkZWZpbmUgTGF5b3V0UmVjdF9oCiAKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0Qm94RXh0
ZW50LmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFBvaW50LmgiCiAjaW5jbHVkZSAiSW50
UmVjdC5oIgorI2luY2x1ZGUgIkxheW91dEJveEV4dGVudC5oIgorI2luY2x1ZGUgIkxheW91dFBv
aW50LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgUExBVEZPUk0oUVQpCkBAIC00
OCwzNCArNDgsMzQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGbG9hdFJlY3Q7CiAK
LWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRSZWN0IHsKK2NsYXNzIExheW91dFJlY3QgewogcHVibGlj
OgotICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0KCkgeyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFJl
Y3QoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBsb2NhdGlvbiwgY29uc3QgRnJhY3Rpb25h
bExheW91dFNpemUmIHNpemUpCisgICAgTGF5b3V0UmVjdCgpIHsgfQorICAgIExheW91dFJlY3Qo
Y29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBjb25zdCBMYXlvdXRTaXplJiBzaXplKQogICAg
ICAgICA6IG1fbG9jYXRpb24obG9jYXRpb24pLCBtX3NpemUoc2l6ZSkgeyB9Ci0gICAgRnJhY3Rp
b25hbExheW91dFJlY3QoRnJhY3Rpb25hbExheW91dFVuaXQgeCwgRnJhY3Rpb25hbExheW91dFVu
aXQgeSwgRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGhl
aWdodCkKLSAgICAgICAgOiBtX2xvY2F0aW9uKEZyYWN0aW9uYWxMYXlvdXRQb2ludCh4LCB5KSks
IG1fc2l6ZShGcmFjdGlvbmFsTGF5b3V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkgeyB9Ci0gICAgRnJh
Y3Rpb25hbExheW91dFJlY3QoY29uc3QgRmxvYXRQb2ludCYgbG9jYXRpb24sIGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkKKyAgICBMYXlvdXRSZWN0KExheW91dFVuaXQgeCwgTGF5b3V0VW5pdCB5LCBM
YXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IGhlaWdodCkKKyAgICAgICAgOiBtX2xvY2F0aW9u
KExheW91dFBvaW50KHgsIHkpKSwgbV9zaXplKExheW91dFNpemUod2lkdGgsIGhlaWdodCkpIHsg
fQorICAgIExheW91dFJlY3QoY29uc3QgRmxvYXRQb2ludCYgbG9jYXRpb24sIGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkKICAgICAgICAgOiBtX2xvY2F0aW9uKGxvY2F0aW9uKSwgbV9zaXplKHNpemUp
IHsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIDogbV9s
b2NhdGlvbihyZWN0LmxvY2F0aW9uKCkpLCBtX3NpemUocmVjdC5zaXplKCkpIHsgfQorICAgIExh
eW91dFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgOiBtX2xvY2F0aW9uKHJlY3QubG9jYXRpb24o
KSksIG1fc2l6ZShyZWN0LnNpemUoKSkgeyB9CiAKLSAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5
b3V0UmVjdChjb25zdCBGbG9hdFJlY3QmKTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNp
bmNlIGl0J3MgbG9zc3kKKyAgICBleHBsaWNpdCBMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYp
OyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQogICAgICAgICAK
LSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xv
Y2F0aW9uOyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2l6ZTsgfQorICAgIExheW91dFBvaW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9s
b2NhdGlvbjsgfQorICAgIExheW91dFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsg
fQogCiAgICAgSW50UG9pbnQgcGl4ZWxTbmFwcGVkTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBy
b3VuZGVkSW50UG9pbnQobV9sb2NhdGlvbik7IH0KICAgICBJbnRTaXplIHBpeGVsU25hcHBlZFNp
emUoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKHNuYXBTaXplVG9QaXhlbChtX3NpemUud2lkdGgo
KSwgbV9sb2NhdGlvbi54KCkpLCBzbmFwU2l6ZVRvUGl4ZWwobV9zaXplLmhlaWdodCgpLCBtX2xv
Y2F0aW9uLnkoKSkpOyB9CiAKLSAgICB2b2lkIHNldExvY2F0aW9uKGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRQb2ludCYgbG9jYXRpb24pIHsgbV9sb2NhdGlvbiA9IGxvY2F0aW9uOyB9Ci0gICAgdm9p
ZCBzZXRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1fc2l6ZSA9IHNp
emU7IH0KKyAgICB2b2lkIHNldExvY2F0aW9uKGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbikg
eyBtX2xvY2F0aW9uID0gbG9jYXRpb247IH0KKyAgICB2b2lkIHNldFNpemUoY29uc3QgTGF5b3V0
U2l6ZSYgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9CiAKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dCB4KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi54KCk7IH0KLSAgICBGcmFjdGlvbmFsTGF5
b3V0VW5pdCB5KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi55KCk7IH0KLSAgICBGcmFjdGlv
bmFsTGF5b3V0VW5pdCBtYXhYKCkgY29uc3QgeyByZXR1cm4geCgpICsgd2lkdGgoKTsgfQotICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0IG1heFkoKSBjb25zdCB7IHJldHVybiB5KCkgKyBoZWlnaHQo
KTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9z
aXplLndpZHRoKCk7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBoZWlnaHQoKSBjb25zdCB7
IHJldHVybiBtX3NpemUuaGVpZ2h0KCk7IH0KKyAgICBMYXlvdXRVbml0IHgoKSBjb25zdCB7IHJl
dHVybiBtX2xvY2F0aW9uLngoKTsgfQorICAgIExheW91dFVuaXQgeSgpIGNvbnN0IHsgcmV0dXJu
IG1fbG9jYXRpb24ueSgpOyB9CisgICAgTGF5b3V0VW5pdCBtYXhYKCkgY29uc3QgeyByZXR1cm4g
eCgpICsgd2lkdGgoKTsgfQorICAgIExheW91dFVuaXQgbWF4WSgpIGNvbnN0IHsgcmV0dXJuIHko
KSArIGhlaWdodCgpOyB9CisgICAgTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2l6ZS53aWR0aCgpOyB9CisgICAgTGF5b3V0VW5pdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBt
X3NpemUuaGVpZ2h0KCk7IH0KIAogICAgIGludCBwaXhlbFNuYXBwZWRYKCkgY29uc3QgeyByZXR1
cm4geCgpLnJvdW5kKCk7IH0KICAgICBpbnQgcGl4ZWxTbmFwcGVkWSgpIGNvbnN0IHsgcmV0dXJu
IHkoKS5yb3VuZCgpOyB9CkBAIC04NCwxMzEgKzg0LDEzMSBAQCBwdWJsaWM6CiAgICAgaW50IHBp
eGVsU25hcHBlZE1heFgoKSBjb25zdCB7IHJldHVybiAobV9sb2NhdGlvbi54KCkgKyBtX3NpemUu
d2lkdGgoKSkucm91bmQoKTsgfQogICAgIGludCBwaXhlbFNuYXBwZWRNYXhZKCkgY29uc3QgeyBy
ZXR1cm4gKG1fbG9jYXRpb24ueSgpICsgbV9zaXplLmhlaWdodCgpKS5yb3VuZCgpOyB9CiAKLSAg
ICB2b2lkIHNldFgoRnJhY3Rpb25hbExheW91dFVuaXQgeCkgeyBtX2xvY2F0aW9uLnNldFgoeCk7
IH0KLSAgICB2b2lkIHNldFkoRnJhY3Rpb25hbExheW91dFVuaXQgeSkgeyBtX2xvY2F0aW9uLnNl
dFkoeSk7IH0KLSAgICB2b2lkIHNldFdpZHRoKEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKSB7
IG1fc2l6ZS5zZXRXaWR0aCh3aWR0aCk7IH0KLSAgICB2b2lkIHNldEhlaWdodChGcmFjdGlvbmFs
TGF5b3V0VW5pdCBoZWlnaHQpIHsgbV9zaXplLnNldEhlaWdodChoZWlnaHQpOyB9CisgICAgdm9p
ZCBzZXRYKExheW91dFVuaXQgeCkgeyBtX2xvY2F0aW9uLnNldFgoeCk7IH0KKyAgICB2b2lkIHNl
dFkoTGF5b3V0VW5pdCB5KSB7IG1fbG9jYXRpb24uc2V0WSh5KTsgfQorICAgIHZvaWQgc2V0V2lk
dGgoTGF5b3V0VW5pdCB3aWR0aCkgeyBtX3NpemUuc2V0V2lkdGgod2lkdGgpOyB9CisgICAgdm9p
ZCBzZXRIZWlnaHQoTGF5b3V0VW5pdCBoZWlnaHQpIHsgbV9zaXplLnNldEhlaWdodChoZWlnaHQp
OyB9CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaXNFbXB0eSgp
OyB9CiAKICAgICAvLyBOT1RFOiBUaGUgcmVzdWx0IGlzIHJvdW5kZWQgdG8gaW50ZWdlciB2YWx1
ZXMsIGFuZCB0aHVzIG1heSBiZSBub3QgdGhlIGV4YWN0CiAgICAgLy8gY2VudGVyIHBvaW50Lgot
ICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBjZW50ZXIoKSBjb25zdCB7IHJldHVybiBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQoeCgpICsgd2lkdGgoKSAvIDIsIHkoKSArIGhlaWdodCgpIC8gMik7IH0K
KyAgICBMYXlvdXRQb2ludCBjZW50ZXIoKSBjb25zdCB7IHJldHVybiBMYXlvdXRQb2ludCh4KCkg
KyB3aWR0aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAyKTsgfQogCi0gICAgdm9pZCBtb3ZlKGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1fbG9jYXRpb24gKz0gc2l6ZTsgfSAK
LSAgICB2b2lkIG1vdmVCeShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIG9mZnNldCkgeyBt
X2xvY2F0aW9uLm1vdmUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7IH0KLSAgICB2b2lkIG1vdmUo
RnJhY3Rpb25hbExheW91dFVuaXQgZHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGR5KSB7IG1fbG9j
YXRpb24ubW92ZShkeCwgZHkpOyB9IAorICAgIHZvaWQgbW92ZShjb25zdCBMYXlvdXRTaXplJiBz
aXplKSB7IG1fbG9jYXRpb24gKz0gc2l6ZTsgfSAKKyAgICB2b2lkIG1vdmVCeShjb25zdCBMYXlv
dXRQb2ludCYgb2Zmc2V0KSB7IG1fbG9jYXRpb24ubW92ZShvZmZzZXQueCgpLCBvZmZzZXQueSgp
KTsgfQorICAgIHZvaWQgbW92ZShMYXlvdXRVbml0IGR4LCBMYXlvdXRVbml0IGR5KSB7IG1fbG9j
YXRpb24ubW92ZShkeCwgZHkpOyB9IAogCi0gICAgdm9pZCBleHBhbmQoY29uc3QgRnJhY3Rpb25h
bExheW91dFNpemUmIHNpemUpIHsgbV9zaXplICs9IHNpemU7IH0KLSAgICB2b2lkIGV4cGFuZChj
b25zdCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50JiBib3gpCisgICAgdm9pZCBleHBhbmQoY29u
c3QgTGF5b3V0U2l6ZSYgc2l6ZSkgeyBtX3NpemUgKz0gc2l6ZTsgfQorICAgIHZvaWQgZXhwYW5k
KGNvbnN0IExheW91dEJveEV4dGVudCYgYm94KQogICAgIHsKICAgICAgICAgbV9sb2NhdGlvbi5t
b3ZlKC1ib3gubGVmdCgpLCAtYm94LnRvcCgpKTsKICAgICAgICAgbV9zaXplLmV4cGFuZChib3gu
bGVmdCgpICsgYm94LnJpZ2h0KCksIGJveC50b3AoKSArIGJveC5ib3R0b20oKSk7CiAgICAgfQot
ICAgIHZvaWQgZXhwYW5kKEZyYWN0aW9uYWxMYXlvdXRVbml0IGR3LCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBkaCkgeyBtX3NpemUuZXhwYW5kKGR3LCBkaCk7IH0KLSAgICB2b2lkIGNvbnRyYWN0KGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1fc2l6ZSAtPSBzaXplOyB9Ci0gICAg
dm9pZCBjb250cmFjdChGcmFjdGlvbmFsTGF5b3V0VW5pdCBkdywgRnJhY3Rpb25hbExheW91dFVu
aXQgZGgpIHsgbV9zaXplLmV4cGFuZCgtZHcsIC1kaCk7IH0KKyAgICB2b2lkIGV4cGFuZChMYXlv
dXRVbml0IGR3LCBMYXlvdXRVbml0IGRoKSB7IG1fc2l6ZS5leHBhbmQoZHcsIGRoKTsgfQorICAg
IHZvaWQgY29udHJhY3QoY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkgeyBtX3NpemUgLT0gc2l6ZTsg
fQorICAgIHZvaWQgY29udHJhY3QoTGF5b3V0VW5pdCBkdywgTGF5b3V0VW5pdCBkaCkgeyBtX3Np
emUuZXhwYW5kKC1kdywgLWRoKTsgfQogCi0gICAgdm9pZCBzaGlmdFhFZGdlVG8oRnJhY3Rpb25h
bExheW91dFVuaXQgZWRnZSkKKyAgICB2b2lkIHNoaWZ0WEVkZ2VUbyhMYXlvdXRVbml0IGVkZ2Up
CiAgICAgewotICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkZWx0YSA9IGVkZ2UgLSB4KCk7
CisgICAgICAgIExheW91dFVuaXQgZGVsdGEgPSBlZGdlIC0geCgpOwogICAgICAgICBzZXRYKGVk
Z2UpOwotICAgICAgICBzZXRXaWR0aChzdGQ6Om1heDxGcmFjdGlvbmFsTGF5b3V0VW5pdD4oMCwg
d2lkdGgoKSAtIGRlbHRhKSk7CisgICAgICAgIHNldFdpZHRoKHN0ZDo6bWF4PExheW91dFVuaXQ+
KDAsIHdpZHRoKCkgLSBkZWx0YSkpOwogICAgIH0KLSAgICB2b2lkIHNoaWZ0TWF4WEVkZ2VUbyhG
cmFjdGlvbmFsTGF5b3V0VW5pdCBlZGdlKQorICAgIHZvaWQgc2hpZnRNYXhYRWRnZVRvKExheW91
dFVuaXQgZWRnZSkKICAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRlbHRhID0g
ZWRnZSAtIG1heFgoKTsKLSAgICAgICAgc2V0V2lkdGgoc3RkOjptYXg8RnJhY3Rpb25hbExheW91
dFVuaXQ+KDAsIHdpZHRoKCkgKyBkZWx0YSkpOworICAgICAgICBMYXlvdXRVbml0IGRlbHRhID0g
ZWRnZSAtIG1heFgoKTsKKyAgICAgICAgc2V0V2lkdGgoc3RkOjptYXg8TGF5b3V0VW5pdD4oMCwg
d2lkdGgoKSArIGRlbHRhKSk7CiAgICAgfQotICAgIHZvaWQgc2hpZnRZRWRnZVRvKEZyYWN0aW9u
YWxMYXlvdXRVbml0IGVkZ2UpCisgICAgdm9pZCBzaGlmdFlFZGdlVG8oTGF5b3V0VW5pdCBlZGdl
KQogICAgIHsKLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZGVsdGEgPSBlZGdlIC0geSgp
OworICAgICAgICBMYXlvdXRVbml0IGRlbHRhID0gZWRnZSAtIHkoKTsKICAgICAgICAgc2V0WShl
ZGdlKTsKLSAgICAgICAgc2V0SGVpZ2h0KHN0ZDo6bWF4PEZyYWN0aW9uYWxMYXlvdXRVbml0Pigw
LCBoZWlnaHQoKSAtIGRlbHRhKSk7CisgICAgICAgIHNldEhlaWdodChzdGQ6Om1heDxMYXlvdXRV
bml0PigwLCBoZWlnaHQoKSAtIGRlbHRhKSk7CiAgICAgfQotICAgIHZvaWQgc2hpZnRNYXhZRWRn
ZVRvKEZyYWN0aW9uYWxMYXlvdXRVbml0IGVkZ2UpCisgICAgdm9pZCBzaGlmdE1heFlFZGdlVG8o
TGF5b3V0VW5pdCBlZGdlKQogICAgIHsKLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZGVs
dGEgPSBlZGdlIC0gbWF4WSgpOwotICAgICAgICBzZXRIZWlnaHQoc3RkOjptYXg8RnJhY3Rpb25h
bExheW91dFVuaXQ+KDAsIGhlaWdodCgpICsgZGVsdGEpKTsKKyAgICAgICAgTGF5b3V0VW5pdCBk
ZWx0YSA9IGVkZ2UgLSBtYXhZKCk7CisgICAgICAgIHNldEhlaWdodChzdGQ6Om1heDxMYXlvdXRV
bml0PigwLCBoZWlnaHQoKSArIGRlbHRhKSk7CiAgICAgfQogCi0gICAgRnJhY3Rpb25hbExheW91
dFBvaW50IG1pblhNaW5ZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfSAvLyB0
eXBpY2FsbHkgdG9wTGVmdAotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBtYXhYTWluWUNvcm5l
cigpIGNvbnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChtX2xvY2F0aW9uLngoKSAr
IG1fc2l6ZS53aWR0aCgpLCBtX2xvY2F0aW9uLnkoKSk7IH0gLy8gdHlwaWNhbGx5IHRvcFJpZ2h0
Ci0gICAgRnJhY3Rpb25hbExheW91dFBvaW50IG1pblhNYXhZQ29ybmVyKCkgY29uc3QgeyByZXR1
cm4gRnJhY3Rpb25hbExheW91dFBvaW50KG1fbG9jYXRpb24ueCgpLCBtX2xvY2F0aW9uLnkoKSAr
IG1fc2l6ZS5oZWlnaHQoKSk7IH0gLy8gdHlwaWNhbGx5IGJvdHRvbUxlZnQKLSAgICBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQgbWF4WE1heFlDb3JuZXIoKSBjb25zdCB7IHJldHVybiBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQobV9sb2NhdGlvbi54KCkgKyBtX3NpemUud2lkdGgoKSwgbV9sb2NhdGlvbi55
KCkgKyBtX3NpemUuaGVpZ2h0KCkpOyB9IC8vIHR5cGljYWxseSBib3R0b21SaWdodAorICAgIExh
eW91dFBvaW50IG1pblhNaW5ZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfSAv
LyB0eXBpY2FsbHkgdG9wTGVmdAorICAgIExheW91dFBvaW50IG1heFhNaW5ZQ29ybmVyKCkgY29u
c3QgeyByZXR1cm4gTGF5b3V0UG9pbnQobV9sb2NhdGlvbi54KCkgKyBtX3NpemUud2lkdGgoKSwg
bV9sb2NhdGlvbi55KCkpOyB9IC8vIHR5cGljYWxseSB0b3BSaWdodAorICAgIExheW91dFBvaW50
IG1pblhNYXhZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gTGF5b3V0UG9pbnQobV9sb2NhdGlvbi54
KCksIG1fbG9jYXRpb24ueSgpICsgbV9zaXplLmhlaWdodCgpKTsgfSAvLyB0eXBpY2FsbHkgYm90
dG9tTGVmdAorICAgIExheW91dFBvaW50IG1heFhNYXhZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4g
TGF5b3V0UG9pbnQobV9sb2NhdGlvbi54KCkgKyBtX3NpemUud2lkdGgoKSwgbV9sb2NhdGlvbi55
KCkgKyBtX3NpemUuaGVpZ2h0KCkpOyB9IC8vIHR5cGljYWxseSBib3R0b21SaWdodAogICAgIAot
ICAgIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpIGNvbnN0Owot
ICAgIGJvb2wgY29udGFpbnMoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKSBjb25zdDsKKyAg
ICBib29sIGludGVyc2VjdHMoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OworICAgIGJvb2wgY29u
dGFpbnMoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwogCiAgICAgLy8gVGhpcyBjaGVja3MgdG8g
c2VlIGlmIHRoZSByZWN0IGNvbnRhaW5zIHgseSBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuCiAg
ICAgLy8gRXF1aXZhbGVudCB0byBjaGVja2luZyBpZiB0aGUgcmVjdCBjb250YWlucyBhIDF4MSBy
ZWN0IGJlbG93IGFuZCB0byB0aGUgcmlnaHQgb2YgKHB4LHB5KS4KLSAgICBib29sIGNvbnRhaW5z
KEZyYWN0aW9uYWxMYXlvdXRVbml0IHB4LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBweSkgY29uc3QK
KyAgICBib29sIGNvbnRhaW5zKExheW91dFVuaXQgcHgsIExheW91dFVuaXQgcHkpIGNvbnN0CiAg
ICAgICAgIHsgcmV0dXJuIHB4ID49IHgoKSAmJiBweCA8IG1heFgoKSAmJiBweSA+PSB5KCkgJiYg
cHkgPCBtYXhZKCk7IH0KLSAgICBib29sIGNvbnRhaW5zKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgp
KTsgfQorICAgIGJvb2wgY29udGFpbnMoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KSBjb25zdCB7
IHJldHVybiBjb250YWlucyhwb2ludC54KCksIHBvaW50LnkoKSk7IH0KIAotICAgIHZvaWQgaW50
ZXJzZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0Jik7Ci0gICAgdm9pZCB1bml0ZShjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpOwotICAgIHZvaWQgdW5pdGVJZk5vblplcm8oY29uc3Qg
RnJhY3Rpb25hbExheW91dFJlY3QmKTsKKyAgICB2b2lkIGludGVyc2VjdChjb25zdCBMYXlvdXRS
ZWN0Jik7CisgICAgdm9pZCB1bml0ZShjb25zdCBMYXlvdXRSZWN0Jik7CisgICAgdm9pZCB1bml0
ZUlmTm9uWmVybyhjb25zdCBMYXlvdXRSZWN0Jik7CiAKLSAgICB2b2lkIGluZmxhdGVYKEZyYWN0
aW9uYWxMYXlvdXRVbml0IGR4KQorICAgIHZvaWQgaW5mbGF0ZVgoTGF5b3V0VW5pdCBkeCkKICAg
ICB7CiAgICAgICAgIG1fbG9jYXRpb24uc2V0WChtX2xvY2F0aW9uLngoKSAtIGR4KTsKICAgICAg
ICAgbV9zaXplLnNldFdpZHRoKG1fc2l6ZS53aWR0aCgpICsgZHggKyBkeCk7CiAgICAgfQotICAg
IHZvaWQgaW5mbGF0ZVkoRnJhY3Rpb25hbExheW91dFVuaXQgZHkpCisgICAgdm9pZCBpbmZsYXRl
WShMYXlvdXRVbml0IGR5KQogICAgIHsKICAgICAgICAgbV9sb2NhdGlvbi5zZXRZKG1fbG9jYXRp
b24ueSgpIC0gZHkpOwogICAgICAgICBtX3NpemUuc2V0SGVpZ2h0KG1fc2l6ZS5oZWlnaHQoKSAr
IGR5ICsgZHkpOwogICAgIH0KLSAgICB2b2lkIGluZmxhdGUoRnJhY3Rpb25hbExheW91dFVuaXQg
ZCkgeyBpbmZsYXRlWChkKTsgaW5mbGF0ZVkoZCk7IH0KKyAgICB2b2lkIGluZmxhdGUoTGF5b3V0
VW5pdCBkKSB7IGluZmxhdGVYKGQpOyBpbmZsYXRlWShkKTsgfQogICAgIHZvaWQgc2NhbGUoZmxv
YXQgcyk7CiAKLSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCB0cmFuc3Bvc2VkUmVjdCgpIGNvbnN0
IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRSZWN0KG1fbG9jYXRpb24udHJhbnNwb3NlZFBvaW50
KCksIG1fc2l6ZS50cmFuc3Bvc2VkU2l6ZSgpKTsgfQorICAgIExheW91dFJlY3QgdHJhbnNwb3Nl
ZFJlY3QoKSBjb25zdCB7IHJldHVybiBMYXlvdXRSZWN0KG1fbG9jYXRpb24udHJhbnNwb3NlZFBv
aW50KCksIG1fc2l6ZS50cmFuc3Bvc2VkU2l6ZSgpKTsgfQogCi0gICAgc3RhdGljIEZyYWN0aW9u
YWxMYXlvdXRSZWN0IGluZmluaXRlUmVjdCgpCisgICAgc3RhdGljIExheW91dFJlY3QgaW5maW5p
dGVSZWN0KCkKICAgICB7CiAgICAgICAgIC8vIFJldHVybiBhIHJlY3QgdGhhdCBpcyBzbGlnaHRs
eSBzbWFsbGVyIHRoYW4gdGhlIHRydWUgbWF4IHJlY3QgdG8gYWxsb3cgcGl4ZWxTbmFwcGluZyB0
byByb3VuZCB1cCB0byB0aGUgbmVhcmVzdCBJbnRSZWN0IHdpdGhvdXQgb3ZlcmZsb3dpbmcuCi0g
ICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UmVjdChGcmFjdGlvbmFsTGF5b3V0VW5pdDo6
bmVhcmx5TWluKCkgLyAyLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bmVhcmx5TWluKCkgLyAyLCBG
cmFjdGlvbmFsTGF5b3V0VW5pdDo6bmVhcmx5TWF4KCksIEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpu
ZWFybHlNYXgoKSk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KExheW91dFVuaXQ6Om5lYXJs
eU1pbigpIC8gMiwgTGF5b3V0VW5pdDo6bmVhcmx5TWluKCkgLyAyLCBMYXlvdXRVbml0OjpuZWFy
bHlNYXgoKSwgTGF5b3V0VW5pdDo6bmVhcmx5TWF4KCkpOwogICAgIH0KIAogI2lmIFBMQVRGT1JN
KFFUKQotICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IFFSZWN0Jik7Ci0g
ICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgUVJlY3RGJik7CisgICAgZXhw
bGljaXQgTGF5b3V0UmVjdChjb25zdCBRUmVjdCYpOworICAgIGV4cGxpY2l0IExheW91dFJlY3Qo
Y29uc3QgUVJlY3RGJik7CiAgICAgb3BlcmF0b3IgUVJlY3RGKCkgY29uc3Q7CiAjZW5kaWYKIAog
cHJpdmF0ZToKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbV9sb2NhdGlvbjsKLSAgICBGcmFj
dGlvbmFsTGF5b3V0U2l6ZSBtX3NpemU7CisgICAgTGF5b3V0UG9pbnQgbV9sb2NhdGlvbjsKKyAg
ICBMYXlvdXRTaXplIG1fc2l6ZTsKIH07CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UmVjdCBp
bnRlcnNlY3Rpb24oY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRSZWN0JiBiKQoraW5saW5lIExheW91dFJlY3QgaW50ZXJzZWN0aW9uKGNvbnN0IExh
eW91dFJlY3QmIGEsIGNvbnN0IExheW91dFJlY3QmIGIpCiB7Ci0gICAgRnJhY3Rpb25hbExheW91
dFJlY3QgYyA9IGE7CisgICAgTGF5b3V0UmVjdCBjID0gYTsKICAgICBjLmludGVyc2VjdChiKTsK
ICAgICByZXR1cm4gYzsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRSZWN0IHVuaW9uUmVj
dChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFJl
Y3QmIGIpCitpbmxpbmUgTGF5b3V0UmVjdCB1bmlvblJlY3QoY29uc3QgTGF5b3V0UmVjdCYgYSwg
Y29uc3QgTGF5b3V0UmVjdCYgYikKIHsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCBjID0gYTsK
KyAgICBMYXlvdXRSZWN0IGMgPSBhOwogICAgIGMudW5pdGUoYik7CiAgICAgcmV0dXJuIGM7CiB9
CiAKLUZyYWN0aW9uYWxMYXlvdXRSZWN0IHVuaW9uUmVjdChjb25zdCBWZWN0b3I8RnJhY3Rpb25h
bExheW91dFJlY3Q+Jik7CitMYXlvdXRSZWN0IHVuaW9uUmVjdChjb25zdCBWZWN0b3I8TGF5b3V0
UmVjdD4mKTsKIAotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0
UmVjdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGIpCitpbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IExheW91dFJlY3QmIGEsIGNvbnN0IExheW91dFJlY3QmIGIpCiB7CiAgICAg
cmV0dXJuIGEubG9jYXRpb24oKSA9PSBiLmxvY2F0aW9uKCkgJiYgYS5zaXplKCkgPT0gYi5zaXpl
KCk7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJhY3Rpb25hbExheW91dFJl
Y3QmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBiKQoraW5saW5lIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBMYXlvdXRSZWN0JiBhLCBjb25zdCBMYXlvdXRSZWN0JiBiKQogewogICAgIHJl
dHVybiBhLmxvY2F0aW9uKCkgIT0gYi5sb2NhdGlvbigpIHx8IGEuc2l6ZSgpICE9IGIuc2l6ZSgp
OwogfQogCi1pbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0KGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRSZWN0JiByZWN0KQoraW5saW5lIEludFJlY3QgcGl4ZWxTbmFwcGVkSW50UmVjdChj
b25zdCBMYXlvdXRSZWN0JiByZWN0KQogewogI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCiAg
ICAgcmV0dXJuIEludFJlY3Qocm91bmRlZEludFBvaW50KHJlY3QubG9jYXRpb24oKSksIEludFNp
emUoc25hcFNpemVUb1BpeGVsKHJlY3Qud2lkdGgoKSwgcmVjdC54KCkpLApAQCAtMjE5LDkgKzIx
OSwyNSBAQCBpbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0KGNvbnN0CiAjZW5kaWYK
IH0KIAotSW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0
Jik7Ci1GcmFjdGlvbmFsTGF5b3V0UmVjdCBlbmNsb3NpbmdGcmFjdGlvbmFsTGF5b3V0UmVjdChj
b25zdCBGbG9hdFJlY3QmKTsKK0ludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBMYXlvdXRS
ZWN0Jik7CitMYXlvdXRSZWN0IGVuY2xvc2luZ0xheW91dFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7
CisKK2lubGluZSBJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3QoTGF5b3V0VW5pdCBsZWZ0LCBM
YXlvdXRVbml0IHRvcCwgTGF5b3V0VW5pdCB3aWR0aCwgTGF5b3V0VW5pdCBoZWlnaHQpCit7Cisg
ICAgcmV0dXJuIEludFJlY3QobGVmdC5yb3VuZCgpLCB0b3Aucm91bmQoKSwgc25hcFNpemVUb1Bp
eGVsKHdpZHRoLCBsZWZ0KSwgc25hcFNpemVUb1BpeGVsKGhlaWdodCwgdG9wKSk7Cit9CisKK2lu
bGluZSBJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3RGcm9tRWRnZXMoTGF5b3V0VW5pdCBsZWZ0
LCBMYXlvdXRVbml0IHRvcCwgTGF5b3V0VW5pdCByaWdodCwgTGF5b3V0VW5pdCBib3R0b20pCit7
CisgICAgcmV0dXJuIEludFJlY3QobGVmdC5yb3VuZCgpLCB0b3Aucm91bmQoKSwgc25hcFNpemVU
b1BpeGVsKHJpZ2h0IC0gbGVmdCwgbGVmdCksIHNuYXBTaXplVG9QaXhlbChib3R0b20gLSB0b3As
IHRvcCkpOworfQorCitpbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0KExheW91dFBv
aW50IGxvY2F0aW9uLCBMYXlvdXRTaXplIHNpemUpCit7CisgICAgcmV0dXJuIEludFJlY3Qocm91
bmRlZEludFBvaW50KGxvY2F0aW9uKSwgcGl4ZWxTbmFwcGVkSW50U2l6ZShzaXplLCBsb2NhdGlv
bikpOworfQorCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEZyYWN0aW9u
YWxMYXlvdXRSZWN0X2gKKyNlbmRpZiAvLyBMYXlvdXRSZWN0X2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFNpemUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRTaXplLmgJKHJldmlzaW9uIDEzMzUxNykJ
KGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFNp
emUuaDoxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRT
aXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGcmFjdGlvbmFs
TGF5b3V0U2l6ZV9oCisjZGVmaW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplX2gKKworI2luY2x1ZGUg
IkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRVbml0LmgiCisjaW5jbHVk
ZSAiSW50U2l6ZS5oIgorCisjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8cWdsb2JhbC5oPgor
UVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRU2l6ZTsKK2NsYXNzIFFTaXplRjsKK1FUX0VORF9O
QU1FU1BBQ0UKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZyYWN0aW9u
YWxMYXlvdXRQb2ludDsKKworY2xhc3MgRnJhY3Rpb25hbExheW91dFNpemUgeworcHVibGljOgor
ICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplKCkgOiBtX3dpZHRoKDApLCBtX2hlaWdodCgwKSB7IH0K
KyAgICBGcmFjdGlvbmFsTGF5b3V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKSA6IG1fd2lkdGgo
c2l6ZS53aWR0aCgpKSwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkgeyB9CisgICAgRnJhY3Rpb25h
bExheW91dFNpemUoRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgsIEZyYWN0aW9uYWxMYXlvdXRV
bml0IGhlaWdodCkgOiBtX3dpZHRoKHdpZHRoKSwgbV9oZWlnaHQoaGVpZ2h0KSB7IH0KKworICAg
IGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgOiBt
X3dpZHRoKHNpemUud2lkdGgoKSksIG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkpIHsgfQorICAgIAor
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsg
fQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVp
Z2h0OyB9CisKKyAgICB2b2lkIHNldFdpZHRoKEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKSB7
IG1fd2lkdGggPSB3aWR0aDsgfQorICAgIHZvaWQgc2V0SGVpZ2h0KEZyYWN0aW9uYWxMYXlvdXRV
bml0IGhlaWdodCkgeyBtX2hlaWdodCA9IGhlaWdodDsgfQorCisgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gbV93aWR0aCA8PSAwIHx8IG1faGVpZ2h0IDw9IDA7IH0KKyAgICBib29s
IGlzWmVybygpIGNvbnN0IHsgcmV0dXJuICFtX3dpZHRoICYmICFtX2hlaWdodDsgfQorCisgICAg
ZmxvYXQgYXNwZWN0UmF0aW8oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obV93
aWR0aCkgLyBzdGF0aWNfY2FzdDxmbG9hdD4obV9oZWlnaHQpOyB9CisgICAgCisgICAgdm9pZCBl
eHBhbmQoRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGhl
aWdodCkKKyAgICB7CisgICAgICAgIG1fd2lkdGggKz0gd2lkdGg7CisgICAgICAgIG1faGVpZ2h0
ICs9IGhlaWdodDsKKyAgICB9CisgICAgCisgICAgdm9pZCBzY2FsZShmbG9hdCBzY2FsZSkKKyAg
ICB7CisgICAgICAgIG1fd2lkdGggKj0gc2NhbGU7CisgICAgICAgIG1faGVpZ2h0ICo9IHNjYWxl
OworICAgIH0KKworICAgIHZvaWQgc2NhbGUoZmxvYXQgd2lkdGhTY2FsZSwgZmxvYXQgaGVpZ2h0
U2NhbGUpCisgICAgeworICAgICAgICBtX3dpZHRoICo9IHdpZHRoU2NhbGU7CisgICAgICAgIG1f
aGVpZ2h0ICo9IGhlaWdodFNjYWxlOworICAgIH0KKyAgICAKKyAgICBGcmFjdGlvbmFsTGF5b3V0
U2l6ZSBleHBhbmRlZFRvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShtX3dpZHRoID4gb3Ro
ZXIubV93aWR0aCA/IG1fd2lkdGggOiBvdGhlci5tX3dpZHRoLAorICAgICAgICAgICAgbV9oZWln
aHQgPiBvdGhlci5tX2hlaWdodCA/IG1faGVpZ2h0IDogb3RoZXIubV9oZWlnaHQpOworICAgIH0K
KworICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplIHNocnVua1RvKGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRTaXplJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5
b3V0U2l6ZShtX3dpZHRoIDwgb3RoZXIubV93aWR0aCA/IG1fd2lkdGggOiBvdGhlci5tX3dpZHRo
LAorICAgICAgICAgICAgbV9oZWlnaHQgPCBvdGhlci5tX2hlaWdodCA/IG1faGVpZ2h0IDogb3Ro
ZXIubV9oZWlnaHQpOworICAgIH0KKworICAgIHZvaWQgY2xhbXBOZWdhdGl2ZVRvWmVybygpCisg
ICAgeworICAgICAgICAqdGhpcyA9IGV4cGFuZGVkVG8oRnJhY3Rpb25hbExheW91dFNpemUoKSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgY2xhbXBUb01pbmltdW1TaXplKGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRTaXplJiBtaW5pbXVtU2l6ZSkKKyAgICB7CisgICAgICAgIGlmIChtX3dpZHRoIDwg
bWluaW11bVNpemUud2lkdGgoKSkKKyAgICAgICAgICAgIG1fd2lkdGggPSBtaW5pbXVtU2l6ZS53
aWR0aCgpOworICAgICAgICBpZiAobV9oZWlnaHQgPCBtaW5pbXVtU2l6ZS5oZWlnaHQoKSkKKyAg
ICAgICAgICAgIG1faGVpZ2h0ID0gbWluaW11bVNpemUuaGVpZ2h0KCk7CisgICAgfQorCisgICAg
RnJhY3Rpb25hbExheW91dFNpemUgdHJhbnNwb3NlZFNpemUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKG1faGVpZ2h0LCBtX3dpZHRoKTsKKyAgICB9
CisKKyNpZiBQTEFURk9STShRVCkKKyAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZShj
b25zdCBRU2l6ZSYpOworICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0IFFT
aXplRiYpOworICAgIG9wZXJhdG9yIFFTaXplRigpIGNvbnN0OworI2VuZGlmCisKK3ByaXZhdGU6
CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbV93aWR0aCwgbV9oZWlnaHQ7Cit9OworCitpbmxp
bmUgRnJhY3Rpb25hbExheW91dFNpemUmIG9wZXJhdG9yKz0oRnJhY3Rpb25hbExheW91dFNpemUm
IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQoreworICAgIGEuc2V0V2lkdGgoYS53
aWR0aCgpICsgYi53aWR0aCgpKTsKKyAgICBhLnNldEhlaWdodChhLmhlaWdodCgpICsgYi5oZWln
aHQoKSk7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYg
b3BlcmF0b3ItPShGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91
dFNpemUmIGIpCit7CisgICAgYS5zZXRXaWR0aChhLndpZHRoKCkgLSBiLndpZHRoKCkpOworICAg
IGEuc2V0SGVpZ2h0KGEuaGVpZ2h0KCkgLSBiLmhlaWdodCgpKTsKKyAgICByZXR1cm4gYTsKK30K
KworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplIG9wZXJhdG9yKyhjb25zdCBGcmFjdGlvbmFs
TGF5b3V0U2l6ZSYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCit7CisgICAgcmV0
dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKGEud2lkdGgoKSArIGIud2lkdGgoKSwgYS5oZWlnaHQo
KSArIGIuaGVpZ2h0KCkpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFNpemUgb3BlcmF0
b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0
U2l6ZSYgYikKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUoYS53aWR0aCgpIC0g
Yi53aWR0aCgpLCBhLmhlaWdodCgpIC0gYi5oZWlnaHQoKSk7Cit9CisKK2lubGluZSBGcmFjdGlv
bmFsTGF5b3V0U2l6ZSBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUp
Cit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKC1zaXplLndpZHRoKCksIC1zaXpl
LmhlaWdodCgpKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFs
TGF5b3V0U2l6ZSYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCit7CisgICAgcmV0
dXJuIGEud2lkdGgoKSA9PSBiLndpZHRoKCkgJiYgYS5oZWlnaHQoKSA9PSBiLmhlaWdodCgpOwor
fQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK3sKKyAgICByZXR1cm4gYS53aWR0aCgp
ICE9IGIud2lkdGgoKSB8fCBhLmhlaWdodCgpICE9IGIuaGVpZ2h0KCk7Cit9CisKK2lubGluZSBJ
bnRTaXplIGZsb29yZWRJbnRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzKQorewor
ICAgIHJldHVybiBJbnRTaXplKHMud2lkdGgoKS5mbG9vcigpLCBzLmhlaWdodCgpLmZsb29yKCkp
OworfQorCitpbmxpbmUgSW50U2l6ZSByb3VuZGVkSW50U2l6ZShjb25zdCBGcmFjdGlvbmFsTGF5
b3V0U2l6ZSYgcykKK3sKKyAgICByZXR1cm4gSW50U2l6ZShzLndpZHRoKCkucm91bmQoKSwgcy5o
ZWlnaHQoKS5yb3VuZCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRnJhY3Rpb25hbExheW91dFNpemVfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTGF5b3V0U2l6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0xheW91dFNpemUuaAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0U2l6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCwxMiArMjgsMTIgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBGcmFjdGlvbmFs
TGF5b3V0U2l6ZV9oCi0jZGVmaW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplX2gKKyNpZm5kZWYgTGF5
b3V0U2l6ZV9oCisjZGVmaW5lIExheW91dFNpemVfaAogCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgi
Ci0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFVuaXQuaCIKICNpbmNsdWRlICJJbnRTaXplLmgi
CisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgogCiAjaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSA8
cWdsb2JhbC5oPgpAQCAtNDUsMjggKzQ1LDI4IEBAIFFUX0VORF9OQU1FU1BBQ0UKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0UG9pbnQ7CitjbGFzcyBMYXlv
dXRQb2ludDsKIAotY2xhc3MgRnJhY3Rpb25hbExheW91dFNpemUgeworY2xhc3MgTGF5b3V0U2l6
ZSB7CiBwdWJsaWM6Ci0gICAgRnJhY3Rpb25hbExheW91dFNpemUoKSA6IG1fd2lkdGgoMCksIG1f
aGVpZ2h0KDApIHsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0IEludFNpemUmIHNp
emUpIDogbV93aWR0aChzaXplLndpZHRoKCkpLCBtX2hlaWdodChzaXplLmhlaWdodCgpKSB7IH0K
LSAgICBGcmFjdGlvbmFsTGF5b3V0U2l6ZShGcmFjdGlvbmFsTGF5b3V0VW5pdCB3aWR0aCwgRnJh
Y3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KSA6IG1fd2lkdGgod2lkdGgpLCBtX2hlaWdodChoZWln
aHQpIHsgfQorICAgIExheW91dFNpemUoKSA6IG1fd2lkdGgoMCksIG1faGVpZ2h0KDApIHsgfQor
ICAgIExheW91dFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgOiBtX3dpZHRoKHNpemUud2lkdGgo
KSksIG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkpIHsgfQorICAgIExheW91dFNpemUoTGF5b3V0VW5p
dCB3aWR0aCwgTGF5b3V0VW5pdCBoZWlnaHQpIDogbV93aWR0aCh3aWR0aCksIG1faGVpZ2h0KGhl
aWdodCkgeyB9CiAKLSAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZShjb25zdCBGbG9h
dFNpemUmIHNpemUpIDogbV93aWR0aChzaXplLndpZHRoKCkpLCBtX2hlaWdodChzaXplLmhlaWdo
dCgpKSB7IH0KKyAgICBleHBsaWNpdCBMYXlvdXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkg
OiBtX3dpZHRoKHNpemUud2lkdGgoKSksIG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkpIHsgfQogICAg
IAotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0
aDsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1f
aGVpZ2h0OyB9CisgICAgTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7
IH0KKyAgICBMYXlvdXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9CiAK
LSAgICB2b2lkIHNldFdpZHRoKEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKSB7IG1fd2lkdGgg
PSB3aWR0aDsgfQotICAgIHZvaWQgc2V0SGVpZ2h0KEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdo
dCkgeyBtX2hlaWdodCA9IGhlaWdodDsgfQorICAgIHZvaWQgc2V0V2lkdGgoTGF5b3V0VW5pdCB3
aWR0aCkgeyBtX3dpZHRoID0gd2lkdGg7IH0KKyAgICB2b2lkIHNldEhlaWdodChMYXlvdXRVbml0
IGhlaWdodCkgeyBtX2hlaWdodCA9IGhlaWdodDsgfQogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QgeyByZXR1cm4gbV93aWR0aCA8PSAwIHx8IG1faGVpZ2h0IDw9IDA7IH0KICAgICBib29sIGlz
WmVybygpIGNvbnN0IHsgcmV0dXJuICFtX3dpZHRoICYmICFtX2hlaWdodDsgfQogCiAgICAgZmxv
YXQgYXNwZWN0UmF0aW8oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obV93aWR0
aCkgLyBzdGF0aWNfY2FzdDxmbG9hdD4obV9oZWlnaHQpOyB9CiAgICAgCi0gICAgdm9pZCBleHBh
bmQoRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdo
dCkKKyAgICB2b2lkIGV4cGFuZChMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IGhlaWdodCkK
ICAgICB7CiAgICAgICAgIG1fd2lkdGggKz0gd2lkdGg7CiAgICAgICAgIG1faGVpZ2h0ICs9IGhl
aWdodDsKQEAgLTg0LDI0ICs4NCwyNCBAQCBwdWJsaWM6CiAgICAgICAgIG1faGVpZ2h0ICo9IGhl
aWdodFNjYWxlOwogICAgIH0KICAgICAKLSAgICBGcmFjdGlvbmFsTGF5b3V0U2l6ZSBleHBhbmRl
ZFRvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBvdGhlcikgY29uc3QKKyAgICBMYXlvdXRT
aXplIGV4cGFuZGVkVG8oY29uc3QgTGF5b3V0U2l6ZSYgb3RoZXIpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUobV93aWR0aCA+IG90aGVyLm1fd2lkdGgg
PyBtX3dpZHRoIDogb3RoZXIubV93aWR0aCwKKyAgICAgICAgcmV0dXJuIExheW91dFNpemUobV93
aWR0aCA+IG90aGVyLm1fd2lkdGggPyBtX3dpZHRoIDogb3RoZXIubV93aWR0aCwKICAgICAgICAg
ICAgIG1faGVpZ2h0ID4gb3RoZXIubV9oZWlnaHQgPyBtX2hlaWdodCA6IG90aGVyLm1faGVpZ2h0
KTsKICAgICB9CiAKLSAgICBGcmFjdGlvbmFsTGF5b3V0U2l6ZSBzaHJ1bmtUbyhjb25zdCBGcmFj
dGlvbmFsTGF5b3V0U2l6ZSYgb3RoZXIpIGNvbnN0CisgICAgTGF5b3V0U2l6ZSBzaHJ1bmtUbyhj
b25zdCBMYXlvdXRTaXplJiBvdGhlcikgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBGcmFj
dGlvbmFsTGF5b3V0U2l6ZShtX3dpZHRoIDwgb3RoZXIubV93aWR0aCA/IG1fd2lkdGggOiBvdGhl
ci5tX3dpZHRoLAorICAgICAgICByZXR1cm4gTGF5b3V0U2l6ZShtX3dpZHRoIDwgb3RoZXIubV93
aWR0aCA/IG1fd2lkdGggOiBvdGhlci5tX3dpZHRoLAogICAgICAgICAgICAgbV9oZWlnaHQgPCBv
dGhlci5tX2hlaWdodCA/IG1faGVpZ2h0IDogb3RoZXIubV9oZWlnaHQpOwogICAgIH0KIAogICAg
IHZvaWQgY2xhbXBOZWdhdGl2ZVRvWmVybygpCiAgICAgewotICAgICAgICAqdGhpcyA9IGV4cGFu
ZGVkVG8oRnJhY3Rpb25hbExheW91dFNpemUoKSk7CisgICAgICAgICp0aGlzID0gZXhwYW5kZWRU
byhMYXlvdXRTaXplKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNsYW1wVG9NaW5pbXVtU2l6
ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgbWluaW11bVNpemUpCisgICAgdm9pZCBjbGFt
cFRvTWluaW11bVNpemUoY29uc3QgTGF5b3V0U2l6ZSYgbWluaW11bVNpemUpCiAgICAgewogICAg
ICAgICBpZiAobV93aWR0aCA8IG1pbmltdW1TaXplLndpZHRoKCkpCiAgICAgICAgICAgICBtX3dp
ZHRoID0gbWluaW11bVNpemUud2lkdGgoKTsKQEAgLTEwOSw3MCArMTA5LDc5IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIG1faGVpZ2h0ID0gbWluaW11bVNpemUuaGVpZ2h0KCk7CiAgICAgfQogCi0g
ICAgRnJhY3Rpb25hbExheW91dFNpemUgdHJhbnNwb3NlZFNpemUoKSBjb25zdAorICAgIExheW91
dFNpemUgdHJhbnNwb3NlZFNpemUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIEZyYWN0
aW9uYWxMYXlvdXRTaXplKG1faGVpZ2h0LCBtX3dpZHRoKTsKKyAgICAgICAgcmV0dXJuIExheW91
dFNpemUobV9oZWlnaHQsIG1fd2lkdGgpOwogICAgIH0KIAogI2lmIFBMQVRGT1JNKFFUKQotICAg
IGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0IFFTaXplJik7Ci0gICAgZXhwbGlj
aXQgRnJhY3Rpb25hbExheW91dFNpemUoY29uc3QgUVNpemVGJik7CisgICAgZXhwbGljaXQgTGF5
b3V0U2l6ZShjb25zdCBRU2l6ZSYpOworICAgIGV4cGxpY2l0IExheW91dFNpemUoY29uc3QgUVNp
emVGJik7CiAgICAgb3BlcmF0b3IgUVNpemVGKCkgY29uc3Q7CiAjZW5kaWYKIAogcHJpdmF0ZToK
LSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtX3dpZHRoLCBtX2hlaWdodDsKKyAgICBMYXlvdXRV
bml0IG1fd2lkdGgsIG1faGVpZ2h0OwogfTsKIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXpl
JiBvcGVyYXRvcis9KEZyYWN0aW9uYWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0U2l6ZSYgYikKK2lubGluZSBMYXlvdXRTaXplJiBvcGVyYXRvcis9KExheW91dFNpemUmIGEs
IGNvbnN0IExheW91dFNpemUmIGIpCiB7CiAgICAgYS5zZXRXaWR0aChhLndpZHRoKCkgKyBiLndp
ZHRoKCkpOwogICAgIGEuc2V0SGVpZ2h0KGEuaGVpZ2h0KCkgKyBiLmhlaWdodCgpKTsKICAgICBy
ZXR1cm4gYTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplJiBvcGVyYXRvci09KEZy
YWN0aW9uYWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK2lu
bGluZSBMYXlvdXRTaXplJiBvcGVyYXRvci09KExheW91dFNpemUmIGEsIGNvbnN0IExheW91dFNp
emUmIGIpCiB7CiAgICAgYS5zZXRXaWR0aChhLndpZHRoKCkgLSBiLndpZHRoKCkpOwogICAgIGEu
c2V0SGVpZ2h0KGEuaGVpZ2h0KCkgLSBiLmhlaWdodCgpKTsKICAgICByZXR1cm4gYTsKIH0KIAot
aW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplIG9wZXJhdG9yKyhjb25zdCBGcmFjdGlvbmFsTGF5
b3V0U2l6ZSYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCitpbmxpbmUgTGF5b3V0
U2l6ZSBvcGVyYXRvcisoY29uc3QgTGF5b3V0U2l6ZSYgYSwgY29uc3QgTGF5b3V0U2l6ZSYgYikK
IHsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUoYS53aWR0aCgpICsgYi53aWR0aCgp
LCBhLmhlaWdodCgpICsgYi5oZWlnaHQoKSk7CisgICAgcmV0dXJuIExheW91dFNpemUoYS53aWR0
aCgpICsgYi53aWR0aCgpLCBhLmhlaWdodCgpICsgYi5oZWlnaHQoKSk7CiB9CiAKLWlubGluZSBG
cmFjdGlvbmFsTGF5b3V0U2l6ZSBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUm
IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQoraW5saW5lIExheW91dFNpemUgb3Bl
cmF0b3ItKGNvbnN0IExheW91dFNpemUmIGEsIGNvbnN0IExheW91dFNpemUmIGIpCiB7Ci0gICAg
cmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKGEud2lkdGgoKSAtIGIud2lkdGgoKSwgYS5oZWln
aHQoKSAtIGIuaGVpZ2h0KCkpOworICAgIHJldHVybiBMYXlvdXRTaXplKGEud2lkdGgoKSAtIGIu
d2lkdGgoKSwgYS5oZWlnaHQoKSAtIGIuaGVpZ2h0KCkpOwogfQogCi1pbmxpbmUgRnJhY3Rpb25h
bExheW91dFNpemUgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKQor
aW5saW5lIExheW91dFNpemUgb3BlcmF0b3ItKGNvbnN0IExheW91dFNpemUmIHNpemUpCiB7Ci0g
ICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKC1zaXplLndpZHRoKCksIC1zaXplLmhlaWdo
dCgpKTsKKyAgICByZXR1cm4gTGF5b3V0U2l6ZSgtc2l6ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQo
KSk7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJhY3Rpb25hbExheW91dFNp
emUmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQoraW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBMYXlvdXRTaXplJiBhLCBjb25zdCBMYXlvdXRTaXplJiBiKQogewogICAgIHJl
dHVybiBhLndpZHRoKCkgPT0gYi53aWR0aCgpICYmIGEuaGVpZ2h0KCkgPT0gYi5oZWlnaHQoKTsK
IH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYg
YSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IExheW91dFNpemUmIGEsIGNvbnN0IExheW91dFNpemUmIGIpCiB7CiAgICAgcmV0dXJu
IGEud2lkdGgoKSAhPSBiLndpZHRoKCkgfHwgYS5oZWlnaHQoKSAhPSBiLmhlaWdodCgpOwogfQog
Ci1pbmxpbmUgSW50U2l6ZSBmbG9vcmVkSW50U2l6ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6
ZSYgcykKK2lubGluZSBJbnRTaXplIGZsb29yZWRJbnRTaXplKGNvbnN0IExheW91dFNpemUmIHMp
CiB7CiAgICAgcmV0dXJuIEludFNpemUocy53aWR0aCgpLmZsb29yKCksIHMuaGVpZ2h0KCkuZmxv
b3IoKSk7CiB9CiAKLWlubGluZSBJbnRTaXplIHJvdW5kZWRJbnRTaXplKGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRTaXplJiBzKQoraW5saW5lIEludFNpemUgcm91bmRlZEludFNpemUoY29uc3QgTGF5
b3V0U2l6ZSYgcykKIHsKICAgICByZXR1cm4gSW50U2l6ZShzLndpZHRoKCkucm91bmQoKSwgcy5o
ZWlnaHQoKS5yb3VuZCgpKTsKIH0KIAoraW5saW5lIExheW91dFNpemUgcm91bmRlZExheW91dFNp
emUoY29uc3QgRmxvYXRTaXplJiBzKQoreworI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisg
ICAgcmV0dXJuIExheW91dFNpemUocyk7CisjZWxzZQorICAgIHJldHVybiByb3VuZGVkSW50U2l6
ZShzKTsKKyNlbmRpZgorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBG
cmFjdGlvbmFsTGF5b3V0U2l6ZV9oCisjZW5kaWYgLy8gTGF5b3V0U2l6ZV9oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgJKHJldmlzaW9u
IDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkludFJlY3Qu
aCIKICNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXNJbmxpbmVNZXRob2Rz
LmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJPcGVyYXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0N1c3RvbUZpbHRlck9wZXJhdGlvbi5oCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlck9wZXJhdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUGFy
YW1ldGVyTGlzdC5oIgogI2luY2x1ZGUgIkN1c3RvbUZpbHRlclByb2dyYW0uaCIKICNpbmNsdWRl
ICJGaWx0ZXJPcGVyYXRpb24uaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUg
IkxheW91dFNpemUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclBhcmFtZXRlckxpc3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0N1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QuaAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQYXJhbWV0ZXJM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNkZWZpbmUgQ3VzdG9tRmls
dGVyUGFyYW1ldGVyTGlzdF9oCiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0jaW5jbHVkZSAi
TGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmgJ
KHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyT3BlcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAK
ICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUg
IkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgogI2luY2x1ZGUgIkxlbmd0
aC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJP
cGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQog
CiAjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIK
ICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1ZhbGlkYXRlZEN1c3Rv
bUZpbHRlck9wZXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9WYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwCShy
ZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1ZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDcgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkN1c3RvbUZpbHRlclBhcmFtZXRlci5oIgogI2lu
Y2x1ZGUgIkN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0uaCIKLSNpbmNsdWRlICJGcmFjdGlv
bmFsTGF5b3V0U2l6ZS5oIgorI2luY2x1ZGUgIkxheW91dFNpemUuaCIKICNpbmNsdWRlIDx3dGYv
VW51c2VkUGFyYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9WYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1ZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5oCShyZXZpc2lvbiAxMzM1MTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1ZhbGlkYXRlZEN1c3Rv
bUZpbHRlck9wZXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAjaW5j
bHVkZSAiQ3VzdG9tRmlsdGVyQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUGFy
YW1ldGVyTGlzdC5oIgogI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIkxh
eW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9u
YWxMYXlvdXRQb2ludFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9GcmFjdGlvbmFsTGF5b3V0UG9pbnRRdC5jcHAJKHJldmlzaW9uIDEzMzUx
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxMYXlv
dXRQb2ludFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0NSArMCwwIEBACi0vKgotICAgIENv
cHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91
dFBvaW50LmgiCi0KLSNpbmNsdWRlIDxRUG9pbnQ+Ci0jaW5jbHVkZSA8UVBvaW50Rj4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1GcmFjdGlvbmFsTGF5b3V0UG9pbnQ6OkZyYWN0aW9uYWxMYXlv
dXRQb2ludChjb25zdCBRUG9pbnQmIHBvaW50KQotICAgIDogbV94KHBvaW50LngoKSkKLSAgICAs
IG1feShwb2ludC55KCkpCi17Ci19Ci0KLUZyYWN0aW9uYWxMYXlvdXRQb2ludDo6RnJhY3Rpb25h
bExheW91dFBvaW50KGNvbnN0IFFQb2ludEYmIHBvaW50KQotICAgIDogbV94KHBvaW50LngoKSkK
LSAgICAsIG1feShwb2ludC55KCkpCi17Ci19Ci0KLUZyYWN0aW9uYWxMYXlvdXRQb2ludDo6b3Bl
cmF0b3IgUVBvaW50RigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFFQb2ludEYobV94LCBtX3kpOwot
fQotCi19IC8vIG5hbWVzcGFjZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvRnJhY3Rpb25hbExheW91dFJlY3RRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFJlY3RRdC5jcHAJKHJl
dmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0Zy
YWN0aW9uYWxMYXlvdXRSZWN0UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ1ICswLDAgQEAK
LS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGcmFj
dGlvbmFsTGF5b3V0UmVjdC5oIgotCi0jaW5jbHVkZSA8UVJlY3Q+Ci0jaW5jbHVkZSA8UVJlY3RG
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZyYWN0aW9uYWxMYXlvdXRSZWN0OjpGcmFjdGlv
bmFsTGF5b3V0UmVjdChjb25zdCBRUmVjdCYgcikKLSAgICA6IG1fbG9jYXRpb24oci50b3BMZWZ0
KCkpCi0gICAgLCBtX3NpemUoci53aWR0aCgpLCByLmhlaWdodCgpKQotewotfQotCi1GcmFjdGlv
bmFsTGF5b3V0UmVjdDo6RnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgUVJlY3RGJiByKQotICAg
IDogbV9sb2NhdGlvbihyLnRvcExlZnQoKSkKLSAgICAsIG1fc2l6ZShyLndpZHRoKCksIHIuaGVp
Z2h0KCkpCi17Ci19Ci0KLUZyYWN0aW9uYWxMYXlvdXRSZWN0OjpvcGVyYXRvciBRUmVjdEYoKSBj
b25zdAotewotICAgIHJldHVybiBRUmVjdEYoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0ZyYWN0aW9uYWxMYXlvdXRTaXplUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxMYXlvdXRTaXplUXQuY3BwCShy
ZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9G
cmFjdGlvbmFsTGF5b3V0U2l6ZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0NiArMCwwIEBA
Ci0vKgotICAgIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJG
cmFjdGlvbmFsTGF5b3V0U2l6ZS5oIgotCi0jaW5jbHVkZSA8UVNpemU+Ci0jaW5jbHVkZSA8UVNp
emVGPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZyYWN0aW9uYWxMYXlvdXRTaXplOjpGcmFj
dGlvbmFsTGF5b3V0U2l6ZShjb25zdCBRU2l6ZSYgc2l6ZSkKLSAgICA6IG1fd2lkdGgoc2l6ZS53
aWR0aCgpKQotICAgICwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkKLXsKLX0KLQotRnJhY3Rpb25h
bExheW91dFNpemU6OkZyYWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0IFFTaXplRiYgc2l6ZSkKLSAg
ICA6IG1fd2lkdGgoc2l6ZS53aWR0aCgpKQotICAgICwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkK
LXsKLX0KLQotRnJhY3Rpb25hbExheW91dFNpemU6Om9wZXJhdG9yIFFTaXplRigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIFFTaXplRih3aWR0aCgpLCBoZWlnaHQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9MYXlvdXRQb2lu
dFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9MYXlvdXRQb2ludFF0LmNwcAkocmV2aXNpb24gMTMzNTE3KQkoZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9GcmFjdGlvbmFsTGF5b3V0UG9pbnRRdC5jcHA6MTMzNTE3
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTGF5b3V0UG9pbnRRdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMp
IDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRQb2ludC5oIgor
CisjaW5jbHVkZSA8UVBvaW50PgorI2luY2x1ZGUgPFFQb2ludEY+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworRnJhY3Rpb25hbExheW91dFBvaW50OjpGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29u
c3QgUVBvaW50JiBwb2ludCkKKyAgICA6IG1feChwb2ludC54KCkpCisgICAgLCBtX3kocG9pbnQu
eSgpKQoreworfQorCitGcmFjdGlvbmFsTGF5b3V0UG9pbnQ6OkZyYWN0aW9uYWxMYXlvdXRQb2lu
dChjb25zdCBRUG9pbnRGJiBwb2ludCkKKyAgICA6IG1feChwb2ludC54KCkpCisgICAgLCBtX3ko
cG9pbnQueSgpKQoreworfQorCitGcmFjdGlvbmFsTGF5b3V0UG9pbnQ6Om9wZXJhdG9yIFFQb2lu
dEYoKSBjb25zdAoreworICAgIHJldHVybiBRUG9pbnRGKG1feCwgbV95KTsKK30KKworfSAvLyBu
YW1lc3BhY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0xheW91
dFBvaW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0xheW91dFBvaW50UXQuY3BwCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9MYXlvdXRQb2ludFF0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTgsMjYgKzE4LDI2IEBACiAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRnJhY3Rpb25hbExheW91dFBvaW50LmgiCisjaW5jbHVkZSAiTGF5b3V0UG9pbnQuaCIKIAog
I2luY2x1ZGUgPFFQb2ludD4KICNpbmNsdWRlIDxRUG9pbnRGPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUZyYWN0aW9uYWxMYXlvdXRQb2ludDo6RnJhY3Rpb25hbExheW91dFBvaW50KGNvbnN0
IFFQb2ludCYgcG9pbnQpCitMYXlvdXRQb2ludDo6TGF5b3V0UG9pbnQoY29uc3QgUVBvaW50JiBw
b2ludCkKICAgICA6IG1feChwb2ludC54KCkpCiAgICAgLCBtX3kocG9pbnQueSgpKQogewogfQog
Ci1GcmFjdGlvbmFsTGF5b3V0UG9pbnQ6OkZyYWN0aW9uYWxMYXlvdXRQb2ludChjb25zdCBRUG9p
bnRGJiBwb2ludCkKK0xheW91dFBvaW50OjpMYXlvdXRQb2ludChjb25zdCBRUG9pbnRGJiBwb2lu
dCkKICAgICA6IG1feChwb2ludC54KCkpCiAgICAgLCBtX3kocG9pbnQueSgpKQogewogfQogCi1G
cmFjdGlvbmFsTGF5b3V0UG9pbnQ6Om9wZXJhdG9yIFFQb2ludEYoKSBjb25zdAorTGF5b3V0UG9p
bnQ6Om9wZXJhdG9yIFFQb2ludEYoKSBjb25zdAogewogICAgIHJldHVybiBRUG9pbnRGKG1feCwg
bV95KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0xheW91
dFJlY3RRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvTGF5b3V0UmVjdFF0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0xheW91dFJlY3RRdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDUgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJMYXlvdXRSZWN0LmgiCisKKyNpbmNsdWRlIDxRUmVjdD4KKyNpbmNsdWRlIDxRUmVjdEY+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTGF5b3V0UmVjdDo6TGF5b3V0UmVjdChjb25zdCBR
UmVjdCYgcikKKyAgICA6IG1fbG9jYXRpb24oci50b3BMZWZ0KCkpCisgICAgLCBtX3NpemUoci53
aWR0aCgpLCByLmhlaWdodCgpKQoreworfQorCitMYXlvdXRSZWN0OjpMYXlvdXRSZWN0KGNvbnN0
IFFSZWN0RiYgcikKKyAgICA6IG1fbG9jYXRpb24oci50b3BMZWZ0KCkpCisgICAgLCBtX3NpemUo
ci53aWR0aCgpLCByLmhlaWdodCgpKQoreworfQorCitMYXlvdXRSZWN0OjpvcGVyYXRvciBRUmVj
dEYoKSBjb25zdAoreworICAgIHJldHVybiBRUmVjdEYoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdo
dCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0xheW91dFNpemVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTGF5b3V0U2l6ZVF0LmNwcAkocmV2aXNpb24gMTMzNTE3
KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9GcmFjdGlvbmFsTGF5
b3V0U2l6ZVF0LmNwcDoxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9MYXlvdXRTaXplUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8q
CisgICAgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkZyYWN0
aW9uYWxMYXlvdXRTaXplLmgiCisKKyNpbmNsdWRlIDxRU2l6ZT4KKyNpbmNsdWRlIDxRU2l6ZUY+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRnJhY3Rpb25hbExheW91dFNpemU6OkZyYWN0aW9u
YWxMYXlvdXRTaXplKGNvbnN0IFFTaXplJiBzaXplKQorICAgIDogbV93aWR0aChzaXplLndpZHRo
KCkpCisgICAgLCBtX2hlaWdodChzaXplLmhlaWdodCgpKQoreworfQorCitGcmFjdGlvbmFsTGF5
b3V0U2l6ZTo6RnJhY3Rpb25hbExheW91dFNpemUoY29uc3QgUVNpemVGJiBzaXplKQorICAgIDog
bV93aWR0aChzaXplLndpZHRoKCkpCisgICAgLCBtX2hlaWdodChzaXplLmhlaWdodCgpKQorewor
fQorCitGcmFjdGlvbmFsTGF5b3V0U2l6ZTo6b3BlcmF0b3IgUVNpemVGKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gUVNpemVGKHdpZHRoKCksIGhlaWdodCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0xheW91dFNpemVRdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTGF5
b3V0U2l6ZVF0LmNwcAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvTGF5b3V0U2l6ZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTksMjYg
KzE5LDI2IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2luY2x1ZGUgIkZyYWN0aW9uYWxM
YXlvdXRTaXplLmgiCisjaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgogCiAjaW5jbHVkZSA8UVNpemU+
CiAjaW5jbHVkZSA8UVNpemVGPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZyYWN0aW9uYWxM
YXlvdXRTaXplOjpGcmFjdGlvbmFsTGF5b3V0U2l6ZShjb25zdCBRU2l6ZSYgc2l6ZSkKK0xheW91
dFNpemU6OkxheW91dFNpemUoY29uc3QgUVNpemUmIHNpemUpCiAgICAgOiBtX3dpZHRoKHNpemUu
d2lkdGgoKSkKICAgICAsIG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkpCiB7CiB9CiAKLUZyYWN0aW9u
YWxMYXlvdXRTaXplOjpGcmFjdGlvbmFsTGF5b3V0U2l6ZShjb25zdCBRU2l6ZUYmIHNpemUpCitM
YXlvdXRTaXplOjpMYXlvdXRTaXplKGNvbnN0IFFTaXplRiYgc2l6ZSkKICAgICA6IG1fd2lkdGgo
c2l6ZS53aWR0aCgpKQogICAgICwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkKIHsKIH0KIAotRnJh
Y3Rpb25hbExheW91dFNpemU6Om9wZXJhdG9yIFFTaXplRigpIGNvbnN0CitMYXlvdXRTaXplOjpv
cGVyYXRvciBRU2l6ZUYoKSBjb25zdAogewogICAgIHJldHVybiBRU2l6ZUYod2lkdGgoKSwgaGVp
Z2h0KCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25zLmgJKHJldmlz
aW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvVHJhbnNmb3JtT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBA
CiAjaWZuZGVmIFRyYW5zZm9ybU9wZXJhdGlvbnNfaAogI2RlZmluZSBUcmFuc2Zvcm1PcGVyYXRp
b25zX2gKIAotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0U2l6ZS5o
IgogI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybVN0YXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5o
CShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL1RyYW5zZm9ybVN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcg
QEAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5j
bHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIgor
I2luY2x1ZGUgIkxheW91dFNpemUuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
IgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zv
cm1hdGlvbk1hdHJpeC5jcHAJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw4ICszMSw4IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCiAj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAi
RnJhY3Rpb25hbExheW91dFJlY3QuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAi
TGF5b3V0UmVjdC5oIgogCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgpAQCAtNjE3LDEwICs2MTcsMTAgQEAgRmxvYXRRdWFkIFRyYW5zZm9y
bWF0aW9uTWF0cml4Ojpwcm9qZWN0UQogc3RhdGljIGZsb2F0IGNsYW1wRWRnZVZhbHVlKGZsb2F0
IGYpCiB7CiAgICAgQVNTRVJUKCFpc25hbihmKSk7Ci0gICAgcmV0dXJuIG1pbjxmbG9hdD4obWF4
PGZsb2F0PihmLCAtRnJhY3Rpb25hbExheW91dFVuaXQ6Om1heCgpIC8gMiksIEZyYWN0aW9uYWxM
YXlvdXRVbml0OjptYXgoKSAvIDIpOworICAgIHJldHVybiBtaW48ZmxvYXQ+KG1heDxmbG9hdD4o
ZiwgLUxheW91dFVuaXQ6Om1heCgpIC8gMiksIExheW91dFVuaXQ6Om1heCgpIC8gMik7CiB9CiAK
LUZyYWN0aW9uYWxMYXlvdXRSZWN0IFRyYW5zZm9ybWF0aW9uTWF0cml4OjpjbGFtcGVkQm91bmRz
T2ZQcm9qZWN0ZWRRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcSkgY29uc3QKK0xheW91dFJlY3QgVHJh
bnNmb3JtYXRpb25NYXRyaXg6OmNsYW1wZWRCb3VuZHNPZlByb2plY3RlZFF1YWQoY29uc3QgRmxv
YXRRdWFkJiBxKSBjb25zdAogewogICAgIEZsb2F0UmVjdCBtYXBwZWRRdWFkQm91bmRzID0gcHJv
amVjdFF1YWQocSkuYm91bmRpbmdCb3goKTsKIApAQCAtNjI5LDE4ICs2MjksMTcgQEAgRnJhY3Rp
b25hbExheW91dFJlY3QgVHJhbnNmb3JtYXRpb25NYXRyaQogCiAgICAgZmxvYXQgcmlnaHQ7CiAg
ICAgaWYgKGlzaW5mKG1hcHBlZFF1YWRCb3VuZHMueCgpKSAmJiBpc2luZihtYXBwZWRRdWFkQm91
bmRzLndpZHRoKCkpKQotICAgICAgICByaWdodCA9IEZyYWN0aW9uYWxMYXlvdXRVbml0OjptYXgo
KSAvIDI7CisgICAgICAgIHJpZ2h0ID0gTGF5b3V0VW5pdDo6bWF4KCkgLyAyOwogICAgIGVsc2UK
ICAgICAgICAgcmlnaHQgPSBjbGFtcEVkZ2VWYWx1ZShjZWlsZihtYXBwZWRRdWFkQm91bmRzLm1h
eFgoKSkpOwogCiAgICAgZmxvYXQgYm90dG9tOwogICAgIGlmIChpc2luZihtYXBwZWRRdWFkQm91
bmRzLnkoKSkgJiYgaXNpbmYobWFwcGVkUXVhZEJvdW5kcy5oZWlnaHQoKSkpCi0gICAgICAgIGJv
dHRvbSA9IEZyYWN0aW9uYWxMYXlvdXRVbml0OjptYXgoKSAvIDI7CisgICAgICAgIGJvdHRvbSA9
IExheW91dFVuaXQ6Om1heCgpIC8gMjsKICAgICBlbHNlCiAgICAgICAgIGJvdHRvbSA9IGNsYW1w
RWRnZVZhbHVlKGNlaWxmKG1hcHBlZFF1YWRCb3VuZHMubWF4WSgpKSk7CiAKLSAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFJlY3QoRnJhY3Rpb25hbExheW91dFVuaXQ6OmNsYW1wKGxlZnQpLCBG
cmFjdGlvbmFsTGF5b3V0VW5pdDo6Y2xhbXAodG9wKSwgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0OjpjbGFtcChyaWdodCAtIGxlZnQpLCBGcmFj
dGlvbmFsTGF5b3V0VW5pdDo6Y2xhbXAoYm90dG9tIC0gdG9wKSk7CisgICAgcmV0dXJuIExheW91
dFJlY3QoTGF5b3V0VW5pdDo6Y2xhbXAobGVmdCksIExheW91dFVuaXQ6OmNsYW1wKHRvcCksICBM
YXlvdXRVbml0OjpjbGFtcChyaWdodCAtIGxlZnQpLCBMYXlvdXRVbml0OjpjbGFtcChib3R0b20g
LSB0b3ApKTsKIH0KIAogRmxvYXRQb2ludCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUG9pbnQo
Y29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QKQEAgLTY3MCw5ICs2NjksOSBAQCBJbnRSZWN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4OjptYXBSZWN0KGNvCiAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJl
Y3QobWFwUmVjdChGbG9hdFJlY3QocmVjdCkpKTsKIH0KIAotRnJhY3Rpb25hbExheW91dFJlY3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3Qm
IHIpIGNvbnN0CitMYXlvdXRSZWN0IFRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBSZWN0KGNvbnN0
IExheW91dFJlY3QmIHIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0ZyYWN0aW9uYWxM
YXlvdXRSZWN0KG1hcFJlY3QoRmxvYXRSZWN0KHIpKSk7CisgICAgcmV0dXJuIGVuY2xvc2luZ0xh
eW91dFJlY3QobWFwUmVjdChGbG9hdFJlY3QocikpKTsKIH0KIAogRmxvYXRSZWN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4OjptYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikgY29uc3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25N
YXRyaXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25N
YXRyaXguaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKIGNsYXNzIEludFJlY3Q7Ci1jbGFzcyBGcmFj
dGlvbmFsTGF5b3V0UmVjdDsKK2NsYXNzIExheW91dFJlY3Q7CiBjbGFzcyBGbG9hdFBvaW50M0Q7
CiBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBGbG9hdFF1YWQ7CkBAIC0xNTMsNyArMTUzLDcgQEAg
cHVibGljOgogICAgIC8vIFJvdW5kcyB0aGUgcmVzdWx0aW5nIG1hcHBlZCByZWN0YW5nbGUgb3V0
LiBUaGlzIGlzIGhlbHBmdWwgZm9yIGJvdW5kaW5nCiAgICAgLy8gYm94IGNvbXB1dGF0aW9ucyBi
dXQgbWF5IG5vdCBiZSB3aGF0IGlzIHdhbnRlZCBpbiBvdGhlciBjb250ZXh0cy4KICAgICBJbnRS
ZWN0IG1hcFJlY3QoY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgIEZyYWN0aW9uYWxMYXlvdXRS
ZWN0IG1hcFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKSBjb25zdDsKKyAgICBMYXlv
dXRSZWN0IG1hcFJlY3QoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwogCiAgICAgLy8gSWYgdGhl
IG1hdHJpeCBoYXMgM0QgY29tcG9uZW50cywgdGhlIHogY29tcG9uZW50IG9mIHRoZSByZXN1bHQg
aXMKICAgICAvLyBkcm9wcGVkLCBlZmZlY3RpdmVseSBwcm9qZWN0aW5nIHRoZSBxdWFkIGludG8g
dGhlIHo9MCBwbGFuZQpAQCAtMTY5LDcgKzE2OSw3IEBAIHB1YmxpYzoKICAgICBGbG9hdFF1YWQg
cHJvamVjdFF1YWQoY29uc3QgRmxvYXRRdWFkJiwgIGJvb2wqIGNsYW1wZWQgPSAwKSBjb25zdDsK
ICAgICAvLyBQcm9qZWN0cyB0aGUgZm91ciBjb3JuZXJzIG9mIHRoZSBxdWFkIGFuZCB0YWtlcyBh
IGJvdW5kaW5nIGJveCwKICAgICAvLyB3aGlsZSBzYW5pdGl6aW5nIHZhbHVlcyBjcmVhdGVkIHdo
ZW4gdGhlIHcgY29tcG9uZW50IGlzIG5lZ2F0aXZlLgotICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0
IGNsYW1wZWRCb3VuZHNPZlByb2plY3RlZFF1YWQoY29uc3QgRmxvYXRRdWFkJikgY29uc3Q7Cisg
ICAgTGF5b3V0UmVjdCBjbGFtcGVkQm91bmRzT2ZQcm9qZWN0ZWRRdWFkKGNvbnN0IEZsb2F0UXVh
ZCYpIGNvbnN0OwogCiAgICAgZG91YmxlIG0xMSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4WzBd
WzBdOyB9CiAgICAgdm9pZCBzZXRNMTEoZG91YmxlIGYpIHsgbV9tYXRyaXhbMF1bMF0gPSBmOyB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5oCShyZXZp
c2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICNpZm5kZWYgQXV0b1RhYmxlTGF5
b3V0X2gKICNkZWZpbmUgQXV0b1RhYmxlTGF5b3V0X2gKIAotI2luY2x1ZGUgIkxheW91dFR5cGVz
LmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgogI2luY2x1ZGUgIkxlbmd0aC5oIgogI2luY2x1
ZGUgIlRhYmxlTGF5b3V0LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0NvbHVtbkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvQ29sdW1uSW5mby5oCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvQ29sdW1uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsy
Niw3IEBACiAjaWZuZGVmIENvbHVtbkluZm9faAogI2RlZmluZSBDb2x1bW5JbmZvX2gKIAotI2lu
Y2x1ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dFVuaXQu
aCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvLmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNs
dXNpb25TaGFwZUluc2lkZUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAog
CiAjaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGUuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNp
bmNsdWRlICJMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJMYXlvdXRVbml0
LmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNzgsMTQgKzc4LDE0IEBAIHByaXZhdGU6CiAg
ICAgewogICAgICAgICBBU1NFUlQobV9zaGFwZSk7CiAgICAgICAgIC8vIFVzZSBmcm9tRmxvYXRD
ZWlsKCkgdG8gZW5zdXJlIHRoYXQgdGhlIHJldHVybmVkIExheW91dFVuaXQgdmFsdWUgaXMgd2l0
aGluIHRoZSBzaGFwZSdzIGJvdW5kcy4KLSAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRV
bml0Ojpmcm9tRmxvYXRDZWlsKG1fc2hhcGUtPnNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkueSgp
KTsKKyAgICAgICAgcmV0dXJuIExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwobV9zaGFwZS0+c2hh
cGVMb2dpY2FsQm91bmRpbmdCb3goKS55KCkpOwogICAgIH0KIAogICAgIGlubGluZSBMYXlvdXRV
bml0IHNoYXBlTG9naWNhbEJvdW5kc01heFkoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJU
KG1fc2hhcGUpOwogICAgICAgICAvLyBVc2UgZnJvbUZsb2F0Rmxvb3IoKSB0byBlbnN1cmUgdGhh
dCB0aGUgcmV0dXJuZWQgTGF5b3V0VW5pdCB2YWx1ZSBpcyB3aXRoaW4gdGhlIHNoYXBlJ3MgYm91
bmRzLgotICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQ6OmZyb21GbG9hdEZsb29y
KG1fc2hhcGUtPnNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkubWF4WSgpKTsKKyAgICAgICAgcmV0
dXJuIExheW91dFVuaXQ6OmZyb21GbG9hdEZsb29yKG1fc2hhcGUtPnNoYXBlTG9naWNhbEJvdW5k
aW5nQm94KCkubWF4WSgpKTsKICAgICB9CiAKICAgICBSZW5kZXJCbG9jayogbV9ibG9jazsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5o
CShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZm
ZWN0UmVuZGVyZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDkgQEAKICNpbmNsdWRl
ICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCiAjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFJlY3QuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1
ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIK
ICNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5o
IgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmgJ
KHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxl
TGF5b3V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICNpZm5kZWYgRml4ZWRU
YWJsZUxheW91dF9oCiAjZGVmaW5lIEZpeGVkVGFibGVMYXlvdXRfaAogCi0jaW5jbHVkZSAiTGF5
b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRVbml0LmgiCiAjaW5jbHVkZSAiTGVuZ3RoLmgi
CiAjaW5jbHVkZSAiVGFibGVMYXlvdXQuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR2FwUmVjdHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvR2FwUmVjdHMuaAkocmV2aXNpb24gMTMzNTE3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dhcFJlY3RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcg
KzIzLDcgQEAKICNpZm5kZWYgR2FwUmVjdHNfaAogI2RlZmluZSBHYXBSZWN0c19oCiAKLSNpbmNs
dWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3Vs
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0
LmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0
UmVzdWx0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJGbG9h
dFF1YWQuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVxdWVz
dC5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxh
eW91dFJlY3QuaCIKICNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9IaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUuY3BwCShy
ZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdGluZ1Ry
YW5zZm9ybVN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZS5oIgogCi0j
aW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFJlY3QuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0Lmgi
CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
ODAsNyArODAsNyBAQCBGbG9hdFF1YWQgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlOjptYXBwCiAg
ICAgcmV0dXJuIG1fYWNjdW11bGF0ZWRUcmFuc2Zvcm0uaW52ZXJzZSgpLnByb2plY3RRdWFkKG1f
bGFzdFBsYW5hckFyZWEpOwogfQogCi1GcmFjdGlvbmFsTGF5b3V0UmVjdCBIaXRUZXN0aW5nVHJh
bnNmb3JtU3RhdGU6OmJvdW5kc09mTWFwcGVkQXJlYSgpIGNvbnN0CitMYXlvdXRSZWN0IEhpdFRl
c3RpbmdUcmFuc2Zvcm1TdGF0ZTo6Ym91bmRzT2ZNYXBwZWRBcmVhKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV9hY2N1bXVsYXRlZFRyYW5zZm9ybS5pbnZlcnNlKCkuY2xhbXBlZEJvdW5kc09mUHJv
amVjdGVkUXVhZChtX2xhc3RQbGFuYXJBcmVhKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9IaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlLmgJKHJldmlzaW9uIDEz
MzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0aW5nVHJhbnNmb3JtU3Rh
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgRmxvYXRQ
b2ludCBtYXBwZWRQb2ludCgpIGNvbnN0OwogICAgIEZsb2F0UXVhZCBtYXBwZWRRdWFkKCkgY29u
c3Q7CiAgICAgRmxvYXRRdWFkIG1hcHBlZEFyZWEoKSBjb25zdDsKLSAgICBGcmFjdGlvbmFsTGF5
b3V0UmVjdCBib3VuZHNPZk1hcHBlZEFyZWEoKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IGJvdW5k
c09mTWFwcGVkQXJlYSgpIGNvbnN0OwogICAgIHZvaWQgZmxhdHRlbigpOwogCiAgICAgRmxvYXRQ
b2ludCBtX2xhc3RQbGFuYXJQb2ludDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjc3LDggKzY3Nyw4
IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0luQmxvY2tEaXIKIAogICAgICAgICAg
ICAgICAgIFJlbmRlclJ1YnlSdW4qIHJ1YnlSdW4gPSB0b1JlbmRlclJ1YnlSdW4oY3Vyci0+cmVu
ZGVyZXIoKSk7CiAgICAgICAgICAgICAgICAgaWYgKFJlbmRlclJ1YnlCYXNlKiBydWJ5QmFzZSA9
IHJ1YnlSdW4tPnJ1YnlCYXNlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBi
b3R0b21SdWJ5QmFzZUxlYWRpbmcgPSAoY3Vyci0+bG9naWNhbEhlaWdodCgpIC0gcnVieUJhc2Ut
PmxvZ2ljYWxCb3R0b20oKSkgKyBydWJ5QmFzZS0+bG9naWNhbEhlaWdodCgpIC0gKHJ1YnlCYXNl
LT5sYXN0Um9vdEJveCgpID8gcnVieUJhc2UtPmxhc3RSb290Qm94KCktPmxpbmVCb3R0b20oKSA6
IFpFUk9fTEFZT1VUX1VOSVQpOwotICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHRvcFJ1
YnlCYXNlTGVhZGluZyA9IHJ1YnlCYXNlLT5sb2dpY2FsVG9wKCkgKyAocnVieUJhc2UtPmZpcnN0
Um9vdEJveCgpID8gcnVieUJhc2UtPmZpcnN0Um9vdEJveCgpLT5saW5lVG9wKCkgOiBaRVJPX0xB
WU9VVF9VTklUKTsKKyAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBib3R0b21SdWJ5QmFz
ZUxlYWRpbmcgPSAoY3Vyci0+bG9naWNhbEhlaWdodCgpIC0gcnVieUJhc2UtPmxvZ2ljYWxCb3R0
b20oKSkgKyBydWJ5QmFzZS0+bG9naWNhbEhlaWdodCgpIC0gKHJ1YnlCYXNlLT5sYXN0Um9vdEJv
eCgpID8gcnVieUJhc2UtPmxhc3RSb290Qm94KCktPmxpbmVCb3R0b20oKSA6IExheW91dFVuaXQo
MCkpOworICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHRvcFJ1YnlCYXNlTGVhZGluZyA9
IHJ1YnlCYXNlLT5sb2dpY2FsVG9wKCkgKyAocnVieUJhc2UtPmZpcnN0Um9vdEJveCgpID8gcnVi
eUJhc2UtPmZpcnN0Um9vdEJveCgpLT5saW5lVG9wKCkgOiBMYXlvdXRVbml0KDApKTsKICAgICAg
ICAgICAgICAgICAgICAgbmV3TG9naWNhbFRvcCArPSAhcmVuZGVyZXIoKS0+c3R5bGUoKS0+aXNG
bGlwcGVkTGluZXNXcml0aW5nTW9kZSgpID8gdG9wUnVieUJhc2VMZWFkaW5nIDogYm90dG9tUnVi
eUJhc2VMZWFkaW5nOwogICAgICAgICAgICAgICAgICAgICBib3hIZWlnaHQgLT0gKHRvcFJ1YnlC
YXNlTGVhZGluZyArIGJvdHRvbVJ1YnlCYXNlTGVhZGluZyk7CiAgICAgICAgICAgICAgICAgfQpA
QCAtNzkxLDcgKzc5MSw3IEBAIGlubGluZSB2b2lkIElubGluZUZsb3dCb3g6OmFkZEJvcmRlck91
dHMKICAgICBpZiAoIXN0eWxlLT5oYXNCb3JkZXJJbWFnZU91dHNldHMoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgRnJhY3Rpb25hbExheW91dEJveEV4dGVudCBib3JkZXJPdXRzZXRzID0gc3R5
bGUtPmJvcmRlckltYWdlT3V0c2V0cygpOworICAgIExheW91dEJveEV4dGVudCBib3JkZXJPdXRz
ZXRzID0gc3R5bGUtPmJvcmRlckltYWdlT3V0c2V0cygpOwogCiAgICAgTGF5b3V0VW5pdCBib3Jk
ZXJPdXRzZXRMb2dpY2FsVG9wID0gYm9yZGVyT3V0c2V0cy5sb2dpY2FsVG9wKHN0eWxlLT53cml0
aW5nTW9kZSgpKTsKICAgICBMYXlvdXRVbml0IGJvcmRlck91dHNldExvZ2ljYWxCb3R0b20gPSBi
b3JkZXJPdXRzZXRzLmxvZ2ljYWxCb3R0b20oc3R5bGUtPndyaXRpbmdNb2RlKCkpOwpAQCAtODA2
LDggKzgwNiw4IEBAIGlubGluZSB2b2lkIElubGluZUZsb3dCb3g6OmFkZEJvcmRlck91dHMKICAg
ICBMYXlvdXRVbml0IGxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdyA9IG1pbihwaXhlbFNuYXBwZWRM
b2dpY2FsVG9wKCkgLSBvdXRzZXRMb2dpY2FsVG9wLCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cueSgp
KTsKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdyA9IG1heChwaXhl
bFNuYXBwZWRMb2dpY2FsQm90dG9tKCkgKyBvdXRzZXRMb2dpY2FsQm90dG9tLCBsb2dpY2FsVmlz
dWFsT3ZlcmZsb3cubWF4WSgpKTsKIAotICAgIExheW91dFVuaXQgb3V0c2V0TG9naWNhbExlZnQg
PSBpbmNsdWRlTG9naWNhbExlZnRFZGdlKCkgPyBib3JkZXJPdXRzZXRMb2dpY2FsTGVmdCA6IFpF
Uk9fTEFZT1VUX1VOSVQ7Ci0gICAgTGF5b3V0VW5pdCBvdXRzZXRMb2dpY2FsUmlnaHQgPSBpbmNs
dWRlTG9naWNhbFJpZ2h0RWRnZSgpID8gYm9yZGVyT3V0c2V0TG9naWNhbFJpZ2h0IDogWkVST19M
QVlPVVRfVU5JVDsKKyAgICBMYXlvdXRVbml0IG91dHNldExvZ2ljYWxMZWZ0ID0gaW5jbHVkZUxv
Z2ljYWxMZWZ0RWRnZSgpID8gYm9yZGVyT3V0c2V0TG9naWNhbExlZnQgOiBMYXlvdXRVbml0KDAp
OworICAgIExheW91dFVuaXQgb3V0c2V0TG9naWNhbFJpZ2h0ID0gaW5jbHVkZUxvZ2ljYWxSaWdo
dEVkZ2UoKSA/IGJvcmRlck91dHNldExvZ2ljYWxSaWdodCA6IExheW91dFVuaXQoMCk7CiAKICAg
ICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3cgPSBtaW4ocGl4ZWxTbmFwcGVk
TG9naWNhbExlZnQoKSAtIG91dHNldExvZ2ljYWxMZWZ0LCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cu
eCgpKTsKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodFZpc3VhbE92ZXJmbG93ID0gbWF4KHBp
eGVsU25hcHBlZExvZ2ljYWxSaWdodCgpICsgb3V0c2V0TG9naWNhbFJpZ2h0LCBsb2dpY2FsVmlz
dWFsT3ZlcmZsb3cubWF4WCgpKTsKQEAgLTExNDIsOCArMTE0Miw4IEBAIHZvaWQgSW5saW5lRmxv
d0JveDo6cGFpbnRGaWxsTGF5ZXIoY29uc3QKICAgICAgICAgICAgIGZvciAoSW5saW5lRmxvd0Jv
eCogY3VyciA9IHRoaXM7IGN1cnI7IGN1cnIgPSBjdXJyLT5wcmV2TGluZUJveCgpKQogICAgICAg
ICAgICAgICAgIHRvdGFsTG9naWNhbFdpZHRoICs9IGN1cnItPmxvZ2ljYWxXaWR0aCgpOwogICAg
ICAgICB9Ci0gICAgICAgIExheW91dFVuaXQgc3RyaXBYID0gcmVjdC54KCkgLSAoaXNIb3Jpem9u
dGFsKCkgPyBsb2dpY2FsT2Zmc2V0T25MaW5lIDogWkVST19MQVlPVVRfVU5JVCk7Ci0gICAgICAg
IExheW91dFVuaXQgc3RyaXBZID0gcmVjdC55KCkgLSAoaXNIb3Jpem9udGFsKCkgPyBaRVJPX0xB
WU9VVF9VTklUIDogbG9naWNhbE9mZnNldE9uTGluZSk7CisgICAgICAgIExheW91dFVuaXQgc3Ry
aXBYID0gcmVjdC54KCkgLSAoaXNIb3Jpem9udGFsKCkgPyBsb2dpY2FsT2Zmc2V0T25MaW5lIDog
TGF5b3V0VW5pdCgwKSk7CisgICAgICAgIExheW91dFVuaXQgc3RyaXBZID0gcmVjdC55KCkgLSAo
aXNIb3Jpem9udGFsKCkgPyBMYXlvdXRVbml0KDApIDogbG9naWNhbE9mZnNldE9uTGluZSk7CiAg
ICAgICAgIExheW91dFVuaXQgc3RyaXBXaWR0aCA9IGlzSG9yaXpvbnRhbCgpID8gdG90YWxMb2dp
Y2FsV2lkdGggOiBzdGF0aWNfY2FzdDxMYXlvdXRVbml0Pih3aWR0aCgpKTsKICAgICAgICAgTGF5
b3V0VW5pdCBzdHJpcEhlaWdodCA9IGlzSG9yaXpvbnRhbCgpID8gc3RhdGljX2Nhc3Q8TGF5b3V0
VW5pdD4oaGVpZ2h0KCkpIDogdG90YWxMb2dpY2FsV2lkdGg7CiAKQEAgLTEyNjksOCArMTI2OSw4
IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGFpbnRCb3hEZWNvcmF0aW9ucygKICAgICAgICAgICAg
ICAgICBMYXlvdXRVbml0IHRvdGFsTG9naWNhbFdpZHRoID0gbG9naWNhbE9mZnNldE9uTGluZTsK
ICAgICAgICAgICAgICAgICBmb3IgKElubGluZUZsb3dCb3gqIGN1cnIgPSB0aGlzOyBjdXJyOyBj
dXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkKICAgICAgICAgICAgICAgICAgICAgdG90YWxMb2dp
Y2FsV2lkdGggKz0gY3Vyci0+bG9naWNhbFdpZHRoKCk7Ci0gICAgICAgICAgICAgICAgTGF5b3V0
VW5pdCBzdHJpcFggPSBhZGp1c3RlZFBhaW50b2Zmc2V0LngoKSAtIChpc0hvcml6b250YWwoKSA/
IGxvZ2ljYWxPZmZzZXRPbkxpbmUgOiBaRVJPX0xBWU9VVF9VTklUKTsKLSAgICAgICAgICAgICAg
ICBMYXlvdXRVbml0IHN0cmlwWSA9IGFkanVzdGVkUGFpbnRvZmZzZXQueSgpIC0gKGlzSG9yaXpv
bnRhbCgpID8gWkVST19MQVlPVVRfVU5JVCA6IGxvZ2ljYWxPZmZzZXRPbkxpbmUpOworICAgICAg
ICAgICAgICAgIExheW91dFVuaXQgc3RyaXBYID0gYWRqdXN0ZWRQYWludG9mZnNldC54KCkgLSAo
aXNIb3Jpem9udGFsKCkgPyBsb2dpY2FsT2Zmc2V0T25MaW5lIDogTGF5b3V0VW5pdCgwKSk7Cisg
ICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFkgPSBhZGp1c3RlZFBhaW50b2Zmc2V0Lnko
KSAtIChpc0hvcml6b250YWwoKSA/IExheW91dFVuaXQoMCkgOiBsb2dpY2FsT2Zmc2V0T25MaW5l
KTsKICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHN0cmlwV2lkdGggPSBpc0hvcml6b250YWwo
KSA/IHRvdGFsTG9naWNhbFdpZHRoIDogZnJhbWVSZWN0LndpZHRoKCk7CiAgICAgICAgICAgICAg
ICAgTGF5b3V0VW5pdCBzdHJpcEhlaWdodCA9IGlzSG9yaXpvbnRhbCgpID8gZnJhbWVSZWN0Lmhl
aWdodCgpIDogdG90YWxMb2dpY2FsV2lkdGg7CiAKQEAgLTEzNDEsOCArMTM0MSw4IEBAIHZvaWQg
SW5saW5lRmxvd0JveDo6cGFpbnRNYXNrKFBhaW50SW5mbyYKICAgICAgICAgTGF5b3V0VW5pdCB0
b3RhbExvZ2ljYWxXaWR0aCA9IGxvZ2ljYWxPZmZzZXRPbkxpbmU7CiAgICAgICAgIGZvciAoSW5s
aW5lRmxvd0JveCogY3VyciA9IHRoaXM7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0TGluZUJveCgp
KQogICAgICAgICAgICAgdG90YWxMb2dpY2FsV2lkdGggKz0gY3Vyci0+bG9naWNhbFdpZHRoKCk7
Ci0gICAgICAgIExheW91dFVuaXQgc3RyaXBYID0gYWRqdXN0ZWRQYWludE9mZnNldC54KCkgLSAo
aXNIb3Jpem9udGFsKCkgPyBsb2dpY2FsT2Zmc2V0T25MaW5lIDogWkVST19MQVlPVVRfVU5JVCk7
Ci0gICAgICAgIExheW91dFVuaXQgc3RyaXBZID0gYWRqdXN0ZWRQYWludE9mZnNldC55KCkgLSAo
aXNIb3Jpem9udGFsKCkgPyBaRVJPX0xBWU9VVF9VTklUIDogbG9naWNhbE9mZnNldE9uTGluZSk7
CisgICAgICAgIExheW91dFVuaXQgc3RyaXBYID0gYWRqdXN0ZWRQYWludE9mZnNldC54KCkgLSAo
aXNIb3Jpem9udGFsKCkgPyBsb2dpY2FsT2Zmc2V0T25MaW5lIDogTGF5b3V0VW5pdCgwKSk7Cisg
ICAgICAgIExheW91dFVuaXQgc3RyaXBZID0gYWRqdXN0ZWRQYWludE9mZnNldC55KCkgLSAoaXNI
b3Jpem9udGFsKCkgPyBMYXlvdXRVbml0KDApIDogbG9naWNhbE9mZnNldE9uTGluZSk7CiAgICAg
ICAgIExheW91dFVuaXQgc3RyaXBXaWR0aCA9IGlzSG9yaXpvbnRhbCgpID8gdG90YWxMb2dpY2Fs
V2lkdGggOiBmcmFtZVJlY3Qud2lkdGgoKTsKICAgICAgICAgTGF5b3V0VW5pdCBzdHJpcEhlaWdo
dCA9IGlzSG9yaXpvbnRhbCgpID8gZnJhbWVSZWN0LmhlaWdodCgpIDogdG90YWxMb2dpY2FsV2lk
dGg7CiAKQEAgLTE0MzksNyArMTQzOSw3IEBAIExheW91dFVuaXQgSW5saW5lRmxvd0JveDo6Y29t
cHV0ZU92ZXJBbm4KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgaWYgKCFydWJ5UnVuLT5zdHlsZSgpLT5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2Rl
KCkpIHsKLSAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHRvcE9mRmlyc3RSdWJ5VGV4dExpbmUg
PSBydWJ5VGV4dC0+bG9naWNhbFRvcCgpICsgKHJ1YnlUZXh0LT5maXJzdFJvb3RCb3goKSA/IHJ1
YnlUZXh0LT5maXJzdFJvb3RCb3goKS0+bGluZVRvcCgpIDogWkVST19MQVlPVVRfVU5JVCk7Cisg
ICAgICAgICAgICAgICAgTGF5b3V0VW5pdCB0b3BPZkZpcnN0UnVieVRleHRMaW5lID0gcnVieVRl
eHQtPmxvZ2ljYWxUb3AoKSArIChydWJ5VGV4dC0+Zmlyc3RSb290Qm94KCkgPyBydWJ5VGV4dC0+
Zmlyc3RSb290Qm94KCktPmxpbmVUb3AoKSA6IExheW91dFVuaXQoMCkpOwogICAgICAgICAgICAg
ICAgIGlmICh0b3BPZkZpcnN0UnVieVRleHRMaW5lID49IDApCiAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIHRvcE9mRmlyc3RSdWJ5VGV4dExpbmUgKz0gY3Vy
ci0+bG9naWNhbFRvcCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFJl
cGFpbnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91
dFJlcGFpbnRlci5jcHAJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9MYXlvdXRSZXBhaW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVwYWludGVyLmgiCiAKKyNp
bmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRSZXBh
aW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0UmVw
YWludGVyLmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9M
YXlvdXRSZXBhaW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTAgKzI2LDkgQEAKICNpZm5k
ZWYgTGF5b3V0UmVwYWludGVyX2gKICNkZWZpbmUgTGF5b3V0UmVwYWludGVyX2gKIAotI2luY2x1
ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K2NsYXNzIExheW91dFJlY3Q7CiBjbGFzcyBSZW5kZXJMYXllck1vZGVsT2JqZWN0OwogY2xhc3Mg
UmVuZGVyT2JqZWN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3Rh
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUu
aAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0
YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgTGF5b3V0U3Rh
dGVfaAogCiAjaW5jbHVkZSAiQ29sdW1uSW5mby5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgi
CisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9MYXlvdXRUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9M
YXlvdXRUeXBlcy5oCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvTGF5b3V0VHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1OSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3Ry
aWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gVGhlc2Ug
dHlwZWRlZnMgYXJlIGJlaW5nIHVzZWQgdG8gYWJzdHJhY3QgbGF5b3V0IGFuZCBoaXQgdGVzdGlu
ZyBvZmYKLS8vIG9mIGludGVnZXJzIGFuZCBldmVudHVhbGx5IHJlcGxhY2UgdGhlbSB3aXRoIGZs
b2F0cy4gT25jZSB0aGlzIHRyYW5zaXRpb24KLS8vIGlzIGNvbXBsZXRlLCB0aGVzZSB0eXBlcyB3
aWxsIGJlIHJlbW92ZWQuIFByb2dyZXNzIGNhbiBiZSB0cmFja2VkIGF0Ci0vLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMTgKLQotI2lmbmRlZiBMYXlvdXRUeXBl
c19oCi0jZGVmaW5lIExheW91dFR5cGVzX2gKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OwotY2xhc3MgRnJhY3Rpb25hbExheW91dFBvaW50
OwotY2xhc3MgRnJhY3Rpb25hbExheW91dFJlY3Q7Ci1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0U2l6
ZTsKLWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRVbml0OwotCi10eXBlZGVmIEZyYWN0aW9uYWxMYXlv
dXRCb3hFeHRlbnQgTGF5b3V0Qm94RXh0ZW50OwotdHlwZWRlZiBGcmFjdGlvbmFsTGF5b3V0UG9p
bnQgTGF5b3V0UG9pbnQ7Ci10eXBlZGVmIEZyYWN0aW9uYWxMYXlvdXRSZWN0IExheW91dFJlY3Q7
Ci10eXBlZGVmIEZyYWN0aW9uYWxMYXlvdXRTaXplIExheW91dFNpemU7Ci10eXBlZGVmIEZyYWN0
aW9uYWxMYXlvdXRVbml0IExheW91dFVuaXQ7Ci0KLSNkZWZpbmUgTUFYX0xBWU9VVF9VTklUIExh
eW91dFVuaXQ6Om1heCgpCi0jZGVmaW5lIE1JTl9MQVlPVVRfVU5JVCBMYXlvdXRVbml0OjptaW4o
KQotI2RlZmluZSBaRVJPX0xBWU9VVF9VTklUIExheW91dFVuaXQoMCkKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gTGF5b3V0VHlwZXNfaApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0xheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaAkocmV2aXNp
b24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFR5cGVzSW5saW5l
TWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1MyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlv
bi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBMYXlvdXRU
eXBlc0lubGluZU1ldGhvZHNfaAotI2RlZmluZSBMYXlvdXRUeXBlc0lubGluZU1ldGhvZHNfaAot
Ci0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dEJveEV4
dGVudC5oIgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRSZWN0LmgiCi0jaW5jbHVkZSAiRnJh
Y3Rpb25hbExheW91dFVuaXQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTGF5
b3V0VHlwZXMuaCIKLQotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRSZWN0IGVuY2xvc2luZ0xheW91dFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0
KHJlY3QpOwotfQotCi1pbmxpbmUgTGF5b3V0U2l6ZSByb3VuZGVkTGF5b3V0U2l6ZShjb25zdCBG
bG9hdFNpemUmIHMpCi17Ci0jaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFNpemUocyk7Ci0jZWxzZQotICAgIHJldHVybiByb3VuZGVkSW50U2l6
ZShzKTsKLSNlbmRpZgotfQotCi1pbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0KExh
eW91dFVuaXQgbGVmdCwgTGF5b3V0VW5pdCB0b3AsIExheW91dFVuaXQgd2lkdGgsIExheW91dFVu
aXQgaGVpZ2h0KQotewotICAgIHJldHVybiBJbnRSZWN0KGxlZnQucm91bmQoKSwgdG9wLnJvdW5k
KCksIHNuYXBTaXplVG9QaXhlbCh3aWR0aCwgbGVmdCksIHNuYXBTaXplVG9QaXhlbChoZWlnaHQs
IHRvcCkpOwotfQotCi1pbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0RnJvbUVkZ2Vz
KExheW91dFVuaXQgbGVmdCwgTGF5b3V0VW5pdCB0b3AsIExheW91dFVuaXQgcmlnaHQsIExheW91
dFVuaXQgYm90dG9tKQotewotICAgIHJldHVybiBJbnRSZWN0KGxlZnQucm91bmQoKSwgdG9wLnJv
dW5kKCksIHNuYXBTaXplVG9QaXhlbChyaWdodCAtIGxlZnQsIGxlZnQpLCBzbmFwU2l6ZVRvUGl4
ZWwoYm90dG9tIC0gdG9wLCB0b3ApKTsKLX0KLQotaW5saW5lIExheW91dFBvaW50IHJvdW5kZWRM
YXlvdXRQb2ludChjb25zdCBGbG9hdFBvaW50JiBwKQotewotI2lmIEVOQUJMRShTVUJQSVhFTF9M
QVlPVVQpCi0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChwKTsKLSNlbHNlCi0gICAg
cmV0dXJuIHJvdW5kZWRJbnRQb2ludChwKTsKLSNlbmRpZgotfQotCi1pbmxpbmUgTGF5b3V0UG9p
bnQgZmxvb3JlZExheW91dFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApCi17Ci0gICAgcmV0dXJu
IGZsb29yZWRGcmFjdGlvbmFsTGF5b3V0UG9pbnQocCk7Ci19Ci0KLWlubGluZSBMYXlvdXRQb2lu
dCBmbG9vcmVkTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRTaXplJiBzKQotewotICAgIHJldHVybiBm
bG9vcmVkTGF5b3V0UG9pbnQoRmxvYXRQb2ludChzKSk7Ci19Ci0KLWlubGluZSBpbnQgcm91bmRU
b0ludChMYXlvdXRVbml0IHZhbHVlKQotewotICAgIHJldHVybiB2YWx1ZS5yb3VuZCgpOwotfQot
Ci1pbmxpbmUgaW50IGZsb29yVG9JbnQoTGF5b3V0VW5pdCB2YWx1ZSkKLXsKLSAgICByZXR1cm4g
dmFsdWUuZmxvb3IoKTsKLX0KLQotaW5saW5lIExheW91dFVuaXQgcm91bmRlZExheW91dFVuaXQo
ZmxvYXQgdmFsdWUpCi17Ci0jaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFVuaXQ6OmZyb21GbG9hdFJvdW5kKHZhbHVlKTsKLSNlbHNlCi0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PGludD4obHJvdW5kZih2YWx1ZSkpOwotI2VuZGlmCi19Ci0KLWlu
bGluZSBMYXlvdXRVbml0IGNlaWxlZExheW91dFVuaXQoZmxvYXQgdmFsdWUpCi17Ci0jaWYgRU5B
QkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQ6OmZy
b21GbG9hdENlaWwodmFsdWUpOwotI2Vsc2UKLSAgICByZXR1cm4gY2VpbGYodmFsdWUpOwotI2Vu
ZGlmCi19Ci0KLWlubGluZSBMYXlvdXRVbml0IGFic29sdXRlVmFsdWUoY29uc3QgTGF5b3V0VW5p
dCYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHZhbHVlLmFicygpOwotfQotCi1pbmxpbmUgTGF5b3V0
U2l6ZSB0b0xheW91dFNpemUoY29uc3QgTGF5b3V0UG9pbnQmIHApCi17Ci0gICAgcmV0dXJuIExh
eW91dFNpemUocC54KCksIHAueSgpKTsKLX0KLQotaW5saW5lIExheW91dFBvaW50IHRvTGF5b3V0
UG9pbnQoY29uc3QgTGF5b3V0U2l6ZSYgcCkKLXsKLSAgICByZXR1cm4gTGF5b3V0UG9pbnQocC53
aWR0aCgpLCBwLmhlaWdodCgpKTsKLX0KLQotaW5saW5lIExheW91dFVuaXQgbGF5b3V0TW9kKGNv
bnN0IExheW91dFVuaXQmIG51bWVyYXRvciwgY29uc3QgTGF5b3V0VW5pdCYgZGVub21pbmF0b3Ip
Ci17Ci0gICAgcmV0dXJuIG51bWVyYXRvciAlIGRlbm9taW5hdG9yOwotfQotCi1pbmxpbmUgSW50
U2l6ZSBwaXhlbFNuYXBwZWRJbnRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzLCBj
b25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHApCi17Ci0gICAgcmV0dXJuIEludFNpemUoc25h
cFNpemVUb1BpeGVsKHMud2lkdGgoKSwgcC54KCkpLCBzbmFwU2l6ZVRvUGl4ZWwocy5oZWlnaHQo
KSwgcC55KCkpKTsKLX0KLQotaW5saW5lIEludFJlY3QgcGl4ZWxTbmFwcGVkSW50UmVjdChMYXlv
dXRQb2ludCBsb2NhdGlvbiwgTGF5b3V0U2l6ZSBzaXplKQotewotICAgIHJldHVybiBJbnRSZWN0
KHJvdW5kZWRJbnRQb2ludChsb2NhdGlvbiksIHBpeGVsU25hcHBlZEludFNpemUoc2l6ZSwgbG9j
YXRpb24pKTsKLX0KLQotaW5saW5lIGJvb2wgaXNJbnRlZ2VyVmFsdWUoY29uc3QgTGF5b3V0VW5p
dCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdmFsdWUudG9JbnQoKSA9PSB2YWx1ZTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gTGF5b3V0VHlwZXNJbmxpbmVNZXRob2Rz
X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9QYWludEluZm8uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUGFpbnRJbmZvLmgJKHJldmlzaW9uIDEzMzUx
NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9QYWludEluZm8uaAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNyArMzIsNyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5j
bHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIgor
I2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJQYWludFBoYXNlLmgiCiAjaW5jbHVk
ZSA8bGltaXRzPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MSw4
ICsxODEsOCBAQCBSZW5kZXJCbG9jazo6TWFyZ2luSW5mbzo6TWFyZ2luSW5mbyhSZW5kCiAgICAg
bV9xdWlya0NvbnRhaW5lciA9IGJsb2NrLT5pc1RhYmxlQ2VsbCgpIHx8IGJsb2NrLT5pc0JvZHko
KSB8fCBibG9ja1N0eWxlLT5tYXJnaW5CZWZvcmVDb2xsYXBzZSgpID09IE1ESVNDQVJECiAgICAg
ICAgIHx8IGJsb2NrU3R5bGUtPm1hcmdpbkFmdGVyQ29sbGFwc2UoKSA9PSBNRElTQ0FSRDsKIAot
ICAgIG1fcG9zaXRpdmVNYXJnaW4gPSBtX2NhbkNvbGxhcHNlTWFyZ2luQmVmb3JlV2l0aENoaWxk
cmVuID8gYmxvY2stPm1heFBvc2l0aXZlTWFyZ2luQmVmb3JlKCkgOiBaRVJPX0xBWU9VVF9VTklU
OwotICAgIG1fbmVnYXRpdmVNYXJnaW4gPSBtX2NhbkNvbGxhcHNlTWFyZ2luQmVmb3JlV2l0aENo
aWxkcmVuID8gYmxvY2stPm1heE5lZ2F0aXZlTWFyZ2luQmVmb3JlKCkgOiBaRVJPX0xBWU9VVF9V
TklUOworICAgIG1fcG9zaXRpdmVNYXJnaW4gPSBtX2NhbkNvbGxhcHNlTWFyZ2luQmVmb3JlV2l0
aENoaWxkcmVuID8gYmxvY2stPm1heFBvc2l0aXZlTWFyZ2luQmVmb3JlKCkgOiBMYXlvdXRVbml0
KDApOworICAgIG1fbmVnYXRpdmVNYXJnaW4gPSBtX2NhbkNvbGxhcHNlTWFyZ2luQmVmb3JlV2l0
aENoaWxkcmVuID8gYmxvY2stPm1heE5lZ2F0aXZlTWFyZ2luQmVmb3JlKCkgOiBMYXlvdXRVbml0
KDApOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCkBAIC0xMjkxLDcgKzEyOTEsNyBAQCBib29sIFJlbmRlckJsb2NrOjppc1NlbGZDb2xsYXBz
aW5nQmxvY2soCiAgICAgLy8gKGMpIGhhdmUgYm9yZGVyL3BhZGRpbmcsCiAgICAgLy8gKGQpIGhh
dmUgYSBtaW4taGVpZ2h0CiAgICAgLy8gKGUpIGhhdmUgc3BlY2lmaWVkIHRoYXQgb25lIG9mIG91
ciBtYXJnaW5zIGNhbid0IGNvbGxhcHNlIHVzaW5nIGEgQ1NTIGV4dGVuc2lvbgotICAgIGlmIChs
b2dpY2FsSGVpZ2h0KCkgPiBaRVJPX0xBWU9VVF9VTklUCisgICAgaWYgKGxvZ2ljYWxIZWlnaHQo
KSA+IExheW91dFVuaXQoMCkKICAgICAgICAgfHwgaXNUYWJsZSgpIHx8IGJvcmRlckFuZFBhZGRp
bmdMb2dpY2FsSGVpZ2h0KCkKICAgICAgICAgfHwgc3R5bGUoKS0+bG9naWNhbE1pbkhlaWdodCgp
LmlzUG9zaXRpdmUoKQogICAgICAgICB8fCBzdHlsZSgpLT5tYXJnaW5CZWZvcmVDb2xsYXBzZSgp
ID09IE1TRVBBUkFURSB8fCBzdHlsZSgpLT5tYXJnaW5BZnRlckNvbGxhcHNlKCkgPT0gTVNFUEFS
QVRFKQpAQCAtMTQyMyw3ICsxNDIzLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlUmVnaW9u
c0FuZEV4Y2x1cwogCiAgICAgLy8gQ29tcHV0ZSB0aGUgbWF4aW11bSBsb2dpY2FsIGhlaWdodCBj
b250ZW50IG1heSBjYXVzZSB0aGlzIGJsb2NrIHRvIGV4cGFuZCB0bwogICAgIC8vIEZJWE1FOiBU
aGVzZSBzaG91bGQgZXZlbnR1YWxseSB1c2UgdGhlIGNvbnN0IGNvbXB1dGVMb2dpY2FsSGVpZ2h0
IHJhdGhlciB0aGFuIHVwZGF0ZUxvZ2ljYWxIZWlnaHQKLSAgICBzZXRMb2dpY2FsSGVpZ2h0KE1B
WF9MQVlPVVRfVU5JVCAvIDIpOworICAgIHNldExvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdDo6bWF4
KCkgLyAyKTsKICAgICB1cGRhdGVMb2dpY2FsSGVpZ2h0KCk7CiAKICNpZiBFTkFCTEUoQ1NTX0VY
Q0xVU0lPTlMpCkBAIC0xNDQ0LDcgKzE0NDQsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRl
RXhjbHVzaW9uU2hhcGVTCiAgICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleGNsdXNpb25T
aGFwZUluc2lkZUluZm8gPSB0aGlzLT5leGNsdXNpb25TaGFwZUluc2lkZUluZm8oKTsKICAgICBp
ZiAoZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKSB7CiAgICAgICAgIGJvb2wgcGVyY2VudGFnZUxv
Z2ljYWxIZWlnaHRSZXNvbHZhYmxlID0gcGVyY2VudGFnZUxvZ2ljYWxIZWlnaHRJc1Jlc29sdmFi
bGVGcm9tQmxvY2sodGhpcywgZmFsc2UpOwotICAgICAgICBleGNsdXNpb25TaGFwZUluc2lkZUlu
Zm8tPmNvbXB1dGVTaGFwZVNpemUobG9naWNhbFdpZHRoKCksIHBlcmNlbnRhZ2VMb2dpY2FsSGVp
Z2h0UmVzb2x2YWJsZSA/IGxvZ2ljYWxIZWlnaHQoKSA6IFpFUk9fTEFZT1VUX1VOSVQpOworICAg
ICAgICBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPmNvbXB1dGVTaGFwZVNpemUobG9naWNhbFdp
ZHRoKCksIHBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0UmVzb2x2YWJsZSA/IGxvZ2ljYWxIZWlnaHQo
KSA6IExheW91dFVuaXQoMCkpOwogICAgIH0KIH0KICNlbmRpZgpAQCAtMTQ3NSwxMSArMTQ3NSwx
MSBAQCB2b2lkIFJlbmRlckJsb2NrOjpjaGVja0ZvclBhZ2luYXRpb25Mb2dpCiAgICAgICAgICAg
ICAvLyBhdm9pZCBkb2luZyB0d28gbGF5b3V0IHBhc3Nlcy4KICAgICAgICAgICAgIHVwZGF0ZUxv
Z2ljYWxIZWlnaHQoKTsKICAgICAgICAgICAgIExheW91dFVuaXQgY29sdW1uSGVpZ2h0ID0gY29u
dGVudExvZ2ljYWxIZWlnaHQoKTsKLSAgICAgICAgICAgIGlmIChjb2x1bW5IZWlnaHQgPiBaRVJP
X0xBWU9VVF9VTklUKSB7CisgICAgICAgICAgICBpZiAoY29sdW1uSGVpZ2h0ID4gTGF5b3V0VW5p
dCgwKSkgewogICAgICAgICAgICAgICAgIHBhZ2VMb2dpY2FsSGVpZ2h0ID0gY29sdW1uSGVpZ2h0
OwogICAgICAgICAgICAgICAgIGhhc1NwZWNpZmllZFBhZ2VMb2dpY2FsSGVpZ2h0ID0gdHJ1ZTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQoWkVST19MQVlPVVRf
VU5JVCk7CisgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KExheW91dFVuaXQoMCkpOwogICAg
ICAgICB9CiAgICAgICAgIGlmIChjb2xJbmZvLT5jb2x1bW5IZWlnaHQoKSAhPSBwYWdlTG9naWNh
bEhlaWdodCAmJiBldmVySGFkTGF5b3V0KCkpIHsKICAgICAgICAgICAgIGNvbEluZm8tPnNldENv
bHVtbkhlaWdodChwYWdlTG9naWNhbEhlaWdodCk7CkBAIC0xNTE2LDcgKzE1MTYsNyBAQCB2b2lk
IFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgY2xlYXJGbG9hdHMoKTsK
IAogICAgIExheW91dFVuaXQgcHJldmlvdXNIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCk7Ci0gICAg
c2V0TG9naWNhbEhlaWdodChaRVJPX0xBWU9VVF9VTklUKTsKKyAgICBzZXRMb2dpY2FsSGVpZ2h0
KExheW91dFVuaXQoMCkpOwogCiAgICAgYm9vbCBwYWdlTG9naWNhbEhlaWdodENoYW5nZWQgPSBm
YWxzZTsKICAgICBib29sIGhhc1NwZWNpZmllZFBhZ2VMb2dpY2FsSGVpZ2h0ID0gZmFsc2U7CkBA
IC0xNTUyLDkgKzE1NTIsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJl
bGF5CiAgICAgICAgIHNldFBhZ2luYXRpb25TdHJ1dCgwKTsKICAgICB9CiAKLSAgICBMYXlvdXRV
bml0IHJlcGFpbnRMb2dpY2FsVG9wID0gWkVST19MQVlPVVRfVU5JVDsKLSAgICBMYXlvdXRVbml0
IHJlcGFpbnRMb2dpY2FsQm90dG9tID0gWkVST19MQVlPVVRfVU5JVDsKLSAgICBMYXlvdXRVbml0
IG1heEZsb2F0TG9naWNhbEJvdHRvbSA9IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgTGF5b3V0VW5p
dCByZXBhaW50TG9naWNhbFRvcCA9IExheW91dFVuaXQoMCk7CisgICAgTGF5b3V0VW5pdCByZXBh
aW50TG9naWNhbEJvdHRvbSA9IExheW91dFVuaXQoMCk7CisgICAgTGF5b3V0VW5pdCBtYXhGbG9h
dExvZ2ljYWxCb3R0b20gPSBMYXlvdXRVbml0KDApOwogICAgIGlmICghZmlyc3RDaGlsZCgpICYm
ICFpc0Fub255bW91c0Jsb2NrKCkpCiAgICAgICAgIHNldENoaWxkcmVuSW5saW5lKHRydWUpOwog
ICAgIGlmIChjaGlsZHJlbklubGluZSgpKQpAQCAtMTY5MSw5ICsxNjkxLDkgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6Y29tcHV0ZU92ZXJmbG93KExheW91dAogICAgICAgICBMYXlvdXRSZWN0IGNsaWVu
dFJlY3QoY2xpZW50Qm94UmVjdCgpKTsKICAgICAgICAgTGF5b3V0UmVjdCByZWN0VG9BcHBseTsK
ICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICByZWN0
VG9BcHBseSA9IExheW91dFJlY3QoY2xpZW50UmVjdC54KCksIGNsaWVudFJlY3QueSgpLCAxLCBt
YXgoWkVST19MQVlPVVRfVU5JVCwgb2xkQ2xpZW50QWZ0ZXJFZGdlIC0gY2xpZW50UmVjdC55KCkp
KTsKKyAgICAgICAgICAgIHJlY3RUb0FwcGx5ID0gTGF5b3V0UmVjdChjbGllbnRSZWN0LngoKSwg
Y2xpZW50UmVjdC55KCksIDEsIG1heChMYXlvdXRVbml0KDApLCBvbGRDbGllbnRBZnRlckVkZ2Ug
LSBjbGllbnRSZWN0LnkoKSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZWN0VG9BcHBs
eSA9IExheW91dFJlY3QoY2xpZW50UmVjdC54KCksIGNsaWVudFJlY3QueSgpLCBtYXgoWkVST19M
QVlPVVRfVU5JVCwgb2xkQ2xpZW50QWZ0ZXJFZGdlIC0gY2xpZW50UmVjdC54KCkpLCAxKTsKKyAg
ICAgICAgICAgIHJlY3RUb0FwcGx5ID0gTGF5b3V0UmVjdChjbGllbnRSZWN0LngoKSwgY2xpZW50
UmVjdC55KCksIG1heChMYXlvdXRVbml0KDApLCBvbGRDbGllbnRBZnRlckVkZ2UgLSBjbGllbnRS
ZWN0LngoKSksIDEpOwogICAgICAgICBhZGRMYXlvdXRPdmVyZmxvdyhyZWN0VG9BcHBseSk7CiAg
ICAgfQogICAgICAgICAKQEAgLTE4MDYsNyArMTgwNiw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFk
anVzdEZsb2F0aW5nQmxvY2soY28KICAgICAvLyBmb3IgYnkgc2ltcGx5IGNhbGxpbmcgY2FuQ29s
bGFwc2VXaXRoTWFyZ2luQmVmb3JlLiAgU2VlCiAgICAgLy8gaHR0cDovL3d3dy5oaXhpZS5jaC90
ZXN0cy9hZGhvYy9jc3MvYm94L2Jsb2NrL21hcmdpbi1jb2xsYXBzZS8wNDYuaHRtbCBmb3IKICAg
ICAvLyBhbiBleGFtcGxlIG9mIHRoaXMgc2NlbmFyaW8uCi0gICAgTGF5b3V0VW5pdCBtYXJnaW5P
ZmZzZXQgPSBtYXJnaW5JbmZvLmNhbkNvbGxhcHNlV2l0aE1hcmdpbkJlZm9yZSgpID8gWkVST19M
QVlPVVRfVU5JVCA6IG1hcmdpbkluZm8ubWFyZ2luKCk7CisgICAgTGF5b3V0VW5pdCBtYXJnaW5P
ZmZzZXQgPSBtYXJnaW5JbmZvLmNhbkNvbGxhcHNlV2l0aE1hcmdpbkJlZm9yZSgpID8gTGF5b3V0
VW5pdCgwKSA6IG1hcmdpbkluZm8ubWFyZ2luKCk7CiAgICAgc2V0TG9naWNhbEhlaWdodChsb2dp
Y2FsSGVpZ2h0KCkgKyBtYXJnaW5PZmZzZXQpOwogICAgIHBvc2l0aW9uTmV3RmxvYXRzKCk7CiAg
ICAgc2V0TG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0KCkgLSBtYXJnaW5PZmZzZXQpOwpAQCAt
MjIwNiw4ICsyMjA2LDggQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6ZXN0aW1hdGVMb2dpY2Fs
VAogICAgIC8vIHJlbGF5b3V0IGlmIHRoZXJlIGFyZSBpbnRydWRpbmcgZmxvYXRzLgogICAgIExh
eW91dFVuaXQgbG9naWNhbFRvcEVzdGltYXRlID0gbG9naWNhbEhlaWdodCgpOwogICAgIGlmICgh
bWFyZ2luSW5mby5jYW5Db2xsYXBzZVdpdGhNYXJnaW5CZWZvcmUoKSkgewotICAgICAgICBMYXlv
dXRVbml0IHBvc2l0aXZlTWFyZ2luQmVmb3JlID0gWkVST19MQVlPVVRfVU5JVDsKLSAgICAgICAg
TGF5b3V0VW5pdCBuZWdhdGl2ZU1hcmdpbkJlZm9yZSA9IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAg
ICAgIExheW91dFVuaXQgcG9zaXRpdmVNYXJnaW5CZWZvcmUgPSBMYXlvdXRVbml0KDApOworICAg
ICAgICBMYXlvdXRVbml0IG5lZ2F0aXZlTWFyZ2luQmVmb3JlID0gTGF5b3V0VW5pdCgwKTsKICAg
ICAgICAgaWYgKGNoaWxkLT5zZWxmTmVlZHNMYXlvdXQoKSkgewogICAgICAgICAgICAgLy8gVHJ5
IHRvIGRvIGEgYmFzaWMgZXN0aW1hdGlvbiBvZiBob3cgdGhlIGNvbGxhcHNlIGlzIGdvaW5nIHRv
IGdvLgogICAgICAgICAgICAgbWFyZ2luQmVmb3JlRXN0aW1hdGVGb3JDaGlsZChjaGlsZCwgcG9z
aXRpdmVNYXJnaW5CZWZvcmUsIG5lZ2F0aXZlTWFyZ2luQmVmb3JlKTsKQEAgLTI3OTYsOSArMjc5
Niw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q29sdW1uUnVsZXMoUGFpbnQKIAogICAgIGlm
IChjb2xJbmZvLT5wcm9ncmVzc2lvbkF4aXMoKSA9PSBDb2x1bW5JbmZvOjpJbmxpbmVBeGlzKSB7
CiAgICAgICAgIGJvb2wgbGVmdFRvUmlnaHQgPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkgXiBjb2xJbmZvLT5wcm9ncmVzc2lvbklzUmV2ZXJzZWQoKTsKLSAgICAgICAgTGF5b3V0
VW5pdCBjdXJyTG9naWNhbExlZnRPZmZzZXQgPSBsZWZ0VG9SaWdodCA/IFpFUk9fTEFZT1VUX1VO
SVQgOiBjb250ZW50TG9naWNhbFdpZHRoKCk7CisgICAgICAgIExheW91dFVuaXQgY3VyckxvZ2lj
YWxMZWZ0T2Zmc2V0ID0gbGVmdFRvUmlnaHQgPyBMYXlvdXRVbml0KDApIDogY29udGVudExvZ2lj
YWxXaWR0aCgpOwogICAgICAgICBMYXlvdXRVbml0IHJ1bGVBZGQgPSBsb2dpY2FsTGVmdE9mZnNl
dEZvckNvbnRlbnQoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBydWxlTG9naWNhbExlZnQgPSBsZWZ0
VG9SaWdodCA/IFpFUk9fTEFZT1VUX1VOSVQgOiBjb250ZW50TG9naWNhbFdpZHRoKCk7CisgICAg
ICAgIExheW91dFVuaXQgcnVsZUxvZ2ljYWxMZWZ0ID0gbGVmdFRvUmlnaHQgPyBMYXlvdXRVbml0
KDApIDogY29udGVudExvZ2ljYWxXaWR0aCgpOwogICAgICAgICBMYXlvdXRVbml0IGlubGluZURp
cmVjdGlvblNpemUgPSBjb2xJbmZvLT5kZXNpcmVkQ29sdW1uV2lkdGgoKTsKICAgICAgICAgQm94
U2lkZSBib3hTaWRlID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKQogICAgICAgICAgICAgPyBs
ZWZ0VG9SaWdodCA/IEJTTGVmdCA6IEJTUmlnaHQKQEAgLTI5ODgsNyArMjk4OCw3IEBAIGJvb2wg
UmVuZGVyQmxvY2s6OnBhaW50Q2hpbGQoUmVuZGVyQm94KgogICAgIGlmIChjaGVja0FmdGVyQWx3
YXlzCiAgICAgICAgICYmIChhYnNvbHV0ZUNoaWxkWSArIGNoaWxkLT5oZWlnaHQoKSkgPiBwYWlu
dEluZm8ucmVjdC55KCkKICAgICAgICAgJiYgKGFic29sdXRlQ2hpbGRZICsgY2hpbGQtPmhlaWdo
dCgpKSA8IHBhaW50SW5mby5yZWN0Lm1heFkoKSkgewotICAgICAgICB2aWV3KCktPnNldEJlc3RU
cnVuY2F0ZWRBdChhYnNvbHV0ZUNoaWxkWSArIGNoaWxkLT5oZWlnaHQoKSArIG1heChaRVJPX0xB
WU9VVF9VTklULCBjaGlsZC0+Y29sbGFwc2VkTWFyZ2luQWZ0ZXIoKSksIHRoaXMsIHRydWUpOwor
ICAgICAgICB2aWV3KCktPnNldEJlc3RUcnVuY2F0ZWRBdChhYnNvbHV0ZUNoaWxkWSArIGNoaWxk
LT5oZWlnaHQoKSArIG1heChMYXlvdXRVbml0KDApLCBjaGlsZC0+Y29sbGFwc2VkTWFyZ2luQWZ0
ZXIoKSksIHRoaXMsIHRydWUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJl
dHVybiB0cnVlOwpAQCAtMzUxNCwxNCArMzUxNCwxNCBAQCBMYXlvdXRSZWN0IFJlbmRlckJsb2Nr
OjpibG9ja1NlbGVjdGlvbkdhCiB7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wID0gbGFzdExv
Z2ljYWxUb3A7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gYmxvY2tEaXJlY3Rpb25P
ZmZzZXQocm9vdEJsb2NrLCBvZmZzZXRGcm9tUm9vdEJsb2NrKSArIGxvZ2ljYWxCb3R0b20gLSBs
b2dpY2FsVG9wOwotICAgIGlmIChsb2dpY2FsSGVpZ2h0IDw9IFpFUk9fTEFZT1VUX1VOSVQpCisg
ICAgaWYgKGxvZ2ljYWxIZWlnaHQgPD0gTGF5b3V0VW5pdCgwKSkKICAgICAgICAgcmV0dXJuIExh
eW91dFJlY3QoKTsKIAogICAgIC8vIEdldCB0aGUgc2VsZWN0aW9uIG9mZnNldHMgZm9yIHRoZSBi
b3R0b20gb2YgdGhlIGdhcAogICAgIExheW91dFVuaXQgbG9naWNhbExlZnQgPSBtYXgobGFzdExv
Z2ljYWxMZWZ0LCBsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIGxvZ2ljYWxC
b3R0b20pKTsKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodCA9IG1pbihsYXN0TG9naWNhbFJp
Z2h0LCBsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBsb2dpY2FsQm90dG9t
KSk7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGggPSBsb2dpY2FsUmlnaHQgLSBsb2dpY2Fs
TGVmdDsKLSAgICBpZiAobG9naWNhbFdpZHRoIDw9IFpFUk9fTEFZT1VUX1VOSVQpCisgICAgaWYg
KGxvZ2ljYWxXaWR0aCA8PSBMYXlvdXRVbml0KDApKQogICAgICAgICByZXR1cm4gTGF5b3V0UmVj
dCgpOwogCiAgICAgTGF5b3V0UmVjdCBnYXBSZWN0ID0gcm9vdEJsb2NrLT5sb2dpY2FsUmVjdFRv
UGh5c2ljYWxSZWN0KHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIExheW91dFJlY3QobG9naWNh
bExlZnQsIGxvZ2ljYWxUb3AsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCkpOwpAQCAtMzUz
Nyw3ICszNTM3LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJCbG9jazo6bG9naWNhbExlZnRTZWxlYwog
ICAgIExheW91dFVuaXQgcm9vdEJsb2NrTG9naWNhbExlZnQgPSBtYXgobG9naWNhbExlZnRTZWxl
Y3Rpb25PZmZzZXQocm9vdEJsb2NrLCBsb2dpY2FsVG9wKSwgbG9naWNhbExlZnRTZWxlY3Rpb25P
ZmZzZXQocm9vdEJsb2NrLCBsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodCkpOwogICAgIExheW91
dFVuaXQgcm9vdEJsb2NrTG9naWNhbFJpZ2h0ID0gbWluKGlubGluZURpcmVjdGlvbk9mZnNldChy
b290QmxvY2ssIG9mZnNldEZyb21Sb290QmxvY2spICsgZmxvb3JUb0ludChsb2dpY2FsTGVmdCks
IG1pbihsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBsb2dpY2FsVG9wKSwg
bG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbFRvcCArIGxvZ2lj
YWxIZWlnaHQpKSk7CiAgICAgTGF5b3V0VW5pdCByb290QmxvY2tMb2dpY2FsV2lkdGggPSByb290
QmxvY2tMb2dpY2FsUmlnaHQgLSByb290QmxvY2tMb2dpY2FsTGVmdDsKLSAgICBpZiAocm9vdEJs
b2NrTG9naWNhbFdpZHRoIDw9IFpFUk9fTEFZT1VUX1VOSVQpCisgICAgaWYgKHJvb3RCbG9ja0xv
Z2ljYWxXaWR0aCA8PSBMYXlvdXRVbml0KDApKQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgp
OwogCiAgICAgTGF5b3V0UmVjdCBnYXBSZWN0ID0gcm9vdEJsb2NrLT5sb2dpY2FsUmVjdFRvUGh5
c2ljYWxSZWN0KHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIExheW91dFJlY3Qocm9vdEJsb2Nr
TG9naWNhbExlZnQsIHJvb3RCbG9ja0xvZ2ljYWxUb3AsIHJvb3RCbG9ja0xvZ2ljYWxXaWR0aCwg
bG9naWNhbEhlaWdodCkpOwpAQCAtMzU1Myw3ICszNTUzLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJC
bG9jazo6bG9naWNhbFJpZ2h0U2VsZQogICAgIExheW91dFVuaXQgcm9vdEJsb2NrTG9naWNhbExl
ZnQgPSBtYXgoaW5saW5lRGlyZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgb2Zmc2V0RnJvbVJvb3RC
bG9jaykgKyBmbG9vclRvSW50KGxvZ2ljYWxSaWdodCksIG1heChsb2dpY2FsTGVmdFNlbGVjdGlv
bk9mZnNldChyb290QmxvY2ssIGxvZ2ljYWxUb3ApLCBsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNl
dChyb290QmxvY2ssIGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0KSkpOwogICAgIExheW91dFVu
aXQgcm9vdEJsb2NrTG9naWNhbFJpZ2h0ID0gbWluKGxvZ2ljYWxSaWdodFNlbGVjdGlvbk9mZnNl
dChyb290QmxvY2ssIGxvZ2ljYWxUb3ApLCBsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQocm9v
dEJsb2NrLCBsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodCkpOwogICAgIExheW91dFVuaXQgcm9v
dEJsb2NrTG9naWNhbFdpZHRoID0gcm9vdEJsb2NrTG9naWNhbFJpZ2h0IC0gcm9vdEJsb2NrTG9n
aWNhbExlZnQ7Ci0gICAgaWYgKHJvb3RCbG9ja0xvZ2ljYWxXaWR0aCA8PSBaRVJPX0xBWU9VVF9V
TklUKQorICAgIGlmIChyb290QmxvY2tMb2dpY2FsV2lkdGggPD0gTGF5b3V0VW5pdCgwKSkKICAg
ICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKIAogICAgIExheW91dFJlY3QgZ2FwUmVjdCA9IHJv
b3RCbG9jay0+bG9naWNhbFJlY3RUb1BoeXNpY2FsUmVjdChyb290QmxvY2tQaHlzaWNhbFBvc2l0
aW9uLCBMYXlvdXRSZWN0KHJvb3RCbG9ja0xvZ2ljYWxMZWZ0LCByb290QmxvY2tMb2dpY2FsVG9w
LCByb290QmxvY2tMb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpKTsKQEAgLTM4MTMsOCArMzgx
Myw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0KFIKICAgICAgICAg
ICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20gPSBsb2dpY2FsQm90dG9tRm9yRmxvYXQo
cik7CiAKICAgICAgICAgICAgICAgICAvLyBGaXggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01NDk5NS4KLSAgICAgICAgICAgICAgICBpZiAobG9naWNhbEJvdHRv
bSA8IDAgfHwgbG9naWNhbEJvdHRvbSA8IGxvZ2ljYWxUb3AgfHwgbG9naWNhbFRvcCA9PSBNQVhf
TEFZT1VUX1VOSVQpCi0gICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxCb3R0b20gPSBNQVhfTEFZ
T1VUX1VOSVQ7CisgICAgICAgICAgICAgICAgaWYgKGxvZ2ljYWxCb3R0b20gPCAwIHx8IGxvZ2lj
YWxCb3R0b20gPCBsb2dpY2FsVG9wIHx8IGxvZ2ljYWxUb3AgPT0gTGF5b3V0VW5pdDo6bWF4KCkp
CisgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxCb3R0b20gPSBMYXlvdXRVbml0OjptYXgoKTsK
ICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgLy8gU3BlY2lhbC1j
YXNlIHplcm8tIGFuZCBsZXNzLXRoYW4temVyby1oZWlnaHQgZmxvYXRzOiB0aG9zZSBkb24ndCB0
b3VjaAogICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbGluZSB0aGF0IHRoZXkncmUgb24sIGJ1
dCBpdCBzdGlsbCBuZWVkcyB0byBiZSBkaXJ0aWVkLiBUaGlzIGlzCkBAIC00MjY3LDcgKzQyNjcs
NyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpuZXh0RmxvYXRMb2dpY2FsCiAgICAgaWYgKCFt
X2Zsb2F0aW5nT2JqZWN0cykKICAgICAgICAgcmV0dXJuIGxvZ2ljYWxIZWlnaHQ7CiAKLSAgICBM
YXlvdXRVbml0IGJvdHRvbSA9IE1BWF9MQVlPVVRfVU5JVDsKKyAgICBMYXlvdXRVbml0IGJvdHRv
bSA9IExheW91dFVuaXQ6Om1heCgpOwogICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9h
dGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09i
amVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgIGZvciAo
RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewpAQCAtNDI3NywxNCArNDI3NywxNCBAQCBMYXlvdXRVbml0IFJl
bmRlckJsb2NrOjpuZXh0RmxvYXRMb2dpY2FsCiAgICAgICAgICAgICBib3R0b20gPSBtaW4oZmxv
YXRCb3R0b20sIGJvdHRvbSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGJvdHRvbSA9PSBNQVhfTEFZ
T1VUX1VOSVQgPyBaRVJPX0xBWU9VVF9VTklUIDogYm90dG9tOworICAgIHJldHVybiBib3R0b20g
PT0gTGF5b3V0VW5pdDo6bWF4KCkgPyBMYXlvdXRVbml0KDApIDogYm90dG9tOwogfQogCiBMYXlv
dXRVbml0IFJlbmRlckJsb2NrOjpsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20oRmxvYXRpbmdPYmpl
Y3Q6OlR5cGUgZmxvYXRUeXBlKSBjb25zdAogewogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMp
Ci0gICAgICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOwotICAgIExheW91dFVuaXQgbG93ZXN0
RmxvYXRCb3R0b20gPSBaRVJPX0xBWU9VVF9VTklUOworICAgICAgICByZXR1cm4gTGF5b3V0VW5p
dCgwKTsKKyAgICBMYXlvdXRVbml0IGxvd2VzdEZsb2F0Qm90dG9tID0gTGF5b3V0VW5pdCgwKTsK
ICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0
aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBm
bG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0
b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKQEAg
LTQzMDIsNyArNDMwMiw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6Om1hcmtMaW5lc0RpcnR5SW5CbG9j
a1IKIAogICAgIFJvb3RJbmxpbmVCb3gqIGxvd2VzdERpcnR5TGluZSA9IGxhc3RSb290Qm94KCk7
CiAgICAgUm9vdElubGluZUJveCogYWZ0ZXJMb3dlc3QgPSBsb3dlc3REaXJ0eUxpbmU7Ci0gICAg
d2hpbGUgKGxvd2VzdERpcnR5TGluZSAmJiBsb3dlc3REaXJ0eUxpbmUtPmxpbmVCb3R0b21XaXRo
TGVhZGluZygpID49IGxvZ2ljYWxCb3R0b20gJiYgbG9naWNhbEJvdHRvbSA8IE1BWF9MQVlPVVRf
VU5JVCkgeworICAgIHdoaWxlIChsb3dlc3REaXJ0eUxpbmUgJiYgbG93ZXN0RGlydHlMaW5lLT5s
aW5lQm90dG9tV2l0aExlYWRpbmcoKSA+PSBsb2dpY2FsQm90dG9tICYmIGxvZ2ljYWxCb3R0b20g
PCBMYXlvdXRVbml0OjptYXgoKSkgewogICAgICAgICBhZnRlckxvd2VzdCA9IGxvd2VzdERpcnR5
TGluZTsKICAgICAgICAgbG93ZXN0RGlydHlMaW5lID0gbG93ZXN0RGlydHlMaW5lLT5wcmV2Um9v
dEJveCgpOwogICAgIH0KQEAgLTQzOTMsOCArNDM5Myw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNs
ZWFyRmxvYXRzKCkKICAgICAgICAgYWRkSW50cnVkaW5nRmxvYXRzKGJsb2NrLCBsb2dpY2FsTGVm
dE9mZnNldCwgbG9naWNhbFRvcE9mZnNldCk7CiAKICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkg
ewotICAgICAgICBMYXlvdXRVbml0IGNoYW5nZUxvZ2ljYWxUb3AgPSBNQVhfTEFZT1VUX1VOSVQ7
Ci0gICAgICAgIExheW91dFVuaXQgY2hhbmdlTG9naWNhbEJvdHRvbSA9IE1JTl9MQVlPVVRfVU5J
VDsKKyAgICAgICAgTGF5b3V0VW5pdCBjaGFuZ2VMb2dpY2FsVG9wID0gTGF5b3V0VW5pdDo6bWF4
KCk7CisgICAgICAgIExheW91dFVuaXQgY2hhbmdlTG9naWNhbEJvdHRvbSA9IExheW91dFVuaXQ6
Om1pbigpOwogICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKICAgICAgICAgICAgIGNv
bnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmpl
Y3RzLT5zZXQoKTsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0g
ZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CkBAIC00NDc1LDcgKzQ0NzUsNyBAQCBMYXlvdXRVbml0
IFJlbmRlckJsb2NrOjphZGRPdmVyaGFuZ2luZ0ZsCiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVy
YXRvciBjaGlsZEVuZCA9IGNoaWxkLT5tX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuZW5kKCk7CiAg
ICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGNoaWxkSXQgPSBjaGlsZC0+bV9mbG9h
dGluZ09iamVjdHMtPnNldCgpLmJlZ2luKCk7IGNoaWxkSXQgIT0gY2hpbGRFbmQ7ICsrY2hpbGRJ
dCkgewogICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICpjaGlsZEl0OwotICAgICAgICBMYXlv
dXRVbml0IGxvZ2ljYWxCb3R0b21Gb3JGbG9hdCA9IG1pbih0aGlzLT5sb2dpY2FsQm90dG9tRm9y
RmxvYXQociksIE1BWF9MQVlPVVRfVU5JVCAtIGNoaWxkTG9naWNhbFRvcCk7CisgICAgICAgIExh
eW91dFVuaXQgbG9naWNhbEJvdHRvbUZvckZsb2F0ID0gbWluKHRoaXMtPmxvZ2ljYWxCb3R0b21G
b3JGbG9hdChyKSwgTGF5b3V0VW5pdDo6bWF4KCkgLSBjaGlsZExvZ2ljYWxUb3ApOwogICAgICAg
ICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20gPSBjaGlsZExvZ2ljYWxUb3AgKyBsb2dpY2FsQm90
dG9tRm9yRmxvYXQ7CiAgICAgICAgIGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSA9IG1heChsb3dl
c3RGbG9hdExvZ2ljYWxCb3R0b20sIGxvZ2ljYWxCb3R0b20pOwogCkBAIC00NjYwLDcgKzQ2NjAs
NyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpnZXRDbGVhckRlbHRhKFJlCiAgICAgfQogCiAg
ICAgLy8gV2UgYWxzbyBjbGVhciBmbG9hdHMgaWYgd2UgYXJlIHRvbyBiaWcgdG8gc2l0IG9uIHRo
ZSBzYW1lIGxpbmUgYXMgYSBmbG9hdCAoYW5kIHdpc2ggdG8gYXZvaWQgZmxvYXRzIGJ5IGRlZmF1
bHQpLgotICAgIExheW91dFVuaXQgcmVzdWx0ID0gY2xlYXJTZXQgPyBtYXgoWkVST19MQVlPVVRf
VU5JVCwgbG9naWNhbEJvdHRvbSAtIGxvZ2ljYWxUb3ApIDogWkVST19MQVlPVVRfVU5JVDsKKyAg
ICBMYXlvdXRVbml0IHJlc3VsdCA9IGNsZWFyU2V0ID8gbWF4KExheW91dFVuaXQoMCksIGxvZ2lj
YWxCb3R0b20gLSBsb2dpY2FsVG9wKSA6IExheW91dFVuaXQoMCk7CiAgICAgaWYgKCFyZXN1bHQg
JiYgY2hpbGQtPmF2b2lkc0Zsb2F0cygpKSB7CiAgICAgICAgIExheW91dFVuaXQgbmV3TG9naWNh
bFRvcCA9IGxvZ2ljYWxUb3A7CiAgICAgICAgIHdoaWxlICh0cnVlKSB7CkBAIC01NzgwLDcgKzU3
ODAsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlSW5saW5lUHJlZmVycmVkCiAKICAgICBS
ZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9IHN0eWxlKCk7CiAgICAgUmVuZGVyQmxvY2sqIGNvbnRh
aW5pbmdCbG9jayA9IHRoaXMtPmNvbnRhaW5pbmdCbG9jaygpOwotICAgIExheW91dFVuaXQgY3cg
PSBjb250YWluaW5nQmxvY2sgPyBjb250YWluaW5nQmxvY2stPmNvbnRlbnRMb2dpY2FsV2lkdGgo
KSA6IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgTGF5b3V0VW5pdCBjdyA9IGNvbnRhaW5pbmdCbG9j
ayA/IGNvbnRhaW5pbmdCbG9jay0+Y29udGVudExvZ2ljYWxXaWR0aCgpIDogTGF5b3V0VW5pdCgw
KTsKIAogICAgIC8vIElmIHdlIGFyZSBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lLCB3ZSB3YW50IHRv
IGlnbm9yZSBhbGwgd2hpdGUtc3BhY2UuCiAgICAgLy8gQWxzbyBzdHJpcCBzcGFjZXMgaWYgd2Ug
cHJldmlvdXNseSBoYWQgdGV4dCB0aGF0IGVuZGVkIGluIGEgdHJhaWxpbmcgc3BhY2UuCkBAIC02
MTU3LDggKzYxNTcsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlQmxvY2tQcmVmZXJyZWRM
CiAgICAgfQogCiAgICAgLy8gQWx3YXlzIG1ha2Ugc3VyZSB0aGVzZSB2YWx1ZXMgYXJlIG5vbi1u
ZWdhdGl2ZS4KLSAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1heChaRVJPX0xBWU9V
VF9VTklULCBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCk7Ci0gICAgbV9tYXhQcmVmZXJyZWRM
b2dpY2FsV2lkdGggPSBtYXgoWkVST19MQVlPVVRfVU5JVCwgbV9tYXhQcmVmZXJyZWRMb2dpY2Fs
V2lkdGgpOworICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4KExheW91dFVuaXQo
MCksIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoKTsKKyAgICBtX21heFByZWZlcnJlZExvZ2lj
YWxXaWR0aCA9IG1heChMYXlvdXRVbml0KDApLCBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCk7
CiAKICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1heChmbG9hdExlZnRXaWR0aCAr
IGZsb2F0UmlnaHRXaWR0aCwgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgpOwogfQpAQCAtNjU4
OSw3ICs2NTg5LDcgQEAgc3RhdGljIGludCBnZXRIZWlnaHRGb3JMaW5lQ291bnQoUmVuZGVyQgog
ICAgICAgICBpZiAoYmxvY2stPmNoaWxkcmVuSW5saW5lKCkpIHsKICAgICAgICAgICAgIGZvciAo
Um9vdElubGluZUJveCogYm94ID0gYmxvY2stPmZpcnN0Um9vdEJveCgpOyBib3g7IGJveCA9IGJv
eC0+bmV4dFJvb3RCb3goKSkgewogICAgICAgICAgICAgICAgIGlmICgrK2NvdW50ID09IGwpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBib3gtPmxpbmVCb3R0b20oKSArIChpbmNsdWRlQm90
dG9tID8gKGJsb2NrLT5ib3JkZXJCb3R0b20oKSArIGJsb2NrLT5wYWRkaW5nQm90dG9tKCkpIDog
WkVST19MQVlPVVRfVU5JVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBib3gtPmxpbmVC
b3R0b20oKSArIChpbmNsdWRlQm90dG9tID8gKGJsb2NrLT5ib3JkZXJCb3R0b20oKSArIGJsb2Nr
LT5wYWRkaW5nQm90dG9tKCkpIDogTGF5b3V0VW5pdCgwKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgICAgZWxzZSB7CkBAIC02NTk4LDcgKzY1OTgsNyBAQCBzdGF0aWMgaW50IGdl
dEhlaWdodEZvckxpbmVDb3VudChSZW5kZXJCCiAgICAgICAgICAgICAgICAgaWYgKHNob3VsZENo
ZWNrTGluZXMob2JqKSkgewogICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ID0gZ2V0SGVp
Z2h0Rm9yTGluZUNvdW50KHRvUmVuZGVyQmxvY2sob2JqKSwgbCwgZmFsc2UsIGNvdW50KTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSAtMSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQgKyBvYmotPnkoKSArIChpbmNsdWRlQm90dG9tID8gKGJsb2NrLT5i
b3JkZXJCb3R0b20oKSArIGJsb2NrLT5wYWRkaW5nQm90dG9tKCkpIDogWkVST19MQVlPVVRfVU5J
VCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgb2JqLT55KCkgKyAo
aW5jbHVkZUJvdHRvbSA/IChibG9jay0+Ym9yZGVyQm90dG9tKCkgKyBibG9jay0+cGFkZGluZ0Jv
dHRvbSgpKSA6IExheW91dFVuaXQoMCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW9i
ai0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmICFvYmotPmlzUnVuSW4oKSkK
ICAgICAgICAgICAgICAgICAgICAgbm9ybWFsRmxvd0NoaWxkV2l0aG91dExpbmVzID0gb2JqOwog
ICAgICAgICAgICAgfQpAQCAtNjY4NywxMSArNjY4NywxMSBAQCB2b2lkIFJlbmRlckJsb2NrOjpi
b3JkZXJGaXRBZGp1c3QoTGF5b3V0CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdhbGsgYW55
IG5vcm1hbCBmbG93IGxpbmVzIHRvIHNudWdseSBmaXQuCi0gICAgTGF5b3V0VW5pdCBsZWZ0ID0g
TUFYX0xBWU9VVF9VTklUOwotICAgIExheW91dFVuaXQgcmlnaHQgPSBNSU5fTEFZT1VUX1VOSVQ7
CisgICAgTGF5b3V0VW5pdCBsZWZ0ID0gTGF5b3V0VW5pdDo6bWF4KCk7CisgICAgTGF5b3V0VW5p
dCByaWdodCA9IExheW91dFVuaXQ6Om1pbigpOwogICAgIExheW91dFVuaXQgb2xkV2lkdGggPSBy
ZWN0LndpZHRoKCk7CiAgICAgYWRqdXN0Rm9yQm9yZGVyRml0KDAsIGxlZnQsIHJpZ2h0KTsKLSAg
ICBpZiAobGVmdCAhPSBNQVhfTEFZT1VUX1VOSVQpIHsKKyAgICBpZiAobGVmdCAhPSBMYXlvdXRV
bml0OjptYXgoKSkgewogICAgICAgICBsZWZ0ID0gbWluKGxlZnQsIG9sZFdpZHRoIC0gKGJvcmRl
clJpZ2h0KCkgKyBwYWRkaW5nUmlnaHQoKSkpOwogCiAgICAgICAgIGxlZnQgLT0gKGJvcmRlckxl
ZnQoKSArIHBhZGRpbmdMZWZ0KCkpOwpAQCAtNjcwMCw3ICs2NzAwLDcgQEAgdm9pZCBSZW5kZXJC
bG9jazo6Ym9yZGVyRml0QWRqdXN0KExheW91dAogICAgICAgICAgICAgcmVjdC5leHBhbmQoLWxl
ZnQsIDApOwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChyaWdodCAhPSBNSU5fTEFZT1VUX1VO
SVQpIHsKKyAgICBpZiAocmlnaHQgIT0gTGF5b3V0VW5pdDo6bWluKCkpIHsKICAgICAgICAgcmln
aHQgPSBtYXgocmlnaHQsIGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkpOwogCiAgICAgICAg
IHJpZ2h0ICs9IChib3JkZXJSaWdodCgpICsgcGFkZGluZ1JpZ2h0KCkpOwpAQCAtNjg4Nyw4ICs2
ODg3LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdAogICAgICAg
ICAvLyBGSVhNRTogVGhpcyBpcyB3cm9uZyBmb3IgYmxvY2stZmxvd3MgdGhhdCBhcmUgaG9yaXpv
bnRhbC4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ2NzgxCiAgICAgICAgIGJvb2wgcHJldklubGluZUhhc0xpbmVCb3ggPSB0b1JlbmRlcklubGlu
ZShpbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCktPm5vZGUoKS0+cmVuZGVyZXIoKSktPmZpcnN0
TGluZUJveCgpOyAKLSAgICAgICAgZmxvYXQgdG9wTWFyZ2luID0gcHJldklubGluZUhhc0xpbmVC
b3ggPyBjb2xsYXBzZWRNYXJnaW5CZWZvcmUoKSA6IFpFUk9fTEFZT1VUX1VOSVQ7Ci0gICAgICAg
IGZsb2F0IGJvdHRvbU1hcmdpbiA9IG5leHRJbmxpbmVIYXNMaW5lQm94ID8gY29sbGFwc2VkTWFy
Z2luQWZ0ZXIoKSA6IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAgIGZsb2F0IHRvcE1hcmdpbiA9
IHByZXZJbmxpbmVIYXNMaW5lQm94ID8gY29sbGFwc2VkTWFyZ2luQmVmb3JlKCkgOiBMYXlvdXRV
bml0KDApOworICAgICAgICBmbG9hdCBib3R0b21NYXJnaW4gPSBuZXh0SW5saW5lSGFzTGluZUJv
eCA/IGNvbGxhcHNlZE1hcmdpbkFmdGVyKCkgOiBMYXlvdXRVbml0KDApOwogICAgICAgICBMYXlv
dXRSZWN0IHJlY3QoYWRkaXRpb25hbE9mZnNldC54KCksIGFkZGl0aW9uYWxPZmZzZXQueSgpIC0g
dG9wTWFyZ2luLCB3aWR0aCgpLCBoZWlnaHQoKSArIHRvcE1hcmdpbiArIGJvdHRvbU1hcmdpbik7
CiAgICAgICAgIGlmICghcmVjdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZWN0cy5hcHBlbmQo
cGl4ZWxTbmFwcGVkSW50UmVjdChyZWN0KSk7CkBAIC02OTkzLDcgKzY5OTMsNyBAQCBMYXlvdXRV
bml0IFJlbmRlckJsb2NrOjphcHBseUJlZm9yZUJyZWFrCiAgICAgICAgIGlmIChjaGVja0NvbHVt
bkJyZWFrcykKICAgICAgICAgICAgIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+YWRkRm9yY2VkQ29s
dW1uQnJlYWsoY2hpbGQsIGxvZ2ljYWxPZmZzZXQpOwogICAgICAgICBpZiAoY2hlY2tSZWdpb25C
cmVha3MpIHsKLSAgICAgICAgICAgIExheW91dFVuaXQgb2Zmc2V0QnJlYWtBZGp1c3RtZW50ID0g
WkVST19MQVlPVVRfVU5JVDsKKyAgICAgICAgICAgIExheW91dFVuaXQgb2Zmc2V0QnJlYWtBZGp1
c3RtZW50ID0gTGF5b3V0VW5pdCgwKTsKICAgICAgICAgICAgIGlmIChlbmNsb3NpbmdSZW5kZXJG
bG93VGhyZWFkKCktPmFkZEZvcmNlZFJlZ2lvbkJyZWFrKG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZG
aXJzdFBhZ2UoKSArIGxvZ2ljYWxPZmZzZXQsIGNoaWxkLCB0cnVlLCAmb2Zmc2V0QnJlYWtBZGp1
c3RtZW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4gbG9naWNhbE9mZnNldCArIG9mZnNldEJy
ZWFrQWRqdXN0bWVudDsKICAgICAgICAgfQpAQCAtNzAxNSw4ICs3MDE1LDggQEAgTGF5b3V0VW5p
dCBSZW5kZXJCbG9jazo6YXBwbHlBZnRlckJyZWFrKAogICAgICAgICBpZiAoY2hlY2tDb2x1bW5C
cmVha3MpCiAgICAgICAgICAgICB2aWV3KCktPmxheW91dFN0YXRlKCktPmFkZEZvcmNlZENvbHVt
bkJyZWFrKGNoaWxkLCBsb2dpY2FsT2Zmc2V0KTsKICAgICAgICAgaWYgKGNoZWNrUmVnaW9uQnJl
YWtzKSB7Ci0gICAgICAgICAgICBMYXlvdXRVbml0IG1hcmdpbk9mZnNldCA9IG1hcmdpbkluZm8u
Y2FuQ29sbGFwc2VXaXRoTWFyZ2luQmVmb3JlKCkgPyBaRVJPX0xBWU9VVF9VTklUIDogbWFyZ2lu
SW5mby5tYXJnaW4oKTsKLSAgICAgICAgICAgIExheW91dFVuaXQgb2Zmc2V0QnJlYWtBZGp1c3Rt
ZW50ID0gWkVST19MQVlPVVRfVU5JVDsKKyAgICAgICAgICAgIExheW91dFVuaXQgbWFyZ2luT2Zm
c2V0ID0gbWFyZ2luSW5mby5jYW5Db2xsYXBzZVdpdGhNYXJnaW5CZWZvcmUoKSA/IExheW91dFVu
aXQoMCkgOiBtYXJnaW5JbmZvLm1hcmdpbigpOworICAgICAgICAgICAgTGF5b3V0VW5pdCBvZmZz
ZXRCcmVha0FkanVzdG1lbnQgPSBMYXlvdXRVbml0KDApOwogICAgICAgICAgICAgaWYgKGVuY2xv
c2luZ1JlbmRlckZsb3dUaHJlYWQoKS0+YWRkRm9yY2VkUmVnaW9uQnJlYWsob2Zmc2V0RnJvbUxv
Z2ljYWxUb3BPZkZpcnN0UGFnZSgpICsgbG9naWNhbE9mZnNldCArIG1hcmdpbk9mZnNldCwgY2hp
bGQsIGZhbHNlLCAmb2Zmc2V0QnJlYWtBZGp1c3RtZW50KSkKICAgICAgICAgICAgICAgICByZXR1
cm4gbG9naWNhbE9mZnNldCArIG9mZnNldEJyZWFrQWRqdXN0bWVudDsKICAgICAgICAgfQpAQCAt
NzA3OCw3ICs3MDc4LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yVW5zcGxp
dAogICAgICAgICB8fCAoY2hlY2tSZWdpb25CcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPnJlZ2lv
bkJyZWFrSW5zaWRlKCkgPT0gUEJBVk9JRCk7CiAgICAgaWYgKCFpc1Vuc3BsaXR0YWJsZSkKICAg
ICAgICAgcmV0dXJuIGxvZ2ljYWxPZmZzZXQ7Ci0gICAgTGF5b3V0VW5pdCBjaGlsZExvZ2ljYWxI
ZWlnaHQgPSBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoY2hpbGQpICsgKGluY2x1ZGVNYXJnaW5zID8g
bWFyZ2luQmVmb3JlRm9yQ2hpbGQoY2hpbGQpICsgbWFyZ2luQWZ0ZXJGb3JDaGlsZChjaGlsZCkg
OiBaRVJPX0xBWU9VVF9VTklUKTsKKyAgICBMYXlvdXRVbml0IGNoaWxkTG9naWNhbEhlaWdodCA9
IGxvZ2ljYWxIZWlnaHRGb3JDaGlsZChjaGlsZCkgKyAoaW5jbHVkZU1hcmdpbnMgPyBtYXJnaW5C
ZWZvcmVGb3JDaGlsZChjaGlsZCkgKyBtYXJnaW5BZnRlckZvckNoaWxkKGNoaWxkKSA6IExheW91
dFVuaXQoMCkpOwogICAgIExheW91dFN0YXRlKiBsYXlvdXRTdGF0ZSA9IHZpZXcoKS0+bGF5b3V0
U3RhdGUoKTsKICAgICBpZiAobGF5b3V0U3RhdGUtPm1fY29sdW1uSW5mbykKICAgICAgICAgbGF5
b3V0U3RhdGUtPm1fY29sdW1uSW5mby0+dXBkYXRlTWluaW11bUNvbHVtbkhlaWdodChjaGlsZExv
Z2ljYWxIZWlnaHQpOwpAQCAtNzE1NiwxMiArNzE1NiwxMiBAQCB2b2lkIFJlbmRlckJsb2NrOjph
ZGp1c3RMaW5lUG9zaXRpb25Gb3JQCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChs
aW5lSGVpZ2h0ID4gcGFnZUxvZ2ljYWxIZWlnaHQpIHsKICAgICAgICAgICAgIC8vIFNwbGl0IHRo
ZSB0b3AgbWFyZ2luIGluIG9yZGVyIHRvIGF2b2lkIHNwbGl0dGluZyB0aGUgdmlzaWJsZSBwYXJ0
IG9mIHRoZSBsaW5lLgotICAgICAgICAgICAgcmVtYWluaW5nTG9naWNhbEhlaWdodCAtPSBtaW4o
bGluZUhlaWdodCAtIHBhZ2VMb2dpY2FsSGVpZ2h0LCBtYXgoWkVST19MQVlPVVRfVU5JVCwgbG9n
aWNhbFZpc3VhbE92ZXJmbG93LnkoKSAtIGxpbmVCb3gtPmxpbmVUb3BXaXRoTGVhZGluZygpKSk7
CisgICAgICAgICAgICByZW1haW5pbmdMb2dpY2FsSGVpZ2h0IC09IG1pbihsaW5lSGVpZ2h0IC0g
cGFnZUxvZ2ljYWxIZWlnaHQsIG1heChMYXlvdXRVbml0KDApLCBsb2dpY2FsVmlzdWFsT3ZlcmZs
b3cueSgpIC0gbGluZUJveC0+bGluZVRvcFdpdGhMZWFkaW5nKCkpKTsKICAgICAgICAgfQotICAg
ICAgICBMYXlvdXRVbml0IHRvdGFsTG9naWNhbEhlaWdodCA9IGxpbmVIZWlnaHQgKyBtYXgoWkVS
T19MQVlPVVRfVU5JVCwgbG9naWNhbE9mZnNldCk7CisgICAgICAgIExheW91dFVuaXQgdG90YWxM
b2dpY2FsSGVpZ2h0ID0gbGluZUhlaWdodCArIG1heChMYXlvdXRVbml0KDApLCBsb2dpY2FsT2Zm
c2V0KTsKICAgICAgICAgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodEF0TmV3T2Zmc2V0ID0g
aGFzVW5pZm9ybVBhZ2VMb2dpY2FsSGVpZ2h0ID8gcGFnZUxvZ2ljYWxIZWlnaHQgOiBwYWdlTG9n
aWNhbEhlaWdodEZvck9mZnNldChsb2dpY2FsT2Zmc2V0ICsgcmVtYWluaW5nTG9naWNhbEhlaWdo
dCk7CiAgICAgICAgIGlmIChsaW5lQm94ID09IGZpcnN0Um9vdEJveCgpICYmIHRvdGFsTG9naWNh
bEhlaWdodCA8IHBhZ2VMb2dpY2FsSGVpZ2h0QXROZXdPZmZzZXQgJiYgIWlzT3V0T2ZGbG93UG9z
aXRpb25lZCgpICYmICFpc1RhYmxlQ2VsbCgpKQotICAgICAgICAgICAgc2V0UGFnaW5hdGlvblN0
cnV0KHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQgKyBtYXgoWkVST19MQVlPVVRfVU5JVCwgbG9naWNh
bE9mZnNldCkpOworICAgICAgICAgICAgc2V0UGFnaW5hdGlvblN0cnV0KHJlbWFpbmluZ0xvZ2lj
YWxIZWlnaHQgKyBtYXgoTGF5b3V0VW5pdCgwKSwgbG9naWNhbE9mZnNldCkpOwogICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgIGRlbHRhICs9IHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQ7CiAgICAg
ICAgICAgICBsaW5lQm94LT5zZXRQYWdpbmF0aW9uU3RydXQocmVtYWluaW5nTG9naWNhbEhlaWdo
dCk7CkBAIC03MjQ5LDcgKzcyNDksNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpvZmZzZXRG
cm9tTG9naWNhCiB7CiAgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdmlldygpLT5sYXlv
dXRTdGF0ZSgpOwogICAgIGlmIChsYXlvdXRTdGF0ZSAmJiAhbGF5b3V0U3RhdGUtPmlzUGFnaW5h
dGVkKCkpCi0gICAgICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOworICAgICAgICByZXR1cm4g
TGF5b3V0VW5pdCgwKTsKICAgICBpZiAobGF5b3V0U3RhdGUpIHsKICAgICAgICAgLy8gRklYTUU6
IFNhbml0eSBjaGVjayB0aGF0IHRoZSByZW5kZXJlciBpbiB0aGUgbGF5b3V0IHN0YXRlIGlzIG91
cnMsIHNpbmNlIG90aGVyd2lzZSB0aGUgY29tcHV0YXRpb24gd2lsbCBiZSBvZmYuCiAgICAgICAg
IC8vIFJpZ2h0IG5vdyB0aGlzIGFzc2VydCBnZXRzIGhpdCBpbnNpZGUgY29tcHV0ZUxvZ2ljYWxI
ZWlnaHQgZm9yIHBlcmNlbnRhZ2UgbWFyZ2lucywgc2luY2UgdGhleSdyZSBjb21wdXRlZCB1c2lu
ZwpAQCAtNzI2NSw3ICs3MjY1LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6b2Zmc2V0RnJv
bUxvZ2ljYQogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgc2xvd2VyIHBhdGggdGhhdCBkb2Vzbid0
IHVzZSBsYXlvdXQgc3RhdGUgYW5kIHJlbGllcyBvbiBnZXR0aW5nIHlvdXIgbG9naWNhbCB0b3Ag
aW5zaWRlIHRoZSBlbmNsb3NpbmcgZmxvdyB0aHJlYWQuIEl0IGRvZXNuJ3QKICAgICAvLyB3b3Jr
IHdpdGggY29sdW1ucyBvciBwYWdlcyBjdXJyZW50bHksIGJ1dCBpdCBzaG91bGQgb25jZSB0aGV5
IGhhdmUgYmVlbiBzd2l0Y2hlZCBvdmVyIHRvIHVzaW5nIGZsb3cgdGhyZWFkcy4KICAgICBpZiAo
IWluUmVuZGVyRmxvd1RocmVhZCgpKQotICAgICAgICByZXR1cm4gWkVST19MQVlPVVRfVU5JVDsK
KyAgICAgICAgcmV0dXJuIExheW91dFVuaXQoMCk7CiAKICAgICBjb25zdCBSZW5kZXJCbG9jayog
Y3VycmVudEJsb2NrID0gdGhpczsKICAgICBMYXlvdXRSZWN0IGJsb2NrUmVjdCgwLCAwLCB3aWR0
aCgpLCBoZWlnaHQoKSk7CkBAIC03Mjc0LDcgKzcyNzQsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJs
b2NrOjpvZmZzZXRGcm9tTG9naWNhCiAgICAgICAgIFJlbmRlckJsb2NrKiBjb250YWluZXJCbG9j
ayA9IGN1cnJlbnRCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAgIEFTU0VSVChjb250
YWluZXJCbG9jayk7CiAgICAgICAgIGlmICghY29udGFpbmVyQmxvY2spCi0gICAgICAgICAgICBy
ZXR1cm4gWkVST19MQVlPVVRfVU5JVDsKKyAgICAgICAgICAgIHJldHVybiBMYXlvdXRVbml0KDAp
OwogICAgICAgICBMYXlvdXRQb2ludCBjdXJyZW50QmxvY2tMb2NhdGlvbiA9IGN1cnJlbnRCbG9j
ay0+bG9jYXRpb24oKTsKIAogICAgICAgICBpZiAoY29udGFpbmVyQmxvY2stPnN0eWxlKCktPndy
aXRpbmdNb2RlKCkgIT0gY3VycmVudEJsb2NrLT5zdHlsZSgpLT53cml0aW5nTW9kZSgpKSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gMTMzNTE3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE0OSw3ICsxNDksNyBAQCBwdWJsaWM6CiAgICAgLy8gY29tcHV0ZSB0aGUgcmVnaW9u
IGFsbCBvdmVyIGFnYWluIHdoZW4geW91IGFscmVhZHkga25vdyBpdC4KICAgICBMYXlvdXRVbml0
IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUoTGF5b3V0VW5pdCBwb3NpdGlvbiwgYm9vbCBm
aXJzdExpbmUsIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dp
Y2FsVG9wT2ZGaXJzdFBhZ2UsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IDApIGNvbnN0CiAg
ICAgewotICAgICAgICByZXR1cm4gbWF4KFpFUk9fTEFZT1VUX1VOSVQsIGxvZ2ljYWxSaWdodE9m
ZnNldEZvckxpbmUocG9zaXRpb24sIGZpcnN0TGluZSwgcmVnaW9uLCBvZmZzZXRGcm9tTG9naWNh
bFRvcE9mRmlyc3RQYWdlLCBsb2dpY2FsSGVpZ2h0KQorICAgICAgICByZXR1cm4gbWF4KExheW91
dFVuaXQoMCksIGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUocG9zaXRpb24sIGZpcnN0TGluZSwg
cmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlLCBsb2dpY2FsSGVpZ2h0KQog
ICAgICAgICAgICAgLSBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUocG9zaXRpb24sIGZpcnN0TGlu
ZSwgcmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlLCBsb2dpY2FsSGVpZ2h0
KSk7CiAgICAgfQogICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShMYXlv
dXRVbml0IHBvc2l0aW9uLCBib29sIGZpcnN0TGluZSwgUmVuZGVyUmVnaW9uKiByZWdpb24sIExh
eW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSwgTGF5b3V0VW5pdCBsb2dp
Y2FsSGVpZ2h0ID0gMCkgY29uc3QgCkBAIC0yOTcsMTIgKzI5NywxMiBAQCBwdWJsaWM6CiAgICAg
dW5zaWduZWQgY29sdW1uQ291bnQoQ29sdW1uSW5mbyopIGNvbnN0OwogICAgIExheW91dFJlY3Qg
Y29sdW1uUmVjdEF0KENvbHVtbkluZm8qLCB1bnNpZ25lZCkgY29uc3Q7CiAKLSAgICBMYXlvdXRV
bml0IHBhZ2luYXRpb25TdHJ1dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVE
YXRhLT5tX3BhZ2luYXRpb25TdHJ1dCA6IFpFUk9fTEFZT1VUX1VOSVQ7IH0KKyAgICBMYXlvdXRV
bml0IHBhZ2luYXRpb25TdHJ1dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVE
YXRhLT5tX3BhZ2luYXRpb25TdHJ1dCA6IExheW91dFVuaXQoMCk7IH0KICAgICB2b2lkIHNldFBh
Z2luYXRpb25TdHJ1dChMYXlvdXRVbml0KTsKICAgICAKICAgICAvLyBUaGUgcGFnZSBsb2dpY2Fs
IG9mZnNldCBpcyB0aGUgb2JqZWN0J3Mgb2Zmc2V0IGZyb20gdGhlIHRvcCBvZiB0aGUgcGFnZSBp
biB0aGUgcGFnZSBwcm9ncmVzc2lvbgogICAgIC8vIGRpcmVjdGlvbiAoc28gYW4geC1vZmZzZXQg
aW4gdmVydGljYWwgdGV4dCBhbmQgYSB5LW9mZnNldCBmb3IgaG9yaXpvbnRhbCB0ZXh0KS4KLSAg
ICBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0
YSA/IG1fcmFyZURhdGEtPm1fcGFnZUxvZ2ljYWxPZmZzZXQgOiBaRVJPX0xBWU9VVF9VTklUOyB9
CisgICAgTGF5b3V0VW5pdCBwYWdlTG9naWNhbE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFy
ZURhdGEgPyBtX3JhcmVEYXRhLT5tX3BhZ2VMb2dpY2FsT2Zmc2V0IDogTGF5b3V0VW5pdCgwKTsg
fQogICAgIHZvaWQgc2V0UGFnZUxvZ2ljYWxPZmZzZXQoTGF5b3V0VW5pdCk7CiAKICAgICBSb290
SW5saW5lQm94KiBsaW5lR3JpZEJveCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3Jh
cmVEYXRhLT5tX2xpbmVHcmlkQm94IDogMDsgfQpAQCAtMzcxLDcgKzM3MSw3IEBAIHB1YmxpYzoK
ICAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQoUmVuZGVyUmVnaW9u
KiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSBjb25zdDsKICAg
ICBMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckNvbnRlbnQoUmVuZGVyUmVnaW9u
KiByZWdpb24sIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgY29u
c3QKICAgICB7IAotICAgICAgICByZXR1cm4gbWF4KFpFUk9fTEFZT1VUX1VOSVQsIGxvZ2ljYWxS
aWdodE9mZnNldEZvckNvbnRlbnQocmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQ
YWdlKSAtCisgICAgICAgIHJldHVybiBtYXgoTGF5b3V0VW5pdCgwKSwgbG9naWNhbFJpZ2h0T2Zm
c2V0Rm9yQ29udGVudChyZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIC0K
ICAgICAgICAgICAgIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudChyZWdpb24sIG9mZnNldEZy
b21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpKTsgfQogICAgIExheW91dFVuaXQgc3RhcnRPZmZzZXRG
b3JDb250ZW50KFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dp
Y2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0CiAgICAgewpAQCAtMTE0NCwyMCArMTE0NCwyMCBAQCBw
cm90ZWN0ZWQ6CiAKICAgICAgICAgc3RhdGljIExheW91dFVuaXQgcG9zaXRpdmVNYXJnaW5CZWZv
cmVEZWZhdWx0KGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaykKICAgICAgICAgeyAKLSAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1heChibG9jay0+bWFyZ2luQmVmb3JlKCksIFpFUk9fTEFZT1VUX1VO
SVQpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KGJsb2NrLT5tYXJnaW5CZWZvcmUoKSwg
TGF5b3V0VW5pdCgwKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBMYXlv
dXRVbml0IG5lZ2F0aXZlTWFyZ2luQmVmb3JlRGVmYXVsdChjb25zdCBSZW5kZXJCbG9jayogYmxv
Y2spCiAgICAgICAgIHsgCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptYXgoLWJsb2NrLT5tYXJn
aW5CZWZvcmUoKSwgWkVST19MQVlPVVRfVU5JVCk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpt
YXg8TGF5b3V0VW5pdD4oLWJsb2NrLT5tYXJnaW5CZWZvcmUoKSwgMCk7CiAgICAgICAgIH0KICAg
ICAgICAgc3RhdGljIExheW91dFVuaXQgcG9zaXRpdmVNYXJnaW5BZnRlckRlZmF1bHQoY29uc3Qg
UmVuZGVyQmxvY2sqIGJsb2NrKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpt
YXgoYmxvY2stPm1hcmdpbkFmdGVyKCksIFpFUk9fTEFZT1VUX1VOSVQpOworICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bWF4PExheW91dFVuaXQ+KGJsb2NrLT5tYXJnaW5BZnRlcigpLCAwKTsKICAg
ICAgICAgfQogICAgICAgICBzdGF0aWMgTGF5b3V0VW5pdCBuZWdhdGl2ZU1hcmdpbkFmdGVyRGVm
YXVsdChjb25zdCBSZW5kZXJCbG9jayogYmxvY2spCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1heCgtYmxvY2stPm1hcmdpbkFmdGVyKCksIFpFUk9fTEFZT1VUX1VOSVQpOwor
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4PExheW91dFVuaXQ+KC1ibG9jay0+bWFyZ2luQWZ0
ZXIoKSwgMCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIE1hcmdpblZhbHVlcyBtX21h
cmdpbnM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5
b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2tMaW5lTGF5b3V0LmNwcAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNDgs
OCArMTI0OCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZVJlcGFpbnRSYW5nZUZyb21Cb3go
Um9vdElubGluZUJveCogYm94LCBMYXlvdXRVbml0IHBhZ2luYXRpb25EZWx0YSA9IDApCiAgICAg
ewogICAgICAgICBtX3VzZXNSZXBhaW50Qm91bmRzID0gdHJ1ZTsKLSAgICAgICAgbV9yZXBhaW50
TG9naWNhbFRvcCA9IG1pbihtX3JlcGFpbnRMb2dpY2FsVG9wLCBib3gtPmxvZ2ljYWxUb3BWaXN1
YWxPdmVyZmxvdygpICsgbWluKHBhZ2luYXRpb25EZWx0YSwgWkVST19MQVlPVVRfVU5JVCkpOwot
ICAgICAgICBtX3JlcGFpbnRMb2dpY2FsQm90dG9tID0gbWF4KG1fcmVwYWludExvZ2ljYWxCb3R0
b20sIGJveC0+bG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93KCkgKyBtYXgocGFnaW5hdGlvbkRl
bHRhLCBaRVJPX0xBWU9VVF9VTklUKSk7CisgICAgICAgIG1fcmVwYWludExvZ2ljYWxUb3AgPSBt
aW4obV9yZXBhaW50TG9naWNhbFRvcCwgYm94LT5sb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3coKSAr
IG1pbihwYWdpbmF0aW9uRGVsdGEsIExheW91dFVuaXQoMCkpKTsKKyAgICAgICAgbV9yZXBhaW50
TG9naWNhbEJvdHRvbSA9IG1heChtX3JlcGFpbnRMb2dpY2FsQm90dG9tLCBib3gtPmxvZ2ljYWxC
b3R0b21WaXN1YWxPdmVyZmxvdygpICsgbWF4KHBhZ2luYXRpb25EZWx0YSwgTGF5b3V0VW5pdCgw
KSkpOwogICAgIH0KICAgICAKICAgICBib29sIGVuZExpbmVNYXRjaGVkKCkgY29uc3QgeyByZXR1
cm4gbV9lbmRMaW5lTWF0Y2hlZDsgfQpAQCAtMTc1Myw3ICsxNzUzLDcgQEAgdm9pZCBSZW5kZXJC
bG9jazo6Y2hlY2tGbG9hdHNJbkNsZWFuTGluZQogICAgICAgICAgICAgTGF5b3V0VW5pdCBmbG9h
dFRvcCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmbG9hdHNbZmxvYXRJbmRleF0ucmVj
dC55KCkgOiBmbG9hdHNbZmxvYXRJbmRleF0ucmVjdC54KCk7CiAgICAgICAgICAgICBMYXlvdXRV
bml0IGZsb2F0SGVpZ2h0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG1heChmbG9hdHNb
ZmxvYXRJbmRleF0ucmVjdC5oZWlnaHQoKSwgbmV3U2l6ZS5oZWlnaHQoKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBt
YXgoZmxvYXRzW2Zsb2F0SW5kZXhdLnJlY3Qud2lkdGgoKSwgbmV3U2l6ZS53aWR0aCgpKTsKLSAg
ICAgICAgICAgIGZsb2F0SGVpZ2h0ID0gbWluKGZsb2F0SGVpZ2h0LCBNQVhfTEFZT1VUX1VOSVQg
LSBmbG9hdFRvcCk7CisgICAgICAgICAgICBmbG9hdEhlaWdodCA9IG1pbihmbG9hdEhlaWdodCwg
TGF5b3V0VW5pdDo6bWF4KCkgLSBmbG9hdFRvcCk7CiAgICAgICAgICAgICBsaW5lLT5tYXJrRGly
dHkoKTsKICAgICAgICAgICAgIG1hcmtMaW5lc0RpcnR5SW5CbG9ja1JhbmdlKGxpbmUtPmxpbmVC
b3R0b21XaXRoTGVhZGluZygpLCBmbG9hdFRvcCArIGZsb2F0SGVpZ2h0LCBsaW5lKTsKICAgICAg
ICAgICAgIGZsb2F0c1tmbG9hdEluZGV4XS5yZWN0LnNldFNpemUobmV3U2l6ZSk7CkBAIC0xOTU0
LDcgKzE5NTQsNyBAQCBib29sIFJlbmRlckJsb2NrOjpjaGVja1BhZ2luYXRpb25BbmRGbG9hCiAg
ICAgd2hpbGUgKFJvb3RJbmxpbmVCb3gqIG5leHRMaW5lID0gbGFzdExpbmUtPm5leHRSb290Qm94
KCkpCiAgICAgICAgIGxhc3RMaW5lID0gbmV4dExpbmU7CiAKLSAgICBMYXlvdXRVbml0IGxvZ2lj
YWxCb3R0b20gPSBsYXN0TGluZS0+bGluZUJvdHRvbVdpdGhMZWFkaW5nKCkgKyBhYnNvbHV0ZVZh
bHVlKGxpbmVEZWx0YSk7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tID0gbGFzdExpbmUt
PmxpbmVCb3R0b21XaXRoTGVhZGluZygpICsgbGluZURlbHRhLmFicygpOwogCiAgICAgY29uc3Qg
RmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMt
PnNldCgpOwogICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmpl
Y3RTZXQuZW5kKCk7CkBAIC0yOTE4LDcgKzI5MTgsNyBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJC
bG9jazo6TGluZUJyZWFrZXI6CiAKIHZvaWQgUmVuZGVyQmxvY2s6OmFkZE92ZXJmbG93RnJvbUlu
bGluZUNoaWxkcmVuKCkKIHsKLSAgICBMYXlvdXRVbml0IGVuZFBhZGRpbmcgPSBoYXNPdmVyZmxv
d0NsaXAoKSA/IHBhZGRpbmdFbmQoKSA6IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgTGF5b3V0VW5p
dCBlbmRQYWRkaW5nID0gaGFzT3ZlcmZsb3dDbGlwKCkgPyBwYWRkaW5nRW5kKCkgOiBMYXlvdXRV
bml0KDApOwogICAgIC8vIEZJWE1FOiBOZWVkIHRvIGZpbmQgYW5vdGhlciB3YXkgdG8gZG8gdGhp
cywgc2luY2Ugc2Nyb2xsYmFycyBjb3VsZCBzaG93IHdoZW4gd2UgZG9uJ3Qgd2FudCB0aGVtIHRv
LgogICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiAhZW5kUGFkZGluZyAmJiBub2RlKCkgJiYg
bm9kZSgpLT5pc1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSAmJiBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkpCiAgICAgICAgIGVuZFBhZGRpbmcgPSAxOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjMsNyArMzYz
LDcgQEAgaW50IFJlbmRlckJveDo6c2Nyb2xsV2lkdGgoKSBjb25zdAogICAgIC8vIEZJWE1FOiBO
ZWVkIHRvIHdvcmsgcmlnaHQgd2l0aCB3cml0aW5nIG1vZGVzLgogICAgIGlmIChzdHlsZSgpLT5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAgIHJldHVybiBzbmFwU2l6ZVRvUGl4ZWwo
bWF4KGNsaWVudFdpZHRoKCksIGxheW91dE92ZXJmbG93UmVjdCgpLm1heFgoKSAtIGJvcmRlckxl
ZnQoKSksIHgoKSArIGNsaWVudExlZnQoKSk7Ci0gICAgcmV0dXJuIGNsaWVudFdpZHRoKCkgLSBt
aW4oWkVST19MQVlPVVRfVU5JVCwgbGF5b3V0T3ZlcmZsb3dSZWN0KCkueCgpIC0gYm9yZGVyTGVm
dCgpKTsKKyAgICByZXR1cm4gY2xpZW50V2lkdGgoKSAtIG1pbihMYXlvdXRVbml0KDApLCBsYXlv
dXRPdmVyZmxvd1JlY3QoKS54KCkgLSBib3JkZXJMZWZ0KCkpOwogfQogCiBpbnQgUmVuZGVyQm94
OjpzY3JvbGxIZWlnaHQoKSBjb25zdApAQCAtMTE3OSw3ICsxMTc5LDcgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJCb3g6OnNocmlua0xvZ2ljYWxXaWR0aAogICAgIExheW91dFVuaXQgbG9naWNhbFRvcFBv
c2l0aW9uID0gbG9naWNhbFRvcCgpOwogICAgIExheW91dFVuaXQgYWRqdXN0ZWRQYWdlT2Zmc2V0
Rm9yQ29udGFpbmluZ0Jsb2NrID0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSAtIGxv
Z2ljYWxUb3AoKTsKICAgICBpZiAocmVnaW9uKSB7Ci0gICAgICAgIExheW91dFVuaXQgb2Zmc2V0
RnJvbUxvZ2ljYWxUb3BPZlJlZ2lvbiA9IHJlZ2lvbiA/IHJlZ2lvbi0+bG9naWNhbFRvcEZvckZs
b3dUaHJlYWRDb250ZW50KCkgLSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlIDogWkVS
T19MQVlPVVRfVU5JVDsKKyAgICAgICAgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9m
UmVnaW9uID0gcmVnaW9uID8gcmVnaW9uLT5sb2dpY2FsVG9wRm9yRmxvd1RocmVhZENvbnRlbnQo
KSAtIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UgOiBMYXlvdXRVbml0KDApOwogICAg
ICAgICBsb2dpY2FsVG9wUG9zaXRpb24gPSBtYXgobG9naWNhbFRvcFBvc2l0aW9uLCBsb2dpY2Fs
VG9wUG9zaXRpb24gKyBvZmZzZXRGcm9tTG9naWNhbFRvcE9mUmVnaW9uKTsKICAgICAgICAgY29u
dGFpbmluZ0Jsb2NrUmVnaW9uID0gY2ItPmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMocmVnaW9u
KTsKICAgICB9CkBAIC0xMjQxLDcgKzEyNDEsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29u
dGFpbmluZ0Jsb2NrQXZhCiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wUG9zaXRpb24gPSBsb2dp
Y2FsVG9wKCk7CiAgICAgTGF5b3V0VW5pdCBhZGp1c3RlZFBhZ2VPZmZzZXRGb3JDb250YWluaW5n
QmxvY2sgPSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlIC0gbG9naWNhbFRvcCgpOwog
ICAgIGlmIChyZWdpb24pIHsKLSAgICAgICAgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRv
cE9mUmVnaW9uID0gcmVnaW9uID8gcmVnaW9uLT5sb2dpY2FsVG9wRm9yRmxvd1RocmVhZENvbnRl
bnQoKSAtIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UgOiBaRVJPX0xBWU9VVF9VTklU
OworICAgICAgICBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZSZWdpb24gPSByZWdp
b24gPyByZWdpb24tPmxvZ2ljYWxUb3BGb3JGbG93VGhyZWFkQ29udGVudCgpIC0gb2Zmc2V0RnJv
bUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSA6IExheW91dFVuaXQoMCk7CiAgICAgICAgIGxvZ2ljYWxU
b3BQb3NpdGlvbiA9IG1heChsb2dpY2FsVG9wUG9zaXRpb24sIGxvZ2ljYWxUb3BQb3NpdGlvbiAr
IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZSZWdpb24pOwogICAgICAgICBjb250YWluaW5nQmxvY2tS
ZWdpb24gPSBjYi0+Y2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhyZWdpb24pOwogICAgIH0KQEAg
LTM1MzMsNyArMzUzMyw3IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJCb3g6OnBvc2l0aW9uRm9y
UG8KICAgICB9CiAKICAgICAvLyBQYXNzIG9mZiB0byB0aGUgY2xvc2VzdCBjaGlsZC4KLSAgICBM
YXlvdXRVbml0IG1pbkRpc3QgPSBNQVhfTEFZT1VUX1VOSVQ7CisgICAgTGF5b3V0VW5pdCBtaW5E
aXN0ID0gTGF5b3V0VW5pdDo6bWF4KCk7CiAgICAgUmVuZGVyQm94KiBjbG9zZXN0UmVuZGVyZXIg
PSAwOwogICAgIExheW91dFBvaW50IGFkanVzdGVkUG9pbnQgPSBwb2ludDsKICAgICBpZiAoaXNU
YWJsZVJvdygpKQpAQCAtMzU0OSw5ICszNTQ5LDkgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJv
eDo6cG9zaXRpb25Gb3JQbwogICAgICAgICAKICAgICAgICAgUmVuZGVyQm94KiByZW5kZXJlciA9
IHRvUmVuZGVyQm94KHJlbmRlck9iamVjdCk7CiAKLSAgICAgICAgTGF5b3V0VW5pdCB0b3AgPSBy
ZW5kZXJlci0+Ym9yZGVyVG9wKCkgKyByZW5kZXJlci0+cGFkZGluZ1RvcCgpICsgKGlzVGFibGVS
b3coKSA/IFpFUk9fTEFZT1VUX1VOSVQgOiByZW5kZXJlci0+eSgpKTsKKyAgICAgICAgTGF5b3V0
VW5pdCB0b3AgPSByZW5kZXJlci0+Ym9yZGVyVG9wKCkgKyByZW5kZXJlci0+cGFkZGluZ1RvcCgp
ICsgKGlzVGFibGVSb3coKSA/IExheW91dFVuaXQoMCkgOiByZW5kZXJlci0+eSgpKTsKICAgICAg
ICAgTGF5b3V0VW5pdCBib3R0b20gPSB0b3AgKyByZW5kZXJlci0+Y29udGVudEhlaWdodCgpOwot
ICAgICAgICBMYXlvdXRVbml0IGxlZnQgPSByZW5kZXJlci0+Ym9yZGVyTGVmdCgpICsgcmVuZGVy
ZXItPnBhZGRpbmdMZWZ0KCkgKyAoaXNUYWJsZVJvdygpID8gWkVST19MQVlPVVRfVU5JVCA6IHJl
bmRlcmVyLT54KCkpOworICAgICAgICBMYXlvdXRVbml0IGxlZnQgPSByZW5kZXJlci0+Ym9yZGVy
TGVmdCgpICsgcmVuZGVyZXItPnBhZGRpbmdMZWZ0KCkgKyAoaXNUYWJsZVJvdygpID8gTGF5b3V0
VW5pdCgwKSA6IHJlbmRlcmVyLT54KCkpOwogICAgICAgICBMYXlvdXRVbml0IHJpZ2h0ID0gbGVm
dCArIHJlbmRlcmVyLT5jb250ZW50V2lkdGgoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChwb2lu
dC54KCkgPD0gcmlnaHQgJiYgcG9pbnQueCgpID49IGxlZnQgJiYgcG9pbnQueSgpIDw9IHRvcCAm
JiBwb2ludC55KCkgPj0gYm90dG9tKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5oCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAgIExh
eW91dFVuaXQgbG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSA/IHdpZHRoKCkgOiBoZWlnaHQoKTsgfQogICAgIExheW91dFVuaXQg
bG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyBoZWlnaHQoKSA6IHdpZHRoKCk7IH0KIAotICAgIExheW91dFVuaXQgY29uc3Ry
YWluTG9naWNhbFdpZHRoSW5SZWdpb25CeU1pbk1heChMYXlvdXRVbml0LCBMYXlvdXRVbml0LCBS
ZW5kZXJCbG9jayosIFJlbmRlclJlZ2lvbiogPSAwLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dp
Y2FsVG9wT2ZGaXJzdFBhZ2UgPSBaRVJPX0xBWU9VVF9VTklUKSBjb25zdDsKKyAgICBMYXlvdXRV
bml0IGNvbnN0cmFpbkxvZ2ljYWxXaWR0aEluUmVnaW9uQnlNaW5NYXgoTGF5b3V0VW5pdCwgTGF5
b3V0VW5pdCwgUmVuZGVyQmxvY2sqLCBSZW5kZXJSZWdpb24qID0gMCwgTGF5b3V0VW5pdCBvZmZz
ZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlID0gTGF5b3V0VW5pdCgwKSkgY29uc3Q7CiAgICAg
TGF5b3V0VW5pdCBjb25zdHJhaW5Mb2dpY2FsSGVpZ2h0QnlNaW5NYXgoTGF5b3V0VW5pdCkgY29u
c3Q7CiAKICAgICBpbnQgcGl4ZWxTbmFwcGVkTG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJu
IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBwaXhlbFNuYXBwZWRIZWlnaHQo
KSA6IHBpeGVsU25hcHBlZFdpZHRoKCk7IH0KQEAgLTM3NSw3ICszNzUsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGNvbXB1dGVMb2dpY2FsSGVpZ2h0KExheW91dFVuaXQgbG9naWNhbEhl
aWdodCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMm
KSBjb25zdDsKIAogICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIHJlbmRlckJveFJlZ2lvbkluZm8o
UmVuZGVyUmVnaW9uKiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdl
LCBSZW5kZXJCb3hSZWdpb25JbmZvRmxhZ3MgPSBDYWNoZVJlbmRlckJveFJlZ2lvbkluZm8pIGNv
bnN0OwotICAgIHZvaWQgY29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uKExvZ2ljYWxFeHRlbnRD
b21wdXRlZFZhbHVlcyYsIFJlbmRlclJlZ2lvbiogPSAwLCBMYXlvdXRVbml0IG9mZnNldEZyb21M
b2dpY2FsVG9wT2ZGaXJzdFBhZ2UgPSBaRVJPX0xBWU9VVF9VTklUKSBjb25zdDsKKyAgICB2b2lk
IGNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvbihMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMm
LCBSZW5kZXJSZWdpb24qID0gMCwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmly
c3RQYWdlID0gTGF5b3V0VW5pdCgwKSkgY29uc3Q7CiAKICAgICBib29sIHN0cmV0Y2hlc1RvVmll
d3BvcnQoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTUyLDcgKzU1Miw3IEBAIGludCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGl4ZWxTbmFw
cGVkT2YKIAogTGF5b3V0VW5pdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0ZWRDU1NQYWRk
aW5nVG9wKCkgY29uc3QKIHsKLSAgICBMYXlvdXRVbml0IHcgPSBaRVJPX0xBWU9VVF9VTklUOwor
ICAgIExheW91dFVuaXQgdyA9IExheW91dFVuaXQoMCk7CiAgICAgUmVuZGVyVmlldyogcmVuZGVy
VmlldyA9IDA7CiAgICAgTGVuZ3RoIHBhZGRpbmcgPSBzdHlsZSgpLT5wYWRkaW5nVG9wKCk7CiAg
ICAgaWYgKHBhZGRpbmcuaXNQZXJjZW50KCkpCkBAIC01NjQsNyArNTY0LDcgQEAgTGF5b3V0VW5p
dCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0ZQogCiBMYXlvdXRVbml0IFJlbmRlckJveE1v
ZGVsT2JqZWN0Ojpjb21wdXRlZENTU1BhZGRpbmdCb3R0b20oKSBjb25zdAogewotICAgIExheW91
dFVuaXQgdyA9IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgTGF5b3V0VW5pdCB3ID0gTGF5b3V0VW5p
dCgwKTsKICAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gMDsKICAgICBMZW5ndGggcGFkZGlu
ZyA9IHN0eWxlKCktPnBhZGRpbmdCb3R0b20oKTsKICAgICBpZiAocGFkZGluZy5pc1BlcmNlbnQo
KSkKQEAgLTU3Niw3ICs1NzYsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpj
b21wdXRlCiAKIExheW91dFVuaXQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVkQ1NTUGFk
ZGluZ0xlZnQoKSBjb25zdAogewotICAgIExheW91dFVuaXQgdyA9IFpFUk9fTEFZT1VUX1VOSVQ7
CisgICAgTGF5b3V0VW5pdCB3ID0gTGF5b3V0VW5pdCgwKTsKICAgICBSZW5kZXJWaWV3KiByZW5k
ZXJWaWV3ID0gMDsKICAgICBMZW5ndGggcGFkZGluZyA9IHN0eWxlKCktPnBhZGRpbmdMZWZ0KCk7
CiAgICAgaWYgKHBhZGRpbmcuaXNQZXJjZW50KCkpCkBAIC01ODgsNyArNTg4LDcgQEAgTGF5b3V0
VW5pdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0ZQogCiBMYXlvdXRVbml0IFJlbmRlckJv
eE1vZGVsT2JqZWN0Ojpjb21wdXRlZENTU1BhZGRpbmdSaWdodCgpIGNvbnN0CiB7Ci0gICAgTGF5
b3V0VW5pdCB3ID0gWkVST19MQVlPVVRfVU5JVDsKKyAgICBMYXlvdXRVbml0IHcgPSBMYXlvdXRV
bml0KDApOwogICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSAwOwogICAgIExlbmd0aCBwYWRk
aW5nID0gc3R5bGUoKS0+cGFkZGluZ1JpZ2h0KCk7CiAgICAgaWYgKHBhZGRpbmcuaXNQZXJjZW50
KCkpCkBAIC02MDAsNyArNjAwLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6
Y29tcHV0ZQogCiBMYXlvdXRVbml0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlZENTU1Bh
ZGRpbmdCZWZvcmUoKSBjb25zdAogewotICAgIExheW91dFVuaXQgdyA9IFpFUk9fTEFZT1VUX1VO
SVQ7CisgICAgTGF5b3V0VW5pdCB3ID0gTGF5b3V0VW5pdCgwKTsKICAgICBSZW5kZXJWaWV3KiBy
ZW5kZXJWaWV3ID0gMDsKICAgICBMZW5ndGggcGFkZGluZyA9IHN0eWxlKCktPnBhZGRpbmdCZWZv
cmUoKTsKICAgICBpZiAocGFkZGluZy5pc1BlcmNlbnQoKSkKQEAgLTYxMiw3ICs2MTIsNyBAQCBM
YXlvdXRVbml0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlCiAKIExheW91dFVuaXQgUmVu
ZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVkQ1NTUGFkZGluZ0FmdGVyKCkgY29uc3QKIHsKLSAg
ICBMYXlvdXRVbml0IHcgPSBaRVJPX0xBWU9VVF9VTklUOworICAgIExheW91dFVuaXQgdyA9IExh
eW91dFVuaXQoMCk7CiAgICAgUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IDA7CiAgICAgTGVuZ3Ro
IHBhZGRpbmcgPSBzdHlsZSgpLT5wYWRkaW5nQWZ0ZXIoKTsKICAgICBpZiAocGFkZGluZy5pc1Bl
cmNlbnQoKSkKQEAgLTYyNCw3ICs2MjQsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJveE1vZGVsT2Jq
ZWN0Ojpjb21wdXRlCiAKIExheW91dFVuaXQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVk
Q1NTUGFkZGluZ1N0YXJ0KCkgY29uc3QKIHsKLSAgICBMYXlvdXRVbml0IHcgPSBaRVJPX0xBWU9V
VF9VTklUOworICAgIExheW91dFVuaXQgdyA9IExheW91dFVuaXQoMCk7CiAgICAgUmVuZGVyVmll
dyogcmVuZGVyVmlldyA9IDA7CiAgICAgTGVuZ3RoIHBhZGRpbmcgPSBzdHlsZSgpLT5wYWRkaW5n
U3RhcnQoKTsKICAgICBpZiAocGFkZGluZy5pc1BlcmNlbnQoKSkKQEAgLTYzNiw3ICs2MzYsNyBA
QCBMYXlvdXRVbml0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlCiAKIExheW91dFVuaXQg
UmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVkQ1NTUGFkZGluZ0VuZCgpIGNvbnN0CiB7Ci0g
ICAgTGF5b3V0VW5pdCB3ID0gWkVST19MQVlPVVRfVU5JVDsKKyAgICBMYXlvdXRVbml0IHcgPSBM
YXlvdXRVbml0KDApOwogICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSAwOwogICAgIExlbmd0
aCBwYWRkaW5nID0gc3R5bGUoKS0+cGFkZGluZ0VuZCgpOwogICAgIGlmIChwYWRkaW5nLmlzUGVy
Y2VudCgpKQpAQCAtODAwLDggKzgwMCw4IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBh
aW50RmlsbExheWUKICAgICAKICAgICBpbnQgYkxlZnQgPSBpbmNsdWRlTGVmdEVkZ2UgPyBib3Jk
ZXJMZWZ0KCkgOiAwOwogICAgIGludCBiUmlnaHQgPSBpbmNsdWRlUmlnaHRFZGdlID8gYm9yZGVy
UmlnaHQoKSA6IDA7Ci0gICAgTGF5b3V0VW5pdCBwTGVmdCA9IGluY2x1ZGVMZWZ0RWRnZSA/IHBh
ZGRpbmdMZWZ0KCkgOiBaRVJPX0xBWU9VVF9VTklUOwotICAgIExheW91dFVuaXQgcFJpZ2h0ID0g
aW5jbHVkZVJpZ2h0RWRnZSA/IHBhZGRpbmdSaWdodCgpIDogWkVST19MQVlPVVRfVU5JVDsKKyAg
ICBMYXlvdXRVbml0IHBMZWZ0ID0gaW5jbHVkZUxlZnRFZGdlID8gcGFkZGluZ0xlZnQoKSA6IExh
eW91dFVuaXQoMCk7CisgICAgTGF5b3V0VW5pdCBwUmlnaHQgPSBpbmNsdWRlUmlnaHRFZGdlID8g
cGFkZGluZ1JpZ2h0KCkgOiBMYXlvdXRVbml0KDApOwogCiAgICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlciBjbGlwV2l0aFNjcm9sbGluZ1N0YXRlU2F2ZXIoKmNvbnRleHQsIGNsaXBwZWRXaXRo
TG9jYWxTY3JvbGxpbmcpOwogICAgIExheW91dFJlY3Qgc2Nyb2xsZWRQYWludFJlY3QgPSByZWN0
OwpAQCAtODI1LDEwICs4MjUsMTAgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRG
aWxsTGF5ZQogICAgICAgICAvLyBDbGlwIHRvIHRoZSBwYWRkaW5nIG9yIGNvbnRlbnQgYm94ZXMg
YXMgbmVjZXNzYXJ5LgogICAgICAgICBpZiAoIWNsaXBUb0JvcmRlclJhZGl1cykgewogICAgICAg
ICAgICAgYm9vbCBpbmNsdWRlUGFkZGluZyA9IGJnTGF5ZXItPmNsaXAoKSA9PSBDb250ZW50Rmls
bEJveDsKLSAgICAgICAgICAgIExheW91dFJlY3QgY2xpcFJlY3QgPSBMYXlvdXRSZWN0KHNjcm9s
bGVkUGFpbnRSZWN0LngoKSArIGJMZWZ0ICsgKGluY2x1ZGVQYWRkaW5nID8gcExlZnQgOiBaRVJP
X0xBWU9VVF9VTklUKSwKLSAgICAgICAgICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC55KCkgKyBi
b3JkZXJUb3AoKSArIChpbmNsdWRlUGFkZGluZyA/IHBhZGRpbmdUb3AoKSA6IFpFUk9fTEFZT1VU
X1VOSVQpLAotICAgICAgICAgICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LndpZHRoKCkgLSBiTGVm
dCAtIGJSaWdodCAtIChpbmNsdWRlUGFkZGluZyA/IHBMZWZ0ICsgcFJpZ2h0IDogWkVST19MQVlP
VVRfVU5JVCksCi0gICAgICAgICAgICAgICAgc2Nyb2xsZWRQYWludFJlY3QuaGVpZ2h0KCkgLSBi
b3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpIC0gKGluY2x1ZGVQYWRkaW5nID8gcGFkZGluZ1Rv
cCgpICsgcGFkZGluZ0JvdHRvbSgpIDogWkVST19MQVlPVVRfVU5JVCkpOworICAgICAgICAgICAg
TGF5b3V0UmVjdCBjbGlwUmVjdCA9IExheW91dFJlY3Qoc2Nyb2xsZWRQYWludFJlY3QueCgpICsg
YkxlZnQgKyAoaW5jbHVkZVBhZGRpbmcgPyBwTGVmdCA6IExheW91dFVuaXQoMCkpLAorICAgICAg
ICAgICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LnkoKSArIGJvcmRlclRvcCgpICsgKGluY2x1ZGVQ
YWRkaW5nID8gcGFkZGluZ1RvcCgpIDogTGF5b3V0VW5pdCgwKSksCisgICAgICAgICAgICAgICAg
c2Nyb2xsZWRQYWludFJlY3Qud2lkdGgoKSAtIGJMZWZ0IC0gYlJpZ2h0IC0gKGluY2x1ZGVQYWRk
aW5nID8gcExlZnQgKyBwUmlnaHQgOiBMYXlvdXRVbml0KDApKSwKKyAgICAgICAgICAgICAgICBz
Y3JvbGxlZFBhaW50UmVjdC5oZWlnaHQoKSAtIGJvcmRlclRvcCgpIC0gYm9yZGVyQm90dG9tKCkg
LSAoaW5jbHVkZVBhZGRpbmcgPyBwYWRkaW5nVG9wKCkgKyBwYWRkaW5nQm90dG9tKCkgOiBMYXlv
dXRVbml0KDApKSk7CiAgICAgICAgICAgICBiYWNrZ3JvdW5kQ2xpcFN0YXRlU2F2ZXIuc2F2ZSgp
OwogICAgICAgICAgICAgY29udGV4dC0+Y2xpcChjbGlwUmVjdCk7CiAgICAgICAgIH0KQEAgLTI3
MjksNyArMjcyOSw3IEBAIExheW91dFJlY3QgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmxvY2FsQ2EK
ICAgICAgICAgICAgIHggLT0gdGV4dEluZGVudE9mZnNldDsKICAgICAgICAgYnJlYWs7CiAgICAg
fQotICAgIHggPSBtaW4oeCwgbWF4KG1heFggLSBjYXJldFdpZHRoLCBaRVJPX0xBWU9VVF9VTklU
KSk7CisgICAgeCA9IG1pbih4LCBtYXgobWF4WCAtIGNhcmV0V2lkdGgsIExheW91dFVuaXQoMCkp
KTsKIAogICAgIExheW91dFVuaXQgeSA9IHBhZGRpbmdUb3AoKSArIGJvcmRlclRvcCgpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
aAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICNpZm5kZWYg
UmVuZGVyQm94TW9kZWxPYmplY3RfaAogI2RlZmluZSBSZW5kZXJCb3hNb2RlbE9iamVjdF9oCiAK
LSNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJMYXlvdXRT
aXplLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oIgogI2luY2x1ZGUgIlNo
YWRvd0RhdGEuaCIKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJl
Y2F0ZWRGbGV4aWJsZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAJKHJldmlzaW9uIDEzMzUxNykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MzIsNyArNTMyLDcgQEAgdm9pZCBSZW5kZXJEZXByZWNhdGVk
RmxleGlibGVCb3g6OmxheW91dAogICAgICAgICAgICAgICAgICAgICBmb3IgKFJlbmRlckJveCog
Y2hpbGQgPSBpdGVyYXRvci5maXJzdCgpOyBjaGlsZDsgY2hpbGQgPSBpdGVyYXRvci5uZXh0KCkp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgYWxsb3dlZEZsZXggPSBhbGxv
d2VkQ2hpbGRGbGV4KGNoaWxkLCBleHBhbmRpbmcsIGkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGFsbG93ZWRGbGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0
VW5pdCBwcm9qZWN0ZWRGbGV4ID0gKGFsbG93ZWRGbGV4ID09IE1BWF9MQVlPVVRfVU5JVCkgPyBh
bGxvd2VkRmxleCA6IExheW91dFVuaXQoYWxsb3dlZEZsZXggKiAodG90YWxGbGV4IC8gY2hpbGQt
PnN0eWxlKCktPmJveEZsZXgoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91
dFVuaXQgcHJvamVjdGVkRmxleCA9IChhbGxvd2VkRmxleCA9PSBMYXlvdXRVbml0OjptYXgoKSkg
PyBhbGxvd2VkRmxleCA6IExheW91dFVuaXQoYWxsb3dlZEZsZXggKiAodG90YWxGbGV4IC8gY2hp
bGQtPnN0eWxlKCktPmJveEZsZXgoKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNw
YWNlQXZhaWxhYmxlVGhpc1Bhc3MgPSBleHBhbmRpbmcgPyBtaW4oc3BhY2VBdmFpbGFibGVUaGlz
UGFzcywgcHJvamVjdGVkRmxleCkgOiBtYXgoc3BhY2VBdmFpbGFibGVUaGlzUGFzcywgcHJvamVj
dGVkRmxleCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IH0KQEAgLTU3Nyw3ICs1NzcsNyBAQCB2b2lkIFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveDo6
bGF5b3V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAo
YWJzb2x1dGVWYWx1ZShncm91cFJlbWFpbmluZ1NwYWNlKSA+PSAxKTsKKyAgICAgICAgICAgICAg
ICB9IHdoaWxlIChncm91cFJlbWFpbmluZ1NwYWNlLmFicygpID49IDEpOwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICAvLyBXZSBkaWRuJ3QgZmluZCBhbnkgY2hpbGRyZW4gdGhhdCBjb3Vs
ZCBncm93LgpAQCAtNzg2LDcgKzc4Niw3IEBAIHZvaWQgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxl
Qm94OjpsYXlvdXQKICAgICAgICAgICAgICAgICAgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0g
aXRlcmF0b3IuZmlyc3QoKTsgY2hpbGQ7IGNoaWxkID0gaXRlcmF0b3IubmV4dCgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGFsbG93ZWRGbGV4ID0gYWxsb3dlZENoaWxk
RmxleChjaGlsZCwgZXhwYW5kaW5nLCBpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChh
bGxvd2VkRmxleCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgcHJv
amVjdGVkRmxleCA9IChhbGxvd2VkRmxleCA9PSBNQVhfTEFZT1VUX1VOSVQpID8gYWxsb3dlZEZs
ZXggOiBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PihhbGxvd2VkRmxleCAqICh0b3RhbEZsZXggLyBj
aGlsZC0+c3R5bGUoKS0+Ym94RmxleCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TGF5b3V0VW5pdCBwcm9qZWN0ZWRGbGV4ID0gKGFsbG93ZWRGbGV4ID09IExheW91dFVuaXQ6Om1h
eCgpKSA/IGFsbG93ZWRGbGV4IDogc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oYWxsb3dlZEZsZXgg
KiAodG90YWxGbGV4IC8gY2hpbGQtPnN0eWxlKCktPmJveEZsZXgoKSkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNwYWNlQXZhaWxhYmxlVGhpc1Bhc3MgPSBleHBhbmRpbmcgPyBtaW4o
c3BhY2VBdmFpbGFibGVUaGlzUGFzcywgcHJvamVjdGVkRmxleCkgOiBtYXgoc3BhY2VBdmFpbGFi
bGVUaGlzUGFzcywgcHJvamVjdGVkRmxleCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIH0KQEAgLTgyOCw3ICs4MjgsNyBAQCB2b2lkIFJlbmRlckRlcHJl
Y2F0ZWRGbGV4aWJsZUJveDo6bGF5b3V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfSB3aGlsZSAoYWJzb2x1dGVWYWx1ZShncm91cFJlbWFpbmluZ1NwYWNlKSA+PSAx
KTsKKyAgICAgICAgICAgICAgICB9IHdoaWxlIChncm91cFJlbWFpbmluZ1NwYWNlLmFicygpID49
IDEpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBXZSBkaWRuJ3QgZmluZCBhbnkg
Y2hpbGRyZW4gdGhhdCBjb3VsZCBncm93LgpAQCAtMTAzMiw3ICsxMDMyLDcgQEAgTGF5b3V0VW5p
dCBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6OgogICAgIGlmIChleHBhbmRpbmcpIHsKICAg
ICAgICAgaWYgKGlzSG9yaXpvbnRhbCgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogRm9yIG5v
dyBqdXN0IGhhbmRsZSBmaXhlZCB2YWx1ZXMuCi0gICAgICAgICAgICBMYXlvdXRVbml0IG1heFdp
ZHRoID0gTUFYX0xBWU9VVF9VTklUOworICAgICAgICAgICAgTGF5b3V0VW5pdCBtYXhXaWR0aCA9
IExheW91dFVuaXQ6Om1heCgpOwogICAgICAgICAgICAgTGF5b3V0VW5pdCB3aWR0aCA9IGNvbnRl
bnRXaWR0aEZvckNoaWxkKGNoaWxkKTsKICAgICAgICAgICAgIGlmICghY2hpbGQtPnN0eWxlKCkt
Pm1heFdpZHRoKCkuaXNVbmRlZmluZWQoKSAmJiBjaGlsZC0+c3R5bGUoKS0+bWF4V2lkdGgoKS5p
c0ZpeGVkKCkpCiAgICAgICAgICAgICAgICAgbWF4V2lkdGggPSBjaGlsZC0+c3R5bGUoKS0+bWF4
V2lkdGgoKS52YWx1ZSgpOwpAQCAtMTA0MCwxNiArMTA0MCwxNiBAQCBMYXlvdXRVbml0IFJlbmRl
ckRlcHJlY2F0ZWRGbGV4aWJsZUJveDo6CiAgICAgICAgICAgICAgICAgbWF4V2lkdGggPSBjaGls
ZC0+bWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCk7CiAgICAgICAgICAgICBlbHNlIGlmIChjaGls
ZC0+c3R5bGUoKS0+bWF4V2lkdGgoKS50eXBlKCkgPT0gTWluSW50cmluc2ljKQogICAgICAgICAg
ICAgICAgIG1heFdpZHRoID0gY2hpbGQtPm1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpOwotICAg
ICAgICAgICAgaWYgKG1heFdpZHRoID09IE1BWF9MQVlPVVRfVU5JVCkKKyAgICAgICAgICAgIGlm
IChtYXhXaWR0aCA9PSBMYXlvdXRVbml0OjptYXgoKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
bWF4V2lkdGg7CiAgICAgICAgICAgICByZXR1cm4gbWF4PExheW91dFVuaXQ+KDAsIG1heFdpZHRo
IC0gd2lkdGgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gRklYTUU6IEZvciBu
b3cganVzdCBoYW5kbGUgZml4ZWQgdmFsdWVzLgotICAgICAgICAgICAgTGF5b3V0VW5pdCBtYXhI
ZWlnaHQgPSBNQVhfTEFZT1VUX1VOSVQ7CisgICAgICAgICAgICBMYXlvdXRVbml0IG1heEhlaWdo
dCA9IExheW91dFVuaXQ6Om1heCgpOwogICAgICAgICAgICAgTGF5b3V0VW5pdCBoZWlnaHQgPSBj
b250ZW50SGVpZ2h0Rm9yQ2hpbGQoY2hpbGQpOwogICAgICAgICAgICAgaWYgKCFjaGlsZC0+c3R5
bGUoKS0+bWF4SGVpZ2h0KCkuaXNVbmRlZmluZWQoKSAmJiBjaGlsZC0+c3R5bGUoKS0+bWF4SGVp
Z2h0KCkuaXNGaXhlZCgpKQogICAgICAgICAgICAgICAgIG1heEhlaWdodCA9IGNoaWxkLT5zdHls
ZSgpLT5tYXhIZWlnaHQoKS52YWx1ZSgpOwotICAgICAgICAgICAgaWYgKG1heEhlaWdodCA9PSBN
QVhfTEFZT1VUX1VOSVQpCisgICAgICAgICAgICBpZiAobWF4SGVpZ2h0ID09IExheW91dFVuaXQ6
Om1heCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBtYXhIZWlnaHQ7CiAgICAgICAgICAgICBy
ZXR1cm4gbWF4PExheW91dFVuaXQ+KDAsIG1heEhlaWdodCAtIGhlaWdodCk7CiAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcAkocmV2
aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDExICsxNDksMTEgQEAgdm9pZCBSZW5kZXJGaWVs
ZHNldDo6cGFpbnRCb3hEZWNvcmF0aW9ucwogICAgIC8vIGNhc2VzIHRoZSBsZWdlbmQgaXMgZW1i
ZWRkZWQgaW4gdGhlIHJpZ2h0IGFuZCBib3R0b20gYm9yZGVycyByZXNwZWN0aXZlbHkuCiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3MjM2CiAgICAgaWYg
KHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgTGF5b3V0VW5p
dCB5T2ZmID0gKGxlZ2VuZC0+eSgpID4gMCkgPyBaRVJPX0xBWU9VVF9VTklUIDogKGxlZ2VuZC0+
aGVpZ2h0KCkgLSBib3JkZXJUb3AoKSkgLyAyOworICAgICAgICBMYXlvdXRVbml0IHlPZmYgPSAo
bGVnZW5kLT55KCkgPiAwKSA/IExheW91dFVuaXQoMCkgOiAobGVnZW5kLT5oZWlnaHQoKSAtIGJv
cmRlclRvcCgpKSAvIDI7CiAgICAgICAgIHBhaW50UmVjdC5zZXRIZWlnaHQocGFpbnRSZWN0Lmhl
aWdodCgpIC0geU9mZik7CiAgICAgICAgIHBhaW50UmVjdC5zZXRZKHBhaW50UmVjdC55KCkgKyB5
T2ZmKTsKICAgICB9IGVsc2UgewotICAgICAgICBMYXlvdXRVbml0IHhPZmYgPSAobGVnZW5kLT54
KCkgPiAwKSA/IFpFUk9fTEFZT1VUX1VOSVQgOiAobGVnZW5kLT53aWR0aCgpIC0gYm9yZGVyTGVm
dCgpKSAvIDI7CisgICAgICAgIExheW91dFVuaXQgeE9mZiA9IChsZWdlbmQtPngoKSA+IDApID8g
TGF5b3V0VW5pdCgwKSA6IChsZWdlbmQtPndpZHRoKCkgLSBib3JkZXJMZWZ0KCkpIC8gMjsKICAg
ICAgICAgcGFpbnRSZWN0LnNldFdpZHRoKHBhaW50UmVjdC53aWR0aCgpIC0geE9mZik7CiAgICAg
ICAgIHBhaW50UmVjdC5zZXRYKHBhaW50UmVjdC54KCkgKyB4T2ZmKTsKICAgICB9CkBAIC0yMDAs
MTEgKzIwMCwxMSBAQCB2b2lkIFJlbmRlckZpZWxkc2V0OjpwYWludE1hc2soUGFpbnRJbmZvCiAg
ICAgLy8gY2FzZXMgdGhlIGxlZ2VuZCBpcyBlbWJlZGRlZCBpbiB0aGUgcmlnaHQgYW5kIGJvdHRv
bSBib3JkZXJzIHJlc3BlY3RpdmVseS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDcyMzYKICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSkgewotICAgICAgICBMYXlvdXRVbml0IHlPZmYgPSAobGVnZW5kLT55KCkgPiAwKSA/
IFpFUk9fTEFZT1VUX1VOSVQgOiAobGVnZW5kLT5oZWlnaHQoKSAtIGJvcmRlclRvcCgpKSAvIDI7
CisgICAgICAgIExheW91dFVuaXQgeU9mZiA9IChsZWdlbmQtPnkoKSA+IDApID8gTGF5b3V0VW5p
dCgwKSA6IChsZWdlbmQtPmhlaWdodCgpIC0gYm9yZGVyVG9wKCkpIC8gMjsKICAgICAgICAgcGFp
bnRSZWN0LmV4cGFuZCgwLCAteU9mZik7CiAgICAgICAgIHBhaW50UmVjdC5tb3ZlKDAsIHlPZmYp
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIExheW91dFVuaXQgeE9mZiA9IChsZWdlbmQtPngoKSA+
IDApID8gWkVST19MQVlPVVRfVU5JVCA6IChsZWdlbmQtPndpZHRoKCkgLSBib3JkZXJMZWZ0KCkp
IC8gMjsKKyAgICAgICAgTGF5b3V0VW5pdCB4T2ZmID0gKGxlZ2VuZC0+eCgpID4gMCkgPyBMYXlv
dXRVbml0KDApIDogKGxlZ2VuZC0+d2lkdGgoKSAtIGJvcmRlckxlZnQoKSkgLyAyOwogICAgICAg
ICBwYWludFJlY3QuZXhwYW5kKC14T2ZmLCAwKTsKICAgICAgICAgcGFpbnRSZWN0Lm1vdmUoeE9m
ZiwgMCk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhp
YmxlQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RmxleGlibGVCb3guY3BwCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzEsNyArMzcx
LDcgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6cGFpbnRDaGlsZHJlbihQYQogCiB2b2lkIFJl
bmRlckZsZXhpYmxlQm94OjpyZXBvc2l0aW9uTG9naWNhbEhlaWdodERlcGVuZGVudEZsZXhJdGVt
cyhPcmRlckl0ZXJhdG9yJiBpdGVyYXRvciwgV1RGOjpWZWN0b3I8TGluZUNvbnRleHQ+JiBsaW5l
Q29udGV4dHMsIExheW91dFVuaXQmIG9sZENsaWVudEFmdGVyRWRnZSkKIHsKLSAgICBMYXlvdXRV
bml0IGNyb3NzQXhpc1N0YXJ0RWRnZSA9IGxpbmVDb250ZXh0cy5pc0VtcHR5KCkgPyBaRVJPX0xB
WU9VVF9VTklUIDogbGluZUNvbnRleHRzWzBdLmNyb3NzQXhpc09mZnNldDsKKyAgICBMYXlvdXRV
bml0IGNyb3NzQXhpc1N0YXJ0RWRnZSA9IGxpbmVDb250ZXh0cy5pc0VtcHR5KCkgPyBMYXlvdXRV
bml0KDApIDogbGluZUNvbnRleHRzWzBdLmNyb3NzQXhpc09mZnNldDsKICAgICBhbGlnbkZsZXhM
aW5lcyhpdGVyYXRvciwgbGluZUNvbnRleHRzKTsKIAogICAgIC8vIElmIHdlIGhhdmUgYSBzaW5n
bGUgbGluZSBmbGV4Ym94LCB0aGUgbGluZSBoZWlnaHQgaXMgYWxsIHRoZSBhdmFpbGFibGUgc3Bh
Y2UuCkBAIC04OTQsNyArODk0LDcgQEAgYm9vbCBSZW5kZXJGbGV4aWJsZUJveDo6Y29tcHV0ZU5l
eHRGbGV4TAogICAgIGlmICghaXRlcmF0b3IuY3VycmVudENoaWxkKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIExheW91dFVuaXQgbGluZUJyZWFrTGVuZ3RoID0gbWFpbkF4aXNDb250
ZW50RXh0ZW50KE1BWF9MQVlPVVRfVU5JVCk7CisgICAgTGF5b3V0VW5pdCBsaW5lQnJlYWtMZW5n
dGggPSBtYWluQXhpc0NvbnRlbnRFeHRlbnQoTGF5b3V0VW5pdDo6bWF4KCkpOwogCiAgICAgZm9y
IChSZW5kZXJCb3gqIGNoaWxkID0gaXRlcmF0b3IuY3VycmVudENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGl0ZXJhdG9yLm5leHQoKSkgewogICAgICAgICBpZiAoY2hpbGQtPmlzT3V0T2ZGbG93UG9z
aXRpb25lZCgpKSB7CkBAIC0xMjM0LDcgKzEyMzQsNyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94
OjphbGlnbkNoaWxkcmVuKE9yCiAKICAgICBSZW5kZXJCb3gqIGNoaWxkID0gaXRlcmF0b3IuZmly
c3QoKTsKICAgICBmb3IgKHNpemVfdCBsaW5lTnVtYmVyID0gMDsgbGluZU51bWJlciA8IGxpbmVD
b250ZXh0cy5zaXplKCk7ICsrbGluZU51bWJlcikgewotICAgICAgICBMYXlvdXRVbml0IG1pbk1h
cmdpbkFmdGVyQmFzZWxpbmUgPSBNQVhfTEFZT1VUX1VOSVQ7CisgICAgICAgIExheW91dFVuaXQg
bWluTWFyZ2luQWZ0ZXJCYXNlbGluZSA9IExheW91dFVuaXQ6Om1heCgpOwogICAgICAgICBMYXlv
dXRVbml0IGxpbmVDcm9zc0F4aXNFeHRlbnQgPSBsaW5lQ29udGV4dHNbbGluZU51bWJlcl0uY3Jv
c3NBeGlzRXh0ZW50OwogICAgICAgICBMYXlvdXRVbml0IG1heEFzY2VudCA9IGxpbmVDb250ZXh0
c1tsaW5lTnVtYmVyXS5tYXhBc2NlbnQ7CiAKQEAgLTEzMTksNyArMTMxOSw3IEBAIHZvaWQgUmVu
ZGVyRmxleGlibGVCb3g6OmFwcGx5U3RyZXRjaEFsaWcKICAgICB9IGVsc2UgaWYgKGlzQ29sdW1u
RmxvdygpICYmIGNoaWxkLT5zdHlsZSgpLT5sb2dpY2FsV2lkdGgoKS5pc0F1dG8oKSkgewogICAg
ICAgICAvLyBGSVhNRTogSWYgdGhlIGNoaWxkIGRvZXNuJ3QgaGF2ZSBvcnRob2dvbmFsIGZsb3cs
IHRoZW4gaXQgYWxyZWFkeSBoYXMgYW4gb3ZlcnJpZGUgd2lkdGggc2V0LCBzbyB1c2UgaXQuCiAg
ICAgICAgIGlmIChoYXNPcnRob2dvbmFsRmxvdyhjaGlsZCkpIHsKLSAgICAgICAgICAgIExheW91
dFVuaXQgY2hpbGRXaWR0aCA9IHN0ZDo6bWF4KFpFUk9fTEFZT1VUX1VOSVQsIGxpbmVDcm9zc0F4
aXNFeHRlbnQgLSBjcm9zc0F4aXNNYXJnaW5FeHRlbnRGb3JDaGlsZChjaGlsZCkpOworICAgICAg
ICAgICAgTGF5b3V0VW5pdCBjaGlsZFdpZHRoID0gc3RkOjptYXgoTGF5b3V0VW5pdCgwKSwgbGlu
ZUNyb3NzQXhpc0V4dGVudCAtIGNyb3NzQXhpc01hcmdpbkV4dGVudEZvckNoaWxkKGNoaWxkKSk7
CiAgICAgICAgICAgICBjaGlsZFdpZHRoID0gY2hpbGQtPmNvbnN0cmFpbkxvZ2ljYWxXaWR0aElu
UmVnaW9uQnlNaW5NYXgoY2hpbGRXaWR0aCwgY2hpbGRXaWR0aCwgdGhpcyk7CiAKICAgICAgICAg
ICAgIGlmIChjaGlsZFdpZHRoICE9IGNoaWxkLT5sb2dpY2FsV2lkdGgoKSkgewpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAkocmV2aXNpb24g
MTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsNyArMjAwLDcgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFk
Ojp1cGRhdGVMb2dpY2FsV2lkdAogICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9ICppdGVy
OwogICAgICAgICBMYXlvdXRVbml0IHJlZ2lvbkxvZ2ljYWxXaWR0aCA9IHJlZ2lvbi0+cGFnZUxv
Z2ljYWxXaWR0aCgpOwogICAgICAgICBpZiAocmVnaW9uTG9naWNhbFdpZHRoICE9IGxvZ2ljYWxX
aWR0aCkgewotICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCA9IHN0eWxlKCktPmRp
cmVjdGlvbigpID09IExUUiA/IFpFUk9fTEFZT1VUX1VOSVQgOiBsb2dpY2FsV2lkdGggLSByZWdp
b25Mb2dpY2FsV2lkdGg7CisgICAgICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0ID0gc3R5
bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gTGF5b3V0VW5pdCgwKSA6IGxvZ2ljYWxXaWR0aCAt
IHJlZ2lvbkxvZ2ljYWxXaWR0aDsKICAgICAgICAgICAgIHJlZ2lvbi0+c2V0UmVuZGVyQm94UmVn
aW9uSW5mbyh0aGlzLCBsb2dpY2FsTGVmdCwgcmVnaW9uTG9naWNhbFdpZHRoLCBmYWxzZSk7CiAg
ICAgICAgIH0KICAgICB9CkBAIC0zMjYsNyArMzI2LDcgQEAgUmVuZGVyUmVnaW9uKiBSZW5kZXJG
bG93VGhyZWFkOjpyZWdpb25BdAogICAgIC8vIHRoZSBsYXN0IHZhbGlkIHJlZ2lvbi4gSXQgaXMg
c2ltaWxhciB0byBhdXRvIGV4dGVuZGluZyB0aGUgc2l6ZSBvZiB0aGUgbGFzdCByZWdpb24uIAog
ICAgIFJlbmRlclJlZ2lvbiogbGFzdFZhbGlkUmVnaW9uID0gMDsKIAotICAgIExheW91dFVuaXQg
YWNjdW11bGF0ZWRMb2dpY2FsSGVpZ2h0ID0gWkVST19MQVlPVVRfVU5JVDsKKyAgICBMYXlvdXRV
bml0IGFjY3VtdWxhdGVkTG9naWNhbEhlaWdodCA9IExheW91dFVuaXQoMCk7CiAgICAgCiAgICAg
Ly8gRklYTUU6IFRoZSByZWdpb25zIGFyZSBhbHdheXMgaW4gb3JkZXIsIG9wdGltaXplIHRoaXMg
c2VhcmNoLgogICAgIGZvciAoUmVuZGVyUmVnaW9uTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9
IG1fcmVnaW9uTGlzdC5iZWdpbigpOyBpdGVyICE9IG1fcmVnaW9uTGlzdC5lbmQoKTsgKytpdGVy
KSB7CkBAIC0zNjIsNyArMzYyLDcgQEAgUmVuZGVyUmVnaW9uKiBSZW5kZXJGbG93VGhyZWFkOjpy
ZWdpb25BdAogTGF5b3V0VW5pdCBSZW5kZXJGbG93VGhyZWFkOjpwYWdlTG9naWNhbFRvcEZvck9m
ZnNldChMYXlvdXRVbml0IG9mZnNldCkgY29uc3QKIHsKICAgICBSZW5kZXJSZWdpb24qIHJlZ2lv
biA9IHJlZ2lvbkF0QmxvY2tPZmZzZXQob2Zmc2V0KTsKLSAgICByZXR1cm4gcmVnaW9uID8gcmVn
aW9uLT5wYWdlTG9naWNhbFRvcEZvck9mZnNldChvZmZzZXQpIDogWkVST19MQVlPVVRfVU5JVDsK
KyAgICByZXR1cm4gcmVnaW9uID8gcmVnaW9uLT5wYWdlTG9naWNhbFRvcEZvck9mZnNldChvZmZz
ZXQpIDogTGF5b3V0VW5pdCgwKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJGbG93VGhyZWFkOjpw
YWdlTG9naWNhbFdpZHRoRm9yT2Zmc2V0KExheW91dFVuaXQgb2Zmc2V0KSBjb25zdApAQCAtMzc1
LDkgKzM3NSw5IEBAIExheW91dFVuaXQgUmVuZGVyRmxvd1RocmVhZDo6cGFnZUxvZ2ljYWwKIHsK
ICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9IHJlZ2lvbkF0QmxvY2tPZmZzZXQob2Zmc2V0KTsK
ICAgICBpZiAoIXJlZ2lvbikKLSAgICAgICAgcmV0dXJuIFpFUk9fTEFZT1VUX1VOSVQ7CisgICAg
ICAgIHJldHVybiBMYXlvdXRVbml0KDApOwogICAgIGlmIChyZWdpb24tPm5lZWRzT3ZlcnJpZGVM
b2dpY2FsQ29udGVudEhlaWdodENvbXB1dGF0aW9uKCkpCi0gICAgICAgIHJldHVybiBNQVhfTEFZ
T1VUX1VOSVQgLyAyOworICAgICAgICByZXR1cm4gTGF5b3V0VW5pdDo6bWF4KCkgLyAyOwogICAg
IHJldHVybiByZWdpb24tPnBhZ2VMb2dpY2FsSGVpZ2h0KCk7CiB9CiAKQEAgLTM4NSw5ICszODUs
OSBAQCBMYXlvdXRVbml0IFJlbmRlckZsb3dUaHJlYWQ6OnBhZ2VSZW1haW5pCiB7CiAgICAgUmVu
ZGVyUmVnaW9uKiByZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KG9mZnNldCk7CiAgICAgaWYg
KCFyZWdpb24pCi0gICAgICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOworICAgICAgICByZXR1
cm4gTGF5b3V0VW5pdCgwKTsKICAgICBpZiAocmVnaW9uLT5uZWVkc092ZXJyaWRlTG9naWNhbENv
bnRlbnRIZWlnaHRDb21wdXRhdGlvbigpKQotICAgICAgICByZXR1cm4gTUFYX0xBWU9VVF9VTklU
IC8gMjsKKyAgICAgICAgcmV0dXJuIExheW91dFVuaXQ6Om1heCgpIC8gMjsKIAogICAgIExheW91
dFVuaXQgcGFnZUxvZ2ljYWxUb3AgPSByZWdpb24tPnBhZ2VMb2dpY2FsVG9wRm9yT2Zmc2V0KG9m
ZnNldCk7CiAgICAgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9IHJlZ2lvbi0+cGFnZUxv
Z2ljYWxIZWlnaHQoKTsKQEAgLTQ4Niw3ICs0ODYsNyBAQCBMYXlvdXRVbml0IFJlbmRlckZsb3dU
aHJlYWQ6OmNvbnRlbnRMb2dpCiB7CiAgICAgUmVuZGVyUmVnaW9uKiBmaXJzdFZhbGlkUmVnaW9u
SW5GbG93ID0gZmlyc3RSZWdpb24oKTsKICAgICBpZiAoIWZpcnN0VmFsaWRSZWdpb25JbkZsb3cp
Ci0gICAgICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOworICAgICAgICByZXR1cm4gTGF5b3V0
VW5pdCgwKTsKICAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGZpcnN0VmFs
aWRSZWdpb25JbkZsb3ctPmNvbnRlbnRXaWR0aCgpIDogZmlyc3RWYWxpZFJlZ2lvbkluRmxvdy0+
Y29udGVudEhlaWdodCgpOwogfQogCkBAIC00OTQsNyArNDk0LDcgQEAgTGF5b3V0VW5pdCBSZW5k
ZXJGbG93VGhyZWFkOjpjb250ZW50TG9naQogewogICAgIFJlbmRlclJlZ2lvbiogZmlyc3RWYWxp
ZFJlZ2lvbkluRmxvdyA9IGZpcnN0UmVnaW9uKCk7CiAgICAgaWYgKCFmaXJzdFZhbGlkUmVnaW9u
SW5GbG93KQotICAgICAgICByZXR1cm4gWkVST19MQVlPVVRfVU5JVDsKKyAgICAgICAgcmV0dXJu
IExheW91dFVuaXQoMCk7CiAgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBm
aXJzdFZhbGlkUmVnaW9uSW5GbG93LT5jb250ZW50SGVpZ2h0KCkgOiBmaXJzdFZhbGlkUmVnaW9u
SW5GbG93LT5jb250ZW50V2lkdGgoKTsKIH0KIApAQCAtNTAyLDcgKzUwMiw3IEBAIExheW91dFVu
aXQgUmVuZGVyRmxvd1RocmVhZDo6Y29udGVudExvZ2kKIHsKICAgICBSZW5kZXJSZWdpb24qIGZp
cnN0VmFsaWRSZWdpb25JbkZsb3cgPSBmaXJzdFJlZ2lvbigpOwogICAgIGlmICghZmlyc3RWYWxp
ZFJlZ2lvbkluRmxvdykKLSAgICAgICAgcmV0dXJuIFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAg
IHJldHVybiBMYXlvdXRVbml0KDApOwogICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpID8gZmlyc3RWYWxpZFJlZ2lvbkluRmxvdy0+Zmxvd1RocmVhZFBvcnRpb25SZWN0KCkueCgp
IDogZmlyc3RWYWxpZFJlZ2lvbkluRmxvdy0+Zmxvd1RocmVhZFBvcnRpb25SZWN0KCkueSgpOwog
fQogCkBAIC03ODYsNyArNzg2LDcgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjp1cGRhdGVSZWdp
b25zRmxvdwogICAgICAgICBMYXlvdXRVbml0IHJlZ2lvbkxvZ2ljYWxXaWR0aCA9IHJlZ2lvbi0+
cGFnZUxvZ2ljYWxXaWR0aCgpOwogICAgICAgICBMYXlvdXRVbml0IHJlZ2lvbkxvZ2ljYWxIZWln
aHQgPSByZWdpb24tPmxvZ2ljYWxIZWlnaHRPZkFsbEZsb3dUaHJlYWRDb250ZW50KCk7CiAKLSAg
ICAgICAgTGF5b3V0UmVjdCByZWdpb25SZWN0KHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/
IFpFUk9fTEFZT1VUX1VOSVQgOiBsb2dpY2FsV2lkdGgoKSAtIHJlZ2lvbkxvZ2ljYWxXaWR0aCwg
bG9naWNhbEhlaWdodCwgcmVnaW9uTG9naWNhbFdpZHRoLCByZWdpb25Mb2dpY2FsSGVpZ2h0KTsK
KyAgICAgICAgTGF5b3V0UmVjdCByZWdpb25SZWN0KHN0eWxlKCktPmRpcmVjdGlvbigpID09IExU
UiA/IExheW91dFVuaXQoMCkgOiBsb2dpY2FsV2lkdGgoKSAtIHJlZ2lvbkxvZ2ljYWxXaWR0aCwg
bG9naWNhbEhlaWdodCwgcmVnaW9uTG9naWNhbFdpZHRoLCByZWdpb25Mb2dpY2FsSGVpZ2h0KTsK
IAogICAgICAgICAvLyBXaGVuIGEgZmxvdyB0aHJlYWQgaGFzIG1vcmUgdGhhbiBvbmUgYXV0byBs
b2dpY2FsIGhlaWdodCByZWdpb24sCiAgICAgICAgIC8vIHdlIGhhdmUgdG8gdGFrZSBpbnRvIGFj
Y291bnQgdGhlIG92ZXJyaWRlIGxvZ2ljYWwgY29udGVudCBoZWlnaHQgdmFsdWUsCkBAIC04ODIs
NyArODgyLDcgQEAgYm9vbCBSZW5kZXJGbG93VGhyZWFkOjphZGRGb3JjZWRSZWdpb25CcgogICAg
ICAgICB1cGRhdGVSZWdpb25zRmxvd1RocmVhZFBvcnRpb25SZWN0KCk7CiAKICAgICBpZiAob2Zm
c2V0QnJlYWtBZGp1c3RtZW50KQotICAgICAgICAqb2Zmc2V0QnJlYWtBZGp1c3RtZW50ID0gbWF4
PExheW91dFVuaXQ+KFpFUk9fTEFZT1VUX1VOSVQsIGN1cnJlbnRSZWdpb25PZmZzZXRJbkZsb3dU
aHJlYWQgLSBvZmZzZXRCcmVha0luRmxvd1RocmVhZCk7CisgICAgICAgICpvZmZzZXRCcmVha0Fk
anVzdG1lbnQgPSBtYXg8TGF5b3V0VW5pdD4oTGF5b3V0VW5pdCgwKSwgY3VycmVudFJlZ2lvbk9m
ZnNldEluRmxvd1RocmVhZCAtIG9mZnNldEJyZWFrSW5GbG93VGhyZWFkKTsKIAogICAgIHJldHVy
biBvdmVycmlkZUxvZ2ljYWxDb250ZW50SGVpZ2h0Q29tcHV0ZWQ7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR2VvbWV0cnlNYXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR2VvbWV0cnlNYXAuaAkocmV2aXNpb24gMTMzNTE3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdlb21ldHJ5TWFwLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5j
bHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIkxheW91
dFR5cGVzSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dFNpemUuaCIKICNpbmNsdWRl
ICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlUmVzb3VyY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJjZS5oCShy
ZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2VS
ZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiQ2Fj
aGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUg
IkltYWdlLmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVk
ZSAiTGF5b3V0U2l6ZS5oIgogI2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJ
KHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIklubGlu
ZVRleHRCb3guaCIKKyNpbmNsdWRlICJMYXlvdXRQb2ludC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
ICNpbmNsdWRlICJSZW5kZXJBcmVuYS5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCkBAIC05
NDksOCArOTUwLDggQEAgTGF5b3V0UmVjdCBSZW5kZXJJbmxpbmU6OmxpbmVzVmlzdWFsT3Zlcgog
ICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCiAgICAgLy8gUmV0dXJuIHRoZSB3aWR0aCBv
ZiB0aGUgbWluaW1hbCBsZWZ0IHNpZGUgYW5kIHRoZSBtYXhpbWFsIHJpZ2h0IHNpZGUuCi0gICAg
TGF5b3V0VW5pdCBsb2dpY2FsTGVmdFNpZGUgPSBNQVhfTEFZT1VUX1VOSVQ7Ci0gICAgTGF5b3V0
VW5pdCBsb2dpY2FsUmlnaHRTaWRlID0gTUlOX0xBWU9VVF9VTklUOworICAgIExheW91dFVuaXQg
bG9naWNhbExlZnRTaWRlID0gTGF5b3V0VW5pdDo6bWF4KCk7CisgICAgTGF5b3V0VW5pdCBsb2dp
Y2FsUmlnaHRTaWRlID0gTGF5b3V0VW5pdDo6bWluKCk7CiAgICAgZm9yIChJbmxpbmVGbG93Qm94
KiBjdXJyID0gZmlyc3RMaW5lQm94KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0TGluZUJveCgp
KSB7CiAgICAgICAgIGxvZ2ljYWxMZWZ0U2lkZSA9IG1pbihsb2dpY2FsTGVmdFNpZGUsIGN1cnIt
PmxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3coKSk7CiAgICAgICAgIGxvZ2ljYWxSaWdodFNpZGUg
PSBtYXgobG9naWNhbFJpZ2h0U2lkZSwgY3Vyci0+bG9naWNhbFJpZ2h0VmlzdWFsT3ZlcmZsb3co
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlz
aW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwNDAsNyArMjA0MCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnJl
c2l6ZShjb25zdCBQbGF0Zm9ybU0KICAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGlu
ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5MZWZ0LCBTdHJpbmc6Om51bWJlcihyZW5k
ZXJlci0+bWFyZ2luTGVmdCgpIC8gem9vbUZhY3RvcikgKyAicHgiLCBmYWxzZSk7CiAgICAgICAg
ICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFy
Z2luUmlnaHQsIFN0cmluZzo6bnVtYmVyKHJlbmRlcmVyLT5tYXJnaW5SaWdodCgpIC8gem9vbUZh
Y3RvcikgKyAicHgiLCBmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgTGF5b3V0VW5pdCBiYXNl
V2lkdGggPSByZW5kZXJlci0+d2lkdGgoKSAtIChpc0JveFNpemluZ0JvcmRlciA/IFpFUk9fTEFZ
T1VUX1VOSVQgOiByZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ1dpZHRoKCkpOworICAgICAgICBM
YXlvdXRVbml0IGJhc2VXaWR0aCA9IHJlbmRlcmVyLT53aWR0aCgpIC0gKGlzQm94U2l6aW5nQm9y
ZGVyID8gTGF5b3V0VW5pdCgwKSA6IHJlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nV2lkdGgoKSk7
CiAgICAgICAgIGJhc2VXaWR0aCA9IGJhc2VXaWR0aCAvIHpvb21GYWN0b3I7CiAgICAgICAgIHN0
eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgU3Ry
aW5nOjpudW1iZXIocm91bmRUb0ludChiYXNlV2lkdGggKyBkaWZmZXJlbmNlLndpZHRoKCkpKSAr
ICJweCIsIGZhbHNlKTsKICAgICB9CkBAIC0yMDUxLDcgKzIwNTEsNyBAQCB2b2lkIFJlbmRlckxh
eWVyOjpyZXNpemUoY29uc3QgUGxhdGZvcm1NCiAgICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5z
ZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luVG9wLCBTdHJpbmc6Om51bWJl
cihyZW5kZXJlci0+bWFyZ2luVG9wKCkgLyB6b29tRmFjdG9yKSArICJweCIsIGZhbHNlKTsKICAg
ICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVy
dHlNYXJnaW5Cb3R0b20sIFN0cmluZzo6bnVtYmVyKHJlbmRlcmVyLT5tYXJnaW5Cb3R0b20oKSAv
IHpvb21GYWN0b3IpICsgInB4IiwgZmFsc2UpOwogICAgICAgICB9Ci0gICAgICAgIExheW91dFVu
aXQgYmFzZUhlaWdodCA9IHJlbmRlcmVyLT5oZWlnaHQoKSAtIChpc0JveFNpemluZ0JvcmRlciA/
IFpFUk9fTEFZT1VUX1VOSVQgOiByZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ0hlaWdodCgpKTsK
KyAgICAgICAgTGF5b3V0VW5pdCBiYXNlSGVpZ2h0ID0gcmVuZGVyZXItPmhlaWdodCgpIC0gKGlz
Qm94U2l6aW5nQm9yZGVyID8gTGF5b3V0VW5pdCgwKSA6IHJlbmRlcmVyLT5ib3JkZXJBbmRQYWRk
aW5nSGVpZ2h0KCkpOwogICAgICAgICBiYXNlSGVpZ2h0ID0gYmFzZUhlaWdodCAvIHpvb21GYWN0
b3I7CiAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlIZWlnaHQsIFN0cmluZzo6bnVtYmVyKHJvdW5kVG9JbnQoYmFzZUhlaWdodCArIGRpZmZl
cmVuY2UuaGVpZ2h0KCkpKSArICJweCIsIGZhbHNlKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5oCShyZXZpc2lvbiAx
MzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZv
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDcgQEAKICNpbmNsdWRlICJDYWNoZWRTVkdE
b2N1bWVudC5oIgogI2VuZGlmCiAjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9uLmgiCi0jaW5jbHVk
ZSAiRnJhY3Rpb25hbExheW91dFJlY3QuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2lu
Y2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCShyZXZpc2lvbiAx
MzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNyArMTU1LDcgQEAgYm9vbCBSZW5kZXJMaW5lQm94TGlz
dDo6cmFuZ2VJbnRlcnNlY3RzUgogICAgICAgICBibG9jayA9IHJlbmRlcmVyLT5jb250YWluaW5n
QmxvY2soKTsKICAgICBMYXlvdXRVbml0IHBoeXNpY2FsU3RhcnQgPSBibG9jay0+ZmxpcEZvcldy
aXRpbmdNb2RlKGxvZ2ljYWxUb3ApOwogICAgIExheW91dFVuaXQgcGh5c2ljYWxFbmQgPSBibG9j
ay0+ZmxpcEZvcldyaXRpbmdNb2RlKGxvZ2ljYWxCb3R0b20pOwotICAgIExheW91dFVuaXQgcGh5
c2ljYWxFeHRlbnQgPSBhYnNvbHV0ZVZhbHVlKHBoeXNpY2FsRW5kIC0gcGh5c2ljYWxTdGFydCk7
CisgICAgTGF5b3V0VW5pdCBwaHlzaWNhbEV4dGVudCA9IChwaHlzaWNhbEVuZCAtIHBoeXNpY2Fs
U3RhcnQpLmFicygpOwogICAgIHBoeXNpY2FsU3RhcnQgPSBtaW4ocGh5c2ljYWxTdGFydCwgcGh5
c2ljYWxFbmQpOwogICAgIAogICAgIGlmIChyZW5kZXJlci0+c3R5bGUoKS0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RNYXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0TWFya2VyLmNwcAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTA1LDcgKzE1
MDUsNyBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OnVwZGF0ZU1hcmdpbnMoKQogICAgICAgICAg
ICAgICAgICAgICBjYXNlIE5vbmVMaXN0U3R5bGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1hcmdpblN0YXJ0ID0gbV90ZXh0LmlzRW1wdHkoKSA/IFpFUk9fTEFZT1VUX1VOSVQgOiAt
bWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCkgLSBvZmZzZXQgLyAyOworICAgICAgICAgICAgICAg
ICAgICAgICAgbWFyZ2luU3RhcnQgPSBtX3RleHQuaXNFbXB0eSgpID8gTGF5b3V0VW5pdCgwKSA6
IC1taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSAtIG9mZnNldCAvIDI7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgbWFyZ2luRW5kID0gLW1hcmdpblN0YXJ0
IC0gbWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSwx
MyArMTI1LDEzIEBAIGludCBSZW5kZXJNYXJxdWVlOjpjb21wdXRlUG9zaXRpb24oRU1hcnEKICAg
ICAgICAgfQogICAgICAgICBpZiAoZGlyID09IE1SSUdIVCkgewogICAgICAgICAgICAgaWYgKHN0
b3BBdENvbnRlbnRFZGdlKQotICAgICAgICAgICAgICAgIHJldHVybiBtYXgoWkVST19MQVlPVVRf
VU5JVCwgbHRyID8gKGNvbnRlbnRXaWR0aCAtIGNsaWVudFdpZHRoKSA6IChjbGllbnRXaWR0aCAt
IGNvbnRlbnRXaWR0aCkpOworICAgICAgICAgICAgICAgIHJldHVybiBtYXgoTGF5b3V0VW5pdCgw
KSwgbHRyID8gKGNvbnRlbnRXaWR0aCAtIGNsaWVudFdpZHRoKSA6IChjbGllbnRXaWR0aCAtIGNv
bnRlbnRXaWR0aCkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBs
dHIgPyBjb250ZW50V2lkdGggOiBjbGllbnRXaWR0aDsKICAgICAgICAgfQogICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgIGlmIChzdG9wQXRDb250ZW50RWRnZSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gbWluKFpFUk9fTEFZT1VUX1VOSVQsIGx0ciA/IChjb250ZW50V2lkdGggLSBjbGllbnRX
aWR0aCkgOiAoY2xpZW50V2lkdGggLSBjb250ZW50V2lkdGgpKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbWluKExheW91dFVuaXQoMCksIGx0ciA/IChjb250ZW50V2lkdGggLSBjbGllbnRXaWR0
aCkgOiAoY2xpZW50V2lkdGggLSBjb250ZW50V2lkdGgpKTsKICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICByZXR1cm4gbHRyID8gLWNsaWVudFdpZHRoIDogLWNvbnRlbnRXaWR0aDsK
ICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0
LmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
ZW51TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAjaWZuZGVmIFJlbmRl
ck1lbnVMaXN0X2gKICNkZWZpbmUgUmVuZGVyTWVudUxpc3RfaAogCi0jaW5jbHVkZSAiTGF5b3V0
VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiUG9wdXBNZW51Lmgi
CiAjaW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyRGVwcmVjYXRl
ZEZsZXhpYmxlQm94LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVs
dGlDb2x1bW5CbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck11bHRpQ29sdW1uQmxvY2suY3BwCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5CbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDggKzM3LDggQEAgUmVuZGVyTXVsdGlDb2x1bW5CbG9jazo6UmVuZGVyTXVsdGlD
b2x1bQogICAgIDogUmVuZGVyQmxvY2sobm9kZSkKICAgICAsIG1fZmxvd1RocmVhZCgwKQogICAg
ICwgbV9jb2x1bW5Db3VudCgxKQotICAgICwgbV9jb2x1bW5XaWR0aChaRVJPX0xBWU9VVF9VTklU
KQotICAgICwgbV9jb2x1bW5IZWlnaHQoWkVST19MQVlPVVRfVU5JVCkKKyAgICAsIG1fY29sdW1u
V2lkdGgoTGF5b3V0VW5pdCgwKSkKKyAgICAsIG1fY29sdW1uSGVpZ2h0KExheW91dFVuaXQoMCkp
CiB7CiB9CiAKQEAgLTgzLDEzICs4MywxMyBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uQmxvY2s6
OmNoZWNrRm9yUGFnCiAgICAgLy8gV2UgZG9uJ3QgYWN0dWFsbHkgdXBkYXRlIGFueSBvZiB0aGUg
dmFyaWFibGVzLiBXZSBqdXN0IHN1YmNsYXNzZWQgdG8gYWRqdXN0IG91ciBjb2x1bW4gaGVpZ2h0
LgogICAgIHVwZGF0ZUxvZ2ljYWxIZWlnaHQoKTsKICAgICBMYXlvdXRVbml0IG5ld0NvbnRlbnRM
b2dpY2FsSGVpZ2h0ID0gY29udGVudExvZ2ljYWxIZWlnaHQoKTsKLSAgICBpZiAobmV3Q29udGVu
dExvZ2ljYWxIZWlnaHQgPiBaRVJPX0xBWU9VVF9VTklUKSB7CisgICAgaWYgKG5ld0NvbnRlbnRM
b2dpY2FsSGVpZ2h0ID4gTGF5b3V0VW5pdCgwKSkgewogICAgICAgICAvLyBUaGUgcmVnaW9ucyB3
aWxsIGJlIGludmFsaWRhdGVkIHdoZW4gd2UgbGF5IHRoZW0gb3V0IGFuZCB0aGV5IGNoYW5nZSBz
aXplIHRvCiAgICAgICAgIC8vIHRoZSBuZXcgY29sdW1uIGhlaWdodC4KICAgICAgICAgaWYgKGNv
bHVtbkhlaWdodCgpICE9IG5ld0NvbnRlbnRMb2dpY2FsSGVpZ2h0KQogICAgICAgICAgICAgc2V0
Q29sdW1uSGVpZ2h0KG5ld0NvbnRlbnRMb2dpY2FsSGVpZ2h0KTsKICAgICB9Ci0gICAgc2V0TG9n
aWNhbEhlaWdodChaRVJPX0xBWU9VVF9VTklUKTsKKyAgICBzZXRMb2dpY2FsSGVpZ2h0KExheW91
dFVuaXQoMCkpOwogCiAgICAgLy8gU2V0IHVwIG91ciBjb2x1bW4gc2V0cy4KICAgICBlbnN1cmVD
b2x1bW5TZXRzKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlD
b2x1bW5TZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNdWx0aUNvbHVtblNldC5jcHAJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDggKzM5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogUmVuZGVyTXVsdGlDb2x1bW5TZXQ6OlJl
bmRlck11bHRpQ29sdW1uU2V0KE5vZGUqIG5vZGUsIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJl
YWQpCiAgICAgOiBSZW5kZXJSZWdpb25TZXQobm9kZSwgZmxvd1RocmVhZCkKICAgICAsIG1fY29t
cHV0ZWRDb2x1bW5Db3VudCgxKQotICAgICwgbV9jb21wdXRlZENvbHVtbldpZHRoKFpFUk9fTEFZ
T1VUX1VOSVQpCi0gICAgLCBtX2NvbXB1dGVkQ29sdW1uSGVpZ2h0KFpFUk9fTEFZT1VUX1VOSVQp
CisgICAgLCBtX2NvbXB1dGVkQ29sdW1uV2lkdGgoTGF5b3V0VW5pdCgwKSkKKyAgICAsIG1fY29t
cHV0ZWRDb2x1bW5IZWlnaHQoTGF5b3V0VW5pdCgwKSkKIHsKIH0KIApAQCAtMjI4LDkgKzIyOCw5
IEBAIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5TZXQ6OnBhaW50Q29sdW1uUnUKICAgICBib29sIGFu
dGlhbGlhcyA9IHNob3VsZEFudGlhbGlhc0xpbmVzKHBhaW50SW5mby5jb250ZXh0KTsKIAogICAg
IGJvb2wgbGVmdFRvUmlnaHQgPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7Ci0g
ICAgTGF5b3V0VW5pdCBjdXJyTG9naWNhbExlZnRPZmZzZXQgPSBsZWZ0VG9SaWdodCA/IFpFUk9f
TEFZT1VUX1VOSVQgOiBjb250ZW50TG9naWNhbFdpZHRoKCk7CisgICAgTGF5b3V0VW5pdCBjdXJy
TG9naWNhbExlZnRPZmZzZXQgPSBsZWZ0VG9SaWdodCA/IExheW91dFVuaXQoMCkgOiBjb250ZW50
TG9naWNhbFdpZHRoKCk7CiAgICAgTGF5b3V0VW5pdCBydWxlQWRkID0gYm9yZGVyQW5kUGFkZGlu
Z0xvZ2ljYWxMZWZ0KCk7Ci0gICAgTGF5b3V0VW5pdCBydWxlTG9naWNhbExlZnQgPSBsZWZ0VG9S
aWdodCA/IFpFUk9fTEFZT1VUX1VOSVQgOiBjb250ZW50TG9naWNhbFdpZHRoKCk7CisgICAgTGF5
b3V0VW5pdCBydWxlTG9naWNhbExlZnQgPSBsZWZ0VG9SaWdodCA/IExheW91dFVuaXQoMCkgOiBj
b250ZW50TG9naWNhbFdpZHRoKCk7CiAgICAgTGF5b3V0VW5pdCBpbmxpbmVEaXJlY3Rpb25TaXpl
ID0gY29tcHV0ZWRDb2x1bW5XaWR0aCgpOwogICAgIEJveFNpZGUgYm94U2lkZSA9IGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkKICAgICAgICAgPyBsZWZ0VG9SaWdodCA/IEJTTGVmdCA6IEJTUmln
aHQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZs
b3dUaHJlYWQuY3BwCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM0LDcgKzQz
NCw3IEBAIHN0YXRpYyBib29sIGlzQ29udGFpbmVkSW5Ob2RlcyhWZWN0b3I8Tm8KIAogc3RhdGlj
IGJvb2wgYm94SW50ZXJzZWN0c1JlZ2lvbihMYXlvdXRVbml0IGxvZ2ljYWxUb3BGb3JCb3gsIExh
eW91dFVuaXQgbG9naWNhbEJvdHRvbUZvckJveCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wRm9yUmVn
aW9uLCBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b21Gb3JSZWdpb24pCiB7Ci0gICAgYm9vbCByZWdp
b25Jc0VtcHR5ID0gbG9naWNhbEJvdHRvbUZvclJlZ2lvbiAhPSBNQVhfTEFZT1VUX1VOSVQgJiYg
bG9naWNhbFRvcEZvclJlZ2lvbiAhPSBNSU5fTEFZT1VUX1VOSVQKKyAgICBib29sIHJlZ2lvbklz
RW1wdHkgPSBsb2dpY2FsQm90dG9tRm9yUmVnaW9uICE9IExheW91dFVuaXQ6Om1heCgpICYmIGxv
Z2ljYWxUb3BGb3JSZWdpb24gIT0gTGF5b3V0VW5pdDo6bWluKCkKICAgICAgICAgJiYgKGxvZ2lj
YWxCb3R0b21Gb3JSZWdpb24gLSBsb2dpY2FsVG9wRm9yUmVnaW9uKSA8PSAwOwogICAgIHJldHVy
biAgKGxvZ2ljYWxCb3R0b21Gb3JCb3ggLSBsb2dpY2FsVG9wRm9yQm94KSA+IDAKICAgICAgICAg
JiYgIXJlZ2lvbklzRW1wdHkKQEAgLTQ0OCwxMyArNDQ4LDEzIEBAIHZvaWQgUmVuZGVyTmFtZWRG
bG93VGhyZWFkOjpnZXRSYW5nZXMoVmUKIAogICAgIC8vIGV4dGVuZCB0aGUgZmlyc3QgcmVnaW9u
IHRvcCB0byBjb250YWluIGV2ZXJ5dGhpbmcgdXAgdG8gaXRzIGxvZ2ljYWwgaGVpZ2h0CiAgICAg
aWYgKHJlZ2lvbi0+aXNGaXJzdFJlZ2lvbigpKQotICAgICAgICBsb2dpY2FsVG9wRm9yUmVnaW9u
ID0gTUlOX0xBWU9VVF9VTklUOworICAgICAgICBsb2dpY2FsVG9wRm9yUmVnaW9uID0gTGF5b3V0
VW5pdDo6bWluKCk7CiAgICAgZWxzZQogICAgICAgICBsb2dpY2FsVG9wRm9yUmVnaW9uID0gIHJl
Z2lvbi0+bG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCk7CiAKICAgICAvLyBleHRlbmQg
dGhlIGxhc3QgcmVnaW9uIHRvIGNvbnRhaW4gZXZlcnl0aGluZyBhYm92ZSBpdHMgeSgpCiAgICAg
aWYgKHJlZ2lvbi0+aXNMYXN0UmVnaW9uKCkpCi0gICAgICAgIGxvZ2ljYWxCb3R0b21Gb3JSZWdp
b24gPSBNQVhfTEFZT1VUX1VOSVQ7CisgICAgICAgIGxvZ2ljYWxCb3R0b21Gb3JSZWdpb24gPSBM
YXlvdXRVbml0OjptYXgoKTsKICAgICBlbHNlCiAgICAgICAgIGxvZ2ljYWxCb3R0b21Gb3JSZWdp
b24gPSByZWdpb24tPmxvZ2ljYWxCb3R0b21Gb3JGbG93VGhyZWFkQ29udGVudCgpOwogCkBAIC00
OTYsOCArNDk2LDggQEAgdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmdldFJhbmdlcyhWZQog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBMYXlvdXRVbml0IG9mZnNldFRvcCA9IHJlbmRl
cmVyLT5jb250YWluaW5nQmxvY2soKS0+b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgp
OwotICAgICAgICAgICAgY29uc3QgTGF5b3V0UG9pbnQgbG9naWNhbE9mZnNldEZyb21Ub3AoaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IFpFUk9fTEFZT1VUX1VOSVQgOiAgb2Zmc2V0VG9wLAot
ICAgICAgICAgICAgICAgIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBvZmZzZXRUb3AgOiBa
RVJPX0xBWU9VVF9VTklUKTsKKyAgICAgICAgICAgIGNvbnN0IExheW91dFBvaW50IGxvZ2ljYWxP
ZmZzZXRGcm9tVG9wKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBMYXlvdXRVbml0KDApIDog
IG9mZnNldFRvcCwKKyAgICAgICAgICAgICAgICBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8g
b2Zmc2V0VG9wIDogTGF5b3V0VW5pdCgwKSk7CiAKICAgICAgICAgICAgIGJvdW5kaW5nQm94Lm1v
dmVCeShsb2dpY2FsT2Zmc2V0RnJvbVRvcCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0NCwxMyAr
MTQ0NCwxMyBAQCBib29sIFJlbmRlck9iamVjdDo6cmVwYWludEFmdGVyTGF5b3V0SWZOCiAgICAg
UmVuZGVyU3R5bGUqIG91dGxpbmVTdHlsZSA9IG91dGxpbmVTdHlsZUZvclJlcGFpbnQoKTsKICAg
ICBMYXlvdXRVbml0IG91dGxpbmVXaWR0aCA9IG91dGxpbmVTdHlsZS0+b3V0bGluZVNpemUoKTsK
ICAgICBMYXlvdXRCb3hFeHRlbnQgaW5zZXRTaGFkb3dFeHRlbnQgPSBzdHlsZSgpLT5nZXRCb3hT
aGFkb3dJbnNldEV4dGVudCgpOwotICAgIExheW91dFVuaXQgd2lkdGggPSBhYnNvbHV0ZVZhbHVl
KG5ld091dGxpbmVCb3gud2lkdGgoKSAtIG9sZE91dGxpbmVCb3gud2lkdGgoKSk7CisgICAgTGF5
b3V0VW5pdCB3aWR0aCA9IChuZXdPdXRsaW5lQm94LndpZHRoKCkgLSBvbGRPdXRsaW5lQm94Lndp
ZHRoKCkpLmFicygpOwogICAgIGlmICh3aWR0aCkgewogICAgICAgICBMYXlvdXRVbml0IHNoYWRv
d0xlZnQ7CiAgICAgICAgIExheW91dFVuaXQgc2hhZG93UmlnaHQ7CiAgICAgICAgIHN0eWxlKCkt
PmdldEJveFNoYWRvd0hvcml6b250YWxFeHRlbnQoc2hhZG93TGVmdCwgc2hhZG93UmlnaHQpOwog
ICAgICAgICBpbnQgYm9yZGVyUmlnaHQgPSBpc0JveCgpID8gdG9SZW5kZXJCb3godGhpcyktPmJv
cmRlclJpZ2h0KCkgOiAwOwotICAgICAgICBMYXlvdXRVbml0IGJveFdpZHRoID0gaXNCb3goKSA/
IHRvUmVuZGVyQm94KHRoaXMpLT53aWR0aCgpIDogWkVST19MQVlPVVRfVU5JVDsKKyAgICAgICAg
TGF5b3V0VW5pdCBib3hXaWR0aCA9IGlzQm94KCkgPyB0b1JlbmRlckJveCh0aGlzKS0+d2lkdGgo
KSA6IExheW91dFVuaXQoMCk7CiAgICAgICAgIExheW91dFVuaXQgbWluSW5zZXRSaWdodFNoYWRv
d0V4dGVudCA9IG1pbjxMYXlvdXRVbml0PigtaW5zZXRTaGFkb3dFeHRlbnQucmlnaHQoKSwgbWlu
PExheW91dFVuaXQ+KG5ld0JvdW5kcy53aWR0aCgpLCBvbGRCb3VuZHMud2lkdGgoKSkpOwogICAg
ICAgICBMYXlvdXRVbml0IGJvcmRlcldpZHRoID0gbWF4PExheW91dFVuaXQ+KGJvcmRlclJpZ2h0
LCBtYXg8TGF5b3V0VW5pdD4odmFsdWVGb3JMZW5ndGgoc3R5bGUoKS0+Ym9yZGVyVG9wUmlnaHRS
YWRpdXMoKS53aWR0aCgpLCBib3hXaWR0aCwgdiksIHZhbHVlRm9yTGVuZ3RoKHN0eWxlKCktPmJv
cmRlckJvdHRvbVJpZ2h0UmFkaXVzKCkud2lkdGgoKSwgYm94V2lkdGgsIHYpKSk7CiAgICAgICAg
IExheW91dFVuaXQgZGVjb3JhdGlvbnNXaWR0aCA9IG1heDxMYXlvdXRVbml0Pigtb3V0bGluZVN0
eWxlLT5vdXRsaW5lT2Zmc2V0KCksIGJvcmRlcldpZHRoICsgbWluSW5zZXRSaWdodFNoYWRvd0V4
dGVudCkgKyBtYXg8TGF5b3V0VW5pdD4ob3V0bGluZVdpZHRoLCBzaGFkb3dSaWdodCk7CkBAIC0x
NDY0LDEzICsxNDY0LDEzIEBAIGJvb2wgUmVuZGVyT2JqZWN0OjpyZXBhaW50QWZ0ZXJMYXlvdXRJ
Zk4KICAgICAgICAgICAgIHJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBw
aXhlbFNuYXBwZWRJbnRSZWN0KHJpZ2h0UmVjdCkpOwogICAgICAgICB9CiAgICAgfQotICAgIExh
eW91dFVuaXQgaGVpZ2h0ID0gYWJzb2x1dGVWYWx1ZShuZXdPdXRsaW5lQm94LmhlaWdodCgpIC0g
b2xkT3V0bGluZUJveC5oZWlnaHQoKSk7CisgICAgTGF5b3V0VW5pdCBoZWlnaHQgPSAobmV3T3V0
bGluZUJveC5oZWlnaHQoKSAtIG9sZE91dGxpbmVCb3guaGVpZ2h0KCkpLmFicygpOwogICAgIGlm
IChoZWlnaHQpIHsKICAgICAgICAgTGF5b3V0VW5pdCBzaGFkb3dUb3A7CiAgICAgICAgIExheW91
dFVuaXQgc2hhZG93Qm90dG9tOwogICAgICAgICBzdHlsZSgpLT5nZXRCb3hTaGFkb3dWZXJ0aWNh
bEV4dGVudChzaGFkb3dUb3AsIHNoYWRvd0JvdHRvbSk7CiAgICAgICAgIGludCBib3JkZXJCb3R0
b20gPSBpc0JveCgpID8gdG9SZW5kZXJCb3godGhpcyktPmJvcmRlckJvdHRvbSgpIDogMDsKLSAg
ICAgICAgTGF5b3V0VW5pdCBib3hIZWlnaHQgPSBpc0JveCgpID8gdG9SZW5kZXJCb3godGhpcykt
PmhlaWdodCgpIDogWkVST19MQVlPVVRfVU5JVDsKKyAgICAgICAgTGF5b3V0VW5pdCBib3hIZWln
aHQgPSBpc0JveCgpID8gdG9SZW5kZXJCb3godGhpcyktPmhlaWdodCgpIDogTGF5b3V0VW5pdCgw
KTsKICAgICAgICAgTGF5b3V0VW5pdCBtaW5JbnNldEJvdHRvbVNoYWRvd0V4dGVudCA9IG1pbjxM
YXlvdXRVbml0PigtaW5zZXRTaGFkb3dFeHRlbnQuYm90dG9tKCksIG1pbjxMYXlvdXRVbml0Pihu
ZXdCb3VuZHMuaGVpZ2h0KCksIG9sZEJvdW5kcy5oZWlnaHQoKSkpOwogICAgICAgICBMYXlvdXRV
bml0IGJvcmRlckhlaWdodCA9IG1heDxMYXlvdXRVbml0Pihib3JkZXJCb3R0b20sIG1heDxMYXlv
dXRVbml0Pih2YWx1ZUZvckxlbmd0aChzdHlsZSgpLT5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCku
aGVpZ2h0KCksIGJveEhlaWdodCwgdiksIHZhbHVlRm9yTGVuZ3RoKHN0eWxlKCktPmJvcmRlckJv
dHRvbVJpZ2h0UmFkaXVzKCkuaGVpZ2h0KCksIGJveEhlaWdodCwgdikpKTsKICAgICAgICAgTGF5
b3V0VW5pdCBkZWNvcmF0aW9uc0hlaWdodCA9IG1heDxMYXlvdXRVbml0Pigtb3V0bGluZVN0eWxl
LT5vdXRsaW5lT2Zmc2V0KCksIGJvcmRlckhlaWdodCArIG1pbkluc2V0Qm90dG9tU2hhZG93RXh0
ZW50KSArIG1heDxMYXlvdXRVbml0PihvdXRsaW5lV2lkdGgsIHNoYWRvd0JvdHRvbSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiAxMzM1MTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDggKzMwLDcgQEAKICNpbmNsdWRlICJEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0
aW9uLmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgotI2lu
Y2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRVbml0LmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIK
KyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiUGFpbnRQaGFzZS5oIgogI2luY2x1
ZGUgIlJlbmRlck9iamVjdENoaWxkTGlzdC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT3ZlcmZsb3cuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT3ZlcmZsb3cuaAkocmV2aXNpb24g
MTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck92ZXJmbG93LmgJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICNpZm5kZWYgUmVuZGVyT3ZlcmZsb3dfaAog
I2RlZmluZSBSZW5kZXJPdmVyZmxvd19oCiAKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2lu
Y2x1ZGUgIkxheW91dFJlY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCShyZXZpc2lvbiAxMzM1MTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzcwLDE0ICszNzAsMTQgQEAgdm9pZCBSZW5kZXJSZWdpb246OmRlbGV0ZUFsbFJlbmRl
ckJveFJlZwogTGF5b3V0VW5pdCBSZW5kZXJSZWdpb246OmxvZ2ljYWxUb3BPZkZsb3dUaHJlYWRD
b250ZW50UmVjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0KSBjb25zdAogewogICAgIGlmICghbV9p
c1ZhbGlkIHx8ICFmbG93VGhyZWFkKCkpCi0gICAgICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklU
OworICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCgwKTsKICAgICByZXR1cm4gZmxvd1RocmVhZCgp
LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gcmVjdC55KCkgOiByZWN0LngoKTsKIH0KIAog
TGF5b3V0VW5pdCBSZW5kZXJSZWdpb246OmxvZ2ljYWxCb3R0b21PZkZsb3dUaHJlYWRDb250ZW50
UmVjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0KSBjb25zdAogewogICAgIGlmICghbV9pc1ZhbGlk
IHx8ICFmbG93VGhyZWFkKCkpCi0gICAgICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOworICAg
ICAgICByZXR1cm4gTGF5b3V0VW5pdCgwKTsKICAgICByZXR1cm4gZmxvd1RocmVhZCgpLT5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpID8gcmVjdC5tYXhZKCkgOiByZWN0Lm1heFgoKTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCShyZXZp
c2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODIsNyArMzgyLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJS
ZXBsYWNlZDo6Y29tcHV0ZVJlcGxhYwogICAgICAgICAgICAgICAgIC8vIFRoaXMgc29sdmVzIGFi
b3ZlIGVxdWF0aW9uIGZvciAnd2lkdGgnICg9PSBsb2dpY2FsV2lkdGgpLgogICAgICAgICAgICAg
ICAgIExheW91dFVuaXQgbWFyZ2luU3RhcnQgPSBtaW5pbXVtVmFsdWVGb3JMZW5ndGgoc3R5bGUo
KS0+bWFyZ2luU3RhcnQoKSwgbG9naWNhbFdpZHRoKTsKICAgICAgICAgICAgICAgICBMYXlvdXRV
bml0IG1hcmdpbkVuZCA9IG1pbmltdW1WYWx1ZUZvckxlbmd0aChzdHlsZSgpLT5tYXJnaW5FbmQo
KSwgbG9naWNhbFdpZHRoKTsKLSAgICAgICAgICAgICAgICBsb2dpY2FsV2lkdGggPSBtYXgoWkVS
T19MQVlPVVRfVU5JVCwgbG9naWNhbFdpZHRoIC0gKG1hcmdpblN0YXJ0ICsgbWFyZ2luRW5kICsg
KHdpZHRoKCkgLSBjbGllbnRXaWR0aCgpKSkpOworICAgICAgICAgICAgICAgIGxvZ2ljYWxXaWR0
aCA9IG1heChMYXlvdXRVbml0KDApLCBsb2dpY2FsV2lkdGggLSAobWFyZ2luU3RhcnQgKyBtYXJn
aW5FbmQgKyAod2lkdGgoKSAtIGNsaWVudFdpZHRoKCkpKSk7CiAgICAgICAgICAgICAgICAgaWYg
KGlzUGVyY2VudGFnZUludHJpbnNpY1NpemUpCiAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxX
aWR0aCA9IGxvZ2ljYWxXaWR0aCAqIGNvbnN0cmFpbmVkU2l6ZS53aWR0aCgpIC8gMTAwOwogICAg
ICAgICAgICAgICAgIHJldHVybiBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGhSZXNwZWN0aW5n
TWluTWF4V2lkdGgobG9naWNhbFdpZHRoLCBpbmNsdWRlTWF4V2lkdGgpOwpAQCAtNDYwLDcgKzQ2
MCw3IEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6OmNvbXB1dGVQcmVmZXJyZWRMb2cKICAgICBtX21h
eFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IGNvbXB1dGVNYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgo
KSArIGJvcmRlckFuZFBhZGRpbmc7CiAKICAgICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5pc0Zp
eGVkKCkpCi0gICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWluPExheW91dFVu
aXQ+KG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoLCBzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVl
KCkgKyAoc3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1ggPyBib3JkZXJBbmRQYWRk
aW5nIDogWkVST19MQVlPVVRfVU5JVCkpOworICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxX
aWR0aCA9IG1pbjxMYXlvdXRVbml0PihtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCwgc3R5bGUo
KS0+bWF4V2lkdGgoKS52YWx1ZSgpICsgKHN0eWxlKCktPmJveFNpemluZygpID09IENPTlRFTlRf
Qk9YID8gYm9yZGVyQW5kUGFkZGluZyA6IExheW91dFVuaXQoMCkpKTsKIAogICAgIGlmIChoYXNS
ZWxhdGl2ZURpbWVuc2lvbnMoKSkKICAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgg
PSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCShyZXZp
c2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMjEsNyArMzIxLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJs
ZTo6Y29udmVydFN0eWxlTG9naQogICAgIGlmIChpc0NTU1RhYmxlICYmIHN0eWxlTG9naWNhbFdp
ZHRoLmlzRml4ZWQoKSAmJiBzdHlsZUxvZ2ljYWxXaWR0aC5pc1Bvc2l0aXZlKCkpIHsKICAgICAg
ICAgcmVjYWxjQm9yZGVyc0luUm93RGlyZWN0aW9uKCk7CiAgICAgICAgIGlmIChzdHlsZSgpLT5i
b3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCkKLSAgICAgICAgICAgIGJvcmRlcnMgPSBib3JkZXJT
dGFydCgpICsgYm9yZGVyRW5kKCkgKyAoY29sbGFwc2VCb3JkZXJzKCkgPyBaRVJPX0xBWU9VVF9V
TklUIDogcGFkZGluZ1N0YXJ0KCkgKyBwYWRkaW5nRW5kKCkpOworICAgICAgICAgICAgYm9yZGVy
cyA9IGJvcmRlclN0YXJ0KCkgKyBib3JkZXJFbmQoKSArIChjb2xsYXBzZUJvcmRlcnMoKSA/IExh
eW91dFVuaXQoMCkgOiBwYWRkaW5nU3RhcnQoKSArIHBhZGRpbmdFbmQoKSk7CiAgICAgfQogICAg
IHJldHVybiBtaW5pbXVtVmFsdWVGb3JMZW5ndGgoc3R5bGVMb2dpY2FsV2lkdGgsIGF2YWlsYWJs
ZVdpZHRoLCB2aWV3KCkpICsgYm9yZGVyczsKIH0KQEAgLTQzNCw4ICs0MzQsOCBAQCB2b2lkIFJl
bmRlclRhYmxlOjpsYXlvdXQoKQogICAgICAgICB9CiAgICAgfQogCi0gICAgTGF5b3V0VW5pdCBi
b3JkZXJBbmRQYWRkaW5nQmVmb3JlID0gYm9yZGVyQmVmb3JlKCkgKyAoY29sbGFwc2luZyA/IFpF
Uk9fTEFZT1VUX1VOSVQgOiBwYWRkaW5nQmVmb3JlKCkpOwotICAgIExheW91dFVuaXQgYm9yZGVy
QW5kUGFkZGluZ0FmdGVyID0gYm9yZGVyQWZ0ZXIoKSArIChjb2xsYXBzaW5nID8gWkVST19MQVlP
VVRfVU5JVCA6IHBhZGRpbmdBZnRlcigpKTsKKyAgICBMYXlvdXRVbml0IGJvcmRlckFuZFBhZGRp
bmdCZWZvcmUgPSBib3JkZXJCZWZvcmUoKSArIChjb2xsYXBzaW5nID8gTGF5b3V0VW5pdCgwKSA6
IHBhZGRpbmdCZWZvcmUoKSk7CisgICAgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nQWZ0ZXIg
PSBib3JkZXJBZnRlcigpICsgKGNvbGxhcHNpbmcgPyBMYXlvdXRVbml0KDApIDogcGFkZGluZ0Fm
dGVyKCkpOwogCiAgICAgc2V0TG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0KCkgKyBib3JkZXJB
bmRQYWRkaW5nQmVmb3JlKTsKIApAQCAtNDQ2LDcgKzQ0Niw3IEBAIHZvaWQgUmVuZGVyVGFibGU6
OmxheW91dCgpCiAgICAgTGF5b3V0VW5pdCBjb21wdXRlZExvZ2ljYWxIZWlnaHQgPSAwOwogICAg
IGlmIChsb2dpY2FsSGVpZ2h0TGVuZ3RoLmlzRml4ZWQoKSkgewogICAgICAgICAvLyBIVE1MIHRh
YmxlcyBzaXplIGFzIHRob3VnaCBDU1MgaGVpZ2h0IGluY2x1ZGVzIGJvcmRlci9wYWRkaW5nLCBD
U1MgdGFibGVzIGRvIG5vdC4KLSAgICAgICAgTGF5b3V0VW5pdCBib3JkZXJzID0gWkVST19MQVlP
VVRfVU5JVDsKKyAgICAgICAgTGF5b3V0VW5pdCBib3JkZXJzID0gTGF5b3V0VW5pdCgwKTsKICAg
ICAgICAgLy8gRklYTUU6IFdlIGNhbm5vdCBhcHBseSBib3gtc2l6aW5nOiBjb250ZW50LWJveCBv
biA8dGFibGU+IHdoaWNoIG90aGVyIGJyb3dzZXJzIGFsbG93LgogICAgICAgICBpZiAoKG5vZGUo
KSAmJiBub2RlKCktPmhhc1RhZ05hbWUodGFibGVUYWcpKSB8fCBzdHlsZSgpLT5ib3hTaXppbmco
KSA9PSBCT1JERVJfQk9YKQogICAgICAgICAgICAgYm9yZGVycyA9IGJvcmRlckFuZFBhZGRpbmdC
ZWZvcmUgKyBib3JkZXJBbmRQYWRkaW5nQWZ0ZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGUuaAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5MSwxNCArMTkxLDEzIEBA
IHB1YmxpYzoKICAgICAgICAgaWYgKHVuc2lnbmVkIGVmZmVjdGl2ZUNvbHVtbkNvdW50ID0gbnVt
RWZmQ29scygpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PExheW91dFVuaXQ+KGVm
ZmVjdGl2ZUNvbHVtbkNvdW50ICsgMSkgKiBoQm9yZGVyU3BhY2luZygpOwogCi0gICAgICAgIHJl
dHVybiBaRVJPX0xBWU9VVF9VTklUOworICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCgwKTsKICAg
ICB9CiAKICAgICBMYXlvdXRVbml0IGJvcmRlcnNQYWRkaW5nQW5kU3BhY2luZ0luUm93RGlyZWN0
aW9uKCkgY29uc3QKICAgICB7CiAgICAgICAgIC8vICdib3JkZXItc3BhY2luZycgb25seSBhcHBs
aWVzIHRvIHNlcGFyYXRlIGJvcmRlcnMgKHNlZSAxNy42LjEgVGhlIHNlcGFyYXRlZCBib3JkZXJz
IG1vZGVsKS4KLSAgICAgICAgcmV0dXJuIGJvcmRlclN0YXJ0KCkgKyBib3JkZXJFbmQoKSArCi0g
ICAgICAgICAgICAgICAoY29sbGFwc2VCb3JkZXJzKCkgPyBaRVJPX0xBWU9VVF9VTklUIDogKHBh
ZGRpbmdTdGFydCgpICsgcGFkZGluZ0VuZCgpICsgYm9yZGVyU3BhY2luZ0luUm93RGlyZWN0aW9u
KCkpKTsKKyAgICAgICAgcmV0dXJuIGJvcmRlclN0YXJ0KCkgKyBib3JkZXJFbmQoKSArIChjb2xs
YXBzZUJvcmRlcnMoKSA/IExheW91dFVuaXQoMCkgOiAocGFkZGluZ1N0YXJ0KCkgKyBwYWRkaW5n
RW5kKCkgKyBib3JkZXJTcGFjaW5nSW5Sb3dEaXJlY3Rpb24oKSkpOwogICAgIH0KIAogICAgIC8v
IFJldHVybiB0aGUgZmlyc3QgY29sdW1uIG9yIGNvbHVtbi1ncm91cC4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYx
NSw4ICsxNjE1LDggQEAgTGF5b3V0UmVjdCBSZW5kZXJUZXh0OjpsaW5lc1Zpc3VhbE92ZXJmbAog
ICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCiAgICAgLy8gUmV0dXJuIHRoZSB3aWR0aCBv
ZiB0aGUgbWluaW1hbCBsZWZ0IHNpZGUgYW5kIHRoZSBtYXhpbWFsIHJpZ2h0IHNpZGUuCi0gICAg
TGF5b3V0VW5pdCBsb2dpY2FsTGVmdFNpZGUgPSBNQVhfTEFZT1VUX1VOSVQ7Ci0gICAgTGF5b3V0
VW5pdCBsb2dpY2FsUmlnaHRTaWRlID0gTUlOX0xBWU9VVF9VTklUOworICAgIExheW91dFVuaXQg
bG9naWNhbExlZnRTaWRlID0gTGF5b3V0VW5pdDo6bWF4KCk7CisgICAgTGF5b3V0VW5pdCBsb2dp
Y2FsUmlnaHRTaWRlID0gTGF5b3V0VW5pdDo6bWluKCk7CiAgICAgZm9yIChJbmxpbmVUZXh0Qm94
KiBjdXJyID0gZmlyc3RUZXh0Qm94KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0VGV4dEJveCgp
KSB7CiAgICAgICAgIGxvZ2ljYWxMZWZ0U2lkZSA9IG1pbihsb2dpY2FsTGVmdFNpZGUsIGN1cnIt
PmxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3coKSk7CiAgICAgICAgIGxvZ2ljYWxSaWdodFNpZGUg
PSBtYXgobG9naWNhbFJpZ2h0U2lkZSwgY3Vyci0+bG9naWNhbFJpZ2h0VmlzdWFsT3ZlcmZsb3co
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUNv
bW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lQ2hyb21pdW1Db21tb24uY3BwCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDggKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJU
aGVtZUNocm9taXVtQ29tbW9uLmgiCiAKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0VW5pdC5o
IgogI2luY2x1ZGUgIklucHV0VHlwZU5hbWVzLmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUNocm9taXVtQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Db21tb24uaAkocmV2aXNpb24gMTMzNTE3KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Db21tb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2lmbmRlZiBSZW5kZXJUaGVtZUNocm9t
aXVtQ29tbW9uX2gKICNkZWZpbmUgUmVuZGVyVGhlbWVDaHJvbWl1bUNvbW1vbl9oCiAKLSNpbmNs
dWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNpb24g
MTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGMKICAgICByZXR1cm4gdHMgPDwgIigiIDw8IHAueCgpIDw8ICIsIiA8
PCBwLnkoKSA8PCAiKSI7CiB9CiAKLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcCkKK1RleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IExheW91dFBvaW50JiBwKQogewogICAgIC8vIEZJWE1F
OiBUaGVzZSBzaG91bGQgYmUgcHJpbnRlZCBhcyBmbG9hdHMuIEtlZXBpbmcgdGhlbSBpbnRzIGZv
ciBjb25zaXN0ZW5jeSB3aXRoIHBlcnZpb3VzIHRlc3QgZXhwZWN0YXRpb25zLgogICAgIHJldHVy
biB0cyA8PCAiKCIgPDwgcC54KCkudG9JbnQoKSA8PCAiLCIgPDwgcC55KCkudG9JbnQoKSA8PCAi
KSI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmgJ
KHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVl
QXNUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgRWxlbWVudDsKLWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRQb2ludDsKK2Ns
YXNzIExheW91dFBvaW50OwogY2xhc3MgRmxvYXRQb2ludDsKIGNsYXNzIEZsb2F0U2l6ZTsKIGNs
YXNzIEZyYW1lOwpAQCAtNzAsNyArNzAsNyBAQCBzdGF0aWMgdm9pZCB3cml0ZVJlbmRlck9iamVj
dChUZXh0U3RyZWFtCiAKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0
IEludFBvaW50Jik7CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBJ
bnRSZWN0Jik7Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQmKTsKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYs
IGNvbnN0IExheW91dFBvaW50Jik7CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
LCBjb25zdCBGbG9hdFBvaW50Jik7CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
LCBjb25zdCBGbG9hdFNpemUmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Vmlldy5oCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsOCArMTI3LDggQEAgcHVibGljOgogICAg
ICAgICBpZiAobV9sYXlvdXRTdGF0ZSkgewogICAgICAgICAgICAgbV9sYXlvdXRTdGF0ZS0+bV9s
YXlvdXREZWx0YSArPSBkZWx0YTsKICNpZiAhQVNTRVJUX0RJU0FCTEVEICYmIEVOQUJMRShTQVRV
UkFURURfTEFZT1VUX0FSSVRITUVUSUMpCi0gICAgICAgICAgICBtX2xheW91dFN0YXRlLT5tX2xh
eW91dERlbHRhWFNhdHVyYXRlZCB8PSBtX2xheW91dFN0YXRlLT5tX2xheW91dERlbHRhLndpZHRo
KCkgPT0gRnJhY3Rpb25hbExheW91dFVuaXQ6Om1heCgpIHx8IG1fbGF5b3V0U3RhdGUtPm1fbGF5
b3V0RGVsdGEud2lkdGgoKSA9PSBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWluKCk7Ci0gICAgICAg
ICAgICBtX2xheW91dFN0YXRlLT5tX2xheW91dERlbHRhWVNhdHVyYXRlZCB8PSBtX2xheW91dFN0
YXRlLT5tX2xheW91dERlbHRhLmhlaWdodCgpID09IEZyYWN0aW9uYWxMYXlvdXRVbml0OjptYXgo
KSB8fCBtX2xheW91dFN0YXRlLT5tX2xheW91dERlbHRhLmhlaWdodCgpID09IEZyYWN0aW9uYWxM
YXlvdXRVbml0OjptaW4oKTsKKyAgICAgICAgICAgIG1fbGF5b3V0U3RhdGUtPm1fbGF5b3V0RGVs
dGFYU2F0dXJhdGVkIHw9IG1fbGF5b3V0U3RhdGUtPm1fbGF5b3V0RGVsdGEud2lkdGgoKSA9PSBM
YXlvdXRVbml0OjptYXgoKSB8fCBtX2xheW91dFN0YXRlLT5tX2xheW91dERlbHRhLndpZHRoKCkg
PT0gTGF5b3V0VW5pdDo6bWluKCk7CisgICAgICAgICAgICBtX2xheW91dFN0YXRlLT5tX2xheW91
dERlbHRhWVNhdHVyYXRlZCB8PSBtX2xheW91dFN0YXRlLT5tX2xheW91dERlbHRhLmhlaWdodCgp
ID09IExheW91dFVuaXQ6Om1heCgpIHx8IG1fbGF5b3V0U3RhdGUtPm1fbGF5b3V0RGVsdGEuaGVp
Z2h0KCkgPT0gTGF5b3V0VW5pdDo6bWluKCk7CiAjZW5kaWYKICAgICAgICAgfQogICAgIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9OaW5lUGllY2VJbWFnZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9OaW5lUGllY2VJbWFnZS5o
CShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvTmlu
ZVBpZWNlSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2lmbmRlZiBO
aW5lUGllY2VJbWFnZV9oCiAjZGVmaW5lIE5pbmVQaWVjZUltYWdlX2gKIAotI2luY2x1ZGUgIkxh
eW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgogI2luY2x1ZGUgIkxlbmd0aEJv
eC5oIgogI2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSAiRm9udEJhc2VsaW5lLmgiCiAjaW5jbHVkZSAiRm9u
dERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgotI2luY2x1ZGUgIkxh
eW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dEJveEV4dGVudC5oIgog
I2luY2x1ZGUgIkxlbmd0aC5oIgogI2luY2x1ZGUgIkxlbmd0aEJveC5oIgogI2luY2x1ZGUgIkxl
bmd0aEZ1bmN0aW9ucy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1No
YWRvd0RhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9TaGFkb3dEYXRhLmNwcAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2hhZG93RGF0YS5oIgogCi0jaW5j
bHVkZSAiTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5o
IgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvU2hhZG93RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9TaGFkb3dEYXRhLmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TaGFkb3dEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcg
KzI3LDcgQEAKIAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0j
aW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlU2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2VT
ZXQuaAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1N0eWxlQ2FjaGVkSW1hZ2VTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAog
CiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2VDbGllbnQuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZUhhbmRsZS5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0U2l6
ZS5oIgogI2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZS5oCShyZXZpc2lv
biAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiQ1NTVmFsdWUuaCIK
ICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJMYXlv
dXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFNpemUuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJT
dXBwb3J0LmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyU3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAj
ZGVmaW5lIFNWR1JlbmRlclN1cHBvcnRfaAogCiAjaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJM
YXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJQYWludElu
Zm8uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDEzMzUxOCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTItMTEtMDUgIEVtaWwgQSBFa2x1
bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlbW92ZSBMYXlvdXRUeXBlcyBhYnN0
cmFjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTMwNTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZW1vdmUgTGF5b3V0VHlwZXMgYWJzdHJhY3Rpb24gYW5kIHJlbmFtZSBGcmFjdGlvbmFsTGF5b3V0
KiB0bworICAgICAgICBMYXlvdXQqIG5vdyB0aGF0IGFsbCBwbGF0Zm9ybXMgdXNlIHRoZSBGcmFj
dGlvbmFsTGF5b3V0IHZlcnNpb24KKyAgICAgICAgKGFsYmVpdCB3aXRoIGRpZmZlcmVudCBmcmFj
dGlvbnMpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gY2hhbmdlIGluIGZ1bmN0aW9uYWxp
dHkuCisKKyAgICAgICAgKiBzcmMvTGlua0hpZ2hsaWdodC5jcHA6CisKIDIwMTItMTEtMDUgIFNp
bW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGxheWVy
IGJvcmRlcnMgdG8gY2xlYW5pbmcgYXBwZWFyIGFuZCBkaXNhcHBlYXIgb24gc3dpdGNoaW5nCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9MaW5rSGlnaGxpZ2h0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9MaW5rSGlnaGxpZ2h0LmNwcAkocmV2
aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTGlua0hpZ2hsaWdo
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJDb2xvci5o
IgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAi
TGF5b3V0VHlwZXMuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiTm9uQ29tcG9zaXRl
ZENvbnRlbnRIb3N0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172408</attachid>
            <date>2012-11-05 14:27:59 -0800</date>
            <delta_ts>2012-11-05 16:18:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93050-20121105142613.patch</filename>
            <type>text/plain</type>
            <size>394502</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzUxOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MyBAQAorMjAxMi0xMS0wNSAgRW1pbCBB
IEVrbHVuZCAgPGVhZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmVtb3ZlIExheW91dFR5cGVz
IGFic3RyYWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05MzA1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFJlbW92ZSBMYXlvdXRUeXBlcyBhYnN0cmFjdGlvbiBhbmQgcmVuYW1lIEZyYWN0aW9uYWxM
YXlvdXQqIHRvCisgICAgICAgIExheW91dCogbm93IHRoYXQgYWxsIHBsYXRmb3JtcyB1c2UgdGhl
IEZyYWN0aW9uYWxMYXlvdXQgdmVyc2lvbgorICAgICAgICAoYWxiZWl0IHdpdGggZGlmZmVyZW50
IGZyYWN0aW9ucykuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBjaGFuZ2UgaW4gZnVuY3Rp
b25hbGl0eS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2Vm
aWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJDb3JlLmV4
cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3Bw
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaDoKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiBjc3Mv
TGVuZ3RoRnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKiBjc3MvTGVuZ3RoRnVuY3Rpb25zLmg6Cisg
ICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogZG9tL0RvY3VtZW50TWFya2VyQ29u
dHJvbGxlci5oOgorICAgICAgICAqIGRvbS9FbGVtZW50UmFyZURhdGEuaDoKKyAgICAgICAgKiBk
b20vTW91c2VSZWxhdGVkRXZlbnQuaDoKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAq
IGRvbS9Ub3VjaC5oOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAg
ICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaDoKKyAgICAgICAgKiBlZGl0aW5nL1JlbmRl
cmVkUG9zaXRpb24uaDoKKyAgICAgICAgKiBodG1sL0hUTUxBcmVhRWxlbWVudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvclRpbWVsaW5lQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvVGltZWxpbmVSZWNv
cmRGYWN0b3J5LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5
Lmg6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmg6CisgICAgICAgICogcGFn
ZS9Gb2N1c0NvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorICAgICAg
ICAqIHBhZ2UvUGFnZS5oOgorICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwOgor
ICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9G
cmFjdGlvbmFsTGF5b3V0VW5pdC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL0xheW91
dFVuaXQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRnJhY3Rpb25hbExh
eW91dFVuaXQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9MZW5ndGguaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9Qb3B1cE1lbnVDbGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hbmltYXRpb24vQW5p
bWF0aW9uVXRpbGl0aWVzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2lu
dC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRSZWN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRT
aXplLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94RXh0
ZW50Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExh
eW91dFBvaW50Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rp
b25hbExheW91dFJlY3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ZyYWN0aW9uYWxMYXlvdXRSZWN0Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRnJhY3Rpb25hbExheW91dFNpemUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbnRSZWN0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50LmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dEJveEV4
dGVudC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50Lmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxM
YXlvdXRCb3hFeHRlbnQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRQb2lu
dC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlv
bmFsTGF5b3V0UG9pbnQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rp
b25hbExheW91dFJlY3QuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJl
Y3QuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rp
b25hbExheW91dFJlY3QuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRTaXpl
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9u
YWxMYXlvdXRTaXplLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlck9wZXJh
dGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVy
UGFyYW1ldGVyTGlzdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyT3BlcmF0aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJPcGVyYXRpb25zLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9WYWxp
ZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFBvaW50UXQuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxMYXlvdXRSZWN0UXQu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxM
YXlvdXRTaXplUXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0
L0xheW91dFBvaW50UXQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9GcmFjdGlvbmFsTGF5b3V0UG9pbnRRdC5jcHAuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvTGF5b3V0UmVjdFF0LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvTGF5b3V0U2l6ZVF0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFNpemVRdC5jcHAuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25zLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25N
YXRyaXguY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNm
b3JtYXRpb25NYXRyaXguaDoKKyAgICAgICAgKiByZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0Lmg6
CisgICAgICAgICogcmVuZGVyaW5nL0NvbHVtbkluZm8uaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmg6CisgICAgICAgICogcmVuZGVyaW5nL0ZpbHRlckVm
ZmVjdFJlbmRlcmVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvR2FwUmVjdHMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0
VGVzdFJlc3VsdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0aW5nVHJhbnNmb3JtU3Rh
dGUuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgICogcmVuZGVy
aW5nL0xheW91dFJlcGFpbnRlci5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL0xheW91dFJlcGFp
bnRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRTdGF0ZS5oOgorICAgICAgICAqIHJl
bmRlcmluZy9MYXlvdXRUeXBlcy5oOgorICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRUeXBlc0lu
bGluZU1ldGhvZHMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUGFpbnRJbmZvLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
QmxvY2suaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNw
cDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJG
bGV4aWJsZUJveC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3Bw
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJHZW9tZXRyeU1hcC5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNlLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
cklubGluZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmg6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlz
dE1hcmtlci5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVs
dGlDb2x1bW5TZXQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJl
YWQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT3Zl
cmZsb3cuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUYWJsZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
aGVtZUNocm9taXVtQ29tbW9uLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVD
aHJvbWl1bUNvbW1vbi5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJWaWV3Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVj
ZUltYWdlLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuY3BwOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdHlsZS9TaGFkb3dEYXRhLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2Fj
aGVkSW1hZ2VTZXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZS5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oOgorCiAyMDEyLTExLTA1
ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBs
YXllciBib3JkZXJzIHRvIGNsZWFuaW5nIGFwcGVhciBhbmQgZGlzYXBwZWFyIG9uIHN3aXRjaGlu
ZwpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xODc1LDggKzE4NzUsOCBA
QCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbWlseS5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udEZlYXR1cmVTZXR0aW5ncy5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9G
cmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0
aW9uYWxMYXlvdXRSZWN0LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0xheW91dEJveEV4dGVu
dC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0LmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dlbmVy
YXRvckdlbmVyYXRlZEltYWdlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRy
ZWVOb2RlLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAx
MzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNv
cHkpCkBAIC00Mjc3LDcgKzQyNzcsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9GaWxlU3lzdGVtLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Zsb2F0Q29udmVyc2lv
bi5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GcmFjdGlvbmFsTGF5b3V0VW5pdC5oIFwK
KwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYXlvdXRVbml0LmggXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0dhbWVwYWRzLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hhc2hUb29s
cy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9IaXN0b2dyYW1TdXBwb3J0LmNwcCBcCkBA
IC00NDQxLDEyICs0NDQxLDEyIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNtb290aGluZ01vZGUuaCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFRyYWl0c01hc2suaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udFdpZHRoVmFyaWFudC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmNwcCBcCi0JU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oIFwK
LQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UG9pbnQu
aCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJl
Y3QuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5
b3V0UmVjdC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFs
TGF5b3V0U2l6ZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRC
b3hFeHRlbnQuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRC
b3hFeHRlbnQuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UG9p
bnQuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UmVjdC5jcHAg
XAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJlY3QuaCBcCisJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0U2l6ZS5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmggXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRvci5oIFwKQEAgLTQ5ODksOCArNDk4OSw2IEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmggXAotCVNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9MYXlvdXRUeXBlcy5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0
VHlwZXNJbmxpbmVNZXRob2RzLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRS
ZXBhaW50ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFJlcGFpbnRlci5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9PdmVybGFwVGVzdFJlcXVlc3RDbGllbnQu
aCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTk2OCw4ICs5NjgsOCBAQCBTT1VSQ0VTICs9
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNw
cCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5jcHAg
XAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcCBcCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50LmNwcCBcCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvTGF5b3V0UmVjdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZElt
YWdlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2Uu
Y3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAgXApAQCAt
Mjc4MSw5ICsyNzgxLDkgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
RmxvYXRQb2ludFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRmxvYXRSZWN0UXQu
Y3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9GbG9hdFNpemVRdC5jcHAgXAotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxMYXlvdXRQb2ludFF0LmNwcCBcCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFJlY3RRdC5jcHAgXAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxMYXlvdXRTaXplUXQuY3BwIFwKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9MYXlvdXRQb2ludFF0LmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvTGF5b3V0UmVjdFF0LmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTGF5b3V0U2l6
ZVF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhZGllbnRRdC5jcHAgXAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcCBcCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvSWNvblF0LmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2
aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTE0Nyw3ICsxNDcsNiBAQCBfX1pON1dlYkNvcmUxMU1lbW9yeUNhY2hlMTNzZXRD
YXBhY2l0aWVzCiBfX1pON1dlYkNvcmUxMU1lbW9yeUNhY2hlMTRldmljdFJlc291cmNlc0V2CiBf
X1pON1dlYkNvcmUxMU1lbW9yeUNhY2hlMTlnZXRPcmlnaW5zV2l0aENhY2hlRVJOM1dURjdIYXNo
U2V0SU5TMV82UmVmUHRySU5TXzE0U2VjdXJpdHlPcmlnaW5FRUVOU18xOFNlY3VyaXR5T3JpZ2lu
SGFzaEVOUzFfMTBIYXNoVHJhaXRzSVM1X0VFRUUKIF9fWk43V2ViQ29yZTExTWVtb3J5Q2FjaGUy
NXJlbW92ZVJlc291cmNlc1dpdGhPcmlnaW5FUE5TXzE0U2VjdXJpdHlPcmlnaW5FCi1fX1pON1dl
YkNvcmUxMVJlbmRlckxheWVyMTlzY3JvbGxSZWN0VG9WaXNpYmxlRVJLTlNfMjBGcmFjdGlvbmFs
TGF5b3V0UmVjdEVSS05TXzE1U2Nyb2xsQWxpZ25tZW50RVM2XwogX19aTjdXZWJDb3JlMTFVUkxX
aXRoRGF0YUVQNk5TRGF0YVA1TlNVUkwKIF9fWk43V2ViQ29yZTExbWVtb3J5Q2FjaGVFdgogX19a
TjdXZWJDb3JlMTFzdGFydE9mV29yZEVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRU5TXzlFV29yZFNp
ZGVFCkBAIC0xNTksNyArMTU4LDcgQEAgX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxNHNjcm9s
bE92ZXJmbAogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxNWhhbmRsZUFjY2Vzc0tleUVSS05T
XzIxUGxhdGZvcm1LZXlib2FyZEV2ZW50RQogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxNmhh
bmRsZVdoZWVsRXZlbnRFUktOU18xOFBsYXRmb3JtV2hlZWxFdmVudEUKIF9fWk43V2ViQ29yZTEy
RXZlbnRIYW5kbGVyMTdzY3JvbGxSZWN1cnNpdmVseUVOU18xNVNjcm9sbERpcmVjdGlvbkVOU18x
N1Njcm9sbEdyYW51bGFyaXR5RVBOU180Tm9kZUUKLV9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVy
MjBoaXRUZXN0UmVzdWx0QXRQb2ludEVSS05TXzIxRnJhY3Rpb25hbExheW91dFBvaW50RWJiTlNf
MTdIaXRUZXN0U2Nyb2xsYmFyc0VqUktOU18yMEZyYWN0aW9uYWxMYXlvdXRTaXplRQorX19aTjdX
ZWJDb3JlMTJFdmVudEhhbmRsZXIyMGhpdFRlc3RSZXN1bHRBdFBvaW50RVJLTlNfMTFMYXlvdXRQ
b2ludEViYk5TXzE3SGl0VGVzdFNjcm9sbGJhcnNFalJLTlNfMTBMYXlvdXRTaXplRQogX19aTjdX
ZWJDb3JlMTJFdmVudEhhbmRsZXIyMWhhbmRsZU1vdXNlUHJlc3NFdmVudEVSS05TXzE4UGxhdGZv
cm1Nb3VzZUV2ZW50RQogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyM2hhbmRsZU1vdXNlUmVs
ZWFzZUV2ZW50RVJLTlNfMThQbGF0Zm9ybU1vdXNlRXZlbnRFCiBfX1pON1dlYkNvcmUxMkV2ZW50
SGFuZGxlcjI0bG9naWNhbFNjcm9sbFJlY3Vyc2l2ZWx5RU5TXzIyU2Nyb2xsTG9naWNhbERpcmVj
dGlvbkVOU18xN1Njcm9sbEdyYW51bGFyaXR5RVBOU180Tm9kZUUKQEAgLTE4NSw4ICsxODQsNyBA
QCBfX1pON1dlYkNvcmUxMlByaW50Q29udGV4dDlzcG9vbFBhZ2VFUk5TCiBfX1pON1dlYkNvcmUx
MlByaW50Q29udGV4dDlzcG9vbFJlY3RFUk5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfN0ludFJl
Y3RFCiBfX1pON1dlYkNvcmUxMlByaW50Q29udGV4dEMxRVBOU181RnJhbWVFCiBfX1pON1dlYkNv
cmUxMlByaW50Q29udGV4dEQxRXYKLV9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVjdDE2cmVwYWlu
dFJlY3RhbmdsZUVSS05TXzIwRnJhY3Rpb25hbExheW91dFJlY3RFYgotX19aTjdXZWJDb3JlMTJS
ZW5kZXJPYmplY3QxOXNjcm9sbFJlY3RUb1Zpc2libGVFUktOU18yMEZyYWN0aW9uYWxMYXlvdXRS
ZWN0RVJLTlNfMTVTY3JvbGxBbGlnbm1lbnRFUzZfCitfX1pON1dlYkNvcmUxMlJlbmRlck9iamVj
dDE5c2Nyb2xsUmVjdFRvVmlzaWJsZUVSS05TXzEwTGF5b3V0UmVjdEVSS05TXzE1U2Nyb2xsQWxp
Z25tZW50RVM2XwogX19aTjdXZWJDb3JlMTJTaGFyZWRCdWZmZXIxMHdyYXBDRkRhdGFFUEs4X19D
RkRhdGEKIF9fWk43V2ViQ29yZTEyU2hhcmVkQnVmZmVyMTB3cmFwTlNEYXRhRVA2TlNEYXRhCiBf
X1pON1dlYkNvcmUxMlNoYXJlZEJ1ZmZlcjEyY3JlYXRlTlNEYXRhRXYKQEAgLTQ2Niw3ICs0NjQs
NiBAQCBfX1pON1dlYkNvcmUxNlZpc2libGVTZWxlY3Rpb25DMUVSS05TXzE1CiBfX1pON1dlYkNv
cmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUEtOU180Tm9kZUUKIF9fWk43V2ViQ29yZTE2Y3JlYXRlRnVs
bE1hcmt1cEVQS05TXzVSYW5nZUUKIF9fWk43V2ViQ29yZTE2ZGVsZXRlQWxsQ29va2llc0V2Ci1f
X1pON1dlYkNvcmUxNmVuY2xvc2luZ0ludFJlY3RFUktOU18yMEZyYWN0aW9uYWxMYXlvdXRSZWN0
RQogX19aTjdXZWJDb3JlMTZlbmNsb3NpbmdJbnRSZWN0RVJLTlNfOUZsb2F0UmVjdEUKIF9fWk43
V2ViQ29yZTE2aXNFbmRPZlBhcmFncmFwaEVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRU5TXzI3RWRp
dGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlRQogX19aTjdXZWJDb3JlMTZpc1VzZXJWaXNpYmxlVVJM
RVA4TlNTdHJpbmcKQEAgLTg2Miw3ICs4NTksNiBAQCBfX1pON1dlYkNvcmU3RWxlbWVudDlpbm5l
clRleHRFdgogX19aTjdXZWJDb3JlN0ludFJlY3Q1c2NhbGVFZgogX19aTjdXZWJDb3JlN0ludFJl
Y3Q1dW5pdGVFUktTMF8KIF9fWk43V2ViQ29yZTdJbnRSZWN0OWludGVyc2VjdEVSS1MwXwotX19a
TjdXZWJDb3JlN0ludFJlY3RDMUVSS05TXzIwRnJhY3Rpb25hbExheW91dFJlY3RFCiBfX1pON1dl
YkNvcmU3SW50UmVjdEMxRVJLTlNfOUZsb2F0UmVjdEUKIF9fWk43V2ViQ29yZTdJbnRTaXplQzFF
Uks2Q0dTaXplCiBfX1pON1dlYkNvcmU3UnVuTG9vcDE0cnVuRm9yRHVyYXRpb25FZApAQCAtMTAw
Miw5ICs5OTgsNyBAQCBfX1pON1dlYkNvcmU4dG9TdHJpbmdFUktOM1dURjZWZWN0b3JJTlNfCiBf
X1pON1dlYkNvcmU5RE9NV2luZG93MzBkaXNwYXRjaEFsbFBlbmRpbmdVbmxvYWRFdmVudHNFdgog
X19aTjdXZWJDb3JlOURPTVdpbmRvdzM2ZGlzcGF0Y2hBbGxQZW5kaW5nQmVmb3JlVW5sb2FkRXZl
bnRzRXYKIF9fWk43V2ViQ29yZTlGbG9hdFJlY3RDMUVSSzZDR1JlY3QKLV9fWk43V2ViQ29yZTlG
bG9hdFJlY3RDMUVSS05TXzIwRnJhY3Rpb25hbExheW91dFJlY3RFCiBfX1pON1dlYkNvcmU5Rmxv
YXRSZWN0QzFFUktOU183SW50UmVjdEUKLV9fWk43V2ViQ29yZTlGbG9hdFNpemVDMUVSS05TXzIw
RnJhY3Rpb25hbExheW91dFNpemVFCiBfX1pON1dlYkNvcmU5RmxvYXRTaXplQzFFUktOU183SW50
U2l6ZUUKIF9fWk43V2ViQ29yZTlGb250Q2FjaGUxM2ZvbnREYXRhQ291bnRFdgogX19aTjdXZWJD
b3JlOUZvbnRDYWNoZTIxaW5hY3RpdmVGb250RGF0YUNvdW50RXYKQEAgLTExODYsNiArMTE4MCw3
IEBAIF9fWk5LN1dlYkNvcmUxMVJlbmRlclN0eWxlNGZvbnRFdgogX19aTks3V2ViQ29yZTExU2Ny
aXB0VmFsdWU5Z2V0U3RyaW5nRVBOM0pTQzlFeGVjU3RhdGVFUk4zV1RGNlN0cmluZ0UKIF9fWk5L
N1dlYkNvcmUxMlJlbmRlck9iamVjdDE0ZW5jbG9zaW5nTGF5ZXJFdgogX19aTks3V2ViQ29yZTEy
UmVuZGVyT2JqZWN0MTVsb2NhbFRvQWJzb2x1dGVFUktOU18xMEZsb2F0UG9pbnRFagorX19aTks3
V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTZyZXBhaW50UmVjdGFuZ2xlRVJLTlNfMTBMYXlvdXRSZWN0
RWIKIF9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVjdDIwbG9jYWxUb0NvbnRhaW5lclF1YWRFUktO
U185RmxvYXRRdWFkRVBOU18yMlJlbmRlckxheWVyTW9kZWxPYmplY3RFalBiCiBfX1pOSzdXZWJD
b3JlMTJSZW5kZXJPYmplY3QyM2Fic29sdXRlQm91bmRpbmdCb3hSZWN0RWIKIF9fWk5LN1dlYkNv
cmUxMlJlbmRlck9iamVjdDM5cGl4ZWxTbmFwcGVkQWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0
RXYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzc0LDggKzM3NCw4IEBACiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNtb290aGluZ01vZGUuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRm9udFRyYWl0c01hc2suaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udFdpZHRoVmFyaWFudC5oJywKLSAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5oJywKLSAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0U2l6ZS5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL0xheW91dFNpemUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJh
dG9yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgnLApAQCAtNTU4LDggKzU1OCw2
IEBACiAgICAgICAgICAgICAncmVuZGVyaW5nL0lubGluZUZsb3dCb3guaCcsCiAgICAgICAgICAg
ICAncmVuZGVyaW5nL0lubGluZVRleHRCb3guaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL0xh
eW91dFN0YXRlLmgnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9MYXlvdXRUeXBlcy5oJywKLSAg
ICAgICAgICAgICdyZW5kZXJpbmcvTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgnLAogICAgICAg
ICAgICAgJ3JlbmRlcmluZy9MYXlvdXRSZXBhaW50ZXIuaCcsCiAgICAgICAgICAgICAncmVuZGVy
aW5nL092ZXJsYXBUZXN0UmVxdWVzdENsaWVudC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcv
UGFnaW5hdGlvbi5oJywKQEAgLTQ3ODYsNyArNDc4NCw3IEBACiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRQbGF0Zm9ybURhdGEuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
RnJhY3Rpb25hbExheW91dEJveEV4dGVudC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL0xheW91dEJveEV4dGVudC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL0dlbmVyYXRvckdlbmVyYXRlZEltYWdlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9HZW5lcmF0ZWRJbWFnZS5oJywKQEAgLTU5MDQsNyArNTkwMiw3IEBACiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UmVjdC5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9u
YWxMYXlvdXRSZWN0LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0
UmVjdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25N
YXRyaXguY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0Fm
ZmluZVRyYW5zZm9ybS5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yODM5MSw3ICsy
ODM5MSw3IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsYXRmb3JtXEZyYWN0aW9uYWxMYXlvdXRVbml0LmgiCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxwbGF0Zm9ybVxMYXlvdXRVbml0LmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKQEAg
LTI5NDc4LDI3ICsyOTQ3OCwyNyBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCi0J
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRnJhY3Rpb25hbExheW91dEJv
eEV4dGVudC5oIgorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXExheW91
dEJveEV4dGVudC5oIgogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCi0JCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5j
cHAiCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcTGF5b3V0Qm94RXh0
ZW50LmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZyYWN0aW9uYWxMYXlvdXRQb2ludC5oIgorCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXExheW91dFBvaW50LmgiCiAJCQkJCT4K
IAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxn
cmFwaGljc1xGcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAiCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcTGF5b3V0UmVjdC5jcHAiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJ
CQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGcmFjdGlv
bmFsTGF5b3V0UmVjdC5oIgorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XExheW91dFJlY3QuaCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQotCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZyYWN0aW9uYWxMYXlvdXRTaXplLmgiCisJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcTGF5b3V0U2l6ZS5oIgogCQkJ
CQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMzM1MTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTMwNCw2ICszMDQsMTMgQEAKIAkJMTQxMTVCNzIwOUY4NENENjAwQ0E0RkMxIC8q
IEpTTm9kZUZpbHRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNDExNUI3MDA5Rjg0Q0Q2MDBDQTRGQzEgLyogSlNOb2RlRmlsdGVyLmNwcCAqLzsg
fTsKIAkJMTQxMTVCNzMwOUY4NENENjAwQ0E0RkMxIC8qIEpTTm9kZUZpbHRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxMTVCNzEwOUY4NENENjAw
Q0E0RkMxIC8qIEpTTm9kZUZpbHRlci5oICovOyB9OwogCQkxNDE5RDJDNTBDRUE2RjYxMDBGRjUw
N0EgLyogVHJlZVNoYXJlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTQxOUQyQzQwQ0VBNkY2MTAwRkY1MDdBIC8qIFRyZWVTaGFyZWQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNDFEQzA0ODE2NDgz
NDhGMDAzNzFFNUEgLyogTGF5b3V0VW5pdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTQxREMwNDcxNjQ4MzQ4RjAwMzcxRTVBIC8qIExheW91dFVuaXQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNDFE
QzA0RjE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0Qm94RXh0ZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MURDMDQ5MTY0ODM0QjkwMDM3MUU1
QSAvKiBMYXlvdXRCb3hFeHRlbnQuY3BwICovOyB9OworCQkxNDFEQzA1MDE2NDgzNEI5MDAzNzFF
NUEgLyogTGF5b3V0Qm94RXh0ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDFEQzA0QTE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0Qm94RXh0ZW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTQx
REMwNTExNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dFBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDFEQzA0QjE2NDgzNEI5MDAzNzFFNUEgLyog
TGF5b3V0UG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkxNDFEQzA1MjE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0UmVjdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDFEQzA0QzE2NDgzNEI5
MDAzNzFFNUEgLyogTGF5b3V0UmVjdC5jcHAgKi87IH07CisJCTE0MURDMDUzMTY0ODM0QjkwMDM3
MUU1QSAvKiBMYXlvdXRSZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNDFEQzA0RDE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0UmVjdC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0MURDMDU0MTY0
ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRTaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNDFEQzA0RTE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0U2l6
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0
MjAxMUI2MEEwMDMxMzMwMDgzMDNGOSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQyMDExQjQwQTAwMzEz
MzAwODMwM0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi87IH07CiAJCTE0MjAxMUI3
MEEwMDMxMzMwMDgzMDNGOSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MjAxMUI1MEEwMDMxMzMwMDgzMDNG
OSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDJCOTdDOTEzMTM4OTQzMDA4QkVGNEIgLyogVGV4dENv
bnRyb2xJbm5lckVsZW1lbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0MkI5N0M3MTMxMzg5NDMwMDhCRUY0QiAvKiBUZXh0Q29udHJvbElubmVy
RWxlbWVudHMuY3BwICovOyB9OwpAQCAtMzEzLDEwICszMjAsNiBAQAogCQkxNDQ3NkFBODE1REM0
QkIxMDAzMDVEQjIgLyogV3JpdGluZ01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0NDc2QUE3MTVEQzRCQjEwMDMwNURCMiAvKiBXcml0aW5nTW9k
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0
NDlFMjRDMTA3RDRBODQwMEI1NzkzRiAvKiBKU0NhbGxiYWNrRGF0YS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0OUUyNEExMDdENEE4NDAwQjU3OTNG
IC8qIEpTQ2FsbGJhY2tEYXRhLmggKi87IH07CiAJCTE0NDlFMjg3MTA3RDREQjQwMEI1NzkzRiAv
KiBKU0NhbGxiYWNrRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNDQ5RTI4NjEwN0Q0REI0MDBCNTc5M0YgLyogSlNDYWxsYmFja0RhdGEuY3Bw
ICovOyB9OwotCQkxNDRGQ0U1MjE0RUM3OUJDMDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFVu
aXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NEZD
RTUxMTRFQzc5QkMwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0VW5pdC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTE0NEZDRTVEMTRFQzc5RTcw
MDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0U2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0RkNFNTgxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0
aW9uYWxMYXlvdXRTaXplLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJMTQ0RkNGRTAxNEVGMjUwOTAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRS
ZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
NEZDRkRFMTRFRjI1MDkwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAgKi87IH07
Ci0JCTE0NEZDRkUxMTRFRjI1MDkwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0RkNGREYxNEVG
MjUwOTAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ2NEUwNkMxMzVFQzEwNjAwRkRCMDBB
IC8qIEpTTWVkaWFMaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE0NjRFMDZCMTM1RUMxMDYwMEZEQjAwQSAvKiBKU01lZGlhTGlzdEN1
c3RvbS5jcHAgKi87IH07CiAJCTE0NkNDMTE1MTU2OTg4RTQwMDEwOUUzNyAvKiBMZW5ndGhCb3gu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2Q0Mx
MTMxNTY5ODhCRDAwMTA5RTM3IC8qIExlbmd0aEJveC5jcHAgKi87IH07CiAJCTE0NzdFNzc2MEJG
NDEzNEEwMDE1Mjg3MiAvKiBQYWdlQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3N0U3NzQwQkY0MTM0QTAwMTUyODcyIC8qIFBhZ2VDYWNo
ZS5jcHAgKi87IH07CkBAIC0zMjksOCArMzMyLDYgQEAKIAkJMTQ3OUZBRjIxMDlBRTM3NTAwREVE
NjU1IC8qIFJlbmRlclJ1YnlSdW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0NzlGQUVBMTA5QUUzNzUwMERFRDY1NSAvKiBSZW5kZXJSdWJ5UnVuLmgg
Ki87IH07CiAJCTE0NzlGQUYzMTA5QUUzNzUwMERFRDY1NSAvKiBSZW5kZXJSdWJ5VGV4dC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDc5RkFFQjEw
OUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieVRleHQuY3BwICovOyB9OwogCQkxNDc5RkFGNDEw
OUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieVRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NzlGQUVDMTA5QUUzNzUwMERFRDY1NSAvKiBSZW5k
ZXJSdWJ5VGV4dC5oICovOyB9OwotCQkxNDgyRTBDNjE1NkMzNkRFMDA5NjUwNjUgLyogRnJhY3Rp
b25hbExheW91dEJveEV4dGVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDgyRTBDNDE1NkMzNkRFMDA5NjUwNjUgLyogRnJhY3Rpb25hbExheW91
dEJveEV4dGVudC5jcHAgKi87IH07Ci0JCTE0ODJFMEM3MTU2QzM2REUwMDk2NTA2NSAvKiBGcmFj
dGlvbmFsTGF5b3V0Qm94RXh0ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDgyRTBDNTE1NkMzNkRFMDA5NjUwNjUgLyogRnJhY3Rpb25hbExheW91
dEJveEV4dGVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTE0OEFGREE1MEFGNTgzNjAwMDhDQzcwMCAvKiBFeGNlcHRpb25IYW5kbGVycy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4QUZEQTMwQUY1
ODM2MDAwOENDNzAwIC8qIEV4Y2VwdGlvbkhhbmRsZXJzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ4QUZEQTYwQUY1ODM2MDAwOENDNzAwIC8q
IEV4Y2VwdGlvbkhhbmRsZXJzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTQ4QUZEQTQwQUY1ODM2MDAwOENDNzAwIC8qIEV4Y2VwdGlvbkhhbmRsZXJz
Lm1tICovOyB9OwogCQkxNDk0N0ZGRDEyRjgwQ0QyMDBBMEY2MzEgLyogRG9jdW1lbnRPcmRlcmVk
TWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
OTQ3RkZCMTJGODBDRDIwMEEwRjYzMSAvKiBEb2N1bWVudE9yZGVyZWRNYXAuY3BwICovOyB9OwpA
QCAtOTIzLDcgKzkyNCw2IEBACiAJCTMxOUU2OUI1MTMyOTlCQkQwMDRBQzkxQSAvKiBXZWJLaXRB
bmltYXRpb25MaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxOUU2OUFGMTMyOTlCQkQwMDRBQzkxQSAvKiBXZWJLaXRBbmltYXRpb25MaXN0LmNw
cCAqLzsgfTsKIAkJMzE5RTY5QjYxMzI5OUJCRDAwNEFDOTFBIC8qIFdlYktpdEFuaW1hdGlvbkxp
c3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxOUU2
OUIwMTMyOTlCQkQwMDRBQzkxQSAvKiBXZWJLaXRBbmltYXRpb25MaXN0LmggKi87IH07CiAJCTMx
OUZCRDVGMTVEMkY0NjQwMDk2NDBBNiAvKiBDYWNoZWRJbWFnZUNsaWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE5RkJENUQxNUQyRjQ0NDAwOTY0
MEE2IC8qIENhY2hlZEltYWdlQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJMzFCODAxQkIxNUVDNThDNzAwQ0U2NDNEIC8qIExheW91dFR5
cGVzSW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODQ4OTRDQTgxNUVDNDg5NzAwQTQwNDgxIC8qIExheW91dFR5cGVzSW5saW5lTWV0
aG9kcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTMxQzBGRjIxMEU0Q0VCNkUwMDdENkZFNSAvKiBXZWJLaXRBbmltYXRpb25FdmVudC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUMwRkYxQjBFNENF
QjZFMDA3RDZGRTUgLyogV2ViS2l0QW5pbWF0aW9uRXZlbnQuY3BwICovOyB9OwogCQkzMUMwRkYy
MjBFNENFQjZFMDA3RDZGRTUgLyogV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQzBGRjFDMEU0Q0VCNkUwMDdENkZF
NSAvKiBXZWJLaXRBbmltYXRpb25FdmVudC5oICovOyB9OwogCQkzMUMwRkYyNDBFNENFQjZFMDA3
RDZGRTUgLyogV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQzBGRjFFMEU0Q0VCNkUwMDdENkZFNSAvKiBXZWJL
aXRUcmFuc2l0aW9uRXZlbnQuY3BwICovOyB9OwpAQCAtNTI4Myw4ICs1MjgzLDYgQEAKIAkJQjhE
QkRCNEMxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ4MTMwQjBGOEEwMEY1
Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmggKi87IH07CiAJCUI4REJEQjREMTMwQjBGOEEw
MEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ5MTMwQjBGOEEwMEY1Q0RCMSAv
KiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCAqLzsgfTsKIAkJQjhEQkRCNEUxMzBCMEY4
QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjRBMTMwQjBGOEEwMEY1Q0RCMSAv
KiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmggKi87IH07Ci0JCUJBQjFDMDZBMTRGQzM2Nzkw
MDQyMzNGQyAvKiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NEZDRTU0MTRFQzc5RTcwMDBEMTdBMyAvKiBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQlCQUNGMjkwMTEzQjJBMEQ1MDA3ODFGOTAgLyogTGF5b3V0VHlwZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJBQ0YyOTAwMTNC
MkEwRDUwMDc4MUY5MCAvKiBMYXlvdXRUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMDBGMDA0MEUwQTE4NTUwMEZEMDRFMyAvKiBET01G
aWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAw
RUZGRTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5oICovOyB9OwogCQlCQzAwRjAwNTBFMEEx
ODU1MDBGRDA0RTMgLyogRE9NRmlsZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDMDBFRkZGMEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLm1tICov
OyB9OwogCQlCQzAwRjAwNjBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZUludGVybmFsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAwRjAwMDBFMEEx
ODU1MDBGRDA0RTMgLyogRE9NRmlsZUludGVybmFsLmggKi87IH07CkBAIC03MzgzLDYgKzczODEs
MTMgQEAKIAkJMTQxOUQyQzQwQ0VBNkY2MTAwRkY1MDdBIC8qIFRyZWVTaGFyZWQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJlZVNoYXJlZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDFCOTRFNTA5RUM0MjIzMDAwRTk0MTMgLyogTW91c2VFdmVudC5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE1vdXNlRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDFCOTRFRTA5RUM0MjVBMDAwRTk0MTMgLyogVUlFdmVudC5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IFVJRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxNDFEQzA0NzE2NDgzNDhGMDAzNzFFNUEgLyogTGF5b3V0VW5pdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRVbml0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTE0MURDMDQ5MTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRCb3hFeHRlbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0Qm94RXh0ZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQxREMwNEExNjQ4MzRCOTAwMzcx
RTVBIC8qIExheW91dEJveEV4dGVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBMYXlvdXRCb3hFeHRlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQxREMw
NEIxNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dFBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IExheW91dFBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTE0MURDMDRDMTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRSZWN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dFJlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxNDFEQzA0RDE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0UmVjdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRSZWN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTE0MURDMDRFMTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRTaXpl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dFNpemUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQyMDExQUUwQTAwMzExNzAwODMwM0Y5IC8qIENTU1N0
eWxlRGVjbGFyYXRpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBDU1NTdHlsZURlY2xh
cmF0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQyMDExQjQwQTAwMzEz
MzAwODMwM0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNDU1NTdHlsZURlY2xhcmF0aW9uLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQyMDExQjUwQTAwMzEzMzAwODMwM0Y5IC8qIEpTQ1NTU3R5
bGVEZWNsYXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDU1NT
dHlsZURlY2xhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MzkzLDEx
ICs3Mzk4LDYgQEAKIAkJMTQ0NzZBQTcxNURDNEJCMTAwMzA1REIyIC8qIFdyaXRpbmdNb2RlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRpbmdNb2RlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NDlFMjRBMTA3RDRBODQwMEI1NzkzRiAvKiBKU0NhbGxi
YWNrRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbGxiYWNrRGF0
YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDQ5RTI4NjEwN0Q0REI0MDBCNTc5
M0YgLyogSlNDYWxsYmFja0RhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNDYWxsYmFja0RhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkx
NDRGQ0U1MTE0RUM3OUJDMDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFVuaXQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnJhY3Rpb25hbExheW91dFVuaXQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTQ0RkNFNTQxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0
aW9uYWxMYXlvdXRQb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTQ0RkNF
NTgxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRTaXplLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYWN0aW9uYWxMYXlvdXRTaXplLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTE0NEZDRkRFMTRFRjI1MDkwMDBEMTdBMyAvKiBGcmFjdGlvbmFs
TGF5b3V0UmVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGcmFj
dGlvbmFsTGF5b3V0UmVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0NEZD
RkRGMTRFRjI1MDkwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGcmFjdGlvbmFsTGF5b3V0UmVjdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNDY0RTA2QjEzNUVDMTA2MDBGREIwMEEgLyogSlNNZWRpYUxp
c3RDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNNZWRp
YUxpc3RDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDZDQzExMzE1
Njk4OEJEMDAxMDlFMzcgLyogTGVuZ3RoQm94LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IExlbmd0aEJveC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTE0NzdFNzc0MEJGNDEzNEEwMDE1Mjg3MiAvKiBQYWdlQ2FjaGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC03NDExLDggKzc0MTEsNiBAQAogCQkxNDc5RkFFQjEwOUFFMzc1MDBERUQ2
NTUgLyogUmVuZGVyUnVieVRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmVuZGVyUnVieVRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NDc5RkFFQzEwOUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieVRleHQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyUnVieVRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTQ4MTNCRjMwOUVERjg4RTAwRjc1N0UxIC8qIElETFBhcnNlci5wbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0LnNjcmlwdC5wZXJsOyBuYW1lID0gSURMUGFyc2VyLnBtOyBwYXRoID0gc2Ny
aXB0cy9JRExQYXJzZXIucG07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0ODJFMEM0
MTU2QzM2REUwMDk2NTA2NSAvKiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxNDgyRTBDNTE1NkMzNkRFMDA5NjUw
NjUgLyogRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTE0OEFGREEzMEFGNTgzNjAwMDhDQzcwMCAvKiBFeGNlcHRpb25IYW5kbGVy
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjZXB0aW9uSGFuZGxlcnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4QUZEQTQwQUY1ODM2MDAwOENDNzAw
IC8qIEV4Y2VwdGlvbkhhbmRsZXJzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IEV4Y2VwdGlvbkhhbmRsZXJzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxNDk0N0ZGQjEyRjgwQ0QyMDBBMEY2MzEgLyogRG9jdW1lbnRPcmRlcmVkTWFwLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERvY3VtZW50T3JkZXJlZE1hcC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05Mzc4LDcgKzkzNzYsNiBAQAogCQk4
NDg1MjI4NzExOTAxNzNDMDA2RURDN0YgLyogU1ZHVktlcm5FbGVtZW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1ZLZXJuRWxlbWVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0ODUyMjg4MTE5MDE3M0MwMDZFREM3RiAvKiBTVkdWS2Vy
bkVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVktlcm5FbGVt
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0ODUyMjg5MTE5MDE3M0MwMDZF
REM3RiAvKiBTVkdWS2VybkVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNWR1ZL
ZXJuRWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg0ODk0Q0E4MTVF
QzQ4OTcwMEE0MDQ4MSAvKiBMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0OUY3Nzc1MEVGRUM2MjAwMDkwODQ5RCAvKiBTdHJva2VT
dHlsZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Ryb2tlU3R5
bGVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0QTgxRjNCMEZDN0RG
RjAwMDk1NTMwMCAvKiBTb3VyY2VBbHBoYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBTb3VyY2VBbHBoYS5jcHA7IHBhdGggPSBmaWx0ZXJzL1NvdXJjZUFscGhhLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODRBODFGM0MwRkM3REZGMDAwOTU1MzAw
IC8qIFNvdXJjZUFscGhhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNvdXJj
ZUFscGhhLmg7IHBhdGggPSBmaWx0ZXJzL1NvdXJjZUFscGhhLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMjYxMSw3ICsxMjYwOCw2IEBACiAJCUI4REJEQjQ4MTMwQjBGOEEwMEY1
Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNldFNlbGVjdGlvbkNvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQjhEQkRCNDkxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3BlbGxpbmdDb3JyZWN0
aW9uQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI4REJEQjRBMTMw
QjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkFDRjI5MDAxM0IyQTBENTAwNzgxRjkwIC8qIExheW91
dFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dFR5cGVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDBFRkZFMEUwQTE4NTUwMEZEMDRFMyAv
KiBET01GaWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUZpbGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMEVGRkYwRTBBMTg1NTAwRkQwNEUzIC8q
IERPTUZpbGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01G
aWxlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAwRjAwMDBFMEExODU1MDBG
RDA0RTMgLyogRE9NRmlsZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERPTUZpbGVJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTk5
NzAsMTIgKzE5OTY2LDEyIEBACiAJCQkJMzcyMDIxOTgxMDYyMTNDNjAwRjI1QzRCIC8qIEZvbnRT
bW9vdGhpbmdNb2RlLmggKi8sCiAJCQkJMzc4NEMzNEEwRTExQUEzNDAwN0Q4RDQ4IC8qIEZvbnRU
cmFpdHNNYXNrLmggKi8sCiAJCQkJQkNFNDQxMzUxMkY3NDkwQjAwOUI4NEI4IC8qIEZvbnRXaWR0
aFZhcmlhbnQuaCAqLywKLQkJCQkxNDgyRTBDNDE1NkMzNkRFMDA5NjUwNjUgLyogRnJhY3Rpb25h
bExheW91dEJveEV4dGVudC5jcHAgKi8sCi0JCQkJMTQ4MkUwQzUxNTZDMzZERTAwOTY1MDY1IC8q
IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuaCAqLywKLQkJCQkxNDRGQ0U1NDE0RUM3OUU3MDAw
RDE3QTMgLyogRnJhY3Rpb25hbExheW91dFBvaW50LmggKi8sCi0JCQkJMTQ0RkNGREUxNEVGMjUw
OTAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcCAqLywKLQkJCQkxNDRGQ0ZERjE0
RUYyNTA5MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFJlY3QuaCAqLywKLQkJCQkxNDRGQ0U1
ODE0RUM3OUU3MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFNpemUuaCAqLywKKwkJCQkxNDFE
QzA0OTE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0Qm94RXh0ZW50LmNwcCAqLywKKwkJCQkxNDFE
QzA0QTE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0Qm94RXh0ZW50LmggKi8sCisJCQkJMTQxREMw
NEIxNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dFBvaW50LmggKi8sCisJCQkJMTQxREMwNEMxNjQ4
MzRCOTAwMzcxRTVBIC8qIExheW91dFJlY3QuY3BwICovLAorCQkJCTE0MURDMDREMTY0ODM0Qjkw
MDM3MUU1QSAvKiBMYXlvdXRSZWN0LmggKi8sCisJCQkJMTQxREMwNEUxNjQ4MzRCOTAwMzcxRTVB
IC8qIExheW91dFNpemUuaCAqLywKIAkJCQk0RkIzOTBBQzE1RUY2MUYzMDA3QUQ1MUYgLyogR2Vu
ZXJhdGVkSW1hZ2UuY3BwICovLAogCQkJCUJDMjNGMERBMERBRkY0QTQwMDlGREM5MSAvKiBHZW5l
cmF0ZWRJbWFnZS5oICovLAogCQkJCUJDRTA0Qzg5MERBRkY3QTAwMDdBMEY0MSAvKiBHZW5lcmF0
b3IuaCAqLywKQEAgLTIwODcxLDcgKzIwODY3LDcgQEAKIAkJCQlDNTdGRURFMDEyMTJFRTlDMDA5
N0JFNjUgLyogRmlsZVN5c3RlbS5jcHAgKi8sCiAJCQkJNTE0QjNGNzIwQzcyMjA0NzAwMDUzMERG
IC8qIEZpbGVTeXN0ZW0uaCAqLywKIAkJCQlCQzA3M0JBOTBDMzk5QjFGMDAwRjU5NzkgLyogRmxv
YXRDb252ZXJzaW9uLmggKi8sCi0JCQkJMTQ0RkNFNTExNEVDNzlCQzAwMEQxN0EzIC8qIEZyYWN0
aW9uYWxMYXlvdXRVbml0LmggKi8sCisJCQkJMTQxREMwNDcxNjQ4MzQ4RjAwMzcxRTVBIC8qIExh
eW91dFVuaXQuaCAqLywKIAkJCQlBODc0OEJERjEyQ0JGMkRDMDAxRkJBNDEgLyogSGFzaFRvb2xz
LmggKi8sCiAJCQkJRDZGREFFRjIxNDlDMDYxOTAwMzdCMUUxIC8qIEhpc3RvZ3JhbVN1cHBvcnQu
Y3BwICovLAogCQkJCUQ2MzBFMkFCMTQ5QkYzNDQwMDVCMkY5MyAvKiBIaXN0b2dyYW1TdXBwb3J0
LmggKi8sCkBAIC0yMTQ1Myw4ICsyMTQ0OSw2IEBACiAJCQkJQTEyMEFDQTAxM0Y5OTgzNzAwRkU0
QUM3IC8qIExheW91dFJlcGFpbnRlci5oICovLAogCQkJCTJEOTA2NjA0MEJFMTQxRDQwMDk1Njk5
OCAvKiBMYXlvdXRTdGF0ZS5jcHAgKi8sCiAJCQkJMkQ5MDY2MDUwQkUxNDFENDAwOTU2OTk4IC8q
IExheW91dFN0YXRlLmggKi8sCi0JCQkJQkFDRjI5MDAxM0IyQTBENTAwNzgxRjkwIC8qIExheW91
dFR5cGVzLmggKi8sCi0JCQkJODQ4OTRDQTgxNUVDNDg5NzAwQTQwNDgxIC8qIExheW91dFR5cGVz
SW5saW5lTWV0aG9kcy5oICovLAogCQkJCTM3NzRBQkEzMEZBMjFFQjQwMEFEN0RFOSAvKiBPdmVy
bGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLywKIAkJCQk5Mzc3QUI5RjE1REVGRUVGMDAzMUZEMDQg
LyogUGFnaW5hdGlvbi5oICovLAogCQkJCTA4ODUwNjdEMTFEQTA0NUIwMDE4MkI5OCAvKiBQYWlu
dEluZm8uaCAqLywKQEAgLTIzNTkxLDExICsyMzU4NSw2IEBACiAJCQkJNjU2RDM3M0EwQURCQTVE
RTAwQTQ1NTREIC8qIEZvcm1TdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE4ODVCOTMxMUI2
RkRBNjAwMzM4M0JCIC8qIEZvcm1TdWJtaXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzVD
NDc2RDA5QUM0RDYzMDBBNkFBQjQgLyogRm91bmRhdGlvbkV4dHJhcy5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMTQ4MkUwQzcxNTZDMzZERTAwOTY1MDY1IC8qIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRl
bnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUJBQjFDMDZBMTRGQzM2NzkwMDQyMzNGQyAvKiBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTE0NEZDRkUxMTRFRjI1MDkw
MDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTQ0
RkNFNUQxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRTaXplLmggaW4gSGVhZGVy
cyAqLywKLQkJCQkxNDRGQ0U1MjE0RUM3OUJDMDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFVu
aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NTMxMjNEMTFEMDQ3MUIwMEQ0RDA3NyAvKiBGcmFn
bWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1QkYwMjJGMDk3
NDgxNjMwMEM0MzE5NiAvKiBGcmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCMDcwRDMxMzBB
NDA5QzAwQTM3NjNDIC8qIEZyYW1lQWN0aW9uU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKQEAg
LTI0NDczLDggKzI0NDYyLDExIEBACiAJCQkJQTEyNTM4RDQxM0Y5QjYwQTAwMDI0NzU0IC8qIExh
eW91dFJlcGFpbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ5MDY2MDcwQkUxNDFENDAwOTU2
OTk4IC8qIExheW91dFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlENjMwRTJBQzE0OUJGMzQ0
MDA1QjJGOTMgLyogTGF5b3V0VGVzdFN1cHBvcnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUJBQ0Yy
OTAxMTNCMkEwRDUwMDc4MUY5MCAvKiBMYXlvdXRUeXBlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MzFCODAxQkIxNUVDNThDNzAwQ0U2NDNEIC8qIExheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMTQxREMwNDgxNjQ4MzQ4RjAwMzcxRTVBIC8qIExheW91dFVuaXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTE0MURDMDUwMTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRC
b3hFeHRlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0MURDMDUxMTY0ODM0QjkwMDM3MUU1QSAv
KiBMYXlvdXRQb2ludC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTQxREMwNTMxNjQ4MzRCOTAwMzcx
RTVBIC8qIExheW91dFJlY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0MURDMDU0MTY0ODM0Qjkw
MDM3MUU1QSAvKiBMYXlvdXRTaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTJERDhGNTBEOTFF
NkFGMDAwRjg5RUUgLyogTGVnYWN5V2ViQXJjaGl2ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNF
NjVCRUIwRUFDREYxNjAwN0U0NTMzIC8qIExlbmd0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNG
RjY0OTEwRUFEMTVDMjAwQzFENkY3IC8qIExlbmd0aEJveC5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
NjgxNSw4ICsyNjgwNyw2IEBACiAJCQkJNTE0Qzc2NEYwQ0U5MjM0RTAwN0VGM0NEIC8qIEZvcm1E
YXRhU3RyZWFtTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU2RDM3M0IwQURCQTVERTAwQTQ1
NTREIC8qIEZvcm1TdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTg4NUI5NDExQjZGREE2
MDAzMzgzQkIgLyogRm9ybVN1Ym1pc3Npb24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMTQ4MkUw
QzYxNTZDMzZERTAwOTY1MDY1IC8qIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJMTQ0RkNGRTAxNEVGMjUwOTAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlv
dXRSZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1QkYwMjJFMDk3NDgxNjMwMEM0MzE5NiAv
KiBGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0IwNzBEMjEzMEE0MDlDMDBBMzc2M0Mg
LyogRnJhbWVBY3Rpb25TY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc0QTg2MjIx
NEI3QURCQjAwM0ZEQzc2IC8qIEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlci5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTI3Nzc3LDYgKzI3NzY3LDggQEAKIAkJCQk5MzUyMDg0NTA5QkQ0M0I5MDBGMjAz
OEQgLyogTGFuZ3VhZ2UubW0gaW4gU291cmNlcyAqLywKIAkJCQkyOTE3QjU2MTE0NzM0OTZDMDA1
MkM5RDAgLyogTGF5ZXJGbHVzaFNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyOTE3
QjU2NjE0NzM0OTk1MDA1MkM5RDAgLyogTGF5ZXJGbHVzaFNjaGVkdWxlck1hYy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkxNDFEQzA0RjE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0Qm94RXh0ZW50
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE0MURDMDUyMTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlv
dXRSZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExMjBBQ0E0MTNGOTk4Q0EwMEZFNEFDNyAv
KiBMYXlvdXRSZXBhaW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ5MDY2MDYwQkUxNDFE
NDAwOTU2OTk4IC8qIExheW91dFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUQ2RkRBRUYz
MTQ5QzA2MTkwMDM3QjFFNSAvKiBMYXlvdXRUZXN0U3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLywK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QuY3BwCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjM0LDcgKzIzNCw3IEBAIExheW91dFJlY3QgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6
OmJvdW4KICAgICBmb3IgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBvc2l0aW9uUHJvdmlkZXIgPSBw
YXJlbnRPYmplY3QoKTsgcG9zaXRpb25Qcm92aWRlcjsgcG9zaXRpb25Qcm92aWRlciA9IHBvc2l0
aW9uUHJvdmlkZXItPnBhcmVudE9iamVjdCgpKSB7CiAgICAgICAgIGlmIChwb3NpdGlvblByb3Zp
ZGVyLT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkgewogICAgICAgICAgICAgTGF5b3V0
UmVjdCBwYXJlbnRSZWN0ID0gcG9zaXRpb25Qcm92aWRlci0+ZWxlbWVudFJlY3QoKTsKLSAgICAg
ICAgICAgIGJvdW5kaW5nQm94LnNldFNpemUoTGF5b3V0U2l6ZShwYXJlbnRSZWN0LndpZHRoKCks
IEZyYWN0aW9uYWxMYXlvdXRVbml0KHN0ZDo6bWluKDEwLjBmLCBwYXJlbnRSZWN0LmhlaWdodCgp
LnRvRmxvYXQoKSkpKSk7CisgICAgICAgICAgICBib3VuZGluZ0JveC5zZXRTaXplKExheW91dFNp
emUocGFyZW50UmVjdC53aWR0aCgpLCBMYXlvdXRVbml0KHN0ZDo6bWluKDEwLjBmLCBwYXJlbnRS
ZWN0LmhlaWdodCgpLnRvRmxvYXQoKSkpKSk7CiAgICAgICAgICAgICBib3VuZGluZ0JveC5zZXRM
b2NhdGlvbihwYXJlbnRSZWN0LmxvY2F0aW9uKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0LmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNyArMzAsNyBAQAogI2RlZmluZSBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdF9oCiAK
ICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMu
aCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw4ICszMSw3IEBACiAjZGVmaW5lIEFjY2Vzc2liaWxpdHlPYmplY3RfaAogCiAj
aW5jbHVkZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFJlY3QuaCIK
LSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNs
dWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKICNpbmNs
dWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAkocmV2aXNpb24g
MTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNkZWZpbmUgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdF9oCiAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdC5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5o
IgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9MZW5ndGhGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9MZW5ndGhGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAxMzM1MTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvTGVuZ3RoRnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkxlbmd0aEZ1
bmN0aW9ucy5oIgogCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRV
bml0LmgiCiAjaW5jbHVkZSAiTGVuZ3RoLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogCkBA
IC01NSwyMCArNTUsMjAgQEAgTGF5b3V0VW5pdCBtaW5pbXVtVmFsdWVGb3JMZW5ndGgoY29uc3Qg
TAogICAgIGNhc2UgVmlld3BvcnRQZXJjZW50YWdlV2lkdGg6CiAgICAgICAgIGlmIChyZW5kZXJW
aWV3KQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PExheW91dFVuaXQ+KHJlbmRlclZp
ZXctPnZpZXdwb3J0U2l6ZSgpLndpZHRoKCkgKiBsZW5ndGgudmlld3BvcnRQZXJjZW50YWdlTGVu
Z3RoKCkgLyAxMDAuMGYpOwotICAgICAgICByZXR1cm4gWkVST19MQVlPVVRfVU5JVDsKKyAgICAg
ICAgcmV0dXJuIDA7CiAgICAgY2FzZSBWaWV3cG9ydFBlcmNlbnRhZ2VIZWlnaHQ6CiAgICAgICAg
IGlmIChyZW5kZXJWaWV3KQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PExheW91dFVu
aXQ+KHJlbmRlclZpZXctPnZpZXdwb3J0U2l6ZSgpLmhlaWdodCgpICogbGVuZ3RoLnZpZXdwb3J0
UGVyY2VudGFnZUxlbmd0aCgpIC8gMTAwLjBmKTsKLSAgICAgICAgcmV0dXJuIFpFUk9fTEFZT1VU
X1VOSVQ7CisgICAgICAgIHJldHVybiAwOwogICAgIGNhc2UgVmlld3BvcnRQZXJjZW50YWdlTWlu
OgogICAgICAgICBpZiAocmVuZGVyVmlldykgewogICAgICAgICAgICAgSW50U2l6ZSB2aWV3cG9y
dFNpemUgPSByZW5kZXJWaWV3LT52aWV3cG9ydFNpemUoKTsKICAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxMYXlvdXRVbml0PihzdGQ6Om1pbih2aWV3cG9ydFNpemUud2lkdGgoKSwgdmll
d3BvcnRTaXplLmhlaWdodCgpKSAqIGxlbmd0aC52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSAv
IDEwMC4wZik7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFpFUk9fTEFZT1VUX1VOSVQ7Cisg
ICAgICAgIHJldHVybiAwOwogICAgIGNhc2UgRmlsbEF2YWlsYWJsZToKICAgICBjYXNlIEF1dG86
Ci0gICAgICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOworICAgICAgICByZXR1cm4gMDsKICAg
ICBjYXNlIFJlbGF0aXZlOgogICAgIGNhc2UgSW50cmluc2ljOgogICAgIGNhc2UgTWluSW50cmlu
c2ljOgpAQCAtNzcsMTAgKzc3LDEwIEBAIExheW91dFVuaXQgbWluaW11bVZhbHVlRm9yTGVuZ3Ro
KGNvbnN0IEwKICAgICBjYXNlIEZpdENvbnRlbnQ6CiAgICAgY2FzZSBVbmRlZmluZWQ6CiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gWkVST19MQVlPVVRfVU5J
VDsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOworICAgIHJldHVybiAwOwogfQogCiBMYXlvdXRV
bml0IHZhbHVlRm9yTGVuZ3RoKGNvbnN0IExlbmd0aCYgbGVuZ3RoLCBMYXlvdXRVbml0IG1heGlt
dW1WYWx1ZSwgUmVuZGVyVmlldyogcmVuZGVyVmlldywgYm9vbCByb3VuZFBlcmNlbnRhZ2VzKQpA
QCAtMTA0LDEwICsxMDQsMTAgQEAgTGF5b3V0VW5pdCB2YWx1ZUZvckxlbmd0aChjb25zdCBMZW5n
dGgmCiAgICAgY2FzZSBGaXRDb250ZW50OgogICAgIGNhc2UgVW5kZWZpbmVkOgogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIFpFUk9fTEFZT1VUX1VOSVQ7Cisg
ICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gWkVST19MQVlPVVRfVU5JVDsKKyAgICByZXR1cm4gMDsKIH0KIAogLy8gRklYTUU6IHdo
ZW4gc3VicGl4ZWwgbGF5b3V0IGlzIHN1cHBvcnRlZCB0aGlzIGNvcHkgb2YgZmxvYXRWYWx1ZUZv
ckxlbmd0aCgpIGNhbiBiZSByZW1vdmVkLiBTZWUgYnVnIDcxMTQzLgpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0xlbmd0aEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9MZW5ndGhGdW5jdGlvbnMuaAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0xlbmd0aEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBA
CiAjaWZuZGVmIExlbmd0aEZ1bmN0aW9uc19oCiAjZGVmaW5lIExlbmd0aEZ1bmN0aW9uc19oCiAK
LSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMTMz
NTE3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJJY29uVVJMLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
Q291bnRlcnMuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMu
aCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiTXV0YXRpb25PYnNlcnZlci5o
IgogI2luY2x1ZGUgIlBhZ2VWaXNpYmlsaXR5U3RhdGUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVNj
cmVlbi5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRy
b2xsZXIuaAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
TWFya2VyQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAKICNp
bmNsdWRlICJEb2N1bWVudE1hcmtlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRl
ICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50UmFyZURhdGEuaAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnRSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1LDcgQEAg
cHVibGljOgogCiBpbmxpbmUgSW50U2l6ZSBkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygp
CiB7Ci0gICAgcmV0dXJuIEludFNpemUoTUFYX0xBWU9VVF9VTklULCBNQVhfTEFZT1VUX1VOSVQp
OworICAgIHJldHVybiBJbnRTaXplKExheW91dFVuaXQ6Om1heCgpLCBMYXlvdXRVbml0OjptYXgo
KSk7CiB9CiAKIGlubGluZSBFbGVtZW50UmFyZURhdGE6OkVsZW1lbnRSYXJlRGF0YSgpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vTW91c2VSZWxhdGVkRXZlbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vTW91c2VSZWxhdGVkRXZlbnQuaAkocmV2aXNpb24gMTMzNTE3KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL01vdXNlUmVsYXRlZEV2ZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDcgKzI0LDcgQEAKICNpZm5kZWYgTW91c2VSZWxhdGVkRXZlbnRfaAogI2RlZmluZSBN
b3VzZVJlbGF0ZWRFdmVudF9oCiAKLSNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMu
aCIKKyNpbmNsdWRlICJMYXlvdXRQb2ludC5oIgogI2luY2x1ZGUgIlVJRXZlbnRXaXRoS2V5U3Rh
dGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiAx
MzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw5ICsyNyw4IEBACiAKICNpbmNsdWRlICJFZGl0aW5nQm91bmRhcnkuaCIKICNpbmNsdWRlICJF
dmVudFRhcmdldC5oIgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRSZWN0LmgiCiAjaW5jbHVk
ZSAiS1VSTEhhc2guaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91
dFJlY3QuaCIKICNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVy
U3R5bGVDb25zdGFudHMuaCIKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9Ub3VjaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ub3VjaC5oCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVG91Y2gu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2lmIEVOQUJMRShUT1VDSF9FVkVO
VFMpCiAKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzSW5s
aW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dFBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3Bw
CShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwogCiBzdGF0aWMgaW5saW5lIExheW91dFVuaXQgTm9YUG9zRm9yVmVydGljYWxB
cnJvd05hdmlnYXRpb24oKQogewotICAgIHJldHVybiBNSU5fTEFZT1VUX1VOSVQ7CisgICAgcmV0
dXJuIExheW91dFVuaXQ6Om1pbigpOwogfQogCiBDYXJldEJhc2U6OkNhcmV0QmFzZShDYXJldFZp
c2liaWxpdHkgdmlzaWJpbGl0eSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVT
ZWxlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiAjaW5jbHVk
ZSAiRWRpdGluZ1N0eWxlLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkxheW91
dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAj
aW5jbHVkZSAiU2Nyb2xsQmVoYXZpb3IuaCIKICNpbmNsdWRlICJUaW1lci5oIgpJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9uLmgJKHJldmlzaW9uIDEzMzUxNykK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVuZGVyZWRQb3NpdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiwxMSArMzIsMTEgQEAKICNkZWZpbmUgUmVuZGVyZWRQb3NpdGlvbl9oCiAKICNp
bmNsdWRlICJJbmxpbmVCb3guaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgogI2luY2x1ZGUg
IlRleHRBZmZpbml0eS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIExheW91dFVu
aXQ7CiBjbGFzcyBQb3NpdGlvbjsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFZpc2libGVQ
b3NpdGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuaAkocmV2aXNp
b24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2RlZmluZSBIVE1MQXJlYUVsZW1lbnRfaAog
CiAjaW5jbHVkZSAiSFRNTEFuY2hvckVsZW1lbnQuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5o
IgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvck92ZXJsYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yT3ZlcmxheS5oCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3
IEBACiAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgotI2luY2x1
ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogCiAjaW5jbHVkZSA8
d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmgJKHJldmlz
aW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGlu
ZUFnZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlICJJbnNw
ZWN0b3JCYXNlQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgogI2luY2x1
ZGUgIkluc3BlY3RvclZhbHVlcy5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVk
ZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtSW5zdHJ1bWVudGF0aW9uLmgiCiAj
aW5jbHVkZSAiU2NyaXB0R0NFdmVudC5oIgogI2luY2x1ZGUgIlNjcmlwdEdDRXZlbnRMaXN0ZW5l
ci5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9y
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVj
b3JkRmFjdG9yeS5jcHAJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICsz
Nyw3IEBACiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIK
ICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXNJbmxpbmVNZXRob2Rz
LmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5o
IgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKICNpbmNsdWRlICJTY3JpcHRDYWxsU3Rh
Y2suaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3Rv
cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNv
cmRGYWN0b3J5LmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBA
QAogI2lmbmRlZiBUaW1lbGluZVJlY29yZEZhY3RvcnlfaAogI2RlZmluZSBUaW1lbGluZVJlY29y
ZEZhY3RvcnlfaAogCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRS
ZWN0LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgJKHJldmlzaW9u
IDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2Uu
aCIKICNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2lu
Y2x1ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dFNpemUu
aCIKICNpbmNsdWRlICJTVkdJbWFnZUNhY2hlLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmgJKHJldmlzaW9uIDEzMzUx
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgRm9jdXNDb250cm9sbGVyX2gKIAogI2luY2x1
ZGUgIkZvY3VzRGlyZWN0aW9uLmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRl
ICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJBZGp1
c3RWaWV3U2l6ZU9yTm90LmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2lu
Y2x1ZGUgIlBhZ2luYXRpb24uaCIKICNpbmNsdWRlICJQYWludFBoYXNlLmgiCiAjaW5jbHVkZSAi
U2Nyb2xsVmlldy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBA
CiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgogI2luY2x1ZGUgIkZpbmRPcHRpb25zLmgi
CiAjaW5jbHVkZSAiTGF5b3V0TWlsZXN0b25lcy5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgi
CisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlBhZ2VWaXNpYmlsaXR5U3RhdGUu
aCIKICNpbmNsdWRlICJQYWdpbmF0aW9uLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCShyZXZpc2lv
biAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjQ1LDE5ICs2NDUsMTkgQEAgdm9pZCBkaXN0YW5jZURhdGFGb3JO
b2RlKEZvY3VzRGlyZWN0aW9uCiAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKICAgICBjYXNlIEZv
Y3VzRGlyZWN0aW9uTGVmdDoKICAgICAgICAgc2FtZUF4aXNEaXN0YW5jZSA9IGV4aXRQb2ludC54
KCkgLSBlbnRyeVBvaW50LngoKTsKLSAgICAgICAgb3RoZXJBeGlzRGlzdGFuY2UgPSBhYnNvbHV0
ZVZhbHVlKGV4aXRQb2ludC55KCkgLSBlbnRyeVBvaW50LnkoKSk7CisgICAgICAgIG90aGVyQXhp
c0Rpc3RhbmNlID0gKGV4aXRQb2ludC55KCkgLSBlbnRyeVBvaW50LnkoKSkuYWJzKCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKICAgICAgICAgc2FtZUF4aXNE
aXN0YW5jZSA9IGV4aXRQb2ludC55KCkgLSBlbnRyeVBvaW50LnkoKTsKLSAgICAgICAgb3RoZXJB
eGlzRGlzdGFuY2UgPSBhYnNvbHV0ZVZhbHVlKGV4aXRQb2ludC54KCkgLSBlbnRyeVBvaW50Lngo
KSk7CisgICAgICAgIG90aGVyQXhpc0Rpc3RhbmNlID0gKGV4aXRQb2ludC54KCkgLSBlbnRyeVBv
aW50LngoKSkuYWJzKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25S
aWdodDoKICAgICAgICAgc2FtZUF4aXNEaXN0YW5jZSA9IGVudHJ5UG9pbnQueCgpIC0gZXhpdFBv
aW50LngoKTsKLSAgICAgICAgb3RoZXJBeGlzRGlzdGFuY2UgPSBhYnNvbHV0ZVZhbHVlKGVudHJ5
UG9pbnQueSgpIC0gZXhpdFBvaW50LnkoKSk7CisgICAgICAgIG90aGVyQXhpc0Rpc3RhbmNlID0g
KGVudHJ5UG9pbnQueSgpIC0gZXhpdFBvaW50LnkoKSkuYWJzKCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgogICAgICAgICBzYW1lQXhpc0Rpc3RhbmNlID0g
ZW50cnlQb2ludC55KCkgLSBleGl0UG9pbnQueSgpOwotICAgICAgICBvdGhlckF4aXNEaXN0YW5j
ZSA9IGFic29sdXRlVmFsdWUoZW50cnlQb2ludC54KCkgLSBleGl0UG9pbnQueCgpKTsKKyAgICAg
ICAgb3RoZXJBeGlzRGlzdGFuY2UgPSAoZW50cnlQb2ludC54KCkgLSBleGl0UG9pbnQueCgpKS5h
YnMoKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5oCShy
ZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkZvY3VzRGly
ZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCi0jaW5jbHVkZSAi
TGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiTm9kZS5o
IgogCiAjaW5jbHVkZSA8bGltaXRzPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRnJh
Y3Rpb25hbExheW91dFVuaXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9GcmFjdGlvbmFsTGF5b3V0VW5pdC5oCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9GcmFjdGlvbmFsTGF5b3V0VW5pdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDgyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgRnJhY3Rpb25hbExheW91dFVuaXRfaAotI2RlZmluZSBGcmFj
dGlvbmFsTGF5b3V0VW5pdF9oCi0KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxsaW1p
dHM+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1NhdHVyYXRlZEFyaXRobWV0aWMuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWZkZWYgTkRFQlVHCi0KLSNkZWZpbmUgUkVQT1JUX09W
RVJGTE9XKGRvZXNPdmVyZmxvdykgKCh2b2lkKTApCi0KLSNlbHNlCi0KLSNkZWZpbmUgUkVQT1JU
X09WRVJGTE9XKGRvZXNPdmVyZmxvdykgZG8gXAotICAgIGlmICghKGRvZXNPdmVyZmxvdykpIHsg
XAotICAgICAgICBXVEZSZXBvcnRFcnJvcihfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlf
RlVOQ1RJT04sICIhKCVzKSIsICNkb2VzT3ZlcmZsb3cpOyBcCi0gICAgfSBcCi13aGlsZSAoMCkK
LQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotc3RhdGljIGNvbnN0IGlu
dCBrRml4ZWRQb2ludERlbm9taW5hdG9yID0gNjQ7Ci0jZWxzZQotc3RhdGljIGNvbnN0IGludCBr
Rml4ZWRQb2ludERlbm9taW5hdG9yID0gMTsKLSNlbmRpZgotY29uc3QgaW50IGludE1heEZvckxh
eW91dFVuaXQgPSBJTlRfTUFYIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKLWNvbnN0IGludCBp
bnRNaW5Gb3JMYXlvdXRVbml0ID0gSU5UX01JTiAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0K
LWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRVbml0IHsKLXB1YmxpYzoKLSAgICAvLyBGSVhNRTogSWRl
YWxseSB3ZSB3b3VsZCBoYXZlIHNpemVfdCB2ZXJzaW9ucyBvZiB0aGUgY29uc3RydWN0b3IgYW5k
IG9wZXJhdG9ycy4KLSAgICAvLyBIb3dldmVyIGR1ZSB0byBjb21waWxlciBhbmQgcGxhdGZvcm0g
ZGlmZmVyZW5jZXMgYWRkaW5nIHRob3NlIGFyZSBub24tdHJpdmlhbC4KLSAgICAvLyBTZWUgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgzODQ4IGZvciBkZXRhaWxzLgot
ICAgIAotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KCkgOiBtX3ZhbHVlKDApIHsgfQotI2lmIEVO
QUJMRShTVUJQSVhFTF9MQVlPVVQpCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQoaW50IHZhbHVl
KSB7IHNldFZhbHVlKHZhbHVlKTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KHVuc2lnbmVk
IHNob3J0IHZhbHVlKSB7IHNldFZhbHVlKHZhbHVlKTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRV
bml0KHVuc2lnbmVkIGludCB2YWx1ZSkgeyBzZXRWYWx1ZSh2YWx1ZSk7IH0KLSAgICBGcmFjdGlv
bmFsTGF5b3V0VW5pdChmbG9hdCB2YWx1ZSkKLSAgICB7Ci0jaWYgRU5BQkxFKFNBVFVSQVRFRF9M
QVlPVVRfQVJJVEhNRVRJQykKLSAgICAgICAgbV92YWx1ZSA9IGNsYW1wVG88ZmxvYXQ+KHZhbHVl
ICoga0ZpeGVkUG9pbnREZW5vbWluYXRvciwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KElOVF9NSU4pLCBz
dGF0aWNfY2FzdDxmbG9hdD4oSU5UX01BWCkpOwotI2Vsc2UKLSAgICAgICAgUkVQT1JUX09WRVJG
TE9XKGlzSW5Cb3VuZHModmFsdWUpKTsKLSAgICAgICAgbV92YWx1ZSA9IHZhbHVlICoga0ZpeGVk
UG9pbnREZW5vbWluYXRvcjsKLSNlbmRpZgotICAgIH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dChkb3VibGUgdmFsdWUpCi0gICAgewotI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRI
TUVUSUMpCi0gICAgICAgIG1fdmFsdWUgPSBjbGFtcFRvPGRvdWJsZT4odmFsdWUgKiBrRml4ZWRQ
b2ludERlbm9taW5hdG9yLCBzdGF0aWNfY2FzdDxkb3VibGU+KElOVF9NSU4pLCBzdGF0aWNfY2Fz
dDxkb3VibGU+KElOVF9NQVgpKTsKLSNlbHNlCi0gICAgICAgIFJFUE9SVF9PVkVSRkxPVyhpc0lu
Qm91bmRzKHZhbHVlKSk7Ci0gICAgICAgIG1fdmFsdWUgPSB2YWx1ZSAqIGtGaXhlZFBvaW50RGVu
b21pbmF0b3I7Ci0jZW5kaWYKLSAgICB9Ci0jZWxzZQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
KGludCB2YWx1ZSkgeyBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOyBtX3ZhbHVl
ID0gdmFsdWU7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCh1bnNpZ25lZCBzaG9ydCB2YWx1
ZSkgeyBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFsdWU7
IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCh1bnNpZ25lZCBpbnQgdmFsdWUpIHsgUkVQT1JU
X09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsgbV92YWx1ZSA9IHZhbHVlOyB9Ci0gICAgRnJh
Y3Rpb25hbExheW91dFVuaXQoZmxvYXQgdmFsdWUpIHsgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3Vu
ZHModmFsdWUpKTsgbV92YWx1ZSA9IHZhbHVlOyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQo
ZG91YmxlIHZhbHVlKSB7IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7IG1fdmFs
dWUgPSB2YWx1ZTsgfQotI2VuZGlmCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQoY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIHZhbHVlKSB7IG1fdmFsdWUgPSB2YWx1ZS5yYXdWYWx1ZSgpOyB9
Ci0KLSAgICBzdGF0aWMgRnJhY3Rpb25hbExheW91dFVuaXQgZnJvbUZsb2F0Q2VpbChmbG9hdCB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHY7Ci0jaWYgRU5BQkxF
KFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKLSAgICAgICAgdi5tX3ZhbHVlID0gY2xhbXBU
b0ludGVnZXIoY2VpbGYodmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yKSk7Ci0jZWxzZQot
ICAgICAgICBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOwotICAgICAgICB2Lm1f
dmFsdWUgPSBjZWlsZih2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3IpOwotI2VuZGlmCi0g
ICAgICAgIHJldHVybiB2OwotICAgIH0KLQotICAgIHN0YXRpYyBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBmcm9tRmxvYXRGbG9vcihmbG9hdCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxM
YXlvdXRVbml0IHY7Ci0jaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKLSAg
ICAgICAgdi5tX3ZhbHVlID0gY2xhbXBUb0ludGVnZXIoZmxvb3JmKHZhbHVlICoga0ZpeGVkUG9p
bnREZW5vbWluYXRvcikpOwotI2Vsc2UKLSAgICAgICAgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3Vu
ZHModmFsdWUpKTsKLSAgICAgICAgdi5tX3ZhbHVlID0gZmxvb3JmKHZhbHVlICoga0ZpeGVkUG9p
bnREZW5vbWluYXRvcik7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgfQotCi0gICAg
c3RhdGljIEZyYWN0aW9uYWxMYXlvdXRVbml0IGZyb21GbG9hdFJvdW5kKGZsb2F0IHZhbHVlKQot
ICAgIHsKLSNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQotICAgICAgICBp
ZiAodmFsdWUgPj0gMCkKLSAgICAgICAgICAgIHJldHVybiBjbGFtcCh2YWx1ZSArIGVwc2lsb24o
KSAvIDIuMGYpOwotICAgICAgICByZXR1cm4gY2xhbXAodmFsdWUgLSBlcHNpbG9uKCkgLyAyLjBm
KTsKLSNlbHNlCi0gICAgICAgIGlmICh2YWx1ZSA+PSAwKSB7Ci0gICAgICAgICAgICBSRVBPUlRf
T1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSArIGVwc2lsb24oKSAvIDIuMGYpKTsKLSAgICAgICAg
ICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdCh2YWx1ZSArIGVwc2lsb24oKSAvIDIuMGYp
OwotICAgICAgICB9Ci0gICAgICAgIFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlIC0g
ZXBzaWxvbigpIC8gMi4wZikpOwotICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQo
dmFsdWUgLSBlcHNpbG9uKCkgLyAyLjBmKTsKLSNlbmRpZgotICAgIH0KLQotI2lmIEVOQUJMRShT
VUJQSVhFTF9MQVlPVVQpCi0gICAgaW50IHRvSW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSAv
IGtGaXhlZFBvaW50RGVub21pbmF0b3I7IH0KLSAgICBmbG9hdCB0b0Zsb2F0KCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdmFsdWUpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRv
cjsgfQotICAgIGRvdWJsZSB0b0RvdWJsZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGRv
dWJsZT4obV92YWx1ZSkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOyB9Ci0gICAgZmxvYXQgY2Vp
bFRvRmxvYXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgZmxvYXQgZmxvYXRWYWx1ZSA9IHRvRmxv
YXQoKTsKLSAgICAgICAgaWYgKHN0YXRpY19jYXN0PGludD4oZmxvYXRWYWx1ZSAqIGtGaXhlZFBv
aW50RGVub21pbmF0b3IpID09IG1fdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gZmxvYXRWYWx1
ZTsKLSAgICAgICAgaWYgKGZsb2F0VmFsdWUgPiAwKQotICAgICAgICAgICAgcmV0dXJuIG5leHRh
ZnRlcmYoZmxvYXRWYWx1ZSwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpKTsKLSAg
ICAgICAgcmV0dXJuIG5leHRhZnRlcmYoZmxvYXRWYWx1ZSwgc3RkOjpudW1lcmljX2xpbWl0czxm
bG9hdD46Om1pbigpKTsKLSAgICB9Ci0jZWxzZQotICAgIGludCB0b0ludCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWU7IH0KLSAgICBmbG9hdCB0b0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG1fdmFsdWUpOyB9Ci0gICAgZG91YmxlIHRvRG91YmxlKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3ZhbHVlKTsgfQotICAgIGZsb2F0IGNlaWxUb0Zs
b2F0KCkgY29uc3QgeyByZXR1cm4gdG9GbG9hdCgpOyB9Ci0jZW5kaWYKLSAgICB1bnNpZ25lZCB0
b1Vuc2lnbmVkKCkgY29uc3QgeyBSRVBPUlRfT1ZFUkZMT1cobV92YWx1ZSA+PSAwKTsgcmV0dXJu
IHRvSW50KCk7IH0KLQotICAgIG9wZXJhdG9yIGludCgpIGNvbnN0IHsgcmV0dXJuIHRvSW50KCk7
IH0KLSAgICBvcGVyYXRvciB1bnNpZ25lZCgpIGNvbnN0IHsgcmV0dXJuIHRvVW5zaWduZWQoKTsg
fQotICAgIG9wZXJhdG9yIGZsb2F0KCkgY29uc3QgeyByZXR1cm4gdG9GbG9hdCgpOyB9Ci0gICAg
b3BlcmF0b3IgZG91YmxlKCkgY29uc3QgeyByZXR1cm4gdG9Eb3VibGUoKTsgfQotICAgIG9wZXJh
dG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0KLSAgICBGcmFjdGlvbmFsTGF5
b3V0VW5pdCBvcGVyYXRvcisrKGludCkKLSAgICB7Ci0gICAgICAgIG1fdmFsdWUgKz0ga0ZpeGVk
UG9pbnREZW5vbWluYXRvcjsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIGlu
bGluZSBpbnQgcmF3VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0gICAgaW5saW5l
IHZvaWQgc2V0UmF3VmFsdWUoaW50IHZhbHVlKSB7IG1fdmFsdWUgPSB2YWx1ZTsgfQotICAgIHZv
aWQgc2V0UmF3VmFsdWUobG9uZyBsb25nIHZhbHVlKQotICAgIHsKLSAgICAgICAgUkVQT1JUX09W
RVJGTE9XKHZhbHVlID4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSAmJiB2YWx1ZSA8
IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpOwotICAgICAgICBtX3ZhbHVlID0gc3Rh
dGljX2Nhc3Q8aW50Pih2YWx1ZSk7Ci0gICAgfQotCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQg
YWJzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJldHVyblZh
bHVlOwotICAgICAgICByZXR1cm5WYWx1ZS5zZXRSYXdWYWx1ZSg6OmFicyhtX3ZhbHVlKSk7Ci0g
ICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLSAgICB9Ci0jaWYgT1MoREFSV0lOKQotICAgIGlu
dCB3dGZfY2VpbCgpIGNvbnN0Ci0jZWxzZQotICAgIGludCBjZWlsKCkgY29uc3QKLSNlbmRpZgot
ICAgIHsKLSNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAgICAgICBpZiAobV92YWx1ZSA+
PSAwKQotICAgICAgICAgICAgcmV0dXJuIChtX3ZhbHVlICsga0ZpeGVkUG9pbnREZW5vbWluYXRv
ciAtIDEpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKLSAgICAgICAgcmV0dXJuIHRvSW50KCk7
Ci0jZWxzZQotICAgICAgICByZXR1cm4gbV92YWx1ZTsKLSNlbmRpZgotICAgIH0KLSAgICBpbnQg
cm91bmQoKSBjb25zdAotICAgIHsKLSNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKSAmJiBFTkFC
TEUoU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQotICAgICAgICBpZiAobV92YWx1ZSA+IDAp
Ci0gICAgICAgICAgICByZXR1cm4gc2F0dXJhdGVkQWRkaXRpb24ocmF3VmFsdWUoKSwga0ZpeGVk
UG9pbnREZW5vbWluYXRvciAvIDIpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKLSAgICAgICAg
cmV0dXJuIHNhdHVyYXRlZFN1YnRyYWN0aW9uKHJhd1ZhbHVlKCksIGtGaXhlZFBvaW50RGVub21p
bmF0b3IgLyAyKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0jZWxpZiBFTkFCTEUoU1VCUElY
RUxfTEFZT1VUKQotICAgICAgICBpZiAobV92YWx1ZSA+IDApCi0gICAgICAgICAgICByZXR1cm4g
KG1fdmFsdWUgKyAoa0ZpeGVkUG9pbnREZW5vbWluYXRvciAvIDIpKSAvIGtGaXhlZFBvaW50RGVu
b21pbmF0b3I7Ci0gICAgICAgIHJldHVybiAobV92YWx1ZSAtIChrRml4ZWRQb2ludERlbm9taW5h
dG9yIC8gMikpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKLSNlbHNlCi0gICAgICAgIHJldHVy
biBtX3ZhbHVlOwotI2VuZGlmCi0gICAgfQotCi0gICAgaW50IGZsb29yKCkgY29uc3QKLSAgICB7
Ci0jaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICAgICAgaWYgKG1fdmFsdWUgPj0gMCkK
LSAgICAgICAgICAgIHJldHVybiB0b0ludCgpOwotICAgICAgICByZXR1cm4gKG1fdmFsdWUgLSBr
Rml4ZWRQb2ludERlbm9taW5hdG9yICsgMSkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOwotI2Vs
c2UKLSAgICAgICAgcmV0dXJuIG1fdmFsdWU7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBGcmFjdGlv
bmFsTGF5b3V0VW5pdCBmcmFjdGlvbigpIGNvbnN0Ci0gICAgeyAgIAotICAgICAgICAvLyBBZGQg
dGhlIGZyYWN0aW9uIHRvIHRoZSBzaXplIChhcyBvcHBvc2VkIHRvIHRoZSBmdWxsIGxvY2F0aW9u
KSB0byBhdm9pZCBvdmVyZmxvd3MuCi0gICAgICAgIC8vIENvbXB1dGUgZnJhY3Rpb24gdXNpbmcg
dGhlIG1vZCBvcGVyYXRvciB0byBwcmVzZXJ2ZSB0aGUgc2lnbiBvZiB0aGUgdmFsdWUgYXMgaXQg
bWF5IGFmZmVjdCByb3VuZGluZy4KLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZnJhY3Rp
b247Ci0gICAgICAgIGZyYWN0aW9uLnNldFJhd1ZhbHVlKHJhd1ZhbHVlKCkgJSBrRml4ZWRQb2lu
dERlbm9taW5hdG9yKTsKLSAgICAgICAgcmV0dXJuIGZyYWN0aW9uOwotICAgIH0KLQotI2lmIEVO
QUJMRShTVUJQSVhFTF9MQVlPVVQpCi0gICAgc3RhdGljIGZsb2F0IGVwc2lsb24oKSB7IHJldHVy
biAxLjBmIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsgfQotI2Vsc2UKLSAgICBzdGF0aWMgaW50
IGVwc2lsb24oKSB7IHJldHVybiAwOyB9Ci0jZW5kaWYKLSAgICBzdGF0aWMgY29uc3QgRnJhY3Rp
b25hbExheW91dFVuaXQgbWF4KCkKLSAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
IG07Ci0gICAgICAgIG0ubV92YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7
Ci0gICAgICAgIHJldHVybiBtOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQgbWluKCkKLSAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG07Ci0g
ICAgICAgIG0ubV92YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCk7Ci0gICAg
ICAgIHJldHVybiBtOwotICAgIH0KLQotICAgIC8vIFZlcnNpb25zIG9mIG1heC9taW4gdGhhdCBh
cmUgc2xpZ2h0bHkgc21hbGxlci9sYXJnZXIgdGhhbiBtYXgvbWluKCkgdG8gYWxsb3cgZm9yIHJv
aW5kaW5nIHdpdGhvdXQgb3ZlcmZsb3dpbmcuCi0gICAgc3RhdGljIGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRVbml0IG5lYXJseU1heCgpCi0gICAgewotICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBtOwotICAgICAgICBtLm1fdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgp
IC0ga0ZpeGVkUG9pbnREZW5vbWluYXRvciAvIDI7Ci0gICAgICAgIHJldHVybiBtOwotICAgIH0K
LSAgICBzdGF0aWMgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQgbmVhcmx5TWluKCkKLSAgICB7
Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG07Ci0gICAgICAgIG0ubV92YWx1ZSA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkgKyBrRml4ZWRQb2ludERlbm9taW5hdG9yIC8g
MjsKLSAgICAgICAgcmV0dXJuIG07Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBjbGFtcChkb3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY2xh
bXBUbzxGcmFjdGlvbmFsTGF5b3V0VW5pdD4odmFsdWUsIEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpt
aW4oKSwgRnJhY3Rpb25hbExheW91dFVuaXQ6Om1heCgpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgc3RhdGljIGJvb2wgaXNJbkJvdW5kcyhpbnQgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gOjphYnModmFsdWUpIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkgLyBrRml4
ZWRQb2ludERlbm9taW5hdG9yOwotICAgIH0KLSAgICBzdGF0aWMgYm9vbCBpc0luQm91bmRzKHVu
c2lnbmVkIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlIDw9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSAvIGtGaXhlZFBvaW50
RGVub21pbmF0b3I7Ci0gICAgfQotICAgIHN0YXRpYyBib29sIGlzSW5Cb3VuZHMoZG91YmxlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDo6ZmFicyh2YWx1ZSkgPD0gc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptYXgoKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0gICAgfQotICAg
IAotICAgIGlubGluZSB2b2lkIHNldFZhbHVlKGludCB2YWx1ZSkKLSAgICB7Ci0jaWYgRU5BQkxF
KFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKLSAgICAgICAgaWYgKHZhbHVlID4gaW50TWF4
Rm9yTGF5b3V0VW5pdCkKLSAgICAgICAgICAgIG1fdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1heCgpOwotICAgICAgICBlbHNlIGlmICh2YWx1ZSA8IGludE1pbkZvckxheW91dFVu
aXQpCi0gICAgICAgICAgICBtX3ZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4o
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV92YWx1ZSA9IHZhbHVlICoga0ZpeGVkUG9p
bnREZW5vbWluYXRvcjsKLSNlbHNlCi0gICAgICAgIFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRz
KHZhbHVlKSk7Ci0gICAgICAgIG1fdmFsdWUgPSB2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0
b3I7Ci0jZW5kaWYKLSAgICB9Ci0gICAgaW5saW5lIHZvaWQgc2V0VmFsdWUodW5zaWduZWQgdmFs
dWUpCi0gICAgewotI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCi0gICAg
ICAgIGlmICh2YWx1ZSA+PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW50TWF4Rm9yTGF5b3V0VW5p
dCkpCi0gICAgICAgICAgICBtX3ZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV92YWx1ZSA9IHZhbHVlICoga0ZpeGVkUG9p
bnREZW5vbWluYXRvcjsKLSNlbHNlCi0gICAgICAgIFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRz
KHZhbHVlKSk7Ci0gICAgICAgIG1fdmFsdWUgPSB2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0
b3I7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBpbnQgbV92YWx1ZTsKLX07Ci0KLWlubGluZSBib29s
IG9wZXJhdG9yPD0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgPD0gYi5yYXdWYWx1
ZSgpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBhLCBmbG9hdCBiKQotewotICAgIHJldHVybiBhLnRvRmxvYXQoKSA8PSBiOwotfQotCi1p
bmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQg
YikKLXsKLSAgICByZXR1cm4gYSA8PSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKLX0KLQotaW5s
aW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYikKLXsKLSAgICByZXR1cm4gYSA8PSBiLnRvRmxvYXQoKTsKLX0KLQotaW5saW5lIGJv
b2wgb3BlcmF0b3I8PShjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIp
Ci17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpIDw9IGI7Ci19Ci0KLWlubGlu
ZSBib29sIG9wZXJhdG9yPj0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgPj0gYi5y
YXdWYWx1ZSgpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRVbml0JiBhLCBpbnQgYikKLXsKLSAgICByZXR1cm4gYSA+PSBGcmFjdGlvbmFsTGF5b3V0
VW5pdChiKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBmbG9hdCBhLCBjb25z
dCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gYSA+PSBiLnRvRmxvYXQo
KTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYSwgZmxvYXQgYikKLXsKLSAgICByZXR1cm4gYS50b0Zsb2F0KCkgPj0gYjsKLX0KLQotaW5s
aW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVu
aXQmIGIpCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpID49IGI7Ci19Ci0K
LWlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29u
c3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJuIGEucmF3VmFsdWUoKSA8
IGIucmF3VmFsdWUoKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBhLCBpbnQgYikKLXsKLSAgICByZXR1cm4gYSA8IEZyYWN0aW9uYWxMYXlv
dXRVbml0KGIpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGEsIGZsb2F0IGIpCi17Ci0gICAgcmV0dXJuIGEudG9GbG9hdCgpIDwgYjsKLX0K
LQotaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBk
b3VibGUgYikKLXsKLSAgICByZXR1cm4gYS50b0RvdWJsZSgpIDwgYjsKLX0KLQotaW5saW5lIGJv
b2wgb3BlcmF0b3I8KGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikK
LXsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgPCBiOwotfQotCi1pbmxpbmUg
Ym9vbCBvcGVyYXRvcjwoY29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGIpCi17Ci0gICAgcmV0dXJuIGEgPCBiLnRvRmxvYXQoKTsKLX0KLQotaW5saW5lIGJvb2wgb3Bl
cmF0b3I+KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gYS5yYXdWYWx1ZSgpID4gYi5yYXdWYWx1ZSgpOwot
fQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEs
IGRvdWJsZSBiKQotewotICAgIHJldHVybiBhLnRvRG91YmxlKCkgPiBiOwotfQotCi1pbmxpbmUg
Ym9vbCBvcGVyYXRvcj4oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCi17
Ci0gICAgcmV0dXJuIGEudG9GbG9hdCgpID4gYjsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I+
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKLXsKLSAgICByZXR1cm4gYSA+
IEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29u
c3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBG
cmFjdGlvbmFsTGF5b3V0VW5pdChhKSA+IGI7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPihj
b25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1
cm4gYSA+IGIudG9GbG9hdCgpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgZG91
YmxlIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBhID4g
Yi50b0RvdWJsZSgpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICBy
ZXR1cm4gYS5yYXdWYWx1ZSgpICE9IGIucmF3VmFsdWUoKTsKLX0KLQotaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKLXsKLSAgICBy
ZXR1cm4gYSAhPSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKLX0KLQotaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0g
ICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpICE9IGI7Ci19Ci0KLWlubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQotewotICAg
IHJldHVybiBhICE9IEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOwotfQotCi1pbmxpbmUgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gYS5yYXdWYWx1ZSgpID09IGIucmF3VmFsdWUo
KTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYSwgaW50IGIpCi17Ci0gICAgcmV0dXJuIGEgPT0gRnJhY3Rpb25hbExheW91dFVuaXQoYik7
Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgaW50IGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSA9
PSBiOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBhLCBmbG9hdCBiKQotewotICAgIHJldHVybiBhLnRvRmxvYXQoKSA9PSBiOwotfQotCi1p
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBiKQotewotICAgIHJldHVybiBhID09IGIudG9GbG9hdCgpOwotfQotCi0vLyBGb3Ig
bXVsdGlwbGljYXRpb24gdGhhdCdzIHByb25lIHRvIG92ZXJmbG93LCB0aGlzIGJvdW5kcyBpdCB0
byBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWF4KCkgYW5kIDo6bWluKCkKLWlubGluZSBGcmFjdGlv
bmFsTGF5b3V0VW5pdCBib3VuZGVkTXVsdGlwbHkoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotI2lmIEVOQUJMRShTVUJQSVhF
TF9MQVlPVVQpCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOwotICAgIGxvbmcg
bG9uZyByYXdWYWwgPSBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGEucmF3VmFsdWUoKSkgKiBiLnJh
d1ZhbHVlKCkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOwotICAgIGlmIChyYXdWYWwgPiBzdGQ6
Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQotICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExh
eW91dFVuaXQ6Om1heCgpOwotICAgIGlmIChyYXdWYWwgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1pbigpKQotICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQ6Om1pbigpOwot
ICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShyYXdWYWwpOwotICAgIHJldHVybiByZXR1cm5WYWw7
Ci0jZWxzZQotICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgKiBiLnJhd1ZhbHVlKCk7Ci0jZW5kaWYK
LX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKihjb25zdCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0jaWYg
RU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkgJiYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhN
RVRJQykKLSAgICByZXR1cm4gYm91bmRlZE11bHRpcGx5KGEsIGIpOwotI2VsaWYgRU5BQkxFKFNV
QlBJWEVMX0xBWU9VVCkKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7Ci0gICAg
bG9uZyBsb25nIHJhd1ZhbCA9IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oYS5yYXdWYWx1ZSgpKSAq
IGIucmF3VmFsdWUoKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0gICAgcmV0dXJuVmFsLnNl
dFJhd1ZhbHVlKHJhd1ZhbCk7Ci0gICAgcmV0dXJuIHJldHVyblZhbDsKLSNlbHNlCi0gICAgcmV0
dXJuIGEucmF3VmFsdWUoKSAqIGIucmF3VmFsdWUoKTsKLSNlbmRpZgotfSAgICAKLQotaW5saW5l
IGRvdWJsZSBvcGVyYXRvciooY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGRvdWJsZSBi
KQotewotICAgIHJldHVybiBhLnRvRG91YmxlKCkgKiBiOwotfQotCi1pbmxpbmUgZmxvYXQgb3Bl
cmF0b3IqKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQotewotICAgIHJl
dHVybiBhLnRvRmxvYXQoKSAqIGI7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBv
cGVyYXRvciooY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQotewotICAgIHJl
dHVybiBhICogRnJhY3Rpb25hbExheW91dFVuaXQoYik7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBvcGVyYXRvciooY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIHVuc2ln
bmVkIGIpCi17Ci0gICAgcmV0dXJuIGEgKiBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKLX0KLQot
aW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKih1bnNpZ25lZCBhLCBjb25zdCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVu
aXQoYSkgKiBiOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IqKGNv
bnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFVuaXQoYSkgKiBiOwotfQotCi1pbmxpbmUgZmxvYXQgb3BlcmF0b3Iq
KGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJl
dHVybiBhICogYi50b0Zsb2F0KCk7Ci19Ci0KLWlubGluZSBkb3VibGUgb3BlcmF0b3IqKGNvbnN0
IGRvdWJsZSBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4g
YSAqIGIudG9Eb3VibGUoKTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJh
dG9yLyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGIpCi17Ci0jaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCByZXR1cm5WYWw7Ci0gICAgbG9uZyBsb25nIHJhd1ZhbCA9IHN0YXRpY19jYXN0
PGxvbmcgbG9uZz4oa0ZpeGVkUG9pbnREZW5vbWluYXRvcikgKiBhLnJhd1ZhbHVlKCkgLyBiLnJh
d1ZhbHVlKCk7Ci0gICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKHJhd1ZhbCk7Ci0gICAgcmV0dXJu
IHJldHVyblZhbDsKLSNlbHNlCi0gICAgcmV0dXJuIGEucmF3VmFsdWUoKSAvIGIucmF3VmFsdWUo
KTsKLSNlbmRpZgotfSAgICAKLQotaW5saW5lIGZsb2F0IG9wZXJhdG9yLyhjb25zdCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKLXsKLSAgICByZXR1cm4gYS50b0Zsb2F0KCkgLyBi
OwotfQotCi1pbmxpbmUgZG91YmxlIG9wZXJhdG9yLyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYSwgZG91YmxlIGIpCi17Ci0gICAgcmV0dXJuIGEudG9Eb3VibGUoKSAvIGI7Ci19Ci0KLWlu
bGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci8oY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGEsIGludCBiKQotewotICAgIHJldHVybiBhIC8gRnJhY3Rpb25hbExheW91dFVuaXQo
Yik7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci8oY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGEsIHVuc2lnbmVkIGludCBiKQotewotICAgIHJldHVybiBhIC8g
RnJhY3Rpb25hbExheW91dFVuaXQoYik7Ci19Ci0KLWlubGluZSBmbG9hdCBvcGVyYXRvci8oY29u
c3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJu
IGEgLyBiLnRvRmxvYXQoKTsKLX0KLQotaW5saW5lIGRvdWJsZSBvcGVyYXRvci8oY29uc3QgZG91
YmxlIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBhIC8g
Yi50b0RvdWJsZSgpOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3Iv
KGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1
cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgLyBiOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExh
eW91dFVuaXQgb3BlcmF0b3IvKHVuc2lnbmVkIGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYikKLXsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgLyBiOwotfQot
Ci1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICBGcmFj
dGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7Ci0jaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRf
QVJJVEhNRVRJQykKLSAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUoc2F0dXJhdGVkQWRkaXRpb24o
YS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKLSNlbHNlCi0gICAgcmV0dXJuVmFsLnNldFJh
d1ZhbHVlKGEucmF3VmFsdWUoKSArIGIucmF3VmFsdWUoKSk7Ci0jZW5kaWYKLSAgICByZXR1cm4g
cmV0dXJuVmFsOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IrKGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKLXsKLSAgICByZXR1cm4gYSArIEZy
YWN0aW9uYWxMYXlvdXRVbml0KGIpOwotfQotCi1pbmxpbmUgZmxvYXQgb3BlcmF0b3IrKGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQotewotICAgIHJldHVybiBhLnRvRmxv
YXQoKSArIGI7Ci19Ci0KLWlubGluZSBkb3VibGUgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRVbml0JiBhLCBkb3VibGUgYikKLXsKLSAgICByZXR1cm4gYS50b0RvdWJsZSgpICsgYjsK
LX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKyhjb25zdCBpbnQgYSwg
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxM
YXlvdXRVbml0KGEpICsgYjsKLX0KLQotaW5saW5lIGZsb2F0IG9wZXJhdG9yKyhjb25zdCBmbG9h
dCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gYSArIGIu
dG9GbG9hdCgpOwotfQotCi1pbmxpbmUgZG91YmxlIG9wZXJhdG9yKyhjb25zdCBkb3VibGUgYSwg
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJuIGEgKyBiLnRvRG91
YmxlKCk7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci0oY29uc3Qg
RnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQot
ewotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJldHVyblZhbDsKLSNpZiBFTkFCTEUoU0FUVVJB
VEVEX0xBWU9VVF9BUklUSE1FVElDKQotICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShzYXR1cmF0
ZWRTdWJ0cmFjdGlvbihhLnJhd1ZhbHVlKCksIGIucmF3VmFsdWUoKSkpOwotI2Vsc2UKLSAgICBy
ZXR1cm5WYWwuc2V0UmF3VmFsdWUoYS5yYXdWYWx1ZSgpIC0gYi5yYXdWYWx1ZSgpKTsKLSNlbmRp
ZgotICAgIHJldHVybiByZXR1cm5WYWw7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQotewotICAg
IHJldHVybiBhIC0gRnJhY3Rpb25hbExheW91dFVuaXQoYik7Ci19Ci0KLWlubGluZSBGcmFjdGlv
bmFsTGF5b3V0VW5pdCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIHVu
c2lnbmVkIGIpCi17Ci0gICAgcmV0dXJuIGEgLSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKLX0K
LQotaW5saW5lIGZsb2F0IG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwg
ZmxvYXQgYikKLXsKLSAgICByZXR1cm4gYS50b0Zsb2F0KCkgLSBiOwotfQotCi1pbmxpbmUgRnJh
Y3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3ItKGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgLSBi
OwotfQotCi1pbmxpbmUgZmxvYXQgb3BlcmF0b3ItKGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBhIC0gYi50b0Zsb2F0KCk7Ci19Ci0K
LWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGEpCi17Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOwotICAg
IHJldHVyblZhbC5zZXRSYXdWYWx1ZSgtYS5yYXdWYWx1ZSgpKTsKLSAgICByZXR1cm4gcmV0dXJu
VmFsOwotfQotCi0vLyBGb3IgcmV0dXJuaW5nIHRoZSByZW1haW5kZXIgYWZ0ZXIgYSBkaXZpc2lv
biB3aXRoIGludGVnZXIgcmVzdWx0cy4KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBpbnRN
b2QoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBiKQotewotI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCi0gICAgLy8gVGhpcyBjYWxj
dWxhdGVzIHRoZSBtb2R1bG8gc28gdGhhdDogYSA9IHN0YXRpY19jYXN0PGludD4oYSAvIGIpICog
YiArIGludE1vZChhLCBiKS4KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7Ci0g
ICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKGEucmF3VmFsdWUoKSAlIGIucmF3VmFsdWUoKSk7Ci0g
ICAgcmV0dXJuIHJldHVyblZhbDsKLSNlbHNlCi0gICAgcmV0dXJuIGEucmF3VmFsdWUoKSAlIGIu
cmF3VmFsdWUoKTsKLSNlbmRpZgotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3Bl
cmF0b3IlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgYikKLXsKLSNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAgIC8vIFRoaXMg
Y2FsY3VsYXRlcyB0aGUgbW9kdWxvIHNvIHRoYXQ6IGEgPSAoYSAvIGIpICogYiArIGEgJSBiLgot
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJldHVyblZhbDsKLSAgICBsb25nIGxvbmcgcmF3VmFs
ID0gKHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oa0ZpeGVkUG9pbnREZW5vbWluYXRvcikgKiBhLnJh
d1ZhbHVlKCkpICUgYi5yYXdWYWx1ZSgpOwotICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShyYXdW
YWwgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yKTsKLSAgICByZXR1cm4gcmV0dXJuVmFsOwotI2Vs
c2UKLSAgICByZXR1cm4gYS5yYXdWYWx1ZSgpICUgYi5yYXdWYWx1ZSgpOwotI2VuZGlmCi19Ci0K
LWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvciUoY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGEsIGludCBiKQotewotICAgIHJldHVybiBhICUgRnJhY3Rpb25hbExheW91dFVu
aXQoYik7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvciUoaW50IGEs
IGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBGcmFjdGlvbmFs
TGF5b3V0VW5pdChhKSAlIGI7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3Bl
cmF0b3IrPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVu
aXQmIGIpCi17Ci0jaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKLSAgICBh
LnNldFJhd1ZhbHVlKHNhdHVyYXRlZEFkZGl0aW9uKGEucmF3VmFsdWUoKSwgYi5yYXdWYWx1ZSgp
KSk7Ci0jZWxzZQotICAgIGEgPSBhICsgYjsKLSNlbmRpZgotICAgIHJldHVybiBhOwotfQotCi1p
bmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yKz0oRnJhY3Rpb25hbExheW91dFVu
aXQmIGEsIGludCBiKQotewotICAgIGEgPSBhICsgYjsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvcis9KEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBhLCBmbG9hdCBiKQotewotICAgIGEgPSBhICsgYjsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5s
aW5lIGZsb2F0JiBvcGVyYXRvcis9KGZsb2F0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYikKLXsKLSAgICBhID0gYSArIGI7Ci0gICAgcmV0dXJuIGE7Ci19Ci0KLWlubGluZSBGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3ItPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50
IGIpCi17Ci0gICAgYSA9IGEgLSBiOwotICAgIHJldHVybiBhOwotfQotCi1pbmxpbmUgRnJhY3Rp
b25hbExheW91dFVuaXQmIG9wZXJhdG9yLT0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VU
X0FSSVRITUVUSUMpCi0gICAgYS5zZXRSYXdWYWx1ZShzYXR1cmF0ZWRTdWJ0cmFjdGlvbihhLnJh
d1ZhbHVlKCksIGIucmF3VmFsdWUoKSkpOwotI2Vsc2UKLSAgICBhID0gYSAtIGI7Ci0jZW5kaWYK
LSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRv
ci09KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQotewotICAgIGEgPSBhIC0gYjsK
LSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5lIGZsb2F0JiBvcGVyYXRvci09KGZsb2F0JiBhLCBj
b25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICBhID0gYSAtIGI7Ci0gICAgcmV0
dXJuIGE7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3IqPShGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0g
ICAgYSA9IGEgKiBiOwotICAgIHJldHVybiBhOwotfQotLy8gb3BlcmF0b3IqPShGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYSwgaW50IGIpIGlzIHN1cHBvcnRlZCBieSB0aGUgb3BlcmF0b3IgYWJvdmUg
cGx1cyBGcmFjdGlvbmFsTGF5b3V0VW5pdChpbnQpLgotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91
dFVuaXQmIG9wZXJhdG9yKj0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCi17Ci0g
ICAgYSA9IGEgKiBiOwotICAgIHJldHVybiBhOwotfQotCi1pbmxpbmUgZmxvYXQmIG9wZXJhdG9y
Kj0oZmxvYXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIGEgPSBh
ICogYjsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBv
cGVyYXRvci89KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYikKLXsKLSAgICBhID0gYSAvIGI7Ci0gICAgcmV0dXJuIGE7Ci19Ci0vLyBvcGVyYXRv
ci89KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikgaXMgc3VwcG9ydGVkIGJ5IHRoZSBv
cGVyYXRvciBhYm92ZSBwbHVzIEZyYWN0aW9uYWxMYXlvdXRVbml0KGludCkuCi0KLWlubGluZSBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3IvPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwg
ZmxvYXQgYikKLXsKLSAgICBhID0gYSAvIGI7Ci0gICAgcmV0dXJuIGE7Ci19Ci0KLWlubGluZSBm
bG9hdCYgb3BlcmF0b3IvPShmbG9hdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIp
Ci17Ci0gICAgYSA9IGEgLyBiOwotICAgIHJldHVybiBhOwotfQotCi1pbmxpbmUgaW50IHNuYXBT
aXplVG9QaXhlbChGcmFjdGlvbmFsTGF5b3V0VW5pdCBzaXplLCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBsb2NhdGlvbikgCi17Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgZnJhY3Rpb24gPSBsb2Nh
dGlvbi5mcmFjdGlvbigpOwotICAgIHJldHVybiAoZnJhY3Rpb24gKyBzaXplKS5yb3VuZCgpIC0g
ZnJhY3Rpb24ucm91bmQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gRnJhY3Rpb25hbExheW91dFVuaXRfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
TGF5b3V0VW5pdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xheW91
dFVuaXQuaAkocmV2aXNpb24gMTMzNTE3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9G
cmFjdGlvbmFsTGF5b3V0VW5pdC5oOjEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0xheW91dFVuaXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgyNSBAQAorLyoKKyAqIENv
cHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZy
YWN0aW9uYWxMYXlvdXRVbml0X2gKKyNkZWZpbmUgRnJhY3Rpb25hbExheW91dFVuaXRfaAorCisj
aW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPG1hdGguaD4K
KyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1
ZGUgPHd0Zi9TYXR1cmF0ZWRBcml0aG1ldGljLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
I2lmZGVmIE5ERUJVRworCisjZGVmaW5lIFJFUE9SVF9PVkVSRkxPVyhkb2VzT3ZlcmZsb3cpICgo
dm9pZCkwKQorCisjZWxzZQorCisjZGVmaW5lIFJFUE9SVF9PVkVSRkxPVyhkb2VzT3ZlcmZsb3cp
IGRvIFwKKyAgICBpZiAoIShkb2VzT3ZlcmZsb3cpKSB7IFwKKyAgICAgICAgV1RGUmVwb3J0RXJy
b3IoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAiISglcykiLCAjZG9l
c092ZXJmbG93KTsgXAorICAgIH0gXAord2hpbGUgKDApCisKKyNlbmRpZgorCisjaWYgRU5BQkxF
KFNVQlBJWEVMX0xBWU9VVCkKK3N0YXRpYyBjb25zdCBpbnQga0ZpeGVkUG9pbnREZW5vbWluYXRv
ciA9IDY0OworI2Vsc2UKK3N0YXRpYyBjb25zdCBpbnQga0ZpeGVkUG9pbnREZW5vbWluYXRvciA9
IDE7CisjZW5kaWYKK2NvbnN0IGludCBpbnRNYXhGb3JMYXlvdXRVbml0ID0gSU5UX01BWCAvIGtG
aXhlZFBvaW50RGVub21pbmF0b3I7Citjb25zdCBpbnQgaW50TWluRm9yTGF5b3V0VW5pdCA9IElO
VF9NSU4gLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOworCitjbGFzcyBGcmFjdGlvbmFsTGF5b3V0
VW5pdCB7CitwdWJsaWM6CisgICAgLy8gRklYTUU6IElkZWFsbHkgd2Ugd291bGQgaGF2ZSBzaXpl
X3QgdmVyc2lvbnMgb2YgdGhlIGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRvcnMuCisgICAgLy8gSG93
ZXZlciBkdWUgdG8gY29tcGlsZXIgYW5kIHBsYXRmb3JtIGRpZmZlcmVuY2VzIGFkZGluZyB0aG9z
ZSBhcmUgbm9uLXRyaXZpYWwuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04Mzg0OCBmb3IgZGV0YWlscy4KKyAgICAKKyAgICBGcmFjdGlvbmFsTGF5
b3V0VW5pdCgpIDogbV92YWx1ZSgwKSB7IH0KKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQor
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KGludCB2YWx1ZSkgeyBzZXRWYWx1ZSh2YWx1ZSk7IH0K
KyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCh1bnNpZ25lZCBzaG9ydCB2YWx1ZSkgeyBzZXRWYWx1
ZSh2YWx1ZSk7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCh1bnNpZ25lZCBpbnQgdmFsdWUp
IHsgc2V0VmFsdWUodmFsdWUpOyB9CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQoZmxvYXQgdmFs
dWUpCisgICAgeworI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCisgICAg
ICAgIG1fdmFsdWUgPSBjbGFtcFRvPGZsb2F0Pih2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0
b3IsIHN0YXRpY19jYXN0PGZsb2F0PihJTlRfTUlOKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KElOVF9N
QVgpKTsKKyNlbHNlCisgICAgICAgIFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7
CisgICAgICAgIG1fdmFsdWUgPSB2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3I7CisjZW5k
aWYKKyAgICB9CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQoZG91YmxlIHZhbHVlKQorICAgIHsK
KyNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQorICAgICAgICBtX3ZhbHVl
ID0gY2xhbXBUbzxkb3VibGU+KHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvciwgc3RhdGlj
X2Nhc3Q8ZG91YmxlPihJTlRfTUlOKSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihJTlRfTUFYKSk7Cisj
ZWxzZQorICAgICAgICBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOworICAgICAg
ICBtX3ZhbHVlID0gdmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yOworI2VuZGlmCisgICAg
fQorI2Vsc2UKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdChpbnQgdmFsdWUpIHsgUkVQT1JUX09W
RVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsgbV92YWx1ZSA9IHZhbHVlOyB9CisgICAgRnJhY3Rp
b25hbExheW91dFVuaXQodW5zaWduZWQgc2hvcnQgdmFsdWUpIHsgUkVQT1JUX09WRVJGTE9XKGlz
SW5Cb3VuZHModmFsdWUpKTsgbV92YWx1ZSA9IHZhbHVlOyB9CisgICAgRnJhY3Rpb25hbExheW91
dFVuaXQodW5zaWduZWQgaW50IHZhbHVlKSB7IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZh
bHVlKSk7IG1fdmFsdWUgPSB2YWx1ZTsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KGZsb2F0
IHZhbHVlKSB7IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7IG1fdmFsdWUgPSB2
YWx1ZTsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KGRvdWJsZSB2YWx1ZSkgeyBSRVBPUlRf
T1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFsdWU7IH0KKyNlbmRpZgor
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiB2YWx1
ZSkgeyBtX3ZhbHVlID0gdmFsdWUucmF3VmFsdWUoKTsgfQorCisgICAgc3RhdGljIEZyYWN0aW9u
YWxMYXlvdXRVbml0IGZyb21GbG9hdENlaWwoZmxvYXQgdmFsdWUpCisgICAgeworICAgICAgICBG
cmFjdGlvbmFsTGF5b3V0VW5pdCB2OworI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRI
TUVUSUMpCisgICAgICAgIHYubV92YWx1ZSA9IGNsYW1wVG9JbnRlZ2VyKGNlaWxmKHZhbHVlICog
a0ZpeGVkUG9pbnREZW5vbWluYXRvcikpOworI2Vsc2UKKyAgICAgICAgUkVQT1JUX09WRVJGTE9X
KGlzSW5Cb3VuZHModmFsdWUpKTsKKyAgICAgICAgdi5tX3ZhbHVlID0gY2VpbGYodmFsdWUgKiBr
Rml4ZWRQb2ludERlbm9taW5hdG9yKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gdjsKKyAgICB9
CisKKyAgICBzdGF0aWMgRnJhY3Rpb25hbExheW91dFVuaXQgZnJvbUZsb2F0Rmxvb3IoZmxvYXQg
dmFsdWUpCisgICAgeworICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB2OworI2lmIEVOQUJM
RShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCisgICAgICAgIHYubV92YWx1ZSA9IGNsYW1w
VG9JbnRlZ2VyKGZsb29yZih2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3IpKTsKKyNlbHNl
CisgICAgICAgIFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7CisgICAgICAgIHYu
bV92YWx1ZSA9IGZsb29yZih2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3IpOworI2VuZGlm
CisgICAgICAgIHJldHVybiB2OworICAgIH0KKworICAgIHN0YXRpYyBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBmcm9tRmxvYXRSb3VuZChmbG9hdCB2YWx1ZSkKKyAgICB7CisjaWYgRU5BQkxFKFNBVFVS
QVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKKyAgICAgICAgaWYgKHZhbHVlID49IDApCisgICAgICAg
ICAgICByZXR1cm4gY2xhbXAodmFsdWUgKyBlcHNpbG9uKCkgLyAyLjBmKTsKKyAgICAgICAgcmV0
dXJuIGNsYW1wKHZhbHVlIC0gZXBzaWxvbigpIC8gMi4wZik7CisjZWxzZQorICAgICAgICBpZiAo
dmFsdWUgPj0gMCkgeworICAgICAgICAgICAgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFs
dWUgKyBlcHNpbG9uKCkgLyAyLjBmKSk7CisgICAgICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExh
eW91dFVuaXQodmFsdWUgKyBlcHNpbG9uKCkgLyAyLjBmKTsKKyAgICAgICAgfQorICAgICAgICBS
RVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSAtIGVwc2lsb24oKSAvIDIuMGYpKTsKKyAg
ICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KHZhbHVlIC0gZXBzaWxvbigpIC8gMi4w
Zik7CisjZW5kaWYKKyAgICB9CisKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIGlu
dCB0b0ludCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgLyBrRml4ZWRQb2ludERlbm9taW5hdG9y
OyB9CisgICAgZmxvYXQgdG9GbG9hdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0
PihtX3ZhbHVlKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7IH0KKyAgICBkb3VibGUgdG9Eb3Vi
bGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdmFsdWUpIC8ga0ZpeGVk
UG9pbnREZW5vbWluYXRvcjsgfQorICAgIGZsb2F0IGNlaWxUb0Zsb2F0KCkgY29uc3QKKyAgICB7
CisgICAgICAgIGZsb2F0IGZsb2F0VmFsdWUgPSB0b0Zsb2F0KCk7CisgICAgICAgIGlmIChzdGF0
aWNfY2FzdDxpbnQ+KGZsb2F0VmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yKSA9PSBtX3Zh
bHVlKQorICAgICAgICAgICAgcmV0dXJuIGZsb2F0VmFsdWU7CisgICAgICAgIGlmIChmbG9hdFZh
bHVlID4gMCkKKyAgICAgICAgICAgIHJldHVybiBuZXh0YWZ0ZXJmKGZsb2F0VmFsdWUsIHN0ZDo6
bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSk7CisgICAgICAgIHJldHVybiBuZXh0YWZ0ZXJm
KGZsb2F0VmFsdWUsIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptaW4oKSk7CisgICAgfQor
I2Vsc2UKKyAgICBpbnQgdG9JbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgZmxv
YXQgdG9GbG9hdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX3ZhbHVlKTsg
fQorICAgIGRvdWJsZSB0b0RvdWJsZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJs
ZT4obV92YWx1ZSk7IH0KKyAgICBmbG9hdCBjZWlsVG9GbG9hdCgpIGNvbnN0IHsgcmV0dXJuIHRv
RmxvYXQoKTsgfQorI2VuZGlmCisgICAgdW5zaWduZWQgdG9VbnNpZ25lZCgpIGNvbnN0IHsgUkVQ
T1JUX09WRVJGTE9XKG1fdmFsdWUgPj0gMCk7IHJldHVybiB0b0ludCgpOyB9CisKKyAgICBvcGVy
YXRvciBpbnQoKSBjb25zdCB7IHJldHVybiB0b0ludCgpOyB9CisgICAgb3BlcmF0b3IgdW5zaWdu
ZWQoKSBjb25zdCB7IHJldHVybiB0b1Vuc2lnbmVkKCk7IH0KKyAgICBvcGVyYXRvciBmbG9hdCgp
IGNvbnN0IHsgcmV0dXJuIHRvRmxvYXQoKTsgfQorICAgIG9wZXJhdG9yIGRvdWJsZSgpIGNvbnN0
IHsgcmV0dXJuIHRvRG91YmxlKCk7IH0KKyAgICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZTsgfQorCisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IrKyhpbnQp
CisgICAgeworICAgICAgICBtX3ZhbHVlICs9IGtGaXhlZFBvaW50RGVub21pbmF0b3I7CisgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBpbmxpbmUgaW50IHJhd1ZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIGlubGluZSB2b2lkIHNldFJhd1ZhbHVlKGludCB2
YWx1ZSkgeyBtX3ZhbHVlID0gdmFsdWU7IH0KKyAgICB2b2lkIHNldFJhd1ZhbHVlKGxvbmcgbG9u
ZyB2YWx1ZSkKKyAgICB7CisgICAgICAgIFJFUE9SVF9PVkVSRkxPVyh2YWx1ZSA+IHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50Pjo6bWluKCkgJiYgdmFsdWUgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1heCgpKTsKKyAgICAgICAgbV92YWx1ZSA9IHN0YXRpY19jYXN0PGludD4odmFsdWUpOwor
ICAgIH0KKworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGFicygpIGNvbnN0CisgICAgeworICAg
ICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWx1ZTsKKyAgICAgICAgcmV0dXJuVmFs
dWUuc2V0UmF3VmFsdWUoOjphYnMobV92YWx1ZSkpOworICAgICAgICByZXR1cm4gcmV0dXJuVmFs
dWU7CisgICAgfQorI2lmIE9TKERBUldJTikKKyAgICBpbnQgd3RmX2NlaWwoKSBjb25zdAorI2Vs
c2UKKyAgICBpbnQgY2VpbCgpIGNvbnN0CisjZW5kaWYKKyAgICB7CisjaWYgRU5BQkxFKFNVQlBJ
WEVMX0xBWU9VVCkKKyAgICAgICAgaWYgKG1fdmFsdWUgPj0gMCkKKyAgICAgICAgICAgIHJldHVy
biAobV92YWx1ZSArIGtGaXhlZFBvaW50RGVub21pbmF0b3IgLSAxKSAvIGtGaXhlZFBvaW50RGVu
b21pbmF0b3I7CisgICAgICAgIHJldHVybiB0b0ludCgpOworI2Vsc2UKKyAgICAgICAgcmV0dXJu
IG1fdmFsdWU7CisjZW5kaWYKKyAgICB9CisgICAgaW50IHJvdW5kKCkgY29uc3QKKyAgICB7Cisj
aWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkgJiYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJ
VEhNRVRJQykKKyAgICAgICAgaWYgKG1fdmFsdWUgPiAwKQorICAgICAgICAgICAgcmV0dXJuIHNh
dHVyYXRlZEFkZGl0aW9uKHJhd1ZhbHVlKCksIGtGaXhlZFBvaW50RGVub21pbmF0b3IgLyAyKSAv
IGtGaXhlZFBvaW50RGVub21pbmF0b3I7CisgICAgICAgIHJldHVybiBzYXR1cmF0ZWRTdWJ0cmFj
dGlvbihyYXdWYWx1ZSgpLCBrRml4ZWRQb2ludERlbm9taW5hdG9yIC8gMikgLyBrRml4ZWRQb2lu
dERlbm9taW5hdG9yOworI2VsaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKKyAgICAgICAgaWYg
KG1fdmFsdWUgPiAwKQorICAgICAgICAgICAgcmV0dXJuIChtX3ZhbHVlICsgKGtGaXhlZFBvaW50
RGVub21pbmF0b3IgLyAyKSkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOworICAgICAgICByZXR1
cm4gKG1fdmFsdWUgLSAoa0ZpeGVkUG9pbnREZW5vbWluYXRvciAvIDIpKSAvIGtGaXhlZFBvaW50
RGVub21pbmF0b3I7CisjZWxzZQorICAgICAgICByZXR1cm4gbV92YWx1ZTsKKyNlbmRpZgorICAg
IH0KKworICAgIGludCBmbG9vcigpIGNvbnN0CisgICAgeworI2lmIEVOQUJMRShTVUJQSVhFTF9M
QVlPVVQpCisgICAgICAgIGlmIChtX3ZhbHVlID49IDApCisgICAgICAgICAgICByZXR1cm4gdG9J
bnQoKTsKKyAgICAgICAgcmV0dXJuIChtX3ZhbHVlIC0ga0ZpeGVkUG9pbnREZW5vbWluYXRvciAr
IDEpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKKyNlbHNlCisgICAgICAgIHJldHVybiBtX3Zh
bHVlOworI2VuZGlmCisgICAgfQorCisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZnJhY3Rpb24o
KSBjb25zdAorICAgIHsgICAKKyAgICAgICAgLy8gQWRkIHRoZSBmcmFjdGlvbiB0byB0aGUgc2l6
ZSAoYXMgb3Bwb3NlZCB0byB0aGUgZnVsbCBsb2NhdGlvbikgdG8gYXZvaWQgb3ZlcmZsb3dzLgor
ICAgICAgICAvLyBDb21wdXRlIGZyYWN0aW9uIHVzaW5nIHRoZSBtb2Qgb3BlcmF0b3IgdG8gcHJl
c2VydmUgdGhlIHNpZ24gb2YgdGhlIHZhbHVlIGFzIGl0IG1heSBhZmZlY3Qgcm91bmRpbmcuCisg
ICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGZyYWN0aW9uOworICAgICAgICBmcmFjdGlvbi5z
ZXRSYXdWYWx1ZShyYXdWYWx1ZSgpICUga0ZpeGVkUG9pbnREZW5vbWluYXRvcik7CisgICAgICAg
IHJldHVybiBmcmFjdGlvbjsKKyAgICB9CisKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQor
ICAgIHN0YXRpYyBmbG9hdCBlcHNpbG9uKCkgeyByZXR1cm4gMS4wZiAvIGtGaXhlZFBvaW50RGVu
b21pbmF0b3I7IH0KKyNlbHNlCisgICAgc3RhdGljIGludCBlcHNpbG9uKCkgeyByZXR1cm4gMDsg
fQorI2VuZGlmCisgICAgc3RhdGljIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0IG1heCgpCisg
ICAgeworICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtOworICAgICAgICBtLm1fdmFsdWUg
PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOworICAgICAgICByZXR1cm4gbTsKKyAg
ICB9CisgICAgc3RhdGljIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0IG1pbigpCisgICAgewor
ICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtOworICAgICAgICBtLm1fdmFsdWUgPSBzdGQ6
Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpOworICAgICAgICByZXR1cm4gbTsKKyAgICB9CisK
KyAgICAvLyBWZXJzaW9ucyBvZiBtYXgvbWluIHRoYXQgYXJlIHNsaWdodGx5IHNtYWxsZXIvbGFy
Z2VyIHRoYW4gbWF4L21pbigpIHRvIGFsbG93IGZvciByb2luZGluZyB3aXRob3V0IG92ZXJmbG93
aW5nLgorICAgIHN0YXRpYyBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBuZWFybHlNYXgoKQor
ICAgIHsKKyAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbTsKKyAgICAgICAgbS5tX3ZhbHVl
ID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSAtIGtGaXhlZFBvaW50RGVub21pbmF0
b3IgLyAyOworICAgICAgICByZXR1cm4gbTsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0IG5lYXJseU1pbigpCisgICAgeworICAgICAgICBGcmFjdGlvbmFsTGF5
b3V0VW5pdCBtOworICAgICAgICBtLm1fdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46
Om1pbigpICsga0ZpeGVkUG9pbnREZW5vbWluYXRvciAvIDI7CisgICAgICAgIHJldHVybiBtOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgRnJhY3Rpb25hbExheW91dFVuaXQgY2xhbXAoZG91Ymxl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNsYW1wVG88RnJhY3Rpb25hbExheW91dFVu
aXQ+KHZhbHVlLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWluKCksIEZyYWN0aW9uYWxMYXlvdXRV
bml0OjptYXgoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIGlzSW5Cb3Vu
ZHMoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDo6YWJzKHZhbHVlKSA8PSBzdGQ6
Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKKyAg
ICB9CisgICAgc3RhdGljIGJvb2wgaXNJbkJvdW5kcyh1bnNpZ25lZCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB2YWx1ZSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptYXgoKSkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOworICAgIH0KKyAg
ICBzdGF0aWMgYm9vbCBpc0luQm91bmRzKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiA6OmZhYnModmFsdWUpIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkgLyBr
Rml4ZWRQb2ludERlbm9taW5hdG9yOworICAgIH0KKyAgICAKKyAgICBpbmxpbmUgdm9pZCBzZXRW
YWx1ZShpbnQgdmFsdWUpCisgICAgeworI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRI
TUVUSUMpCisgICAgICAgIGlmICh2YWx1ZSA+IGludE1heEZvckxheW91dFVuaXQpCisgICAgICAg
ICAgICBtX3ZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKKyAgICAgICAg
ZWxzZSBpZiAodmFsdWUgPCBpbnRNaW5Gb3JMYXlvdXRVbml0KQorICAgICAgICAgICAgbV92YWx1
ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1fdmFsdWUgPSB2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3I7CisjZWxzZQor
ICAgICAgICBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOworICAgICAgICBtX3Zh
bHVlID0gdmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yOworI2VuZGlmCisgICAgfQorICAg
IGlubGluZSB2b2lkIHNldFZhbHVlKHVuc2lnbmVkIHZhbHVlKQorICAgIHsKKyNpZiBFTkFCTEUo
U0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQorICAgICAgICBpZiAodmFsdWUgPj0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGludE1heEZvckxheW91dFVuaXQpKQorICAgICAgICAgICAgbV92YWx1
ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1fdmFsdWUgPSB2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3I7CisjZWxzZQor
ICAgICAgICBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOworICAgICAgICBtX3Zh
bHVlID0gdmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yOworI2VuZGlmCisgICAgfQorCisg
ICAgaW50IG1fdmFsdWU7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAg
ICByZXR1cm4gYS5yYXdWYWx1ZSgpIDw9IGIucmF3VmFsdWUoKTsKK30KKworaW5saW5lIGJvb2wg
b3BlcmF0b3I8PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK3sKKyAg
ICByZXR1cm4gYS50b0Zsb2F0KCkgPD0gYjsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I8PShj
b25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCit7CisgICAgcmV0dXJuIGEgPD0g
RnJhY3Rpb25hbExheW91dFVuaXQoYik7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPD0oY29u
c3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJu
IGEgPD0gYi50b0Zsb2F0KCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgaW50
IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBGcmFjdGlv
bmFsTGF5b3V0VW5pdChhKSA8PSBiOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikK
K3sKKyAgICByZXR1cm4gYS5yYXdWYWx1ZSgpID49IGIucmF3VmFsdWUoKTsKK30KKworaW5saW5l
IGJvb2wgb3BlcmF0b3I+PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCit7
CisgICAgcmV0dXJuIGEgPj0gRnJhY3Rpb25hbExheW91dFVuaXQoYik7Cit9CisKK2lubGluZSBi
b29sIG9wZXJhdG9yPj0oY29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGIpCit7CisgICAgcmV0dXJuIGEgPj0gYi50b0Zsb2F0KCk7Cit9CisKK2lubGluZSBib29sIG9w
ZXJhdG9yPj0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCit7CisgICAg
cmV0dXJuIGEudG9GbG9hdCgpID49IGI7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPj0oY29u
c3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBG
cmFjdGlvbmFsTGF5b3V0VW5pdChhKSA+PSBiOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcjwo
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBiKQoreworICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgPCBiLnJhd1ZhbHVlKCk7Cit9CisKK2lu
bGluZSBib29sIG9wZXJhdG9yPChjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIp
Cit7CisgICAgcmV0dXJuIGEgPCBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKK30KKworaW5saW5l
IGJvb2wgb3BlcmF0b3I8KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQor
eworICAgIHJldHVybiBhLnRvRmxvYXQoKSA8IGI7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9y
PChjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZG91YmxlIGIpCit7CisgICAgcmV0dXJu
IGEudG9Eb3VibGUoKSA8IGI7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBpbnQg
YSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEZyYWN0aW9u
YWxMYXlvdXRVbml0KGEpIDwgYjsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IGZs
b2F0IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBhIDwg
Yi50b0Zsb2F0KCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0
dXJuIGEucmF3VmFsdWUoKSA+IGIucmF3VmFsdWUoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0
b3I+KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBkb3VibGUgYikKK3sKKyAgICByZXR1
cm4gYS50b0RvdWJsZSgpID4gYjsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQoreworICAgIHJldHVybiBhLnRvRmxvYXQo
KSA+IGI7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYSwgaW50IGIpCit7CisgICAgcmV0dXJuIGEgPiBGcmFjdGlvbmFsTGF5b3V0VW5pdChi
KTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkg
PiBiOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgZmxvYXQgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEgPiBiLnRvRmxvYXQoKTsKK30K
KworaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IGRvdWJsZSBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4gYSA+IGIudG9Eb3VibGUoKTsKK30KKworaW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3Qg
RnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEucmF3VmFsdWUoKSAhPSBi
LnJhd1ZhbHVlKCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJhY3Rpb25h
bExheW91dFVuaXQmIGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEgIT0gRnJhY3Rpb25hbExh
eW91dFVuaXQoYik7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgaW50IGEsIGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5
b3V0VW5pdChhKSAhPSBiOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK3sKKyAgICByZXR1cm4gYSAhPSBGcmFjdGlvbmFs
TGF5b3V0VW5pdChiKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAg
cmV0dXJuIGEucmF3VmFsdWUoKSA9PSBiLnJhd1ZhbHVlKCk7Cit9CisKK2lubGluZSBib29sIG9w
ZXJhdG9yPT0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQoreworICAgIHJl
dHVybiBhID09IEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworfQorCitpbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAg
ICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgPT0gYjsKK30KKworaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK3sKKyAg
ICByZXR1cm4gYS50b0Zsb2F0KCkgPT0gYjsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1
cm4gYSA9PSBiLnRvRmxvYXQoKTsKK30KKworLy8gRm9yIG11bHRpcGxpY2F0aW9uIHRoYXQncyBw
cm9uZSB0byBvdmVyZmxvdywgdGhpcyBib3VuZHMgaXQgdG8gRnJhY3Rpb25hbExheW91dFVuaXQ6
Om1heCgpIGFuZCA6Om1pbigpCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgYm91bmRlZE11
bHRpcGx5KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgYikKK3sKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IHJldHVyblZhbDsKKyAgICBsb25nIGxvbmcgcmF3VmFsID0gc3RhdGljX2Nh
c3Q8bG9uZyBsb25nPihhLnJhd1ZhbHVlKCkpICogYi5yYXdWYWx1ZSgpIC8ga0ZpeGVkUG9pbnRE
ZW5vbWluYXRvcjsKKyAgICBpZiAocmF3VmFsID4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKSkKKyAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0OjptYXgoKTsKKyAgICBp
ZiAocmF3VmFsIDwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSkKKyAgICAgICAgcmV0
dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0OjptaW4oKTsKKyAgICByZXR1cm5WYWwuc2V0UmF3VmFs
dWUocmF3VmFsKTsKKyAgICByZXR1cm4gcmV0dXJuVmFsOworI2Vsc2UKKyAgICByZXR1cm4gYS5y
YXdWYWx1ZSgpICogYi5yYXdWYWx1ZSgpOworI2VuZGlmCit9CisKK2lubGluZSBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBvcGVyYXRvciooY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQp
ICYmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCisgICAgcmV0dXJuIGJvdW5k
ZWRNdWx0aXBseShhLCBiKTsKKyNlbGlmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisgICAgRnJh
Y3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOworICAgIGxvbmcgbG9uZyByYXdWYWwgPSBzdGF0
aWNfY2FzdDxsb25nIGxvbmc+KGEucmF3VmFsdWUoKSkgKiBiLnJhd1ZhbHVlKCkgLyBrRml4ZWRQ
b2ludERlbm9taW5hdG9yOworICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShyYXdWYWwpOworICAg
IHJldHVybiByZXR1cm5WYWw7CisjZWxzZQorICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgKiBiLnJh
d1ZhbHVlKCk7CisjZW5kaWYKK30gICAgCisKK2lubGluZSBkb3VibGUgb3BlcmF0b3IqKGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBkb3VibGUgYikKK3sKKyAgICByZXR1cm4gYS50b0Rv
dWJsZSgpICogYjsKK30KKworaW5saW5lIGZsb2F0IG9wZXJhdG9yKihjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK3sKKyAgICByZXR1cm4gYS50b0Zsb2F0KCkgKiBiOwor
fQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IqKGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK3sKKyAgICByZXR1cm4gYSAqIEZyYWN0aW9uYWxMYXlv
dXRVbml0KGIpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IqKGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCB1bnNpZ25lZCBiKQoreworICAgIHJldHVybiBh
ICogRnJhY3Rpb25hbExheW91dFVuaXQoYik7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBvcGVyYXRvcioodW5zaWduZWQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIp
Cit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpICogYjsKK30KKworaW5saW5l
IEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKihjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rp
b25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEp
ICogYjsKK30KKworaW5saW5lIGZsb2F0IG9wZXJhdG9yKihjb25zdCBmbG9hdCBhLCBjb25zdCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4gYSAqIGIudG9GbG9hdCgpOwor
fQorCitpbmxpbmUgZG91YmxlIG9wZXJhdG9yKihjb25zdCBkb3VibGUgYSwgY29uc3QgRnJhY3Rp
b25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEgKiBiLnRvRG91YmxlKCk7Cit9CisK
K2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci8oY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworI2lmIEVOQUJM
RShTVUJQSVhFTF9MQVlPVVQpCisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOwor
ICAgIGxvbmcgbG9uZyByYXdWYWwgPSBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGtGaXhlZFBvaW50
RGVub21pbmF0b3IpICogYS5yYXdWYWx1ZSgpIC8gYi5yYXdWYWx1ZSgpOworICAgIHJldHVyblZh
bC5zZXRSYXdWYWx1ZShyYXdWYWwpOworICAgIHJldHVybiByZXR1cm5WYWw7CisjZWxzZQorICAg
IHJldHVybiBhLnJhd1ZhbHVlKCkgLyBiLnJhd1ZhbHVlKCk7CisjZW5kaWYKK30gICAgCisKK2lu
bGluZSBmbG9hdCBvcGVyYXRvci8oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0
IGIpCit7CisgICAgcmV0dXJuIGEudG9GbG9hdCgpIC8gYjsKK30KKworaW5saW5lIGRvdWJsZSBv
cGVyYXRvci8oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGRvdWJsZSBiKQoreworICAg
IHJldHVybiBhLnRvRG91YmxlKCkgLyBiOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVu
aXQgb3BlcmF0b3IvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK3sKKyAg
ICByZXR1cm4gYSAvIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworfQorCitpbmxpbmUgRnJhY3Rp
b25hbExheW91dFVuaXQgb3BlcmF0b3IvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCB1
bnNpZ25lZCBpbnQgYikKK3sKKyAgICByZXR1cm4gYSAvIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIp
OworfQorCitpbmxpbmUgZmxvYXQgb3BlcmF0b3IvKGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBhIC8gYi50b0Zsb2F0KCk7Cit9CisK
K2lubGluZSBkb3VibGUgb3BlcmF0b3IvKGNvbnN0IGRvdWJsZSBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4gYSAvIGIudG9Eb3VibGUoKTsKK30KKworaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLyhjb25zdCBpbnQgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0
KGEpIC8gYjsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLyh1bnNp
Z25lZCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJu
IEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpIC8gYjsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlv
dXRVbml0IG9wZXJhdG9yKyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJu
VmFsOworI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCisgICAgcmV0dXJu
VmFsLnNldFJhd1ZhbHVlKHNhdHVyYXRlZEFkZGl0aW9uKGEucmF3VmFsdWUoKSwgYi5yYXdWYWx1
ZSgpKSk7CisjZWxzZQorICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShhLnJhd1ZhbHVlKCkgKyBi
LnJhd1ZhbHVlKCkpOworI2VuZGlmCisgICAgcmV0dXJuIHJldHVyblZhbDsKK30KKworaW5saW5l
IEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYSwgaW50IGIpCit7CisgICAgcmV0dXJuIGEgKyBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsK
K30KKworaW5saW5lIGZsb2F0IG9wZXJhdG9yKyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
YSwgZmxvYXQgYikKK3sKKyAgICByZXR1cm4gYS50b0Zsb2F0KCkgKyBiOworfQorCitpbmxpbmUg
ZG91YmxlIG9wZXJhdG9yKyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZG91YmxlIGIp
Cit7CisgICAgcmV0dXJuIGEudG9Eb3VibGUoKSArIGI7Cit9CisKK2lubGluZSBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBvcGVyYXRvcisoY29uc3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBiKQoreworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSArIGI7Cit9CisK
K2lubGluZSBmbG9hdCBvcGVyYXRvcisoY29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEgKyBiLnRvRmxvYXQoKTsKK30KKworaW5saW5l
IGRvdWJsZSBvcGVyYXRvcisoY29uc3QgZG91YmxlIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBiKQoreworICAgIHJldHVybiBhICsgYi50b0RvdWJsZSgpOworfQorCitpbmxpbmUgRnJh
Y3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICBGcmFjdGlvbmFsTGF5b3V0
VW5pdCByZXR1cm5WYWw7CisjaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykK
KyAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUoc2F0dXJhdGVkU3VidHJhY3Rpb24oYS5yYXdWYWx1
ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKKyNlbHNlCisgICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKGEu
cmF3VmFsdWUoKSAtIGIucmF3VmFsdWUoKSk7CisjZW5kaWYKKyAgICByZXR1cm4gcmV0dXJuVmFs
OworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3ItKGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK3sKKyAgICByZXR1cm4gYSAtIEZyYWN0aW9uYWxM
YXlvdXRVbml0KGIpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3It
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCB1bnNpZ25lZCBiKQoreworICAgIHJldHVy
biBhIC0gRnJhY3Rpb25hbExheW91dFVuaXQoYik7Cit9CisKK2lubGluZSBmbG9hdCBvcGVyYXRv
ci0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJu
IGEudG9GbG9hdCgpIC0gYjsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJh
dG9yLShjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAg
cmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpIC0gYjsKK30KKworaW5saW5lIGZsb2F0IG9w
ZXJhdG9yLShjb25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sK
KyAgICByZXR1cm4gYSAtIGIudG9GbG9hdCgpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91
dFVuaXQgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhKQoreworICAgIEZy
YWN0aW9uYWxMYXlvdXRVbml0IHJldHVyblZhbDsKKyAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUo
LWEucmF3VmFsdWUoKSk7CisgICAgcmV0dXJuIHJldHVyblZhbDsKK30KKworLy8gRm9yIHJldHVy
bmluZyB0aGUgcmVtYWluZGVyIGFmdGVyIGEgZGl2aXNpb24gd2l0aCBpbnRlZ2VyIHJlc3VsdHMu
CitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgaW50TW9kKGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyNpZiBFTkFCTEUo
U1VCUElYRUxfTEFZT1VUKQorICAgIC8vIFRoaXMgY2FsY3VsYXRlcyB0aGUgbW9kdWxvIHNvIHRo
YXQ6IGEgPSBzdGF0aWNfY2FzdDxpbnQ+KGEgLyBiKSAqIGIgKyBpbnRNb2QoYSwgYikuCisgICAg
RnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOworICAgIHJldHVyblZhbC5zZXRSYXdWYWx1
ZShhLnJhd1ZhbHVlKCkgJSBiLnJhd1ZhbHVlKCkpOworICAgIHJldHVybiByZXR1cm5WYWw7Cisj
ZWxzZQorICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgJSBiLnJhd1ZhbHVlKCk7CisjZW5kaWYKK30K
KworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yJShjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisjaWYgRU5B
QkxFKFNVQlBJWEVMX0xBWU9VVCkKKyAgICAvLyBUaGlzIGNhbGN1bGF0ZXMgdGhlIG1vZHVsbyBz
byB0aGF0OiBhID0gKGEgLyBiKSAqIGIgKyBhICUgYi4KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dCByZXR1cm5WYWw7CisgICAgbG9uZyBsb25nIHJhd1ZhbCA9IChzdGF0aWNfY2FzdDxsb25nIGxv
bmc+KGtGaXhlZFBvaW50RGVub21pbmF0b3IpICogYS5yYXdWYWx1ZSgpKSAlIGIucmF3VmFsdWUo
KTsKKyAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUocmF3VmFsIC8ga0ZpeGVkUG9pbnREZW5vbWlu
YXRvcik7CisgICAgcmV0dXJuIHJldHVyblZhbDsKKyNlbHNlCisgICAgcmV0dXJuIGEucmF3VmFs
dWUoKSAlIGIucmF3VmFsdWUoKTsKKyNlbmRpZgorfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91
dFVuaXQgb3BlcmF0b3IlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK3sK
KyAgICByZXR1cm4gYSAlIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworfQorCitpbmxpbmUgRnJh
Y3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IlKGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYikKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgJSBiOworfQor
CitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yKz0oRnJhY3Rpb25hbExheW91
dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworI2lmIEVOQUJMRShT
QVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCisgICAgYS5zZXRSYXdWYWx1ZShzYXR1cmF0ZWRB
ZGRpdGlvbihhLnJhd1ZhbHVlKCksIGIucmF3VmFsdWUoKSkpOworI2Vsc2UKKyAgICBhID0gYSAr
IGI7CisjZW5kaWYKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBvcGVyYXRvcis9KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK3sKKyAgICBh
ID0gYSArIGI7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgb3BlcmF0b3IrPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK3sKKyAgICBh
ID0gYSArIGI7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBmbG9hdCYgb3BlcmF0b3IrPShm
bG9hdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgYSA9IGEgKyBi
OworICAgIHJldHVybiBhOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJh
dG9yLT0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQoreworICAgIGEgPSBhIC0gYjsK
KyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRv
ci09KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
YikKK3sKKyNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQorICAgIGEuc2V0
UmF3VmFsdWUoc2F0dXJhdGVkU3VidHJhY3Rpb24oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkp
KTsKKyNlbHNlCisgICAgYSA9IGEgLSBiOworI2VuZGlmCisgICAgcmV0dXJuIGE7Cit9CisKK2lu
bGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3ItPShGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYSwgZmxvYXQgYikKK3sKKyAgICBhID0gYSAtIGI7CisgICAgcmV0dXJuIGE7Cit9CisKK2lu
bGluZSBmbG9hdCYgb3BlcmF0b3ItPShmbG9hdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVu
aXQmIGIpCit7CisgICAgYSA9IGEgLSBiOworICAgIHJldHVybiBhOworfQorCitpbmxpbmUgRnJh
Y3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yKj0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIGEgPSBhICogYjsKKyAgICByZXR1
cm4gYTsKK30KKy8vIG9wZXJhdG9yKj0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKSBp
cyBzdXBwb3J0ZWQgYnkgdGhlIG9wZXJhdG9yIGFib3ZlIHBsdXMgRnJhY3Rpb25hbExheW91dFVu
aXQoaW50KS4KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvcio9KEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQoreworICAgIGEgPSBhICogYjsKKyAgICByZXR1
cm4gYTsKK30KKworaW5saW5lIGZsb2F0JiBvcGVyYXRvcio9KGZsb2F0JiBhLCBjb25zdCBGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICBhID0gYSAqIGI7CisgICAgcmV0dXJuIGE7Cit9
CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3IvPShGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgYSA9IGEg
LyBiOworICAgIHJldHVybiBhOworfQorLy8gb3BlcmF0b3IvPShGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYSwgaW50IGIpIGlzIHN1cHBvcnRlZCBieSB0aGUgb3BlcmF0b3IgYWJvdmUgcGx1cyBGcmFj
dGlvbmFsTGF5b3V0VW5pdChpbnQpLgorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9w
ZXJhdG9yLz0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCit7CisgICAgYSA9IGEg
LyBiOworICAgIHJldHVybiBhOworfQorCitpbmxpbmUgZmxvYXQmIG9wZXJhdG9yLz0oZmxvYXQm
IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIGEgPSBhIC8gYjsKKyAg
ICByZXR1cm4gYTsKK30KKworaW5saW5lIGludCBzbmFwU2l6ZVRvUGl4ZWwoRnJhY3Rpb25hbExh
eW91dFVuaXQgc2l6ZSwgRnJhY3Rpb25hbExheW91dFVuaXQgbG9jYXRpb24pIAoreworICAgIEZy
YWN0aW9uYWxMYXlvdXRVbml0IGZyYWN0aW9uID0gbG9jYXRpb24uZnJhY3Rpb24oKTsKKyAgICBy
ZXR1cm4gKGZyYWN0aW9uICsgc2l6ZSkucm91bmQoKSAtIGZyYWN0aW9uLnJvdW5kKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEZyYWN0aW9uYWxMYXlvdXRVbml0
X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xheW91dFVuaXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYXlvdXRVbml0LmgJKHJldmlzaW9uIDEzMzUx
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xheW91dFVuaXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsOCArMjgsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEZyYWN0
aW9uYWxMYXlvdXRVbml0X2gKLSNkZWZpbmUgRnJhY3Rpb25hbExheW91dFVuaXRfaAorI2lmbmRl
ZiBMYXlvdXRVbml0X2gKKyNkZWZpbmUgTGF5b3V0VW5pdF9oCiAKICNpbmNsdWRlIDxsaW1pdHMu
aD4KICNpbmNsdWRlIDxsaW1pdHM+CkBAIC02MiwxOCArNjIsMTggQEAgc3RhdGljIGNvbnN0IGlu
dCBrRml4ZWRQb2ludERlbm9taW5hdG9yCiBjb25zdCBpbnQgaW50TWF4Rm9yTGF5b3V0VW5pdCA9
IElOVF9NQVggLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOwogY29uc3QgaW50IGludE1pbkZvckxh
eW91dFVuaXQgPSBJTlRfTUlOIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKIAotY2xhc3MgRnJh
Y3Rpb25hbExheW91dFVuaXQgeworY2xhc3MgTGF5b3V0VW5pdCB7CiBwdWJsaWM6CiAgICAgLy8g
RklYTUU6IElkZWFsbHkgd2Ugd291bGQgaGF2ZSBzaXplX3QgdmVyc2lvbnMgb2YgdGhlIGNvbnN0
cnVjdG9yIGFuZCBvcGVyYXRvcnMuCiAgICAgLy8gSG93ZXZlciBkdWUgdG8gY29tcGlsZXIgYW5k
IHBsYXRmb3JtIGRpZmZlcmVuY2VzIGFkZGluZyB0aG9zZSBhcmUgbm9uLXRyaXZpYWwuCiAgICAg
Ly8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mzg0OCBmb3Ig
ZGV0YWlscy4KICAgICAKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCgpIDogbV92YWx1ZSgwKSB7
IH0KKyAgICBMYXlvdXRVbml0KCkgOiBtX3ZhbHVlKDApIHsgfQogI2lmIEVOQUJMRShTVUJQSVhF
TF9MQVlPVVQpCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQoaW50IHZhbHVlKSB7IHNldFZhbHVl
KHZhbHVlKTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KHVuc2lnbmVkIHNob3J0IHZhbHVl
KSB7IHNldFZhbHVlKHZhbHVlKTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KHVuc2lnbmVk
IGludCB2YWx1ZSkgeyBzZXRWYWx1ZSh2YWx1ZSk7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dChmbG9hdCB2YWx1ZSkKKyAgICBMYXlvdXRVbml0KGludCB2YWx1ZSkgeyBzZXRWYWx1ZSh2YWx1
ZSk7IH0KKyAgICBMYXlvdXRVbml0KHVuc2lnbmVkIHNob3J0IHZhbHVlKSB7IHNldFZhbHVlKHZh
bHVlKTsgfQorICAgIExheW91dFVuaXQodW5zaWduZWQgdmFsdWUpIHsgc2V0VmFsdWUodmFsdWUp
OyB9CisgICAgTGF5b3V0VW5pdChmbG9hdCB2YWx1ZSkKICAgICB7CiAjaWYgRU5BQkxFKFNBVFVS
QVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKICAgICAgICAgbV92YWx1ZSA9IGNsYW1wVG88ZmxvYXQ+
KHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvciwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KElOVF9N
SU4pLCBzdGF0aWNfY2FzdDxmbG9hdD4oSU5UX01BWCkpOwpAQCAtODIsNyArODIsNyBAQCBwdWJs
aWM6CiAgICAgICAgIG1fdmFsdWUgPSB2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3I7CiAj
ZW5kaWYKICAgICB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQoZG91YmxlIHZhbHVlKQorICAg
IExheW91dFVuaXQoZG91YmxlIHZhbHVlKQogICAgIHsKICNpZiBFTkFCTEUoU0FUVVJBVEVEX0xB
WU9VVF9BUklUSE1FVElDKQogICAgICAgICBtX3ZhbHVlID0gY2xhbXBUbzxkb3VibGU+KHZhbHVl
ICoga0ZpeGVkUG9pbnREZW5vbWluYXRvciwgc3RhdGljX2Nhc3Q8ZG91YmxlPihJTlRfTUlOKSwg
c3RhdGljX2Nhc3Q8ZG91YmxlPihJTlRfTUFYKSk7CkBAIC05MiwxNyArOTIsMTcgQEAgcHVibGlj
OgogI2VuZGlmCiAgICAgfQogI2Vsc2UKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdChpbnQgdmFs
dWUpIHsgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsgbV92YWx1ZSA9IHZhbHVl
OyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQodW5zaWduZWQgc2hvcnQgdmFsdWUpIHsgUkVQ
T1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsgbV92YWx1ZSA9IHZhbHVlOyB9Ci0gICAg
RnJhY3Rpb25hbExheW91dFVuaXQodW5zaWduZWQgaW50IHZhbHVlKSB7IFJFUE9SVF9PVkVSRkxP
Vyhpc0luQm91bmRzKHZhbHVlKSk7IG1fdmFsdWUgPSB2YWx1ZTsgfQotICAgIEZyYWN0aW9uYWxM
YXlvdXRVbml0KGZsb2F0IHZhbHVlKSB7IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVl
KSk7IG1fdmFsdWUgPSB2YWx1ZTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KGRvdWJsZSB2
YWx1ZSkgeyBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFs
dWU7IH0KKyAgICBMYXlvdXRVbml0KGludCB2YWx1ZSkgeyBSRVBPUlRfT1ZFUkZMT1coaXNJbkJv
dW5kcyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFsdWU7IH0KKyAgICBMYXlvdXRVbml0KHVuc2lnbmVk
IHNob3J0IHZhbHVlKSB7IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7IG1fdmFs
dWUgPSB2YWx1ZTsgfQorICAgIExheW91dFVuaXQodW5zaWduZWQgdmFsdWUpIHsgUkVQT1JUX09W
RVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsgbV92YWx1ZSA9IHZhbHVlOyB9CisgICAgTGF5b3V0
VW5pdChmbG9hdCB2YWx1ZSkgeyBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOyBt
X3ZhbHVlID0gdmFsdWU7IH0KKyAgICBMYXlvdXRVbml0KGRvdWJsZSB2YWx1ZSkgeyBSRVBPUlRf
T1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFsdWU7IH0KICNlbmRpZgot
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiB2YWx1
ZSkgeyBtX3ZhbHVlID0gdmFsdWUucmF3VmFsdWUoKTsgfQorICAgIExheW91dFVuaXQoY29uc3Qg
TGF5b3V0VW5pdCYgdmFsdWUpIHsgbV92YWx1ZSA9IHZhbHVlLnJhd1ZhbHVlKCk7IH0KIAotICAg
IHN0YXRpYyBGcmFjdGlvbmFsTGF5b3V0VW5pdCBmcm9tRmxvYXRDZWlsKGZsb2F0IHZhbHVlKQor
ICAgIHN0YXRpYyBMYXlvdXRVbml0IGZyb21GbG9hdENlaWwoZmxvYXQgdmFsdWUpCiAgICAgewot
ICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB2OworICAgICAgICBMYXlvdXRVbml0IHY7CiAj
aWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKICAgICAgICAgdi5tX3ZhbHVl
ID0gY2xhbXBUb0ludGVnZXIoY2VpbGYodmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yKSk7
CiAjZWxzZQpAQCAtMTEyLDkgKzExMiw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHY7CiAg
ICAgfQogCi0gICAgc3RhdGljIEZyYWN0aW9uYWxMYXlvdXRVbml0IGZyb21GbG9hdEZsb29yKGZs
b2F0IHZhbHVlKQorICAgIHN0YXRpYyBMYXlvdXRVbml0IGZyb21GbG9hdEZsb29yKGZsb2F0IHZh
bHVlKQogICAgIHsKLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgdjsKKyAgICAgICAgTGF5
b3V0VW5pdCB2OwogI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCiAgICAg
ICAgIHYubV92YWx1ZSA9IGNsYW1wVG9JbnRlZ2VyKGZsb29yZih2YWx1ZSAqIGtGaXhlZFBvaW50
RGVub21pbmF0b3IpKTsKICNlbHNlCkBAIC0xMjQsNyArMTI0LDcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gdjsKICAgICB9CiAKLSAgICBzdGF0aWMgRnJhY3Rpb25hbExheW91dFVuaXQgZnJv
bUZsb2F0Um91bmQoZmxvYXQgdmFsdWUpCisgICAgc3RhdGljIExheW91dFVuaXQgZnJvbUZsb2F0
Um91bmQoZmxvYXQgdmFsdWUpCiAgICAgewogI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FS
SVRITUVUSUMpCiAgICAgICAgIGlmICh2YWx1ZSA+PSAwKQpAQCAtMTMzLDEwICsxMzMsMTAgQEAg
cHVibGljOgogI2Vsc2UKICAgICAgICAgaWYgKHZhbHVlID49IDApIHsKICAgICAgICAgICAgIFJF
UE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlICsgZXBzaWxvbigpIC8gMi4wZikpOwotICAg
ICAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KHZhbHVlICsgZXBzaWxvbigpIC8g
Mi4wZik7CisgICAgICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCh2YWx1ZSArIGVwc2lsb24oKSAv
IDIuMGYpOwogICAgICAgICB9CiAgICAgICAgIFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZh
bHVlIC0gZXBzaWxvbigpIC8gMi4wZikpOwotICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91
dFVuaXQodmFsdWUgLSBlcHNpbG9uKCkgLyAyLjBmKTsKKyAgICAgICAgcmV0dXJuIExheW91dFVu
aXQodmFsdWUgLSBlcHNpbG9uKCkgLyAyLjBmKTsKICNlbmRpZgogICAgIH0KIApAQCAtMTY3LDcg
KzE2Nyw3IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBkb3VibGUoKSBjb25zdCB7IHJldHVybiB0
b0RvdWJsZSgpOyB9CiAgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7
IH0KIAotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKysoaW50KQorICAgIExheW91
dFVuaXQgb3BlcmF0b3IrKyhpbnQpCiAgICAgewogICAgICAgICBtX3ZhbHVlICs9IGtGaXhlZFBv
aW50RGVub21pbmF0b3I7CiAgICAgICAgIHJldHVybiAqdGhpczsKQEAgLTE4MSw5ICsxODEsOSBA
QCBwdWJsaWM6CiAgICAgICAgIG1fdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKTsKICAg
ICB9CiAKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBhYnMoKSBjb25zdAorICAgIExheW91dFVu
aXQgYWJzKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJldHVy
blZhbHVlOworICAgICAgICBMYXlvdXRVbml0IHJldHVyblZhbHVlOwogICAgICAgICByZXR1cm5W
YWx1ZS5zZXRSYXdWYWx1ZSg6OmFicyhtX3ZhbHVlKSk7CiAgICAgICAgIHJldHVybiByZXR1cm5W
YWx1ZTsKICAgICB9CkBAIC0yMjcsMTEgKzIyNywxMSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9
CiAKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBmcmFjdGlvbigpIGNvbnN0CisgICAgTGF5b3V0
VW5pdCBmcmFjdGlvbigpIGNvbnN0CiAgICAgeyAgIAogICAgICAgICAvLyBBZGQgdGhlIGZyYWN0
aW9uIHRvIHRoZSBzaXplIChhcyBvcHBvc2VkIHRvIHRoZSBmdWxsIGxvY2F0aW9uKSB0byBhdm9p
ZCBvdmVyZmxvd3MuCiAgICAgICAgIC8vIENvbXB1dGUgZnJhY3Rpb24gdXNpbmcgdGhlIG1vZCBv
cGVyYXRvciB0byBwcmVzZXJ2ZSB0aGUgc2lnbiBvZiB0aGUgdmFsdWUgYXMgaXQgbWF5IGFmZmVj
dCByb3VuZGluZy4KLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZnJhY3Rpb247CisgICAg
ICAgIExheW91dFVuaXQgZnJhY3Rpb247CiAgICAgICAgIGZyYWN0aW9uLnNldFJhd1ZhbHVlKHJh
d1ZhbHVlKCkgJSBrRml4ZWRQb2ludERlbm9taW5hdG9yKTsKICAgICAgICAgcmV0dXJuIGZyYWN0
aW9uOwogICAgIH0KQEAgLTI0MSwzNiArMjQxLDM2IEBAIHB1YmxpYzoKICNlbHNlCiAgICAgc3Rh
dGljIGludCBlcHNpbG9uKCkgeyByZXR1cm4gMDsgfQogI2VuZGlmCi0gICAgc3RhdGljIGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0IG1heCgpCisgICAgc3RhdGljIGNvbnN0IExheW91dFVuaXQg
bWF4KCkKICAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG07CisgICAgICAgIExh
eW91dFVuaXQgbTsKICAgICAgICAgbS5tX3ZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptYXgoKTsKICAgICAgICAgcmV0dXJuIG07CiAgICAgfQotICAgIHN0YXRpYyBjb25zdCBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBtaW4oKQorICAgIHN0YXRpYyBjb25zdCBMYXlvdXRVbml0IG1pbigp
CiAgICAgewotICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtOworICAgICAgICBMYXlvdXRV
bml0IG07CiAgICAgICAgIG0ubV92YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWlu
KCk7CiAgICAgICAgIHJldHVybiBtOwogICAgIH0KIAogICAgIC8vIFZlcnNpb25zIG9mIG1heC9t
aW4gdGhhdCBhcmUgc2xpZ2h0bHkgc21hbGxlci9sYXJnZXIgdGhhbiBtYXgvbWluKCkgdG8gYWxs
b3cgZm9yIHJvaW5kaW5nIHdpdGhvdXQgb3ZlcmZsb3dpbmcuCi0gICAgc3RhdGljIGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRVbml0IG5lYXJseU1heCgpCisgICAgc3RhdGljIGNvbnN0IExheW91dFVu
aXQgbmVhcmx5TWF4KCkKICAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG07Cisg
ICAgICAgIExheW91dFVuaXQgbTsKICAgICAgICAgbS5tX3ZhbHVlID0gc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKSAtIGtGaXhlZFBvaW50RGVub21pbmF0b3IgLyAyOwogICAgICAgICBy
ZXR1cm4gbTsKICAgICB9Ci0gICAgc3RhdGljIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0IG5l
YXJseU1pbigpCisgICAgc3RhdGljIGNvbnN0IExheW91dFVuaXQgbmVhcmx5TWluKCkKICAgICB7
Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG07CisgICAgICAgIExheW91dFVuaXQgbTsK
ICAgICAgICAgbS5tX3ZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSArIGtG
aXhlZFBvaW50RGVub21pbmF0b3IgLyAyOwogICAgICAgICByZXR1cm4gbTsKICAgICB9CiAgICAg
Ci0gICAgc3RhdGljIEZyYWN0aW9uYWxMYXlvdXRVbml0IGNsYW1wKGRvdWJsZSB2YWx1ZSkKKyAg
ICBzdGF0aWMgTGF5b3V0VW5pdCBjbGFtcChkb3VibGUgdmFsdWUpCiAgICAgewotICAgICAgICBy
ZXR1cm4gY2xhbXBUbzxGcmFjdGlvbmFsTGF5b3V0VW5pdD4odmFsdWUsIEZyYWN0aW9uYWxMYXlv
dXRVbml0OjptaW4oKSwgRnJhY3Rpb25hbExheW91dFVuaXQ6Om1heCgpKTsKKyAgICAgICAgcmV0
dXJuIGNsYW1wVG88TGF5b3V0VW5pdD4odmFsdWUsIExheW91dFVuaXQ6Om1pbigpLCBMYXlvdXRV
bml0OjptYXgoKSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMzE3LDE3NiArMzE3LDE3NiBAQCBw
cml2YXRlOgogICAgIGludCBtX3ZhbHVlOwogfTsKIAotaW5saW5lIGJvb2wgb3BlcmF0b3I8PShj
b25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IExheW91dFVuaXQmIGEsIGNvbnN0IExh
eW91dFVuaXQmIGIpCiB7CiAgICAgcmV0dXJuIGEucmF3VmFsdWUoKSA8PSBiLnJhd1ZhbHVlKCk7
CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGEsIGZsb2F0IGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IExheW91dFVuaXQmIGEs
IGZsb2F0IGIpCiB7CiAgICAgcmV0dXJuIGEudG9GbG9hdCgpIDw9IGI7CiB9CiAKLWlubGluZSBi
b29sIG9wZXJhdG9yPD0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQoraW5s
aW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBMYXlvdXRVbml0JiBhLCBpbnQgYikKIHsKLSAgICBy
ZXR1cm4gYSA8PSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKKyAgICByZXR1cm4gYSA8PSBMYXlv
dXRVbml0KGIpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IGZsb2F0IGEsIGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25z
dCBmbG9hdCBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewogICAgIHJldHVybiBhIDw9IGIudG9G
bG9hdCgpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IGludCBhLCBjb25zdCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgaW50
IGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRV
bml0KGEpIDw9IGI7CisgICAgcmV0dXJuIExheW91dFVuaXQoYSkgPD0gYjsKIH0KIAotaW5saW5l
IGJvb2wgb3BlcmF0b3I+PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IExheW91
dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAgICAgcmV0dXJuIGEucmF3VmFsdWUo
KSA+PSBiLnJhd1ZhbHVlKCk7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25z
dCBMYXlvdXRVbml0JiBhLCBpbnQgYikKIHsKLSAgICByZXR1cm4gYSA+PSBGcmFjdGlvbmFsTGF5
b3V0VW5pdChiKTsKKyAgICByZXR1cm4gYSA+PSBMYXlvdXRVbml0KGIpOwogfQogCi1pbmxpbmUg
Ym9vbCBvcGVyYXRvcj49KGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBmbG9hdCBhLCBjb25zdCBMYXlvdXRV
bml0JiBiKQogewogICAgIHJldHVybiBhID49IGIudG9GbG9hdCgpOwogfQogCi1pbmxpbmUgYm9v
bCBvcGVyYXRvcj49KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQoraW5s
aW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQogewogICAg
IHJldHVybiBhLnRvRmxvYXQoKSA+PSBiOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNv
bnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBib29sIG9w
ZXJhdG9yPj0oY29uc3QgaW50IGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7Ci0gICAgcmV0dXJu
IEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpID49IGI7CisgICAgcmV0dXJuIExheW91dFVuaXQoYSkg
Pj0gYjsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBib29sIG9wZXJh
dG9yPChjb25zdCBMYXlvdXRVbml0JiBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewogICAgIHJl
dHVybiBhLnJhd1ZhbHVlKCkgPCBiLnJhd1ZhbHVlKCk7CiB9CiAKLWlubGluZSBib29sIG9wZXJh
dG9yPChjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCitpbmxpbmUgYm9vbCBv
cGVyYXRvcjwoY29uc3QgTGF5b3V0VW5pdCYgYSwgaW50IGIpCiB7Ci0gICAgcmV0dXJuIGEgPCBG
cmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKKyAgICByZXR1cm4gYSA8IExheW91dFVuaXQoYik7CiB9
CiAKLWlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwg
ZmxvYXQgYikKK2lubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBMYXlvdXRVbml0JiBhLCBmbG9h
dCBiKQogewogICAgIHJldHVybiBhLnRvRmxvYXQoKSA8IGI7CiB9CiAKLWlubGluZSBib29sIG9w
ZXJhdG9yPChjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZG91YmxlIGIpCitpbmxpbmUg
Ym9vbCBvcGVyYXRvcjwoY29uc3QgTGF5b3V0VW5pdCYgYSwgZG91YmxlIGIpCiB7CiAgICAgcmV0
dXJuIGEudG9Eb3VibGUoKSA8IGI7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBp
bnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRv
cjwoY29uc3QgaW50IGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7Ci0gICAgcmV0dXJuIEZyYWN0
aW9uYWxMYXlvdXRVbml0KGEpIDwgYjsKKyAgICByZXR1cm4gTGF5b3V0VW5pdChhKSA8IGI7CiB9
CiAKLWlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYikKK2lubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBmbG9hdCBhLCBjb25z
dCBMYXlvdXRVbml0JiBiKQogewogICAgIHJldHVybiBhIDwgYi50b0Zsb2F0KCk7CiB9CiAKLWlu
bGluZSBib29sIG9wZXJhdG9yPihjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3Qg
RnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgTGF5
b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1cm4gYS5yYXdWYWx1
ZSgpID4gYi5yYXdWYWx1ZSgpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGEsIGRvdWJsZSBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I+KGNv
bnN0IExheW91dFVuaXQmIGEsIGRvdWJsZSBiKQogewogICAgIHJldHVybiBhLnRvRG91YmxlKCkg
PiBiOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgRnJhY3Rpb25hbExheW91dFVu
aXQmIGEsIGZsb2F0IGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgTGF5b3V0VW5pdCYg
YSwgZmxvYXQgYikKIHsKICAgICByZXR1cm4gYS50b0Zsb2F0KCkgPiBiOwogfQogCi1pbmxpbmUg
Ym9vbCBvcGVyYXRvcj4oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQoraW5s
aW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IExheW91dFVuaXQmIGEsIGludCBiKQogewotICAgIHJl
dHVybiBhID4gRnJhY3Rpb25hbExheW91dFVuaXQoYik7CisgICAgcmV0dXJuIGEgPiBMYXlvdXRV
bml0KGIpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgaW50IGEsIGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IGludCBh
LCBjb25zdCBMYXlvdXRVbml0JiBiKQogewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5p
dChhKSA+IGI7CisgICAgcmV0dXJuIExheW91dFVuaXQoYSkgPiBiOwogfQogCi1pbmxpbmUgYm9v
bCBvcGVyYXRvcj4oY29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIp
CitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgZmxvYXQgYSwgY29uc3QgTGF5b3V0VW5pdCYg
YikKIHsKICAgICByZXR1cm4gYSA+IGIudG9GbG9hdCgpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVy
YXRvcj4oY29uc3QgZG91YmxlIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5s
aW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IGRvdWJsZSBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQog
ewogICAgIHJldHVybiBhID4gYi50b0RvdWJsZSgpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYikKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgTGF5b3V0VW5pdCYgYSwgY29u
c3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1cm4gYS5yYXdWYWx1ZSgpICE9IGIucmF3VmFs
dWUoKTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYSwgZmxvYXQgYikKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgTGF5b3V0VW5p
dCYgYSwgZmxvYXQgYikKIHsKLSAgICByZXR1cm4gYSAhPSBGcmFjdGlvbmFsTGF5b3V0VW5pdChi
KTsKKyAgICByZXR1cm4gYSAhPSBMYXlvdXRVbml0KGIpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgaW50IGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7Ci0g
ICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpICE9IGI7CisgICAgcmV0dXJuIExheW91
dFVuaXQoYSkgIT0gYjsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IExh
eW91dFVuaXQmIGEsIGludCBiKQogewotICAgIHJldHVybiBhICE9IEZyYWN0aW9uYWxMYXlvdXRV
bml0KGIpOworICAgIHJldHVybiBhICE9IExheW91dFVuaXQoYik7CiB9CiAKLWlubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMYXlvdXRVbml0
JiBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewogICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgPT0g
Yi5yYXdWYWx1ZSgpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgTGF5
b3V0VW5pdCYgYSwgaW50IGIpCiB7Ci0gICAgcmV0dXJuIGEgPT0gRnJhY3Rpb25hbExheW91dFVu
aXQoYik7CisgICAgcmV0dXJuIGEgPT0gTGF5b3V0VW5pdChiKTsKIH0KIAotaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGludCBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQog
ewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSA9PSBiOworICAgIHJldHVybiBM
YXlvdXRVbml0KGEpID09IGI7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IExheW91dFVuaXQmIGEsIGZsb2F0IGIpCiB7CiAgICAgcmV0dXJuIGEudG9GbG9hdCgpID09
IGI7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgZmxvYXQgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGZsb2F0
IGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAgICAgcmV0dXJuIGEgPT0gYi50b0Zsb2F0KCk7
CiB9CiAKLS8vIEZvciBtdWx0aXBsaWNhdGlvbiB0aGF0J3MgcHJvbmUgdG8gb3ZlcmZsb3csIHRo
aXMgYm91bmRzIGl0IHRvIEZyYWN0aW9uYWxMYXlvdXRVbml0OjptYXgoKSBhbmQgOjptaW4oKQot
aW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IGJvdW5kZWRNdWx0aXBseShjb25zdCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCisvLyBGb3Ig
bXVsdGlwbGljYXRpb24gdGhhdCdzIHByb25lIHRvIG92ZXJmbG93LCB0aGlzIGJvdW5kcyBpdCB0
byBMYXlvdXRVbml0OjptYXgoKSBhbmQgOjptaW4oKQoraW5saW5lIExheW91dFVuaXQgYm91bmRl
ZE11bHRpcGx5KGNvbnN0IExheW91dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAj
aWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1
cm5WYWw7CisgICAgTGF5b3V0VW5pdCByZXR1cm5WYWw7CiAgICAgbG9uZyBsb25nIHJhd1ZhbCA9
IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oYS5yYXdWYWx1ZSgpKSAqIGIucmF3VmFsdWUoKSAvIGtG
aXhlZFBvaW50RGVub21pbmF0b3I7CiAgICAgaWYgKHJhd1ZhbCA+IHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50Pjo6bWF4KCkpCi0gICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWF4
KCk7CisgICAgICAgIHJldHVybiBMYXlvdXRVbml0OjptYXgoKTsKICAgICBpZiAocmF3VmFsIDwg
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSkKLSAgICAgICAgcmV0dXJuIEZyYWN0aW9u
YWxMYXlvdXRVbml0OjptaW4oKTsKKyAgICAgICAgcmV0dXJuIExheW91dFVuaXQ6Om1pbigpOwog
ICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShyYXdWYWwpOwogICAgIHJldHVybiByZXR1cm5WYWw7
CiAjZWxzZQpAQCAtNDk0LDEyICs0OTQsMTIgQEAgaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0
IGJvdW5kZWRNdWx0aQogI2VuZGlmCiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBv
cGVyYXRvciooY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRVbml0JiBiKQoraW5saW5lIExheW91dFVuaXQgb3BlcmF0b3IqKGNvbnN0IExheW91dFVu
aXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9V
VCkgJiYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKICAgICByZXR1cm4gYm91
bmRlZE11bHRpcGx5KGEsIGIpOwogI2VsaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICBG
cmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7CisgICAgTGF5b3V0VW5pdCByZXR1cm5WYWw7
CiAgICAgbG9uZyBsb25nIHJhd1ZhbCA9IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oYS5yYXdWYWx1
ZSgpKSAqIGIucmF3VmFsdWUoKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7CiAgICAgcmV0dXJu
VmFsLnNldFJhd1ZhbHVlKHJhd1ZhbCk7CiAgICAgcmV0dXJuIHJldHVyblZhbDsKQEAgLTUwOCw1
MCArNTA4LDUwIEBAIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvciooY28KICNl
bmRpZgogfSAgICAKIAotaW5saW5lIGRvdWJsZSBvcGVyYXRvciooY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGEsIGRvdWJsZSBiKQoraW5saW5lIGRvdWJsZSBvcGVyYXRvciooY29uc3QgTGF5
b3V0VW5pdCYgYSwgZG91YmxlIGIpCiB7CiAgICAgcmV0dXJuIGEudG9Eb3VibGUoKSAqIGI7CiB9
CiAKLWlubGluZSBmbG9hdCBvcGVyYXRvciooY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEs
IGZsb2F0IGIpCitpbmxpbmUgZmxvYXQgb3BlcmF0b3IqKGNvbnN0IExheW91dFVuaXQmIGEsIGZs
b2F0IGIpCiB7CiAgICAgcmV0dXJuIGEudG9GbG9hdCgpICogYjsKIH0KIAotaW5saW5lIEZyYWN0
aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKihjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwg
aW50IGIpCitpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvciooY29uc3QgTGF5b3V0VW5pdCYgYSwg
aW50IGIpCiB7Ci0gICAgcmV0dXJuIGEgKiBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKKyAgICBy
ZXR1cm4gYSAqIExheW91dFVuaXQoYik7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBvcGVyYXRvciooY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIHVuc2lnbmVkIGIpCitp
bmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvciooY29uc3QgTGF5b3V0VW5pdCYgYSwgdW5zaWduZWQg
YikKIHsKLSAgICByZXR1cm4gYSAqIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworICAgIHJldHVy
biBhICogTGF5b3V0VW5pdChiKTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9w
ZXJhdG9yKih1bnNpZ25lZCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGlu
ZSBMYXlvdXRVbml0IG9wZXJhdG9yKih1bnNpZ25lZCBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQog
ewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSAqIGI7CisgICAgcmV0dXJuIExh
eW91dFVuaXQoYSkgKiBiOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0
b3IqKGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBM
YXlvdXRVbml0IG9wZXJhdG9yKihjb25zdCBpbnQgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsK
LSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgKiBiOworICAgIHJldHVybiBMYXlv
dXRVbml0KGEpICogYjsKIH0KIAotaW5saW5lIGZsb2F0IG9wZXJhdG9yKihjb25zdCBmbG9hdCBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBmbG9hdCBvcGVyYXRvcioo
Y29uc3QgZmxvYXQgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1cm4gYSAqIGIu
dG9GbG9hdCgpOwogfQogCi1pbmxpbmUgZG91YmxlIG9wZXJhdG9yKihjb25zdCBkb3VibGUgYSwg
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgZG91YmxlIG9wZXJhdG9yKihj
b25zdCBkb3VibGUgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1cm4gYSAqIGIu
dG9Eb3VibGUoKTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLyhj
b25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGIpCitpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvci8oY29uc3QgTGF5b3V0VW5pdCYgYSwgY29u
c3QgTGF5b3V0VW5pdCYgYikKIHsKICNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAgIEZy
YWN0aW9uYWxMYXlvdXRVbml0IHJldHVyblZhbDsKKyAgICBMYXlvdXRVbml0IHJldHVyblZhbDsK
ICAgICBsb25nIGxvbmcgcmF3VmFsID0gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihrRml4ZWRQb2lu
dERlbm9taW5hdG9yKSAqIGEucmF3VmFsdWUoKSAvIGIucmF3VmFsdWUoKTsKICAgICByZXR1cm5W
YWwuc2V0UmF3VmFsdWUocmF3VmFsKTsKICAgICByZXR1cm4gcmV0dXJuVmFsOwpAQCAtNTYwLDQ5
ICs1NjAsNDkgQEAgaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLyhjbwogI2Vu
ZGlmCiB9ICAgIAogCi1pbmxpbmUgZmxvYXQgb3BlcmF0b3IvKGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBhLCBmbG9hdCBiKQoraW5saW5lIGZsb2F0IG9wZXJhdG9yLyhjb25zdCBMYXlvdXRV
bml0JiBhLCBmbG9hdCBiKQogewogICAgIHJldHVybiBhLnRvRmxvYXQoKSAvIGI7CiB9CiAKLWlu
bGluZSBkb3VibGUgb3BlcmF0b3IvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBkb3Vi
bGUgYikKK2lubGluZSBkb3VibGUgb3BlcmF0b3IvKGNvbnN0IExheW91dFVuaXQmIGEsIGRvdWJs
ZSBiKQogewogICAgIHJldHVybiBhLnRvRG91YmxlKCkgLyBiOwogfQogCi1pbmxpbmUgRnJhY3Rp
b25hbExheW91dFVuaXQgb3BlcmF0b3IvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBp
bnQgYikKK2lubGluZSBMYXlvdXRVbml0IG9wZXJhdG9yLyhjb25zdCBMYXlvdXRVbml0JiBhLCBp
bnQgYikKIHsKLSAgICByZXR1cm4gYSAvIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworICAgIHJl
dHVybiBhIC8gTGF5b3V0VW5pdChiKTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0
IG9wZXJhdG9yLyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgdW5zaWduZWQgaW50IGIp
CitpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvci8oY29uc3QgTGF5b3V0VW5pdCYgYSwgdW5zaWdu
ZWQgYikKIHsKLSAgICByZXR1cm4gYSAvIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworICAgIHJl
dHVybiBhIC8gTGF5b3V0VW5pdChiKTsKIH0KIAotaW5saW5lIGZsb2F0IG9wZXJhdG9yLyhjb25z
dCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBmbG9hdCBv
cGVyYXRvci8oY29uc3QgZmxvYXQgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1
cm4gYSAvIGIudG9GbG9hdCgpOwogfQogCi1pbmxpbmUgZG91YmxlIG9wZXJhdG9yLyhjb25zdCBk
b3VibGUgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgZG91YmxlIG9w
ZXJhdG9yLyhjb25zdCBkb3VibGUgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1
cm4gYSAvIGIudG9Eb3VibGUoKTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9w
ZXJhdG9yLyhjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxp
bmUgTGF5b3V0VW5pdCBvcGVyYXRvci8oY29uc3QgaW50IGEsIGNvbnN0IExheW91dFVuaXQmIGIp
CiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpIC8gYjsKKyAgICByZXR1cm4g
TGF5b3V0VW5pdChhKSAvIGI7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVy
YXRvci8odW5zaWduZWQgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5s
aW5lIExheW91dFVuaXQgb3BlcmF0b3IvKHVuc2lnbmVkIGEsIGNvbnN0IExheW91dFVuaXQmIGIp
CiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpIC8gYjsKKyAgICByZXR1cm4g
TGF5b3V0VW5pdChhKSAvIGI7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVy
YXRvcisoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBiKQoraW5saW5lIExheW91dFVuaXQgb3BlcmF0b3IrKGNvbnN0IExheW91dFVuaXQm
IGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0
dXJuVmFsOworICAgIExheW91dFVuaXQgcmV0dXJuVmFsOwogI2lmIEVOQUJMRShTQVRVUkFURURf
TEFZT1VUX0FSSVRITUVUSUMpCiAgICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKHNhdHVyYXRlZEFk
ZGl0aW9uKGEucmF3VmFsdWUoKSwgYi5yYXdWYWx1ZSgpKSk7CiAjZWxzZQpAQCAtNjExLDM5ICs2
MTEsMzkgQEAgaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKyhjbwogICAgIHJl
dHVybiByZXR1cm5WYWw7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRv
cisoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQoraW5saW5lIExheW91dFVu
aXQgb3BlcmF0b3IrKGNvbnN0IExheW91dFVuaXQmIGEsIGludCBiKQogewotICAgIHJldHVybiBh
ICsgRnJhY3Rpb25hbExheW91dFVuaXQoYik7CisgICAgcmV0dXJuIGEgKyBMYXlvdXRVbml0KGIp
OwogfQogCi1pbmxpbmUgZmxvYXQgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBhLCBmbG9hdCBiKQoraW5saW5lIGZsb2F0IG9wZXJhdG9yKyhjb25zdCBMYXlvdXRVbml0JiBh
LCBmbG9hdCBiKQogewogICAgIHJldHVybiBhLnRvRmxvYXQoKSArIGI7CiB9CiAKLWlubGluZSBk
b3VibGUgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBkb3VibGUgYikK
K2lubGluZSBkb3VibGUgb3BlcmF0b3IrKGNvbnN0IExheW91dFVuaXQmIGEsIGRvdWJsZSBiKQog
ewogICAgIHJldHVybiBhLnRvRG91YmxlKCkgKyBiOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExh
eW91dFVuaXQgb3BlcmF0b3IrKGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYikKK2lubGluZSBMYXlvdXRVbml0IG9wZXJhdG9yKyhjb25zdCBpbnQgYSwgY29uc3QgTGF5
b3V0VW5pdCYgYikKIHsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgKyBiOwor
ICAgIHJldHVybiBMYXlvdXRVbml0KGEpICsgYjsKIH0KIAotaW5saW5lIGZsb2F0IG9wZXJhdG9y
Kyhjb25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBm
bG9hdCBvcGVyYXRvcisoY29uc3QgZmxvYXQgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAg
ICByZXR1cm4gYSArIGIudG9GbG9hdCgpOwogfQogCi1pbmxpbmUgZG91YmxlIG9wZXJhdG9yKyhj
b25zdCBkb3VibGUgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgZG91
YmxlIG9wZXJhdG9yKyhjb25zdCBkb3VibGUgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAg
ICByZXR1cm4gYSArIGIudG9Eb3VibGUoKTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRV
bml0IG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rp
b25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvci0oY29uc3QgTGF5
b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKLSAgICBGcmFjdGlvbmFsTGF5b3V0
VW5pdCByZXR1cm5WYWw7CisgICAgTGF5b3V0VW5pdCByZXR1cm5WYWw7CiAjaWYgRU5BQkxFKFNB
VFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKICAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUoc2F0
dXJhdGVkU3VidHJhY3Rpb24oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKICNlbHNlCkBA
IC02NTIsNDQgKzY1Miw0NCBAQCBpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3It
KGNvCiAgICAgcmV0dXJuIHJldHVyblZhbDsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRV
bml0IG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCitpbmxp
bmUgTGF5b3V0VW5pdCBvcGVyYXRvci0oY29uc3QgTGF5b3V0VW5pdCYgYSwgaW50IGIpCiB7Ci0g
ICAgcmV0dXJuIGEgLSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKKyAgICByZXR1cm4gYSAtIExh
eW91dFVuaXQoYik7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci0o
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIHVuc2lnbmVkIGIpCitpbmxpbmUgTGF5b3V0
VW5pdCBvcGVyYXRvci0oY29uc3QgTGF5b3V0VW5pdCYgYSwgdW5zaWduZWQgYikKIHsKLSAgICBy
ZXR1cm4gYSAtIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworICAgIHJldHVybiBhIC0gTGF5b3V0
VW5pdChiKTsKIH0KIAotaW5saW5lIGZsb2F0IG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgYSwgZmxvYXQgYikKK2lubGluZSBmbG9hdCBvcGVyYXRvci0oY29uc3QgTGF5b3V0
VW5pdCYgYSwgZmxvYXQgYikKIHsKICAgICByZXR1cm4gYS50b0Zsb2F0KCkgLSBiOwogfQogCi1p
bmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3ItKGNvbnN0IGludCBhLCBjb25zdCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBMYXlvdXRVbml0IG9wZXJhdG9yLShjb25z
dCBpbnQgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExh
eW91dFVuaXQoYSkgLSBiOworICAgIHJldHVybiBMYXlvdXRVbml0KGEpIC0gYjsKIH0KIAotaW5s
aW5lIGZsb2F0IG9wZXJhdG9yLShjb25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYikKK2lubGluZSBmbG9hdCBvcGVyYXRvci0oY29uc3QgZmxvYXQgYSwgY29uc3QgTGF5
b3V0VW5pdCYgYikKIHsKICAgICByZXR1cm4gYSAtIGIudG9GbG9hdCgpOwogfQogCi1pbmxpbmUg
RnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBhKQoraW5saW5lIExheW91dFVuaXQgb3BlcmF0b3ItKGNvbnN0IExheW91dFVuaXQmIGEpCiB7
Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOworICAgIExheW91dFVuaXQgcmV0
dXJuVmFsOwogICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZSgtYS5yYXdWYWx1ZSgpKTsKICAgICBy
ZXR1cm4gcmV0dXJuVmFsOwogfQogCiAvLyBGb3IgcmV0dXJuaW5nIHRoZSByZW1haW5kZXIgYWZ0
ZXIgYSBkaXZpc2lvbiB3aXRoIGludGVnZXIgcmVzdWx0cy4KLWlubGluZSBGcmFjdGlvbmFsTGF5
b3V0VW5pdCBpbnRNb2QoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIExheW91dFVuaXQgaW50TW9kKGNvbnN0IExheW91
dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAjaWYgRU5BQkxFKFNVQlBJWEVMX0xB
WU9VVCkKICAgICAvLyBUaGlzIGNhbGN1bGF0ZXMgdGhlIG1vZHVsbyBzbyB0aGF0OiBhID0gc3Rh
dGljX2Nhc3Q8aW50PihhIC8gYikgKiBiICsgaW50TW9kKGEsIGIpLgotICAgIEZyYWN0aW9uYWxM
YXlvdXRVbml0IHJldHVyblZhbDsKKyAgICBMYXlvdXRVbml0IHJldHVyblZhbDsKICAgICByZXR1
cm5WYWwuc2V0UmF3VmFsdWUoYS5yYXdWYWx1ZSgpICUgYi5yYXdWYWx1ZSgpKTsKICAgICByZXR1
cm4gcmV0dXJuVmFsOwogI2Vsc2UKQEAgLTY5NywxMSArNjk3LDExIEBAIGlubGluZSBGcmFjdGlv
bmFsTGF5b3V0VW5pdCBpbnRNb2QoY29uc3QKICNlbmRpZgogfQogCi1pbmxpbmUgRnJhY3Rpb25h
bExheW91dFVuaXQgb3BlcmF0b3IlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25z
dCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBMYXlvdXRVbml0IG9wZXJhdG9yJShj
b25zdCBMYXlvdXRVbml0JiBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewogI2lmIEVOQUJMRShT
VUJQSVhFTF9MQVlPVVQpCiAgICAgLy8gVGhpcyBjYWxjdWxhdGVzIHRoZSBtb2R1bG8gc28gdGhh
dDogYSA9IChhIC8gYikgKiBiICsgYSAlIGIuCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0
dXJuVmFsOworICAgIExheW91dFVuaXQgcmV0dXJuVmFsOwogICAgIGxvbmcgbG9uZyByYXdWYWwg
PSAoc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihrRml4ZWRQb2ludERlbm9taW5hdG9yKSAqIGEucmF3
VmFsdWUoKSkgJSBiLnJhd1ZhbHVlKCk7CiAgICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKHJhd1Zh
bCAvIGtGaXhlZFBvaW50RGVub21pbmF0b3IpOwogICAgIHJldHVybiByZXR1cm5WYWw7CkBAIC03
MTAsMTcgKzcxMCwxNyBAQCBpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IlKGNv
CiAjZW5kaWYKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yJShjb25z
dCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCitpbmxpbmUgTGF5b3V0VW5pdCBvcGVy
YXRvciUoY29uc3QgTGF5b3V0VW5pdCYgYSwgaW50IGIpCiB7Ci0gICAgcmV0dXJuIGEgJSBGcmFj
dGlvbmFsTGF5b3V0VW5pdChiKTsKKyAgICByZXR1cm4gYSAlIExheW91dFVuaXQoYik7CiB9CiAK
LWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvciUoaW50IGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIExheW91dFVuaXQgb3BlcmF0b3IlKGludCBhLCBj
b25zdCBMYXlvdXRVbml0JiBiKQogewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChh
KSAlIGI7CisgICAgcmV0dXJuIExheW91dFVuaXQoYSkgJSBiOwogfQogCi1pbmxpbmUgRnJhY3Rp
b25hbExheW91dFVuaXQmIG9wZXJhdG9yKz0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIExheW91dFVuaXQmIG9wZXJhdG9yKz0o
TGF5b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICNpZiBFTkFCTEUoU0FUVVJB
VEVEX0xBWU9VVF9BUklUSE1FVElDKQogICAgIGEuc2V0UmF3VmFsdWUoc2F0dXJhdGVkQWRkaXRp
b24oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKQEAgLTczMCwzMSArNzMwLDMxIEBAIGlu
bGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3IrPSgKICAgICByZXR1cm4gYTsKIH0K
IAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvcis9KEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBhLCBpbnQgYikKK2lubGluZSBMYXlvdXRVbml0JiBvcGVyYXRvcis9KExheW91dFVu
aXQmIGEsIGludCBiKQogewogICAgIGEgPSBhICsgYjsKICAgICByZXR1cm4gYTsKIH0KIAotaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvcis9KEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBhLCBmbG9hdCBiKQoraW5saW5lIExheW91dFVuaXQmIG9wZXJhdG9yKz0oTGF5b3V0VW5pdCYg
YSwgZmxvYXQgYikKIHsKICAgICBhID0gYSArIGI7CiAgICAgcmV0dXJuIGE7CiB9CiAKLWlubGlu
ZSBmbG9hdCYgb3BlcmF0b3IrPShmbG9hdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGIpCitpbmxpbmUgZmxvYXQmIG9wZXJhdG9yKz0oZmxvYXQmIGEsIGNvbnN0IExheW91dFVuaXQm
IGIpCiB7CiAgICAgYSA9IGEgKyBiOwogICAgIHJldHVybiBhOwogfQogCi1pbmxpbmUgRnJhY3Rp
b25hbExheW91dFVuaXQmIG9wZXJhdG9yLT0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBi
KQoraW5saW5lIExheW91dFVuaXQmIG9wZXJhdG9yLT0oTGF5b3V0VW5pdCYgYSwgaW50IGIpCiB7
CiAgICAgYSA9IGEgLSBiOwogICAgIHJldHVybiBhOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExh
eW91dFVuaXQmIG9wZXJhdG9yLT0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIExheW91dFVuaXQmIG9wZXJhdG9yLT0oTGF5b3V0
VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICNpZiBFTkFCTEUoU0FUVVJBVEVEX0xB
WU9VVF9BUklUSE1FVElDKQogICAgIGEuc2V0UmF3VmFsdWUoc2F0dXJhdGVkU3VidHJhY3Rpb24o
YS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKQEAgLTc2NCw2MiArNzY0LDEwMiBAQCBpbmxp
bmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yLT0oCiAgICAgcmV0dXJuIGE7CiB9CiAK
LWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3ItPShGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYSwgZmxvYXQgYikKK2lubGluZSBMYXlvdXRVbml0JiBvcGVyYXRvci09KExheW91dFVu
aXQmIGEsIGZsb2F0IGIpCiB7CiAgICAgYSA9IGEgLSBiOwogICAgIHJldHVybiBhOwogfQogCi1p
bmxpbmUgZmxvYXQmIG9wZXJhdG9yLT0oZmxvYXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBiKQoraW5saW5lIGZsb2F0JiBvcGVyYXRvci09KGZsb2F0JiBhLCBjb25zdCBMYXlvdXRV
bml0JiBiKQogewogICAgIGEgPSBhIC0gYjsKICAgICByZXR1cm4gYTsKIH0KIAotaW5saW5lIEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvcio9KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBj
b25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBMYXlvdXRVbml0JiBvcGVyYXRv
cio9KExheW91dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAgICAgYSA9IGEgKiBi
OwogICAgIHJldHVybiBhOwogfQotLy8gb3BlcmF0b3IqPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
YSwgaW50IGIpIGlzIHN1cHBvcnRlZCBieSB0aGUgb3BlcmF0b3IgYWJvdmUgcGx1cyBGcmFjdGlv
bmFsTGF5b3V0VW5pdChpbnQpLgorLy8gb3BlcmF0b3IqPShMYXlvdXRVbml0JiBhLCBpbnQgYikg
aXMgc3VwcG9ydGVkIGJ5IHRoZSBvcGVyYXRvciBhYm92ZSBwbHVzIExheW91dFVuaXQoaW50KS4K
IAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvcio9KEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBhLCBmbG9hdCBiKQoraW5saW5lIExheW91dFVuaXQmIG9wZXJhdG9yKj0oTGF5b3V0
VW5pdCYgYSwgZmxvYXQgYikKIHsKICAgICBhID0gYSAqIGI7CiAgICAgcmV0dXJuIGE7CiB9CiAK
LWlubGluZSBmbG9hdCYgb3BlcmF0b3IqPShmbG9hdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGIpCitpbmxpbmUgZmxvYXQmIG9wZXJhdG9yKj0oZmxvYXQmIGEsIGNvbnN0IExheW91
dFVuaXQmIGIpCiB7CiAgICAgYSA9IGEgKiBiOwogICAgIHJldHVybiBhOwogfQogCi1pbmxpbmUg
RnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yLz0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEs
IGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIExheW91dFVuaXQmIG9wZXJh
dG9yLz0oTGF5b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICBhID0gYSAv
IGI7CiAgICAgcmV0dXJuIGE7CiB9Ci0vLyBvcGVyYXRvci89KEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBhLCBpbnQgYikgaXMgc3VwcG9ydGVkIGJ5IHRoZSBvcGVyYXRvciBhYm92ZSBwbHVzIEZyYWN0
aW9uYWxMYXlvdXRVbml0KGludCkuCisvLyBvcGVyYXRvci89KExheW91dFVuaXQmIGEsIGludCBi
KSBpcyBzdXBwb3J0ZWQgYnkgdGhlIG9wZXJhdG9yIGFib3ZlIHBsdXMgTGF5b3V0VW5pdChpbnQp
LgogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yLz0oRnJhY3Rpb25hbExh
eW91dFVuaXQmIGEsIGZsb2F0IGIpCitpbmxpbmUgTGF5b3V0VW5pdCYgb3BlcmF0b3IvPShMYXlv
dXRVbml0JiBhLCBmbG9hdCBiKQogewogICAgIGEgPSBhIC8gYjsKICAgICByZXR1cm4gYTsKIH0K
IAotaW5saW5lIGZsb2F0JiBvcGVyYXRvci89KGZsb2F0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgYikKK2lubGluZSBmbG9hdCYgb3BlcmF0b3IvPShmbG9hdCYgYSwgY29uc3QgTGF5
b3V0VW5pdCYgYikKIHsKICAgICBhID0gYSAvIGI7CiAgICAgcmV0dXJuIGE7CiB9CiAKLWlubGlu
ZSBpbnQgc25hcFNpemVUb1BpeGVsKEZyYWN0aW9uYWxMYXlvdXRVbml0IHNpemUsIEZyYWN0aW9u
YWxMYXlvdXRVbml0IGxvY2F0aW9uKSAKK2lubGluZSBpbnQgc25hcFNpemVUb1BpeGVsKExheW91
dFVuaXQgc2l6ZSwgTGF5b3V0VW5pdCBsb2NhdGlvbikgCiB7Ci0gICAgRnJhY3Rpb25hbExheW91
dFVuaXQgZnJhY3Rpb24gPSBsb2NhdGlvbi5mcmFjdGlvbigpOworICAgIExheW91dFVuaXQgZnJh
Y3Rpb24gPSBsb2NhdGlvbi5mcmFjdGlvbigpOwogICAgIHJldHVybiAoZnJhY3Rpb24gKyBzaXpl
KS5yb3VuZCgpIC0gZnJhY3Rpb24ucm91bmQoKTsKIH0KIAorCitpbmxpbmUgaW50IHJvdW5kVG9J
bnQoTGF5b3V0VW5pdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUucm91bmQoKTsKK30KKwor
aW5saW5lIGludCBmbG9vclRvSW50KExheW91dFVuaXQgdmFsdWUpCit7CisgICAgcmV0dXJuIHZh
bHVlLmZsb29yKCk7Cit9CisKK2lubGluZSBMYXlvdXRVbml0IHJvdW5kZWRMYXlvdXRVbml0KGZs
b2F0IHZhbHVlKQoreworI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisgICAgcmV0dXJuIExh
eW91dFVuaXQ6OmZyb21GbG9hdFJvdW5kKHZhbHVlKTsKKyNlbHNlCisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGludD4obHJvdW5kZih2YWx1ZSkpOworI2VuZGlmCit9CisKK2lubGluZSBMYXlvdXRV
bml0IGNlaWxlZExheW91dFVuaXQoZmxvYXQgdmFsdWUpCit7CisjaWYgRU5BQkxFKFNVQlBJWEVM
X0xBWU9VVCkKKyAgICByZXR1cm4gTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbCh2YWx1ZSk7Cisj
ZWxzZQorICAgIHJldHVybiBjZWlsZih2YWx1ZSk7CisjZW5kaWYKK30KKworaW5saW5lIExheW91
dFVuaXQgbGF5b3V0TW9kKGNvbnN0IExheW91dFVuaXQmIG51bWVyYXRvciwgY29uc3QgTGF5b3V0
VW5pdCYgZGVub21pbmF0b3IpCit7CisgICAgcmV0dXJuIG51bWVyYXRvciAlIGRlbm9taW5hdG9y
OworfQorCitpbmxpbmUgYm9vbCBpc0ludGVnZXJWYWx1ZShjb25zdCBMYXlvdXRVbml0IHZhbHVl
KQoreworICAgIHJldHVybiB2YWx1ZS50b0ludCgpID09IHZhbHVlOworfQorCisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEZyYWN0aW9uYWxMYXlvdXRVbml0X2gKKyNlbmRp
ZiAvLyBMYXlvdXRVbml0X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCShyZXZpc2lv
biAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguaAkod29ya2luZyBj
b3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCh0ICE9IENhbGN1
bGF0ZWQpOwogICAgIH0KICAgICAKLSAgICBMZW5ndGgoRnJhY3Rpb25hbExheW91dFVuaXQgdiwg
TGVuZ3RoVHlwZSB0LCBib29sIHEgPSBmYWxzZSkKKyAgICBMZW5ndGgoTGF5b3V0VW5pdCB2LCBM
ZW5ndGhUeXBlIHQsIGJvb2wgcSA9IGZhbHNlKQogICAgICAgICA6IG1fZmxvYXRWYWx1ZSh2LnRv
RmxvYXQoKSksIG1fcXVpcmsocSksIG1fdHlwZSh0KSwgbV9pc0Zsb2F0KHRydWUpCiAgICAgewog
ICAgICAgICBBU1NFUlQodCAhPSBDYWxjdWxhdGVkKTsKQEAgLTE3Miw3ICsxNzIsNyBAQCBwdWJs
aWM6CiAgICAgICAgIG1faXNGbG9hdCA9IHRydWU7ICAgIAogICAgIH0KIAotICAgIHZvaWQgc2V0
VmFsdWUoTGVuZ3RoVHlwZSB0LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCB2YWx1ZSkKKyAgICB2b2lk
IHNldFZhbHVlKExlbmd0aFR5cGUgdCwgTGF5b3V0VW5pdCB2YWx1ZSkKICAgICB7CiAgICAgICAg
IG1fdHlwZSA9IHQ7CiAgICAgICAgIG1fZmxvYXRWYWx1ZSA9IHZhbHVlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51Q2xpZW50LmgJKHJldmlzaW9uIDEzMzUxNykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudUNsaWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw3ICsyMiw3IEBACiAjaWZuZGVmIFBvcHVwTWVudUNsaWVudF9oCiAjZGVmaW5lIFBv
cHVwTWVudUNsaWVudF9oCiAKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxh
eW91dFVuaXQuaCIKICNpbmNsdWRlICJQb3B1cE1lbnVTdHlsZS5oIgogI2luY2x1ZGUgIlNjcm9s
bFR5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb25VdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uVXRpbGl0aWVzLmgJKHJl
dmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9Bbmlt
YXRpb25VdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2lmbmRl
ZiBBbmltYXRpb25VdGlsaXRpZXNfaAogI2RlZmluZSBBbmltYXRpb25VdGlsaXRpZXNfaAogCi0j
aW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFVuaXQuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgor
I2luY2x1ZGUgIkxheW91dFVuaXQuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01Miw3ICs1Miw3IEBAIGlubGluZSBmbG9hdCBibGVuZChm
bG9hdCBmcm9tLCBmbG9hdCB0bywKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGZyb20g
KyAodG8gLSBmcm9tKSAqIHByb2dyZXNzKTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRV
bml0IGJsZW5kKEZyYWN0aW9uYWxMYXlvdXRVbml0IGZyb20sIEZyYWN0aW9uYWxMYXlvdXRVbml0
IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitpbmxpbmUgTGF5b3V0VW5pdCBibGVuZChMYXlvdXRVbml0
IGZyb20sIExheW91dFVuaXQgdG8sIGRvdWJsZSBwcm9ncmVzcykKIHsgIAogICAgIHJldHVybiBm
cm9tICsgKHRvIC0gZnJvbSkgKiBwcm9ncmVzczsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwCShyZXZpc2lvbiAxMzM1MTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDEwIEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogCiAj
aW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFBv
aW50LmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25h
bExheW91dFNpemUuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIkxheW91dFBv
aW50LmgiCisjaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9u
TWF0cml4LmgiCiAjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPG1hdGguaD4KQEAgLTQyLDcg
KzQyLDcgQEAgRmxvYXRQb2ludDo6RmxvYXRQb2ludChjb25zdCBJbnRQb2ludCYgcAogewogfQog
Ci1GbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcCkg
OiBtX3gocC54KCkpLCBtX3kocC55KCkpCitGbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IExh
eW91dFBvaW50JiBwKSA6IG1feChwLngoKSksIG1feShwLnkoKSkKIHsKIH0KIApAQCAtNjEsMTMg
KzYxLDEzIEBAIGZsb2F0IEZsb2F0UG9pbnQ6Omxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJuIHNx
cnRmKGxlbmd0aFNxdWFyZWQoKSk7CiB9CiAKLXZvaWQgRmxvYXRQb2ludDo6bW92ZShjb25zdCBG
cmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkKK3ZvaWQgRmxvYXRQb2ludDo6bW92ZShjb25zdCBM
YXlvdXRTaXplJiBzaXplKQogewogICAgIG1feCArPSBzaXplLndpZHRoKCk7CiAgICAgbV95ICs9
IHNpemUuaGVpZ2h0KCk7CiB9CiAKLXZvaWQgRmxvYXRQb2ludDo6bW92ZUJ5KGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRQb2ludCYgcG9pbnQpCit2b2lkIEZsb2F0UG9pbnQ6Om1vdmVCeShjb25zdCBM
YXlvdXRQb2ludCYgcG9pbnQpCiB7CiAgICAgbV94ICs9IHBvaW50LngoKTsKICAgICBtX3kgKz0g
cG9pbnQueSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQ
b2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UG9pbnQuaAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRQb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxNSArNjgsMTUgQEAg
Y2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiBjbGFz
cyBJbnRQb2ludDsKIGNsYXNzIEludFNpemU7Ci1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0UG9pbnQ7
Ci1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0U2l6ZTsKK2NsYXNzIExheW91dFBvaW50OworY2xhc3Mg
TGF5b3V0U2l6ZTsKIAogY2xhc3MgRmxvYXRQb2ludCB7CiBwdWJsaWM6CiAgICAgRmxvYXRQb2lu
dCgpIDogbV94KDApLCBtX3koMCkgeyB9CiAgICAgRmxvYXRQb2ludChmbG9hdCB4LCBmbG9hdCB5
KSA6IG1feCh4KSwgbV95KHkpIHsgfQogICAgIEZsb2F0UG9pbnQoY29uc3QgSW50UG9pbnQmKTsK
LSAgICBGbG9hdFBvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYpOworICAgIEZsb2F0
UG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmKTsKICAgICBleHBsaWNpdCBGbG9hdFBvaW50KGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSkgOiBtX3goc2l6ZS53aWR0aCgpKSwgbV95KHNpemUuaGVpZ2h0KCkp
IHsgfQogCiAgICAgc3RhdGljIEZsb2F0UG9pbnQgemVybygpIHsgcmV0dXJuIEZsb2F0UG9pbnQo
KTsgfQpAQCAtMTAzLDcgKzEwMyw3IEBAIHB1YmxpYzoKICAgICAgICAgbV94ICs9IGEud2lkdGgo
KTsKICAgICAgICAgbV95ICs9IGEuaGVpZ2h0KCk7CiAgICAgfQotICAgIHZvaWQgbW92ZShjb25z
dCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYpOworICAgIHZvaWQgbW92ZShjb25zdCBMYXlvdXRTaXpl
Jik7CiAgICAgdm9pZCBtb3ZlKGNvbnN0IEZsb2F0U2l6ZSYgYSkKICAgICB7CiAgICAgICAgIG1f
eCArPSBhLndpZHRoKCk7CkBAIC0xMTQsNyArMTE0LDcgQEAgcHVibGljOgogICAgICAgICBtX3gg
Kz0gYS54KCk7CiAgICAgICAgIG1feSArPSBhLnkoKTsKICAgICB9Ci0gICAgdm9pZCBtb3ZlQnko
Y29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50Jik7CisgICAgdm9pZCBtb3ZlQnkoY29uc3QgTGF5
b3V0UG9pbnQmKTsKICAgICB2b2lkIG1vdmVCeShjb25zdCBGbG9hdFBvaW50JiBhKQogICAgIHsK
ICAgICAgICAgbV94ICs9IGEueCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRSZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw4ICsyOCw4IEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAKICNpbmNsdWRlICJGbG9hdENv
bnZlcnNpb24uaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUg
IkludFJlY3QuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGht
PgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtNDMs
NyArNDMsNyBAQCBGbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBJbnRSZWN0JiByKSA6CiB7CiB9
CiAKLUZsb2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiByKSA6
IG1fbG9jYXRpb24oci5sb2NhdGlvbigpKSwgbV9zaXplKHIuc2l6ZSgpKQorRmxvYXRSZWN0OjpG
bG9hdFJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcikgOiBtX2xvY2F0aW9uKHIubG9jYXRpb24oKSks
IG1fc2l6ZShyLnNpemUoKSkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3
ICs3NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFZHUmVjdDsKICNlbmRpZgogCi1j
bGFzcyBGcmFjdGlvbmFsTGF5b3V0UmVjdDsKK2NsYXNzIExheW91dFJlY3Q7CiBjbGFzcyBJbnRS
ZWN0OwogY2xhc3MgSW50UG9pbnQ7CiAKQEAgLTkxLDcgKzkxLDcgQEAgcHVibGljOgogICAgIEZs
b2F0UmVjdChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQogICAg
ICAgICA6IG1fbG9jYXRpb24oRmxvYXRQb2ludCh4LCB5KSksIG1fc2l6ZShGbG9hdFNpemUod2lk
dGgsIGhlaWdodCkpIHsgfQogICAgIEZsb2F0UmVjdChjb25zdCBJbnRSZWN0Jik7Ci0gICAgRmxv
YXRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0Jik7CisgICAgRmxvYXRSZWN0KGNvbnN0
IExheW91dFJlY3QmKTsKIAogICAgIHN0YXRpYyBGbG9hdFJlY3QgbmFycm93UHJlY2lzaW9uKGRv
dWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0KTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuY3BwCShyZXZp
c2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNp
emUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNyw5IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0
U2l6ZS5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkludFNpemUu
aCIKKyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCiAjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUg
PG1hdGguaD4KIApAQCAtNDEsNyArNDEsNyBAQCBGbG9hdFNpemU6OkZsb2F0U2l6ZShjb25zdCBJ
bnRTaXplJiBzaXplCiB7CiB9CiAKLUZsb2F0U2l6ZTo6RmxvYXRTaXplKGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRTaXplJiBzaXplKSA6IG1fd2lkdGgoc2l6ZS53aWR0aCgpKSwgbV9oZWlnaHQoc2l6
ZS5oZWlnaHQoKSkKK0Zsb2F0U2l6ZTo6RmxvYXRTaXplKGNvbnN0IExheW91dFNpemUmIHNpemUp
IDogbV93aWR0aChzaXplLndpZHRoKCkpLCBtX2hlaWdodChzaXplLmhlaWdodCgpKQogewogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAko
cmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRTaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDE0ICs2MCwxNCBAQCB0eXBlZGVmIHN0cnVj
dCBfTlNTaXplIE5TU2l6ZTsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW50U2l6ZTsK
LWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRTaXplOworY2xhc3MgTGF5b3V0U2l6ZTsKIAogY2xhc3Mg
RmxvYXRTaXplIHsKIHB1YmxpYzoKICAgICBGbG9hdFNpemUoKSA6IG1fd2lkdGgoMCksIG1faGVp
Z2h0KDApIHsgfQogICAgIEZsb2F0U2l6ZShmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KSA6IG1f
d2lkdGgod2lkdGgpLCBtX2hlaWdodChoZWlnaHQpIHsgfQogICAgIEZsb2F0U2l6ZShjb25zdCBJ
bnRTaXplJik7Ci0gICAgRmxvYXRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJik7Cisg
ICAgRmxvYXRTaXplKGNvbnN0IExheW91dFNpemUmKTsKIAogICAgIHN0YXRpYyBGbG9hdFNpemUg
bmFycm93UHJlY2lzaW9uKGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0
aW9uYWxMYXlvdXRCb3hFeHRlbnQuY3BwCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSwxOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMiwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LUZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmxvZ2ljYWxU
b3AoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fdG9wIDogbV9sZWZ0OwotfQotCi1GcmFj
dGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Ojpsb2dpY2FsQm90dG9t
KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAotewotICAgIHJldHVybiBpc0hvcml6b250
YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX2JvdHRvbSA6IG1fcmlnaHQ7Ci19Ci0KLUZy
YWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmxvZ2ljYWxMZWZ0
KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAotewotICAgIHJldHVybiBpc0hvcml6b250
YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX2xlZnQgOiBtX3RvcDsKLX0KLQotRnJhY3Rp
b25hbExheW91dFVuaXQgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6bG9naWNhbFJpZ2h0KFdy
aXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAotewotICAgIHJldHVybiBpc0hvcml6b250YWxX
cml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX3JpZ2h0IDogbV9ib3R0b207Ci19Ci0KLUZyYWN0
aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmJlZm9yZShXcml0aW5n
TW9kZSB3cml0aW5nTW9kZSkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKHdyaXRpbmdNb2RlKSB7Ci0g
ICAgY2FzZSBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlOgotICAgICAgICByZXR1cm4gbV90b3A7Ci0g
ICAgY2FzZSBCb3R0b21Ub1RvcFdyaXRpbmdNb2RlOgotICAgICAgICByZXR1cm4gbV9ib3R0b207
Ci0gICAgY2FzZSBMZWZ0VG9SaWdodFdyaXRpbmdNb2RlOgotICAgICAgICByZXR1cm4gbV9sZWZ0
OwotICAgIGNhc2UgUmlnaHRUb0xlZnRXcml0aW5nTW9kZToKLSAgICAgICAgcmV0dXJuIG1fcmln
aHQ7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBtX3RvcDsK
LX0KLQotRnJhY3Rpb25hbExheW91dFVuaXQgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6YWZ0
ZXIoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0Ci17Ci0gICAgc3dpdGNoICh3cml0aW5n
TW9kZSkgewotICAgIGNhc2UgVG9wVG9Cb3R0b21Xcml0aW5nTW9kZToKLSAgICAgICAgcmV0dXJu
IG1fYm90dG9tOwotICAgIGNhc2UgQm90dG9tVG9Ub3BXcml0aW5nTW9kZToKLSAgICAgICAgcmV0
dXJuIG1fdG9wOwotICAgIGNhc2UgTGVmdFRvUmlnaHRXcml0aW5nTW9kZToKLSAgICAgICAgcmV0
dXJuIG1fcmlnaHQ7Ci0gICAgY2FzZSBSaWdodFRvTGVmdFdyaXRpbmdNb2RlOgotICAgICAgICBy
ZXR1cm4gbV9sZWZ0OwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gbV9ib3R0b207Ci19Ci0KLUZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRC
b3hFeHRlbnQ6OnN0YXJ0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRp
cmVjdGlvbikgY29uc3QKLXsKLSAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGlu
Z01vZGUpKQotICAgICAgICByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24p
ID8gbV9sZWZ0IDogbV9yaWdodDsKLSAgICByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbihk
aXJlY3Rpb24pID8gbV90b3AgOiBtX2JvdHRvbTsKLX0KLQotRnJhY3Rpb25hbExheW91dFVuaXQg
RnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6ZW5kKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikgY29uc3QKLXsKLSAgICBpZiAoaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUod3JpdGluZ01vZGUpKQotICAgICAgICByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVj
dGlvbihkaXJlY3Rpb24pID8gbV9yaWdodCA6IG1fbGVmdDsKLSAgICByZXR1cm4gaXNMZWZ0VG9S
aWdodERpcmVjdGlvbihkaXJlY3Rpb24pID8gbV9ib3R0b20gOiBtX3RvcDsKLX0KLQotdm9pZCBG
cmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzZXRCZWZvcmUoV3JpdGluZ01vZGUgd3JpdGluZ01v
ZGUsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKQotewotICAgIHN3aXRjaCAod3JpdGluZ01v
ZGUpIHsKLSAgICBjYXNlIFRvcFRvQm90dG9tV3JpdGluZ01vZGU6Ci0gICAgICAgIG1fdG9wID0g
dmFsdWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQm90dG9tVG9Ub3BXcml0aW5nTW9kZToK
LSAgICAgICAgbV9ib3R0b20gPSB2YWx1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMZWZ0
VG9SaWdodFdyaXRpbmdNb2RlOgotICAgICAgICBtX2xlZnQgPSB2YWx1ZTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBSaWdodFRvTGVmdFdyaXRpbmdNb2RlOgotICAgICAgICBtX3JpZ2h0ID0g
dmFsdWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICBtX3RvcCA9IHZhbHVlOwotICAgIH0KLX0KLQotdm9pZCBGcmFj
dGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzZXRBZnRlcihXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwg
RnJhY3Rpb25hbExheW91dFVuaXQgdmFsdWUpCi17Ci0gICAgc3dpdGNoICh3cml0aW5nTW9kZSkg
ewotICAgIGNhc2UgVG9wVG9Cb3R0b21Xcml0aW5nTW9kZToKLSAgICAgICAgbV9ib3R0b20gPSB2
YWx1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCb3R0b21Ub1RvcFdyaXRpbmdNb2RlOgot
ICAgICAgICBtX3RvcCA9IHZhbHVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExlZnRUb1Jp
Z2h0V3JpdGluZ01vZGU6Ci0gICAgICAgIG1fcmlnaHQgPSB2YWx1ZTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBSaWdodFRvTGVmdFdyaXRpbmdNb2RlOgotICAgICAgICBtX2xlZnQgPSB2YWx1
ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIG1fYm90dG9tID0gdmFsdWU7Ci0gICAgfQotfQotCi12b2lkIEZyYWN0
aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OnNldFN0YXJ0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgRnJhY3Rpb25hbExheW91dFVuaXQgdmFsdWUpCi17Ci0g
ICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkgewotICAgICAgICBp
ZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24pKQotICAgICAgICAgICAgbV9sZWZ0
ID0gdmFsdWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fcmlnaHQgPSB2YWx1ZTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24p
KQotICAgICAgICAgICAgbV90b3AgPSB2YWx1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
bV9ib3R0b20gPSB2YWx1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgRnJhY3Rpb25hbExheW91dEJveEV4
dGVudDo6c2V0RW5kKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVj
dGlvbiwgRnJhY3Rpb25hbExheW91dFVuaXQgdmFsdWUpCi17Ci0gICAgaWYgKGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkgewotICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodERp
cmVjdGlvbihkaXJlY3Rpb24pKQotICAgICAgICAgICAgbV9yaWdodCA9IHZhbHVlOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBtX2xlZnQgPSB2YWx1ZTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBpZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24pKQotICAgICAgICAgICAgbV9i
b3R0b20gPSB2YWx1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV90b3AgPSB2YWx1ZTsK
LSAgICB9Ci19Ci0KLUZyYWN0aW9uYWxMYXlvdXRVbml0JiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0
ZW50OjptdXRhYmxlTG9naWNhbExlZnQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCi17Ci0gICAg
cmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fbGVmdCA6IG1f
dG9wOwotfQotCi1GcmFjdGlvbmFsTGF5b3V0VW5pdCYgRnJhY3Rpb25hbExheW91dEJveEV4dGVu
dDo6bXV0YWJsZUxvZ2ljYWxSaWdodChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKLXsKLSAgICBy
ZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9yaWdodCA6IG1f
Ym90dG9tOwotfQotCi1GcmFjdGlvbmFsTGF5b3V0VW5pdCYgRnJhY3Rpb25hbExheW91dEJveEV4
dGVudDo6bXV0YWJsZUJlZm9yZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKLXsKLSAgICByZXR1
cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gKGlzRmxpcHBlZEJsb2Nr
c1dyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fYm90dG9tIDogbV90b3ApIDoKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlzRmxpcHBlZEJsb2Nr
c1dyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fcmlnaHQ6IG1fbGVmdCk7Ci19Ci0KLUZyYWN0
aW9uYWxMYXlvdXRVbml0JiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjptdXRhYmxlQWZ0ZXIo
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCi17Ci0gICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKHdyaXRpbmdNb2RlKSA/IChpc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSh3cml0aW5n
TW9kZSkgPyBtX3RvcCA6IG1fYm90dG9tKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChpc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSh3cml0aW5n
TW9kZSkgPyBtX2xlZnQ6IG1fcmlnaHQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94
RXh0ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMiwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEZyYWN0aW9uYWxMYXlvdXRCb3hF
eHRlbnRfaAotI2RlZmluZSBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50X2gKLQotI2luY2x1ZGUg
IkZyYWN0aW9uYWxMYXlvdXRVbml0LmgiCi0jaW5jbHVkZSAiVGV4dERpcmVjdGlvbi5oIgotI2lu
Y2x1ZGUgIldyaXRpbmdNb2RlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRnJh
Y3Rpb25hbExheW91dEJveEV4dGVudCB7Ci1wdWJsaWM6Ci0gICAgRnJhY3Rpb25hbExheW91dEJv
eEV4dGVudCgpIDogbV90b3AoMCksIG1fcmlnaHQoMCksIG1fYm90dG9tKDApLCBtX2xlZnQoMCkg
eyB9Ci0gICAgRnJhY3Rpb25hbExheW91dEJveEV4dGVudChGcmFjdGlvbmFsTGF5b3V0VW5pdCB0
b3AsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJpZ2h0LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBib3R0
b20sIEZyYWN0aW9uYWxMYXlvdXRVbml0IGxlZnQpCi0gICAgICAgIDogbV90b3AodG9wKSwgbV9y
aWdodChyaWdodCksIG1fYm90dG9tKGJvdHRvbSksIG1fbGVmdChsZWZ0KSB7IH0KLQotICAgIGlu
bGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCB0b3AoKSBjb25zdCB7IHJldHVybiBtX3RvcDsgfQot
ICAgIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCByaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmlnaHQ7IH0KLSAgICBpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgYm90dG9tKCkgY29uc3Qg
eyByZXR1cm4gbV9ib3R0b207IH0KLSAgICBpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgbGVm
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVmdDsgfQotCi0gICAgaW5saW5lIHZvaWQgc2V0VG9wKEZy
YWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKSB7IG1fdG9wID0gdmFsdWU7IH0KLSAgICBpbmxpbmUg
dm9pZCBzZXRSaWdodChGcmFjdGlvbmFsTGF5b3V0VW5pdCB2YWx1ZSkgeyBtX3JpZ2h0ID0gdmFs
dWU7IH0KLSAgICBpbmxpbmUgdm9pZCBzZXRCb3R0b20oRnJhY3Rpb25hbExheW91dFVuaXQgdmFs
dWUpIHsgbV9ib3R0b20gPSB2YWx1ZTsgfQotICAgIGlubGluZSB2b2lkIHNldExlZnQoRnJhY3Rp
b25hbExheW91dFVuaXQgdmFsdWUpIHsgbV9sZWZ0ID0gdmFsdWU7IH0KLQotICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IGxvZ2ljYWxUb3AoV3JpdGluZ01vZGUpIGNvbnN0OwotICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20oV3JpdGluZ01vZGUpIGNvbnN0OwotICAgIEZyYWN0
aW9uYWxMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KFdyaXRpbmdNb2RlKSBjb25zdDsKLSAgICBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQoV3JpdGluZ01vZGUpIGNvbnN0OwotCi0gICAg
RnJhY3Rpb25hbExheW91dFVuaXQgYmVmb3JlKFdyaXRpbmdNb2RlKSBjb25zdDsKLSAgICBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBhZnRlcihXcml0aW5nTW9kZSkgY29uc3Q7Ci0gICAgRnJhY3Rpb25h
bExheW91dFVuaXQgc3RhcnQoV3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24pIGNvbnN0OwotICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0IGVuZChXcml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbikgY29u
c3Q7Ci0KLSAgICB2b2lkIHNldEJlZm9yZShXcml0aW5nTW9kZSwgRnJhY3Rpb25hbExheW91dFVu
aXQpOwotICAgIHZvaWQgc2V0QWZ0ZXIoV3JpdGluZ01vZGUsIEZyYWN0aW9uYWxMYXlvdXRVbml0
KTsKLSAgICB2b2lkIHNldFN0YXJ0KFdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uLCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCk7Ci0gICAgdm9pZCBzZXRFbmQoV3JpdGluZ01vZGUsIFRleHREaXJlY3Rp
b24sIEZyYWN0aW9uYWxMYXlvdXRVbml0KTsKLQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBt
dXRhYmxlTG9naWNhbExlZnQoV3JpdGluZ01vZGUpOwotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBtdXRhYmxlTG9naWNhbFJpZ2h0KFdyaXRpbmdNb2RlKTsKLQotICAgIEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBtdXRhYmxlQmVmb3JlKFdyaXRpbmdNb2RlKTsKLSAgICBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgbXV0YWJsZUFmdGVyKFdyaXRpbmdNb2RlKTsKLQotcHJpdmF0ZToKLSAgICBGcmFjdGlv
bmFsTGF5b3V0VW5pdCBtX3RvcDsKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtX3JpZ2h0Owot
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1fYm90dG9tOwotICAgIEZyYWN0aW9uYWxMYXlvdXRV
bml0IG1fbGVmdDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEZy
YWN0aW9uYWxMYXlvdXRCb3hFeHRlbnRfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFBvaW50LmgJKHJldmlzaW9u
IDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxM
YXlvdXRQb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5MiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRnJh
Y3Rpb25hbExheW91dFBvaW50X2gKLSNkZWZpbmUgRnJhY3Rpb25hbExheW91dFBvaW50X2gKLQot
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0U2l6ZS5o
IgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLSNpZiBQTEFURk9STShRVCkKLSNpbmNs
dWRlIDxxZ2xvYmFsLmg+Ci1RVF9CRUdJTl9OQU1FU1BBQ0UKLWNsYXNzIFFQb2ludDsKLWNsYXNz
IFFQb2ludEY7Ci1RVF9FTkRfTkFNRVNQQUNFCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgewotcHVibGljOgotICAgIEZyYWN0aW9u
YWxMYXlvdXRQb2ludCgpIDogbV94KDApLCBtX3koMCkgeyB9Ci0gICAgRnJhY3Rpb25hbExheW91
dFBvaW50KEZyYWN0aW9uYWxMYXlvdXRVbml0IHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHkpIDog
bV94KHgpLCBtX3koeSkgeyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFBvaW50KGNvbnN0IEludFBv
aW50JiBwb2ludCkgOiBtX3gocG9pbnQueCgpKSwgbV95KHBvaW50LnkoKSkgeyB9Ci0gICAgZXhw
bGljaXQgRnJhY3Rpb25hbExheW91dFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHNpemUpIDogbV94
KHNpemUueCgpKSwgbV95KHNpemUueSgpKSB7IH0KLSAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpIDogbV94KHNpemUud2lk
dGgoKSksIG1feShzaXplLmhlaWdodCgpKSB7IH0KLQotICAgIHN0YXRpYyBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQgemVybygpIHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludCgpOyB9Ci0KLSAg
ICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB4KCkgY29uc3QgeyByZXR1cm4gbV94OyB9Ci0gICAgRnJh
Y3Rpb25hbExheW91dFVuaXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQotCi0gICAgdm9pZCBz
ZXRYKEZyYWN0aW9uYWxMYXlvdXRVbml0IHgpIHsgbV94ID0geDsgfQotICAgIHZvaWQgc2V0WShG
cmFjdGlvbmFsTGF5b3V0VW5pdCB5KSB7IG1feSA9IHk7IH0KLQotICAgIHZvaWQgbW92ZShjb25z
dCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgcykgeyBtb3ZlKHMud2lkdGgoKSwgcy5oZWlnaHQoKSk7
IH0gCi0gICAgdm9pZCBtb3ZlQnkoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBvZmZzZXQp
IHsgbW92ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsgfQotICAgIHZvaWQgbW92ZShGcmFjdGlv
bmFsTGF5b3V0VW5pdCBkeCwgRnJhY3Rpb25hbExheW91dFVuaXQgZHkpIHsgbV94ICs9IGR4OyBt
X3kgKz0gZHk7IH0KLSAgICB2b2lkIHNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSkKLSAgICB7Ci0g
ICAgICAgIG1feCAqPSBzeDsKLSAgICAgICAgbV95ICo9IHN5OwotICAgIH0KLSAgICAKLSAgICBG
cmFjdGlvbmFsTGF5b3V0UG9pbnQgZXhwYW5kZWRUbyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9p
bnQmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQ
b2ludChzdGQ6Om1heChtX3gsIG90aGVyLm1feCksIHN0ZDo6bWF4KG1feSwgb3RoZXIubV95KSk7
Ci0gICAgfQotCi0gICAgRnJhY3Rpb25hbExheW91dFBvaW50IHNocnVua1RvKGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRQb2ludCYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gRnJh
Y3Rpb25hbExheW91dFBvaW50KHN0ZDo6bWluKG1feCwgb3RoZXIubV94KSwgc3RkOjptaW4obV95
LCBvdGhlci5tX3kpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsYW1wTmVnYXRpdmVUb1plcm8oKQot
ICAgIHsKLSAgICAgICAgKnRoaXMgPSBleHBhbmRlZFRvKHplcm8oKSk7Ci0gICAgfQotCi0gICAg
RnJhY3Rpb25hbExheW91dFBvaW50IHRyYW5zcG9zZWRQb2ludCgpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KG1feSwgbV94KTsKLSAgICB9Ci0KLSNp
ZiBQTEFURk9STShRVCkKLSAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3Qg
UVBvaW50Jik7Ci0gICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFBvaW50KGNvbnN0IFFQb2lu
dEYmKTsKLSAgICBvcGVyYXRvciBRUG9pbnRGKCkgY29uc3Q7Ci0jZW5kaWYKLQotcHJpdmF0ZToK
LSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtX3gsIG1feTsKLX07Ci0KLWlubGluZSBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQmIG9wZXJhdG9yKz0oRnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25z
dCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKLXsKLSAgICBhLm1vdmUoYi53aWR0aCgpLCBiLmhl
aWdodCgpKTsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2lu
dCYgb3BlcmF0b3ItPShGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRTaXplJiBiKQotewotICAgIGEubW92ZSgtYi53aWR0aCgpLCAtYi5oZWlnaHQoKSk7Ci0g
ICAgcmV0dXJuIGE7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgb3BlcmF0b3Ir
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNp
emUmIGIpCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChhLngoKSArIGIud2lk
dGgoKSwgYS55KCkgKyBiLmhlaWdodCgpKTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCBvcGVyYXRvcisoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQmIGIpCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2lu
dChhLngoKSArIGIueCgpLCBhLnkoKSArIGIueSgpKTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxM
YXlvdXRTaXplIG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYikKLXsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91
dFNpemUoYS54KCkgLSBiLngoKSwgYS55KCkgLSBiLnkoKSk7Ci19Ci0KLWlubGluZSBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwg
Y29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxM
YXlvdXRQb2ludChhLngoKSAtIGIud2lkdGgoKSwgYS55KCkgLSBiLmhlaWdodCgpKTsKLX0KLQot
aW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExh
eW91dFBvaW50JiBwb2ludCkKLXsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KC1w
b2ludC54KCksIC1wb2ludC55KCkpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBi
KQotewotICAgIHJldHVybiBhLngoKSA9PSBiLngoKSAmJiBhLnkoKSA9PSBiLnkoKTsKLX0KLQot
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYikKLXsKLSAgICByZXR1cm4gYS54KCkgIT0gYi54
KCkgfHwgYS55KCkgIT0gYi55KCk7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQg
dG9Qb2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkKLXsKLSAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFBvaW50KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci19Ci0K
LWlubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSB0b1NpemUoY29uc3QgRnJhY3Rpb25hbExheW91
dFBvaW50JiBhKQotewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShhLngoKSwgYS55
KCkpOwotfQotCi1pbmxpbmUgSW50UG9pbnQgZmxvb3JlZEludFBvaW50KGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRQb2ludCYgcG9pbnQpCi17Ci0gICAgcmV0dXJuIEludFBvaW50KHBvaW50LngoKS5m
bG9vcigpLCBwb2ludC55KCkuZmxvb3IoKSk7Ci19Ci0KLWlubGluZSBJbnRQb2ludCByb3VuZGVk
SW50UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBwb2ludCkKLXsKLSAgICByZXR1
cm4gSW50UG9pbnQocG9pbnQueCgpLnJvdW5kKCksIHBvaW50LnkoKS5yb3VuZCgpKTsKLX0KLQot
aW5saW5lIEludFBvaW50IHJvdW5kZWRJbnRQb2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6
ZSYgc2l6ZSkKLXsKLSAgICByZXR1cm4gSW50UG9pbnQoc2l6ZS53aWR0aCgpLnJvdW5kKCksIHNp
emUuaGVpZ2h0KCkucm91bmQoKSk7Ci19Ci0KLWlubGluZSBJbnRQb2ludCBjZWlsZWRJbnRQb2lu
dChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50KQotewotICAgIHJldHVybiBJbnRQ
b2ludChwb2ludC54KCkuY2VpbCgpLCBwb2ludC55KCkuY2VpbCgpKTsKLX0KLQotaW5saW5lIEZy
YWN0aW9uYWxMYXlvdXRQb2ludCBmbG9vcmVkRnJhY3Rpb25hbExheW91dFBvaW50KGNvbnN0IEZs
b2F0UG9pbnQmIHApCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChGcmFjdGlv
bmFsTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Rmxvb3IocC54KCkpLCBGcmFjdGlvbmFsTGF5b3V0VW5p
dDo6ZnJvbUZsb2F0Rmxvb3IocC55KCkpKTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCBjZWlsZWRGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkKLXsK
LSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpm
cm9tRmxvYXRDZWlsKHAueCgpKSwgRnJhY3Rpb25hbExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwo
cC55KCkpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRnJhY3Rp
b25hbExheW91dFBvaW50X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAJKHJldmlzaW9uIDEzMzUx
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRS
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFJlY3QuaCIKLQotI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRVbml0LmgiCi0jaW5jbHVkZSA8YWxn
b3JpdGhtPgotCi11c2luZyBzdGQ6Om1heDsKLXVzaW5nIHN0ZDo6bWluOwotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLUZyYWN0aW9uYWxMYXlvdXRSZWN0OjpGcmFjdGlvbmFsTGF5b3V0UmVjdChj
b25zdCBGbG9hdFJlY3QmIHIpCi0gICAgOiBtX2xvY2F0aW9uKEZyYWN0aW9uYWxMYXlvdXRQb2lu
dChyLmxvY2F0aW9uKCkpKQotICAgICwgbV9zaXplKEZyYWN0aW9uYWxMYXlvdXRTaXplKHIuc2l6
ZSgpKSkKLXsKLX0KLQotYm9vbCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6aW50ZXJzZWN0cyhjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgLy8gQ2hlY2tpbmcg
ZW1wdGluZXNzIGhhbmRsZXMgbmVnYXRpdmUgd2lkdGhzIGFzIHdlbGwgYXMgemVyby4KLSAgICBy
ZXR1cm4gIWlzRW1wdHkoKSAmJiAhb3RoZXIuaXNFbXB0eSgpCi0gICAgICAgICYmIHgoKSA8IG90
aGVyLm1heFgoKSAmJiBvdGhlci54KCkgPCBtYXhYKCkKLSAgICAgICAgJiYgeSgpIDwgb3RoZXIu
bWF4WSgpICYmIG90aGVyLnkoKSA8IG1heFkoKTsKLX0KLQotYm9vbCBGcmFjdGlvbmFsTGF5b3V0
UmVjdDo6Y29udGFpbnMoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90aGVyKSBjb25zdAot
ewotICAgIHJldHVybiB4KCkgPD0gb3RoZXIueCgpICYmIG1heFgoKSA+PSBvdGhlci5tYXhYKCkK
LSAgICAgICAgJiYgeSgpIDw9IG90aGVyLnkoKSAmJiBtYXhZKCkgPj0gb3RoZXIubWF4WSgpOwot
fQotCi12b2lkIEZyYWN0aW9uYWxMYXlvdXRSZWN0OjppbnRlcnNlY3QoY29uc3QgRnJhY3Rpb25h
bExheW91dFJlY3QmIG90aGVyKQotewotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdMb2Nh
dGlvbihtYXgoeCgpLCBvdGhlci54KCkpLCBtYXgoeSgpLCBvdGhlci55KCkpKTsKLSAgICBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQgbmV3TWF4UG9pbnQobWluKG1heFgoKSwgb3RoZXIubWF4WCgpKSwg
bWluKG1heFkoKSwgb3RoZXIubWF4WSgpKSk7Ci0KLSAgICAvLyBSZXR1cm4gYSBjbGVhbiBlbXB0
eSByZWN0YW5nbGUgZm9yIG5vbi1pbnRlcnNlY3RpbmcgY2FzZXMuCi0gICAgaWYgKG5ld0xvY2F0
aW9uLngoKSA+PSBuZXdNYXhQb2ludC54KCkgfHwgbmV3TG9jYXRpb24ueSgpID49IG5ld01heFBv
aW50LnkoKSkgewotICAgICAgICBuZXdMb2NhdGlvbiA9IEZyYWN0aW9uYWxMYXlvdXRQb2ludCgw
LCAwKTsKLSAgICAgICAgbmV3TWF4UG9pbnQgPSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoMCwgMCk7
Ci0gICAgfQotCi0gICAgbV9sb2NhdGlvbiA9IG5ld0xvY2F0aW9uOwotICAgIG1fc2l6ZSA9IG5l
d01heFBvaW50IC0gbmV3TG9jYXRpb247Ci19Ci0KLXZvaWQgRnJhY3Rpb25hbExheW91dFJlY3Q6
OnVuaXRlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBvdGhlcikKLXsKLSAgICAvLyBIYW5k
bGUgZW1wdHkgc3BlY2lhbCBjYXNlcyBmaXJzdC4KLSAgICBpZiAob3RoZXIuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKGlzRW1wdHkoKSkgewotICAgICAgICAqdGhpcyA9IG90
aGVyOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRnJhY3Rpb25hbExheW91dFBvaW50
IG5ld0xvY2F0aW9uKG1pbih4KCksIG90aGVyLngoKSksIG1pbih5KCksIG90aGVyLnkoKSkpOwot
ICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdNYXhQb2ludChtYXgobWF4WCgpLCBvdGhlci5t
YXhYKCkpLCBtYXgobWF4WSgpLCBvdGhlci5tYXhZKCkpKTsKLQotICAgIG1fbG9jYXRpb24gPSBu
ZXdMb2NhdGlvbjsKLSAgICBtX3NpemUgPSBuZXdNYXhQb2ludCAtIG5ld0xvY2F0aW9uOwotfQot
Ci12b2lkIEZyYWN0aW9uYWxMYXlvdXRSZWN0Ojp1bml0ZUlmTm9uWmVybyhjb25zdCBGcmFjdGlv
bmFsTGF5b3V0UmVjdCYgb3RoZXIpCi17Ci0gICAgLy8gSGFuZGxlIGVtcHR5IHNwZWNpYWwgY2Fz
ZXMgZmlyc3QuCi0gICAgaWYgKCFvdGhlci53aWR0aCgpICYmICFvdGhlci5oZWlnaHQoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmICghd2lkdGgoKSAmJiAhaGVpZ2h0KCkpIHsKLSAgICAgICAg
KnRoaXMgPSBvdGhlcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEZyYWN0aW9uYWxM
YXlvdXRQb2ludCBuZXdMb2NhdGlvbihtaW4oeCgpLCBvdGhlci54KCkpLCBtaW4oeSgpLCBvdGhl
ci55KCkpKTsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbmV3TWF4UG9pbnQobWF4KG1heFgo
KSwgb3RoZXIubWF4WCgpKSwgbWF4KG1heFkoKSwgb3RoZXIubWF4WSgpKSk7Ci0KLSAgICBtX2xv
Y2F0aW9uID0gbmV3TG9jYXRpb247Ci0gICAgbV9zaXplID0gbmV3TWF4UG9pbnQgLSBuZXdMb2Nh
dGlvbjsKLX0KLQotdm9pZCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6c2NhbGUoZmxvYXQgcykKLXsK
LSAgICBtX2xvY2F0aW9uLnNjYWxlKHMsIHMpOwotICAgIG1fc2l6ZS5zY2FsZShzKTsKLX0KLQot
RnJhY3Rpb25hbExheW91dFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxGcmFjdGlvbmFsTGF5
b3V0UmVjdD4mIHJlY3RzKQotewotICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0IHJlc3VsdDsKLQot
ICAgIHNpemVfdCBjb3VudCA9IHJlY3RzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNvdW50OyArK2kpCi0gICAgICAgIHJlc3VsdC51bml0ZShyZWN0c1tpXSk7Ci0KLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1JbnRSZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgRnJhY3Rp
b25hbExheW91dFJlY3QmIHJlY3QpCi17Ci0gICAgSW50UG9pbnQgbG9jYXRpb24gPSBmbG9vcmVk
SW50UG9pbnQocmVjdC5taW5YTWluWUNvcm5lcigpKTsKLSAgICBJbnRQb2ludCBtYXhQb2ludCA9
IGNlaWxlZEludFBvaW50KHJlY3QubWF4WE1heFlDb3JuZXIoKSk7Ci0KLSAgICByZXR1cm4gSW50
UmVjdChsb2NhdGlvbiwgbWF4UG9pbnQgLSBsb2NhdGlvbik7Ci19Ci0KLUZyYWN0aW9uYWxMYXlv
dXRSZWN0IGVuY2xvc2luZ0ZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKLXsKLSNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAgIEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCBsb2NhdGlvbiA9IGZsb29yZWRGcmFjdGlvbmFsTGF5b3V0UG9pbnQocmVjdC5taW5YTWlu
WUNvcm5lcigpKTsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbWF4UG9pbnQgPSBjZWlsZWRG
cmFjdGlvbmFsTGF5b3V0UG9pbnQocmVjdC5tYXhYTWF4WUNvcm5lcigpKTsKLQotICAgIHJldHVy
biBGcmFjdGlvbmFsTGF5b3V0UmVjdChsb2NhdGlvbiwgbWF4UG9pbnQgLSBsb2NhdGlvbik7Ci0j
ZWxzZQotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHJlY3QpOwotI2VuZGlmCi19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuaAkocmV2aXNpb24gMTMzNTE3
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
YykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgot
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEZyYWN0aW9uYWxM
YXlvdXRSZWN0X2gKLSNkZWZpbmUgRnJhY3Rpb25hbExheW91dFJlY3RfaAotCi0jaW5jbHVkZSAi
RnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oIgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRQ
b2ludC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0K
LSNpZiBQTEFURk9STShRVCkKLSNpbmNsdWRlIDxxZ2xvYmFsLmg+Ci1RVF9CRUdJTl9OQU1FU1BB
Q0UKLWNsYXNzIFFSZWN0OwotY2xhc3MgUVJlY3RGOwotUVRfRU5EX05BTUVTUEFDRQotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRmxvYXRSZWN0OwotCi1jbGFzcyBGcmFj
dGlvbmFsTGF5b3V0UmVjdCB7Ci1wdWJsaWM6Ci0gICAgRnJhY3Rpb25hbExheW91dFJlY3QoKSB7
IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQm
IGxvY2F0aW9uLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkKLSAgICAgICAgOiBt
X2xvY2F0aW9uKGxvY2F0aW9uKSwgbV9zaXplKHNpemUpIHsgfQotICAgIEZyYWN0aW9uYWxMYXlv
dXRSZWN0KEZyYWN0aW9uYWxMYXlvdXRVbml0IHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHksIEZy
YWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBoZWlnaHQpCi0g
ICAgICAgIDogbV9sb2NhdGlvbihGcmFjdGlvbmFsTGF5b3V0UG9pbnQoeCwgeSkpLCBtX3NpemUo
RnJhY3Rpb25hbExheW91dFNpemUod2lkdGgsIGhlaWdodCkpIHsgfQotICAgIEZyYWN0aW9uYWxM
YXlvdXRSZWN0KGNvbnN0IEZsb2F0UG9pbnQmIGxvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIHNp
emUpCi0gICAgICAgIDogbV9sb2NhdGlvbihsb2NhdGlvbiksIG1fc2l6ZShzaXplKSB7IH0KLSAg
ICBGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSA6IG1fbG9jYXRpb24o
cmVjdC5sb2NhdGlvbigpKSwgbV9zaXplKHJlY3Quc2l6ZSgpKSB7IH0KLQotICAgIGV4cGxpY2l0
IEZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOyAvLyBkb24ndCBkbyB0aGlz
IGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQotICAgICAgICAKLSAgICBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQgbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9Ci0gICAgRnJh
Y3Rpb25hbExheW91dFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotCi0gICAg
SW50UG9pbnQgcGl4ZWxTbmFwcGVkTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiByb3VuZGVkSW50
UG9pbnQobV9sb2NhdGlvbik7IH0KLSAgICBJbnRTaXplIHBpeGVsU25hcHBlZFNpemUoKSBjb25z
dCB7IHJldHVybiBJbnRTaXplKHNuYXBTaXplVG9QaXhlbChtX3NpemUud2lkdGgoKSwgbV9sb2Nh
dGlvbi54KCkpLCBzbmFwU2l6ZVRvUGl4ZWwobV9zaXplLmhlaWdodCgpLCBtX2xvY2F0aW9uLnko
KSkpOyB9Ci0KLSAgICB2b2lkIHNldExvY2F0aW9uKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2lu
dCYgbG9jYXRpb24pIHsgbV9sb2NhdGlvbiA9IGxvY2F0aW9uOyB9Ci0gICAgdm9pZCBzZXRTaXpl
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KLQot
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHgoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uLngo
KTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHkoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0
aW9uLnkoKTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1heFgoKSBjb25zdCB7IHJldHVy
biB4KCkgKyB3aWR0aCgpOyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgbWF4WSgpIGNvbnN0
IHsgcmV0dXJuIHkoKSArIGhlaWdodCgpOyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgd2lk
dGgoKSBjb25zdCB7IHJldHVybiBtX3NpemUud2lkdGgoKTsgfQotICAgIEZyYWN0aW9uYWxMYXlv
dXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQotCi0gICAg
aW50IHBpeGVsU25hcHBlZFgoKSBjb25zdCB7IHJldHVybiB4KCkucm91bmQoKTsgfQotICAgIGlu
dCBwaXhlbFNuYXBwZWRZKCkgY29uc3QgeyByZXR1cm4geSgpLnJvdW5kKCk7IH0KLSAgICBpbnQg
cGl4ZWxTbmFwcGVkV2lkdGgoKSBjb25zdCB7IHJldHVybiBzbmFwU2l6ZVRvUGl4ZWwod2lkdGgo
KSwgeCgpKTsgfQotICAgIGludCBwaXhlbFNuYXBwZWRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBz
bmFwU2l6ZVRvUGl4ZWwoaGVpZ2h0KCksIHkoKSk7IH0KLSAgICBpbnQgcGl4ZWxTbmFwcGVkTWF4
WCgpIGNvbnN0IHsgcmV0dXJuIChtX2xvY2F0aW9uLngoKSArIG1fc2l6ZS53aWR0aCgpKS5yb3Vu
ZCgpOyB9Ci0gICAgaW50IHBpeGVsU25hcHBlZE1heFkoKSBjb25zdCB7IHJldHVybiAobV9sb2Nh
dGlvbi55KCkgKyBtX3NpemUuaGVpZ2h0KCkpLnJvdW5kKCk7IH0KLQotICAgIHZvaWQgc2V0WChG
cmFjdGlvbmFsTGF5b3V0VW5pdCB4KSB7IG1fbG9jYXRpb24uc2V0WCh4KTsgfQotICAgIHZvaWQg
c2V0WShGcmFjdGlvbmFsTGF5b3V0VW5pdCB5KSB7IG1fbG9jYXRpb24uc2V0WSh5KTsgfQotICAg
IHZvaWQgc2V0V2lkdGgoRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgpIHsgbV9zaXplLnNldFdp
ZHRoKHdpZHRoKTsgfQotICAgIHZvaWQgc2V0SGVpZ2h0KEZyYWN0aW9uYWxMYXlvdXRVbml0IGhl
aWdodCkgeyBtX3NpemUuc2V0SGVpZ2h0KGhlaWdodCk7IH0KLQotICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0KLQotICAgIC8vIE5PVEU6IFRoZSBy
ZXN1bHQgaXMgcm91bmRlZCB0byBpbnRlZ2VyIHZhbHVlcywgYW5kIHRodXMgbWF5IGJlIG5vdCB0
aGUgZXhhY3QKLSAgICAvLyBjZW50ZXIgcG9pbnQuCi0gICAgRnJhY3Rpb25hbExheW91dFBvaW50
IGNlbnRlcigpIGNvbnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludCh4KCkgKyB3aWR0
aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAyKTsgfQotCi0gICAgdm9pZCBtb3ZlKGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1fbG9jYXRpb24gKz0gc2l6ZTsgfSAKLSAgICB2
b2lkIG1vdmVCeShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIG9mZnNldCkgeyBtX2xvY2F0
aW9uLm1vdmUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7IH0KLSAgICB2b2lkIG1vdmUoRnJhY3Rp
b25hbExheW91dFVuaXQgZHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGR5KSB7IG1fbG9jYXRpb24u
bW92ZShkeCwgZHkpOyB9IAotCi0gICAgdm9pZCBleHBhbmQoY29uc3QgRnJhY3Rpb25hbExheW91
dFNpemUmIHNpemUpIHsgbV9zaXplICs9IHNpemU7IH0KLSAgICB2b2lkIGV4cGFuZChjb25zdCBG
cmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50JiBib3gpCi0gICAgewotICAgICAgICBtX2xvY2F0aW9u
Lm1vdmUoLWJveC5sZWZ0KCksIC1ib3gudG9wKCkpOwotICAgICAgICBtX3NpemUuZXhwYW5kKGJv
eC5sZWZ0KCkgKyBib3gucmlnaHQoKSwgYm94LnRvcCgpICsgYm94LmJvdHRvbSgpKTsKLSAgICB9
Ci0gICAgdm9pZCBleHBhbmQoRnJhY3Rpb25hbExheW91dFVuaXQgZHcsIEZyYWN0aW9uYWxMYXlv
dXRVbml0IGRoKSB7IG1fc2l6ZS5leHBhbmQoZHcsIGRoKTsgfQotICAgIHZvaWQgY29udHJhY3Qo
Y29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpIHsgbV9zaXplIC09IHNpemU7IH0KLSAg
ICB2b2lkIGNvbnRyYWN0KEZyYWN0aW9uYWxMYXlvdXRVbml0IGR3LCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBkaCkgeyBtX3NpemUuZXhwYW5kKC1kdywgLWRoKTsgfQotCi0gICAgdm9pZCBzaGlmdFhF
ZGdlVG8oRnJhY3Rpb25hbExheW91dFVuaXQgZWRnZSkKLSAgICB7Ci0gICAgICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IGRlbHRhID0gZWRnZSAtIHgoKTsKLSAgICAgICAgc2V0WChlZGdlKTsKLSAg
ICAgICAgc2V0V2lkdGgoc3RkOjptYXg8RnJhY3Rpb25hbExheW91dFVuaXQ+KDAsIHdpZHRoKCkg
LSBkZWx0YSkpOwotICAgIH0KLSAgICB2b2lkIHNoaWZ0TWF4WEVkZ2VUbyhGcmFjdGlvbmFsTGF5
b3V0VW5pdCBlZGdlKQotICAgIHsKLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZGVsdGEg
PSBlZGdlIC0gbWF4WCgpOwotICAgICAgICBzZXRXaWR0aChzdGQ6Om1heDxGcmFjdGlvbmFsTGF5
b3V0VW5pdD4oMCwgd2lkdGgoKSArIGRlbHRhKSk7Ci0gICAgfQotICAgIHZvaWQgc2hpZnRZRWRn
ZVRvKEZyYWN0aW9uYWxMYXlvdXRVbml0IGVkZ2UpCi0gICAgewotICAgICAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBkZWx0YSA9IGVkZ2UgLSB5KCk7Ci0gICAgICAgIHNldFkoZWRnZSk7Ci0gICAg
ICAgIHNldEhlaWdodChzdGQ6Om1heDxGcmFjdGlvbmFsTGF5b3V0VW5pdD4oMCwgaGVpZ2h0KCkg
LSBkZWx0YSkpOwotICAgIH0KLSAgICB2b2lkIHNoaWZ0TWF4WUVkZ2VUbyhGcmFjdGlvbmFsTGF5
b3V0VW5pdCBlZGdlKQotICAgIHsKLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZGVsdGEg
PSBlZGdlIC0gbWF4WSgpOwotICAgICAgICBzZXRIZWlnaHQoc3RkOjptYXg8RnJhY3Rpb25hbExh
eW91dFVuaXQ+KDAsIGhlaWdodCgpICsgZGVsdGEpKTsKLSAgICB9Ci0KLSAgICBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQgbWluWE1pbllDb3JuZXIoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9
IC8vIHR5cGljYWxseSB0b3BMZWZ0Ci0gICAgRnJhY3Rpb25hbExheW91dFBvaW50IG1heFhNaW5Z
Q29ybmVyKCkgY29uc3QgeyByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KG1fbG9jYXRpb24u
eCgpICsgbV9zaXplLndpZHRoKCksIG1fbG9jYXRpb24ueSgpKTsgfSAvLyB0eXBpY2FsbHkgdG9w
UmlnaHQKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbWluWE1heFlDb3JuZXIoKSBjb25zdCB7
IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQobV9sb2NhdGlvbi54KCksIG1fbG9jYXRpb24u
eSgpICsgbV9zaXplLmhlaWdodCgpKTsgfSAvLyB0eXBpY2FsbHkgYm90dG9tTGVmdAotICAgIEZy
YWN0aW9uYWxMYXlvdXRQb2ludCBtYXhYTWF4WUNvcm5lcigpIGNvbnN0IHsgcmV0dXJuIEZyYWN0
aW9uYWxMYXlvdXRQb2ludChtX2xvY2F0aW9uLngoKSArIG1fc2l6ZS53aWR0aCgpLCBtX2xvY2F0
aW9uLnkoKSArIG1fc2l6ZS5oZWlnaHQoKSk7IH0gLy8gdHlwaWNhbGx5IGJvdHRvbVJpZ2h0Ci0g
ICAgCi0gICAgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JikgY29u
c3Q7Ci0gICAgYm9vbCBjb250YWlucyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpIGNvbnN0
OwotCi0gICAgLy8gVGhpcyBjaGVja3MgdG8gc2VlIGlmIHRoZSByZWN0IGNvbnRhaW5zIHgseSBp
biB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuCi0gICAgLy8gRXF1aXZhbGVudCB0byBjaGVja2luZyBp
ZiB0aGUgcmVjdCBjb250YWlucyBhIDF4MSByZWN0IGJlbG93IGFuZCB0byB0aGUgcmlnaHQgb2Yg
KHB4LHB5KS4KLSAgICBib29sIGNvbnRhaW5zKEZyYWN0aW9uYWxMYXlvdXRVbml0IHB4LCBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBweSkgY29uc3QKLSAgICAgICAgeyByZXR1cm4gcHggPj0geCgpICYm
IHB4IDwgbWF4WCgpICYmIHB5ID49IHkoKSAmJiBweSA8IG1heFkoKTsgfQotICAgIGJvb2wgY29u
dGFpbnMoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBwb2ludCkgY29uc3QgeyByZXR1cm4g
Y29udGFpbnMocG9pbnQueCgpLCBwb2ludC55KCkpOyB9Ci0KLSAgICB2b2lkIGludGVyc2VjdChj
b25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpOwotICAgIHZvaWQgdW5pdGUoY29uc3QgRnJhY3Rp
b25hbExheW91dFJlY3QmKTsKLSAgICB2b2lkIHVuaXRlSWZOb25aZXJvKGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRSZWN0Jik7Ci0KLSAgICB2b2lkIGluZmxhdGVYKEZyYWN0aW9uYWxMYXlvdXRVbml0
IGR4KQotICAgIHsKLSAgICAgICAgbV9sb2NhdGlvbi5zZXRYKG1fbG9jYXRpb24ueCgpIC0gZHgp
OwotICAgICAgICBtX3NpemUuc2V0V2lkdGgobV9zaXplLndpZHRoKCkgKyBkeCArIGR4KTsKLSAg
ICB9Ci0gICAgdm9pZCBpbmZsYXRlWShGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeSkKLSAgICB7Ci0g
ICAgICAgIG1fbG9jYXRpb24uc2V0WShtX2xvY2F0aW9uLnkoKSAtIGR5KTsKLSAgICAgICAgbV9z
aXplLnNldEhlaWdodChtX3NpemUuaGVpZ2h0KCkgKyBkeSArIGR5KTsKLSAgICB9Ci0gICAgdm9p
ZCBpbmZsYXRlKEZyYWN0aW9uYWxMYXlvdXRVbml0IGQpIHsgaW5mbGF0ZVgoZCk7IGluZmxhdGVZ
KGQpOyB9Ci0gICAgdm9pZCBzY2FsZShmbG9hdCBzKTsKLQotICAgIEZyYWN0aW9uYWxMYXlvdXRS
ZWN0IHRyYW5zcG9zZWRSZWN0KCkgY29uc3QgeyByZXR1cm4gRnJhY3Rpb25hbExheW91dFJlY3Qo
bV9sb2NhdGlvbi50cmFuc3Bvc2VkUG9pbnQoKSwgbV9zaXplLnRyYW5zcG9zZWRTaXplKCkpOyB9
Ci0KLSAgICBzdGF0aWMgRnJhY3Rpb25hbExheW91dFJlY3QgaW5maW5pdGVSZWN0KCkKLSAgICB7
Ci0gICAgICAgIC8vIFJldHVybiBhIHJlY3QgdGhhdCBpcyBzbGlnaHRseSBzbWFsbGVyIHRoYW4g
dGhlIHRydWUgbWF4IHJlY3QgdG8gYWxsb3cgcGl4ZWxTbmFwcGluZyB0byByb3VuZCB1cCB0byB0
aGUgbmVhcmVzdCBJbnRSZWN0IHdpdGhvdXQgb3ZlcmZsb3dpbmcuCi0gICAgICAgIHJldHVybiBG
cmFjdGlvbmFsTGF5b3V0UmVjdChGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bmVhcmx5TWluKCkgLyAy
LCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bmVhcmx5TWluKCkgLyAyLCBGcmFjdGlvbmFsTGF5b3V0
VW5pdDo6bmVhcmx5TWF4KCksIEZyYWN0aW9uYWxMYXlvdXRVbml0OjpuZWFybHlNYXgoKSk7Ci0g
ICAgfQotCi0jaWYgUExBVEZPUk0oUVQpCi0gICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFJl
Y3QoY29uc3QgUVJlY3QmKTsKLSAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25z
dCBRUmVjdEYmKTsKLSAgICBvcGVyYXRvciBRUmVjdEYoKSBjb25zdDsKLSNlbmRpZgotCi1wcml2
YXRlOgotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBtX2xvY2F0aW9uOwotICAgIEZyYWN0aW9u
YWxMYXlvdXRTaXplIG1fc2l6ZTsKLX07Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UmVjdCBp
bnRlcnNlY3Rpb24oY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRSZWN0JiBiKQotewotICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0IGMgPSBhOwotICAg
IGMuaW50ZXJzZWN0KGIpOwotICAgIHJldHVybiBjOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExh
eW91dFJlY3QgdW5pb25SZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBhLCBjb25zdCBG
cmFjdGlvbmFsTGF5b3V0UmVjdCYgYikKLXsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCBjID0g
YTsKLSAgICBjLnVuaXRlKGIpOwotICAgIHJldHVybiBjOwotfQotCi1GcmFjdGlvbmFsTGF5b3V0
UmVjdCB1bmlvblJlY3QoY29uc3QgVmVjdG9yPEZyYWN0aW9uYWxMYXlvdXRSZWN0PiYpOwotCi1p
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBhLCBjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYikKLXsKLSAgICByZXR1cm4gYS5sb2NhdGlvbigpID09
IGIubG9jYXRpb24oKSAmJiBhLnNpemUoKSA9PSBiLnNpemUoKTsKLX0KLQotaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYSwgY29uc3QgRnJhY3Rpb25h
bExheW91dFJlY3QmIGIpCi17Ci0gICAgcmV0dXJuIGEubG9jYXRpb24oKSAhPSBiLmxvY2F0aW9u
KCkgfHwgYS5zaXplKCkgIT0gYi5zaXplKCk7Ci19Ci0KLWlubGluZSBJbnRSZWN0IHBpeGVsU25h
cHBlZEludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIHJlY3QpCi17Ci0jaWYgRU5B
QkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICByZXR1cm4gSW50UmVjdChyb3VuZGVkSW50UG9pbnQo
cmVjdC5sb2NhdGlvbigpKSwgSW50U2l6ZShzbmFwU2l6ZVRvUGl4ZWwocmVjdC53aWR0aCgpLCBy
ZWN0LngoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc25hcFNpemVUb1BpeGVsKHJlY3QuaGVpZ2h0KCksIHJlY3QueSgpKSkp
OwotCi0jZWxzZQotICAgIHJldHVybiBJbnRSZWN0KHJlY3QpOwotI2VuZGlmCi19Ci0KLUludFJl
Y3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpOwotRnJhY3Rp
b25hbExheW91dFJlY3QgZW5jbG9zaW5nRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgRmxvYXRS
ZWN0Jik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEZyYWN0aW9uYWxM
YXlvdXRSZWN0X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0
aW9uYWxMYXlvdXRTaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFNpemUuaAkocmV2aXNpb24gMTMzNTE3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFNpemUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSwxNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMiwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEZyYWN0aW9uYWxMYXlvdXRTaXpl
X2gKLSNkZWZpbmUgRnJhY3Rpb25hbExheW91dFNpemVfaAotCi0jaW5jbHVkZSAiRmxvYXRTaXpl
LmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFVuaXQuaCIKLSNpbmNsdWRlICJJbnRTaXpl
LmgiCi0KLSNpZiBQTEFURk9STShRVCkKLSNpbmNsdWRlIDxxZ2xvYmFsLmg+Ci1RVF9CRUdJTl9O
QU1FU1BBQ0UKLWNsYXNzIFFTaXplOwotY2xhc3MgUVNpemVGOwotUVRfRU5EX05BTUVTUEFDRQot
I2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRnJhY3Rpb25hbExheW91dFBv
aW50OwotCi1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0U2l6ZSB7Ci1wdWJsaWM6Ci0gICAgRnJhY3Rp
b25hbExheW91dFNpemUoKSA6IG1fd2lkdGgoMCksIG1faGVpZ2h0KDApIHsgfQotICAgIEZyYWN0
aW9uYWxMYXlvdXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpIDogbV93aWR0aChzaXplLndpZHRo
KCkpLCBtX2hlaWdodChzaXplLmhlaWdodCgpKSB7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0U2l6
ZShGcmFjdGlvbmFsTGF5b3V0VW5pdCB3aWR0aCwgRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0
KSA6IG1fd2lkdGgod2lkdGgpLCBtX2hlaWdodChoZWlnaHQpIHsgfQotCi0gICAgZXhwbGljaXQg
RnJhY3Rpb25hbExheW91dFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKSA6IG1fd2lkdGgoc2l6
ZS53aWR0aCgpKSwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkgeyB9Ci0gICAgCi0gICAgRnJhY3Rp
b25hbExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9Ci0gICAgRnJh
Y3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KLQot
ICAgIHZvaWQgc2V0V2lkdGgoRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgpIHsgbV93aWR0aCA9
IHdpZHRoOyB9Ci0gICAgdm9pZCBzZXRIZWlnaHQoRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0
KSB7IG1faGVpZ2h0ID0gaGVpZ2h0OyB9Ci0KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiBtX3dpZHRoIDw9IDAgfHwgbV9oZWlnaHQgPD0gMDsgfQotICAgIGJvb2wgaXNaZXJvKCkg
Y29uc3QgeyByZXR1cm4gIW1fd2lkdGggJiYgIW1faGVpZ2h0OyB9Ci0KLSAgICBmbG9hdCBhc3Bl
Y3RSYXRpbygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX3dpZHRoKSAvIHN0
YXRpY19jYXN0PGZsb2F0PihtX2hlaWdodCk7IH0KLSAgICAKLSAgICB2b2lkIGV4cGFuZChGcmFj
dGlvbmFsTGF5b3V0VW5pdCB3aWR0aCwgRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KQotICAg
IHsKLSAgICAgICAgbV93aWR0aCArPSB3aWR0aDsKLSAgICAgICAgbV9oZWlnaHQgKz0gaGVpZ2h0
OwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNjYWxlKGZsb2F0IHNjYWxlKQotICAgIHsKLSAgICAg
ICAgbV93aWR0aCAqPSBzY2FsZTsKLSAgICAgICAgbV9oZWlnaHQgKj0gc2NhbGU7Ci0gICAgfQot
Ci0gICAgdm9pZCBzY2FsZShmbG9hdCB3aWR0aFNjYWxlLCBmbG9hdCBoZWlnaHRTY2FsZSkKLSAg
ICB7Ci0gICAgICAgIG1fd2lkdGggKj0gd2lkdGhTY2FsZTsKLSAgICAgICAgbV9oZWlnaHQgKj0g
aGVpZ2h0U2NhbGU7Ci0gICAgfQotICAgIAotICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplIGV4cGFu
ZGVkVG8oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIG90aGVyKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKG1fd2lkdGggPiBvdGhlci5tX3dpZHRo
ID8gbV93aWR0aCA6IG90aGVyLm1fd2lkdGgsCi0gICAgICAgICAgICBtX2hlaWdodCA+IG90aGVy
Lm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdodCk7Ci0gICAgfQotCi0gICAgRnJh
Y3Rpb25hbExheW91dFNpemUgc2hydW5rVG8oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIG90
aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKG1f
d2lkdGggPCBvdGhlci5tX3dpZHRoID8gbV93aWR0aCA6IG90aGVyLm1fd2lkdGgsCi0gICAgICAg
ICAgICBtX2hlaWdodCA8IG90aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdo
dCk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGFtcE5lZ2F0aXZlVG9aZXJvKCkKLSAgICB7Ci0gICAg
ICAgICp0aGlzID0gZXhwYW5kZWRUbyhGcmFjdGlvbmFsTGF5b3V0U2l6ZSgpKTsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBjbGFtcFRvTWluaW11bVNpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFNp
emUmIG1pbmltdW1TaXplKQotICAgIHsKLSAgICAgICAgaWYgKG1fd2lkdGggPCBtaW5pbXVtU2l6
ZS53aWR0aCgpKQotICAgICAgICAgICAgbV93aWR0aCA9IG1pbmltdW1TaXplLndpZHRoKCk7Ci0g
ICAgICAgIGlmIChtX2hlaWdodCA8IG1pbmltdW1TaXplLmhlaWdodCgpKQotICAgICAgICAgICAg
bV9oZWlnaHQgPSBtaW5pbXVtU2l6ZS5oZWlnaHQoKTsKLSAgICB9Ci0KLSAgICBGcmFjdGlvbmFs
TGF5b3V0U2l6ZSB0cmFuc3Bvc2VkU2l6ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFNpemUobV9oZWlnaHQsIG1fd2lkdGgpOwotICAgIH0KLQotI2lmIFBM
QVRGT1JNKFFUKQotICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0IFFTaXpl
Jik7Ci0gICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFNpemUoY29uc3QgUVNpemVGJik7Ci0g
ICAgb3BlcmF0b3IgUVNpemVGKCkgY29uc3Q7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBtX3dpZHRoLCBtX2hlaWdodDsKLX07Ci0KLWlubGluZSBGcmFjdGlv
bmFsTGF5b3V0U2l6ZSYgb3BlcmF0b3IrPShGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYSwgY29uc3Qg
RnJhY3Rpb25hbExheW91dFNpemUmIGIpCi17Ci0gICAgYS5zZXRXaWR0aChhLndpZHRoKCkgKyBi
LndpZHRoKCkpOwotICAgIGEuc2V0SGVpZ2h0KGEuaGVpZ2h0KCkgKyBiLmhlaWdodCgpKTsKLSAg
ICByZXR1cm4gYTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplJiBvcGVyYXRvci09
KEZyYWN0aW9uYWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikK
LXsKLSAgICBhLnNldFdpZHRoKGEud2lkdGgoKSAtIGIud2lkdGgoKSk7Ci0gICAgYS5zZXRIZWln
aHQoYS5oZWlnaHQoKSAtIGIuaGVpZ2h0KCkpOwotICAgIHJldHVybiBhOwotfQotCi1pbmxpbmUg
RnJhY3Rpb25hbExheW91dFNpemUgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXpl
JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKLXsKLSAgICByZXR1cm4gRnJhY3Rp
b25hbExheW91dFNpemUoYS53aWR0aCgpICsgYi53aWR0aCgpLCBhLmhlaWdodCgpICsgYi5oZWln
aHQoKSk7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSBvcGVyYXRvci0oY29uc3Qg
RnJhY3Rpb25hbExheW91dFNpemUmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQot
ewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShhLndpZHRoKCkgLSBiLndpZHRoKCks
IGEuaGVpZ2h0KCkgLSBiLmhlaWdodCgpKTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRT
aXplIG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkKLXsKLSAgICBy
ZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUoLXNpemUud2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkp
OwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXpl
JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKLXsKLSAgICByZXR1cm4gYS53aWR0
aCgpID09IGIud2lkdGgoKSAmJiBhLmhlaWdodCgpID09IGIuaGVpZ2h0KCk7Ci19Ci0KLWlubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGEsIGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRTaXplJiBiKQotewotICAgIHJldHVybiBhLndpZHRoKCkgIT0gYi53aWR0
aCgpIHx8IGEuaGVpZ2h0KCkgIT0gYi5oZWlnaHQoKTsKLX0KLQotaW5saW5lIEludFNpemUgZmxv
b3JlZEludFNpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHMpCi17Ci0gICAgcmV0dXJu
IEludFNpemUocy53aWR0aCgpLmZsb29yKCksIHMuaGVpZ2h0KCkuZmxvb3IoKSk7Ci19Ci0KLWlu
bGluZSBJbnRTaXplIHJvdW5kZWRJbnRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBz
KQotewotICAgIHJldHVybiBJbnRTaXplKHMud2lkdGgoKS5yb3VuZCgpLCBzLmhlaWdodCgpLnJv
dW5kKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBGcmFjdGlv
bmFsTGF5b3V0U2l6ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0xheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiTGF5b3V0
VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUg
IlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5jcHAJKHJldmlz
aW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
TGF5ZXJBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJBbmlt
YXRpb24uaCIKIAotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRTaXplLmgiCisjaW5jbHVkZSAi
TGF5b3V0U2l6ZS5oIgogI2luY2x1ZGUgIlVuaXRCZXppZXIuaCIKICNpbmNsdWRlIDx3dGYvQ3Vy
cmVudFRpbWUuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50
UmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW50UmVjdC5jcHAJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ludFJlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogCi0jaW5jbHVkZSAiRnJh
Y3Rpb25hbExheW91dFJlY3QuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJM
YXlvdXRSZWN0LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogCiB1c2luZyBzdGQ6Om1heDsKQEAg
LTQxLDcgKzQxLDcgQEAgSW50UmVjdDo6SW50UmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCiB7CiB9
CiAKLUludFJlY3Q6OkludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIHIpCitJbnRS
ZWN0OjpJbnRSZWN0KGNvbnN0IExheW91dFJlY3QmIHIpCiAgICAgOiBtX2xvY2F0aW9uKHIueCgp
LCByLnkoKSkKICAgICAsIG1fc2l6ZShyLndpZHRoKCksIHIuaGVpZ2h0KCkpCiB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCShyZXZpc2lvbiAxMzM1
MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgc3RydWN0IFNrSVJlY3Q7CiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRSZWN0Owor
Y2xhc3MgTGF5b3V0UmVjdDsKIAogY2xhc3MgSW50UmVjdCB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX2xvY2F0aW9u
KEludFBvaW50KHgsIHkpKSwgbV9zaXplKEludFNpemUod2lkdGgsIGhlaWdodCkpIHsgfQogCiAg
ICAgZXhwbGljaXQgSW50UmVjdChjb25zdCBGbG9hdFJlY3QmKTsgLy8gZG9uJ3QgZG8gdGhpcyBp
bXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKLSAgICBleHBsaWNpdCBJbnRSZWN0KGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRSZWN0Jik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBp
dCdzIGxvc3N5CisgICAgZXhwbGljaXQgSW50UmVjdChjb25zdCBMYXlvdXRSZWN0Jik7IC8vIGRv
bid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CiAgICAgICAgIAogICAgIElu
dFBvaW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfQogICAgIEludFNp
emUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRCb3hFeHRlbnQuY3BwCShyZXZpc2lv
biAxMzM1MTcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9u
YWxMYXlvdXRCb3hFeHRlbnQuY3BwOjEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0xheW91dEJveEV4dGVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
OTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRCb3hF
eHRlbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGcmFjdGlvbmFsTGF5b3V0VW5pdCBG
cmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Ojpsb2dpY2FsVG9wKFdyaXRpbmdNb2RlIHdyaXRpbmdN
b2RlKSBjb25zdAoreworICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5n
TW9kZSkgPyBtX3RvcCA6IG1fbGVmdDsKK30KKworRnJhY3Rpb25hbExheW91dFVuaXQgRnJhY3Rp
b25hbExheW91dEJveEV4dGVudDo6bG9naWNhbEJvdHRvbShXcml0aW5nTW9kZSB3cml0aW5nTW9k
ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01v
ZGUpID8gbV9ib3R0b20gOiBtX3JpZ2h0OworfQorCitGcmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFj
dGlvbmFsTGF5b3V0Qm94RXh0ZW50Ojpsb2dpY2FsTGVmdChXcml0aW5nTW9kZSB3cml0aW5nTW9k
ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01v
ZGUpID8gbV9sZWZ0IDogbV90b3A7Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9u
YWxMYXlvdXRCb3hFeHRlbnQ6OmxvZ2ljYWxSaWdodChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkg
Y29uc3QKK3sKKyAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUp
ID8gbV9yaWdodCA6IG1fYm90dG9tOworfQorCitGcmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlv
bmFsTGF5b3V0Qm94RXh0ZW50OjpiZWZvcmUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0
Cit7CisgICAgc3dpdGNoICh3cml0aW5nTW9kZSkgeworICAgIGNhc2UgVG9wVG9Cb3R0b21Xcml0
aW5nTW9kZToKKyAgICAgICAgcmV0dXJuIG1fdG9wOworICAgIGNhc2UgQm90dG9tVG9Ub3BXcml0
aW5nTW9kZToKKyAgICAgICAgcmV0dXJuIG1fYm90dG9tOworICAgIGNhc2UgTGVmdFRvUmlnaHRX
cml0aW5nTW9kZToKKyAgICAgICAgcmV0dXJuIG1fbGVmdDsKKyAgICBjYXNlIFJpZ2h0VG9MZWZ0
V3JpdGluZ01vZGU6CisgICAgICAgIHJldHVybiBtX3JpZ2h0OworICAgIH0KKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbV90b3A7Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRV
bml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmFmdGVyKFdyaXRpbmdNb2RlIHdyaXRpbmdN
b2RlKSBjb25zdAoreworICAgIHN3aXRjaCAod3JpdGluZ01vZGUpIHsKKyAgICBjYXNlIFRvcFRv
Qm90dG9tV3JpdGluZ01vZGU6CisgICAgICAgIHJldHVybiBtX2JvdHRvbTsKKyAgICBjYXNlIEJv
dHRvbVRvVG9wV3JpdGluZ01vZGU6CisgICAgICAgIHJldHVybiBtX3RvcDsKKyAgICBjYXNlIExl
ZnRUb1JpZ2h0V3JpdGluZ01vZGU6CisgICAgICAgIHJldHVybiBtX3JpZ2h0OworICAgIGNhc2Ug
UmlnaHRUb0xlZnRXcml0aW5nTW9kZToKKyAgICAgICAgcmV0dXJuIG1fbGVmdDsKKyAgICB9Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG1fYm90dG9tOworfQorCitGcmFj
dGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzdGFydChXcml0aW5n
TW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0Cit7CisgICAg
aWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkKKyAgICAgICAgcmV0dXJu
IGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSA/IG1fbGVmdCA6IG1fcmlnaHQ7Cisg
ICAgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSA/IG1fdG9wIDogbV9i
b3R0b207Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRl
bnQ6OmVuZChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24p
IGNvbnN0Cit7CisgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkK
KyAgICAgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSA/IG1fcmln
aHQgOiBtX2xlZnQ7CisgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9u
KSA/IG1fYm90dG9tIDogbV90b3A7Cit9CisKK3ZvaWQgRnJhY3Rpb25hbExheW91dEJveEV4dGVu
dDo6c2V0QmVmb3JlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCB2YWx1ZSkKK3sKKyAgICBzd2l0Y2ggKHdyaXRpbmdNb2RlKSB7CisgICAgY2FzZSBUb3BUb0Jv
dHRvbVdyaXRpbmdNb2RlOgorICAgICAgICBtX3RvcCA9IHZhbHVlOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEJvdHRvbVRvVG9wV3JpdGluZ01vZGU6CisgICAgICAgIG1fYm90dG9tID0gdmFs
dWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGVmdFRvUmlnaHRXcml0aW5nTW9kZToKKyAg
ICAgICAgbV9sZWZ0ID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmlnaHRUb0xl
ZnRXcml0aW5nTW9kZToKKyAgICAgICAgbV9yaWdodCA9IHZhbHVlOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgbV90
b3AgPSB2YWx1ZTsKKyAgICB9Cit9CisKK3ZvaWQgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6
c2V0QWZ0ZXIoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHZh
bHVlKQoreworICAgIHN3aXRjaCAod3JpdGluZ01vZGUpIHsKKyAgICBjYXNlIFRvcFRvQm90dG9t
V3JpdGluZ01vZGU6CisgICAgICAgIG1fYm90dG9tID0gdmFsdWU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQm90dG9tVG9Ub3BXcml0aW5nTW9kZToKKyAgICAgICAgbV90b3AgPSB2YWx1ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMZWZ0VG9SaWdodFdyaXRpbmdNb2RlOgorICAgICAg
ICBtX3JpZ2h0ID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmlnaHRUb0xlZnRX
cml0aW5nTW9kZToKKyAgICAgICAgbV9sZWZ0ID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBtX2JvdHRv
bSA9IHZhbHVlOworICAgIH0KK30KKwordm9pZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Ojpz
ZXRTdGFydChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24s
IEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKQoreworICAgIGlmIChpc0hvcml6b250YWxXcml0
aW5nTW9kZSh3cml0aW5nTW9kZSkpIHsKKyAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oZGlyZWN0aW9uKSkKKyAgICAgICAgICAgIG1fbGVmdCA9IHZhbHVlOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX3JpZ2h0ID0gdmFsdWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYg
KGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSkKKyAgICAgICAgICAgIG1fdG9wID0g
dmFsdWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYm90dG9tID0gdmFsdWU7CisgICAg
fQorfQorCit2b2lkIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OnNldEVuZChXcml0aW5nTW9k
ZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIEZyYWN0aW9uYWxMYXlvdXRV
bml0IHZhbHVlKQoreworICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9k
ZSkpIHsKKyAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSkKKyAg
ICAgICAgICAgIG1fcmlnaHQgPSB2YWx1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9s
ZWZ0ID0gdmFsdWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oZGlyZWN0aW9uKSkKKyAgICAgICAgICAgIG1fYm90dG9tID0gdmFsdWU7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1fdG9wID0gdmFsdWU7CisgICAgfQorfQorCitGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6bXV0YWJsZUxvZ2ljYWxMZWZ0
KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQoreworICAgIHJldHVybiBpc0hvcml6b250YWxXcml0
aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX2xlZnQgOiBtX3RvcDsKK30KKworRnJhY3Rpb25hbExh
eW91dFVuaXQmIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6Om11dGFibGVMb2dpY2FsUmlnaHQo
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCit7CisgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fcmlnaHQgOiBtX2JvdHRvbTsKK30KKworRnJhY3Rpb25h
bExheW91dFVuaXQmIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6Om11dGFibGVCZWZvcmUoV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUpCit7CisgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKHdyaXRpbmdNb2RlKSA/IChpc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSh3cml0aW5nTW9k
ZSkgPyBtX2JvdHRvbSA6IG1fdG9wKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChpc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSh3cml0aW5nTW9k
ZSkgPyBtX3JpZ2h0OiBtX2xlZnQpOworfQorCitGcmFjdGlvbmFsTGF5b3V0VW5pdCYgRnJhY3Rp
b25hbExheW91dEJveEV4dGVudDo6bXV0YWJsZUFmdGVyKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2Rl
KQoreworICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyAo
aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV90b3AgOiBtX2JvdHRv
bSkgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9sZWZ0OiBtX3JpZ2h0
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRCb3hFeHRlbnQuY3BwCShyZXZpc2lvbiAx
MzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRCb3hFeHRl
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwzMSArMjksMzEgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oIgorI2lu
Y2x1ZGUgIkxheW91dEJveEV4dGVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZyYWN0
aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmxvZ2ljYWxUb3AoV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0CitMYXlvdXRVbml0IExheW91dEJveEV4dGVudDo6
bG9naWNhbFRvcChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QKIHsKICAgICByZXR1cm4g
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV90b3AgOiBtX2xlZnQ7CiB9
CiAKLUZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmxvZ2lj
YWxCb3R0b20oV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0CitMYXlvdXRVbml0IExheW91
dEJveEV4dGVudDo6bG9naWNhbEJvdHRvbShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QK
IHsKICAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9i
b3R0b20gOiBtX3JpZ2h0OwogfQogCi1GcmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5
b3V0Qm94RXh0ZW50Ojpsb2dpY2FsTGVmdChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QK
K0xheW91dFVuaXQgTGF5b3V0Qm94RXh0ZW50Ojpsb2dpY2FsTGVmdChXcml0aW5nTW9kZSB3cml0
aW5nTW9kZSkgY29uc3QKIHsKICAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3Jp
dGluZ01vZGUpID8gbV9sZWZ0IDogbV90b3A7CiB9CiAKLUZyYWN0aW9uYWxMYXlvdXRVbml0IEZy
YWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmxvZ2ljYWxSaWdodChXcml0aW5nTW9kZSB3cml0aW5n
TW9kZSkgY29uc3QKK0xheW91dFVuaXQgTGF5b3V0Qm94RXh0ZW50Ojpsb2dpY2FsUmlnaHQoV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fcmlnaHQgOiBtX2JvdHRvbTsKIH0KIAotRnJhY3Rp
b25hbExheW91dFVuaXQgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6YmVmb3JlKFdyaXRpbmdN
b2RlIHdyaXRpbmdNb2RlKSBjb25zdAorTGF5b3V0VW5pdCBMYXlvdXRCb3hFeHRlbnQ6OmJlZm9y
ZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QKIHsKICAgICBzd2l0Y2ggKHdyaXRpbmdN
b2RlKSB7CiAgICAgY2FzZSBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlOgpAQCAtNjksNyArNjksNyBA
QCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94CiAgICAgcmV0dXJuIG1f
dG9wOwogfQogCi1GcmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50
OjphZnRlcihXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QKK0xheW91dFVuaXQgTGF5b3V0
Qm94RXh0ZW50OjphZnRlcihXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QKIHsKICAgICBz
d2l0Y2ggKHdyaXRpbmdNb2RlKSB7CiAgICAgY2FzZSBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlOgpA
QCAtODUsMjEgKzg1LDIxIEBAIEZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRC
b3gKICAgICByZXR1cm4gbV9ib3R0b207CiB9CiAKLUZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0
aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OnN0YXJ0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbikgY29uc3QKK0xheW91dFVuaXQgTGF5b3V0Qm94RXh0ZW50Ojpz
dGFydChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pIGNv
bnN0CiB7CiAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkKICAg
ICAgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSA/IG1fbGVmdCA6
IG1fcmlnaHQ7CiAgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSA/
IG1fdG9wIDogbV9ib3R0b207CiB9CiAKLUZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxM
YXlvdXRCb3hFeHRlbnQ6OmVuZChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlv
biBkaXJlY3Rpb24pIGNvbnN0CitMYXlvdXRVbml0IExheW91dEJveEV4dGVudDo6ZW5kKFdyaXRp
bmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikgY29uc3QKIHsKICAg
ICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKQogICAgICAgICByZXR1
cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24pID8gbV9yaWdodCA6IG1fbGVmdDsK
ICAgICByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24pID8gbV9ib3R0b20g
OiBtX3RvcDsKIH0KIAotdm9pZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzZXRCZWZvcmUo
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKQordm9p
ZCBMYXlvdXRCb3hFeHRlbnQ6OnNldEJlZm9yZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgTGF5
b3V0VW5pdCB2YWx1ZSkKIHsKICAgICBzd2l0Y2ggKHdyaXRpbmdNb2RlKSB7CiAgICAgY2FzZSBU
b3BUb0JvdHRvbVdyaXRpbmdNb2RlOgpAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgRnJhY3Rpb25h
bExheW91dEJveEV4dGVudDo6c2V0QmVmb3IKICAgICB9CiB9CiAKLXZvaWQgRnJhY3Rpb25hbExh
eW91dEJveEV4dGVudDo6c2V0QWZ0ZXIoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIEZyYWN0aW9u
YWxMYXlvdXRVbml0IHZhbHVlKQordm9pZCBMYXlvdXRCb3hFeHRlbnQ6OnNldEFmdGVyKFdyaXRp
bmdNb2RlIHdyaXRpbmdNb2RlLCBMYXlvdXRVbml0IHZhbHVlKQogewogICAgIHN3aXRjaCAod3Jp
dGluZ01vZGUpIHsKICAgICBjYXNlIFRvcFRvQm90dG9tV3JpdGluZ01vZGU6CkBAIC0xNDEsNyAr
MTQxLDcgQEAgdm9pZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzZXRBZnRlcgogICAgIH0K
IH0KIAotdm9pZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzZXRTdGFydChXcml0aW5nTW9k
ZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIEZyYWN0aW9uYWxMYXlvdXRV
bml0IHZhbHVlKQordm9pZCBMYXlvdXRCb3hFeHRlbnQ6OnNldFN0YXJ0KFdyaXRpbmdNb2RlIHdy
aXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgTGF5b3V0VW5pdCB2YWx1ZSkKIHsK
ICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKSB7CiAgICAgICAg
IGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKGRpcmVjdGlvbikpCkBAIC0xNTYsNyArMTU2LDcg
QEAgdm9pZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzZXRTdGFydAogICAgIH0KIH0KIAot
dm9pZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzZXRFbmQoV3JpdGluZ01vZGUgd3JpdGlu
Z01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCB2YWx1
ZSkKK3ZvaWQgTGF5b3V0Qm94RXh0ZW50OjpzZXRFbmQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUs
IFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBMYXlvdXRVbml0IHZhbHVlKQogewogICAgIGlmIChp
c0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpIHsKICAgICAgICAgaWYgKGlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSkKQEAgLTE3MSwyMyArMTcxLDIzIEBAIHZvaWQg
RnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6c2V0RW5kKFcKICAgICB9CiB9CiAKLUZyYWN0aW9u
YWxMYXlvdXRVbml0JiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjptdXRhYmxlTG9naWNhbExl
ZnQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCitMYXlvdXRVbml0JiBMYXlvdXRCb3hFeHRlbnQ6
Om11dGFibGVMb2dpY2FsTGVmdChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKIHsKICAgICByZXR1
cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9sZWZ0IDogbV90b3A7
CiB9CiAKLUZyYWN0aW9uYWxMYXlvdXRVbml0JiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Ojpt
dXRhYmxlTG9naWNhbFJpZ2h0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQorTGF5b3V0VW5pdCYg
TGF5b3V0Qm94RXh0ZW50OjptdXRhYmxlTG9naWNhbFJpZ2h0KFdyaXRpbmdNb2RlIHdyaXRpbmdN
b2RlKQogewogICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkg
PyBtX3JpZ2h0IDogbV9ib3R0b207CiB9CiAKLUZyYWN0aW9uYWxMYXlvdXRVbml0JiBGcmFjdGlv
bmFsTGF5b3V0Qm94RXh0ZW50OjptdXRhYmxlQmVmb3JlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2Rl
KQorTGF5b3V0VW5pdCYgTGF5b3V0Qm94RXh0ZW50OjptdXRhYmxlQmVmb3JlKFdyaXRpbmdNb2Rl
IHdyaXRpbmdNb2RlKQogewogICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0
aW5nTW9kZSkgPyAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9i
b3R0b20gOiBtX3RvcCkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9y
aWdodDogbV9sZWZ0KTsKIH0KIAotRnJhY3Rpb25hbExheW91dFVuaXQmIEZyYWN0aW9uYWxMYXlv
dXRCb3hFeHRlbnQ6Om11dGFibGVBZnRlcihXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKK0xheW91
dFVuaXQmIExheW91dEJveEV4dGVudDo6bXV0YWJsZUFmdGVyKFdyaXRpbmdNb2RlIHdyaXRpbmdN
b2RlKQogewogICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkg
PyAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV90b3AgOiBtX2Jv
dHRvbSkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9sZWZ0OiBtX3Jp
Z2h0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dEJveEV4
dGVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xh
eW91dEJveEV4dGVudC5oCShyZXZpc2lvbiAxMzM1MTcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuaDoxMzM1MTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRCb3hFeHRlbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRnJhY3Rpb25hbExheW91dEJveEV4dGVu
dF9oCisjZGVmaW5lIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnRfaAorCisjaW5jbHVkZSAiRnJh
Y3Rpb25hbExheW91dFVuaXQuaCIKKyNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCisjaW5jbHVk
ZSAiV3JpdGluZ01vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGcmFjdGlv
bmFsTGF5b3V0Qm94RXh0ZW50IHsKK3B1YmxpYzoKKyAgICBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0
ZW50KCkgOiBtX3RvcCgwKSwgbV9yaWdodCgwKSwgbV9ib3R0b20oMCksIG1fbGVmdCgwKSB7IH0K
KyAgICBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50KEZyYWN0aW9uYWxMYXlvdXRVbml0IHRvcCwg
RnJhY3Rpb25hbExheW91dFVuaXQgcmlnaHQsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGJvdHRvbSwg
RnJhY3Rpb25hbExheW91dFVuaXQgbGVmdCkKKyAgICAgICAgOiBtX3RvcCh0b3ApLCBtX3JpZ2h0
KHJpZ2h0KSwgbV9ib3R0b20oYm90dG9tKSwgbV9sZWZ0KGxlZnQpIHsgfQorCisgICAgaW5saW5l
IEZyYWN0aW9uYWxMYXlvdXRVbml0IHRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wOyB9CisgICAg
aW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yaWdo
dDsgfQorICAgIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBib3R0b20oKSBjb25zdCB7IHJl
dHVybiBtX2JvdHRvbTsgfQorICAgIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBsZWZ0KCkg
Y29uc3QgeyByZXR1cm4gbV9sZWZ0OyB9CisKKyAgICBpbmxpbmUgdm9pZCBzZXRUb3AoRnJhY3Rp
b25hbExheW91dFVuaXQgdmFsdWUpIHsgbV90b3AgPSB2YWx1ZTsgfQorICAgIGlubGluZSB2b2lk
IHNldFJpZ2h0KEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKSB7IG1fcmlnaHQgPSB2YWx1ZTsg
fQorICAgIGlubGluZSB2b2lkIHNldEJvdHRvbShGcmFjdGlvbmFsTGF5b3V0VW5pdCB2YWx1ZSkg
eyBtX2JvdHRvbSA9IHZhbHVlOyB9CisgICAgaW5saW5lIHZvaWQgc2V0TGVmdChGcmFjdGlvbmFs
TGF5b3V0VW5pdCB2YWx1ZSkgeyBtX2xlZnQgPSB2YWx1ZTsgfQorCisgICAgRnJhY3Rpb25hbExh
eW91dFVuaXQgbG9naWNhbFRvcChXcml0aW5nTW9kZSkgY29uc3Q7CisgICAgRnJhY3Rpb25hbExh
eW91dFVuaXQgbG9naWNhbEJvdHRvbShXcml0aW5nTW9kZSkgY29uc3Q7CisgICAgRnJhY3Rpb25h
bExheW91dFVuaXQgbG9naWNhbExlZnQoV3JpdGluZ01vZGUpIGNvbnN0OworICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IGxvZ2ljYWxSaWdodChXcml0aW5nTW9kZSkgY29uc3Q7CisKKyAgICBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBiZWZvcmUoV3JpdGluZ01vZGUpIGNvbnN0OworICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IGFmdGVyKFdyaXRpbmdNb2RlKSBjb25zdDsKKyAgICBGcmFjdGlvbmFsTGF5
b3V0VW5pdCBzdGFydChXcml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbikgY29uc3Q7CisgICAgRnJh
Y3Rpb25hbExheW91dFVuaXQgZW5kKFdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uKSBjb25zdDsK
KworICAgIHZvaWQgc2V0QmVmb3JlKFdyaXRpbmdNb2RlLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCk7
CisgICAgdm9pZCBzZXRBZnRlcihXcml0aW5nTW9kZSwgRnJhY3Rpb25hbExheW91dFVuaXQpOwor
ICAgIHZvaWQgc2V0U3RhcnQoV3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24sIEZyYWN0aW9uYWxM
YXlvdXRVbml0KTsKKyAgICB2b2lkIHNldEVuZChXcml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiwg
RnJhY3Rpb25hbExheW91dFVuaXQpOworCisgICAgRnJhY3Rpb25hbExheW91dFVuaXQmIG11dGFi
bGVMb2dpY2FsTGVmdChXcml0aW5nTW9kZSk7CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQmIG11
dGFibGVMb2dpY2FsUmlnaHQoV3JpdGluZ01vZGUpOworCisgICAgRnJhY3Rpb25hbExheW91dFVu
aXQmIG11dGFibGVCZWZvcmUoV3JpdGluZ01vZGUpOworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBtdXRhYmxlQWZ0ZXIoV3JpdGluZ01vZGUpOworCitwcml2YXRlOgorICAgIEZyYWN0aW9uYWxM
YXlvdXRVbml0IG1fdG9wOworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1fcmlnaHQ7CisgICAg
RnJhY3Rpb25hbExheW91dFVuaXQgbV9ib3R0b207CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQg
bV9sZWZ0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRnJhY3Rp
b25hbExheW91dEJveEV4dGVudF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9MYXlvdXRCb3hFeHRlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9MYXlvdXRCb3hFeHRlbnQuaAkocmV2aXNpb24gMTMzNTE3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDU5ICsyOCw1OSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVm
IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnRfaAotI2RlZmluZSBGcmFjdGlvbmFsTGF5b3V0Qm94
RXh0ZW50X2gKKyNpZm5kZWYgTGF5b3V0Qm94RXh0ZW50X2gKKyNkZWZpbmUgTGF5b3V0Qm94RXh0
ZW50X2gKIAotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRVbml0LmgiCisjaW5jbHVkZSAiTGF5
b3V0VW5pdC5oIgogI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKICNpbmNsdWRlICJXcml0aW5n
TW9kZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRC
b3hFeHRlbnQgeworY2xhc3MgTGF5b3V0Qm94RXh0ZW50IHsKIHB1YmxpYzoKLSAgICBGcmFjdGlv
bmFsTGF5b3V0Qm94RXh0ZW50KCkgOiBtX3RvcCgwKSwgbV9yaWdodCgwKSwgbV9ib3R0b20oMCks
IG1fbGVmdCgwKSB7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50KEZyYWN0aW9uYWxM
YXlvdXRVbml0IHRvcCwgRnJhY3Rpb25hbExheW91dFVuaXQgcmlnaHQsIEZyYWN0aW9uYWxMYXlv
dXRVbml0IGJvdHRvbSwgRnJhY3Rpb25hbExheW91dFVuaXQgbGVmdCkKKyAgICBMYXlvdXRCb3hF
eHRlbnQoKSA6IG1fdG9wKDApLCBtX3JpZ2h0KDApLCBtX2JvdHRvbSgwKSwgbV9sZWZ0KDApIHsg
fQorICAgIExheW91dEJveEV4dGVudChMYXlvdXRVbml0IHRvcCwgTGF5b3V0VW5pdCByaWdodCwg
TGF5b3V0VW5pdCBib3R0b20sIExheW91dFVuaXQgbGVmdCkKICAgICAgICAgOiBtX3RvcCh0b3Ap
LCBtX3JpZ2h0KHJpZ2h0KSwgbV9ib3R0b20oYm90dG9tKSwgbV9sZWZ0KGxlZnQpIHsgfQogCi0g
ICAgaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IHRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9w
OyB9Ci0gICAgaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJpZ2h0KCkgY29uc3QgeyByZXR1
cm4gbV9yaWdodDsgfQotICAgIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBib3R0b20oKSBj
b25zdCB7IHJldHVybiBtX2JvdHRvbTsgfQotICAgIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBsZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0OyB9Ci0KLSAgICBpbmxpbmUgdm9pZCBzZXRU
b3AoRnJhY3Rpb25hbExheW91dFVuaXQgdmFsdWUpIHsgbV90b3AgPSB2YWx1ZTsgfQotICAgIGlu
bGluZSB2b2lkIHNldFJpZ2h0KEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKSB7IG1fcmlnaHQg
PSB2YWx1ZTsgfQotICAgIGlubGluZSB2b2lkIHNldEJvdHRvbShGcmFjdGlvbmFsTGF5b3V0VW5p
dCB2YWx1ZSkgeyBtX2JvdHRvbSA9IHZhbHVlOyB9Ci0gICAgaW5saW5lIHZvaWQgc2V0TGVmdChG
cmFjdGlvbmFsTGF5b3V0VW5pdCB2YWx1ZSkgeyBtX2xlZnQgPSB2YWx1ZTsgfQotCi0gICAgRnJh
Y3Rpb25hbExheW91dFVuaXQgbG9naWNhbFRvcChXcml0aW5nTW9kZSkgY29uc3Q7Ci0gICAgRnJh
Y3Rpb25hbExheW91dFVuaXQgbG9naWNhbEJvdHRvbShXcml0aW5nTW9kZSkgY29uc3Q7Ci0gICAg
RnJhY3Rpb25hbExheW91dFVuaXQgbG9naWNhbExlZnQoV3JpdGluZ01vZGUpIGNvbnN0OwotICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0IGxvZ2ljYWxSaWdodChXcml0aW5nTW9kZSkgY29uc3Q7Ci0K
LSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBiZWZvcmUoV3JpdGluZ01vZGUpIGNvbnN0OwotICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0IGFmdGVyKFdyaXRpbmdNb2RlKSBjb25zdDsKLSAgICBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBzdGFydChXcml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbikgY29uc3Q7
Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgZW5kKFdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9u
KSBjb25zdDsKLQotICAgIHZvaWQgc2V0QmVmb3JlKFdyaXRpbmdNb2RlLCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCk7Ci0gICAgdm9pZCBzZXRBZnRlcihXcml0aW5nTW9kZSwgRnJhY3Rpb25hbExheW91
dFVuaXQpOwotICAgIHZvaWQgc2V0U3RhcnQoV3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24sIEZy
YWN0aW9uYWxMYXlvdXRVbml0KTsKLSAgICB2b2lkIHNldEVuZChXcml0aW5nTW9kZSwgVGV4dERp
cmVjdGlvbiwgRnJhY3Rpb25hbExheW91dFVuaXQpOworICAgIGlubGluZSBMYXlvdXRVbml0IHRv
cCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wOyB9CisgICAgaW5saW5lIExheW91dFVuaXQgcmlnaHQo
KSBjb25zdCB7IHJldHVybiBtX3JpZ2h0OyB9CisgICAgaW5saW5lIExheW91dFVuaXQgYm90dG9t
KCkgY29uc3QgeyByZXR1cm4gbV9ib3R0b207IH0KKyAgICBpbmxpbmUgTGF5b3V0VW5pdCBsZWZ0
KCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0OyB9CisKKyAgICBpbmxpbmUgdm9pZCBzZXRUb3AoTGF5
b3V0VW5pdCB2YWx1ZSkgeyBtX3RvcCA9IHZhbHVlOyB9CisgICAgaW5saW5lIHZvaWQgc2V0Umln
aHQoTGF5b3V0VW5pdCB2YWx1ZSkgeyBtX3JpZ2h0ID0gdmFsdWU7IH0KKyAgICBpbmxpbmUgdm9p
ZCBzZXRCb3R0b20oTGF5b3V0VW5pdCB2YWx1ZSkgeyBtX2JvdHRvbSA9IHZhbHVlOyB9CisgICAg
aW5saW5lIHZvaWQgc2V0TGVmdChMYXlvdXRVbml0IHZhbHVlKSB7IG1fbGVmdCA9IHZhbHVlOyB9
CisKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3AoV3JpdGluZ01vZGUpIGNvbnN0OworICAgIExh
eW91dFVuaXQgbG9naWNhbEJvdHRvbShXcml0aW5nTW9kZSkgY29uc3Q7CisgICAgTGF5b3V0VW5p
dCBsb2dpY2FsTGVmdChXcml0aW5nTW9kZSkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
UmlnaHQoV3JpdGluZ01vZGUpIGNvbnN0OworCisgICAgTGF5b3V0VW5pdCBiZWZvcmUoV3JpdGlu
Z01vZGUpIGNvbnN0OworICAgIExheW91dFVuaXQgYWZ0ZXIoV3JpdGluZ01vZGUpIGNvbnN0Owor
ICAgIExheW91dFVuaXQgc3RhcnQoV3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24pIGNvbnN0Owor
ICAgIExheW91dFVuaXQgZW5kKFdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uKSBjb25zdDsKKwor
ICAgIHZvaWQgc2V0QmVmb3JlKFdyaXRpbmdNb2RlLCBMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNl
dEFmdGVyKFdyaXRpbmdNb2RlLCBMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNldFN0YXJ0KFdyaXRp
bmdNb2RlLCBUZXh0RGlyZWN0aW9uLCBMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNldEVuZChXcml0
aW5nTW9kZSwgVGV4dERpcmVjdGlvbiwgTGF5b3V0VW5pdCk7CiAKLSAgICBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgbXV0YWJsZUxvZ2ljYWxMZWZ0KFdyaXRpbmdNb2RlKTsKLSAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgbXV0YWJsZUxvZ2ljYWxSaWdodChXcml0aW5nTW9kZSk7CisgICAgTGF5b3V0
VW5pdCYgbXV0YWJsZUxvZ2ljYWxMZWZ0KFdyaXRpbmdNb2RlKTsKKyAgICBMYXlvdXRVbml0JiBt
dXRhYmxlTG9naWNhbFJpZ2h0KFdyaXRpbmdNb2RlKTsKIAotICAgIEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBtdXRhYmxlQmVmb3JlKFdyaXRpbmdNb2RlKTsKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgbXV0YWJsZUFmdGVyKFdyaXRpbmdNb2RlKTsKKyAgICBMYXlvdXRVbml0JiBtdXRhYmxlQmVm
b3JlKFdyaXRpbmdNb2RlKTsKKyAgICBMYXlvdXRVbml0JiBtdXRhYmxlQWZ0ZXIoV3JpdGluZ01v
ZGUpOwogCiBwcml2YXRlOgotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1fdG9wOwotICAgIEZy
YWN0aW9uYWxMYXlvdXRVbml0IG1fcmlnaHQ7Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgbV9i
b3R0b207Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgbV9sZWZ0OworICAgIExheW91dFVuaXQg
bV90b3A7CisgICAgTGF5b3V0VW5pdCBtX3JpZ2h0OworICAgIExheW91dFVuaXQgbV9ib3R0b207
CisgICAgTGF5b3V0VW5pdCBtX2xlZnQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
LSNlbmRpZiAvLyBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50X2gKKyNlbmRpZiAvLyBMYXlvdXRC
b3hFeHRlbnRfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0
UG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9M
YXlvdXRQb2ludC5oCShyZXZpc2lvbiAxMzM1MTcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRQb2ludC5oOjEzMzUxNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBGcmFjdGlvbmFsTGF5b3V0UG9pbnRfaAorI2RlZmluZSBG
cmFjdGlvbmFsTGF5b3V0UG9pbnRfaAorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1
ZGUgIkZyYWN0aW9uYWxMYXlvdXRTaXplLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
KworI2lmIFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgPHFnbG9iYWwuaD4KK1FUX0JFR0lOX05BTUVT
UEFDRQorY2xhc3MgUVBvaW50OworY2xhc3MgUVBvaW50RjsKK1FUX0VORF9OQU1FU1BBQ0UKKyNl
bmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZyYWN0aW9uYWxMYXlvdXRQb2lu
dCB7CitwdWJsaWM6CisgICAgRnJhY3Rpb25hbExheW91dFBvaW50KCkgOiBtX3goMCksIG1feSgw
KSB7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoRnJhY3Rpb25hbExheW91dFVuaXQgeCwg
RnJhY3Rpb25hbExheW91dFVuaXQgeSkgOiBtX3goeCksIG1feSh5KSB7IH0KKyAgICBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KSA6IG1feChwb2ludC54KCkpLCBt
X3kocG9pbnQueSgpKSB7IH0KKyAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29u
c3QgRmxvYXRQb2ludCYgc2l6ZSkgOiBtX3goc2l6ZS54KCkpLCBtX3koc2l6ZS55KCkpIHsgfQor
ICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRQb2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0
U2l6ZSYgc2l6ZSkgOiBtX3goc2l6ZS53aWR0aCgpKSwgbV95KHNpemUuaGVpZ2h0KCkpIHsgfQor
CisgICAgc3RhdGljIEZyYWN0aW9uYWxMYXlvdXRQb2ludCB6ZXJvKCkgeyByZXR1cm4gRnJhY3Rp
b25hbExheW91dFBvaW50KCk7IH0KKworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHgoKSBjb25z
dCB7IHJldHVybiBtX3g7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB5KCkgY29uc3QgeyBy
ZXR1cm4gbV95OyB9CisKKyAgICB2b2lkIHNldFgoRnJhY3Rpb25hbExheW91dFVuaXQgeCkgeyBt
X3ggPSB4OyB9CisgICAgdm9pZCBzZXRZKEZyYWN0aW9uYWxMYXlvdXRVbml0IHkpIHsgbV95ID0g
eTsgfQorCisgICAgdm9pZCBtb3ZlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzKSB7IG1v
dmUocy53aWR0aCgpLCBzLmhlaWdodCgpKTsgfSAKKyAgICB2b2lkIG1vdmVCeShjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQmIG9mZnNldCkgeyBtb3ZlKG9mZnNldC54KCksIG9mZnNldC55KCkp
OyB9CisgICAgdm9pZCBtb3ZlKEZyYWN0aW9uYWxMYXlvdXRVbml0IGR4LCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCBkeSkgeyBtX3ggKz0gZHg7IG1feSArPSBkeTsgfQorICAgIHZvaWQgc2NhbGUoZmxv
YXQgc3gsIGZsb2F0IHN5KQorICAgIHsKKyAgICAgICAgbV94ICo9IHN4OworICAgICAgICBtX3kg
Kj0gc3k7CisgICAgfQorICAgIAorICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBleHBhbmRlZFRv
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KHN0ZDo6bWF4KG1feCwgb3RoZXIubV94KSwg
c3RkOjptYXgobV95LCBvdGhlci5tX3kpKTsKKyAgICB9CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQgc2hydW5rVG8oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoc3RkOjptaW4obV94
LCBvdGhlci5tX3gpLCBzdGQ6Om1pbihtX3ksIG90aGVyLm1feSkpOworICAgIH0KKworICAgIHZv
aWQgY2xhbXBOZWdhdGl2ZVRvWmVybygpCisgICAgeworICAgICAgICAqdGhpcyA9IGV4cGFuZGVk
VG8oemVybygpKTsKKyAgICB9CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgdHJhbnNwb3Nl
ZFBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9p
bnQobV95LCBtX3gpOworICAgIH0KKworI2lmIFBMQVRGT1JNKFFUKQorICAgIGV4cGxpY2l0IEZy
YWN0aW9uYWxMYXlvdXRQb2ludChjb25zdCBRUG9pbnQmKTsKKyAgICBleHBsaWNpdCBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQoY29uc3QgUVBvaW50RiYpOworICAgIG9wZXJhdG9yIFFQb2ludEYoKSBj
b25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1feCwg
bV95OworfTsKKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgb3BlcmF0b3IrPShGcmFj
dGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQorewor
ICAgIGEubW92ZShiLndpZHRoKCksIGIuaGVpZ2h0KCkpOworICAgIHJldHVybiBhOworfQorCitp
bmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50JiBvcGVyYXRvci09KEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCit7CisgICAgYS5tb3ZlKC1i
LndpZHRoKCksIC1iLmhlaWdodCgpKTsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEZyYWN0
aW9uYWxMYXlvdXRQb2ludCBvcGVyYXRvcisoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25h
bExheW91dFBvaW50KGEueCgpICsgYi53aWR0aCgpLCBhLnkoKSArIGIuaGVpZ2h0KCkpOworfQor
CitpbmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50IG9wZXJhdG9yKyhjb25zdCBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYikKK3sKKyAgICBy
ZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KGEueCgpICsgYi54KCksIGEueSgpICsgYi55KCkp
OworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFNpemUgb3BlcmF0b3ItKGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBiKQorewor
ICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShhLngoKSAtIGIueCgpLCBhLnkoKSAtIGIu
eSgpKTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBvcGVyYXRvci0oY29uc3Qg
RnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikK
K3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KGEueCgpIC0gYi53aWR0aCgpLCBh
LnkoKSAtIGIuaGVpZ2h0KCkpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50IG9w
ZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50KQoreworICAgIHJldHVy
biBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoLXBvaW50LngoKSwgLXBvaW50LnkoKSk7Cit9CisKK2lu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGIpCit7CisgICAgcmV0dXJuIGEueCgpID09IGIueCgp
ICYmIGEueSgpID09IGIueSgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBiKQor
eworICAgIHJldHVybiBhLngoKSAhPSBiLngoKSB8fCBhLnkoKSAhPSBiLnkoKTsKK30KKworaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCB0b1BvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRT
aXplJiBzaXplKQoreworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoc2l6ZS53aWR0
aCgpLCBzaXplLmhlaWdodCgpKTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplIHRv
U2l6ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEpCit7CisgICAgcmV0dXJuIEZyYWN0
aW9uYWxMYXlvdXRTaXplKGEueCgpLCBhLnkoKSk7Cit9CisKK2lubGluZSBJbnRQb2ludCBmbG9v
cmVkSW50UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBwb2ludCkKK3sKKyAgICBy
ZXR1cm4gSW50UG9pbnQocG9pbnQueCgpLmZsb29yKCksIHBvaW50LnkoKS5mbG9vcigpKTsKK30K
KworaW5saW5lIEludFBvaW50IHJvdW5kZWRJbnRQb2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQmIHBvaW50KQoreworICAgIHJldHVybiBJbnRQb2ludChwb2ludC54KCkucm91bmQoKSwg
cG9pbnQueSgpLnJvdW5kKCkpOworfQorCitpbmxpbmUgSW50UG9pbnQgcm91bmRlZEludFBvaW50
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKQoreworICAgIHJldHVybiBJbnRQb2lu
dChzaXplLndpZHRoKCkucm91bmQoKSwgc2l6ZS5oZWlnaHQoKS5yb3VuZCgpKTsKK30KKworaW5s
aW5lIEludFBvaW50IGNlaWxlZEludFBvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYg
cG9pbnQpCit7CisgICAgcmV0dXJuIEludFBvaW50KHBvaW50LngoKS5jZWlsKCksIHBvaW50Lnko
KS5jZWlsKCkpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50IGZsb29yZWRGcmFj
dGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICByZXR1cm4gRnJh
Y3Rpb25hbExheW91dFBvaW50KEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpmcm9tRmxvYXRGbG9vcihw
LngoKSksIEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpmcm9tRmxvYXRGbG9vcihwLnkoKSkpOworfQor
CitpbmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50IGNlaWxlZEZyYWN0aW9uYWxMYXlvdXRQb2lu
dChjb25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9p
bnQoRnJhY3Rpb25hbExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwocC54KCkpLCBGcmFjdGlvbmFs
TGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChwLnkoKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBGcmFjdGlvbmFsTGF5b3V0UG9pbnRfaApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UG9pbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRQb2ludC5oCShyZXZpc2lvbiAx
MzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRQb2ludC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMSArMjgsMTEgQEAKICAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAotI2lmbmRlZiBGcmFjdGlvbmFsTGF5b3V0UG9pbnRfaAotI2RlZmluZSBGcmFjdGlvbmFsTGF5
b3V0UG9pbnRfaAorI2lmbmRlZiBMYXlvdXRQb2ludF9oCisjZGVmaW5lIExheW91dFBvaW50X2gK
IAogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0U2l6
ZS5oIgorI2luY2x1ZGUgIkxheW91dFNpemUuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgogCiAjaWYgUExBVEZPUk0oUVQpCkBAIC00NSwzOSArNDUsMzkgQEAgUVRfRU5EX05BTUVTUEFD
RQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRQb2ludCB7
CitjbGFzcyBMYXlvdXRQb2ludCB7CiBwdWJsaWM6Ci0gICAgRnJhY3Rpb25hbExheW91dFBvaW50
KCkgOiBtX3goMCksIG1feSgwKSB7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoRnJhY3Rp
b25hbExheW91dFVuaXQgeCwgRnJhY3Rpb25hbExheW91dFVuaXQgeSkgOiBtX3goeCksIG1feSh5
KSB7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KSA6
IG1feChwb2ludC54KCkpLCBtX3kocG9pbnQueSgpKSB7IH0KLSAgICBleHBsaWNpdCBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgc2l6ZSkgOiBtX3goc2l6ZS54KCkpLCBt
X3koc2l6ZS55KCkpIHsgfQotICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRQb2ludChjb25z
dCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkgOiBtX3goc2l6ZS53aWR0aCgpKSwgbV95KHNp
emUuaGVpZ2h0KCkpIHsgfQotCi0gICAgc3RhdGljIEZyYWN0aW9uYWxMYXlvdXRQb2ludCB6ZXJv
KCkgeyByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KCk7IH0KLQotICAgIEZyYWN0aW9uYWxM
YXlvdXRVbml0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0
VW5pdCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9Ci0KLSAgICB2b2lkIHNldFgoRnJhY3Rpb25h
bExheW91dFVuaXQgeCkgeyBtX3ggPSB4OyB9Ci0gICAgdm9pZCBzZXRZKEZyYWN0aW9uYWxMYXlv
dXRVbml0IHkpIHsgbV95ID0geTsgfQotCi0gICAgdm9pZCBtb3ZlKGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRTaXplJiBzKSB7IG1vdmUocy53aWR0aCgpLCBzLmhlaWdodCgpKTsgfSAKLSAgICB2b2lk
IG1vdmVCeShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIG9mZnNldCkgeyBtb3ZlKG9mZnNl
dC54KCksIG9mZnNldC55KCkpOyB9Ci0gICAgdm9pZCBtb3ZlKEZyYWN0aW9uYWxMYXlvdXRVbml0
IGR4LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeSkgeyBtX3ggKz0gZHg7IG1feSArPSBkeTsgfQor
ICAgIExheW91dFBvaW50KCkgOiBtX3goMCksIG1feSgwKSB7IH0KKyAgICBMYXlvdXRQb2ludChM
YXlvdXRVbml0IHgsIExheW91dFVuaXQgeSkgOiBtX3goeCksIG1feSh5KSB7IH0KKyAgICBMYXlv
dXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpIDogbV94KHBvaW50LngoKSksIG1feShwb2lu
dC55KCkpIHsgfQorICAgIGV4cGxpY2l0IExheW91dFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHNp
emUpIDogbV94KHNpemUueCgpKSwgbV95KHNpemUueSgpKSB7IH0KKyAgICBleHBsaWNpdCBMYXlv
dXRQb2ludChjb25zdCBMYXlvdXRTaXplJiBzaXplKSA6IG1feChzaXplLndpZHRoKCkpLCBtX3ko
c2l6ZS5oZWlnaHQoKSkgeyB9CisKKyAgICBzdGF0aWMgTGF5b3V0UG9pbnQgemVybygpIHsgcmV0
dXJuIExheW91dFBvaW50KCk7IH0KKworICAgIExheW91dFVuaXQgeCgpIGNvbnN0IHsgcmV0dXJu
IG1feDsgfQorICAgIExheW91dFVuaXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQorCisgICAg
dm9pZCBzZXRYKExheW91dFVuaXQgeCkgeyBtX3ggPSB4OyB9CisgICAgdm9pZCBzZXRZKExheW91
dFVuaXQgeSkgeyBtX3kgPSB5OyB9CisKKyAgICB2b2lkIG1vdmUoY29uc3QgTGF5b3V0U2l6ZSYg
cykgeyBtb3ZlKHMud2lkdGgoKSwgcy5oZWlnaHQoKSk7IH0gCisgICAgdm9pZCBtb3ZlQnkoY29u
c3QgTGF5b3V0UG9pbnQmIG9mZnNldCkgeyBtb3ZlKG9mZnNldC54KCksIG9mZnNldC55KCkpOyB9
CisgICAgdm9pZCBtb3ZlKExheW91dFVuaXQgZHgsIExheW91dFVuaXQgZHkpIHsgbV94ICs9IGR4
OyBtX3kgKz0gZHk7IH0KICAgICB2b2lkIHNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSkKICAgICB7
CiAgICAgICAgIG1feCAqPSBzeDsKICAgICAgICAgbV95ICo9IHN5OwogICAgIH0KICAgICAKLSAg
ICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgZXhwYW5kZWRUbyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQmIG90aGVyKSBjb25zdAorICAgIExheW91dFBvaW50IGV4cGFuZGVkVG8oY29uc3QgTGF5
b3V0UG9pbnQmIG90aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxM
YXlvdXRQb2ludChzdGQ6Om1heChtX3gsIG90aGVyLm1feCksIHN0ZDo6bWF4KG1feSwgb3RoZXIu
bV95KSk7CisgICAgICAgIHJldHVybiBMYXlvdXRQb2ludChzdGQ6Om1heChtX3gsIG90aGVyLm1f
eCksIHN0ZDo6bWF4KG1feSwgb3RoZXIubV95KSk7CiAgICAgfQogCi0gICAgRnJhY3Rpb25hbExh
eW91dFBvaW50IHNocnVua1RvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgb3RoZXIpIGNv
bnN0CisgICAgTGF5b3V0UG9pbnQgc2hydW5rVG8oY29uc3QgTGF5b3V0UG9pbnQmIG90aGVyKSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChzdGQ6Om1p
bihtX3gsIG90aGVyLm1feCksIHN0ZDo6bWluKG1feSwgb3RoZXIubV95KSk7CisgICAgICAgIHJl
dHVybiBMYXlvdXRQb2ludChzdGQ6Om1pbihtX3gsIG90aGVyLm1feCksIHN0ZDo6bWluKG1feSwg
b3RoZXIubV95KSk7CiAgICAgfQogCiAgICAgdm9pZCBjbGFtcE5lZ2F0aXZlVG9aZXJvKCkKQEAg
LTg1LDEwOCArODUsMTM3IEBAIHB1YmxpYzoKICAgICAgICAgKnRoaXMgPSBleHBhbmRlZFRvKHpl
cm8oKSk7CiAgICAgfQogCi0gICAgRnJhY3Rpb25hbExheW91dFBvaW50IHRyYW5zcG9zZWRQb2lu
dCgpIGNvbnN0CisgICAgTGF5b3V0UG9pbnQgdHJhbnNwb3NlZFBvaW50KCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQobV95LCBtX3gpOworICAgICAg
ICByZXR1cm4gTGF5b3V0UG9pbnQobV95LCBtX3gpOwogICAgIH0KIAogI2lmIFBMQVRGT1JNKFFU
KQotICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRQb2ludChjb25zdCBRUG9pbnQmKTsKLSAg
ICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgUVBvaW50RiYpOworICAgIGV4
cGxpY2l0IExheW91dFBvaW50KGNvbnN0IFFQb2ludCYpOworICAgIGV4cGxpY2l0IExheW91dFBv
aW50KGNvbnN0IFFQb2ludEYmKTsKICAgICBvcGVyYXRvciBRUG9pbnRGKCkgY29uc3Q7CiAjZW5k
aWYKIAogcHJpdmF0ZToKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtX3gsIG1feTsKKyAgICBM
YXlvdXRVbml0IG1feCwgbV95OwogfTsKIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCYg
b3BlcmF0b3IrPShGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRTaXplJiBiKQoraW5saW5lIExheW91dFBvaW50JiBvcGVyYXRvcis9KExheW91dFBvaW50JiBh
LCBjb25zdCBMYXlvdXRTaXplJiBiKQogewogICAgIGEubW92ZShiLndpZHRoKCksIGIuaGVpZ2h0
KCkpOwogICAgIHJldHVybiBhOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50JiBv
cGVyYXRvci09KEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91
dFNpemUmIGIpCitpbmxpbmUgTGF5b3V0UG9pbnQmIG9wZXJhdG9yLT0oTGF5b3V0UG9pbnQmIGEs
IGNvbnN0IExheW91dFNpemUmIGIpCiB7CiAgICAgYS5tb3ZlKC1iLndpZHRoKCksIC1iLmhlaWdo
dCgpKTsKICAgICByZXR1cm4gYTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBv
cGVyYXRvcisoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0U2l6ZSYgYikKK2lubGluZSBMYXlvdXRQb2ludCBvcGVyYXRvcisoY29uc3QgTGF5b3V0
UG9pbnQmIGEsIGNvbnN0IExheW91dFNpemUmIGIpCiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxM
YXlvdXRQb2ludChhLngoKSArIGIud2lkdGgoKSwgYS55KCkgKyBiLmhlaWdodCgpKTsKKyAgICBy
ZXR1cm4gTGF5b3V0UG9pbnQoYS54KCkgKyBiLndpZHRoKCksIGEueSgpICsgYi5oZWlnaHQoKSk7
CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgb3BlcmF0b3IrKGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBiKQoraW5s
aW5lIExheW91dFBvaW50IG9wZXJhdG9yKyhjb25zdCBMYXlvdXRQb2ludCYgYSwgY29uc3QgTGF5
b3V0UG9pbnQmIGIpCiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChhLngoKSAr
IGIueCgpLCBhLnkoKSArIGIueSgpKTsKKyAgICByZXR1cm4gTGF5b3V0UG9pbnQoYS54KCkgKyBi
LngoKSwgYS55KCkgKyBiLnkoKSk7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSBv
cGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQmIGIpCitpbmxpbmUgTGF5b3V0U2l6ZSBvcGVyYXRvci0oY29uc3QgTGF5b3V0
UG9pbnQmIGEsIGNvbnN0IExheW91dFBvaW50JiBiKQogewotICAgIHJldHVybiBGcmFjdGlvbmFs
TGF5b3V0U2l6ZShhLngoKSAtIGIueCgpLCBhLnkoKSAtIGIueSgpKTsKKyAgICByZXR1cm4gTGF5
b3V0U2l6ZShhLngoKSAtIGIueCgpLCBhLnkoKSAtIGIueSgpKTsKIH0KIAotaW5saW5lIEZyYWN0
aW9uYWxMYXlvdXRQb2ludCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK2lubGluZSBMYXlvdXRQb2ludCBvcGVy
YXRvci0oY29uc3QgTGF5b3V0UG9pbnQmIGEsIGNvbnN0IExheW91dFNpemUmIGIpCiB7Ci0gICAg
cmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChhLngoKSAtIGIud2lkdGgoKSwgYS55KCkgLSBi
LmhlaWdodCgpKTsKKyAgICByZXR1cm4gTGF5b3V0UG9pbnQoYS54KCkgLSBiLndpZHRoKCksIGEu
eSgpIC0gYi5oZWlnaHQoKSk7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgb3Bl
cmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcG9pbnQpCitpbmxpbmUgTGF5b3V0
UG9pbnQgb3BlcmF0b3ItKGNvbnN0IExheW91dFBvaW50JiBwb2ludCkKIHsKLSAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFBvaW50KC1wb2ludC54KCksIC1wb2ludC55KCkpOworICAgIHJldHVy
biBMYXlvdXRQb2ludCgtcG9pbnQueCgpLCAtcG9pbnQueSgpKTsKIH0KIAotaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRQb2ludCYgYikKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgTGF5b3V0UG9p
bnQmIGEsIGNvbnN0IExheW91dFBvaW50JiBiKQogewogICAgIHJldHVybiBhLngoKSA9PSBiLngo
KSAmJiBhLnkoKSA9PSBiLnkoKTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBG
cmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYikK
K2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgTGF5b3V0UG9pbnQmIGEsIGNvbnN0IExheW91
dFBvaW50JiBiKQogewogICAgIHJldHVybiBhLngoKSAhPSBiLngoKSB8fCBhLnkoKSAhPSBiLnko
KTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCB0b1BvaW50KGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRTaXplJiBzaXplKQoraW5saW5lIExheW91dFBvaW50IHRvUG9pbnQoY29uc3Qg
TGF5b3V0U2l6ZSYgc2l6ZSkKIHsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgcmV0dXJuIExheW91dFBvaW50KHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6
ZSB0b1NpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBhKQoraW5saW5lIExheW91dFBv
aW50IHRvTGF5b3V0UG9pbnQoY29uc3QgTGF5b3V0U2l6ZSYgcCkKIHsKLSAgICByZXR1cm4gRnJh
Y3Rpb25hbExheW91dFNpemUoYS54KCksIGEueSgpKTsKKyAgICByZXR1cm4gTGF5b3V0UG9pbnQo
cC53aWR0aCgpLCBwLmhlaWdodCgpKTsKIH0KIAotaW5saW5lIEludFBvaW50IGZsb29yZWRJbnRQ
b2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50KQoraW5saW5lIExheW91dFNp
emUgdG9TaXplKGNvbnN0IExheW91dFBvaW50JiBhKQoreworICAgIHJldHVybiBMYXlvdXRTaXpl
KGEueCgpLCBhLnkoKSk7Cit9CisKK2lubGluZSBMYXlvdXRQb2ludCByb3VuZGVkTGF5b3V0UG9p
bnQoY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQor
ICAgIHJldHVybiBMYXlvdXRQb2ludChwKTsKKyNlbHNlCisgICAgcmV0dXJuIHJvdW5kZWRJbnRQ
b2ludChwKTsKKyNlbmRpZgorfQorCitpbmxpbmUgSW50UG9pbnQgZmxvb3JlZEludFBvaW50KGNv
bnN0IExheW91dFBvaW50JiBwb2ludCkKIHsKICAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgp
LmZsb29yKCksIHBvaW50LnkoKS5mbG9vcigpKTsKIH0KIAotaW5saW5lIEludFBvaW50IHJvdW5k
ZWRJbnRQb2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50KQoraW5saW5lIElu
dFBvaW50IHJvdW5kZWRJbnRQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCiB7CiAgICAg
cmV0dXJuIEludFBvaW50KHBvaW50LngoKS5yb3VuZCgpLCBwb2ludC55KCkucm91bmQoKSk7CiB9
CiAKLWlubGluZSBJbnRQb2ludCByb3VuZGVkSW50UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91
dFNpemUmIHNpemUpCitpbmxpbmUgSW50UG9pbnQgcm91bmRlZEludFBvaW50KGNvbnN0IExheW91
dFNpemUmIHNpemUpCiB7CiAgICAgcmV0dXJuIEludFBvaW50KHNpemUud2lkdGgoKS5yb3VuZCgp
LCBzaXplLmhlaWdodCgpLnJvdW5kKCkpOwogfQogCi1pbmxpbmUgSW50UG9pbnQgY2VpbGVkSW50
UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBwb2ludCkKK2lubGluZSBJbnRQb2lu
dCBjZWlsZWRJbnRQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCiB7CiAgICAgcmV0dXJu
IEludFBvaW50KHBvaW50LngoKS5jZWlsKCksIHBvaW50LnkoKS5jZWlsKCkpOwogfQogCi1pbmxp
bmUgRnJhY3Rpb25hbExheW91dFBvaW50IGZsb29yZWRGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29u
c3QgRmxvYXRQb2ludCYgcCkKK2lubGluZSBMYXlvdXRQb2ludCBmbG9vcmVkTGF5b3V0UG9pbnQo
Y29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICByZXR1cm4gTGF5b3V0UG9pbnQoTGF5b3V0VW5p
dDo6ZnJvbUZsb2F0Rmxvb3IocC54KCkpLCBMYXlvdXRVbml0Ojpmcm9tRmxvYXRGbG9vcihwLnko
KSkpOworfQorCitpbmxpbmUgTGF5b3V0UG9pbnQgZmxvb3JlZExheW91dFBvaW50KGNvbnN0IEZs
b2F0U2l6ZSYgcCkKK3sKKyAgICByZXR1cm4gTGF5b3V0UG9pbnQoTGF5b3V0VW5pdDo6ZnJvbUZs
b2F0Rmxvb3IocC53aWR0aCgpKSwgTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Rmxvb3IocC5oZWlnaHQo
KSkpOworfQorCitpbmxpbmUgTGF5b3V0UG9pbnQgY2VpbGVkTGF5b3V0UG9pbnQoY29uc3QgRmxv
YXRQb2ludCYgcCkKK3sKKyAgICByZXR1cm4gTGF5b3V0UG9pbnQoTGF5b3V0VW5pdDo6ZnJvbUZs
b2F0Q2VpbChwLngoKSksIExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwocC55KCkpKTsKK30KKwor
aW5saW5lIExheW91dFNpemUgdG9MYXlvdXRTaXplKGNvbnN0IExheW91dFBvaW50JiBwKQogewot
ICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoRnJhY3Rpb25hbExheW91dFVuaXQ6OmZy
b21GbG9hdEZsb29yKHAueCgpKSwgRnJhY3Rpb25hbExheW91dFVuaXQ6OmZyb21GbG9hdEZsb29y
KHAueSgpKSk7CisgICAgcmV0dXJuIExheW91dFNpemUocC54KCksIHAueSgpKTsKIH0KIAotaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBjZWlsZWRGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29u
c3QgRmxvYXRQb2ludCYgcCkKK2lubGluZSBJbnRTaXplIHBpeGVsU25hcHBlZEludFNpemUoY29u
c3QgTGF5b3V0U2l6ZSYgcywgY29uc3QgTGF5b3V0UG9pbnQmIHApCiB7Ci0gICAgcmV0dXJuIEZy
YWN0aW9uYWxMYXlvdXRQb2ludChGcmFjdGlvbmFsTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChw
LngoKSksIEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKHAueSgpKSk7CisgICAg
cmV0dXJuIEludFNpemUoc25hcFNpemVUb1BpeGVsKHMud2lkdGgoKSwgcC54KCkpLCBzbmFwU2l6
ZVRvUGl4ZWwocy5oZWlnaHQoKSwgcC55KCkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCi0jZW5kaWYgLy8gRnJhY3Rpb25hbExheW91dFBvaW50X2gKKyNlbmRpZiAvLyBMYXlvdXRQ
b2ludF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlv
dXRSZWN0LmNwcAkocmV2aXNpb24gMTMzNTE3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHA6MTMzNTE3KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UmVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZyYWN0aW9uYWxM
YXlvdXRSZWN0LmgiCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGcmFjdGlv
bmFsTGF5b3V0VW5pdC5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKwordXNpbmcgc3RkOjptYXg7
Cit1c2luZyBzdGQ6Om1pbjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGcmFjdGlvbmFsTGF5
b3V0UmVjdDo6RnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQorICAgIDog
bV9sb2NhdGlvbihGcmFjdGlvbmFsTGF5b3V0UG9pbnQoci5sb2NhdGlvbigpKSkKKyAgICAsIG1f
c2l6ZShGcmFjdGlvbmFsTGF5b3V0U2l6ZShyLnNpemUoKSkpCit7Cit9CisKK2Jvb2wgRnJhY3Rp
b25hbExheW91dFJlY3Q6OmludGVyc2VjdHMoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90
aGVyKSBjb25zdAoreworICAgIC8vIENoZWNraW5nIGVtcHRpbmVzcyBoYW5kbGVzIG5lZ2F0aXZl
IHdpZHRocyBhcyB3ZWxsIGFzIHplcm8uCisgICAgcmV0dXJuICFpc0VtcHR5KCkgJiYgIW90aGVy
LmlzRW1wdHkoKQorICAgICAgICAmJiB4KCkgPCBvdGhlci5tYXhYKCkgJiYgb3RoZXIueCgpIDwg
bWF4WCgpCisgICAgICAgICYmIHkoKSA8IG90aGVyLm1heFkoKSAmJiBvdGhlci55KCkgPCBtYXhZ
KCk7Cit9CisKK2Jvb2wgRnJhY3Rpb25hbExheW91dFJlY3Q6OmNvbnRhaW5zKGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRSZWN0JiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4geCgpIDw9IG90aGVy
LngoKSAmJiBtYXhYKCkgPj0gb3RoZXIubWF4WCgpCisgICAgICAgICYmIHkoKSA8PSBvdGhlci55
KCkgJiYgbWF4WSgpID49IG90aGVyLm1heFkoKTsKK30KKwordm9pZCBGcmFjdGlvbmFsTGF5b3V0
UmVjdDo6aW50ZXJzZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBvdGhlcikKK3sKKyAg
ICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbmV3TG9jYXRpb24obWF4KHgoKSwgb3RoZXIueCgpKSwg
bWF4KHkoKSwgb3RoZXIueSgpKSk7CisgICAgRnJhY3Rpb25hbExheW91dFBvaW50IG5ld01heFBv
aW50KG1pbihtYXhYKCksIG90aGVyLm1heFgoKSksIG1pbihtYXhZKCksIG90aGVyLm1heFkoKSkp
OworCisgICAgLy8gUmV0dXJuIGEgY2xlYW4gZW1wdHkgcmVjdGFuZ2xlIGZvciBub24taW50ZXJz
ZWN0aW5nIGNhc2VzLgorICAgIGlmIChuZXdMb2NhdGlvbi54KCkgPj0gbmV3TWF4UG9pbnQueCgp
IHx8IG5ld0xvY2F0aW9uLnkoKSA+PSBuZXdNYXhQb2ludC55KCkpIHsKKyAgICAgICAgbmV3TG9j
YXRpb24gPSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoMCwgMCk7CisgICAgICAgIG5ld01heFBvaW50
ID0gRnJhY3Rpb25hbExheW91dFBvaW50KDAsIDApOworICAgIH0KKworICAgIG1fbG9jYXRpb24g
PSBuZXdMb2NhdGlvbjsKKyAgICBtX3NpemUgPSBuZXdNYXhQb2ludCAtIG5ld0xvY2F0aW9uOwor
fQorCit2b2lkIEZyYWN0aW9uYWxMYXlvdXRSZWN0Ojp1bml0ZShjb25zdCBGcmFjdGlvbmFsTGF5
b3V0UmVjdCYgb3RoZXIpCit7CisgICAgLy8gSGFuZGxlIGVtcHR5IHNwZWNpYWwgY2FzZXMgZmly
c3QuCisgICAgaWYgKG90aGVyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChp
c0VtcHR5KCkpIHsKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdMb2NhdGlvbihtaW4oeCgpLCBvdGhl
ci54KCkpLCBtaW4oeSgpLCBvdGhlci55KCkpKTsKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQg
bmV3TWF4UG9pbnQobWF4KG1heFgoKSwgb3RoZXIubWF4WCgpKSwgbWF4KG1heFkoKSwgb3RoZXIu
bWF4WSgpKSk7CisKKyAgICBtX2xvY2F0aW9uID0gbmV3TG9jYXRpb247CisgICAgbV9zaXplID0g
bmV3TWF4UG9pbnQgLSBuZXdMb2NhdGlvbjsKK30KKwordm9pZCBGcmFjdGlvbmFsTGF5b3V0UmVj
dDo6dW5pdGVJZk5vblplcm8oY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90aGVyKQorewor
ICAgIC8vIEhhbmRsZSBlbXB0eSBzcGVjaWFsIGNhc2VzIGZpcnN0LgorICAgIGlmICghb3RoZXIu
d2lkdGgoKSAmJiAhb3RoZXIuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXdp
ZHRoKCkgJiYgIWhlaWdodCgpKSB7CisgICAgICAgICp0aGlzID0gb3RoZXI7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbmV3TG9jYXRpb24obWlu
KHgoKSwgb3RoZXIueCgpKSwgbWluKHkoKSwgb3RoZXIueSgpKSk7CisgICAgRnJhY3Rpb25hbExh
eW91dFBvaW50IG5ld01heFBvaW50KG1heChtYXhYKCksIG90aGVyLm1heFgoKSksIG1heChtYXhZ
KCksIG90aGVyLm1heFkoKSkpOworCisgICAgbV9sb2NhdGlvbiA9IG5ld0xvY2F0aW9uOworICAg
IG1fc2l6ZSA9IG5ld01heFBvaW50IC0gbmV3TG9jYXRpb247Cit9CisKK3ZvaWQgRnJhY3Rpb25h
bExheW91dFJlY3Q6OnNjYWxlKGZsb2F0IHMpCit7CisgICAgbV9sb2NhdGlvbi5zY2FsZShzLCBz
KTsKKyAgICBtX3NpemUuc2NhbGUocyk7Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRSZWN0IHVuaW9u
UmVjdChjb25zdCBWZWN0b3I8RnJhY3Rpb25hbExheW91dFJlY3Q+JiByZWN0cykKK3sKKyAgICBG
cmFjdGlvbmFsTGF5b3V0UmVjdCByZXN1bHQ7CisKKyAgICBzaXplX3QgY291bnQgPSByZWN0cy5z
aXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICBy
ZXN1bHQudW5pdGUocmVjdHNbaV0pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSW50UmVj
dCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiByZWN0KQorewor
ICAgIEludFBvaW50IGxvY2F0aW9uID0gZmxvb3JlZEludFBvaW50KHJlY3QubWluWE1pbllDb3Ju
ZXIoKSk7CisgICAgSW50UG9pbnQgbWF4UG9pbnQgPSBjZWlsZWRJbnRQb2ludChyZWN0Lm1heFhN
YXhZQ29ybmVyKCkpOworCisgICAgcmV0dXJuIEludFJlY3QobG9jYXRpb24sIG1heFBvaW50IC0g
bG9jYXRpb24pOworfQorCitGcmFjdGlvbmFsTGF5b3V0UmVjdCBlbmNsb3NpbmdGcmFjdGlvbmFs
TGF5b3V0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisjaWYgRU5BQkxFKFNVQlBJWEVM
X0xBWU9VVCkKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbG9jYXRpb24gPSBmbG9vcmVkRnJh
Y3Rpb25hbExheW91dFBvaW50KHJlY3QubWluWE1pbllDb3JuZXIoKSk7CisgICAgRnJhY3Rpb25h
bExheW91dFBvaW50IG1heFBvaW50ID0gY2VpbGVkRnJhY3Rpb25hbExheW91dFBvaW50KHJlY3Qu
bWF4WE1heFlDb3JuZXIoKSk7CisKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFJlY3QobG9j
YXRpb24sIG1heFBvaW50IC0gbG9jYXRpb24pOworI2Vsc2UKKyAgICByZXR1cm4gZW5jbG9zaW5n
SW50UmVjdChyZWN0KTsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0LmNwcAko
cmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5
b3V0UmVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsyOSwxMCBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIgorI2lu
Y2x1ZGUgIkxheW91dFJlY3QuaCIKIAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUg
IkZyYWN0aW9uYWxMYXlvdXRVbml0LmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgogI2luY2x1
ZGUgPGFsZ29yaXRobT4KIAogdXNpbmcgc3RkOjptYXg7CkBAIC00MCwxMyArNDAsMTMgQEAgdXNp
bmcgc3RkOjptaW47CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRnJhY3Rpb25hbExheW91dFJl
Y3Q6OkZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKLSAgICA6IG1fbG9j
YXRpb24oRnJhY3Rpb25hbExheW91dFBvaW50KHIubG9jYXRpb24oKSkpCi0gICAgLCBtX3NpemUo
RnJhY3Rpb25hbExheW91dFNpemUoci5zaXplKCkpKQorTGF5b3V0UmVjdDo6TGF5b3V0UmVjdChj
b25zdCBGbG9hdFJlY3QmIHIpCisgICAgOiBtX2xvY2F0aW9uKExheW91dFBvaW50KHIubG9jYXRp
b24oKSkpCisgICAgLCBtX3NpemUoTGF5b3V0U2l6ZShyLnNpemUoKSkpCiB7CiB9CiAKLWJvb2wg
RnJhY3Rpb25hbExheW91dFJlY3Q6OmludGVyc2VjdHMoY29uc3QgRnJhY3Rpb25hbExheW91dFJl
Y3QmIG90aGVyKSBjb25zdAorYm9vbCBMYXlvdXRSZWN0OjppbnRlcnNlY3RzKGNvbnN0IExheW91
dFJlY3QmIG90aGVyKSBjb25zdAogewogICAgIC8vIENoZWNraW5nIGVtcHRpbmVzcyBoYW5kbGVz
IG5lZ2F0aXZlIHdpZHRocyBhcyB3ZWxsIGFzIHplcm8uCiAgICAgcmV0dXJuICFpc0VtcHR5KCkg
JiYgIW90aGVyLmlzRW1wdHkoKQpAQCAtNTQsMjggKzU0LDI4IEBAIGJvb2wgRnJhY3Rpb25hbExh
eW91dFJlY3Q6OmludGVyc2VjdHMoY28KICAgICAgICAgJiYgeSgpIDwgb3RoZXIubWF4WSgpICYm
IG90aGVyLnkoKSA8IG1heFkoKTsKIH0KIAotYm9vbCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6Y29u
dGFpbnMoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90aGVyKSBjb25zdAorYm9vbCBMYXlv
dXRSZWN0Ojpjb250YWlucyhjb25zdCBMYXlvdXRSZWN0JiBvdGhlcikgY29uc3QKIHsKICAgICBy
ZXR1cm4geCgpIDw9IG90aGVyLngoKSAmJiBtYXhYKCkgPj0gb3RoZXIubWF4WCgpCiAgICAgICAg
ICYmIHkoKSA8PSBvdGhlci55KCkgJiYgbWF4WSgpID49IG90aGVyLm1heFkoKTsKIH0KIAotdm9p
ZCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6aW50ZXJzZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRS
ZWN0JiBvdGhlcikKK3ZvaWQgTGF5b3V0UmVjdDo6aW50ZXJzZWN0KGNvbnN0IExheW91dFJlY3Qm
IG90aGVyKQogewotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdMb2NhdGlvbihtYXgoeCgp
LCBvdGhlci54KCkpLCBtYXgoeSgpLCBvdGhlci55KCkpKTsKLSAgICBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQgbmV3TWF4UG9pbnQobWluKG1heFgoKSwgb3RoZXIubWF4WCgpKSwgbWluKG1heFkoKSwg
b3RoZXIubWF4WSgpKSk7CisgICAgTGF5b3V0UG9pbnQgbmV3TG9jYXRpb24obWF4KHgoKSwgb3Ro
ZXIueCgpKSwgbWF4KHkoKSwgb3RoZXIueSgpKSk7CisgICAgTGF5b3V0UG9pbnQgbmV3TWF4UG9p
bnQobWluKG1heFgoKSwgb3RoZXIubWF4WCgpKSwgbWluKG1heFkoKSwgb3RoZXIubWF4WSgpKSk7
CiAKICAgICAvLyBSZXR1cm4gYSBjbGVhbiBlbXB0eSByZWN0YW5nbGUgZm9yIG5vbi1pbnRlcnNl
Y3RpbmcgY2FzZXMuCiAgICAgaWYgKG5ld0xvY2F0aW9uLngoKSA+PSBuZXdNYXhQb2ludC54KCkg
fHwgbmV3TG9jYXRpb24ueSgpID49IG5ld01heFBvaW50LnkoKSkgewotICAgICAgICBuZXdMb2Nh
dGlvbiA9IEZyYWN0aW9uYWxMYXlvdXRQb2ludCgwLCAwKTsKLSAgICAgICAgbmV3TWF4UG9pbnQg
PSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoMCwgMCk7CisgICAgICAgIG5ld0xvY2F0aW9uID0gTGF5
b3V0UG9pbnQoMCwgMCk7CisgICAgICAgIG5ld01heFBvaW50ID0gTGF5b3V0UG9pbnQoMCwgMCk7
CiAgICAgfQogCiAgICAgbV9sb2NhdGlvbiA9IG5ld0xvY2F0aW9uOwogICAgIG1fc2l6ZSA9IG5l
d01heFBvaW50IC0gbmV3TG9jYXRpb247CiB9CiAKLXZvaWQgRnJhY3Rpb25hbExheW91dFJlY3Q6
OnVuaXRlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBvdGhlcikKK3ZvaWQgTGF5b3V0UmVj
dDo6dW5pdGUoY29uc3QgTGF5b3V0UmVjdCYgb3RoZXIpCiB7CiAgICAgLy8gSGFuZGxlIGVtcHR5
IHNwZWNpYWwgY2FzZXMgZmlyc3QuCiAgICAgaWYgKG90aGVyLmlzRW1wdHkoKSkKQEAgLTg1LDE0
ICs4NSwxNCBAQCB2b2lkIEZyYWN0aW9uYWxMYXlvdXRSZWN0Ojp1bml0ZShjb25zdCBGCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbmV3TG9jYXRp
b24obWluKHgoKSwgb3RoZXIueCgpKSwgbWluKHkoKSwgb3RoZXIueSgpKSk7Ci0gICAgRnJhY3Rp
b25hbExheW91dFBvaW50IG5ld01heFBvaW50KG1heChtYXhYKCksIG90aGVyLm1heFgoKSksIG1h
eChtYXhZKCksIG90aGVyLm1heFkoKSkpOworICAgIExheW91dFBvaW50IG5ld0xvY2F0aW9uKG1p
bih4KCksIG90aGVyLngoKSksIG1pbih5KCksIG90aGVyLnkoKSkpOworICAgIExheW91dFBvaW50
IG5ld01heFBvaW50KG1heChtYXhYKCksIG90aGVyLm1heFgoKSksIG1heChtYXhZKCksIG90aGVy
Lm1heFkoKSkpOwogCiAgICAgbV9sb2NhdGlvbiA9IG5ld0xvY2F0aW9uOwogICAgIG1fc2l6ZSA9
IG5ld01heFBvaW50IC0gbmV3TG9jYXRpb247CiB9CiAKLXZvaWQgRnJhY3Rpb25hbExheW91dFJl
Y3Q6OnVuaXRlSWZOb25aZXJvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBvdGhlcikKK3Zv
aWQgTGF5b3V0UmVjdDo6dW5pdGVJZk5vblplcm8oY29uc3QgTGF5b3V0UmVjdCYgb3RoZXIpCiB7
CiAgICAgLy8gSGFuZGxlIGVtcHR5IHNwZWNpYWwgY2FzZXMgZmlyc3QuCiAgICAgaWYgKCFvdGhl
ci53aWR0aCgpICYmICFvdGhlci5oZWlnaHQoKSkKQEAgLTEwMiwyMiArMTAyLDIyIEBAIHZvaWQg
RnJhY3Rpb25hbExheW91dFJlY3Q6OnVuaXRlSWZOb25aZXIKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdMb2NhdGlvbihtaW4oeCgpLCBvdGhl
ci54KCkpLCBtaW4oeSgpLCBvdGhlci55KCkpKTsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQg
bmV3TWF4UG9pbnQobWF4KG1heFgoKSwgb3RoZXIubWF4WCgpKSwgbWF4KG1heFkoKSwgb3RoZXIu
bWF4WSgpKSk7CisgICAgTGF5b3V0UG9pbnQgbmV3TG9jYXRpb24obWluKHgoKSwgb3RoZXIueCgp
KSwgbWluKHkoKSwgb3RoZXIueSgpKSk7CisgICAgTGF5b3V0UG9pbnQgbmV3TWF4UG9pbnQobWF4
KG1heFgoKSwgb3RoZXIubWF4WCgpKSwgbWF4KG1heFkoKSwgb3RoZXIubWF4WSgpKSk7CiAKICAg
ICBtX2xvY2F0aW9uID0gbmV3TG9jYXRpb247CiAgICAgbV9zaXplID0gbmV3TWF4UG9pbnQgLSBu
ZXdMb2NhdGlvbjsKIH0KIAotdm9pZCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6c2NhbGUoZmxvYXQg
cykKK3ZvaWQgTGF5b3V0UmVjdDo6c2NhbGUoZmxvYXQgcykKIHsKICAgICBtX2xvY2F0aW9uLnNj
YWxlKHMsIHMpOwogICAgIG1fc2l6ZS5zY2FsZShzKTsKIH0KIAotRnJhY3Rpb25hbExheW91dFJl
Y3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxGcmFjdGlvbmFsTGF5b3V0UmVjdD4mIHJlY3RzKQor
TGF5b3V0UmVjdCB1bmlvblJlY3QoY29uc3QgVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cykKIHsK
LSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCByZXN1bHQ7CisgICAgTGF5b3V0UmVjdCByZXN1bHQ7
CiAKICAgICBzaXplX3QgY291bnQgPSByZWN0cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBjb3VudDsgKytpKQpAQCAtMTI2LDcgKzEyNiw3IEBAIEZyYWN0aW9uYWxMYXlvdXRS
ZWN0IHVuaW9uUmVjdChjb25zdCBWZWMKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1JbnRSZWN0
IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIHJlY3QpCitJbnRS
ZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkKIHsKICAgICBJbnRQ
b2ludCBsb2NhdGlvbiA9IGZsb29yZWRJbnRQb2ludChyZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwog
ICAgIEludFBvaW50IG1heFBvaW50ID0gY2VpbGVkSW50UG9pbnQocmVjdC5tYXhYTWF4WUNvcm5l
cigpKTsKQEAgLTEzNCwxMyArMTM0LDEzIEBAIEludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25z
dCBGcmFjdGlvbmEKICAgICByZXR1cm4gSW50UmVjdChsb2NhdGlvbiwgbWF4UG9pbnQgLSBsb2Nh
dGlvbik7CiB9CiAKLUZyYWN0aW9uYWxMYXlvdXRSZWN0IGVuY2xvc2luZ0ZyYWN0aW9uYWxMYXlv
dXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK0xheW91dFJlY3QgZW5jbG9zaW5nTGF5b3V0
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9V
VCkKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbG9jYXRpb24gPSBmbG9vcmVkRnJhY3Rpb25h
bExheW91dFBvaW50KHJlY3QubWluWE1pbllDb3JuZXIoKSk7Ci0gICAgRnJhY3Rpb25hbExheW91
dFBvaW50IG1heFBvaW50ID0gY2VpbGVkRnJhY3Rpb25hbExheW91dFBvaW50KHJlY3QubWF4WE1h
eFlDb3JuZXIoKSk7CisgICAgTGF5b3V0UG9pbnQgbG9jYXRpb24gPSBmbG9vcmVkTGF5b3V0UG9p
bnQocmVjdC5taW5YTWluWUNvcm5lcigpKTsKKyAgICBMYXlvdXRQb2ludCBtYXhQb2ludCA9IGNl
aWxlZExheW91dFBvaW50KHJlY3QubWF4WE1heFlDb3JuZXIoKSk7CiAKLSAgICByZXR1cm4gRnJh
Y3Rpb25hbExheW91dFJlY3QobG9jYXRpb24sIG1heFBvaW50IC0gbG9jYXRpb24pOworICAgIHJl
dHVybiBMYXlvdXRSZWN0KGxvY2F0aW9uLCBtYXhQb2ludCAtIGxvY2F0aW9uKTsKICNlbHNlCiAg
ICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QocmVjdCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJlY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0LmgJKHJldmlzaW9uIDEzMzUx
NykJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91
dFJlY3QuaDoxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlv
dXRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGcmFjdGlv
bmFsTGF5b3V0UmVjdF9oCisjZGVmaW5lIEZyYWN0aW9uYWxMYXlvdXRSZWN0X2gKKworI2luY2x1
ZGUgIkZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuaCIKKyNpbmNsdWRlICJGcmFjdGlvbmFsTGF5
b3V0UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCisjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8cWdsb2JhbC5oPgorUVRfQkVHSU5fTkFN
RVNQQUNFCitjbGFzcyBRUmVjdDsKK2NsYXNzIFFSZWN0RjsKK1FUX0VORF9OQU1FU1BBQ0UKKyNl
bmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZsb2F0UmVjdDsKKworY2xhc3Mg
RnJhY3Rpb25hbExheW91dFJlY3QgeworcHVibGljOgorICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0
KCkgeyB9CisgICAgRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFBv
aW50JiBsb2NhdGlvbiwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpCisgICAgICAg
IDogbV9sb2NhdGlvbihsb2NhdGlvbiksIG1fc2l6ZShzaXplKSB7IH0KKyAgICBGcmFjdGlvbmFs
TGF5b3V0UmVjdChGcmFjdGlvbmFsTGF5b3V0VW5pdCB4LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCB5
LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCB3aWR0aCwgRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0
KQorICAgICAgICA6IG1fbG9jYXRpb24oRnJhY3Rpb25hbExheW91dFBvaW50KHgsIHkpKSwgbV9z
aXplKEZyYWN0aW9uYWxMYXlvdXRTaXplKHdpZHRoLCBoZWlnaHQpKSB7IH0KKyAgICBGcmFjdGlv
bmFsTGF5b3V0UmVjdChjb25zdCBGbG9hdFBvaW50JiBsb2NhdGlvbiwgY29uc3QgRmxvYXRTaXpl
JiBzaXplKQorICAgICAgICA6IG1fbG9jYXRpb24obG9jYXRpb24pLCBtX3NpemUoc2l6ZSkgeyB9
CisgICAgRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgOiBtX2xvY2F0
aW9uKHJlY3QubG9jYXRpb24oKSksIG1fc2l6ZShyZWN0LnNpemUoKSkgeyB9CisKKyAgICBleHBs
aWNpdCBGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBGbG9hdFJlY3QmKTsgLy8gZG9uJ3QgZG8g
dGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKKyAgICAgICAgCisgICAgRnJhY3Rpb25h
bExheW91dFBvaW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfQorICAg
IEZyYWN0aW9uYWxMYXlvdXRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKwor
ICAgIEludFBvaW50IHBpeGVsU25hcHBlZExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gcm91bmRl
ZEludFBvaW50KG1fbG9jYXRpb24pOyB9CisgICAgSW50U2l6ZSBwaXhlbFNuYXBwZWRTaXplKCkg
Y29uc3QgeyByZXR1cm4gSW50U2l6ZShzbmFwU2l6ZVRvUGl4ZWwobV9zaXplLndpZHRoKCksIG1f
bG9jYXRpb24ueCgpKSwgc25hcFNpemVUb1BpeGVsKG1fc2l6ZS5oZWlnaHQoKSwgbV9sb2NhdGlv
bi55KCkpKTsgfQorCisgICAgdm9pZCBzZXRMb2NhdGlvbihjb25zdCBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQmIGxvY2F0aW9uKSB7IG1fbG9jYXRpb24gPSBsb2NhdGlvbjsgfQorICAgIHZvaWQgc2V0
U2l6ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9
CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB4KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlv
bi54KCk7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB5KCkgY29uc3QgeyByZXR1cm4gbV9s
b2NhdGlvbi55KCk7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtYXhYKCkgY29uc3QgeyBy
ZXR1cm4geCgpICsgd2lkdGgoKTsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1heFkoKSBj
b25zdCB7IHJldHVybiB5KCkgKyBoZWlnaHQoKTsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9zaXplLndpZHRoKCk7IH0KKyAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaGVpZ2h0KCk7IH0KKwor
ICAgIGludCBwaXhlbFNuYXBwZWRYKCkgY29uc3QgeyByZXR1cm4geCgpLnJvdW5kKCk7IH0KKyAg
ICBpbnQgcGl4ZWxTbmFwcGVkWSgpIGNvbnN0IHsgcmV0dXJuIHkoKS5yb3VuZCgpOyB9CisgICAg
aW50IHBpeGVsU25hcHBlZFdpZHRoKCkgY29uc3QgeyByZXR1cm4gc25hcFNpemVUb1BpeGVsKHdp
ZHRoKCksIHgoKSk7IH0KKyAgICBpbnQgcGl4ZWxTbmFwcGVkSGVpZ2h0KCkgY29uc3QgeyByZXR1
cm4gc25hcFNpemVUb1BpeGVsKGhlaWdodCgpLCB5KCkpOyB9CisgICAgaW50IHBpeGVsU25hcHBl
ZE1heFgoKSBjb25zdCB7IHJldHVybiAobV9sb2NhdGlvbi54KCkgKyBtX3NpemUud2lkdGgoKSku
cm91bmQoKTsgfQorICAgIGludCBwaXhlbFNuYXBwZWRNYXhZKCkgY29uc3QgeyByZXR1cm4gKG1f
bG9jYXRpb24ueSgpICsgbV9zaXplLmhlaWdodCgpKS5yb3VuZCgpOyB9CisKKyAgICB2b2lkIHNl
dFgoRnJhY3Rpb25hbExheW91dFVuaXQgeCkgeyBtX2xvY2F0aW9uLnNldFgoeCk7IH0KKyAgICB2
b2lkIHNldFkoRnJhY3Rpb25hbExheW91dFVuaXQgeSkgeyBtX2xvY2F0aW9uLnNldFkoeSk7IH0K
KyAgICB2b2lkIHNldFdpZHRoKEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKSB7IG1fc2l6ZS5z
ZXRXaWR0aCh3aWR0aCk7IH0KKyAgICB2b2lkIHNldEhlaWdodChGcmFjdGlvbmFsTGF5b3V0VW5p
dCBoZWlnaHQpIHsgbV9zaXplLnNldEhlaWdodChoZWlnaHQpOyB9CisKKyAgICBib29sIGlzRW1w
dHkoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaXNFbXB0eSgpOyB9CisKKyAgICAvLyBOT1RFOiBU
aGUgcmVzdWx0IGlzIHJvdW5kZWQgdG8gaW50ZWdlciB2YWx1ZXMsIGFuZCB0aHVzIG1heSBiZSBu
b3QgdGhlIGV4YWN0CisgICAgLy8gY2VudGVyIHBvaW50LgorICAgIEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCBjZW50ZXIoKSBjb25zdCB7IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoeCgpICsg
d2lkdGgoKSAvIDIsIHkoKSArIGhlaWdodCgpIC8gMik7IH0KKworICAgIHZvaWQgbW92ZShjb25z
dCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkgeyBtX2xvY2F0aW9uICs9IHNpemU7IH0gCisg
ICAgdm9pZCBtb3ZlQnkoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBvZmZzZXQpIHsgbV9s
b2NhdGlvbi5tb3ZlKG9mZnNldC54KCksIG9mZnNldC55KCkpOyB9CisgICAgdm9pZCBtb3ZlKEZy
YWN0aW9uYWxMYXlvdXRVbml0IGR4LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeSkgeyBtX2xvY2F0
aW9uLm1vdmUoZHgsIGR5KTsgfSAKKworICAgIHZvaWQgZXhwYW5kKGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRTaXplJiBzaXplKSB7IG1fc2l6ZSArPSBzaXplOyB9CisgICAgdm9pZCBleHBhbmQoY29u
c3QgRnJhY3Rpb25hbExheW91dEJveEV4dGVudCYgYm94KQorICAgIHsKKyAgICAgICAgbV9sb2Nh
dGlvbi5tb3ZlKC1ib3gubGVmdCgpLCAtYm94LnRvcCgpKTsKKyAgICAgICAgbV9zaXplLmV4cGFu
ZChib3gubGVmdCgpICsgYm94LnJpZ2h0KCksIGJveC50b3AoKSArIGJveC5ib3R0b20oKSk7Cisg
ICAgfQorICAgIHZvaWQgZXhwYW5kKEZyYWN0aW9uYWxMYXlvdXRVbml0IGR3LCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBkaCkgeyBtX3NpemUuZXhwYW5kKGR3LCBkaCk7IH0KKyAgICB2b2lkIGNvbnRy
YWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1fc2l6ZSAtPSBzaXplOyB9
CisgICAgdm9pZCBjb250cmFjdChGcmFjdGlvbmFsTGF5b3V0VW5pdCBkdywgRnJhY3Rpb25hbExh
eW91dFVuaXQgZGgpIHsgbV9zaXplLmV4cGFuZCgtZHcsIC1kaCk7IH0KKworICAgIHZvaWQgc2hp
ZnRYRWRnZVRvKEZyYWN0aW9uYWxMYXlvdXRVbml0IGVkZ2UpCisgICAgeworICAgICAgICBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBkZWx0YSA9IGVkZ2UgLSB4KCk7CisgICAgICAgIHNldFgoZWRnZSk7
CisgICAgICAgIHNldFdpZHRoKHN0ZDo6bWF4PEZyYWN0aW9uYWxMYXlvdXRVbml0PigwLCB3aWR0
aCgpIC0gZGVsdGEpKTsKKyAgICB9CisgICAgdm9pZCBzaGlmdE1heFhFZGdlVG8oRnJhY3Rpb25h
bExheW91dFVuaXQgZWRnZSkKKyAgICB7CisgICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRl
bHRhID0gZWRnZSAtIG1heFgoKTsKKyAgICAgICAgc2V0V2lkdGgoc3RkOjptYXg8RnJhY3Rpb25h
bExheW91dFVuaXQ+KDAsIHdpZHRoKCkgKyBkZWx0YSkpOworICAgIH0KKyAgICB2b2lkIHNoaWZ0
WUVkZ2VUbyhGcmFjdGlvbmFsTGF5b3V0VW5pdCBlZGdlKQorICAgIHsKKyAgICAgICAgRnJhY3Rp
b25hbExheW91dFVuaXQgZGVsdGEgPSBlZGdlIC0geSgpOworICAgICAgICBzZXRZKGVkZ2UpOwor
ICAgICAgICBzZXRIZWlnaHQoc3RkOjptYXg8RnJhY3Rpb25hbExheW91dFVuaXQ+KDAsIGhlaWdo
dCgpIC0gZGVsdGEpKTsKKyAgICB9CisgICAgdm9pZCBzaGlmdE1heFlFZGdlVG8oRnJhY3Rpb25h
bExheW91dFVuaXQgZWRnZSkKKyAgICB7CisgICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRl
bHRhID0gZWRnZSAtIG1heFkoKTsKKyAgICAgICAgc2V0SGVpZ2h0KHN0ZDo6bWF4PEZyYWN0aW9u
YWxMYXlvdXRVbml0PigwLCBoZWlnaHQoKSArIGRlbHRhKSk7CisgICAgfQorCisgICAgRnJhY3Rp
b25hbExheW91dFBvaW50IG1pblhNaW5ZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlv
bjsgfSAvLyB0eXBpY2FsbHkgdG9wTGVmdAorICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBtYXhY
TWluWUNvcm5lcigpIGNvbnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChtX2xvY2F0
aW9uLngoKSArIG1fc2l6ZS53aWR0aCgpLCBtX2xvY2F0aW9uLnkoKSk7IH0gLy8gdHlwaWNhbGx5
IHRvcFJpZ2h0CisgICAgRnJhY3Rpb25hbExheW91dFBvaW50IG1pblhNYXhZQ29ybmVyKCkgY29u
c3QgeyByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KG1fbG9jYXRpb24ueCgpLCBtX2xvY2F0
aW9uLnkoKSArIG1fc2l6ZS5oZWlnaHQoKSk7IH0gLy8gdHlwaWNhbGx5IGJvdHRvbUxlZnQKKyAg
ICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbWF4WE1heFlDb3JuZXIoKSBjb25zdCB7IHJldHVybiBG
cmFjdGlvbmFsTGF5b3V0UG9pbnQobV9sb2NhdGlvbi54KCkgKyBtX3NpemUud2lkdGgoKSwgbV9s
b2NhdGlvbi55KCkgKyBtX3NpemUuaGVpZ2h0KCkpOyB9IC8vIHR5cGljYWxseSBib3R0b21SaWdo
dAorICAgIAorICAgIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYp
IGNvbnN0OworICAgIGJvb2wgY29udGFpbnMoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKSBj
b25zdDsKKworICAgIC8vIFRoaXMgY2hlY2tzIHRvIHNlZSBpZiB0aGUgcmVjdCBjb250YWlucyB4
LHkgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlLgorICAgIC8vIEVxdWl2YWxlbnQgdG8gY2hlY2tp
bmcgaWYgdGhlIHJlY3QgY29udGFpbnMgYSAxeDEgcmVjdCBiZWxvdyBhbmQgdG8gdGhlIHJpZ2h0
IG9mIChweCxweSkuCisgICAgYm9vbCBjb250YWlucyhGcmFjdGlvbmFsTGF5b3V0VW5pdCBweCwg
RnJhY3Rpb25hbExheW91dFVuaXQgcHkpIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIHB4ID49IHgo
KSAmJiBweCA8IG1heFgoKSAmJiBweSA+PSB5KCkgJiYgcHkgPCBtYXhZKCk7IH0KKyAgICBib29s
IGNvbnRhaW5zKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0
dXJuIGNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsgfQorCisgICAgdm9pZCBpbnRlcnNl
Y3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKTsKKyAgICB2b2lkIHVuaXRlKGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRSZWN0Jik7CisgICAgdm9pZCB1bml0ZUlmTm9uWmVybyhjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UmVjdCYpOworCisgICAgdm9pZCBpbmZsYXRlWChGcmFjdGlvbmFsTGF5b3V0
VW5pdCBkeCkKKyAgICB7CisgICAgICAgIG1fbG9jYXRpb24uc2V0WChtX2xvY2F0aW9uLngoKSAt
IGR4KTsKKyAgICAgICAgbV9zaXplLnNldFdpZHRoKG1fc2l6ZS53aWR0aCgpICsgZHggKyBkeCk7
CisgICAgfQorICAgIHZvaWQgaW5mbGF0ZVkoRnJhY3Rpb25hbExheW91dFVuaXQgZHkpCisgICAg
eworICAgICAgICBtX2xvY2F0aW9uLnNldFkobV9sb2NhdGlvbi55KCkgLSBkeSk7CisgICAgICAg
IG1fc2l6ZS5zZXRIZWlnaHQobV9zaXplLmhlaWdodCgpICsgZHkgKyBkeSk7CisgICAgfQorICAg
IHZvaWQgaW5mbGF0ZShGcmFjdGlvbmFsTGF5b3V0VW5pdCBkKSB7IGluZmxhdGVYKGQpOyBpbmZs
YXRlWShkKTsgfQorICAgIHZvaWQgc2NhbGUoZmxvYXQgcyk7CisKKyAgICBGcmFjdGlvbmFsTGF5
b3V0UmVjdCB0cmFuc3Bvc2VkUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRS
ZWN0KG1fbG9jYXRpb24udHJhbnNwb3NlZFBvaW50KCksIG1fc2l6ZS50cmFuc3Bvc2VkU2l6ZSgp
KTsgfQorCisgICAgc3RhdGljIEZyYWN0aW9uYWxMYXlvdXRSZWN0IGluZmluaXRlUmVjdCgpCisg
ICAgeworICAgICAgICAvLyBSZXR1cm4gYSByZWN0IHRoYXQgaXMgc2xpZ2h0bHkgc21hbGxlciB0
aGFuIHRoZSB0cnVlIG1heCByZWN0IHRvIGFsbG93IHBpeGVsU25hcHBpbmcgdG8gcm91bmQgdXAg
dG8gdGhlIG5lYXJlc3QgSW50UmVjdCB3aXRob3V0IG92ZXJmbG93aW5nLgorICAgICAgICByZXR1
cm4gRnJhY3Rpb25hbExheW91dFJlY3QoRnJhY3Rpb25hbExheW91dFVuaXQ6Om5lYXJseU1pbigp
IC8gMiwgRnJhY3Rpb25hbExheW91dFVuaXQ6Om5lYXJseU1pbigpIC8gMiwgRnJhY3Rpb25hbExh
eW91dFVuaXQ6Om5lYXJseU1heCgpLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bmVhcmx5TWF4KCkp
OworICAgIH0KKworI2lmIFBMQVRGT1JNKFFUKQorICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlv
dXRSZWN0KGNvbnN0IFFSZWN0Jik7CisgICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFJlY3Qo
Y29uc3QgUVJlY3RGJik7CisgICAgb3BlcmF0b3IgUVJlY3RGKCkgY29uc3Q7CisjZW5kaWYKKwor
cHJpdmF0ZToKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbV9sb2NhdGlvbjsKKyAgICBGcmFj
dGlvbmFsTGF5b3V0U2l6ZSBtX3NpemU7Cit9OworCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFJl
Y3QgaW50ZXJzZWN0aW9uKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBhLCBjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UmVjdCYgYikKK3sKKyAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCBjID0gYTsK
KyAgICBjLmludGVyc2VjdChiKTsKKyAgICByZXR1cm4gYzsKK30KKworaW5saW5lIEZyYWN0aW9u
YWxMYXlvdXRSZWN0IHVuaW9uUmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYSwgY29u
c3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGIpCit7CisgICAgRnJhY3Rpb25hbExheW91dFJlY3Qg
YyA9IGE7CisgICAgYy51bml0ZShiKTsKKyAgICByZXR1cm4gYzsKK30KKworRnJhY3Rpb25hbExh
eW91dFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxGcmFjdGlvbmFsTGF5b3V0UmVjdD4mKTsK
KworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYSwg
Y29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGIpCit7CisgICAgcmV0dXJuIGEubG9jYXRpb24o
KSA9PSBiLmxvY2F0aW9uKCkgJiYgYS5zaXplKCkgPT0gYi5zaXplKCk7Cit9CisKK2lubGluZSBi
b29sIG9wZXJhdG9yIT0oY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRSZWN0JiBiKQoreworICAgIHJldHVybiBhLmxvY2F0aW9uKCkgIT0gYi5sb2Nh
dGlvbigpIHx8IGEuc2l6ZSgpICE9IGIuc2l6ZSgpOworfQorCitpbmxpbmUgSW50UmVjdCBwaXhl
bFNuYXBwZWRJbnRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiByZWN0KQoreworI2lm
IEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisgICAgcmV0dXJuIEludFJlY3Qocm91bmRlZEludFBv
aW50KHJlY3QubG9jYXRpb24oKSksIEludFNpemUoc25hcFNpemVUb1BpeGVsKHJlY3Qud2lkdGgo
KSwgcmVjdC54KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNuYXBTaXplVG9QaXhlbChyZWN0LmhlaWdodCgpLCByZWN0Lnko
KSkpKTsKKworI2Vsc2UKKyAgICByZXR1cm4gSW50UmVjdChyZWN0KTsKKyNlbmRpZgorfQorCitJ
bnRSZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKTsKK0Zy
YWN0aW9uYWxMYXlvdXRSZWN0IGVuY2xvc2luZ0ZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBGcmFjdGlv
bmFsTGF5b3V0UmVjdF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9M
YXlvdXRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvTGF5b3V0UmVjdC5oCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEyICsyOCwx
MiBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEZyYWN0aW9uYWxMYXlvdXRSZWN0
X2gKLSNkZWZpbmUgRnJhY3Rpb25hbExheW91dFJlY3RfaAorI2lmbmRlZiBMYXlvdXRSZWN0X2gK
KyNkZWZpbmUgTGF5b3V0UmVjdF9oCiAKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0Qm94RXh0
ZW50LmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFBvaW50LmgiCiAjaW5jbHVkZSAiSW50
UmVjdC5oIgorI2luY2x1ZGUgIkxheW91dEJveEV4dGVudC5oIgorI2luY2x1ZGUgIkxheW91dFBv
aW50LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgUExBVEZPUk0oUVQpCkBAIC00
OCwzNCArNDgsMzQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGbG9hdFJlY3Q7CiAK
LWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRSZWN0IHsKK2NsYXNzIExheW91dFJlY3QgewogcHVibGlj
OgotICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0KCkgeyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFJl
Y3QoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBsb2NhdGlvbiwgY29uc3QgRnJhY3Rpb25h
bExheW91dFNpemUmIHNpemUpCisgICAgTGF5b3V0UmVjdCgpIHsgfQorICAgIExheW91dFJlY3Qo
Y29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBjb25zdCBMYXlvdXRTaXplJiBzaXplKQogICAg
ICAgICA6IG1fbG9jYXRpb24obG9jYXRpb24pLCBtX3NpemUoc2l6ZSkgeyB9Ci0gICAgRnJhY3Rp
b25hbExheW91dFJlY3QoRnJhY3Rpb25hbExheW91dFVuaXQgeCwgRnJhY3Rpb25hbExheW91dFVu
aXQgeSwgRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGhl
aWdodCkKLSAgICAgICAgOiBtX2xvY2F0aW9uKEZyYWN0aW9uYWxMYXlvdXRQb2ludCh4LCB5KSks
IG1fc2l6ZShGcmFjdGlvbmFsTGF5b3V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkgeyB9Ci0gICAgRnJh
Y3Rpb25hbExheW91dFJlY3QoY29uc3QgRmxvYXRQb2ludCYgbG9jYXRpb24sIGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkKKyAgICBMYXlvdXRSZWN0KExheW91dFVuaXQgeCwgTGF5b3V0VW5pdCB5LCBM
YXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IGhlaWdodCkKKyAgICAgICAgOiBtX2xvY2F0aW9u
KExheW91dFBvaW50KHgsIHkpKSwgbV9zaXplKExheW91dFNpemUod2lkdGgsIGhlaWdodCkpIHsg
fQorICAgIExheW91dFJlY3QoY29uc3QgRmxvYXRQb2ludCYgbG9jYXRpb24sIGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkKICAgICAgICAgOiBtX2xvY2F0aW9uKGxvY2F0aW9uKSwgbV9zaXplKHNpemUp
IHsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIDogbV9s
b2NhdGlvbihyZWN0LmxvY2F0aW9uKCkpLCBtX3NpemUocmVjdC5zaXplKCkpIHsgfQorICAgIExh
eW91dFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgOiBtX2xvY2F0aW9uKHJlY3QubG9jYXRpb24o
KSksIG1fc2l6ZShyZWN0LnNpemUoKSkgeyB9CiAKLSAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5
b3V0UmVjdChjb25zdCBGbG9hdFJlY3QmKTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNp
bmNlIGl0J3MgbG9zc3kKKyAgICBleHBsaWNpdCBMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYp
OyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQogICAgICAgICAK
LSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xv
Y2F0aW9uOyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2l6ZTsgfQorICAgIExheW91dFBvaW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9s
b2NhdGlvbjsgfQorICAgIExheW91dFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsg
fQogCiAgICAgSW50UG9pbnQgcGl4ZWxTbmFwcGVkTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBy
b3VuZGVkSW50UG9pbnQobV9sb2NhdGlvbik7IH0KICAgICBJbnRTaXplIHBpeGVsU25hcHBlZFNp
emUoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKHNuYXBTaXplVG9QaXhlbChtX3NpemUud2lkdGgo
KSwgbV9sb2NhdGlvbi54KCkpLCBzbmFwU2l6ZVRvUGl4ZWwobV9zaXplLmhlaWdodCgpLCBtX2xv
Y2F0aW9uLnkoKSkpOyB9CiAKLSAgICB2b2lkIHNldExvY2F0aW9uKGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRQb2ludCYgbG9jYXRpb24pIHsgbV9sb2NhdGlvbiA9IGxvY2F0aW9uOyB9Ci0gICAgdm9p
ZCBzZXRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1fc2l6ZSA9IHNp
emU7IH0KKyAgICB2b2lkIHNldExvY2F0aW9uKGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbikg
eyBtX2xvY2F0aW9uID0gbG9jYXRpb247IH0KKyAgICB2b2lkIHNldFNpemUoY29uc3QgTGF5b3V0
U2l6ZSYgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9CiAKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dCB4KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi54KCk7IH0KLSAgICBGcmFjdGlvbmFsTGF5
b3V0VW5pdCB5KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi55KCk7IH0KLSAgICBGcmFjdGlv
bmFsTGF5b3V0VW5pdCBtYXhYKCkgY29uc3QgeyByZXR1cm4geCgpICsgd2lkdGgoKTsgfQotICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0IG1heFkoKSBjb25zdCB7IHJldHVybiB5KCkgKyBoZWlnaHQo
KTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9z
aXplLndpZHRoKCk7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBoZWlnaHQoKSBjb25zdCB7
IHJldHVybiBtX3NpemUuaGVpZ2h0KCk7IH0KKyAgICBMYXlvdXRVbml0IHgoKSBjb25zdCB7IHJl
dHVybiBtX2xvY2F0aW9uLngoKTsgfQorICAgIExheW91dFVuaXQgeSgpIGNvbnN0IHsgcmV0dXJu
IG1fbG9jYXRpb24ueSgpOyB9CisgICAgTGF5b3V0VW5pdCBtYXhYKCkgY29uc3QgeyByZXR1cm4g
eCgpICsgd2lkdGgoKTsgfQorICAgIExheW91dFVuaXQgbWF4WSgpIGNvbnN0IHsgcmV0dXJuIHko
KSArIGhlaWdodCgpOyB9CisgICAgTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2l6ZS53aWR0aCgpOyB9CisgICAgTGF5b3V0VW5pdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBt
X3NpemUuaGVpZ2h0KCk7IH0KIAogICAgIGludCBwaXhlbFNuYXBwZWRYKCkgY29uc3QgeyByZXR1
cm4geCgpLnJvdW5kKCk7IH0KICAgICBpbnQgcGl4ZWxTbmFwcGVkWSgpIGNvbnN0IHsgcmV0dXJu
IHkoKS5yb3VuZCgpOyB9CkBAIC04NCwxMzEgKzg0LDEzMSBAQCBwdWJsaWM6CiAgICAgaW50IHBp
eGVsU25hcHBlZE1heFgoKSBjb25zdCB7IHJldHVybiAobV9sb2NhdGlvbi54KCkgKyBtX3NpemUu
d2lkdGgoKSkucm91bmQoKTsgfQogICAgIGludCBwaXhlbFNuYXBwZWRNYXhZKCkgY29uc3QgeyBy
ZXR1cm4gKG1fbG9jYXRpb24ueSgpICsgbV9zaXplLmhlaWdodCgpKS5yb3VuZCgpOyB9CiAKLSAg
ICB2b2lkIHNldFgoRnJhY3Rpb25hbExheW91dFVuaXQgeCkgeyBtX2xvY2F0aW9uLnNldFgoeCk7
IH0KLSAgICB2b2lkIHNldFkoRnJhY3Rpb25hbExheW91dFVuaXQgeSkgeyBtX2xvY2F0aW9uLnNl
dFkoeSk7IH0KLSAgICB2b2lkIHNldFdpZHRoKEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKSB7
IG1fc2l6ZS5zZXRXaWR0aCh3aWR0aCk7IH0KLSAgICB2b2lkIHNldEhlaWdodChGcmFjdGlvbmFs
TGF5b3V0VW5pdCBoZWlnaHQpIHsgbV9zaXplLnNldEhlaWdodChoZWlnaHQpOyB9CisgICAgdm9p
ZCBzZXRYKExheW91dFVuaXQgeCkgeyBtX2xvY2F0aW9uLnNldFgoeCk7IH0KKyAgICB2b2lkIHNl
dFkoTGF5b3V0VW5pdCB5KSB7IG1fbG9jYXRpb24uc2V0WSh5KTsgfQorICAgIHZvaWQgc2V0V2lk
dGgoTGF5b3V0VW5pdCB3aWR0aCkgeyBtX3NpemUuc2V0V2lkdGgod2lkdGgpOyB9CisgICAgdm9p
ZCBzZXRIZWlnaHQoTGF5b3V0VW5pdCBoZWlnaHQpIHsgbV9zaXplLnNldEhlaWdodChoZWlnaHQp
OyB9CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaXNFbXB0eSgp
OyB9CiAKICAgICAvLyBOT1RFOiBUaGUgcmVzdWx0IGlzIHJvdW5kZWQgdG8gaW50ZWdlciB2YWx1
ZXMsIGFuZCB0aHVzIG1heSBiZSBub3QgdGhlIGV4YWN0CiAgICAgLy8gY2VudGVyIHBvaW50Lgot
ICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBjZW50ZXIoKSBjb25zdCB7IHJldHVybiBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQoeCgpICsgd2lkdGgoKSAvIDIsIHkoKSArIGhlaWdodCgpIC8gMik7IH0K
KyAgICBMYXlvdXRQb2ludCBjZW50ZXIoKSBjb25zdCB7IHJldHVybiBMYXlvdXRQb2ludCh4KCkg
KyB3aWR0aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAyKTsgfQogCi0gICAgdm9pZCBtb3ZlKGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1fbG9jYXRpb24gKz0gc2l6ZTsgfSAK
LSAgICB2b2lkIG1vdmVCeShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIG9mZnNldCkgeyBt
X2xvY2F0aW9uLm1vdmUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7IH0KLSAgICB2b2lkIG1vdmUo
RnJhY3Rpb25hbExheW91dFVuaXQgZHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGR5KSB7IG1fbG9j
YXRpb24ubW92ZShkeCwgZHkpOyB9IAorICAgIHZvaWQgbW92ZShjb25zdCBMYXlvdXRTaXplJiBz
aXplKSB7IG1fbG9jYXRpb24gKz0gc2l6ZTsgfSAKKyAgICB2b2lkIG1vdmVCeShjb25zdCBMYXlv
dXRQb2ludCYgb2Zmc2V0KSB7IG1fbG9jYXRpb24ubW92ZShvZmZzZXQueCgpLCBvZmZzZXQueSgp
KTsgfQorICAgIHZvaWQgbW92ZShMYXlvdXRVbml0IGR4LCBMYXlvdXRVbml0IGR5KSB7IG1fbG9j
YXRpb24ubW92ZShkeCwgZHkpOyB9IAogCi0gICAgdm9pZCBleHBhbmQoY29uc3QgRnJhY3Rpb25h
bExheW91dFNpemUmIHNpemUpIHsgbV9zaXplICs9IHNpemU7IH0KLSAgICB2b2lkIGV4cGFuZChj
b25zdCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50JiBib3gpCisgICAgdm9pZCBleHBhbmQoY29u
c3QgTGF5b3V0U2l6ZSYgc2l6ZSkgeyBtX3NpemUgKz0gc2l6ZTsgfQorICAgIHZvaWQgZXhwYW5k
KGNvbnN0IExheW91dEJveEV4dGVudCYgYm94KQogICAgIHsKICAgICAgICAgbV9sb2NhdGlvbi5t
b3ZlKC1ib3gubGVmdCgpLCAtYm94LnRvcCgpKTsKICAgICAgICAgbV9zaXplLmV4cGFuZChib3gu
bGVmdCgpICsgYm94LnJpZ2h0KCksIGJveC50b3AoKSArIGJveC5ib3R0b20oKSk7CiAgICAgfQot
ICAgIHZvaWQgZXhwYW5kKEZyYWN0aW9uYWxMYXlvdXRVbml0IGR3LCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBkaCkgeyBtX3NpemUuZXhwYW5kKGR3LCBkaCk7IH0KLSAgICB2b2lkIGNvbnRyYWN0KGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1fc2l6ZSAtPSBzaXplOyB9Ci0gICAg
dm9pZCBjb250cmFjdChGcmFjdGlvbmFsTGF5b3V0VW5pdCBkdywgRnJhY3Rpb25hbExheW91dFVu
aXQgZGgpIHsgbV9zaXplLmV4cGFuZCgtZHcsIC1kaCk7IH0KKyAgICB2b2lkIGV4cGFuZChMYXlv
dXRVbml0IGR3LCBMYXlvdXRVbml0IGRoKSB7IG1fc2l6ZS5leHBhbmQoZHcsIGRoKTsgfQorICAg
IHZvaWQgY29udHJhY3QoY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkgeyBtX3NpemUgLT0gc2l6ZTsg
fQorICAgIHZvaWQgY29udHJhY3QoTGF5b3V0VW5pdCBkdywgTGF5b3V0VW5pdCBkaCkgeyBtX3Np
emUuZXhwYW5kKC1kdywgLWRoKTsgfQogCi0gICAgdm9pZCBzaGlmdFhFZGdlVG8oRnJhY3Rpb25h
bExheW91dFVuaXQgZWRnZSkKKyAgICB2b2lkIHNoaWZ0WEVkZ2VUbyhMYXlvdXRVbml0IGVkZ2Up
CiAgICAgewotICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkZWx0YSA9IGVkZ2UgLSB4KCk7
CisgICAgICAgIExheW91dFVuaXQgZGVsdGEgPSBlZGdlIC0geCgpOwogICAgICAgICBzZXRYKGVk
Z2UpOwotICAgICAgICBzZXRXaWR0aChzdGQ6Om1heDxGcmFjdGlvbmFsTGF5b3V0VW5pdD4oMCwg
d2lkdGgoKSAtIGRlbHRhKSk7CisgICAgICAgIHNldFdpZHRoKHN0ZDo6bWF4PExheW91dFVuaXQ+
KDAsIHdpZHRoKCkgLSBkZWx0YSkpOwogICAgIH0KLSAgICB2b2lkIHNoaWZ0TWF4WEVkZ2VUbyhG
cmFjdGlvbmFsTGF5b3V0VW5pdCBlZGdlKQorICAgIHZvaWQgc2hpZnRNYXhYRWRnZVRvKExheW91
dFVuaXQgZWRnZSkKICAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRlbHRhID0g
ZWRnZSAtIG1heFgoKTsKLSAgICAgICAgc2V0V2lkdGgoc3RkOjptYXg8RnJhY3Rpb25hbExheW91
dFVuaXQ+KDAsIHdpZHRoKCkgKyBkZWx0YSkpOworICAgICAgICBMYXlvdXRVbml0IGRlbHRhID0g
ZWRnZSAtIG1heFgoKTsKKyAgICAgICAgc2V0V2lkdGgoc3RkOjptYXg8TGF5b3V0VW5pdD4oMCwg
d2lkdGgoKSArIGRlbHRhKSk7CiAgICAgfQotICAgIHZvaWQgc2hpZnRZRWRnZVRvKEZyYWN0aW9u
YWxMYXlvdXRVbml0IGVkZ2UpCisgICAgdm9pZCBzaGlmdFlFZGdlVG8oTGF5b3V0VW5pdCBlZGdl
KQogICAgIHsKLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZGVsdGEgPSBlZGdlIC0geSgp
OworICAgICAgICBMYXlvdXRVbml0IGRlbHRhID0gZWRnZSAtIHkoKTsKICAgICAgICAgc2V0WShl
ZGdlKTsKLSAgICAgICAgc2V0SGVpZ2h0KHN0ZDo6bWF4PEZyYWN0aW9uYWxMYXlvdXRVbml0Pigw
LCBoZWlnaHQoKSAtIGRlbHRhKSk7CisgICAgICAgIHNldEhlaWdodChzdGQ6Om1heDxMYXlvdXRV
bml0PigwLCBoZWlnaHQoKSAtIGRlbHRhKSk7CiAgICAgfQotICAgIHZvaWQgc2hpZnRNYXhZRWRn
ZVRvKEZyYWN0aW9uYWxMYXlvdXRVbml0IGVkZ2UpCisgICAgdm9pZCBzaGlmdE1heFlFZGdlVG8o
TGF5b3V0VW5pdCBlZGdlKQogICAgIHsKLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZGVs
dGEgPSBlZGdlIC0gbWF4WSgpOwotICAgICAgICBzZXRIZWlnaHQoc3RkOjptYXg8RnJhY3Rpb25h
bExheW91dFVuaXQ+KDAsIGhlaWdodCgpICsgZGVsdGEpKTsKKyAgICAgICAgTGF5b3V0VW5pdCBk
ZWx0YSA9IGVkZ2UgLSBtYXhZKCk7CisgICAgICAgIHNldEhlaWdodChzdGQ6Om1heDxMYXlvdXRV
bml0PigwLCBoZWlnaHQoKSArIGRlbHRhKSk7CiAgICAgfQogCi0gICAgRnJhY3Rpb25hbExheW91
dFBvaW50IG1pblhNaW5ZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfSAvLyB0
eXBpY2FsbHkgdG9wTGVmdAotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBtYXhYTWluWUNvcm5l
cigpIGNvbnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChtX2xvY2F0aW9uLngoKSAr
IG1fc2l6ZS53aWR0aCgpLCBtX2xvY2F0aW9uLnkoKSk7IH0gLy8gdHlwaWNhbGx5IHRvcFJpZ2h0
Ci0gICAgRnJhY3Rpb25hbExheW91dFBvaW50IG1pblhNYXhZQ29ybmVyKCkgY29uc3QgeyByZXR1
cm4gRnJhY3Rpb25hbExheW91dFBvaW50KG1fbG9jYXRpb24ueCgpLCBtX2xvY2F0aW9uLnkoKSAr
IG1fc2l6ZS5oZWlnaHQoKSk7IH0gLy8gdHlwaWNhbGx5IGJvdHRvbUxlZnQKLSAgICBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQgbWF4WE1heFlDb3JuZXIoKSBjb25zdCB7IHJldHVybiBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQobV9sb2NhdGlvbi54KCkgKyBtX3NpemUud2lkdGgoKSwgbV9sb2NhdGlvbi55
KCkgKyBtX3NpemUuaGVpZ2h0KCkpOyB9IC8vIHR5cGljYWxseSBib3R0b21SaWdodAorICAgIExh
eW91dFBvaW50IG1pblhNaW5ZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfSAv
LyB0eXBpY2FsbHkgdG9wTGVmdAorICAgIExheW91dFBvaW50IG1heFhNaW5ZQ29ybmVyKCkgY29u
c3QgeyByZXR1cm4gTGF5b3V0UG9pbnQobV9sb2NhdGlvbi54KCkgKyBtX3NpemUud2lkdGgoKSwg
bV9sb2NhdGlvbi55KCkpOyB9IC8vIHR5cGljYWxseSB0b3BSaWdodAorICAgIExheW91dFBvaW50
IG1pblhNYXhZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gTGF5b3V0UG9pbnQobV9sb2NhdGlvbi54
KCksIG1fbG9jYXRpb24ueSgpICsgbV9zaXplLmhlaWdodCgpKTsgfSAvLyB0eXBpY2FsbHkgYm90
dG9tTGVmdAorICAgIExheW91dFBvaW50IG1heFhNYXhZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4g
TGF5b3V0UG9pbnQobV9sb2NhdGlvbi54KCkgKyBtX3NpemUud2lkdGgoKSwgbV9sb2NhdGlvbi55
KCkgKyBtX3NpemUuaGVpZ2h0KCkpOyB9IC8vIHR5cGljYWxseSBib3R0b21SaWdodAogICAgIAot
ICAgIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpIGNvbnN0Owot
ICAgIGJvb2wgY29udGFpbnMoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKSBjb25zdDsKKyAg
ICBib29sIGludGVyc2VjdHMoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OworICAgIGJvb2wgY29u
dGFpbnMoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwogCiAgICAgLy8gVGhpcyBjaGVja3MgdG8g
c2VlIGlmIHRoZSByZWN0IGNvbnRhaW5zIHgseSBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuCiAg
ICAgLy8gRXF1aXZhbGVudCB0byBjaGVja2luZyBpZiB0aGUgcmVjdCBjb250YWlucyBhIDF4MSBy
ZWN0IGJlbG93IGFuZCB0byB0aGUgcmlnaHQgb2YgKHB4LHB5KS4KLSAgICBib29sIGNvbnRhaW5z
KEZyYWN0aW9uYWxMYXlvdXRVbml0IHB4LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBweSkgY29uc3QK
KyAgICBib29sIGNvbnRhaW5zKExheW91dFVuaXQgcHgsIExheW91dFVuaXQgcHkpIGNvbnN0CiAg
ICAgICAgIHsgcmV0dXJuIHB4ID49IHgoKSAmJiBweCA8IG1heFgoKSAmJiBweSA+PSB5KCkgJiYg
cHkgPCBtYXhZKCk7IH0KLSAgICBib29sIGNvbnRhaW5zKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgp
KTsgfQorICAgIGJvb2wgY29udGFpbnMoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KSBjb25zdCB7
IHJldHVybiBjb250YWlucyhwb2ludC54KCksIHBvaW50LnkoKSk7IH0KIAotICAgIHZvaWQgaW50
ZXJzZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0Jik7Ci0gICAgdm9pZCB1bml0ZShjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpOwotICAgIHZvaWQgdW5pdGVJZk5vblplcm8oY29uc3Qg
RnJhY3Rpb25hbExheW91dFJlY3QmKTsKKyAgICB2b2lkIGludGVyc2VjdChjb25zdCBMYXlvdXRS
ZWN0Jik7CisgICAgdm9pZCB1bml0ZShjb25zdCBMYXlvdXRSZWN0Jik7CisgICAgdm9pZCB1bml0
ZUlmTm9uWmVybyhjb25zdCBMYXlvdXRSZWN0Jik7CiAKLSAgICB2b2lkIGluZmxhdGVYKEZyYWN0
aW9uYWxMYXlvdXRVbml0IGR4KQorICAgIHZvaWQgaW5mbGF0ZVgoTGF5b3V0VW5pdCBkeCkKICAg
ICB7CiAgICAgICAgIG1fbG9jYXRpb24uc2V0WChtX2xvY2F0aW9uLngoKSAtIGR4KTsKICAgICAg
ICAgbV9zaXplLnNldFdpZHRoKG1fc2l6ZS53aWR0aCgpICsgZHggKyBkeCk7CiAgICAgfQotICAg
IHZvaWQgaW5mbGF0ZVkoRnJhY3Rpb25hbExheW91dFVuaXQgZHkpCisgICAgdm9pZCBpbmZsYXRl
WShMYXlvdXRVbml0IGR5KQogICAgIHsKICAgICAgICAgbV9sb2NhdGlvbi5zZXRZKG1fbG9jYXRp
b24ueSgpIC0gZHkpOwogICAgICAgICBtX3NpemUuc2V0SGVpZ2h0KG1fc2l6ZS5oZWlnaHQoKSAr
IGR5ICsgZHkpOwogICAgIH0KLSAgICB2b2lkIGluZmxhdGUoRnJhY3Rpb25hbExheW91dFVuaXQg
ZCkgeyBpbmZsYXRlWChkKTsgaW5mbGF0ZVkoZCk7IH0KKyAgICB2b2lkIGluZmxhdGUoTGF5b3V0
VW5pdCBkKSB7IGluZmxhdGVYKGQpOyBpbmZsYXRlWShkKTsgfQogICAgIHZvaWQgc2NhbGUoZmxv
YXQgcyk7CiAKLSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCB0cmFuc3Bvc2VkUmVjdCgpIGNvbnN0
IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRSZWN0KG1fbG9jYXRpb24udHJhbnNwb3NlZFBvaW50
KCksIG1fc2l6ZS50cmFuc3Bvc2VkU2l6ZSgpKTsgfQorICAgIExheW91dFJlY3QgdHJhbnNwb3Nl
ZFJlY3QoKSBjb25zdCB7IHJldHVybiBMYXlvdXRSZWN0KG1fbG9jYXRpb24udHJhbnNwb3NlZFBv
aW50KCksIG1fc2l6ZS50cmFuc3Bvc2VkU2l6ZSgpKTsgfQogCi0gICAgc3RhdGljIEZyYWN0aW9u
YWxMYXlvdXRSZWN0IGluZmluaXRlUmVjdCgpCisgICAgc3RhdGljIExheW91dFJlY3QgaW5maW5p
dGVSZWN0KCkKICAgICB7CiAgICAgICAgIC8vIFJldHVybiBhIHJlY3QgdGhhdCBpcyBzbGlnaHRs
eSBzbWFsbGVyIHRoYW4gdGhlIHRydWUgbWF4IHJlY3QgdG8gYWxsb3cgcGl4ZWxTbmFwcGluZyB0
byByb3VuZCB1cCB0byB0aGUgbmVhcmVzdCBJbnRSZWN0IHdpdGhvdXQgb3ZlcmZsb3dpbmcuCi0g
ICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UmVjdChGcmFjdGlvbmFsTGF5b3V0VW5pdDo6
bmVhcmx5TWluKCkgLyAyLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bmVhcmx5TWluKCkgLyAyLCBG
cmFjdGlvbmFsTGF5b3V0VW5pdDo6bmVhcmx5TWF4KCksIEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpu
ZWFybHlNYXgoKSk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KExheW91dFVuaXQ6Om5lYXJs
eU1pbigpIC8gMiwgTGF5b3V0VW5pdDo6bmVhcmx5TWluKCkgLyAyLCBMYXlvdXRVbml0OjpuZWFy
bHlNYXgoKSwgTGF5b3V0VW5pdDo6bmVhcmx5TWF4KCkpOwogICAgIH0KIAogI2lmIFBMQVRGT1JN
KFFUKQotICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IFFSZWN0Jik7Ci0g
ICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgUVJlY3RGJik7CisgICAgZXhw
bGljaXQgTGF5b3V0UmVjdChjb25zdCBRUmVjdCYpOworICAgIGV4cGxpY2l0IExheW91dFJlY3Qo
Y29uc3QgUVJlY3RGJik7CiAgICAgb3BlcmF0b3IgUVJlY3RGKCkgY29uc3Q7CiAjZW5kaWYKIAog
cHJpdmF0ZToKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbV9sb2NhdGlvbjsKLSAgICBGcmFj
dGlvbmFsTGF5b3V0U2l6ZSBtX3NpemU7CisgICAgTGF5b3V0UG9pbnQgbV9sb2NhdGlvbjsKKyAg
ICBMYXlvdXRTaXplIG1fc2l6ZTsKIH07CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UmVjdCBp
bnRlcnNlY3Rpb24oY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRSZWN0JiBiKQoraW5saW5lIExheW91dFJlY3QgaW50ZXJzZWN0aW9uKGNvbnN0IExh
eW91dFJlY3QmIGEsIGNvbnN0IExheW91dFJlY3QmIGIpCiB7Ci0gICAgRnJhY3Rpb25hbExheW91
dFJlY3QgYyA9IGE7CisgICAgTGF5b3V0UmVjdCBjID0gYTsKICAgICBjLmludGVyc2VjdChiKTsK
ICAgICByZXR1cm4gYzsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRSZWN0IHVuaW9uUmVj
dChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFJl
Y3QmIGIpCitpbmxpbmUgTGF5b3V0UmVjdCB1bmlvblJlY3QoY29uc3QgTGF5b3V0UmVjdCYgYSwg
Y29uc3QgTGF5b3V0UmVjdCYgYikKIHsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCBjID0gYTsK
KyAgICBMYXlvdXRSZWN0IGMgPSBhOwogICAgIGMudW5pdGUoYik7CiAgICAgcmV0dXJuIGM7CiB9
CiAKLUZyYWN0aW9uYWxMYXlvdXRSZWN0IHVuaW9uUmVjdChjb25zdCBWZWN0b3I8RnJhY3Rpb25h
bExheW91dFJlY3Q+Jik7CitMYXlvdXRSZWN0IHVuaW9uUmVjdChjb25zdCBWZWN0b3I8TGF5b3V0
UmVjdD4mKTsKIAotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0
UmVjdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGIpCitpbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IExheW91dFJlY3QmIGEsIGNvbnN0IExheW91dFJlY3QmIGIpCiB7CiAgICAg
cmV0dXJuIGEubG9jYXRpb24oKSA9PSBiLmxvY2F0aW9uKCkgJiYgYS5zaXplKCkgPT0gYi5zaXpl
KCk7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJhY3Rpb25hbExheW91dFJl
Y3QmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBiKQoraW5saW5lIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBMYXlvdXRSZWN0JiBhLCBjb25zdCBMYXlvdXRSZWN0JiBiKQogewogICAgIHJl
dHVybiBhLmxvY2F0aW9uKCkgIT0gYi5sb2NhdGlvbigpIHx8IGEuc2l6ZSgpICE9IGIuc2l6ZSgp
OwogfQogCi1pbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0KGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRSZWN0JiByZWN0KQoraW5saW5lIEludFJlY3QgcGl4ZWxTbmFwcGVkSW50UmVjdChj
b25zdCBMYXlvdXRSZWN0JiByZWN0KQogewogI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCiAg
ICAgcmV0dXJuIEludFJlY3Qocm91bmRlZEludFBvaW50KHJlY3QubG9jYXRpb24oKSksIEludFNp
emUoc25hcFNpemVUb1BpeGVsKHJlY3Qud2lkdGgoKSwgcmVjdC54KCkpLApAQCAtMjE5LDkgKzIx
OSwyNSBAQCBpbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0KGNvbnN0CiAjZW5kaWYK
IH0KIAotSW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0
Jik7Ci1GcmFjdGlvbmFsTGF5b3V0UmVjdCBlbmNsb3NpbmdGcmFjdGlvbmFsTGF5b3V0UmVjdChj
b25zdCBGbG9hdFJlY3QmKTsKK0ludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBMYXlvdXRS
ZWN0Jik7CitMYXlvdXRSZWN0IGVuY2xvc2luZ0xheW91dFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7
CisKK2lubGluZSBJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3QoTGF5b3V0VW5pdCBsZWZ0LCBM
YXlvdXRVbml0IHRvcCwgTGF5b3V0VW5pdCB3aWR0aCwgTGF5b3V0VW5pdCBoZWlnaHQpCit7Cisg
ICAgcmV0dXJuIEludFJlY3QobGVmdC5yb3VuZCgpLCB0b3Aucm91bmQoKSwgc25hcFNpemVUb1Bp
eGVsKHdpZHRoLCBsZWZ0KSwgc25hcFNpemVUb1BpeGVsKGhlaWdodCwgdG9wKSk7Cit9CisKK2lu
bGluZSBJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3RGcm9tRWRnZXMoTGF5b3V0VW5pdCBsZWZ0
LCBMYXlvdXRVbml0IHRvcCwgTGF5b3V0VW5pdCByaWdodCwgTGF5b3V0VW5pdCBib3R0b20pCit7
CisgICAgcmV0dXJuIEludFJlY3QobGVmdC5yb3VuZCgpLCB0b3Aucm91bmQoKSwgc25hcFNpemVU
b1BpeGVsKHJpZ2h0IC0gbGVmdCwgbGVmdCksIHNuYXBTaXplVG9QaXhlbChib3R0b20gLSB0b3As
IHRvcCkpOworfQorCitpbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0KExheW91dFBv
aW50IGxvY2F0aW9uLCBMYXlvdXRTaXplIHNpemUpCit7CisgICAgcmV0dXJuIEludFJlY3Qocm91
bmRlZEludFBvaW50KGxvY2F0aW9uKSwgcGl4ZWxTbmFwcGVkSW50U2l6ZShzaXplLCBsb2NhdGlv
bikpOworfQorCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEZyYWN0aW9u
YWxMYXlvdXRSZWN0X2gKKyNlbmRpZiAvLyBMYXlvdXRSZWN0X2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFNpemUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRTaXplLmgJKHJldmlzaW9uIDEzMzUxNykJ
KGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFNp
emUuaDoxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRT
aXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGcmFjdGlvbmFs
TGF5b3V0U2l6ZV9oCisjZGVmaW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplX2gKKworI2luY2x1ZGUg
IkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRVbml0LmgiCisjaW5jbHVk
ZSAiSW50U2l6ZS5oIgorCisjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8cWdsb2JhbC5oPgor
UVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRU2l6ZTsKK2NsYXNzIFFTaXplRjsKK1FUX0VORF9O
QU1FU1BBQ0UKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZyYWN0aW9u
YWxMYXlvdXRQb2ludDsKKworY2xhc3MgRnJhY3Rpb25hbExheW91dFNpemUgeworcHVibGljOgor
ICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplKCkgOiBtX3dpZHRoKDApLCBtX2hlaWdodCgwKSB7IH0K
KyAgICBGcmFjdGlvbmFsTGF5b3V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKSA6IG1fd2lkdGgo
c2l6ZS53aWR0aCgpKSwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkgeyB9CisgICAgRnJhY3Rpb25h
bExheW91dFNpemUoRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgsIEZyYWN0aW9uYWxMYXlvdXRV
bml0IGhlaWdodCkgOiBtX3dpZHRoKHdpZHRoKSwgbV9oZWlnaHQoaGVpZ2h0KSB7IH0KKworICAg
IGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgOiBt
X3dpZHRoKHNpemUud2lkdGgoKSksIG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkpIHsgfQorICAgIAor
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsg
fQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVp
Z2h0OyB9CisKKyAgICB2b2lkIHNldFdpZHRoKEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKSB7
IG1fd2lkdGggPSB3aWR0aDsgfQorICAgIHZvaWQgc2V0SGVpZ2h0KEZyYWN0aW9uYWxMYXlvdXRV
bml0IGhlaWdodCkgeyBtX2hlaWdodCA9IGhlaWdodDsgfQorCisgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gbV93aWR0aCA8PSAwIHx8IG1faGVpZ2h0IDw9IDA7IH0KKyAgICBib29s
IGlzWmVybygpIGNvbnN0IHsgcmV0dXJuICFtX3dpZHRoICYmICFtX2hlaWdodDsgfQorCisgICAg
ZmxvYXQgYXNwZWN0UmF0aW8oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obV93
aWR0aCkgLyBzdGF0aWNfY2FzdDxmbG9hdD4obV9oZWlnaHQpOyB9CisgICAgCisgICAgdm9pZCBl
eHBhbmQoRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGhl
aWdodCkKKyAgICB7CisgICAgICAgIG1fd2lkdGggKz0gd2lkdGg7CisgICAgICAgIG1faGVpZ2h0
ICs9IGhlaWdodDsKKyAgICB9CisgICAgCisgICAgdm9pZCBzY2FsZShmbG9hdCBzY2FsZSkKKyAg
ICB7CisgICAgICAgIG1fd2lkdGggKj0gc2NhbGU7CisgICAgICAgIG1faGVpZ2h0ICo9IHNjYWxl
OworICAgIH0KKworICAgIHZvaWQgc2NhbGUoZmxvYXQgd2lkdGhTY2FsZSwgZmxvYXQgaGVpZ2h0
U2NhbGUpCisgICAgeworICAgICAgICBtX3dpZHRoICo9IHdpZHRoU2NhbGU7CisgICAgICAgIG1f
aGVpZ2h0ICo9IGhlaWdodFNjYWxlOworICAgIH0KKyAgICAKKyAgICBGcmFjdGlvbmFsTGF5b3V0
U2l6ZSBleHBhbmRlZFRvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShtX3dpZHRoID4gb3Ro
ZXIubV93aWR0aCA/IG1fd2lkdGggOiBvdGhlci5tX3dpZHRoLAorICAgICAgICAgICAgbV9oZWln
aHQgPiBvdGhlci5tX2hlaWdodCA/IG1faGVpZ2h0IDogb3RoZXIubV9oZWlnaHQpOworICAgIH0K
KworICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplIHNocnVua1RvKGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRTaXplJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5
b3V0U2l6ZShtX3dpZHRoIDwgb3RoZXIubV93aWR0aCA/IG1fd2lkdGggOiBvdGhlci5tX3dpZHRo
LAorICAgICAgICAgICAgbV9oZWlnaHQgPCBvdGhlci5tX2hlaWdodCA/IG1faGVpZ2h0IDogb3Ro
ZXIubV9oZWlnaHQpOworICAgIH0KKworICAgIHZvaWQgY2xhbXBOZWdhdGl2ZVRvWmVybygpCisg
ICAgeworICAgICAgICAqdGhpcyA9IGV4cGFuZGVkVG8oRnJhY3Rpb25hbExheW91dFNpemUoKSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgY2xhbXBUb01pbmltdW1TaXplKGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRTaXplJiBtaW5pbXVtU2l6ZSkKKyAgICB7CisgICAgICAgIGlmIChtX3dpZHRoIDwg
bWluaW11bVNpemUud2lkdGgoKSkKKyAgICAgICAgICAgIG1fd2lkdGggPSBtaW5pbXVtU2l6ZS53
aWR0aCgpOworICAgICAgICBpZiAobV9oZWlnaHQgPCBtaW5pbXVtU2l6ZS5oZWlnaHQoKSkKKyAg
ICAgICAgICAgIG1faGVpZ2h0ID0gbWluaW11bVNpemUuaGVpZ2h0KCk7CisgICAgfQorCisgICAg
RnJhY3Rpb25hbExheW91dFNpemUgdHJhbnNwb3NlZFNpemUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKG1faGVpZ2h0LCBtX3dpZHRoKTsKKyAgICB9
CisKKyNpZiBQTEFURk9STShRVCkKKyAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZShj
b25zdCBRU2l6ZSYpOworICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0IFFT
aXplRiYpOworICAgIG9wZXJhdG9yIFFTaXplRigpIGNvbnN0OworI2VuZGlmCisKK3ByaXZhdGU6
CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbV93aWR0aCwgbV9oZWlnaHQ7Cit9OworCitpbmxp
bmUgRnJhY3Rpb25hbExheW91dFNpemUmIG9wZXJhdG9yKz0oRnJhY3Rpb25hbExheW91dFNpemUm
IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQoreworICAgIGEuc2V0V2lkdGgoYS53
aWR0aCgpICsgYi53aWR0aCgpKTsKKyAgICBhLnNldEhlaWdodChhLmhlaWdodCgpICsgYi5oZWln
aHQoKSk7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYg
b3BlcmF0b3ItPShGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91
dFNpemUmIGIpCit7CisgICAgYS5zZXRXaWR0aChhLndpZHRoKCkgLSBiLndpZHRoKCkpOworICAg
IGEuc2V0SGVpZ2h0KGEuaGVpZ2h0KCkgLSBiLmhlaWdodCgpKTsKKyAgICByZXR1cm4gYTsKK30K
KworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplIG9wZXJhdG9yKyhjb25zdCBGcmFjdGlvbmFs
TGF5b3V0U2l6ZSYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCit7CisgICAgcmV0
dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKGEud2lkdGgoKSArIGIud2lkdGgoKSwgYS5oZWlnaHQo
KSArIGIuaGVpZ2h0KCkpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFNpemUgb3BlcmF0
b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0
U2l6ZSYgYikKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUoYS53aWR0aCgpIC0g
Yi53aWR0aCgpLCBhLmhlaWdodCgpIC0gYi5oZWlnaHQoKSk7Cit9CisKK2lubGluZSBGcmFjdGlv
bmFsTGF5b3V0U2l6ZSBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUp
Cit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKC1zaXplLndpZHRoKCksIC1zaXpl
LmhlaWdodCgpKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFs
TGF5b3V0U2l6ZSYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCit7CisgICAgcmV0
dXJuIGEud2lkdGgoKSA9PSBiLndpZHRoKCkgJiYgYS5oZWlnaHQoKSA9PSBiLmhlaWdodCgpOwor
fQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK3sKKyAgICByZXR1cm4gYS53aWR0aCgp
ICE9IGIud2lkdGgoKSB8fCBhLmhlaWdodCgpICE9IGIuaGVpZ2h0KCk7Cit9CisKK2lubGluZSBJ
bnRTaXplIGZsb29yZWRJbnRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzKQorewor
ICAgIHJldHVybiBJbnRTaXplKHMud2lkdGgoKS5mbG9vcigpLCBzLmhlaWdodCgpLmZsb29yKCkp
OworfQorCitpbmxpbmUgSW50U2l6ZSByb3VuZGVkSW50U2l6ZShjb25zdCBGcmFjdGlvbmFsTGF5
b3V0U2l6ZSYgcykKK3sKKyAgICByZXR1cm4gSW50U2l6ZShzLndpZHRoKCkucm91bmQoKSwgcy5o
ZWlnaHQoKS5yb3VuZCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRnJhY3Rpb25hbExheW91dFNpemVfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTGF5b3V0U2l6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0xheW91dFNpemUuaAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0U2l6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCwxMiArMjgsMTIgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBGcmFjdGlvbmFs
TGF5b3V0U2l6ZV9oCi0jZGVmaW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplX2gKKyNpZm5kZWYgTGF5
b3V0U2l6ZV9oCisjZGVmaW5lIExheW91dFNpemVfaAogCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgi
Ci0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFVuaXQuaCIKICNpbmNsdWRlICJJbnRTaXplLmgi
CisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgogCiAjaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSA8
cWdsb2JhbC5oPgpAQCAtNDUsMjggKzQ1LDI4IEBAIFFUX0VORF9OQU1FU1BBQ0UKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0UG9pbnQ7CitjbGFzcyBMYXlv
dXRQb2ludDsKIAotY2xhc3MgRnJhY3Rpb25hbExheW91dFNpemUgeworY2xhc3MgTGF5b3V0U2l6
ZSB7CiBwdWJsaWM6Ci0gICAgRnJhY3Rpb25hbExheW91dFNpemUoKSA6IG1fd2lkdGgoMCksIG1f
aGVpZ2h0KDApIHsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0IEludFNpemUmIHNp
emUpIDogbV93aWR0aChzaXplLndpZHRoKCkpLCBtX2hlaWdodChzaXplLmhlaWdodCgpKSB7IH0K
LSAgICBGcmFjdGlvbmFsTGF5b3V0U2l6ZShGcmFjdGlvbmFsTGF5b3V0VW5pdCB3aWR0aCwgRnJh
Y3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KSA6IG1fd2lkdGgod2lkdGgpLCBtX2hlaWdodChoZWln
aHQpIHsgfQorICAgIExheW91dFNpemUoKSA6IG1fd2lkdGgoMCksIG1faGVpZ2h0KDApIHsgfQor
ICAgIExheW91dFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgOiBtX3dpZHRoKHNpemUud2lkdGgo
KSksIG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkpIHsgfQorICAgIExheW91dFNpemUoTGF5b3V0VW5p
dCB3aWR0aCwgTGF5b3V0VW5pdCBoZWlnaHQpIDogbV93aWR0aCh3aWR0aCksIG1faGVpZ2h0KGhl
aWdodCkgeyB9CiAKLSAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZShjb25zdCBGbG9h
dFNpemUmIHNpemUpIDogbV93aWR0aChzaXplLndpZHRoKCkpLCBtX2hlaWdodChzaXplLmhlaWdo
dCgpKSB7IH0KKyAgICBleHBsaWNpdCBMYXlvdXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkg
OiBtX3dpZHRoKHNpemUud2lkdGgoKSksIG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkpIHsgfQogICAg
IAotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0
aDsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1f
aGVpZ2h0OyB9CisgICAgTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7
IH0KKyAgICBMYXlvdXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9CiAK
LSAgICB2b2lkIHNldFdpZHRoKEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKSB7IG1fd2lkdGgg
PSB3aWR0aDsgfQotICAgIHZvaWQgc2V0SGVpZ2h0KEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdo
dCkgeyBtX2hlaWdodCA9IGhlaWdodDsgfQorICAgIHZvaWQgc2V0V2lkdGgoTGF5b3V0VW5pdCB3
aWR0aCkgeyBtX3dpZHRoID0gd2lkdGg7IH0KKyAgICB2b2lkIHNldEhlaWdodChMYXlvdXRVbml0
IGhlaWdodCkgeyBtX2hlaWdodCA9IGhlaWdodDsgfQogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QgeyByZXR1cm4gbV93aWR0aCA8PSAwIHx8IG1faGVpZ2h0IDw9IDA7IH0KICAgICBib29sIGlz
WmVybygpIGNvbnN0IHsgcmV0dXJuICFtX3dpZHRoICYmICFtX2hlaWdodDsgfQogCiAgICAgZmxv
YXQgYXNwZWN0UmF0aW8oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obV93aWR0
aCkgLyBzdGF0aWNfY2FzdDxmbG9hdD4obV9oZWlnaHQpOyB9CiAgICAgCi0gICAgdm9pZCBleHBh
bmQoRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdo
dCkKKyAgICB2b2lkIGV4cGFuZChMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IGhlaWdodCkK
ICAgICB7CiAgICAgICAgIG1fd2lkdGggKz0gd2lkdGg7CiAgICAgICAgIG1faGVpZ2h0ICs9IGhl
aWdodDsKQEAgLTg0LDI0ICs4NCwyNCBAQCBwdWJsaWM6CiAgICAgICAgIG1faGVpZ2h0ICo9IGhl
aWdodFNjYWxlOwogICAgIH0KICAgICAKLSAgICBGcmFjdGlvbmFsTGF5b3V0U2l6ZSBleHBhbmRl
ZFRvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBvdGhlcikgY29uc3QKKyAgICBMYXlvdXRT
aXplIGV4cGFuZGVkVG8oY29uc3QgTGF5b3V0U2l6ZSYgb3RoZXIpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUobV93aWR0aCA+IG90aGVyLm1fd2lkdGgg
PyBtX3dpZHRoIDogb3RoZXIubV93aWR0aCwKKyAgICAgICAgcmV0dXJuIExheW91dFNpemUobV93
aWR0aCA+IG90aGVyLm1fd2lkdGggPyBtX3dpZHRoIDogb3RoZXIubV93aWR0aCwKICAgICAgICAg
ICAgIG1faGVpZ2h0ID4gb3RoZXIubV9oZWlnaHQgPyBtX2hlaWdodCA6IG90aGVyLm1faGVpZ2h0
KTsKICAgICB9CiAKLSAgICBGcmFjdGlvbmFsTGF5b3V0U2l6ZSBzaHJ1bmtUbyhjb25zdCBGcmFj
dGlvbmFsTGF5b3V0U2l6ZSYgb3RoZXIpIGNvbnN0CisgICAgTGF5b3V0U2l6ZSBzaHJ1bmtUbyhj
b25zdCBMYXlvdXRTaXplJiBvdGhlcikgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBGcmFj
dGlvbmFsTGF5b3V0U2l6ZShtX3dpZHRoIDwgb3RoZXIubV93aWR0aCA/IG1fd2lkdGggOiBvdGhl
ci5tX3dpZHRoLAorICAgICAgICByZXR1cm4gTGF5b3V0U2l6ZShtX3dpZHRoIDwgb3RoZXIubV93
aWR0aCA/IG1fd2lkdGggOiBvdGhlci5tX3dpZHRoLAogICAgICAgICAgICAgbV9oZWlnaHQgPCBv
dGhlci5tX2hlaWdodCA/IG1faGVpZ2h0IDogb3RoZXIubV9oZWlnaHQpOwogICAgIH0KIAogICAg
IHZvaWQgY2xhbXBOZWdhdGl2ZVRvWmVybygpCiAgICAgewotICAgICAgICAqdGhpcyA9IGV4cGFu
ZGVkVG8oRnJhY3Rpb25hbExheW91dFNpemUoKSk7CisgICAgICAgICp0aGlzID0gZXhwYW5kZWRU
byhMYXlvdXRTaXplKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNsYW1wVG9NaW5pbXVtU2l6
ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgbWluaW11bVNpemUpCisgICAgdm9pZCBjbGFt
cFRvTWluaW11bVNpemUoY29uc3QgTGF5b3V0U2l6ZSYgbWluaW11bVNpemUpCiAgICAgewogICAg
ICAgICBpZiAobV93aWR0aCA8IG1pbmltdW1TaXplLndpZHRoKCkpCiAgICAgICAgICAgICBtX3dp
ZHRoID0gbWluaW11bVNpemUud2lkdGgoKTsKQEAgLTEwOSw3MCArMTA5LDc5IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIG1faGVpZ2h0ID0gbWluaW11bVNpemUuaGVpZ2h0KCk7CiAgICAgfQogCi0g
ICAgRnJhY3Rpb25hbExheW91dFNpemUgdHJhbnNwb3NlZFNpemUoKSBjb25zdAorICAgIExheW91
dFNpemUgdHJhbnNwb3NlZFNpemUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIEZyYWN0
aW9uYWxMYXlvdXRTaXplKG1faGVpZ2h0LCBtX3dpZHRoKTsKKyAgICAgICAgcmV0dXJuIExheW91
dFNpemUobV9oZWlnaHQsIG1fd2lkdGgpOwogICAgIH0KIAogI2lmIFBMQVRGT1JNKFFUKQotICAg
IGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0IFFTaXplJik7Ci0gICAgZXhwbGlj
aXQgRnJhY3Rpb25hbExheW91dFNpemUoY29uc3QgUVNpemVGJik7CisgICAgZXhwbGljaXQgTGF5
b3V0U2l6ZShjb25zdCBRU2l6ZSYpOworICAgIGV4cGxpY2l0IExheW91dFNpemUoY29uc3QgUVNp
emVGJik7CiAgICAgb3BlcmF0b3IgUVNpemVGKCkgY29uc3Q7CiAjZW5kaWYKIAogcHJpdmF0ZToK
LSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtX3dpZHRoLCBtX2hlaWdodDsKKyAgICBMYXlvdXRV
bml0IG1fd2lkdGgsIG1faGVpZ2h0OwogfTsKIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXpl
JiBvcGVyYXRvcis9KEZyYWN0aW9uYWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0U2l6ZSYgYikKK2lubGluZSBMYXlvdXRTaXplJiBvcGVyYXRvcis9KExheW91dFNpemUmIGEs
IGNvbnN0IExheW91dFNpemUmIGIpCiB7CiAgICAgYS5zZXRXaWR0aChhLndpZHRoKCkgKyBiLndp
ZHRoKCkpOwogICAgIGEuc2V0SGVpZ2h0KGEuaGVpZ2h0KCkgKyBiLmhlaWdodCgpKTsKICAgICBy
ZXR1cm4gYTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplJiBvcGVyYXRvci09KEZy
YWN0aW9uYWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK2lu
bGluZSBMYXlvdXRTaXplJiBvcGVyYXRvci09KExheW91dFNpemUmIGEsIGNvbnN0IExheW91dFNp
emUmIGIpCiB7CiAgICAgYS5zZXRXaWR0aChhLndpZHRoKCkgLSBiLndpZHRoKCkpOwogICAgIGEu
c2V0SGVpZ2h0KGEuaGVpZ2h0KCkgLSBiLmhlaWdodCgpKTsKICAgICByZXR1cm4gYTsKIH0KIAot
aW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplIG9wZXJhdG9yKyhjb25zdCBGcmFjdGlvbmFsTGF5
b3V0U2l6ZSYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCitpbmxpbmUgTGF5b3V0
U2l6ZSBvcGVyYXRvcisoY29uc3QgTGF5b3V0U2l6ZSYgYSwgY29uc3QgTGF5b3V0U2l6ZSYgYikK
IHsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUoYS53aWR0aCgpICsgYi53aWR0aCgp
LCBhLmhlaWdodCgpICsgYi5oZWlnaHQoKSk7CisgICAgcmV0dXJuIExheW91dFNpemUoYS53aWR0
aCgpICsgYi53aWR0aCgpLCBhLmhlaWdodCgpICsgYi5oZWlnaHQoKSk7CiB9CiAKLWlubGluZSBG
cmFjdGlvbmFsTGF5b3V0U2l6ZSBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUm
IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQoraW5saW5lIExheW91dFNpemUgb3Bl
cmF0b3ItKGNvbnN0IExheW91dFNpemUmIGEsIGNvbnN0IExheW91dFNpemUmIGIpCiB7Ci0gICAg
cmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKGEud2lkdGgoKSAtIGIud2lkdGgoKSwgYS5oZWln
aHQoKSAtIGIuaGVpZ2h0KCkpOworICAgIHJldHVybiBMYXlvdXRTaXplKGEud2lkdGgoKSAtIGIu
d2lkdGgoKSwgYS5oZWlnaHQoKSAtIGIuaGVpZ2h0KCkpOwogfQogCi1pbmxpbmUgRnJhY3Rpb25h
bExheW91dFNpemUgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKQor
aW5saW5lIExheW91dFNpemUgb3BlcmF0b3ItKGNvbnN0IExheW91dFNpemUmIHNpemUpCiB7Ci0g
ICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKC1zaXplLndpZHRoKCksIC1zaXplLmhlaWdo
dCgpKTsKKyAgICByZXR1cm4gTGF5b3V0U2l6ZSgtc2l6ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQo
KSk7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJhY3Rpb25hbExheW91dFNp
emUmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQoraW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBMYXlvdXRTaXplJiBhLCBjb25zdCBMYXlvdXRTaXplJiBiKQogewogICAgIHJl
dHVybiBhLndpZHRoKCkgPT0gYi53aWR0aCgpICYmIGEuaGVpZ2h0KCkgPT0gYi5oZWlnaHQoKTsK
IH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYg
YSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IExheW91dFNpemUmIGEsIGNvbnN0IExheW91dFNpemUmIGIpCiB7CiAgICAgcmV0dXJu
IGEud2lkdGgoKSAhPSBiLndpZHRoKCkgfHwgYS5oZWlnaHQoKSAhPSBiLmhlaWdodCgpOwogfQog
Ci1pbmxpbmUgSW50U2l6ZSBmbG9vcmVkSW50U2l6ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6
ZSYgcykKK2lubGluZSBJbnRTaXplIGZsb29yZWRJbnRTaXplKGNvbnN0IExheW91dFNpemUmIHMp
CiB7CiAgICAgcmV0dXJuIEludFNpemUocy53aWR0aCgpLmZsb29yKCksIHMuaGVpZ2h0KCkuZmxv
b3IoKSk7CiB9CiAKLWlubGluZSBJbnRTaXplIHJvdW5kZWRJbnRTaXplKGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRTaXplJiBzKQoraW5saW5lIEludFNpemUgcm91bmRlZEludFNpemUoY29uc3QgTGF5
b3V0U2l6ZSYgcykKIHsKICAgICByZXR1cm4gSW50U2l6ZShzLndpZHRoKCkucm91bmQoKSwgcy5o
ZWlnaHQoKS5yb3VuZCgpKTsKIH0KIAoraW5saW5lIExheW91dFNpemUgcm91bmRlZExheW91dFNp
emUoY29uc3QgRmxvYXRTaXplJiBzKQoreworI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisg
ICAgcmV0dXJuIExheW91dFNpemUocyk7CisjZWxzZQorICAgIHJldHVybiByb3VuZGVkSW50U2l6
ZShzKTsKKyNlbmRpZgorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBG
cmFjdGlvbmFsTGF5b3V0U2l6ZV9oCisjZW5kaWYgLy8gTGF5b3V0U2l6ZV9oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgJKHJldmlzaW9u
IDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkludFJlY3Qu
aCIKICNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXNJbmxpbmVNZXRob2Rz
LmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJPcGVyYXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0N1c3RvbUZpbHRlck9wZXJhdGlvbi5oCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlck9wZXJhdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUGFy
YW1ldGVyTGlzdC5oIgogI2luY2x1ZGUgIkN1c3RvbUZpbHRlclByb2dyYW0uaCIKICNpbmNsdWRl
ICJGaWx0ZXJPcGVyYXRpb24uaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUg
IkxheW91dFNpemUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclBhcmFtZXRlckxpc3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0N1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QuaAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQYXJhbWV0ZXJM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNkZWZpbmUgQ3VzdG9tRmls
dGVyUGFyYW1ldGVyTGlzdF9oCiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0jaW5jbHVkZSAi
TGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmgJ
KHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyT3BlcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAK
ICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUg
IkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgogI2luY2x1ZGUgIkxlbmd0
aC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJP
cGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQog
CiAjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIK
ICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1ZhbGlkYXRlZEN1c3Rv
bUZpbHRlck9wZXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9WYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwCShy
ZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1ZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDcgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkN1c3RvbUZpbHRlclBhcmFtZXRlci5oIgogI2lu
Y2x1ZGUgIkN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0uaCIKLSNpbmNsdWRlICJGcmFjdGlv
bmFsTGF5b3V0U2l6ZS5oIgorI2luY2x1ZGUgIkxheW91dFNpemUuaCIKICNpbmNsdWRlIDx3dGYv
VW51c2VkUGFyYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9WYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1ZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5oCShyZXZpc2lvbiAxMzM1MTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1ZhbGlkYXRlZEN1c3Rv
bUZpbHRlck9wZXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAjaW5j
bHVkZSAiQ3VzdG9tRmlsdGVyQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUGFy
YW1ldGVyTGlzdC5oIgogI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIkxh
eW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9u
YWxMYXlvdXRQb2ludFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9GcmFjdGlvbmFsTGF5b3V0UG9pbnRRdC5jcHAJKHJldmlzaW9uIDEzMzUx
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxMYXlv
dXRQb2ludFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0NSArMCwwIEBACi0vKgotICAgIENv
cHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91
dFBvaW50LmgiCi0KLSNpbmNsdWRlIDxRUG9pbnQ+Ci0jaW5jbHVkZSA8UVBvaW50Rj4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1GcmFjdGlvbmFsTGF5b3V0UG9pbnQ6OkZyYWN0aW9uYWxMYXlv
dXRQb2ludChjb25zdCBRUG9pbnQmIHBvaW50KQotICAgIDogbV94KHBvaW50LngoKSkKLSAgICAs
IG1feShwb2ludC55KCkpCi17Ci19Ci0KLUZyYWN0aW9uYWxMYXlvdXRQb2ludDo6RnJhY3Rpb25h
bExheW91dFBvaW50KGNvbnN0IFFQb2ludEYmIHBvaW50KQotICAgIDogbV94KHBvaW50LngoKSkK
LSAgICAsIG1feShwb2ludC55KCkpCi17Ci19Ci0KLUZyYWN0aW9uYWxMYXlvdXRQb2ludDo6b3Bl
cmF0b3IgUVBvaW50RigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFFQb2ludEYobV94LCBtX3kpOwot
fQotCi19IC8vIG5hbWVzcGFjZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvRnJhY3Rpb25hbExheW91dFJlY3RRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFJlY3RRdC5jcHAJKHJl
dmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0Zy
YWN0aW9uYWxMYXlvdXRSZWN0UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ1ICswLDAgQEAK
LS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGcmFj
dGlvbmFsTGF5b3V0UmVjdC5oIgotCi0jaW5jbHVkZSA8UVJlY3Q+Ci0jaW5jbHVkZSA8UVJlY3RG
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZyYWN0aW9uYWxMYXlvdXRSZWN0OjpGcmFjdGlv
bmFsTGF5b3V0UmVjdChjb25zdCBRUmVjdCYgcikKLSAgICA6IG1fbG9jYXRpb24oci50b3BMZWZ0
KCkpCi0gICAgLCBtX3NpemUoci53aWR0aCgpLCByLmhlaWdodCgpKQotewotfQotCi1GcmFjdGlv
bmFsTGF5b3V0UmVjdDo6RnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgUVJlY3RGJiByKQotICAg
IDogbV9sb2NhdGlvbihyLnRvcExlZnQoKSkKLSAgICAsIG1fc2l6ZShyLndpZHRoKCksIHIuaGVp
Z2h0KCkpCi17Ci19Ci0KLUZyYWN0aW9uYWxMYXlvdXRSZWN0OjpvcGVyYXRvciBRUmVjdEYoKSBj
b25zdAotewotICAgIHJldHVybiBRUmVjdEYoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0ZyYWN0aW9uYWxMYXlvdXRTaXplUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxMYXlvdXRTaXplUXQuY3BwCShy
ZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9G
cmFjdGlvbmFsTGF5b3V0U2l6ZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0NiArMCwwIEBA
Ci0vKgotICAgIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJG
cmFjdGlvbmFsTGF5b3V0U2l6ZS5oIgotCi0jaW5jbHVkZSA8UVNpemU+Ci0jaW5jbHVkZSA8UVNp
emVGPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZyYWN0aW9uYWxMYXlvdXRTaXplOjpGcmFj
dGlvbmFsTGF5b3V0U2l6ZShjb25zdCBRU2l6ZSYgc2l6ZSkKLSAgICA6IG1fd2lkdGgoc2l6ZS53
aWR0aCgpKQotICAgICwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkKLXsKLX0KLQotRnJhY3Rpb25h
bExheW91dFNpemU6OkZyYWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0IFFTaXplRiYgc2l6ZSkKLSAg
ICA6IG1fd2lkdGgoc2l6ZS53aWR0aCgpKQotICAgICwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkK
LXsKLX0KLQotRnJhY3Rpb25hbExheW91dFNpemU6Om9wZXJhdG9yIFFTaXplRigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIFFTaXplRih3aWR0aCgpLCBoZWlnaHQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9MYXlvdXRQb2lu
dFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9MYXlvdXRQb2ludFF0LmNwcAkocmV2aXNpb24gMTMzNTE3KQkoZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9GcmFjdGlvbmFsTGF5b3V0UG9pbnRRdC5jcHA6MTMzNTE3
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTGF5b3V0UG9pbnRRdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMp
IDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRQb2ludC5oIgor
CisjaW5jbHVkZSA8UVBvaW50PgorI2luY2x1ZGUgPFFQb2ludEY+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworRnJhY3Rpb25hbExheW91dFBvaW50OjpGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29u
c3QgUVBvaW50JiBwb2ludCkKKyAgICA6IG1feChwb2ludC54KCkpCisgICAgLCBtX3kocG9pbnQu
eSgpKQoreworfQorCitGcmFjdGlvbmFsTGF5b3V0UG9pbnQ6OkZyYWN0aW9uYWxMYXlvdXRQb2lu
dChjb25zdCBRUG9pbnRGJiBwb2ludCkKKyAgICA6IG1feChwb2ludC54KCkpCisgICAgLCBtX3ko
cG9pbnQueSgpKQoreworfQorCitGcmFjdGlvbmFsTGF5b3V0UG9pbnQ6Om9wZXJhdG9yIFFQb2lu
dEYoKSBjb25zdAoreworICAgIHJldHVybiBRUG9pbnRGKG1feCwgbV95KTsKK30KKworfSAvLyBu
YW1lc3BhY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0xheW91
dFBvaW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0xheW91dFBvaW50UXQuY3BwCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9MYXlvdXRQb2ludFF0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTgsMjYgKzE4LDI2IEBACiAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRnJhY3Rpb25hbExheW91dFBvaW50LmgiCisjaW5jbHVkZSAiTGF5b3V0UG9pbnQuaCIKIAog
I2luY2x1ZGUgPFFQb2ludD4KICNpbmNsdWRlIDxRUG9pbnRGPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUZyYWN0aW9uYWxMYXlvdXRQb2ludDo6RnJhY3Rpb25hbExheW91dFBvaW50KGNvbnN0
IFFQb2ludCYgcG9pbnQpCitMYXlvdXRQb2ludDo6TGF5b3V0UG9pbnQoY29uc3QgUVBvaW50JiBw
b2ludCkKICAgICA6IG1feChwb2ludC54KCkpCiAgICAgLCBtX3kocG9pbnQueSgpKQogewogfQog
Ci1GcmFjdGlvbmFsTGF5b3V0UG9pbnQ6OkZyYWN0aW9uYWxMYXlvdXRQb2ludChjb25zdCBRUG9p
bnRGJiBwb2ludCkKK0xheW91dFBvaW50OjpMYXlvdXRQb2ludChjb25zdCBRUG9pbnRGJiBwb2lu
dCkKICAgICA6IG1feChwb2ludC54KCkpCiAgICAgLCBtX3kocG9pbnQueSgpKQogewogfQogCi1G
cmFjdGlvbmFsTGF5b3V0UG9pbnQ6Om9wZXJhdG9yIFFQb2ludEYoKSBjb25zdAorTGF5b3V0UG9p
bnQ6Om9wZXJhdG9yIFFQb2ludEYoKSBjb25zdAogewogICAgIHJldHVybiBRUG9pbnRGKG1feCwg
bV95KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0xheW91
dFJlY3RRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvTGF5b3V0UmVjdFF0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0xheW91dFJlY3RRdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDUgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJMYXlvdXRSZWN0LmgiCisKKyNpbmNsdWRlIDxRUmVjdD4KKyNpbmNsdWRlIDxRUmVjdEY+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTGF5b3V0UmVjdDo6TGF5b3V0UmVjdChjb25zdCBR
UmVjdCYgcikKKyAgICA6IG1fbG9jYXRpb24oci50b3BMZWZ0KCkpCisgICAgLCBtX3NpemUoci53
aWR0aCgpLCByLmhlaWdodCgpKQoreworfQorCitMYXlvdXRSZWN0OjpMYXlvdXRSZWN0KGNvbnN0
IFFSZWN0RiYgcikKKyAgICA6IG1fbG9jYXRpb24oci50b3BMZWZ0KCkpCisgICAgLCBtX3NpemUo
ci53aWR0aCgpLCByLmhlaWdodCgpKQoreworfQorCitMYXlvdXRSZWN0OjpvcGVyYXRvciBRUmVj
dEYoKSBjb25zdAoreworICAgIHJldHVybiBRUmVjdEYoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdo
dCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0xheW91dFNpemVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTGF5b3V0U2l6ZVF0LmNwcAkocmV2aXNpb24gMTMzNTE3
KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9GcmFjdGlvbmFsTGF5
b3V0U2l6ZVF0LmNwcDoxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9MYXlvdXRTaXplUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8q
CisgICAgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkZyYWN0
aW9uYWxMYXlvdXRTaXplLmgiCisKKyNpbmNsdWRlIDxRU2l6ZT4KKyNpbmNsdWRlIDxRU2l6ZUY+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRnJhY3Rpb25hbExheW91dFNpemU6OkZyYWN0aW9u
YWxMYXlvdXRTaXplKGNvbnN0IFFTaXplJiBzaXplKQorICAgIDogbV93aWR0aChzaXplLndpZHRo
KCkpCisgICAgLCBtX2hlaWdodChzaXplLmhlaWdodCgpKQoreworfQorCitGcmFjdGlvbmFsTGF5
b3V0U2l6ZTo6RnJhY3Rpb25hbExheW91dFNpemUoY29uc3QgUVNpemVGJiBzaXplKQorICAgIDog
bV93aWR0aChzaXplLndpZHRoKCkpCisgICAgLCBtX2hlaWdodChzaXplLmhlaWdodCgpKQorewor
fQorCitGcmFjdGlvbmFsTGF5b3V0U2l6ZTo6b3BlcmF0b3IgUVNpemVGKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gUVNpemVGKHdpZHRoKCksIGhlaWdodCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0xheW91dFNpemVRdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTGF5
b3V0U2l6ZVF0LmNwcAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvTGF5b3V0U2l6ZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTksMjYg
KzE5LDI2IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2luY2x1ZGUgIkZyYWN0aW9uYWxM
YXlvdXRTaXplLmgiCisjaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgogCiAjaW5jbHVkZSA8UVNpemU+
CiAjaW5jbHVkZSA8UVNpemVGPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZyYWN0aW9uYWxM
YXlvdXRTaXplOjpGcmFjdGlvbmFsTGF5b3V0U2l6ZShjb25zdCBRU2l6ZSYgc2l6ZSkKK0xheW91
dFNpemU6OkxheW91dFNpemUoY29uc3QgUVNpemUmIHNpemUpCiAgICAgOiBtX3dpZHRoKHNpemUu
d2lkdGgoKSkKICAgICAsIG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkpCiB7CiB9CiAKLUZyYWN0aW9u
YWxMYXlvdXRTaXplOjpGcmFjdGlvbmFsTGF5b3V0U2l6ZShjb25zdCBRU2l6ZUYmIHNpemUpCitM
YXlvdXRTaXplOjpMYXlvdXRTaXplKGNvbnN0IFFTaXplRiYgc2l6ZSkKICAgICA6IG1fd2lkdGgo
c2l6ZS53aWR0aCgpKQogICAgICwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkKIHsKIH0KIAotRnJh
Y3Rpb25hbExheW91dFNpemU6Om9wZXJhdG9yIFFTaXplRigpIGNvbnN0CitMYXlvdXRTaXplOjpv
cGVyYXRvciBRU2l6ZUYoKSBjb25zdAogewogICAgIHJldHVybiBRU2l6ZUYod2lkdGgoKSwgaGVp
Z2h0KCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25zLmgJKHJldmlz
aW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvVHJhbnNmb3JtT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBA
CiAjaWZuZGVmIFRyYW5zZm9ybU9wZXJhdGlvbnNfaAogI2RlZmluZSBUcmFuc2Zvcm1PcGVyYXRp
b25zX2gKIAotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0U2l6ZS5o
IgogI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybVN0YXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5o
CShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL1RyYW5zZm9ybVN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcg
QEAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5j
bHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIgor
I2luY2x1ZGUgIkxheW91dFNpemUuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
IgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zv
cm1hdGlvbk1hdHJpeC5jcHAJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw4ICszMSw4IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCiAj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAi
RnJhY3Rpb25hbExheW91dFJlY3QuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAi
TGF5b3V0UmVjdC5oIgogCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgpAQCAtNjE3LDEwICs2MTcsMTAgQEAgRmxvYXRRdWFkIFRyYW5zZm9y
bWF0aW9uTWF0cml4Ojpwcm9qZWN0UQogc3RhdGljIGZsb2F0IGNsYW1wRWRnZVZhbHVlKGZsb2F0
IGYpCiB7CiAgICAgQVNTRVJUKCFpc25hbihmKSk7Ci0gICAgcmV0dXJuIG1pbjxmbG9hdD4obWF4
PGZsb2F0PihmLCAtRnJhY3Rpb25hbExheW91dFVuaXQ6Om1heCgpIC8gMiksIEZyYWN0aW9uYWxM
YXlvdXRVbml0OjptYXgoKSAvIDIpOworICAgIHJldHVybiBtaW48ZmxvYXQ+KG1heDxmbG9hdD4o
ZiwgLUxheW91dFVuaXQ6Om1heCgpIC8gMiksIExheW91dFVuaXQ6Om1heCgpIC8gMik7CiB9CiAK
LUZyYWN0aW9uYWxMYXlvdXRSZWN0IFRyYW5zZm9ybWF0aW9uTWF0cml4OjpjbGFtcGVkQm91bmRz
T2ZQcm9qZWN0ZWRRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcSkgY29uc3QKK0xheW91dFJlY3QgVHJh
bnNmb3JtYXRpb25NYXRyaXg6OmNsYW1wZWRCb3VuZHNPZlByb2plY3RlZFF1YWQoY29uc3QgRmxv
YXRRdWFkJiBxKSBjb25zdAogewogICAgIEZsb2F0UmVjdCBtYXBwZWRRdWFkQm91bmRzID0gcHJv
amVjdFF1YWQocSkuYm91bmRpbmdCb3goKTsKIApAQCAtNjI5LDE4ICs2MjksMTcgQEAgRnJhY3Rp
b25hbExheW91dFJlY3QgVHJhbnNmb3JtYXRpb25NYXRyaQogCiAgICAgZmxvYXQgcmlnaHQ7CiAg
ICAgaWYgKGlzaW5mKG1hcHBlZFF1YWRCb3VuZHMueCgpKSAmJiBpc2luZihtYXBwZWRRdWFkQm91
bmRzLndpZHRoKCkpKQotICAgICAgICByaWdodCA9IEZyYWN0aW9uYWxMYXlvdXRVbml0OjptYXgo
KSAvIDI7CisgICAgICAgIHJpZ2h0ID0gTGF5b3V0VW5pdDo6bWF4KCkgLyAyOwogICAgIGVsc2UK
ICAgICAgICAgcmlnaHQgPSBjbGFtcEVkZ2VWYWx1ZShjZWlsZihtYXBwZWRRdWFkQm91bmRzLm1h
eFgoKSkpOwogCiAgICAgZmxvYXQgYm90dG9tOwogICAgIGlmIChpc2luZihtYXBwZWRRdWFkQm91
bmRzLnkoKSkgJiYgaXNpbmYobWFwcGVkUXVhZEJvdW5kcy5oZWlnaHQoKSkpCi0gICAgICAgIGJv
dHRvbSA9IEZyYWN0aW9uYWxMYXlvdXRVbml0OjptYXgoKSAvIDI7CisgICAgICAgIGJvdHRvbSA9
IExheW91dFVuaXQ6Om1heCgpIC8gMjsKICAgICBlbHNlCiAgICAgICAgIGJvdHRvbSA9IGNsYW1w
RWRnZVZhbHVlKGNlaWxmKG1hcHBlZFF1YWRCb3VuZHMubWF4WSgpKSk7CiAKLSAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFJlY3QoRnJhY3Rpb25hbExheW91dFVuaXQ6OmNsYW1wKGxlZnQpLCBG
cmFjdGlvbmFsTGF5b3V0VW5pdDo6Y2xhbXAodG9wKSwgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0OjpjbGFtcChyaWdodCAtIGxlZnQpLCBGcmFj
dGlvbmFsTGF5b3V0VW5pdDo6Y2xhbXAoYm90dG9tIC0gdG9wKSk7CisgICAgcmV0dXJuIExheW91
dFJlY3QoTGF5b3V0VW5pdDo6Y2xhbXAobGVmdCksIExheW91dFVuaXQ6OmNsYW1wKHRvcCksICBM
YXlvdXRVbml0OjpjbGFtcChyaWdodCAtIGxlZnQpLCBMYXlvdXRVbml0OjpjbGFtcChib3R0b20g
LSB0b3ApKTsKIH0KIAogRmxvYXRQb2ludCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUG9pbnQo
Y29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QKQEAgLTY3MCw5ICs2NjksOSBAQCBJbnRSZWN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4OjptYXBSZWN0KGNvCiAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJl
Y3QobWFwUmVjdChGbG9hdFJlY3QocmVjdCkpKTsKIH0KIAotRnJhY3Rpb25hbExheW91dFJlY3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3Qm
IHIpIGNvbnN0CitMYXlvdXRSZWN0IFRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBSZWN0KGNvbnN0
IExheW91dFJlY3QmIHIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0ZyYWN0aW9uYWxM
YXlvdXRSZWN0KG1hcFJlY3QoRmxvYXRSZWN0KHIpKSk7CisgICAgcmV0dXJuIGVuY2xvc2luZ0xh
eW91dFJlY3QobWFwUmVjdChGbG9hdFJlY3QocikpKTsKIH0KIAogRmxvYXRSZWN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4OjptYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikgY29uc3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25N
YXRyaXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25N
YXRyaXguaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKIGNsYXNzIEludFJlY3Q7Ci1jbGFzcyBGcmFj
dGlvbmFsTGF5b3V0UmVjdDsKK2NsYXNzIExheW91dFJlY3Q7CiBjbGFzcyBGbG9hdFBvaW50M0Q7
CiBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBGbG9hdFF1YWQ7CkBAIC0xNTMsNyArMTUzLDcgQEAg
cHVibGljOgogICAgIC8vIFJvdW5kcyB0aGUgcmVzdWx0aW5nIG1hcHBlZCByZWN0YW5nbGUgb3V0
LiBUaGlzIGlzIGhlbHBmdWwgZm9yIGJvdW5kaW5nCiAgICAgLy8gYm94IGNvbXB1dGF0aW9ucyBi
dXQgbWF5IG5vdCBiZSB3aGF0IGlzIHdhbnRlZCBpbiBvdGhlciBjb250ZXh0cy4KICAgICBJbnRS
ZWN0IG1hcFJlY3QoY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgIEZyYWN0aW9uYWxMYXlvdXRS
ZWN0IG1hcFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKSBjb25zdDsKKyAgICBMYXlv
dXRSZWN0IG1hcFJlY3QoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwogCiAgICAgLy8gSWYgdGhl
IG1hdHJpeCBoYXMgM0QgY29tcG9uZW50cywgdGhlIHogY29tcG9uZW50IG9mIHRoZSByZXN1bHQg
aXMKICAgICAvLyBkcm9wcGVkLCBlZmZlY3RpdmVseSBwcm9qZWN0aW5nIHRoZSBxdWFkIGludG8g
dGhlIHo9MCBwbGFuZQpAQCAtMTY5LDcgKzE2OSw3IEBAIHB1YmxpYzoKICAgICBGbG9hdFF1YWQg
cHJvamVjdFF1YWQoY29uc3QgRmxvYXRRdWFkJiwgIGJvb2wqIGNsYW1wZWQgPSAwKSBjb25zdDsK
ICAgICAvLyBQcm9qZWN0cyB0aGUgZm91ciBjb3JuZXJzIG9mIHRoZSBxdWFkIGFuZCB0YWtlcyBh
IGJvdW5kaW5nIGJveCwKICAgICAvLyB3aGlsZSBzYW5pdGl6aW5nIHZhbHVlcyBjcmVhdGVkIHdo
ZW4gdGhlIHcgY29tcG9uZW50IGlzIG5lZ2F0aXZlLgotICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0
IGNsYW1wZWRCb3VuZHNPZlByb2plY3RlZFF1YWQoY29uc3QgRmxvYXRRdWFkJikgY29uc3Q7Cisg
ICAgTGF5b3V0UmVjdCBjbGFtcGVkQm91bmRzT2ZQcm9qZWN0ZWRRdWFkKGNvbnN0IEZsb2F0UXVh
ZCYpIGNvbnN0OwogCiAgICAgZG91YmxlIG0xMSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4WzBd
WzBdOyB9CiAgICAgdm9pZCBzZXRNMTEoZG91YmxlIGYpIHsgbV9tYXRyaXhbMF1bMF0gPSBmOyB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5oCShyZXZp
c2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICNpZm5kZWYgQXV0b1RhYmxlTGF5
b3V0X2gKICNkZWZpbmUgQXV0b1RhYmxlTGF5b3V0X2gKIAotI2luY2x1ZGUgIkxheW91dFR5cGVz
LmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgogI2luY2x1ZGUgIkxlbmd0aC5oIgogI2luY2x1
ZGUgIlRhYmxlTGF5b3V0LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0NvbHVtbkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvQ29sdW1uSW5mby5oCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvQ29sdW1uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsy
Niw3IEBACiAjaWZuZGVmIENvbHVtbkluZm9faAogI2RlZmluZSBDb2x1bW5JbmZvX2gKIAotI2lu
Y2x1ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dFVuaXQu
aCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvLmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNs
dXNpb25TaGFwZUluc2lkZUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAog
CiAjaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGUuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNp
bmNsdWRlICJMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJMYXlvdXRVbml0
LmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNzgsMTQgKzc4LDE0IEBAIHByaXZhdGU6CiAg
ICAgewogICAgICAgICBBU1NFUlQobV9zaGFwZSk7CiAgICAgICAgIC8vIFVzZSBmcm9tRmxvYXRD
ZWlsKCkgdG8gZW5zdXJlIHRoYXQgdGhlIHJldHVybmVkIExheW91dFVuaXQgdmFsdWUgaXMgd2l0
aGluIHRoZSBzaGFwZSdzIGJvdW5kcy4KLSAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRV
bml0Ojpmcm9tRmxvYXRDZWlsKG1fc2hhcGUtPnNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkueSgp
KTsKKyAgICAgICAgcmV0dXJuIExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwobV9zaGFwZS0+c2hh
cGVMb2dpY2FsQm91bmRpbmdCb3goKS55KCkpOwogICAgIH0KIAogICAgIGlubGluZSBMYXlvdXRV
bml0IHNoYXBlTG9naWNhbEJvdW5kc01heFkoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJU
KG1fc2hhcGUpOwogICAgICAgICAvLyBVc2UgZnJvbUZsb2F0Rmxvb3IoKSB0byBlbnN1cmUgdGhh
dCB0aGUgcmV0dXJuZWQgTGF5b3V0VW5pdCB2YWx1ZSBpcyB3aXRoaW4gdGhlIHNoYXBlJ3MgYm91
bmRzLgotICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQ6OmZyb21GbG9hdEZsb29y
KG1fc2hhcGUtPnNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkubWF4WSgpKTsKKyAgICAgICAgcmV0
dXJuIExheW91dFVuaXQ6OmZyb21GbG9hdEZsb29yKG1fc2hhcGUtPnNoYXBlTG9naWNhbEJvdW5k
aW5nQm94KCkubWF4WSgpKTsKICAgICB9CiAKICAgICBSZW5kZXJCbG9jayogbV9ibG9jazsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5o
CShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZm
ZWN0UmVuZGVyZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDkgQEAKICNpbmNsdWRl
ICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCiAjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFJlY3QuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1
ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIK
ICNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5o
IgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmgJ
KHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxl
TGF5b3V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICNpZm5kZWYgRml4ZWRU
YWJsZUxheW91dF9oCiAjZGVmaW5lIEZpeGVkVGFibGVMYXlvdXRfaAogCi0jaW5jbHVkZSAiTGF5
b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRVbml0LmgiCiAjaW5jbHVkZSAiTGVuZ3RoLmgi
CiAjaW5jbHVkZSAiVGFibGVMYXlvdXQuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR2FwUmVjdHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvR2FwUmVjdHMuaAkocmV2aXNpb24gMTMzNTE3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dhcFJlY3RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcg
KzIzLDcgQEAKICNpZm5kZWYgR2FwUmVjdHNfaAogI2RlZmluZSBHYXBSZWN0c19oCiAKLSNpbmNs
dWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3Vs
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0
LmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0
UmVzdWx0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJGbG9h
dFF1YWQuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVxdWVz
dC5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxh
eW91dFJlY3QuaCIKICNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9IaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUuY3BwCShy
ZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdGluZ1Ry
YW5zZm9ybVN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZS5oIgogCi0j
aW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFJlY3QuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0Lmgi
CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
ODAsNyArODAsNyBAQCBGbG9hdFF1YWQgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlOjptYXBwCiAg
ICAgcmV0dXJuIG1fYWNjdW11bGF0ZWRUcmFuc2Zvcm0uaW52ZXJzZSgpLnByb2plY3RRdWFkKG1f
bGFzdFBsYW5hckFyZWEpOwogfQogCi1GcmFjdGlvbmFsTGF5b3V0UmVjdCBIaXRUZXN0aW5nVHJh
bnNmb3JtU3RhdGU6OmJvdW5kc09mTWFwcGVkQXJlYSgpIGNvbnN0CitMYXlvdXRSZWN0IEhpdFRl
c3RpbmdUcmFuc2Zvcm1TdGF0ZTo6Ym91bmRzT2ZNYXBwZWRBcmVhKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV9hY2N1bXVsYXRlZFRyYW5zZm9ybS5pbnZlcnNlKCkuY2xhbXBlZEJvdW5kc09mUHJv
amVjdGVkUXVhZChtX2xhc3RQbGFuYXJBcmVhKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9IaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlLmgJKHJldmlzaW9uIDEz
MzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0aW5nVHJhbnNmb3JtU3Rh
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgRmxvYXRQ
b2ludCBtYXBwZWRQb2ludCgpIGNvbnN0OwogICAgIEZsb2F0UXVhZCBtYXBwZWRRdWFkKCkgY29u
c3Q7CiAgICAgRmxvYXRRdWFkIG1hcHBlZEFyZWEoKSBjb25zdDsKLSAgICBGcmFjdGlvbmFsTGF5
b3V0UmVjdCBib3VuZHNPZk1hcHBlZEFyZWEoKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IGJvdW5k
c09mTWFwcGVkQXJlYSgpIGNvbnN0OwogICAgIHZvaWQgZmxhdHRlbigpOwogCiAgICAgRmxvYXRQ
b2ludCBtX2xhc3RQbGFuYXJQb2ludDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjc3LDggKzY3Nyw4
IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0luQmxvY2tEaXIKIAogICAgICAgICAg
ICAgICAgIFJlbmRlclJ1YnlSdW4qIHJ1YnlSdW4gPSB0b1JlbmRlclJ1YnlSdW4oY3Vyci0+cmVu
ZGVyZXIoKSk7CiAgICAgICAgICAgICAgICAgaWYgKFJlbmRlclJ1YnlCYXNlKiBydWJ5QmFzZSA9
IHJ1YnlSdW4tPnJ1YnlCYXNlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBi
b3R0b21SdWJ5QmFzZUxlYWRpbmcgPSAoY3Vyci0+bG9naWNhbEhlaWdodCgpIC0gcnVieUJhc2Ut
PmxvZ2ljYWxCb3R0b20oKSkgKyBydWJ5QmFzZS0+bG9naWNhbEhlaWdodCgpIC0gKHJ1YnlCYXNl
LT5sYXN0Um9vdEJveCgpID8gcnVieUJhc2UtPmxhc3RSb290Qm94KCktPmxpbmVCb3R0b20oKSA6
IFpFUk9fTEFZT1VUX1VOSVQpOwotICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHRvcFJ1
YnlCYXNlTGVhZGluZyA9IHJ1YnlCYXNlLT5sb2dpY2FsVG9wKCkgKyAocnVieUJhc2UtPmZpcnN0
Um9vdEJveCgpID8gcnVieUJhc2UtPmZpcnN0Um9vdEJveCgpLT5saW5lVG9wKCkgOiBaRVJPX0xB
WU9VVF9VTklUKTsKKyAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBib3R0b21SdWJ5QmFz
ZUxlYWRpbmcgPSAoY3Vyci0+bG9naWNhbEhlaWdodCgpIC0gcnVieUJhc2UtPmxvZ2ljYWxCb3R0
b20oKSkgKyBydWJ5QmFzZS0+bG9naWNhbEhlaWdodCgpIC0gKHJ1YnlCYXNlLT5sYXN0Um9vdEJv
eCgpID8gcnVieUJhc2UtPmxhc3RSb290Qm94KCktPmxpbmVCb3R0b20oKSA6IExheW91dFVuaXQo
KSk7CisgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgdG9wUnVieUJhc2VMZWFkaW5nID0g
cnVieUJhc2UtPmxvZ2ljYWxUb3AoKSArIChydWJ5QmFzZS0+Zmlyc3RSb290Qm94KCkgPyBydWJ5
QmFzZS0+Zmlyc3RSb290Qm94KCktPmxpbmVUb3AoKSA6IExheW91dFVuaXQoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIG5ld0xvZ2ljYWxUb3AgKz0gIXJlbmRlcmVyKCktPnN0eWxlKCktPmlzRmxp
cHBlZExpbmVzV3JpdGluZ01vZGUoKSA/IHRvcFJ1YnlCYXNlTGVhZGluZyA6IGJvdHRvbVJ1YnlC
YXNlTGVhZGluZzsKICAgICAgICAgICAgICAgICAgICAgYm94SGVpZ2h0IC09ICh0b3BSdWJ5QmFz
ZUxlYWRpbmcgKyBib3R0b21SdWJ5QmFzZUxlYWRpbmcpOwogICAgICAgICAgICAgICAgIH0KQEAg
LTc5MSw3ICs3OTEsNyBAQCBpbmxpbmUgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRCb3JkZXJPdXRz
CiAgICAgaWYgKCFzdHlsZS0+aGFzQm9yZGVySW1hZ2VPdXRzZXRzKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQgYm9yZGVyT3V0c2V0cyA9IHN0eWxl
LT5ib3JkZXJJbWFnZU91dHNldHMoKTsKKyAgICBMYXlvdXRCb3hFeHRlbnQgYm9yZGVyT3V0c2V0
cyA9IHN0eWxlLT5ib3JkZXJJbWFnZU91dHNldHMoKTsKIAogICAgIExheW91dFVuaXQgYm9yZGVy
T3V0c2V0TG9naWNhbFRvcCA9IGJvcmRlck91dHNldHMubG9naWNhbFRvcChzdHlsZS0+d3JpdGlu
Z01vZGUoKSk7CiAgICAgTGF5b3V0VW5pdCBib3JkZXJPdXRzZXRMb2dpY2FsQm90dG9tID0gYm9y
ZGVyT3V0c2V0cy5sb2dpY2FsQm90dG9tKHN0eWxlLT53cml0aW5nTW9kZSgpKTsKQEAgLTgwNiw4
ICs4MDYsOCBAQCBpbmxpbmUgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRCb3JkZXJPdXRzCiAgICAg
TGF5b3V0VW5pdCBsb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3cgPSBtaW4ocGl4ZWxTbmFwcGVkTG9n
aWNhbFRvcCgpIC0gb3V0c2V0TG9naWNhbFRvcCwgbG9naWNhbFZpc3VhbE92ZXJmbG93LnkoKSk7
CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3cgPSBtYXgocGl4ZWxT
bmFwcGVkTG9naWNhbEJvdHRvbSgpICsgb3V0c2V0TG9naWNhbEJvdHRvbSwgbG9naWNhbFZpc3Vh
bE92ZXJmbG93Lm1heFkoKSk7CiAKLSAgICBMYXlvdXRVbml0IG91dHNldExvZ2ljYWxMZWZ0ID0g
aW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSgpID8gYm9yZGVyT3V0c2V0TG9naWNhbExlZnQgOiBaRVJP
X0xBWU9VVF9VTklUOwotICAgIExheW91dFVuaXQgb3V0c2V0TG9naWNhbFJpZ2h0ID0gaW5jbHVk
ZUxvZ2ljYWxSaWdodEVkZ2UoKSA/IGJvcmRlck91dHNldExvZ2ljYWxSaWdodCA6IFpFUk9fTEFZ
T1VUX1VOSVQ7CisgICAgTGF5b3V0VW5pdCBvdXRzZXRMb2dpY2FsTGVmdCA9IGluY2x1ZGVMb2dp
Y2FsTGVmdEVkZ2UoKSA/IGJvcmRlck91dHNldExvZ2ljYWxMZWZ0IDogTGF5b3V0VW5pdCgpOwor
ICAgIExheW91dFVuaXQgb3V0c2V0TG9naWNhbFJpZ2h0ID0gaW5jbHVkZUxvZ2ljYWxSaWdodEVk
Z2UoKSA/IGJvcmRlck91dHNldExvZ2ljYWxSaWdodCA6IExheW91dFVuaXQoKTsKIAogICAgIExh
eW91dFVuaXQgbG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdyA9IG1pbihwaXhlbFNuYXBwZWRMb2dp
Y2FsTGVmdCgpIC0gb3V0c2V0TG9naWNhbExlZnQsIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy54KCkp
OwogICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0VmlzdWFsT3ZlcmZsb3cgPSBtYXgocGl4ZWxT
bmFwcGVkTG9naWNhbFJpZ2h0KCkgKyBvdXRzZXRMb2dpY2FsUmlnaHQsIGxvZ2ljYWxWaXN1YWxP
dmVyZmxvdy5tYXhYKCkpOwpAQCAtMTE0Miw4ICsxMTQyLDggQEAgdm9pZCBJbmxpbmVGbG93Qm94
OjpwYWludEZpbGxMYXllcihjb25zdAogICAgICAgICAgICAgZm9yIChJbmxpbmVGbG93Qm94KiBj
dXJyID0gdGhpczsgY3VycjsgY3VyciA9IGN1cnItPnByZXZMaW5lQm94KCkpCiAgICAgICAgICAg
ICAgICAgdG90YWxMb2dpY2FsV2lkdGggKz0gY3Vyci0+bG9naWNhbFdpZHRoKCk7CiAgICAgICAg
IH0KLSAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFggPSByZWN0LngoKSAtIChpc0hvcml6b250YWwo
KSA/IGxvZ2ljYWxPZmZzZXRPbkxpbmUgOiBaRVJPX0xBWU9VVF9VTklUKTsKLSAgICAgICAgTGF5
b3V0VW5pdCBzdHJpcFkgPSByZWN0LnkoKSAtIChpc0hvcml6b250YWwoKSA/IFpFUk9fTEFZT1VU
X1VOSVQgOiBsb2dpY2FsT2Zmc2V0T25MaW5lKTsKKyAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFgg
PSByZWN0LngoKSAtIChpc0hvcml6b250YWwoKSA/IGxvZ2ljYWxPZmZzZXRPbkxpbmUgOiBMYXlv
dXRVbml0KCkpOworICAgICAgICBMYXlvdXRVbml0IHN0cmlwWSA9IHJlY3QueSgpIC0gKGlzSG9y
aXpvbnRhbCgpID8gTGF5b3V0VW5pdCgpIDogbG9naWNhbE9mZnNldE9uTGluZSk7CiAgICAgICAg
IExheW91dFVuaXQgc3RyaXBXaWR0aCA9IGlzSG9yaXpvbnRhbCgpID8gdG90YWxMb2dpY2FsV2lk
dGggOiBzdGF0aWNfY2FzdDxMYXlvdXRVbml0Pih3aWR0aCgpKTsKICAgICAgICAgTGF5b3V0VW5p
dCBzdHJpcEhlaWdodCA9IGlzSG9yaXpvbnRhbCgpID8gc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4o
aGVpZ2h0KCkpIDogdG90YWxMb2dpY2FsV2lkdGg7CiAKQEAgLTEyNjksOCArMTI2OSw4IEBAIHZv
aWQgSW5saW5lRmxvd0JveDo6cGFpbnRCb3hEZWNvcmF0aW9ucygKICAgICAgICAgICAgICAgICBM
YXlvdXRVbml0IHRvdGFsTG9naWNhbFdpZHRoID0gbG9naWNhbE9mZnNldE9uTGluZTsKICAgICAg
ICAgICAgICAgICBmb3IgKElubGluZUZsb3dCb3gqIGN1cnIgPSB0aGlzOyBjdXJyOyBjdXJyID0g
Y3Vyci0+bmV4dExpbmVCb3goKSkKICAgICAgICAgICAgICAgICAgICAgdG90YWxMb2dpY2FsV2lk
dGggKz0gY3Vyci0+bG9naWNhbFdpZHRoKCk7Ci0gICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBz
dHJpcFggPSBhZGp1c3RlZFBhaW50b2Zmc2V0LngoKSAtIChpc0hvcml6b250YWwoKSA/IGxvZ2lj
YWxPZmZzZXRPbkxpbmUgOiBaRVJPX0xBWU9VVF9VTklUKTsKLSAgICAgICAgICAgICAgICBMYXlv
dXRVbml0IHN0cmlwWSA9IGFkanVzdGVkUGFpbnRvZmZzZXQueSgpIC0gKGlzSG9yaXpvbnRhbCgp
ID8gWkVST19MQVlPVVRfVU5JVCA6IGxvZ2ljYWxPZmZzZXRPbkxpbmUpOworICAgICAgICAgICAg
ICAgIExheW91dFVuaXQgc3RyaXBYID0gYWRqdXN0ZWRQYWludG9mZnNldC54KCkgLSAoaXNIb3Jp
em9udGFsKCkgPyBsb2dpY2FsT2Zmc2V0T25MaW5lIDogTGF5b3V0VW5pdCgpKTsKKyAgICAgICAg
ICAgICAgICBMYXlvdXRVbml0IHN0cmlwWSA9IGFkanVzdGVkUGFpbnRvZmZzZXQueSgpIC0gKGlz
SG9yaXpvbnRhbCgpID8gTGF5b3V0VW5pdCgpIDogbG9naWNhbE9mZnNldE9uTGluZSk7CiAgICAg
ICAgICAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFdpZHRoID0gaXNIb3Jpem9udGFsKCkgPyB0b3Rh
bExvZ2ljYWxXaWR0aCA6IGZyYW1lUmVjdC53aWR0aCgpOwogICAgICAgICAgICAgICAgIExheW91
dFVuaXQgc3RyaXBIZWlnaHQgPSBpc0hvcml6b250YWwoKSA/IGZyYW1lUmVjdC5oZWlnaHQoKSA6
IHRvdGFsTG9naWNhbFdpZHRoOwogCkBAIC0xMzQxLDggKzEzNDEsOCBAQCB2b2lkIElubGluZUZs
b3dCb3g6OnBhaW50TWFzayhQYWludEluZm8mCiAgICAgICAgIExheW91dFVuaXQgdG90YWxMb2dp
Y2FsV2lkdGggPSBsb2dpY2FsT2Zmc2V0T25MaW5lOwogICAgICAgICBmb3IgKElubGluZUZsb3dC
b3gqIGN1cnIgPSB0aGlzOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkKICAgICAg
ICAgICAgIHRvdGFsTG9naWNhbFdpZHRoICs9IGN1cnItPmxvZ2ljYWxXaWR0aCgpOwotICAgICAg
ICBMYXlvdXRVbml0IHN0cmlwWCA9IGFkanVzdGVkUGFpbnRPZmZzZXQueCgpIC0gKGlzSG9yaXpv
bnRhbCgpID8gbG9naWNhbE9mZnNldE9uTGluZSA6IFpFUk9fTEFZT1VUX1VOSVQpOwotICAgICAg
ICBMYXlvdXRVbml0IHN0cmlwWSA9IGFkanVzdGVkUGFpbnRPZmZzZXQueSgpIC0gKGlzSG9yaXpv
bnRhbCgpID8gWkVST19MQVlPVVRfVU5JVCA6IGxvZ2ljYWxPZmZzZXRPbkxpbmUpOworICAgICAg
ICBMYXlvdXRVbml0IHN0cmlwWCA9IGFkanVzdGVkUGFpbnRPZmZzZXQueCgpIC0gKGlzSG9yaXpv
bnRhbCgpID8gbG9naWNhbE9mZnNldE9uTGluZSA6IExheW91dFVuaXQoKSk7CisgICAgICAgIExh
eW91dFVuaXQgc3RyaXBZID0gYWRqdXN0ZWRQYWludE9mZnNldC55KCkgLSAoaXNIb3Jpem9udGFs
KCkgPyBMYXlvdXRVbml0KCkgOiBsb2dpY2FsT2Zmc2V0T25MaW5lKTsKICAgICAgICAgTGF5b3V0
VW5pdCBzdHJpcFdpZHRoID0gaXNIb3Jpem9udGFsKCkgPyB0b3RhbExvZ2ljYWxXaWR0aCA6IGZy
YW1lUmVjdC53aWR0aCgpOwogICAgICAgICBMYXlvdXRVbml0IHN0cmlwSGVpZ2h0ID0gaXNIb3Jp
em9udGFsKCkgPyBmcmFtZVJlY3QuaGVpZ2h0KCkgOiB0b3RhbExvZ2ljYWxXaWR0aDsKIApAQCAt
MTQzOSw3ICsxNDM5LDcgQEAgTGF5b3V0VW5pdCBJbmxpbmVGbG93Qm94Ojpjb21wdXRlT3ZlckFu
bgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBp
ZiAoIXJ1YnlSdW4tPnN0eWxlKCktPmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSkgewotICAg
ICAgICAgICAgICAgIExheW91dFVuaXQgdG9wT2ZGaXJzdFJ1YnlUZXh0TGluZSA9IHJ1YnlUZXh0
LT5sb2dpY2FsVG9wKCkgKyAocnVieVRleHQtPmZpcnN0Um9vdEJveCgpID8gcnVieVRleHQtPmZp
cnN0Um9vdEJveCgpLT5saW5lVG9wKCkgOiBaRVJPX0xBWU9VVF9VTklUKTsKKyAgICAgICAgICAg
ICAgICBMYXlvdXRVbml0IHRvcE9mRmlyc3RSdWJ5VGV4dExpbmUgPSBydWJ5VGV4dC0+bG9naWNh
bFRvcCgpICsgKHJ1YnlUZXh0LT5maXJzdFJvb3RCb3goKSA/IHJ1YnlUZXh0LT5maXJzdFJvb3RC
b3goKS0+bGluZVRvcCgpIDogTGF5b3V0VW5pdCgpKTsKICAgICAgICAgICAgICAgICBpZiAodG9w
T2ZGaXJzdFJ1YnlUZXh0TGluZSA+PSAwKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgICAgICB0b3BPZkZpcnN0UnVieVRleHRMaW5lICs9IGN1cnItPmxvZ2ljYWxU
b3AoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRSZXBhaW50ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRSZXBhaW50ZXIu
Y3BwCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0
UmVwYWludGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkxheW91dFJlcGFpbnRlci5oIgogCisjaW5jbHVkZSAiTGF5
b3V0UmVjdC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0UmVwYWludGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFJlcGFpbnRlci5oCShy
ZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0UmVwYWlu
dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgTGF5b3V0UmVw
YWludGVyX2gKICNkZWZpbmUgTGF5b3V0UmVwYWludGVyX2gKIAotI2luY2x1ZGUgIkxheW91dFR5
cGVzSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuaAko
cmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgTGF5b3V0U3RhdGVf
aAogCiAjaW5jbHVkZSAiQ29sdW1uSW5mby5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisj
aW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9M
YXlvdXRUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlv
dXRUeXBlcy5oCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
TGF5b3V0VHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1OSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1
dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gVGhlc2UgdHlw
ZWRlZnMgYXJlIGJlaW5nIHVzZWQgdG8gYWJzdHJhY3QgbGF5b3V0IGFuZCBoaXQgdGVzdGluZyBv
ZmYKLS8vIG9mIGludGVnZXJzIGFuZCBldmVudHVhbGx5IHJlcGxhY2UgdGhlbSB3aXRoIGZsb2F0
cy4gT25jZSB0aGlzIHRyYW5zaXRpb24KLS8vIGlzIGNvbXBsZXRlLCB0aGVzZSB0eXBlcyB3aWxs
IGJlIHJlbW92ZWQuIFByb2dyZXNzIGNhbiBiZSB0cmFja2VkIGF0Ci0vLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMTgKLQotI2lmbmRlZiBMYXlvdXRUeXBlc19o
Ci0jZGVmaW5lIExheW91dFR5cGVzX2gKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBG
cmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OwotY2xhc3MgRnJhY3Rpb25hbExheW91dFBvaW50Owot
Y2xhc3MgRnJhY3Rpb25hbExheW91dFJlY3Q7Ci1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0U2l6ZTsK
LWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRVbml0OwotCi10eXBlZGVmIEZyYWN0aW9uYWxMYXlvdXRC
b3hFeHRlbnQgTGF5b3V0Qm94RXh0ZW50OwotdHlwZWRlZiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQg
TGF5b3V0UG9pbnQ7Ci10eXBlZGVmIEZyYWN0aW9uYWxMYXlvdXRSZWN0IExheW91dFJlY3Q7Ci10
eXBlZGVmIEZyYWN0aW9uYWxMYXlvdXRTaXplIExheW91dFNpemU7Ci10eXBlZGVmIEZyYWN0aW9u
YWxMYXlvdXRVbml0IExheW91dFVuaXQ7Ci0KLSNkZWZpbmUgTUFYX0xBWU9VVF9VTklUIExheW91
dFVuaXQ6Om1heCgpCi0jZGVmaW5lIE1JTl9MQVlPVVRfVU5JVCBMYXlvdXRVbml0OjptaW4oKQot
I2RlZmluZSBaRVJPX0xBWU9VVF9VTklUIExheW91dFVuaXQoMCkKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gTGF5b3V0VHlwZXNfaApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0xheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaAkocmV2aXNpb24g
MTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFR5cGVzSW5saW5lTWV0
aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4K
LSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBMYXlvdXRUeXBl
c0lubGluZU1ldGhvZHNfaAotI2RlZmluZSBMYXlvdXRUeXBlc0lubGluZU1ldGhvZHNfaAotCi0j
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dEJveEV4dGVu
dC5oIgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRSZWN0LmgiCi0jaW5jbHVkZSAiRnJhY3Rp
b25hbExheW91dFVuaXQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTGF5b3V0
VHlwZXMuaCIKLQotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRSZWN0IGVuY2xvc2luZ0xheW91dFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHJl
Y3QpOwotfQotCi1pbmxpbmUgTGF5b3V0U2l6ZSByb3VuZGVkTGF5b3V0U2l6ZShjb25zdCBGbG9h
dFNpemUmIHMpCi17Ci0jaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICByZXR1cm4gRnJh
Y3Rpb25hbExheW91dFNpemUocyk7Ci0jZWxzZQotICAgIHJldHVybiByb3VuZGVkSW50U2l6ZShz
KTsKLSNlbmRpZgotfQotCi1pbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0KExheW91
dFVuaXQgbGVmdCwgTGF5b3V0VW5pdCB0b3AsIExheW91dFVuaXQgd2lkdGgsIExheW91dFVuaXQg
aGVpZ2h0KQotewotICAgIHJldHVybiBJbnRSZWN0KGxlZnQucm91bmQoKSwgdG9wLnJvdW5kKCks
IHNuYXBTaXplVG9QaXhlbCh3aWR0aCwgbGVmdCksIHNuYXBTaXplVG9QaXhlbChoZWlnaHQsIHRv
cCkpOwotfQotCi1pbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0RnJvbUVkZ2VzKExh
eW91dFVuaXQgbGVmdCwgTGF5b3V0VW5pdCB0b3AsIExheW91dFVuaXQgcmlnaHQsIExheW91dFVu
aXQgYm90dG9tKQotewotICAgIHJldHVybiBJbnRSZWN0KGxlZnQucm91bmQoKSwgdG9wLnJvdW5k
KCksIHNuYXBTaXplVG9QaXhlbChyaWdodCAtIGxlZnQsIGxlZnQpLCBzbmFwU2l6ZVRvUGl4ZWwo
Ym90dG9tIC0gdG9wLCB0b3ApKTsKLX0KLQotaW5saW5lIExheW91dFBvaW50IHJvdW5kZWRMYXlv
dXRQb2ludChjb25zdCBGbG9hdFBvaW50JiBwKQotewotI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlP
VVQpCi0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChwKTsKLSNlbHNlCi0gICAgcmV0
dXJuIHJvdW5kZWRJbnRQb2ludChwKTsKLSNlbmRpZgotfQotCi1pbmxpbmUgTGF5b3V0UG9pbnQg
Zmxvb3JlZExheW91dFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApCi17Ci0gICAgcmV0dXJuIGZs
b29yZWRGcmFjdGlvbmFsTGF5b3V0UG9pbnQocCk7Ci19Ci0KLWlubGluZSBMYXlvdXRQb2ludCBm
bG9vcmVkTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRTaXplJiBzKQotewotICAgIHJldHVybiBmbG9v
cmVkTGF5b3V0UG9pbnQoRmxvYXRQb2ludChzKSk7Ci19Ci0KLWlubGluZSBpbnQgcm91bmRUb0lu
dChMYXlvdXRVbml0IHZhbHVlKQotewotICAgIHJldHVybiB2YWx1ZS5yb3VuZCgpOwotfQotCi1p
bmxpbmUgaW50IGZsb29yVG9JbnQoTGF5b3V0VW5pdCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdmFs
dWUuZmxvb3IoKTsKLX0KLQotaW5saW5lIExheW91dFVuaXQgcm91bmRlZExheW91dFVuaXQoZmxv
YXQgdmFsdWUpCi17Ci0jaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICByZXR1cm4gRnJh
Y3Rpb25hbExheW91dFVuaXQ6OmZyb21GbG9hdFJvdW5kKHZhbHVlKTsKLSNlbHNlCi0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PGludD4obHJvdW5kZih2YWx1ZSkpOwotI2VuZGlmCi19Ci0KLWlubGlu
ZSBMYXlvdXRVbml0IGNlaWxlZExheW91dFVuaXQoZmxvYXQgdmFsdWUpCi17Ci0jaWYgRU5BQkxF
KFNVQlBJWEVMX0xBWU9VVCkKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQ6OmZyb21G
bG9hdENlaWwodmFsdWUpOwotI2Vsc2UKLSAgICByZXR1cm4gY2VpbGYodmFsdWUpOwotI2VuZGlm
Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IGFic29sdXRlVmFsdWUoY29uc3QgTGF5b3V0VW5pdCYg
dmFsdWUpCi17Ci0gICAgcmV0dXJuIHZhbHVlLmFicygpOwotfQotCi1pbmxpbmUgTGF5b3V0U2l6
ZSB0b0xheW91dFNpemUoY29uc3QgTGF5b3V0UG9pbnQmIHApCi17Ci0gICAgcmV0dXJuIExheW91
dFNpemUocC54KCksIHAueSgpKTsKLX0KLQotaW5saW5lIExheW91dFBvaW50IHRvTGF5b3V0UG9p
bnQoY29uc3QgTGF5b3V0U2l6ZSYgcCkKLXsKLSAgICByZXR1cm4gTGF5b3V0UG9pbnQocC53aWR0
aCgpLCBwLmhlaWdodCgpKTsKLX0KLQotaW5saW5lIExheW91dFVuaXQgbGF5b3V0TW9kKGNvbnN0
IExheW91dFVuaXQmIG51bWVyYXRvciwgY29uc3QgTGF5b3V0VW5pdCYgZGVub21pbmF0b3IpCi17
Ci0gICAgcmV0dXJuIG51bWVyYXRvciAlIGRlbm9taW5hdG9yOwotfQotCi1pbmxpbmUgSW50U2l6
ZSBwaXhlbFNuYXBwZWRJbnRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzLCBjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHApCi17Ci0gICAgcmV0dXJuIEludFNpemUoc25hcFNp
emVUb1BpeGVsKHMud2lkdGgoKSwgcC54KCkpLCBzbmFwU2l6ZVRvUGl4ZWwocy5oZWlnaHQoKSwg
cC55KCkpKTsKLX0KLQotaW5saW5lIEludFJlY3QgcGl4ZWxTbmFwcGVkSW50UmVjdChMYXlvdXRQ
b2ludCBsb2NhdGlvbiwgTGF5b3V0U2l6ZSBzaXplKQotewotICAgIHJldHVybiBJbnRSZWN0KHJv
dW5kZWRJbnRQb2ludChsb2NhdGlvbiksIHBpeGVsU25hcHBlZEludFNpemUoc2l6ZSwgbG9jYXRp
b24pKTsKLX0KLQotaW5saW5lIGJvb2wgaXNJbnRlZ2VyVmFsdWUoY29uc3QgTGF5b3V0VW5pdCB2
YWx1ZSkKLXsKLSAgICByZXR1cm4gdmFsdWUudG9JbnQoKSA9PSB2YWx1ZTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzX2gK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9QYWludEluZm8uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUGFpbnRJbmZvLmgJKHJldmlzaW9uIDEzMzUxNykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9QYWludEluZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNyArMzIsNyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIgorI2lu
Y2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJQYWludFBoYXNlLmgiCiAjaW5jbHVkZSA8
bGltaXRzPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MSw4ICsx
ODEsOCBAQCBSZW5kZXJCbG9jazo6TWFyZ2luSW5mbzo6TWFyZ2luSW5mbyhSZW5kCiAgICAgbV9x
dWlya0NvbnRhaW5lciA9IGJsb2NrLT5pc1RhYmxlQ2VsbCgpIHx8IGJsb2NrLT5pc0JvZHkoKSB8
fCBibG9ja1N0eWxlLT5tYXJnaW5CZWZvcmVDb2xsYXBzZSgpID09IE1ESVNDQVJECiAgICAgICAg
IHx8IGJsb2NrU3R5bGUtPm1hcmdpbkFmdGVyQ29sbGFwc2UoKSA9PSBNRElTQ0FSRDsKIAotICAg
IG1fcG9zaXRpdmVNYXJnaW4gPSBtX2NhbkNvbGxhcHNlTWFyZ2luQmVmb3JlV2l0aENoaWxkcmVu
ID8gYmxvY2stPm1heFBvc2l0aXZlTWFyZ2luQmVmb3JlKCkgOiBaRVJPX0xBWU9VVF9VTklUOwot
ICAgIG1fbmVnYXRpdmVNYXJnaW4gPSBtX2NhbkNvbGxhcHNlTWFyZ2luQmVmb3JlV2l0aENoaWxk
cmVuID8gYmxvY2stPm1heE5lZ2F0aXZlTWFyZ2luQmVmb3JlKCkgOiBaRVJPX0xBWU9VVF9VTklU
OworICAgIG1fcG9zaXRpdmVNYXJnaW4gPSBtX2NhbkNvbGxhcHNlTWFyZ2luQmVmb3JlV2l0aENo
aWxkcmVuID8gYmxvY2stPm1heFBvc2l0aXZlTWFyZ2luQmVmb3JlKCkgOiBMYXlvdXRVbml0KCk7
CisgICAgbV9uZWdhdGl2ZU1hcmdpbiA9IG1fY2FuQ29sbGFwc2VNYXJnaW5CZWZvcmVXaXRoQ2hp
bGRyZW4gPyBibG9jay0+bWF4TmVnYXRpdmVNYXJnaW5CZWZvcmUoKSA6IExheW91dFVuaXQoKTsK
IH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpA
QCAtMTI5MSw3ICsxMjkxLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6aXNTZWxmQ29sbGFwc2luZ0Js
b2NrKAogICAgIC8vIChjKSBoYXZlIGJvcmRlci9wYWRkaW5nLAogICAgIC8vIChkKSBoYXZlIGEg
bWluLWhlaWdodAogICAgIC8vIChlKSBoYXZlIHNwZWNpZmllZCB0aGF0IG9uZSBvZiBvdXIgbWFy
Z2lucyBjYW4ndCBjb2xsYXBzZSB1c2luZyBhIENTUyBleHRlbnNpb24KLSAgICBpZiAobG9naWNh
bEhlaWdodCgpID4gWkVST19MQVlPVVRfVU5JVAorICAgIGlmIChsb2dpY2FsSGVpZ2h0KCkgPiBM
YXlvdXRVbml0KCkKICAgICAgICAgfHwgaXNUYWJsZSgpIHx8IGJvcmRlckFuZFBhZGRpbmdMb2dp
Y2FsSGVpZ2h0KCkKICAgICAgICAgfHwgc3R5bGUoKS0+bG9naWNhbE1pbkhlaWdodCgpLmlzUG9z
aXRpdmUoKQogICAgICAgICB8fCBzdHlsZSgpLT5tYXJnaW5CZWZvcmVDb2xsYXBzZSgpID09IE1T
RVBBUkFURSB8fCBzdHlsZSgpLT5tYXJnaW5BZnRlckNvbGxhcHNlKCkgPT0gTVNFUEFSQVRFKQpA
QCAtMTQyMyw3ICsxNDIzLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlUmVnaW9uc0FuZEV4
Y2x1cwogCiAgICAgLy8gQ29tcHV0ZSB0aGUgbWF4aW11bSBsb2dpY2FsIGhlaWdodCBjb250ZW50
IG1heSBjYXVzZSB0aGlzIGJsb2NrIHRvIGV4cGFuZCB0bwogICAgIC8vIEZJWE1FOiBUaGVzZSBz
aG91bGQgZXZlbnR1YWxseSB1c2UgdGhlIGNvbnN0IGNvbXB1dGVMb2dpY2FsSGVpZ2h0IHJhdGhl
ciB0aGFuIHVwZGF0ZUxvZ2ljYWxIZWlnaHQKLSAgICBzZXRMb2dpY2FsSGVpZ2h0KE1BWF9MQVlP
VVRfVU5JVCAvIDIpOworICAgIHNldExvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdDo6bWF4KCkgLyAy
KTsKICAgICB1cGRhdGVMb2dpY2FsSGVpZ2h0KCk7CiAKICNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lP
TlMpCkBAIC0xNDQ0LDcgKzE0NDQsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlRXhjbHVz
aW9uU2hhcGVTCiAgICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleGNsdXNpb25TaGFwZUlu
c2lkZUluZm8gPSB0aGlzLT5leGNsdXNpb25TaGFwZUluc2lkZUluZm8oKTsKICAgICBpZiAoZXhj
bHVzaW9uU2hhcGVJbnNpZGVJbmZvKSB7CiAgICAgICAgIGJvb2wgcGVyY2VudGFnZUxvZ2ljYWxI
ZWlnaHRSZXNvbHZhYmxlID0gcGVyY2VudGFnZUxvZ2ljYWxIZWlnaHRJc1Jlc29sdmFibGVGcm9t
QmxvY2sodGhpcywgZmFsc2UpOwotICAgICAgICBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPmNv
bXB1dGVTaGFwZVNpemUobG9naWNhbFdpZHRoKCksIHBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0UmVz
b2x2YWJsZSA/IGxvZ2ljYWxIZWlnaHQoKSA6IFpFUk9fTEFZT1VUX1VOSVQpOworICAgICAgICBl
eGNsdXNpb25TaGFwZUluc2lkZUluZm8tPmNvbXB1dGVTaGFwZVNpemUobG9naWNhbFdpZHRoKCks
IHBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0UmVzb2x2YWJsZSA/IGxvZ2ljYWxIZWlnaHQoKSA6IExh
eW91dFVuaXQoKSk7CiAgICAgfQogfQogI2VuZGlmCkBAIC0xNDc1LDExICsxNDc1LDExIEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmNoZWNrRm9yUGFnaW5hdGlvbkxvZ2kKICAgICAgICAgICAgIC8vIGF2
b2lkIGRvaW5nIHR3byBsYXlvdXQgcGFzc2VzLgogICAgICAgICAgICAgdXBkYXRlTG9naWNhbEhl
aWdodCgpOwogICAgICAgICAgICAgTGF5b3V0VW5pdCBjb2x1bW5IZWlnaHQgPSBjb250ZW50TG9n
aWNhbEhlaWdodCgpOwotICAgICAgICAgICAgaWYgKGNvbHVtbkhlaWdodCA+IFpFUk9fTEFZT1VU
X1VOSVQpIHsKKyAgICAgICAgICAgIGlmIChjb2x1bW5IZWlnaHQgPiBMYXlvdXRVbml0KCkpIHsK
ICAgICAgICAgICAgICAgICBwYWdlTG9naWNhbEhlaWdodCA9IGNvbHVtbkhlaWdodDsKICAgICAg
ICAgICAgICAgICBoYXNTcGVjaWZpZWRQYWdlTG9naWNhbEhlaWdodCA9IHRydWU7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KFpFUk9fTEFZT1VUX1VOSVQpOwor
ICAgICAgICAgICAgc2V0TG9naWNhbEhlaWdodChMYXlvdXRVbml0KCkpOwogICAgICAgICB9CiAg
ICAgICAgIGlmIChjb2xJbmZvLT5jb2x1bW5IZWlnaHQoKSAhPSBwYWdlTG9naWNhbEhlaWdodCAm
JiBldmVySGFkTGF5b3V0KCkpIHsKICAgICAgICAgICAgIGNvbEluZm8tPnNldENvbHVtbkhlaWdo
dChwYWdlTG9naWNhbEhlaWdodCk7CkBAIC0xNTE2LDcgKzE1MTYsNyBAQCB2b2lkIFJlbmRlckJs
b2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgY2xlYXJGbG9hdHMoKTsKIAogICAgIExh
eW91dFVuaXQgcHJldmlvdXNIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCk7Ci0gICAgc2V0TG9naWNh
bEhlaWdodChaRVJPX0xBWU9VVF9VTklUKTsKKyAgICBzZXRMb2dpY2FsSGVpZ2h0KExheW91dFVu
aXQoKSk7CiAKICAgICBib29sIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCA9IGZhbHNlOwogICAg
IGJvb2wgaGFzU3BlY2lmaWVkUGFnZUxvZ2ljYWxIZWlnaHQgPSBmYWxzZTsKQEAgLTE1NTIsOSAr
MTU1Miw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICAg
ICAgc2V0UGFnaW5hdGlvblN0cnV0KDApOwogICAgIH0KIAotICAgIExheW91dFVuaXQgcmVwYWlu
dExvZ2ljYWxUb3AgPSBaRVJPX0xBWU9VVF9VTklUOwotICAgIExheW91dFVuaXQgcmVwYWludExv
Z2ljYWxCb3R0b20gPSBaRVJPX0xBWU9VVF9VTklUOwotICAgIExheW91dFVuaXQgbWF4RmxvYXRM
b2dpY2FsQm90dG9tID0gWkVST19MQVlPVVRfVU5JVDsKKyAgICBMYXlvdXRVbml0IHJlcGFpbnRM
b2dpY2FsVG9wID0gTGF5b3V0VW5pdCgpOworICAgIExheW91dFVuaXQgcmVwYWludExvZ2ljYWxC
b3R0b20gPSBMYXlvdXRVbml0KCk7CisgICAgTGF5b3V0VW5pdCBtYXhGbG9hdExvZ2ljYWxCb3R0
b20gPSBMYXlvdXRVbml0KCk7CiAgICAgaWYgKCFmaXJzdENoaWxkKCkgJiYgIWlzQW5vbnltb3Vz
QmxvY2soKSkKICAgICAgICAgc2V0Q2hpbGRyZW5JbmxpbmUodHJ1ZSk7CiAgICAgaWYgKGNoaWxk
cmVuSW5saW5lKCkpCkBAIC0xNjkxLDkgKzE2OTEsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21w
dXRlT3ZlcmZsb3coTGF5b3V0CiAgICAgICAgIExheW91dFJlY3QgY2xpZW50UmVjdChjbGllbnRC
b3hSZWN0KCkpOwogICAgICAgICBMYXlvdXRSZWN0IHJlY3RUb0FwcGx5OwogICAgICAgICBpZiAo
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAgIHJlY3RUb0FwcGx5ID0gTGF5
b3V0UmVjdChjbGllbnRSZWN0LngoKSwgY2xpZW50UmVjdC55KCksIDEsIG1heChaRVJPX0xBWU9V
VF9VTklULCBvbGRDbGllbnRBZnRlckVkZ2UgLSBjbGllbnRSZWN0LnkoKSkpOworICAgICAgICAg
ICAgcmVjdFRvQXBwbHkgPSBMYXlvdXRSZWN0KGNsaWVudFJlY3QueCgpLCBjbGllbnRSZWN0Lnko
KSwgMSwgbWF4KExheW91dFVuaXQoKSwgb2xkQ2xpZW50QWZ0ZXJFZGdlIC0gY2xpZW50UmVjdC55
KCkpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVjdFRvQXBwbHkgPSBMYXlvdXRSZWN0
KGNsaWVudFJlY3QueCgpLCBjbGllbnRSZWN0LnkoKSwgbWF4KFpFUk9fTEFZT1VUX1VOSVQsIG9s
ZENsaWVudEFmdGVyRWRnZSAtIGNsaWVudFJlY3QueCgpKSwgMSk7CisgICAgICAgICAgICByZWN0
VG9BcHBseSA9IExheW91dFJlY3QoY2xpZW50UmVjdC54KCksIGNsaWVudFJlY3QueSgpLCBtYXgo
TGF5b3V0VW5pdCgpLCBvbGRDbGllbnRBZnRlckVkZ2UgLSBjbGllbnRSZWN0LngoKSksIDEpOwog
ICAgICAgICBhZGRMYXlvdXRPdmVyZmxvdyhyZWN0VG9BcHBseSk7CiAgICAgfQogICAgICAgICAK
QEAgLTE4MDYsNyArMTgwNiw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdEZsb2F0aW5nQmxv
Y2soY28KICAgICAvLyBmb3IgYnkgc2ltcGx5IGNhbGxpbmcgY2FuQ29sbGFwc2VXaXRoTWFyZ2lu
QmVmb3JlLiAgU2VlCiAgICAgLy8gaHR0cDovL3d3dy5oaXhpZS5jaC90ZXN0cy9hZGhvYy9jc3Mv
Ym94L2Jsb2NrL21hcmdpbi1jb2xsYXBzZS8wNDYuaHRtbCBmb3IKICAgICAvLyBhbiBleGFtcGxl
IG9mIHRoaXMgc2NlbmFyaW8uCi0gICAgTGF5b3V0VW5pdCBtYXJnaW5PZmZzZXQgPSBtYXJnaW5J
bmZvLmNhbkNvbGxhcHNlV2l0aE1hcmdpbkJlZm9yZSgpID8gWkVST19MQVlPVVRfVU5JVCA6IG1h
cmdpbkluZm8ubWFyZ2luKCk7CisgICAgTGF5b3V0VW5pdCBtYXJnaW5PZmZzZXQgPSBtYXJnaW5J
bmZvLmNhbkNvbGxhcHNlV2l0aE1hcmdpbkJlZm9yZSgpID8gTGF5b3V0VW5pdCgpIDogbWFyZ2lu
SW5mby5tYXJnaW4oKTsKICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQoKSArIG1h
cmdpbk9mZnNldCk7CiAgICAgcG9zaXRpb25OZXdGbG9hdHMoKTsKICAgICBzZXRMb2dpY2FsSGVp
Z2h0KGxvZ2ljYWxIZWlnaHQoKSAtIG1hcmdpbk9mZnNldCk7CkBAIC0yMjA2LDggKzIyMDYsOCBA
QCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjplc3RpbWF0ZUxvZ2ljYWxUCiAgICAgLy8gcmVsYXlv
dXQgaWYgdGhlcmUgYXJlIGludHJ1ZGluZyBmbG9hdHMuCiAgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
VG9wRXN0aW1hdGUgPSBsb2dpY2FsSGVpZ2h0KCk7CiAgICAgaWYgKCFtYXJnaW5JbmZvLmNhbkNv
bGxhcHNlV2l0aE1hcmdpbkJlZm9yZSgpKSB7Ci0gICAgICAgIExheW91dFVuaXQgcG9zaXRpdmVN
YXJnaW5CZWZvcmUgPSBaRVJPX0xBWU9VVF9VTklUOwotICAgICAgICBMYXlvdXRVbml0IG5lZ2F0
aXZlTWFyZ2luQmVmb3JlID0gWkVST19MQVlPVVRfVU5JVDsKKyAgICAgICAgTGF5b3V0VW5pdCBw
b3NpdGl2ZU1hcmdpbkJlZm9yZSA9IExheW91dFVuaXQoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBu
ZWdhdGl2ZU1hcmdpbkJlZm9yZSA9IExheW91dFVuaXQoKTsKICAgICAgICAgaWYgKGNoaWxkLT5z
ZWxmTmVlZHNMYXlvdXQoKSkgewogICAgICAgICAgICAgLy8gVHJ5IHRvIGRvIGEgYmFzaWMgZXN0
aW1hdGlvbiBvZiBob3cgdGhlIGNvbGxhcHNlIGlzIGdvaW5nIHRvIGdvLgogICAgICAgICAgICAg
bWFyZ2luQmVmb3JlRXN0aW1hdGVGb3JDaGlsZChjaGlsZCwgcG9zaXRpdmVNYXJnaW5CZWZvcmUs
IG5lZ2F0aXZlTWFyZ2luQmVmb3JlKTsKQEAgLTI3OTYsOSArMjc5Niw5IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OnBhaW50Q29sdW1uUnVsZXMoUGFpbnQKIAogICAgIGlmIChjb2xJbmZvLT5wcm9ncmVz
c2lvbkF4aXMoKSA9PSBDb2x1bW5JbmZvOjpJbmxpbmVBeGlzKSB7CiAgICAgICAgIGJvb2wgbGVm
dFRvUmlnaHQgPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgXiBjb2xJbmZvLT5w
cm9ncmVzc2lvbklzUmV2ZXJzZWQoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBjdXJyTG9naWNhbExl
ZnRPZmZzZXQgPSBsZWZ0VG9SaWdodCA/IFpFUk9fTEFZT1VUX1VOSVQgOiBjb250ZW50TG9naWNh
bFdpZHRoKCk7CisgICAgICAgIExheW91dFVuaXQgY3VyckxvZ2ljYWxMZWZ0T2Zmc2V0ID0gbGVm
dFRvUmlnaHQgPyBMYXlvdXRVbml0KCkgOiBjb250ZW50TG9naWNhbFdpZHRoKCk7CiAgICAgICAg
IExheW91dFVuaXQgcnVsZUFkZCA9IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgpOwotICAg
ICAgICBMYXlvdXRVbml0IHJ1bGVMb2dpY2FsTGVmdCA9IGxlZnRUb1JpZ2h0ID8gWkVST19MQVlP
VVRfVU5JVCA6IGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBydWxl
TG9naWNhbExlZnQgPSBsZWZ0VG9SaWdodCA/IExheW91dFVuaXQoKSA6IGNvbnRlbnRMb2dpY2Fs
V2lkdGgoKTsKICAgICAgICAgTGF5b3V0VW5pdCBpbmxpbmVEaXJlY3Rpb25TaXplID0gY29sSW5m
by0+ZGVzaXJlZENvbHVtbldpZHRoKCk7CiAgICAgICAgIEJveFNpZGUgYm94U2lkZSA9IGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkKICAgICAgICAgICAgID8gbGVmdFRvUmlnaHQgPyBCU0xlZnQg
OiBCU1JpZ2h0CkBAIC0yOTg4LDcgKzI5ODgsNyBAQCBib29sIFJlbmRlckJsb2NrOjpwYWludENo
aWxkKFJlbmRlckJveCoKICAgICBpZiAoY2hlY2tBZnRlckFsd2F5cwogICAgICAgICAmJiAoYWJz
b2x1dGVDaGlsZFkgKyBjaGlsZC0+aGVpZ2h0KCkpID4gcGFpbnRJbmZvLnJlY3QueSgpCiAgICAg
ICAgICYmIChhYnNvbHV0ZUNoaWxkWSArIGNoaWxkLT5oZWlnaHQoKSkgPCBwYWludEluZm8ucmVj
dC5tYXhZKCkpIHsKLSAgICAgICAgdmlldygpLT5zZXRCZXN0VHJ1bmNhdGVkQXQoYWJzb2x1dGVD
aGlsZFkgKyBjaGlsZC0+aGVpZ2h0KCkgKyBtYXgoWkVST19MQVlPVVRfVU5JVCwgY2hpbGQtPmNv
bGxhcHNlZE1hcmdpbkFmdGVyKCkpLCB0aGlzLCB0cnVlKTsKKyAgICAgICAgdmlldygpLT5zZXRC
ZXN0VHJ1bmNhdGVkQXQoYWJzb2x1dGVDaGlsZFkgKyBjaGlsZC0+aGVpZ2h0KCkgKyBtYXgoTGF5
b3V0VW5pdCgpLCBjaGlsZC0+Y29sbGFwc2VkTWFyZ2luQWZ0ZXIoKSksIHRoaXMsIHRydWUpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtMzUxNCwx
NCArMzUxNCwxNCBAQCBMYXlvdXRSZWN0IFJlbmRlckJsb2NrOjpibG9ja1NlbGVjdGlvbkdhCiB7
CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wID0gbGFzdExvZ2ljYWxUb3A7CiAgICAgTGF5b3V0
VW5pdCBsb2dpY2FsSGVpZ2h0ID0gYmxvY2tEaXJlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBvZmZz
ZXRGcm9tUm9vdEJsb2NrKSArIGxvZ2ljYWxCb3R0b20gLSBsb2dpY2FsVG9wOwotICAgIGlmIChs
b2dpY2FsSGVpZ2h0IDw9IFpFUk9fTEFZT1VUX1VOSVQpCisgICAgaWYgKGxvZ2ljYWxIZWlnaHQg
PD0gTGF5b3V0VW5pdCgpKQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCiAgICAgLy8g
R2V0IHRoZSBzZWxlY3Rpb24gb2Zmc2V0cyBmb3IgdGhlIGJvdHRvbSBvZiB0aGUgZ2FwCiAgICAg
TGF5b3V0VW5pdCBsb2dpY2FsTGVmdCA9IG1heChsYXN0TG9naWNhbExlZnQsIGxvZ2ljYWxMZWZ0
U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbEJvdHRvbSkpOwogICAgIExheW91dFVu
aXQgbG9naWNhbFJpZ2h0ID0gbWluKGxhc3RMb2dpY2FsUmlnaHQsIGxvZ2ljYWxSaWdodFNlbGVj
dGlvbk9mZnNldChyb290QmxvY2ssIGxvZ2ljYWxCb3R0b20pKTsKICAgICBMYXlvdXRVbml0IGxv
Z2ljYWxXaWR0aCA9IGxvZ2ljYWxSaWdodCAtIGxvZ2ljYWxMZWZ0OwotICAgIGlmIChsb2dpY2Fs
V2lkdGggPD0gWkVST19MQVlPVVRfVU5JVCkKKyAgICBpZiAobG9naWNhbFdpZHRoIDw9IExheW91
dFVuaXQoKSkKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKIAogICAgIExheW91dFJlY3Qg
Z2FwUmVjdCA9IHJvb3RCbG9jay0+bG9naWNhbFJlY3RUb1BoeXNpY2FsUmVjdChyb290QmxvY2tQ
aHlzaWNhbFBvc2l0aW9uLCBMYXlvdXRSZWN0KGxvZ2ljYWxMZWZ0LCBsb2dpY2FsVG9wLCBsb2dp
Y2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpKTsKQEAgLTM1MzcsNyArMzUzNyw3IEBAIExheW91dFJl
Y3QgUmVuZGVyQmxvY2s6OmxvZ2ljYWxMZWZ0U2VsZWMKICAgICBMYXlvdXRVbml0IHJvb3RCbG9j
a0xvZ2ljYWxMZWZ0ID0gbWF4KGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywg
bG9naWNhbFRvcCksIGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNh
bFRvcCArIGxvZ2ljYWxIZWlnaHQpKTsKICAgICBMYXlvdXRVbml0IHJvb3RCbG9ja0xvZ2ljYWxS
aWdodCA9IG1pbihpbmxpbmVEaXJlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBvZmZzZXRGcm9tUm9v
dEJsb2NrKSArIGZsb29yVG9JbnQobG9naWNhbExlZnQpLCBtaW4obG9naWNhbFJpZ2h0U2VsZWN0
aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbFRvcCksIGxvZ2ljYWxSaWdodFNlbGVjdGlvbk9m
ZnNldChyb290QmxvY2ssIGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0KSkpOwogICAgIExheW91
dFVuaXQgcm9vdEJsb2NrTG9naWNhbFdpZHRoID0gcm9vdEJsb2NrTG9naWNhbFJpZ2h0IC0gcm9v
dEJsb2NrTG9naWNhbExlZnQ7Ci0gICAgaWYgKHJvb3RCbG9ja0xvZ2ljYWxXaWR0aCA8PSBaRVJP
X0xBWU9VVF9VTklUKQorICAgIGlmIChyb290QmxvY2tMb2dpY2FsV2lkdGggPD0gTGF5b3V0VW5p
dCgpKQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCiAgICAgTGF5b3V0UmVjdCBnYXBS
ZWN0ID0gcm9vdEJsb2NrLT5sb2dpY2FsUmVjdFRvUGh5c2ljYWxSZWN0KHJvb3RCbG9ja1BoeXNp
Y2FsUG9zaXRpb24sIExheW91dFJlY3Qocm9vdEJsb2NrTG9naWNhbExlZnQsIHJvb3RCbG9ja0xv
Z2ljYWxUb3AsIHJvb3RCbG9ja0xvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCkpOwpAQCAtMzU1
Myw3ICszNTUzLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0U2VsZQog
ICAgIExheW91dFVuaXQgcm9vdEJsb2NrTG9naWNhbExlZnQgPSBtYXgoaW5saW5lRGlyZWN0aW9u
T2Zmc2V0KHJvb3RCbG9jaywgb2Zmc2V0RnJvbVJvb3RCbG9jaykgKyBmbG9vclRvSW50KGxvZ2lj
YWxSaWdodCksIG1heChsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIGxvZ2lj
YWxUb3ApLCBsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIGxvZ2ljYWxUb3Ag
KyBsb2dpY2FsSGVpZ2h0KSkpOwogICAgIExheW91dFVuaXQgcm9vdEJsb2NrTG9naWNhbFJpZ2h0
ID0gbWluKGxvZ2ljYWxSaWdodFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIGxvZ2ljYWxUb3Ap
LCBsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBsb2dpY2FsVG9wICsgbG9n
aWNhbEhlaWdodCkpOwogICAgIExheW91dFVuaXQgcm9vdEJsb2NrTG9naWNhbFdpZHRoID0gcm9v
dEJsb2NrTG9naWNhbFJpZ2h0IC0gcm9vdEJsb2NrTG9naWNhbExlZnQ7Ci0gICAgaWYgKHJvb3RC
bG9ja0xvZ2ljYWxXaWR0aCA8PSBaRVJPX0xBWU9VVF9VTklUKQorICAgIGlmIChyb290QmxvY2tM
b2dpY2FsV2lkdGggPD0gTGF5b3V0VW5pdCgpKQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgp
OwogCiAgICAgTGF5b3V0UmVjdCBnYXBSZWN0ID0gcm9vdEJsb2NrLT5sb2dpY2FsUmVjdFRvUGh5
c2ljYWxSZWN0KHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIExheW91dFJlY3Qocm9vdEJsb2Nr
TG9naWNhbExlZnQsIHJvb3RCbG9ja0xvZ2ljYWxUb3AsIHJvb3RCbG9ja0xvZ2ljYWxXaWR0aCwg
bG9naWNhbEhlaWdodCkpOwpAQCAtMzgxMyw4ICszODEzLDggQEAgdm9pZCBSZW5kZXJCbG9jazo6
cmVtb3ZlRmxvYXRpbmdPYmplY3QoUgogICAgICAgICAgICAgICAgIExheW91dFVuaXQgbG9naWNh
bEJvdHRvbSA9IGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChyKTsKIAogICAgICAgICAgICAgICAgIC8v
IEZpeCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0OTk1Lgot
ICAgICAgICAgICAgICAgIGlmIChsb2dpY2FsQm90dG9tIDwgMCB8fCBsb2dpY2FsQm90dG9tIDwg
bG9naWNhbFRvcCB8fCBsb2dpY2FsVG9wID09IE1BWF9MQVlPVVRfVU5JVCkKLSAgICAgICAgICAg
ICAgICAgICAgbG9naWNhbEJvdHRvbSA9IE1BWF9MQVlPVVRfVU5JVDsKKyAgICAgICAgICAgICAg
ICBpZiAobG9naWNhbEJvdHRvbSA8IDAgfHwgbG9naWNhbEJvdHRvbSA8IGxvZ2ljYWxUb3AgfHwg
bG9naWNhbFRvcCA9PSBMYXlvdXRVbml0OjptYXgoKSkKKyAgICAgICAgICAgICAgICAgICAgbG9n
aWNhbEJvdHRvbSA9IExheW91dFVuaXQ6Om1heCgpOwogICAgICAgICAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAvLyBTcGVjaWFsLWNhc2UgemVyby0gYW5kIGxlc3MtdGhhbi16
ZXJvLWhlaWdodCBmbG9hdHM6IHRob3NlIGRvbid0IHRvdWNoCiAgICAgICAgICAgICAgICAgICAg
IC8vIHRoZSBsaW5lIHRoYXQgdGhleSdyZSBvbiwgYnV0IGl0IHN0aWxsIG5lZWRzIHRvIGJlIGRp
cnRpZWQuIFRoaXMgaXMKQEAgLTQyNjcsNyArNDI2Nyw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxv
Y2s6Om5leHRGbG9hdExvZ2ljYWwKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAg
ICByZXR1cm4gbG9naWNhbEhlaWdodDsKIAotICAgIExheW91dFVuaXQgYm90dG9tID0gTUFYX0xB
WU9VVF9VTklUOworICAgIExheW91dFVuaXQgYm90dG9tID0gTGF5b3V0VW5pdDo6bWF4KCk7CiAg
ICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGlu
Z09iamVjdHMtPnNldCgpOwogICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxv
YXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9y
IGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CkBAIC00
Mjc3LDE0ICs0Mjc3LDE0IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6Om5leHRGbG9hdExvZ2lj
YWwKICAgICAgICAgICAgIGJvdHRvbSA9IG1pbihmbG9hdEJvdHRvbSwgYm90dG9tKTsKICAgICB9
CiAKLSAgICByZXR1cm4gYm90dG9tID09IE1BWF9MQVlPVVRfVU5JVCA/IFpFUk9fTEFZT1VUX1VO
SVQgOiBib3R0b207CisgICAgcmV0dXJuIGJvdHRvbSA9PSBMYXlvdXRVbml0OjptYXgoKSA/IExh
eW91dFVuaXQoKSA6IGJvdHRvbTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bG93ZXN0
RmxvYXRMb2dpY2FsQm90dG9tKEZsb2F0aW5nT2JqZWN0OjpUeXBlIGZsb2F0VHlwZSkgY29uc3QK
IHsKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQotICAgICAgICByZXR1cm4gWkVST19MQVlP
VVRfVU5JVDsKLSAgICBMYXlvdXRVbml0IGxvd2VzdEZsb2F0Qm90dG9tID0gWkVST19MQVlPVVRf
VU5JVDsKKyAgICAgICAgcmV0dXJuIExheW91dFVuaXQoKTsKKyAgICBMYXlvdXRVbml0IGxvd2Vz
dEZsb2F0Qm90dG9tID0gTGF5b3V0VW5pdCgpOwogICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0
JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBGbG9h
dGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAg
IGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewpAQCAtNDMwMiw3ICs0MzAyLDcgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6bWFya0xpbmVzRGlydHlJbkJsb2NrUgogCiAgICAgUm9vdElubGluZUJveCogbG93
ZXN0RGlydHlMaW5lID0gbGFzdFJvb3RCb3goKTsKICAgICBSb290SW5saW5lQm94KiBhZnRlckxv
d2VzdCA9IGxvd2VzdERpcnR5TGluZTsKLSAgICB3aGlsZSAobG93ZXN0RGlydHlMaW5lICYmIGxv
d2VzdERpcnR5TGluZS0+bGluZUJvdHRvbVdpdGhMZWFkaW5nKCkgPj0gbG9naWNhbEJvdHRvbSAm
JiBsb2dpY2FsQm90dG9tIDwgTUFYX0xBWU9VVF9VTklUKSB7CisgICAgd2hpbGUgKGxvd2VzdERp
cnR5TGluZSAmJiBsb3dlc3REaXJ0eUxpbmUtPmxpbmVCb3R0b21XaXRoTGVhZGluZygpID49IGxv
Z2ljYWxCb3R0b20gJiYgbG9naWNhbEJvdHRvbSA8IExheW91dFVuaXQ6Om1heCgpKSB7CiAgICAg
ICAgIGFmdGVyTG93ZXN0ID0gbG93ZXN0RGlydHlMaW5lOwogICAgICAgICBsb3dlc3REaXJ0eUxp
bmUgPSBsb3dlc3REaXJ0eUxpbmUtPnByZXZSb290Qm94KCk7CiAgICAgfQpAQCAtNDM5Myw4ICs0
MzkzLDggQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHMoKQogICAgICAgICBhZGRJbnRy
dWRpbmdGbG9hdHMoYmxvY2ssIGxvZ2ljYWxMZWZ0T2Zmc2V0LCBsb2dpY2FsVG9wT2Zmc2V0KTsK
IAogICAgIGlmIChjaGlsZHJlbklubGluZSgpKSB7Ci0gICAgICAgIExheW91dFVuaXQgY2hhbmdl
TG9naWNhbFRvcCA9IE1BWF9MQVlPVVRfVU5JVDsKLSAgICAgICAgTGF5b3V0VW5pdCBjaGFuZ2VM
b2dpY2FsQm90dG9tID0gTUlOX0xBWU9VVF9VTklUOworICAgICAgICBMYXlvdXRVbml0IGNoYW5n
ZUxvZ2ljYWxUb3AgPSBMYXlvdXRVbml0OjptYXgoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBjaGFu
Z2VMb2dpY2FsQm90dG9tID0gTGF5b3V0VW5pdDo6bWluKCk7CiAgICAgICAgIGlmIChtX2Zsb2F0
aW5nT2JqZWN0cykgewogICAgICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0
aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgICAgICAgICAgRmxv
YXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKQEAg
LTQ0NzUsNyArNDQ3NSw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmFkZE92ZXJoYW5naW5n
RmwKICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGNoaWxkRW5kID0gY2hpbGQtPm1fZmxv
YXRpbmdPYmplY3RzLT5zZXQoKS5lbmQoKTsKICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRl
cmF0b3IgY2hpbGRJdCA9IGNoaWxkLT5tX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuYmVnaW4oKTsg
Y2hpbGRJdCAhPSBjaGlsZEVuZDsgKytjaGlsZEl0KSB7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0
KiByID0gKmNoaWxkSXQ7Ci0gICAgICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbUZvckZsb2F0
ID0gbWluKHRoaXMtPmxvZ2ljYWxCb3R0b21Gb3JGbG9hdChyKSwgTUFYX0xBWU9VVF9VTklUIC0g
Y2hpbGRMb2dpY2FsVG9wKTsKKyAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tRm9yRmxv
YXQgPSBtaW4odGhpcy0+bG9naWNhbEJvdHRvbUZvckZsb2F0KHIpLCBMYXlvdXRVbml0OjptYXgo
KSAtIGNoaWxkTG9naWNhbFRvcCk7CiAgICAgICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSA9
IGNoaWxkTG9naWNhbFRvcCArIGxvZ2ljYWxCb3R0b21Gb3JGbG9hdDsKICAgICAgICAgbG93ZXN0
RmxvYXRMb2dpY2FsQm90dG9tID0gbWF4KGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSwgbG9naWNh
bEJvdHRvbSk7CiAKQEAgLTQ2NjAsNyArNDY2MCw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6
OmdldENsZWFyRGVsdGEoUmUKICAgICB9CiAKICAgICAvLyBXZSBhbHNvIGNsZWFyIGZsb2F0cyBp
ZiB3ZSBhcmUgdG9vIGJpZyB0byBzaXQgb24gdGhlIHNhbWUgbGluZSBhcyBhIGZsb2F0IChhbmQg
d2lzaCB0byBhdm9pZCBmbG9hdHMgYnkgZGVmYXVsdCkuCi0gICAgTGF5b3V0VW5pdCByZXN1bHQg
PSBjbGVhclNldCA/IG1heChaRVJPX0xBWU9VVF9VTklULCBsb2dpY2FsQm90dG9tIC0gbG9naWNh
bFRvcCkgOiBaRVJPX0xBWU9VVF9VTklUOworICAgIExheW91dFVuaXQgcmVzdWx0ID0gY2xlYXJT
ZXQgPyBtYXgoTGF5b3V0VW5pdCgpLCBsb2dpY2FsQm90dG9tIC0gbG9naWNhbFRvcCkgOiBMYXlv
dXRVbml0KCk7CiAgICAgaWYgKCFyZXN1bHQgJiYgY2hpbGQtPmF2b2lkc0Zsb2F0cygpKSB7CiAg
ICAgICAgIExheW91dFVuaXQgbmV3TG9naWNhbFRvcCA9IGxvZ2ljYWxUb3A7CiAgICAgICAgIHdo
aWxlICh0cnVlKSB7CkBAIC01NzgwLDcgKzU3ODAsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21w
dXRlSW5saW5lUHJlZmVycmVkCiAKICAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9IHN0eWxl
KCk7CiAgICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9jayA9IHRoaXMtPmNvbnRhaW5pbmdC
bG9jaygpOwotICAgIExheW91dFVuaXQgY3cgPSBjb250YWluaW5nQmxvY2sgPyBjb250YWluaW5n
QmxvY2stPmNvbnRlbnRMb2dpY2FsV2lkdGgoKSA6IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgTGF5
b3V0VW5pdCBjdyA9IGNvbnRhaW5pbmdCbG9jayA/IGNvbnRhaW5pbmdCbG9jay0+Y29udGVudExv
Z2ljYWxXaWR0aCgpIDogTGF5b3V0VW5pdCgpOwogCiAgICAgLy8gSWYgd2UgYXJlIGF0IHRoZSBz
dGFydCBvZiBhIGxpbmUsIHdlIHdhbnQgdG8gaWdub3JlIGFsbCB3aGl0ZS1zcGFjZS4KICAgICAv
LyBBbHNvIHN0cmlwIHNwYWNlcyBpZiB3ZSBwcmV2aW91c2x5IGhhZCB0ZXh0IHRoYXQgZW5kZWQg
aW4gYSB0cmFpbGluZyBzcGFjZS4KQEAgLTYxNTcsOCArNjE1Nyw4IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmNvbXB1dGVCbG9ja1ByZWZlcnJlZEwKICAgICB9CiAKICAgICAvLyBBbHdheXMgbWFrZSBz
dXJlIHRoZXNlIHZhbHVlcyBhcmUgbm9uLW5lZ2F0aXZlLgotICAgIG1fbWluUHJlZmVycmVkTG9n
aWNhbFdpZHRoID0gbWF4KFpFUk9fTEFZT1VUX1VOSVQsIG1fbWluUHJlZmVycmVkTG9naWNhbFdp
ZHRoKTsKLSAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1heChaRVJPX0xBWU9VVF9V
TklULCBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCk7CisgICAgbV9taW5QcmVmZXJyZWRMb2dp
Y2FsV2lkdGggPSBtYXgoTGF5b3V0VW5pdCgpLCBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCk7
CisgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtYXgoTGF5b3V0VW5pdCgpLCBtX21h
eFByZWZlcnJlZExvZ2ljYWxXaWR0aCk7CiAKICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0
aCA9IG1heChmbG9hdExlZnRXaWR0aCArIGZsb2F0UmlnaHRXaWR0aCwgbV9tYXhQcmVmZXJyZWRM
b2dpY2FsV2lkdGgpOwogfQpAQCAtNjU4OSw3ICs2NTg5LDcgQEAgc3RhdGljIGludCBnZXRIZWln
aHRGb3JMaW5lQ291bnQoUmVuZGVyQgogICAgICAgICBpZiAoYmxvY2stPmNoaWxkcmVuSW5saW5l
KCkpIHsKICAgICAgICAgICAgIGZvciAoUm9vdElubGluZUJveCogYm94ID0gYmxvY2stPmZpcnN0
Um9vdEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFJvb3RCb3goKSkgewogICAgICAgICAgICAg
ICAgIGlmICgrK2NvdW50ID09IGwpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBib3gtPmxp
bmVCb3R0b20oKSArIChpbmNsdWRlQm90dG9tID8gKGJsb2NrLT5ib3JkZXJCb3R0b20oKSArIGJs
b2NrLT5wYWRkaW5nQm90dG9tKCkpIDogWkVST19MQVlPVVRfVU5JVCk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBib3gtPmxpbmVCb3R0b20oKSArIChpbmNsdWRlQm90dG9tID8gKGJsb2Nr
LT5ib3JkZXJCb3R0b20oKSArIGJsb2NrLT5wYWRkaW5nQm90dG9tKCkpIDogTGF5b3V0VW5pdCgp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlIHsKQEAgLTY1OTgsNyAr
NjU5OCw3IEBAIHN0YXRpYyBpbnQgZ2V0SGVpZ2h0Rm9yTGluZUNvdW50KFJlbmRlckIKICAgICAg
ICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tMaW5lcyhvYmopKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGludCByZXN1bHQgPSBnZXRIZWlnaHRGb3JMaW5lQ291bnQodG9SZW5kZXJCbG9jayhvYmop
LCBsLCBmYWxzZSwgY291bnQpOwogICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IC0x
KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIG9iai0+eSgpICsgKGlu
Y2x1ZGVCb3R0b20gPyAoYmxvY2stPmJvcmRlckJvdHRvbSgpICsgYmxvY2stPnBhZGRpbmdCb3R0
b20oKSkgOiBaRVJPX0xBWU9VVF9VTklUKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQgKyBvYmotPnkoKSArIChpbmNsdWRlQm90dG9tID8gKGJsb2NrLT5ib3JkZXJCb3R0
b20oKSArIGJsb2NrLT5wYWRkaW5nQm90dG9tKCkpIDogTGF5b3V0VW5pdCgpKTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKCFvYmotPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQo
KSAmJiAhb2JqLT5pc1J1bkluKCkpCiAgICAgICAgICAgICAgICAgICAgIG5vcm1hbEZsb3dDaGls
ZFdpdGhvdXRMaW5lcyA9IG9iajsKICAgICAgICAgICAgIH0KQEAgLTY2ODcsMTEgKzY2ODcsMTEg
QEAgdm9pZCBSZW5kZXJCbG9jazo6Ym9yZGVyRml0QWRqdXN0KExheW91dAogICAgICAgICByZXR1
cm47CiAKICAgICAvLyBXYWxrIGFueSBub3JtYWwgZmxvdyBsaW5lcyB0byBzbnVnbHkgZml0Lgot
ICAgIExheW91dFVuaXQgbGVmdCA9IE1BWF9MQVlPVVRfVU5JVDsKLSAgICBMYXlvdXRVbml0IHJp
Z2h0ID0gTUlOX0xBWU9VVF9VTklUOworICAgIExheW91dFVuaXQgbGVmdCA9IExheW91dFVuaXQ6
Om1heCgpOworICAgIExheW91dFVuaXQgcmlnaHQgPSBMYXlvdXRVbml0OjptaW4oKTsKICAgICBM
YXlvdXRVbml0IG9sZFdpZHRoID0gcmVjdC53aWR0aCgpOwogICAgIGFkanVzdEZvckJvcmRlckZp
dCgwLCBsZWZ0LCByaWdodCk7Ci0gICAgaWYgKGxlZnQgIT0gTUFYX0xBWU9VVF9VTklUKSB7Cisg
ICAgaWYgKGxlZnQgIT0gTGF5b3V0VW5pdDo6bWF4KCkpIHsKICAgICAgICAgbGVmdCA9IG1pbihs
ZWZ0LCBvbGRXaWR0aCAtIChib3JkZXJSaWdodCgpICsgcGFkZGluZ1JpZ2h0KCkpKTsKIAogICAg
ICAgICBsZWZ0IC09IChib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpKTsKQEAgLTY3MDAsNyAr
NjcwMCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmJvcmRlckZpdEFkanVzdChMYXlvdXQKICAgICAg
ICAgICAgIHJlY3QuZXhwYW5kKC1sZWZ0LCAwKTsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAo
cmlnaHQgIT0gTUlOX0xBWU9VVF9VTklUKSB7CisgICAgaWYgKHJpZ2h0ICE9IExheW91dFVuaXQ6
Om1pbigpKSB7CiAgICAgICAgIHJpZ2h0ID0gbWF4KHJpZ2h0LCBib3JkZXJMZWZ0KCkgKyBwYWRk
aW5nTGVmdCgpKTsKIAogICAgICAgICByaWdodCArPSAoYm9yZGVyUmlnaHQoKSArIHBhZGRpbmdS
aWdodCgpKTsKQEAgLTY4ODcsOCArNjg4Nyw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZEZvY3Vz
UmluZ1JlY3RzKFZlY3QKICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgd3JvbmcgZm9yIGJsb2Nr
LWZsb3dzIHRoYXQgYXJlIGhvcml6b250YWwuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Njc4MQogICAgICAgICBib29sIHByZXZJbmxpbmVIYXNM
aW5lQm94ID0gdG9SZW5kZXJJbmxpbmUoaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpLT5ub2Rl
KCktPnJlbmRlcmVyKCkpLT5maXJzdExpbmVCb3goKTsgCi0gICAgICAgIGZsb2F0IHRvcE1hcmdp
biA9IHByZXZJbmxpbmVIYXNMaW5lQm94ID8gY29sbGFwc2VkTWFyZ2luQmVmb3JlKCkgOiBaRVJP
X0xBWU9VVF9VTklUOwotICAgICAgICBmbG9hdCBib3R0b21NYXJnaW4gPSBuZXh0SW5saW5lSGFz
TGluZUJveCA/IGNvbGxhcHNlZE1hcmdpbkFmdGVyKCkgOiBaRVJPX0xBWU9VVF9VTklUOworICAg
ICAgICBmbG9hdCB0b3BNYXJnaW4gPSBwcmV2SW5saW5lSGFzTGluZUJveCA/IGNvbGxhcHNlZE1h
cmdpbkJlZm9yZSgpIDogTGF5b3V0VW5pdCgpOworICAgICAgICBmbG9hdCBib3R0b21NYXJnaW4g
PSBuZXh0SW5saW5lSGFzTGluZUJveCA/IGNvbGxhcHNlZE1hcmdpbkFmdGVyKCkgOiBMYXlvdXRV
bml0KCk7CiAgICAgICAgIExheW91dFJlY3QgcmVjdChhZGRpdGlvbmFsT2Zmc2V0LngoKSwgYWRk
aXRpb25hbE9mZnNldC55KCkgLSB0b3BNYXJnaW4sIHdpZHRoKCksIGhlaWdodCgpICsgdG9wTWFy
Z2luICsgYm90dG9tTWFyZ2luKTsKICAgICAgICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKICAgICAg
ICAgICAgIHJlY3RzLmFwcGVuZChwaXhlbFNuYXBwZWRJbnRSZWN0KHJlY3QpKTsKQEAgLTY5OTMs
NyArNjk5Myw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmFwcGx5QmVmb3JlQnJlYWsKICAg
ICAgICAgaWYgKGNoZWNrQ29sdW1uQnJlYWtzKQogICAgICAgICAgICAgdmlldygpLT5sYXlvdXRT
dGF0ZSgpLT5hZGRGb3JjZWRDb2x1bW5CcmVhayhjaGlsZCwgbG9naWNhbE9mZnNldCk7CiAgICAg
ICAgIGlmIChjaGVja1JlZ2lvbkJyZWFrcykgewotICAgICAgICAgICAgTGF5b3V0VW5pdCBvZmZz
ZXRCcmVha0FkanVzdG1lbnQgPSBaRVJPX0xBWU9VVF9VTklUOworICAgICAgICAgICAgTGF5b3V0
VW5pdCBvZmZzZXRCcmVha0FkanVzdG1lbnQgPSBMYXlvdXRVbml0KCk7CiAgICAgICAgICAgICBp
ZiAoZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVhZCgpLT5hZGRGb3JjZWRSZWdpb25CcmVhayhvZmZz
ZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgKyBsb2dpY2FsT2Zmc2V0LCBjaGlsZCwgdHJ1
ZSwgJm9mZnNldEJyZWFrQWRqdXN0bWVudCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGxvZ2lj
YWxPZmZzZXQgKyBvZmZzZXRCcmVha0FkanVzdG1lbnQ7CiAgICAgICAgIH0KQEAgLTcwMTUsOCAr
NzAxNSw4IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmFwcGx5QWZ0ZXJCcmVhaygKICAgICAg
ICAgaWYgKGNoZWNrQ29sdW1uQnJlYWtzKQogICAgICAgICAgICAgdmlldygpLT5sYXlvdXRTdGF0
ZSgpLT5hZGRGb3JjZWRDb2x1bW5CcmVhayhjaGlsZCwgbG9naWNhbE9mZnNldCk7CiAgICAgICAg
IGlmIChjaGVja1JlZ2lvbkJyZWFrcykgewotICAgICAgICAgICAgTGF5b3V0VW5pdCBtYXJnaW5P
ZmZzZXQgPSBtYXJnaW5JbmZvLmNhbkNvbGxhcHNlV2l0aE1hcmdpbkJlZm9yZSgpID8gWkVST19M
QVlPVVRfVU5JVCA6IG1hcmdpbkluZm8ubWFyZ2luKCk7Ci0gICAgICAgICAgICBMYXlvdXRVbml0
IG9mZnNldEJyZWFrQWRqdXN0bWVudCA9IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAgICAgICBM
YXlvdXRVbml0IG1hcmdpbk9mZnNldCA9IG1hcmdpbkluZm8uY2FuQ29sbGFwc2VXaXRoTWFyZ2lu
QmVmb3JlKCkgPyBMYXlvdXRVbml0KCkgOiBtYXJnaW5JbmZvLm1hcmdpbigpOworICAgICAgICAg
ICAgTGF5b3V0VW5pdCBvZmZzZXRCcmVha0FkanVzdG1lbnQgPSBMYXlvdXRVbml0KCk7CiAgICAg
ICAgICAgICBpZiAoZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVhZCgpLT5hZGRGb3JjZWRSZWdpb25C
cmVhayhvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgKyBsb2dpY2FsT2Zmc2V0ICsg
bWFyZ2luT2Zmc2V0LCBjaGlsZCwgZmFsc2UsICZvZmZzZXRCcmVha0FkanVzdG1lbnQpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBsb2dpY2FsT2Zmc2V0ICsgb2Zmc2V0QnJlYWtBZGp1c3RtZW50
OwogICAgICAgICB9CkBAIC03MDc4LDcgKzcwNzgsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2Nr
OjphZGp1c3RGb3JVbnNwbGl0CiAgICAgICAgIHx8IChjaGVja1JlZ2lvbkJyZWFrcyAmJiBjaGls
ZC0+c3R5bGUoKS0+cmVnaW9uQnJlYWtJbnNpZGUoKSA9PSBQQkFWT0lEKTsKICAgICBpZiAoIWlz
VW5zcGxpdHRhYmxlKQogICAgICAgICByZXR1cm4gbG9naWNhbE9mZnNldDsKLSAgICBMYXlvdXRV
bml0IGNoaWxkTG9naWNhbEhlaWdodCA9IGxvZ2ljYWxIZWlnaHRGb3JDaGlsZChjaGlsZCkgKyAo
aW5jbHVkZU1hcmdpbnMgPyBtYXJnaW5CZWZvcmVGb3JDaGlsZChjaGlsZCkgKyBtYXJnaW5BZnRl
ckZvckNoaWxkKGNoaWxkKSA6IFpFUk9fTEFZT1VUX1VOSVQpOworICAgIExheW91dFVuaXQgY2hp
bGRMb2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodEZvckNoaWxkKGNoaWxkKSArIChpbmNsdWRl
TWFyZ2lucyA/IG1hcmdpbkJlZm9yZUZvckNoaWxkKGNoaWxkKSArIG1hcmdpbkFmdGVyRm9yQ2hp
bGQoY2hpbGQpIDogTGF5b3V0VW5pdCgpKTsKICAgICBMYXlvdXRTdGF0ZSogbGF5b3V0U3RhdGUg
PSB2aWV3KCktPmxheW91dFN0YXRlKCk7CiAgICAgaWYgKGxheW91dFN0YXRlLT5tX2NvbHVtbklu
Zm8pCiAgICAgICAgIGxheW91dFN0YXRlLT5tX2NvbHVtbkluZm8tPnVwZGF0ZU1pbmltdW1Db2x1
bW5IZWlnaHQoY2hpbGRMb2dpY2FsSGVpZ2h0KTsKQEAgLTcxNTYsMTIgKzcxNTYsMTIgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6YWRqdXN0TGluZVBvc2l0aW9uRm9yUAogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICBpZiAobGluZUhlaWdodCA+IHBhZ2VMb2dpY2FsSGVpZ2h0KSB7CiAgICAgICAg
ICAgICAvLyBTcGxpdCB0aGUgdG9wIG1hcmdpbiBpbiBvcmRlciB0byBhdm9pZCBzcGxpdHRpbmcg
dGhlIHZpc2libGUgcGFydCBvZiB0aGUgbGluZS4KLSAgICAgICAgICAgIHJlbWFpbmluZ0xvZ2lj
YWxIZWlnaHQgLT0gbWluKGxpbmVIZWlnaHQgLSBwYWdlTG9naWNhbEhlaWdodCwgbWF4KFpFUk9f
TEFZT1VUX1VOSVQsIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy55KCkgLSBsaW5lQm94LT5saW5lVG9w
V2l0aExlYWRpbmcoKSkpOworICAgICAgICAgICAgcmVtYWluaW5nTG9naWNhbEhlaWdodCAtPSBt
aW4obGluZUhlaWdodCAtIHBhZ2VMb2dpY2FsSGVpZ2h0LCBtYXgoTGF5b3V0VW5pdCgpLCBsb2dp
Y2FsVmlzdWFsT3ZlcmZsb3cueSgpIC0gbGluZUJveC0+bGluZVRvcFdpdGhMZWFkaW5nKCkpKTsK
ICAgICAgICAgfQotICAgICAgICBMYXlvdXRVbml0IHRvdGFsTG9naWNhbEhlaWdodCA9IGxpbmVI
ZWlnaHQgKyBtYXgoWkVST19MQVlPVVRfVU5JVCwgbG9naWNhbE9mZnNldCk7CisgICAgICAgIExh
eW91dFVuaXQgdG90YWxMb2dpY2FsSGVpZ2h0ID0gbGluZUhlaWdodCArIG1heChMYXlvdXRVbml0
KCksIGxvZ2ljYWxPZmZzZXQpOwogICAgICAgICBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0
QXROZXdPZmZzZXQgPSBoYXNVbmlmb3JtUGFnZUxvZ2ljYWxIZWlnaHQgPyBwYWdlTG9naWNhbEhl
aWdodCA6IHBhZ2VMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KGxvZ2ljYWxPZmZzZXQgKyByZW1haW5p
bmdMb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgaWYgKGxpbmVCb3ggPT0gZmlyc3RSb290Qm94KCkg
JiYgdG90YWxMb2dpY2FsSGVpZ2h0IDwgcGFnZUxvZ2ljYWxIZWlnaHRBdE5ld09mZnNldCAmJiAh
aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgIWlzVGFibGVDZWxsKCkpCi0gICAgICAgICAgICBz
ZXRQYWdpbmF0aW9uU3RydXQocmVtYWluaW5nTG9naWNhbEhlaWdodCArIG1heChaRVJPX0xBWU9V
VF9VTklULCBsb2dpY2FsT2Zmc2V0KSk7CisgICAgICAgICAgICBzZXRQYWdpbmF0aW9uU3RydXQo
cmVtYWluaW5nTG9naWNhbEhlaWdodCArIG1heChMYXlvdXRVbml0KCksIGxvZ2ljYWxPZmZzZXQp
KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBkZWx0YSArPSByZW1haW5pbmdMb2dpY2Fs
SGVpZ2h0OwogICAgICAgICAgICAgbGluZUJveC0+c2V0UGFnaW5hdGlvblN0cnV0KHJlbWFpbmlu
Z0xvZ2ljYWxIZWlnaHQpOwpAQCAtNzI0OSw3ICs3MjQ5LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJC
bG9jazo6b2Zmc2V0RnJvbUxvZ2ljYQogewogICAgIExheW91dFN0YXRlKiBsYXlvdXRTdGF0ZSA9
IHZpZXcoKS0+bGF5b3V0U3RhdGUoKTsKICAgICBpZiAobGF5b3V0U3RhdGUgJiYgIWxheW91dFN0
YXRlLT5pc1BhZ2luYXRlZCgpKQotICAgICAgICByZXR1cm4gWkVST19MQVlPVVRfVU5JVDsKKyAg
ICAgICAgcmV0dXJuIExheW91dFVuaXQoKTsKICAgICBpZiAobGF5b3V0U3RhdGUpIHsKICAgICAg
ICAgLy8gRklYTUU6IFNhbml0eSBjaGVjayB0aGF0IHRoZSByZW5kZXJlciBpbiB0aGUgbGF5b3V0
IHN0YXRlIGlzIG91cnMsIHNpbmNlIG90aGVyd2lzZSB0aGUgY29tcHV0YXRpb24gd2lsbCBiZSBv
ZmYuCiAgICAgICAgIC8vIFJpZ2h0IG5vdyB0aGlzIGFzc2VydCBnZXRzIGhpdCBpbnNpZGUgY29t
cHV0ZUxvZ2ljYWxIZWlnaHQgZm9yIHBlcmNlbnRhZ2UgbWFyZ2lucywgc2luY2UgdGhleSdyZSBj
b21wdXRlZCB1c2luZwpAQCAtNzI2NSw3ICs3MjY1LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9j
azo6b2Zmc2V0RnJvbUxvZ2ljYQogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgc2xvd2VyIHBhdGgg
dGhhdCBkb2Vzbid0IHVzZSBsYXlvdXQgc3RhdGUgYW5kIHJlbGllcyBvbiBnZXR0aW5nIHlvdXIg
bG9naWNhbCB0b3AgaW5zaWRlIHRoZSBlbmNsb3NpbmcgZmxvdyB0aHJlYWQuIEl0IGRvZXNuJ3QK
ICAgICAvLyB3b3JrIHdpdGggY29sdW1ucyBvciBwYWdlcyBjdXJyZW50bHksIGJ1dCBpdCBzaG91
bGQgb25jZSB0aGV5IGhhdmUgYmVlbiBzd2l0Y2hlZCBvdmVyIHRvIHVzaW5nIGZsb3cgdGhyZWFk
cy4KICAgICBpZiAoIWluUmVuZGVyRmxvd1RocmVhZCgpKQotICAgICAgICByZXR1cm4gWkVST19M
QVlPVVRfVU5JVDsKKyAgICAgICAgcmV0dXJuIExheW91dFVuaXQoKTsKIAogICAgIGNvbnN0IFJl
bmRlckJsb2NrKiBjdXJyZW50QmxvY2sgPSB0aGlzOwogICAgIExheW91dFJlY3QgYmxvY2tSZWN0
KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKTsKQEAgLTcyNzQsNyArNzI3NCw3IEBAIExheW91dFVu
aXQgUmVuZGVyQmxvY2s6Om9mZnNldEZyb21Mb2dpY2EKICAgICAgICAgUmVuZGVyQmxvY2sqIGNv
bnRhaW5lckJsb2NrID0gY3VycmVudEJsb2NrLT5jb250YWluaW5nQmxvY2soKTsKICAgICAgICAg
QVNTRVJUKGNvbnRhaW5lckJsb2NrKTsKICAgICAgICAgaWYgKCFjb250YWluZXJCbG9jaykKLSAg
ICAgICAgICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOworICAgICAgICAgICAgcmV0dXJuIExh
eW91dFVuaXQoKTsKICAgICAgICAgTGF5b3V0UG9pbnQgY3VycmVudEJsb2NrTG9jYXRpb24gPSBj
dXJyZW50QmxvY2stPmxvY2F0aW9uKCk7CiAKICAgICAgICAgaWYgKGNvbnRhaW5lckJsb2NrLT5z
dHlsZSgpLT53cml0aW5nTW9kZSgpICE9IGN1cnJlbnRCbG9jay0+c3R5bGUoKS0+d3JpdGluZ01v
ZGUoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlz
aW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDksNyArMTQ5LDcgQEAgcHVibGljOgogICAgIC8vIGNvbXB1dGUg
dGhlIHJlZ2lvbiBhbGwgb3ZlciBhZ2FpbiB3aGVuIHlvdSBhbHJlYWR5IGtub3cgaXQuCiAgICAg
TGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JMaW5lKExheW91dFVuaXQgcG9zaXRp
b24sIGJvb2wgZmlyc3RMaW5lLCBSZW5kZXJSZWdpb24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmZz
ZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAw
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1heChaRVJPX0xBWU9VVF9VTklULCBsb2dp
Y2FsUmlnaHRPZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBmaXJzdExpbmUsIHJlZ2lvbiwgb2Zmc2V0
RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSwgbG9naWNhbEhlaWdodCkKKyAgICAgICAgcmV0dXJu
IG1heChMYXlvdXRVbml0KCksIGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUocG9zaXRpb24sIGZp
cnN0TGluZSwgcmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlLCBsb2dpY2Fs
SGVpZ2h0KQogICAgICAgICAgICAgLSBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUocG9zaXRpb24s
IGZpcnN0TGluZSwgcmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlLCBsb2dp
Y2FsSGVpZ2h0KSk7CiAgICAgfQogICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9y
TGluZShMYXlvdXRVbml0IHBvc2l0aW9uLCBib29sIGZpcnN0TGluZSwgUmVuZGVyUmVnaW9uKiBy
ZWdpb24sIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSwgTGF5b3V0
VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMCkgY29uc3QgCkBAIC0yOTcsMTIgKzI5NywxMiBAQCBwdWJs
aWM6CiAgICAgdW5zaWduZWQgY29sdW1uQ291bnQoQ29sdW1uSW5mbyopIGNvbnN0OwogICAgIExh
eW91dFJlY3QgY29sdW1uUmVjdEF0KENvbHVtbkluZm8qLCB1bnNpZ25lZCkgY29uc3Q7CiAKLSAg
ICBMYXlvdXRVbml0IHBhZ2luYXRpb25TdHJ1dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEg
PyBtX3JhcmVEYXRhLT5tX3BhZ2luYXRpb25TdHJ1dCA6IFpFUk9fTEFZT1VUX1VOSVQ7IH0KKyAg
ICBMYXlvdXRVbml0IHBhZ2luYXRpb25TdHJ1dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEg
PyBtX3JhcmVEYXRhLT5tX3BhZ2luYXRpb25TdHJ1dCA6IExheW91dFVuaXQoKTsgfQogICAgIHZv
aWQgc2V0UGFnaW5hdGlvblN0cnV0KExheW91dFVuaXQpOwogICAgIAogICAgIC8vIFRoZSBwYWdl
IGxvZ2ljYWwgb2Zmc2V0IGlzIHRoZSBvYmplY3QncyBvZmZzZXQgZnJvbSB0aGUgdG9wIG9mIHRo
ZSBwYWdlIGluIHRoZSBwYWdlIHByb2dyZXNzaW9uCiAgICAgLy8gZGlyZWN0aW9uIChzbyBhbiB4
LW9mZnNldCBpbiB2ZXJ0aWNhbCB0ZXh0IGFuZCBhIHktb2Zmc2V0IGZvciBob3Jpem9udGFsIHRl
eHQpLgotICAgIExheW91dFVuaXQgcGFnZUxvZ2ljYWxPZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9wYWdlTG9naWNhbE9mZnNldCA6IFpFUk9fTEFZT1VU
X1VOSVQ7IH0KKyAgICBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsT2Zmc2V0KCkgY29uc3QgeyByZXR1
cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fcGFnZUxvZ2ljYWxPZmZzZXQgOiBMYXlvdXRV
bml0KCk7IH0KICAgICB2b2lkIHNldFBhZ2VMb2dpY2FsT2Zmc2V0KExheW91dFVuaXQpOwogCiAg
ICAgUm9vdElubGluZUJveCogbGluZUdyaWRCb3goKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRh
ID8gbV9yYXJlRGF0YS0+bV9saW5lR3JpZEJveCA6IDA7IH0KQEAgLTM3MSw3ICszNzEsNyBAQCBw
dWJsaWM6CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KFJlbmRl
clJlZ2lvbiosIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgY29u
c3Q7CiAgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JDb250ZW50KFJlbmRl
clJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBh
Z2UpIGNvbnN0CiAgICAgeyAKLSAgICAgICAgcmV0dXJuIG1heChaRVJPX0xBWU9VVF9VTklULCBs
b2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BP
ZkZpcnN0UGFnZSkgLQorICAgICAgICByZXR1cm4gbWF4KExheW91dFVuaXQoKSwgbG9naWNhbFJp
Z2h0T2Zmc2V0Rm9yQ29udGVudChyZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBh
Z2UpIC0KICAgICAgICAgICAgIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudChyZWdpb24sIG9m
ZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpKTsgfQogICAgIExheW91dFVuaXQgc3RhcnRP
ZmZzZXRGb3JDb250ZW50KFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IG9mZnNldEZy
b21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0CiAgICAgewpAQCAtMTE0NCwyMCArMTE0NCwy
MCBAQCBwcm90ZWN0ZWQ6CiAKICAgICAgICAgc3RhdGljIExheW91dFVuaXQgcG9zaXRpdmVNYXJn
aW5CZWZvcmVEZWZhdWx0KGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaykKICAgICAgICAgeyAKLSAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1heChibG9jay0+bWFyZ2luQmVmb3JlKCksIFpFUk9fTEFZ
T1VUX1VOSVQpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4PExheW91dFVuaXQ+KGJsb2Nr
LT5tYXJnaW5CZWZvcmUoKSwgMCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRp
YyBMYXlvdXRVbml0IG5lZ2F0aXZlTWFyZ2luQmVmb3JlRGVmYXVsdChjb25zdCBSZW5kZXJCbG9j
ayogYmxvY2spCiAgICAgICAgIHsgCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptYXgoLWJsb2Nr
LT5tYXJnaW5CZWZvcmUoKSwgWkVST19MQVlPVVRfVU5JVCk7CisgICAgICAgICAgICByZXR1cm4g
c3RkOjptYXg8TGF5b3V0VW5pdD4oLWJsb2NrLT5tYXJnaW5CZWZvcmUoKSwgMCk7CiAgICAgICAg
IH0KICAgICAgICAgc3RhdGljIExheW91dFVuaXQgcG9zaXRpdmVNYXJnaW5BZnRlckRlZmF1bHQo
Y29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
c3RkOjptYXgoYmxvY2stPm1hcmdpbkFmdGVyKCksIFpFUk9fTEFZT1VUX1VOSVQpOworICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bWF4PExheW91dFVuaXQ+KGJsb2NrLT5tYXJnaW5BZnRlcigpLCAw
KTsKICAgICAgICAgfQogICAgICAgICBzdGF0aWMgTGF5b3V0VW5pdCBuZWdhdGl2ZU1hcmdpbkFm
dGVyRGVmYXVsdChjb25zdCBSZW5kZXJCbG9jayogYmxvY2spCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1heCgtYmxvY2stPm1hcmdpbkFmdGVyKCksIFpFUk9fTEFZT1VUX1VO
SVQpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4PExheW91dFVuaXQ+KC1ibG9jay0+bWFy
Z2luQWZ0ZXIoKSwgMCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIE1hcmdpblZhbHVl
cyBtX21hcmdpbnM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tM
aW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyNDgsOCArMTI0OCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZVJlcGFpbnRSYW5nZUZy
b21Cb3goUm9vdElubGluZUJveCogYm94LCBMYXlvdXRVbml0IHBhZ2luYXRpb25EZWx0YSA9IDAp
CiAgICAgewogICAgICAgICBtX3VzZXNSZXBhaW50Qm91bmRzID0gdHJ1ZTsKLSAgICAgICAgbV9y
ZXBhaW50TG9naWNhbFRvcCA9IG1pbihtX3JlcGFpbnRMb2dpY2FsVG9wLCBib3gtPmxvZ2ljYWxU
b3BWaXN1YWxPdmVyZmxvdygpICsgbWluKHBhZ2luYXRpb25EZWx0YSwgWkVST19MQVlPVVRfVU5J
VCkpOwotICAgICAgICBtX3JlcGFpbnRMb2dpY2FsQm90dG9tID0gbWF4KG1fcmVwYWludExvZ2lj
YWxCb3R0b20sIGJveC0+bG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93KCkgKyBtYXgocGFnaW5h
dGlvbkRlbHRhLCBaRVJPX0xBWU9VVF9VTklUKSk7CisgICAgICAgIG1fcmVwYWludExvZ2ljYWxU
b3AgPSBtaW4obV9yZXBhaW50TG9naWNhbFRvcCwgYm94LT5sb2dpY2FsVG9wVmlzdWFsT3ZlcmZs
b3coKSArIG1pbjxMYXlvdXRVbml0PihwYWdpbmF0aW9uRGVsdGEsIDApKTsKKyAgICAgICAgbV9y
ZXBhaW50TG9naWNhbEJvdHRvbSA9IG1heChtX3JlcGFpbnRMb2dpY2FsQm90dG9tLCBib3gtPmxv
Z2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdygpICsgbWF4PExheW91dFVuaXQ+KHBhZ2luYXRpb25E
ZWx0YSwgMCkpOwogICAgIH0KICAgICAKICAgICBib29sIGVuZExpbmVNYXRjaGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9lbmRMaW5lTWF0Y2hlZDsgfQpAQCAtMTc1Myw3ICsxNzUzLDcgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6Y2hlY2tGbG9hdHNJbkNsZWFuTGluZQogICAgICAgICAgICAgTGF5b3V0VW5p
dCBmbG9hdFRvcCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmbG9hdHNbZmxvYXRJbmRl
eF0ucmVjdC55KCkgOiBmbG9hdHNbZmxvYXRJbmRleF0ucmVjdC54KCk7CiAgICAgICAgICAgICBM
YXlvdXRVbml0IGZsb2F0SGVpZ2h0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG1heChm
bG9hdHNbZmxvYXRJbmRleF0ucmVjdC5oZWlnaHQoKSwgbmV3U2l6ZS5oZWlnaHQoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiBtYXgoZmxvYXRzW2Zsb2F0SW5kZXhdLnJlY3Qud2lkdGgoKSwgbmV3U2l6ZS53aWR0aCgp
KTsKLSAgICAgICAgICAgIGZsb2F0SGVpZ2h0ID0gbWluKGZsb2F0SGVpZ2h0LCBNQVhfTEFZT1VU
X1VOSVQgLSBmbG9hdFRvcCk7CisgICAgICAgICAgICBmbG9hdEhlaWdodCA9IG1pbihmbG9hdEhl
aWdodCwgTGF5b3V0VW5pdDo6bWF4KCkgLSBmbG9hdFRvcCk7CiAgICAgICAgICAgICBsaW5lLT5t
YXJrRGlydHkoKTsKICAgICAgICAgICAgIG1hcmtMaW5lc0RpcnR5SW5CbG9ja1JhbmdlKGxpbmUt
PmxpbmVCb3R0b21XaXRoTGVhZGluZygpLCBmbG9hdFRvcCArIGZsb2F0SGVpZ2h0LCBsaW5lKTsK
ICAgICAgICAgICAgIGZsb2F0c1tmbG9hdEluZGV4XS5yZWN0LnNldFNpemUobmV3U2l6ZSk7CkBA
IC0xOTU0LDcgKzE5NTQsNyBAQCBib29sIFJlbmRlckJsb2NrOjpjaGVja1BhZ2luYXRpb25BbmRG
bG9hCiAgICAgd2hpbGUgKFJvb3RJbmxpbmVCb3gqIG5leHRMaW5lID0gbGFzdExpbmUtPm5leHRS
b290Qm94KCkpCiAgICAgICAgIGxhc3RMaW5lID0gbmV4dExpbmU7CiAKLSAgICBMYXlvdXRVbml0
IGxvZ2ljYWxCb3R0b20gPSBsYXN0TGluZS0+bGluZUJvdHRvbVdpdGhMZWFkaW5nKCkgKyBhYnNv
bHV0ZVZhbHVlKGxpbmVEZWx0YSk7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tID0gbGFz
dExpbmUtPmxpbmVCb3R0b21XaXRoTGVhZGluZygpICsgbGluZURlbHRhLmFicygpOwogCiAgICAg
Y29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09i
amVjdHMtPnNldCgpOwogICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRp
bmdPYmplY3RTZXQuZW5kKCk7CkBAIC0yOTE4LDcgKzI5MTgsNyBAQCBJbmxpbmVJdGVyYXRvciBS
ZW5kZXJCbG9jazo6TGluZUJyZWFrZXI6CiAKIHZvaWQgUmVuZGVyQmxvY2s6OmFkZE92ZXJmbG93
RnJvbUlubGluZUNoaWxkcmVuKCkKIHsKLSAgICBMYXlvdXRVbml0IGVuZFBhZGRpbmcgPSBoYXNP
dmVyZmxvd0NsaXAoKSA/IHBhZGRpbmdFbmQoKSA6IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgTGF5
b3V0VW5pdCBlbmRQYWRkaW5nID0gaGFzT3ZlcmZsb3dDbGlwKCkgPyBwYWRkaW5nRW5kKCkgOiBM
YXlvdXRVbml0KCk7CiAgICAgLy8gRklYTUU6IE5lZWQgdG8gZmluZCBhbm90aGVyIHdheSB0byBk
byB0aGlzLCBzaW5jZSBzY3JvbGxiYXJzIGNvdWxkIHNob3cgd2hlbiB3ZSBkb24ndCB3YW50IHRo
ZW0gdG8uCiAgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmICFlbmRQYWRkaW5nICYmIG5vZGUo
KSAmJiBub2RlKCktPmlzUm9vdEVkaXRhYmxlRWxlbWVudCgpICYmIHN0eWxlKCktPmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgZW5kUGFkZGluZyA9IDE7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Myw3
ICszNjMsNyBAQCBpbnQgUmVuZGVyQm94OjpzY3JvbGxXaWR0aCgpIGNvbnN0CiAgICAgLy8gRklY
TUU6IE5lZWQgdG8gd29yayByaWdodCB3aXRoIHdyaXRpbmcgbW9kZXMuCiAgICAgaWYgKHN0eWxl
KCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgcmV0dXJuIHNuYXBTaXplVG9Q
aXhlbChtYXgoY2xpZW50V2lkdGgoKSwgbGF5b3V0T3ZlcmZsb3dSZWN0KCkubWF4WCgpIC0gYm9y
ZGVyTGVmdCgpKSwgeCgpICsgY2xpZW50TGVmdCgpKTsKLSAgICByZXR1cm4gY2xpZW50V2lkdGgo
KSAtIG1pbihaRVJPX0xBWU9VVF9VTklULCBsYXlvdXRPdmVyZmxvd1JlY3QoKS54KCkgLSBib3Jk
ZXJMZWZ0KCkpOworICAgIHJldHVybiBjbGllbnRXaWR0aCgpIC0gbWluKExheW91dFVuaXQoKSwg
bGF5b3V0T3ZlcmZsb3dSZWN0KCkueCgpIC0gYm9yZGVyTGVmdCgpKTsKIH0KIAogaW50IFJlbmRl
ckJveDo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKQEAgLTExNzksNyArMTE3OSw3IEBAIExheW91dFVu
aXQgUmVuZGVyQm94OjpzaHJpbmtMb2dpY2FsV2lkdGgKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxU
b3BQb3NpdGlvbiA9IGxvZ2ljYWxUb3AoKTsKICAgICBMYXlvdXRVbml0IGFkanVzdGVkUGFnZU9m
ZnNldEZvckNvbnRhaW5pbmdCbG9jayA9IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2Ug
LSBsb2dpY2FsVG9wKCk7CiAgICAgaWYgKHJlZ2lvbikgewotICAgICAgICBMYXlvdXRVbml0IG9m
ZnNldEZyb21Mb2dpY2FsVG9wT2ZSZWdpb24gPSByZWdpb24gPyByZWdpb24tPmxvZ2ljYWxUb3BG
b3JGbG93VGhyZWFkQ29udGVudCgpIC0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSA6
IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAgIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxU
b3BPZlJlZ2lvbiA9IHJlZ2lvbiA/IHJlZ2lvbi0+bG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250
ZW50KCkgLSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlIDogTGF5b3V0VW5pdCgpOwog
ICAgICAgICBsb2dpY2FsVG9wUG9zaXRpb24gPSBtYXgobG9naWNhbFRvcFBvc2l0aW9uLCBsb2dp
Y2FsVG9wUG9zaXRpb24gKyBvZmZzZXRGcm9tTG9naWNhbFRvcE9mUmVnaW9uKTsKICAgICAgICAg
Y29udGFpbmluZ0Jsb2NrUmVnaW9uID0gY2ItPmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMocmVn
aW9uKTsKICAgICB9CkBAIC0xMjQxLDcgKzEyNDEsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6
Y29udGFpbmluZ0Jsb2NrQXZhCiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wUG9zaXRpb24gPSBs
b2dpY2FsVG9wKCk7CiAgICAgTGF5b3V0VW5pdCBhZGp1c3RlZFBhZ2VPZmZzZXRGb3JDb250YWlu
aW5nQmxvY2sgPSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlIC0gbG9naWNhbFRvcCgp
OwogICAgIGlmIChyZWdpb24pIHsKLSAgICAgICAgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNh
bFRvcE9mUmVnaW9uID0gcmVnaW9uID8gcmVnaW9uLT5sb2dpY2FsVG9wRm9yRmxvd1RocmVhZENv
bnRlbnQoKSAtIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UgOiBaRVJPX0xBWU9VVF9V
TklUOworICAgICAgICBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZSZWdpb24gPSBy
ZWdpb24gPyByZWdpb24tPmxvZ2ljYWxUb3BGb3JGbG93VGhyZWFkQ29udGVudCgpIC0gb2Zmc2V0
RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSA6IExheW91dFVuaXQoKTsKICAgICAgICAgbG9naWNh
bFRvcFBvc2l0aW9uID0gbWF4KGxvZ2ljYWxUb3BQb3NpdGlvbiwgbG9naWNhbFRvcFBvc2l0aW9u
ICsgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZlJlZ2lvbik7CiAgICAgICAgIGNvbnRhaW5pbmdCbG9j
a1JlZ2lvbiA9IGNiLT5jbGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKHJlZ2lvbik7CiAgICAgfQpA
QCAtMzUzMyw3ICszNTMzLDcgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJveDo6cG9zaXRpb25G
b3JQbwogICAgIH0KIAogICAgIC8vIFBhc3Mgb2ZmIHRvIHRoZSBjbG9zZXN0IGNoaWxkLgotICAg
IExheW91dFVuaXQgbWluRGlzdCA9IE1BWF9MQVlPVVRfVU5JVDsKKyAgICBMYXlvdXRVbml0IG1p
bkRpc3QgPSBMYXlvdXRVbml0OjptYXgoKTsKICAgICBSZW5kZXJCb3gqIGNsb3Nlc3RSZW5kZXJl
ciA9IDA7CiAgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRQb2ludCA9IHBvaW50OwogICAgIGlmIChp
c1RhYmxlUm93KCkpCkBAIC0zNTQ5LDkgKzM1NDksOSBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVy
Qm94Ojpwb3NpdGlvbkZvclBvCiAgICAgICAgIAogICAgICAgICBSZW5kZXJCb3gqIHJlbmRlcmVy
ID0gdG9SZW5kZXJCb3gocmVuZGVyT2JqZWN0KTsKIAotICAgICAgICBMYXlvdXRVbml0IHRvcCA9
IHJlbmRlcmVyLT5ib3JkZXJUb3AoKSArIHJlbmRlcmVyLT5wYWRkaW5nVG9wKCkgKyAoaXNUYWJs
ZVJvdygpID8gWkVST19MQVlPVVRfVU5JVCA6IHJlbmRlcmVyLT55KCkpOworICAgICAgICBMYXlv
dXRVbml0IHRvcCA9IHJlbmRlcmVyLT5ib3JkZXJUb3AoKSArIHJlbmRlcmVyLT5wYWRkaW5nVG9w
KCkgKyAoaXNUYWJsZVJvdygpID8gTGF5b3V0VW5pdCgpIDogcmVuZGVyZXItPnkoKSk7CiAgICAg
ICAgIExheW91dFVuaXQgYm90dG9tID0gdG9wICsgcmVuZGVyZXItPmNvbnRlbnRIZWlnaHQoKTsK
LSAgICAgICAgTGF5b3V0VW5pdCBsZWZ0ID0gcmVuZGVyZXItPmJvcmRlckxlZnQoKSArIHJlbmRl
cmVyLT5wYWRkaW5nTGVmdCgpICsgKGlzVGFibGVSb3coKSA/IFpFUk9fTEFZT1VUX1VOSVQgOiBy
ZW5kZXJlci0+eCgpKTsKKyAgICAgICAgTGF5b3V0VW5pdCBsZWZ0ID0gcmVuZGVyZXItPmJvcmRl
ckxlZnQoKSArIHJlbmRlcmVyLT5wYWRkaW5nTGVmdCgpICsgKGlzVGFibGVSb3coKSA/IExheW91
dFVuaXQoKSA6IHJlbmRlcmVyLT54KCkpOwogICAgICAgICBMYXlvdXRVbml0IHJpZ2h0ID0gbGVm
dCArIHJlbmRlcmVyLT5jb250ZW50V2lkdGgoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChwb2lu
dC54KCkgPD0gcmlnaHQgJiYgcG9pbnQueCgpID49IGxlZnQgJiYgcG9pbnQueSgpIDw9IHRvcCAm
JiBwb2ludC55KCkgPj0gYm90dG9tKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5oCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAgIExh
eW91dFVuaXQgbG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSA/IHdpZHRoKCkgOiBoZWlnaHQoKTsgfQogICAgIExheW91dFVuaXQg
bG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyBoZWlnaHQoKSA6IHdpZHRoKCk7IH0KIAotICAgIExheW91dFVuaXQgY29uc3Ry
YWluTG9naWNhbFdpZHRoSW5SZWdpb25CeU1pbk1heChMYXlvdXRVbml0LCBMYXlvdXRVbml0LCBS
ZW5kZXJCbG9jayosIFJlbmRlclJlZ2lvbiogPSAwLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dp
Y2FsVG9wT2ZGaXJzdFBhZ2UgPSBaRVJPX0xBWU9VVF9VTklUKSBjb25zdDsKKyAgICBMYXlvdXRV
bml0IGNvbnN0cmFpbkxvZ2ljYWxXaWR0aEluUmVnaW9uQnlNaW5NYXgoTGF5b3V0VW5pdCwgTGF5
b3V0VW5pdCwgUmVuZGVyQmxvY2sqLCBSZW5kZXJSZWdpb24qID0gMCwgTGF5b3V0VW5pdCBvZmZz
ZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlID0gTGF5b3V0VW5pdCgpKSBjb25zdDsKICAgICBM
YXlvdXRVbml0IGNvbnN0cmFpbkxvZ2ljYWxIZWlnaHRCeU1pbk1heChMYXlvdXRVbml0KSBjb25z
dDsKIAogICAgIGludCBwaXhlbFNuYXBwZWRMb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4g
c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHBpeGVsU25hcHBlZEhlaWdodCgp
IDogcGl4ZWxTbmFwcGVkV2lkdGgoKTsgfQpAQCAtMzc1LDcgKzM3NSw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsb2dpY2FsSGVp
Z2h0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYp
IGNvbnN0OwogCiAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogcmVuZGVyQm94UmVnaW9uSW5mbyhS
ZW5kZXJSZWdpb24qLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2Us
IFJlbmRlckJveFJlZ2lvbkluZm9GbGFncyA9IENhY2hlUmVuZGVyQm94UmVnaW9uSW5mbykgY29u
c3Q7Ci0gICAgdm9pZCBjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb24oTG9naWNhbEV4dGVudENv
bXB1dGVkVmFsdWVzJiwgUmVuZGVyUmVnaW9uKiA9IDAsIExheW91dFVuaXQgb2Zmc2V0RnJvbUxv
Z2ljYWxUb3BPZkZpcnN0UGFnZSA9IFpFUk9fTEFZT1VUX1VOSVQpIGNvbnN0OworICAgIHZvaWQg
Y29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYs
IFJlbmRlclJlZ2lvbiogPSAwLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJz
dFBhZ2UgPSBMYXlvdXRVbml0KCkpIGNvbnN0OwogCiAgICAgYm9vbCBzdHJldGNoZXNUb1ZpZXdw
b3J0KCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU1Miw3ICs1NTIsNyBAQCBpbnQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBpeGVsU25hcHBl
ZE9mCiAKIExheW91dFVuaXQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVkQ1NTUGFkZGlu
Z1RvcCgpIGNvbnN0CiB7Ci0gICAgTGF5b3V0VW5pdCB3ID0gWkVST19MQVlPVVRfVU5JVDsKKyAg
ICBMYXlvdXRVbml0IHcgPSBMYXlvdXRVbml0KCk7CiAgICAgUmVuZGVyVmlldyogcmVuZGVyVmll
dyA9IDA7CiAgICAgTGVuZ3RoIHBhZGRpbmcgPSBzdHlsZSgpLT5wYWRkaW5nVG9wKCk7CiAgICAg
aWYgKHBhZGRpbmcuaXNQZXJjZW50KCkpCkBAIC01NjQsNyArNTY0LDcgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0ZQogCiBMYXlvdXRVbml0IFJlbmRlckJveE1vZGVs
T2JqZWN0Ojpjb21wdXRlZENTU1BhZGRpbmdCb3R0b20oKSBjb25zdAogewotICAgIExheW91dFVu
aXQgdyA9IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgTGF5b3V0VW5pdCB3ID0gTGF5b3V0VW5pdCgp
OwogICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSAwOwogICAgIExlbmd0aCBwYWRkaW5nID0g
c3R5bGUoKS0+cGFkZGluZ0JvdHRvbSgpOwogICAgIGlmIChwYWRkaW5nLmlzUGVyY2VudCgpKQpA
QCAtNTc2LDcgKzU3Niw3IEBAIExheW91dFVuaXQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1
dGUKIAogTGF5b3V0VW5pdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0ZWRDU1NQYWRkaW5n
TGVmdCgpIGNvbnN0CiB7Ci0gICAgTGF5b3V0VW5pdCB3ID0gWkVST19MQVlPVVRfVU5JVDsKKyAg
ICBMYXlvdXRVbml0IHcgPSBMYXlvdXRVbml0KCk7CiAgICAgUmVuZGVyVmlldyogcmVuZGVyVmll
dyA9IDA7CiAgICAgTGVuZ3RoIHBhZGRpbmcgPSBzdHlsZSgpLT5wYWRkaW5nTGVmdCgpOwogICAg
IGlmIChwYWRkaW5nLmlzUGVyY2VudCgpKQpAQCAtNTg4LDcgKzU4OCw3IEBAIExheW91dFVuaXQg
UmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGUKIAogTGF5b3V0VW5pdCBSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6Y29tcHV0ZWRDU1NQYWRkaW5nUmlnaHQoKSBjb25zdAogewotICAgIExheW91dFVu
aXQgdyA9IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgTGF5b3V0VW5pdCB3ID0gTGF5b3V0VW5pdCgp
OwogICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSAwOwogICAgIExlbmd0aCBwYWRkaW5nID0g
c3R5bGUoKS0+cGFkZGluZ1JpZ2h0KCk7CiAgICAgaWYgKHBhZGRpbmcuaXNQZXJjZW50KCkpCkBA
IC02MDAsNyArNjAwLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0
ZQogCiBMYXlvdXRVbml0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlZENTU1BhZGRpbmdC
ZWZvcmUoKSBjb25zdAogewotICAgIExheW91dFVuaXQgdyA9IFpFUk9fTEFZT1VUX1VOSVQ7Cisg
ICAgTGF5b3V0VW5pdCB3ID0gTGF5b3V0VW5pdCgpOwogICAgIFJlbmRlclZpZXcqIHJlbmRlclZp
ZXcgPSAwOwogICAgIExlbmd0aCBwYWRkaW5nID0gc3R5bGUoKS0+cGFkZGluZ0JlZm9yZSgpOwog
ICAgIGlmIChwYWRkaW5nLmlzUGVyY2VudCgpKQpAQCAtNjEyLDcgKzYxMiw3IEBAIExheW91dFVu
aXQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGUKIAogTGF5b3V0VW5pdCBSZW5kZXJCb3hN
b2RlbE9iamVjdDo6Y29tcHV0ZWRDU1NQYWRkaW5nQWZ0ZXIoKSBjb25zdAogewotICAgIExheW91
dFVuaXQgdyA9IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgTGF5b3V0VW5pdCB3ID0gTGF5b3V0VW5p
dCgpOwogICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSAwOwogICAgIExlbmd0aCBwYWRkaW5n
ID0gc3R5bGUoKS0+cGFkZGluZ0FmdGVyKCk7CiAgICAgaWYgKHBhZGRpbmcuaXNQZXJjZW50KCkp
CkBAIC02MjQsNyArNjI0LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29t
cHV0ZQogCiBMYXlvdXRVbml0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlZENTU1BhZGRp
bmdTdGFydCgpIGNvbnN0CiB7Ci0gICAgTGF5b3V0VW5pdCB3ID0gWkVST19MQVlPVVRfVU5JVDsK
KyAgICBMYXlvdXRVbml0IHcgPSBMYXlvdXRVbml0KCk7CiAgICAgUmVuZGVyVmlldyogcmVuZGVy
VmlldyA9IDA7CiAgICAgTGVuZ3RoIHBhZGRpbmcgPSBzdHlsZSgpLT5wYWRkaW5nU3RhcnQoKTsK
ICAgICBpZiAocGFkZGluZy5pc1BlcmNlbnQoKSkKQEAgLTYzNiw3ICs2MzYsNyBAQCBMYXlvdXRV
bml0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlCiAKIExheW91dFVuaXQgUmVuZGVyQm94
TW9kZWxPYmplY3Q6OmNvbXB1dGVkQ1NTUGFkZGluZ0VuZCgpIGNvbnN0CiB7Ci0gICAgTGF5b3V0
VW5pdCB3ID0gWkVST19MQVlPVVRfVU5JVDsKKyAgICBMYXlvdXRVbml0IHcgPSBMYXlvdXRVbml0
KCk7CiAgICAgUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IDA7CiAgICAgTGVuZ3RoIHBhZGRpbmcg
PSBzdHlsZSgpLT5wYWRkaW5nRW5kKCk7CiAgICAgaWYgKHBhZGRpbmcuaXNQZXJjZW50KCkpCkBA
IC04MDAsOCArODAwLDggQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5
ZQogICAgIAogICAgIGludCBiTGVmdCA9IGluY2x1ZGVMZWZ0RWRnZSA/IGJvcmRlckxlZnQoKSA6
IDA7CiAgICAgaW50IGJSaWdodCA9IGluY2x1ZGVSaWdodEVkZ2UgPyBib3JkZXJSaWdodCgpIDog
MDsKLSAgICBMYXlvdXRVbml0IHBMZWZ0ID0gaW5jbHVkZUxlZnRFZGdlID8gcGFkZGluZ0xlZnQo
KSA6IFpFUk9fTEFZT1VUX1VOSVQ7Ci0gICAgTGF5b3V0VW5pdCBwUmlnaHQgPSBpbmNsdWRlUmln
aHRFZGdlID8gcGFkZGluZ1JpZ2h0KCkgOiBaRVJPX0xBWU9VVF9VTklUOworICAgIExheW91dFVu
aXQgcExlZnQgPSBpbmNsdWRlTGVmdEVkZ2UgPyBwYWRkaW5nTGVmdCgpIDogTGF5b3V0VW5pdCgp
OworICAgIExheW91dFVuaXQgcFJpZ2h0ID0gaW5jbHVkZVJpZ2h0RWRnZSA/IHBhZGRpbmdSaWdo
dCgpIDogTGF5b3V0VW5pdCgpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBjbGlw
V2l0aFNjcm9sbGluZ1N0YXRlU2F2ZXIoKmNvbnRleHQsIGNsaXBwZWRXaXRoTG9jYWxTY3JvbGxp
bmcpOwogICAgIExheW91dFJlY3Qgc2Nyb2xsZWRQYWludFJlY3QgPSByZWN0OwpAQCAtODI1LDEw
ICs4MjUsMTAgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZQogICAg
ICAgICAvLyBDbGlwIHRvIHRoZSBwYWRkaW5nIG9yIGNvbnRlbnQgYm94ZXMgYXMgbmVjZXNzYXJ5
LgogICAgICAgICBpZiAoIWNsaXBUb0JvcmRlclJhZGl1cykgewogICAgICAgICAgICAgYm9vbCBp
bmNsdWRlUGFkZGluZyA9IGJnTGF5ZXItPmNsaXAoKSA9PSBDb250ZW50RmlsbEJveDsKLSAgICAg
ICAgICAgIExheW91dFJlY3QgY2xpcFJlY3QgPSBMYXlvdXRSZWN0KHNjcm9sbGVkUGFpbnRSZWN0
LngoKSArIGJMZWZ0ICsgKGluY2x1ZGVQYWRkaW5nID8gcExlZnQgOiBaRVJPX0xBWU9VVF9VTklU
KSwKLSAgICAgICAgICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC55KCkgKyBib3JkZXJUb3AoKSAr
IChpbmNsdWRlUGFkZGluZyA/IHBhZGRpbmdUb3AoKSA6IFpFUk9fTEFZT1VUX1VOSVQpLAotICAg
ICAgICAgICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LndpZHRoKCkgLSBiTGVmdCAtIGJSaWdodCAt
IChpbmNsdWRlUGFkZGluZyA/IHBMZWZ0ICsgcFJpZ2h0IDogWkVST19MQVlPVVRfVU5JVCksCi0g
ICAgICAgICAgICAgICAgc2Nyb2xsZWRQYWludFJlY3QuaGVpZ2h0KCkgLSBib3JkZXJUb3AoKSAt
IGJvcmRlckJvdHRvbSgpIC0gKGluY2x1ZGVQYWRkaW5nID8gcGFkZGluZ1RvcCgpICsgcGFkZGlu
Z0JvdHRvbSgpIDogWkVST19MQVlPVVRfVU5JVCkpOworICAgICAgICAgICAgTGF5b3V0UmVjdCBj
bGlwUmVjdCA9IExheW91dFJlY3Qoc2Nyb2xsZWRQYWludFJlY3QueCgpICsgYkxlZnQgKyAoaW5j
bHVkZVBhZGRpbmcgPyBwTGVmdCA6IExheW91dFVuaXQoKSksCisgICAgICAgICAgICAgICAgc2Ny
b2xsZWRQYWludFJlY3QueSgpICsgYm9yZGVyVG9wKCkgKyAoaW5jbHVkZVBhZGRpbmcgPyBwYWRk
aW5nVG9wKCkgOiBMYXlvdXRVbml0KCkpLAorICAgICAgICAgICAgICAgIHNjcm9sbGVkUGFpbnRS
ZWN0LndpZHRoKCkgLSBiTGVmdCAtIGJSaWdodCAtIChpbmNsdWRlUGFkZGluZyA/IHBMZWZ0ICsg
cFJpZ2h0IDogTGF5b3V0VW5pdCgpKSwKKyAgICAgICAgICAgICAgICBzY3JvbGxlZFBhaW50UmVj
dC5oZWlnaHQoKSAtIGJvcmRlclRvcCgpIC0gYm9yZGVyQm90dG9tKCkgLSAoaW5jbHVkZVBhZGRp
bmcgPyBwYWRkaW5nVG9wKCkgKyBwYWRkaW5nQm90dG9tKCkgOiBMYXlvdXRVbml0KCkpKTsKICAg
ICAgICAgICAgIGJhY2tncm91bmRDbGlwU3RhdGVTYXZlci5zYXZlKCk7CiAgICAgICAgICAgICBj
b250ZXh0LT5jbGlwKGNsaXBSZWN0KTsKICAgICAgICAgfQpAQCAtMjcyOSw3ICsyNzI5LDcgQEAg
TGF5b3V0UmVjdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6bG9jYWxDYQogICAgICAgICAgICAgeCAt
PSB0ZXh0SW5kZW50T2Zmc2V0OwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgeCA9IG1pbih4
LCBtYXgobWF4WCAtIGNhcmV0V2lkdGgsIFpFUk9fTEFZT1VUX1VOSVQpKTsKKyAgICB4ID0gbWlu
KHgsIG1heChtYXhYIC0gY2FyZXRXaWR0aCwgTGF5b3V0VW5pdCgpKSk7CiAKICAgICBMYXlvdXRV
bml0IHkgPSBwYWRkaW5nVG9wKCkgKyBib3JkZXJUb3AoKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgJKHJldmlzaW9uIDEzMzUx
NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAjaWZuZGVmIFJlbmRlckJveE1vZGVsT2Jq
ZWN0X2gKICNkZWZpbmUgUmVuZGVyQm94TW9kZWxPYmplY3RfaAogCi0jaW5jbHVkZSAiTGF5b3V0
VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgogI2luY2x1ZGUg
IlJlbmRlckxheWVyTW9kZWxPYmplY3QuaCIKICNpbmNsdWRlICJTaGFkb3dEYXRhLmgiCiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNh
dGVkRmxleGlibGVCb3guY3BwCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTMyLDcgKzUzMiw3IEBAIHZvaWQgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjpsYXlv
dXQKICAgICAgICAgICAgICAgICAgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gaXRlcmF0b3Iu
Zmlyc3QoKTsgY2hpbGQ7IGNoaWxkID0gaXRlcmF0b3IubmV4dCgpKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBMYXlvdXRVbml0IGFsbG93ZWRGbGV4ID0gYWxsb3dlZENoaWxkRmxleChjaGls
ZCwgZXhwYW5kaW5nLCBpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbGxvd2VkRmxl
eCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgcHJvamVjdGVkRmxl
eCA9IChhbGxvd2VkRmxleCA9PSBNQVhfTEFZT1VUX1VOSVQpID8gYWxsb3dlZEZsZXggOiBMYXlv
dXRVbml0KGFsbG93ZWRGbGV4ICogKHRvdGFsRmxleCAvIGNoaWxkLT5zdHlsZSgpLT5ib3hGbGV4
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHByb2plY3RlZEZs
ZXggPSAoYWxsb3dlZEZsZXggPT0gTGF5b3V0VW5pdDo6bWF4KCkpID8gYWxsb3dlZEZsZXggOiBM
YXlvdXRVbml0KGFsbG93ZWRGbGV4ICogKHRvdGFsRmxleCAvIGNoaWxkLT5zdHlsZSgpLT5ib3hG
bGV4KCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZUF2YWlsYWJsZVRoaXNQ
YXNzID0gZXhwYW5kaW5nID8gbWluKHNwYWNlQXZhaWxhYmxlVGhpc1Bhc3MsIHByb2plY3RlZEZs
ZXgpIDogbWF4KHNwYWNlQXZhaWxhYmxlVGhpc1Bhc3MsIHByb2plY3RlZEZsZXgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CkBAIC01NzcsNyArNTc3
LDcgQEAgdm9pZCBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6OmxheW91dAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gd2hpbGUgKGFic29sdXRlVmFsdWUoZ3Jv
dXBSZW1haW5pbmdTcGFjZSkgPj0gMSk7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAoZ3JvdXBS
ZW1haW5pbmdTcGFjZS5hYnMoKSA+PSAxKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
Ly8gV2UgZGlkbid0IGZpbmQgYW55IGNoaWxkcmVuIHRoYXQgY291bGQgZ3Jvdy4KQEAgLTc4Niw3
ICs3ODYsNyBAQCB2b2lkIFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveDo6bGF5b3V0CiAgICAg
ICAgICAgICAgICAgICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IGl0ZXJhdG9yLmZpcnN0KCk7
IGNoaWxkOyBjaGlsZCA9IGl0ZXJhdG9yLm5leHQoKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgTGF5b3V0VW5pdCBhbGxvd2VkRmxleCA9IGFsbG93ZWRDaGlsZEZsZXgoY2hpbGQsIGV4cGFu
ZGluZywgaSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxsb3dlZEZsZXgpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHByb2plY3RlZEZsZXggPSAoYWxs
b3dlZEZsZXggPT0gTUFYX0xBWU9VVF9VTklUKSA/IGFsbG93ZWRGbGV4IDogc3RhdGljX2Nhc3Q8
TGF5b3V0VW5pdD4oYWxsb3dlZEZsZXggKiAodG90YWxGbGV4IC8gY2hpbGQtPnN0eWxlKCktPmJv
eEZsZXgoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgcHJvamVj
dGVkRmxleCA9IChhbGxvd2VkRmxleCA9PSBMYXlvdXRVbml0OjptYXgoKSkgPyBhbGxvd2VkRmxl
eCA6IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KGFsbG93ZWRGbGV4ICogKHRvdGFsRmxleCAvIGNo
aWxkLT5zdHlsZSgpLT5ib3hGbGV4KCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
cGFjZUF2YWlsYWJsZVRoaXNQYXNzID0gZXhwYW5kaW5nID8gbWluKHNwYWNlQXZhaWxhYmxlVGhp
c1Bhc3MsIHByb2plY3RlZEZsZXgpIDogbWF4KHNwYWNlQXZhaWxhYmxlVGhpc1Bhc3MsIHByb2pl
Y3RlZEZsZXgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICB9CkBAIC04MjgsNyArODI4LDcgQEAgdm9pZCBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6
OmxheW91dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gd2hpbGUg
KGFic29sdXRlVmFsdWUoZ3JvdXBSZW1haW5pbmdTcGFjZSkgPj0gMSk7CisgICAgICAgICAgICAg
ICAgfSB3aGlsZSAoZ3JvdXBSZW1haW5pbmdTcGFjZS5hYnMoKSA+PSAxKTsKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgLy8gV2UgZGlkbid0IGZpbmQgYW55IGNoaWxkcmVuIHRoYXQgY291
bGQgZ3Jvdy4KQEAgLTEwMzIsNyArMTAzMiw3IEBAIExheW91dFVuaXQgUmVuZGVyRGVwcmVjYXRl
ZEZsZXhpYmxlQm94OjoKICAgICBpZiAoZXhwYW5kaW5nKSB7CiAgICAgICAgIGlmIChpc0hvcml6
b250YWwoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IEZvciBub3cganVzdCBoYW5kbGUgZml4
ZWQgdmFsdWVzLgotICAgICAgICAgICAgTGF5b3V0VW5pdCBtYXhXaWR0aCA9IE1BWF9MQVlPVVRf
VU5JVDsKKyAgICAgICAgICAgIExheW91dFVuaXQgbWF4V2lkdGggPSBMYXlvdXRVbml0OjptYXgo
KTsKICAgICAgICAgICAgIExheW91dFVuaXQgd2lkdGggPSBjb250ZW50V2lkdGhGb3JDaGlsZChj
aGlsZCk7CiAgICAgICAgICAgICBpZiAoIWNoaWxkLT5zdHlsZSgpLT5tYXhXaWR0aCgpLmlzVW5k
ZWZpbmVkKCkgJiYgY2hpbGQtPnN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpKQogICAgICAg
ICAgICAgICAgIG1heFdpZHRoID0gY2hpbGQtPnN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKTsK
QEAgLTEwNDAsMTYgKzEwNDAsMTYgQEAgTGF5b3V0VW5pdCBSZW5kZXJEZXByZWNhdGVkRmxleGli
bGVCb3g6OgogICAgICAgICAgICAgICAgIG1heFdpZHRoID0gY2hpbGQtPm1heFByZWZlcnJlZExv
Z2ljYWxXaWR0aCgpOwogICAgICAgICAgICAgZWxzZSBpZiAoY2hpbGQtPnN0eWxlKCktPm1heFdp
ZHRoKCkudHlwZSgpID09IE1pbkludHJpbnNpYykKICAgICAgICAgICAgICAgICBtYXhXaWR0aCA9
IGNoaWxkLT5taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgICAgIGlmIChtYXhX
aWR0aCA9PSBNQVhfTEFZT1VUX1VOSVQpCisgICAgICAgICAgICBpZiAobWF4V2lkdGggPT0gTGF5
b3V0VW5pdDo6bWF4KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG1heFdpZHRoOwogICAgICAg
ICAgICAgcmV0dXJuIG1heDxMYXlvdXRVbml0PigwLCBtYXhXaWR0aCAtIHdpZHRoKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBGb3Igbm93IGp1c3QgaGFuZGxlIGZp
eGVkIHZhbHVlcy4KLSAgICAgICAgICAgIExheW91dFVuaXQgbWF4SGVpZ2h0ID0gTUFYX0xBWU9V
VF9VTklUOworICAgICAgICAgICAgTGF5b3V0VW5pdCBtYXhIZWlnaHQgPSBMYXlvdXRVbml0Ojpt
YXgoKTsKICAgICAgICAgICAgIExheW91dFVuaXQgaGVpZ2h0ID0gY29udGVudEhlaWdodEZvckNo
aWxkKGNoaWxkKTsKICAgICAgICAgICAgIGlmICghY2hpbGQtPnN0eWxlKCktPm1heEhlaWdodCgp
LmlzVW5kZWZpbmVkKCkgJiYgY2hpbGQtPnN0eWxlKCktPm1heEhlaWdodCgpLmlzRml4ZWQoKSkK
ICAgICAgICAgICAgICAgICBtYXhIZWlnaHQgPSBjaGlsZC0+c3R5bGUoKS0+bWF4SGVpZ2h0KCku
dmFsdWUoKTsKLSAgICAgICAgICAgIGlmIChtYXhIZWlnaHQgPT0gTUFYX0xBWU9VVF9VTklUKQor
ICAgICAgICAgICAgaWYgKG1heEhlaWdodCA9PSBMYXlvdXRVbml0OjptYXgoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gbWF4SGVpZ2h0OwogICAgICAgICAgICAgcmV0dXJuIG1heDxMYXlvdXRV
bml0PigwLCBtYXhIZWlnaHQgLSBoZWlnaHQpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAJKHJldmlzaW9uIDEzMzUxNykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0OSwxMSArMTQ5LDExIEBAIHZvaWQgUmVuZGVyRmllbGRzZXQ6OnBhaW50Qm94RGVj
b3JhdGlvbnMKICAgICAvLyBjYXNlcyB0aGUgbGVnZW5kIGlzIGVtYmVkZGVkIGluIHRoZSByaWdo
dCBhbmQgYm90dG9tIGJvcmRlcnMgcmVzcGVjdGl2ZWx5LgogICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzIzNgogICAgIGlmIChzdHlsZSgpLT5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAgIExheW91dFVuaXQgeU9mZiA9IChsZWdlbmQt
PnkoKSA+IDApID8gWkVST19MQVlPVVRfVU5JVCA6IChsZWdlbmQtPmhlaWdodCgpIC0gYm9yZGVy
VG9wKCkpIC8gMjsKKyAgICAgICAgTGF5b3V0VW5pdCB5T2ZmID0gKGxlZ2VuZC0+eSgpID4gMCkg
PyBMYXlvdXRVbml0KCkgOiAobGVnZW5kLT5oZWlnaHQoKSAtIGJvcmRlclRvcCgpKSAvIDI7CiAg
ICAgICAgIHBhaW50UmVjdC5zZXRIZWlnaHQocGFpbnRSZWN0LmhlaWdodCgpIC0geU9mZik7CiAg
ICAgICAgIHBhaW50UmVjdC5zZXRZKHBhaW50UmVjdC55KCkgKyB5T2ZmKTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBMYXlvdXRVbml0IHhPZmYgPSAobGVnZW5kLT54KCkgPiAwKSA/IFpFUk9fTEFZ
T1VUX1VOSVQgOiAobGVnZW5kLT53aWR0aCgpIC0gYm9yZGVyTGVmdCgpKSAvIDI7CisgICAgICAg
IExheW91dFVuaXQgeE9mZiA9IChsZWdlbmQtPngoKSA+IDApID8gTGF5b3V0VW5pdCgpIDogKGxl
Z2VuZC0+d2lkdGgoKSAtIGJvcmRlckxlZnQoKSkgLyAyOwogICAgICAgICBwYWludFJlY3Quc2V0
V2lkdGgocGFpbnRSZWN0LndpZHRoKCkgLSB4T2ZmKTsKICAgICAgICAgcGFpbnRSZWN0LnNldFgo
cGFpbnRSZWN0LngoKSArIHhPZmYpOwogICAgIH0KQEAgLTIwMCwxMSArMjAwLDExIEBAIHZvaWQg
UmVuZGVyRmllbGRzZXQ6OnBhaW50TWFzayhQYWludEluZm8KICAgICAvLyBjYXNlcyB0aGUgbGVn
ZW5kIGlzIGVtYmVkZGVkIGluIHRoZSByaWdodCBhbmQgYm90dG9tIGJvcmRlcnMgcmVzcGVjdGl2
ZWx5LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzIz
NgogICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAg
IExheW91dFVuaXQgeU9mZiA9IChsZWdlbmQtPnkoKSA+IDApID8gWkVST19MQVlPVVRfVU5JVCA6
IChsZWdlbmQtPmhlaWdodCgpIC0gYm9yZGVyVG9wKCkpIC8gMjsKKyAgICAgICAgTGF5b3V0VW5p
dCB5T2ZmID0gKGxlZ2VuZC0+eSgpID4gMCkgPyBMYXlvdXRVbml0KCkgOiAobGVnZW5kLT5oZWln
aHQoKSAtIGJvcmRlclRvcCgpKSAvIDI7CiAgICAgICAgIHBhaW50UmVjdC5leHBhbmQoMCwgLXlP
ZmYpOwogICAgICAgICBwYWludFJlY3QubW92ZSgwLCB5T2ZmKTsKICAgICB9IGVsc2UgewotICAg
ICAgICBMYXlvdXRVbml0IHhPZmYgPSAobGVnZW5kLT54KCkgPiAwKSA/IFpFUk9fTEFZT1VUX1VO
SVQgOiAobGVnZW5kLT53aWR0aCgpIC0gYm9yZGVyTGVmdCgpKSAvIDI7CisgICAgICAgIExheW91
dFVuaXQgeE9mZiA9IChsZWdlbmQtPngoKSA+IDApID8gTGF5b3V0VW5pdCgpIDogKGxlZ2VuZC0+
d2lkdGgoKSAtIGJvcmRlckxlZnQoKSkgLyAyOwogICAgICAgICBwYWludFJlY3QuZXhwYW5kKC14
T2ZmLCAwKTsKICAgICAgICAgcGFpbnRSZWN0Lm1vdmUoeE9mZiwgMCk7CiAgICAgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCShyZXZp
c2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVC
b3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzEsNyArMzcxLDcgQEAgdm9pZCBSZW5kZXJGbGV4
aWJsZUJveDo6cGFpbnRDaGlsZHJlbihQYQogCiB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpyZXBv
c2l0aW9uTG9naWNhbEhlaWdodERlcGVuZGVudEZsZXhJdGVtcyhPcmRlckl0ZXJhdG9yJiBpdGVy
YXRvciwgV1RGOjpWZWN0b3I8TGluZUNvbnRleHQ+JiBsaW5lQ29udGV4dHMsIExheW91dFVuaXQm
IG9sZENsaWVudEFmdGVyRWRnZSkKIHsKLSAgICBMYXlvdXRVbml0IGNyb3NzQXhpc1N0YXJ0RWRn
ZSA9IGxpbmVDb250ZXh0cy5pc0VtcHR5KCkgPyBaRVJPX0xBWU9VVF9VTklUIDogbGluZUNvbnRl
eHRzWzBdLmNyb3NzQXhpc09mZnNldDsKKyAgICBMYXlvdXRVbml0IGNyb3NzQXhpc1N0YXJ0RWRn
ZSA9IGxpbmVDb250ZXh0cy5pc0VtcHR5KCkgPyBMYXlvdXRVbml0KDApIDogbGluZUNvbnRleHRz
WzBdLmNyb3NzQXhpc09mZnNldDsKICAgICBhbGlnbkZsZXhMaW5lcyhpdGVyYXRvciwgbGluZUNv
bnRleHRzKTsKIAogICAgIC8vIElmIHdlIGhhdmUgYSBzaW5nbGUgbGluZSBmbGV4Ym94LCB0aGUg
bGluZSBoZWlnaHQgaXMgYWxsIHRoZSBhdmFpbGFibGUgc3BhY2UuCkBAIC04OTQsNyArODk0LDcg
QEAgYm9vbCBSZW5kZXJGbGV4aWJsZUJveDo6Y29tcHV0ZU5leHRGbGV4TAogICAgIGlmICghaXRl
cmF0b3IuY3VycmVudENoaWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIExheW91
dFVuaXQgbGluZUJyZWFrTGVuZ3RoID0gbWFpbkF4aXNDb250ZW50RXh0ZW50KE1BWF9MQVlPVVRf
VU5JVCk7CisgICAgTGF5b3V0VW5pdCBsaW5lQnJlYWtMZW5ndGggPSBtYWluQXhpc0NvbnRlbnRF
eHRlbnQoTGF5b3V0VW5pdDo6bWF4KCkpOwogCiAgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0g
aXRlcmF0b3IuY3VycmVudENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGl0ZXJhdG9yLm5leHQoKSkg
ewogICAgICAgICBpZiAoY2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKSB7CkBAIC0xMjM0
LDcgKzEyMzQsNyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjphbGlnbkNoaWxkcmVuKE9yCiAK
ICAgICBSZW5kZXJCb3gqIGNoaWxkID0gaXRlcmF0b3IuZmlyc3QoKTsKICAgICBmb3IgKHNpemVf
dCBsaW5lTnVtYmVyID0gMDsgbGluZU51bWJlciA8IGxpbmVDb250ZXh0cy5zaXplKCk7ICsrbGlu
ZU51bWJlcikgewotICAgICAgICBMYXlvdXRVbml0IG1pbk1hcmdpbkFmdGVyQmFzZWxpbmUgPSBN
QVhfTEFZT1VUX1VOSVQ7CisgICAgICAgIExheW91dFVuaXQgbWluTWFyZ2luQWZ0ZXJCYXNlbGlu
ZSA9IExheW91dFVuaXQ6Om1heCgpOwogICAgICAgICBMYXlvdXRVbml0IGxpbmVDcm9zc0F4aXNF
eHRlbnQgPSBsaW5lQ29udGV4dHNbbGluZU51bWJlcl0uY3Jvc3NBeGlzRXh0ZW50OwogICAgICAg
ICBMYXlvdXRVbml0IG1heEFzY2VudCA9IGxpbmVDb250ZXh0c1tsaW5lTnVtYmVyXS5tYXhBc2Nl
bnQ7CiAKQEAgLTEzMTksNyArMTMxOSw3IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmFwcGx5
U3RyZXRjaEFsaWcKICAgICB9IGVsc2UgaWYgKGlzQ29sdW1uRmxvdygpICYmIGNoaWxkLT5zdHls
ZSgpLT5sb2dpY2FsV2lkdGgoKS5pc0F1dG8oKSkgewogICAgICAgICAvLyBGSVhNRTogSWYgdGhl
IGNoaWxkIGRvZXNuJ3QgaGF2ZSBvcnRob2dvbmFsIGZsb3csIHRoZW4gaXQgYWxyZWFkeSBoYXMg
YW4gb3ZlcnJpZGUgd2lkdGggc2V0LCBzbyB1c2UgaXQuCiAgICAgICAgIGlmIChoYXNPcnRob2dv
bmFsRmxvdyhjaGlsZCkpIHsKLSAgICAgICAgICAgIExheW91dFVuaXQgY2hpbGRXaWR0aCA9IHN0
ZDo6bWF4KFpFUk9fTEFZT1VUX1VOSVQsIGxpbmVDcm9zc0F4aXNFeHRlbnQgLSBjcm9zc0F4aXNN
YXJnaW5FeHRlbnRGb3JDaGlsZChjaGlsZCkpOworICAgICAgICAgICAgTGF5b3V0VW5pdCBjaGls
ZFdpZHRoID0gc3RkOjptYXgoTGF5b3V0VW5pdCgpLCBsaW5lQ3Jvc3NBeGlzRXh0ZW50IC0gY3Jv
c3NBeGlzTWFyZ2luRXh0ZW50Rm9yQ2hpbGQoY2hpbGQpKTsKICAgICAgICAgICAgIGNoaWxkV2lk
dGggPSBjaGlsZC0+Y29uc3RyYWluTG9naWNhbFdpZHRoSW5SZWdpb25CeU1pbk1heChjaGlsZFdp
ZHRoLCBjaGlsZFdpZHRoLCB0aGlzKTsKIAogICAgICAgICAgICAgaWYgKGNoaWxkV2lkdGggIT0g
Y2hpbGQtPmxvZ2ljYWxXaWR0aCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmxvd1RocmVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIw
MCw3ICsyMDAsNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnVwZGF0ZUxvZ2ljYWxXaWR0CiAg
ICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gKml0ZXI7CiAgICAgICAgIExheW91dFVuaXQg
cmVnaW9uTG9naWNhbFdpZHRoID0gcmVnaW9uLT5wYWdlTG9naWNhbFdpZHRoKCk7CiAgICAgICAg
IGlmIChyZWdpb25Mb2dpY2FsV2lkdGggIT0gbG9naWNhbFdpZHRoKSB7Ci0gICAgICAgICAgICBM
YXlvdXRVbml0IGxvZ2ljYWxMZWZ0ID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gWkVS
T19MQVlPVVRfVU5JVCA6IGxvZ2ljYWxXaWR0aCAtIHJlZ2lvbkxvZ2ljYWxXaWR0aDsKKyAgICAg
ICAgICAgIExheW91dFVuaXQgbG9naWNhbExlZnQgPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBM
VFIgPyBMYXlvdXRVbml0KCkgOiBsb2dpY2FsV2lkdGggLSByZWdpb25Mb2dpY2FsV2lkdGg7CiAg
ICAgICAgICAgICByZWdpb24tPnNldFJlbmRlckJveFJlZ2lvbkluZm8odGhpcywgbG9naWNhbExl
ZnQsIHJlZ2lvbkxvZ2ljYWxXaWR0aCwgZmFsc2UpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzI2
LDcgKzMyNiw3IEBAIFJlbmRlclJlZ2lvbiogUmVuZGVyRmxvd1RocmVhZDo6cmVnaW9uQXQKICAg
ICAvLyB0aGUgbGFzdCB2YWxpZCByZWdpb24uIEl0IGlzIHNpbWlsYXIgdG8gYXV0byBleHRlbmRp
bmcgdGhlIHNpemUgb2YgdGhlIGxhc3QgcmVnaW9uLiAKICAgICBSZW5kZXJSZWdpb24qIGxhc3RW
YWxpZFJlZ2lvbiA9IDA7CiAKLSAgICBMYXlvdXRVbml0IGFjY3VtdWxhdGVkTG9naWNhbEhlaWdo
dCA9IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgTGF5b3V0VW5pdCBhY2N1bXVsYXRlZExvZ2ljYWxI
ZWlnaHQ7CiAgICAgCiAgICAgLy8gRklYTUU6IFRoZSByZWdpb25zIGFyZSBhbHdheXMgaW4gb3Jk
ZXIsIG9wdGltaXplIHRoaXMgc2VhcmNoLgogICAgIGZvciAoUmVuZGVyUmVnaW9uTGlzdDo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IG1fcmVnaW9uTGlzdC5iZWdpbigpOyBpdGVyICE9IG1fcmVnaW9u
TGlzdC5lbmQoKTsgKytpdGVyKSB7CkBAIC0zNjIsNyArMzYyLDcgQEAgUmVuZGVyUmVnaW9uKiBS
ZW5kZXJGbG93VGhyZWFkOjpyZWdpb25BdAogTGF5b3V0VW5pdCBSZW5kZXJGbG93VGhyZWFkOjpw
YWdlTG9naWNhbFRvcEZvck9mZnNldChMYXlvdXRVbml0IG9mZnNldCkgY29uc3QKIHsKICAgICBS
ZW5kZXJSZWdpb24qIHJlZ2lvbiA9IHJlZ2lvbkF0QmxvY2tPZmZzZXQob2Zmc2V0KTsKLSAgICBy
ZXR1cm4gcmVnaW9uID8gcmVnaW9uLT5wYWdlTG9naWNhbFRvcEZvck9mZnNldChvZmZzZXQpIDog
WkVST19MQVlPVVRfVU5JVDsKKyAgICByZXR1cm4gcmVnaW9uID8gcmVnaW9uLT5wYWdlTG9naWNh
bFRvcEZvck9mZnNldChvZmZzZXQpIDogTGF5b3V0VW5pdCgpOwogfQogCiBMYXlvdXRVbml0IFJl
bmRlckZsb3dUaHJlYWQ6OnBhZ2VMb2dpY2FsV2lkdGhGb3JPZmZzZXQoTGF5b3V0VW5pdCBvZmZz
ZXQpIGNvbnN0CkBAIC0zNzUsOSArMzc1LDkgQEAgTGF5b3V0VW5pdCBSZW5kZXJGbG93VGhyZWFk
OjpwYWdlTG9naWNhbAogewogICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gcmVnaW9uQXRCbG9j
a09mZnNldChvZmZzZXQpOwogICAgIGlmICghcmVnaW9uKQotICAgICAgICByZXR1cm4gWkVST19M
QVlPVVRfVU5JVDsKKyAgICAgICAgcmV0dXJuIExheW91dFVuaXQoKTsKICAgICBpZiAocmVnaW9u
LT5uZWVkc092ZXJyaWRlTG9naWNhbENvbnRlbnRIZWlnaHRDb21wdXRhdGlvbigpKQotICAgICAg
ICByZXR1cm4gTUFYX0xBWU9VVF9VTklUIC8gMjsKKyAgICAgICAgcmV0dXJuIExheW91dFVuaXQ6
Om1heCgpIC8gMjsKICAgICByZXR1cm4gcmVnaW9uLT5wYWdlTG9naWNhbEhlaWdodCgpOwogfQog
CkBAIC0zODUsOSArMzg1LDkgQEAgTGF5b3V0VW5pdCBSZW5kZXJGbG93VGhyZWFkOjpwYWdlUmVt
YWluaQogewogICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gcmVnaW9uQXRCbG9ja09mZnNldChv
ZmZzZXQpOwogICAgIGlmICghcmVnaW9uKQotICAgICAgICByZXR1cm4gWkVST19MQVlPVVRfVU5J
VDsKKyAgICAgICAgcmV0dXJuIExheW91dFVuaXQoKTsKICAgICBpZiAocmVnaW9uLT5uZWVkc092
ZXJyaWRlTG9naWNhbENvbnRlbnRIZWlnaHRDb21wdXRhdGlvbigpKQotICAgICAgICByZXR1cm4g
TUFYX0xBWU9VVF9VTklUIC8gMjsKKyAgICAgICAgcmV0dXJuIExheW91dFVuaXQ6Om1heCgpIC8g
MjsKIAogICAgIExheW91dFVuaXQgcGFnZUxvZ2ljYWxUb3AgPSByZWdpb24tPnBhZ2VMb2dpY2Fs
VG9wRm9yT2Zmc2V0KG9mZnNldCk7CiAgICAgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9
IHJlZ2lvbi0+cGFnZUxvZ2ljYWxIZWlnaHQoKTsKQEAgLTQ4Niw3ICs0ODYsNyBAQCBMYXlvdXRV
bml0IFJlbmRlckZsb3dUaHJlYWQ6OmNvbnRlbnRMb2dpCiB7CiAgICAgUmVuZGVyUmVnaW9uKiBm
aXJzdFZhbGlkUmVnaW9uSW5GbG93ID0gZmlyc3RSZWdpb24oKTsKICAgICBpZiAoIWZpcnN0VmFs
aWRSZWdpb25JbkZsb3cpCi0gICAgICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOworICAgICAg
ICByZXR1cm4gTGF5b3V0VW5pdCgpOwogICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpID8gZmlyc3RWYWxpZFJlZ2lvbkluRmxvdy0+Y29udGVudFdpZHRoKCkgOiBmaXJzdFZhbGlk
UmVnaW9uSW5GbG93LT5jb250ZW50SGVpZ2h0KCk7CiB9CiAKQEAgLTQ5NCw3ICs0OTQsNyBAQCBM
YXlvdXRVbml0IFJlbmRlckZsb3dUaHJlYWQ6OmNvbnRlbnRMb2dpCiB7CiAgICAgUmVuZGVyUmVn
aW9uKiBmaXJzdFZhbGlkUmVnaW9uSW5GbG93ID0gZmlyc3RSZWdpb24oKTsKICAgICBpZiAoIWZp
cnN0VmFsaWRSZWdpb25JbkZsb3cpCi0gICAgICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOwor
ICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCgpOwogICAgIHJldHVybiBpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gZmlyc3RWYWxpZFJlZ2lvbkluRmxvdy0+Y29udGVudEhlaWdodCgpIDogZmly
c3RWYWxpZFJlZ2lvbkluRmxvdy0+Y29udGVudFdpZHRoKCk7CiB9CiAKQEAgLTUwMiw3ICs1MDIs
NyBAQCBMYXlvdXRVbml0IFJlbmRlckZsb3dUaHJlYWQ6OmNvbnRlbnRMb2dpCiB7CiAgICAgUmVu
ZGVyUmVnaW9uKiBmaXJzdFZhbGlkUmVnaW9uSW5GbG93ID0gZmlyc3RSZWdpb24oKTsKICAgICBp
ZiAoIWZpcnN0VmFsaWRSZWdpb25JbkZsb3cpCi0gICAgICAgIHJldHVybiBaRVJPX0xBWU9VVF9V
TklUOworICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCgpOwogICAgIHJldHVybiBpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpID8gZmlyc3RWYWxpZFJlZ2lvbkluRmxvdy0+Zmxvd1RocmVhZFBvcnRp
b25SZWN0KCkueCgpIDogZmlyc3RWYWxpZFJlZ2lvbkluRmxvdy0+Zmxvd1RocmVhZFBvcnRpb25S
ZWN0KCkueSgpOwogfQogCkBAIC03ODYsNyArNzg2LDcgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFk
Ojp1cGRhdGVSZWdpb25zRmxvdwogICAgICAgICBMYXlvdXRVbml0IHJlZ2lvbkxvZ2ljYWxXaWR0
aCA9IHJlZ2lvbi0+cGFnZUxvZ2ljYWxXaWR0aCgpOwogICAgICAgICBMYXlvdXRVbml0IHJlZ2lv
bkxvZ2ljYWxIZWlnaHQgPSByZWdpb24tPmxvZ2ljYWxIZWlnaHRPZkFsbEZsb3dUaHJlYWRDb250
ZW50KCk7CiAKLSAgICAgICAgTGF5b3V0UmVjdCByZWdpb25SZWN0KHN0eWxlKCktPmRpcmVjdGlv
bigpID09IExUUiA/IFpFUk9fTEFZT1VUX1VOSVQgOiBsb2dpY2FsV2lkdGgoKSAtIHJlZ2lvbkxv
Z2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCwgcmVnaW9uTG9naWNhbFdpZHRoLCByZWdpb25Mb2dp
Y2FsSGVpZ2h0KTsKKyAgICAgICAgTGF5b3V0UmVjdCByZWdpb25SZWN0KHN0eWxlKCktPmRpcmVj
dGlvbigpID09IExUUiA/IExheW91dFVuaXQoKSA6IGxvZ2ljYWxXaWR0aCgpIC0gcmVnaW9uTG9n
aWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0LCByZWdpb25Mb2dpY2FsV2lkdGgsIHJlZ2lvbkxvZ2lj
YWxIZWlnaHQpOwogCiAgICAgICAgIC8vIFdoZW4gYSBmbG93IHRocmVhZCBoYXMgbW9yZSB0aGFu
IG9uZSBhdXRvIGxvZ2ljYWwgaGVpZ2h0IHJlZ2lvbiwKICAgICAgICAgLy8gd2UgaGF2ZSB0byB0
YWtlIGludG8gYWNjb3VudCB0aGUgb3ZlcnJpZGUgbG9naWNhbCBjb250ZW50IGhlaWdodCB2YWx1
ZSwKQEAgLTg4Miw3ICs4ODIsNyBAQCBib29sIFJlbmRlckZsb3dUaHJlYWQ6OmFkZEZvcmNlZFJl
Z2lvbkJyCiAgICAgICAgIHVwZGF0ZVJlZ2lvbnNGbG93VGhyZWFkUG9ydGlvblJlY3QoKTsKIAog
ICAgIGlmIChvZmZzZXRCcmVha0FkanVzdG1lbnQpCi0gICAgICAgICpvZmZzZXRCcmVha0FkanVz
dG1lbnQgPSBtYXg8TGF5b3V0VW5pdD4oWkVST19MQVlPVVRfVU5JVCwgY3VycmVudFJlZ2lvbk9m
ZnNldEluRmxvd1RocmVhZCAtIG9mZnNldEJyZWFrSW5GbG93VGhyZWFkKTsKKyAgICAgICAgKm9m
ZnNldEJyZWFrQWRqdXN0bWVudCA9IG1heDxMYXlvdXRVbml0PigwLCBjdXJyZW50UmVnaW9uT2Zm
c2V0SW5GbG93VGhyZWFkIC0gb2Zmc2V0QnJlYWtJbkZsb3dUaHJlYWQpOwogCiAgICAgcmV0dXJu
IG92ZXJyaWRlTG9naWNhbENvbnRlbnRIZWlnaHRDb21wdXRlZDsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHZW9tZXRyeU1hcC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHZW9tZXRyeU1hcC5oCShyZXZpc2lvbiAxMzM1MTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR2VvbWV0cnlNYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNs
dWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiTGF5b3V0
VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgogI2luY2x1ZGUg
IlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNlLmgJKHJl
dmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZVJl
c291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJDYWNo
ZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAi
SW1hZ2UuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRl
ICJMYXlvdXRTaXplLmgiCiAjaW5jbHVkZSAiU3R5bGVJbWFnZS5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAko
cmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGlu
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5saW5l
VGV4dEJveC5oIgorI2luY2x1ZGUgIkxheW91dFBvaW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgog
I2luY2x1ZGUgIlJlbmRlckFyZW5hLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKQEAgLTk0
OSw4ICs5NTAsOCBAQCBMYXlvdXRSZWN0IFJlbmRlcklubGluZTo6bGluZXNWaXN1YWxPdmVyCiAg
ICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKICAgICAvLyBSZXR1cm4gdGhlIHdpZHRoIG9m
IHRoZSBtaW5pbWFsIGxlZnQgc2lkZSBhbmQgdGhlIG1heGltYWwgcmlnaHQgc2lkZS4KLSAgICBM
YXlvdXRVbml0IGxvZ2ljYWxMZWZ0U2lkZSA9IE1BWF9MQVlPVVRfVU5JVDsKLSAgICBMYXlvdXRV
bml0IGxvZ2ljYWxSaWdodFNpZGUgPSBNSU5fTEFZT1VUX1VOSVQ7CisgICAgTGF5b3V0VW5pdCBs
b2dpY2FsTGVmdFNpZGUgPSBMYXlvdXRVbml0OjptYXgoKTsKKyAgICBMYXlvdXRVbml0IGxvZ2lj
YWxSaWdodFNpZGUgPSBMYXlvdXRVbml0OjptaW4oKTsKICAgICBmb3IgKElubGluZUZsb3dCb3gq
IGN1cnIgPSBmaXJzdExpbmVCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkp
IHsKICAgICAgICAgbG9naWNhbExlZnRTaWRlID0gbWluKGxvZ2ljYWxMZWZ0U2lkZSwgY3Vyci0+
bG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdygpKTsKICAgICAgICAgbG9naWNhbFJpZ2h0U2lkZSA9
IG1heChsb2dpY2FsUmlnaHRTaWRlLCBjdXJyLT5sb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdygp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNp
b24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjA0MCw3ICsyMDQwLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cmVz
aXplKGNvbnN0IFBsYXRmb3JtTQogICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5l
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsIFN0cmluZzo6bnVtYmVyKHJlbmRl
cmVyLT5tYXJnaW5MZWZ0KCkgLyB6b29tRmFjdG9yKSArICJweCIsIGZhbHNlKTsKICAgICAgICAg
ICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJn
aW5SaWdodCwgU3RyaW5nOjpudW1iZXIocmVuZGVyZXItPm1hcmdpblJpZ2h0KCkgLyB6b29tRmFj
dG9yKSArICJweCIsIGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICBMYXlvdXRVbml0IGJhc2VX
aWR0aCA9IHJlbmRlcmVyLT53aWR0aCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gWkVST19MQVlP
VVRfVU5JVCA6IHJlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nV2lkdGgoKSk7CisgICAgICAgIExh
eW91dFVuaXQgYmFzZVdpZHRoID0gcmVuZGVyZXItPndpZHRoKCkgLSAoaXNCb3hTaXppbmdCb3Jk
ZXIgPyBMYXlvdXRVbml0KCkgOiByZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ1dpZHRoKCkpOwog
ICAgICAgICBiYXNlV2lkdGggPSBiYXNlV2lkdGggLyB6b29tRmFjdG9yOwogICAgICAgICBzdHls
ZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgsIFN0cmlu
Zzo6bnVtYmVyKHJvdW5kVG9JbnQoYmFzZVdpZHRoICsgZGlmZmVyZW5jZS53aWR0aCgpKSkgKyAi
cHgiLCBmYWxzZSk7CiAgICAgfQpAQCAtMjA1MSw3ICsyMDUxLDcgQEAgdm9pZCBSZW5kZXJMYXll
cjo6cmVzaXplKGNvbnN0IFBsYXRmb3JtTQogICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0
SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblRvcCwgU3RyaW5nOjpudW1iZXIo
cmVuZGVyZXItPm1hcmdpblRvcCgpIC8gem9vbUZhY3RvcikgKyAicHgiLCBmYWxzZSk7CiAgICAg
ICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5
TWFyZ2luQm90dG9tLCBTdHJpbmc6Om51bWJlcihyZW5kZXJlci0+bWFyZ2luQm90dG9tKCkgLyB6
b29tRmFjdG9yKSArICJweCIsIGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICBMYXlvdXRVbml0
IGJhc2VIZWlnaHQgPSByZW5kZXJlci0+aGVpZ2h0KCkgLSAoaXNCb3hTaXppbmdCb3JkZXIgPyBa
RVJPX0xBWU9VVF9VTklUIDogcmVuZGVyZXItPmJvcmRlckFuZFBhZGRpbmdIZWlnaHQoKSk7Cisg
ICAgICAgIExheW91dFVuaXQgYmFzZUhlaWdodCA9IHJlbmRlcmVyLT5oZWlnaHQoKSAtIChpc0Jv
eFNpemluZ0JvcmRlciA/IExheW91dFVuaXQoKSA6IHJlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5n
SGVpZ2h0KCkpOwogICAgICAgICBiYXNlSGVpZ2h0ID0gYmFzZUhlaWdodCAvIHpvb21GYWN0b3I7
CiAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVy
dHlIZWlnaHQsIFN0cmluZzo6bnVtYmVyKHJvdW5kVG9JbnQoYmFzZUhlaWdodCArIGRpZmZlcmVu
Y2UuaGVpZ2h0KCkpKSArICJweCIsIGZhbHNlKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5mby5oCShyZXZpc2lvbiAxMzM1
MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDcgQEAKICNpbmNsdWRlICJDYWNoZWRTVkdEb2N1
bWVudC5oIgogI2VuZGlmCiAjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAi
RnJhY3Rpb25hbExheW91dFJlY3QuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1
ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCShyZXZpc2lvbiAxMzM1
MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTUsNyArMTU1LDcgQEAgYm9vbCBSZW5kZXJMaW5lQm94TGlzdDo6
cmFuZ2VJbnRlcnNlY3RzUgogICAgICAgICBibG9jayA9IHJlbmRlcmVyLT5jb250YWluaW5nQmxv
Y2soKTsKICAgICBMYXlvdXRVbml0IHBoeXNpY2FsU3RhcnQgPSBibG9jay0+ZmxpcEZvcldyaXRp
bmdNb2RlKGxvZ2ljYWxUb3ApOwogICAgIExheW91dFVuaXQgcGh5c2ljYWxFbmQgPSBibG9jay0+
ZmxpcEZvcldyaXRpbmdNb2RlKGxvZ2ljYWxCb3R0b20pOwotICAgIExheW91dFVuaXQgcGh5c2lj
YWxFeHRlbnQgPSBhYnNvbHV0ZVZhbHVlKHBoeXNpY2FsRW5kIC0gcGh5c2ljYWxTdGFydCk7Cisg
ICAgTGF5b3V0VW5pdCBwaHlzaWNhbEV4dGVudCA9IChwaHlzaWNhbEVuZCAtIHBoeXNpY2FsU3Rh
cnQpLmFicygpOwogICAgIHBoeXNpY2FsU3RhcnQgPSBtaW4ocGh5c2ljYWxTdGFydCwgcGh5c2lj
YWxFbmQpOwogICAgIAogICAgIGlmIChyZW5kZXJlci0+c3R5bGUoKS0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RN
YXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0TWFya2VyLmNwcAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTA1LDcgKzE1MDUs
NyBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OnVwZGF0ZU1hcmdpbnMoKQogICAgICAgICAgICAg
ICAgICAgICBjYXNlIE5vbmVMaXN0U3R5bGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1hcmdpblN0YXJ0ID0gbV90ZXh0LmlzRW1wdHkoKSA/IFpFUk9fTEFZT1VUX1VOSVQgOiAtbWlu
UHJlZmVycmVkTG9naWNhbFdpZHRoKCkgLSBvZmZzZXQgLyAyOworICAgICAgICAgICAgICAgICAg
ICAgICAgbWFyZ2luU3RhcnQgPSBtX3RleHQuaXNFbXB0eSgpID8gTGF5b3V0VW5pdCgwKSA6IC1t
aW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSAtIG9mZnNldCAvIDI7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICAgICAgbWFyZ2luRW5kID0gLW1hcmdpblN0YXJ0IC0g
bWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTWFycXVlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1hcnF1ZWUuY3BwCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSwxMyAr
MTI1LDEzIEBAIGludCBSZW5kZXJNYXJxdWVlOjpjb21wdXRlUG9zaXRpb24oRU1hcnEKICAgICAg
ICAgfQogICAgICAgICBpZiAoZGlyID09IE1SSUdIVCkgewogICAgICAgICAgICAgaWYgKHN0b3BB
dENvbnRlbnRFZGdlKQotICAgICAgICAgICAgICAgIHJldHVybiBtYXgoWkVST19MQVlPVVRfVU5J
VCwgbHRyID8gKGNvbnRlbnRXaWR0aCAtIGNsaWVudFdpZHRoKSA6IChjbGllbnRXaWR0aCAtIGNv
bnRlbnRXaWR0aCkpOworICAgICAgICAgICAgICAgIHJldHVybiBtYXgoTGF5b3V0VW5pdCgwKSwg
bHRyID8gKGNvbnRlbnRXaWR0aCAtIGNsaWVudFdpZHRoKSA6IChjbGllbnRXaWR0aCAtIGNvbnRl
bnRXaWR0aCkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBsdHIg
PyBjb250ZW50V2lkdGggOiBjbGllbnRXaWR0aDsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgIGlmIChzdG9wQXRDb250ZW50RWRnZSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbWluKFpFUk9fTEFZT1VUX1VOSVQsIGx0ciA/IChjb250ZW50V2lkdGggLSBjbGllbnRXaWR0
aCkgOiAoY2xpZW50V2lkdGggLSBjb250ZW50V2lkdGgpKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gbWluKExheW91dFVuaXQoMCksIGx0ciA/IChjb250ZW50V2lkdGggLSBjbGllbnRXaWR0aCkg
OiAoY2xpZW50V2lkdGggLSBjb250ZW50V2lkdGgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICByZXR1cm4gbHRyID8gLWNsaWVudFdpZHRoIDogLWNvbnRlbnRXaWR0aDsKICAg
ICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgJ
KHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51
TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAjaWZuZGVmIFJlbmRlck1l
bnVMaXN0X2gKICNkZWZpbmUgUmVuZGVyTWVudUxpc3RfaAogCi0jaW5jbHVkZSAiTGF5b3V0VHlw
ZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiUG9wdXBNZW51LmgiCiAj
aW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyRGVwcmVjYXRlZEZs
ZXhpYmxlQm94LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlD
b2x1bW5CbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck11bHRpQ29sdW1uQmxvY2suY3BwCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5CbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDggKzM3LDggQEAgUmVuZGVyTXVsdGlDb2x1bW5CbG9jazo6UmVuZGVyTXVsdGlDb2x1
bQogICAgIDogUmVuZGVyQmxvY2sobm9kZSkKICAgICAsIG1fZmxvd1RocmVhZCgwKQogICAgICwg
bV9jb2x1bW5Db3VudCgxKQotICAgICwgbV9jb2x1bW5XaWR0aChaRVJPX0xBWU9VVF9VTklUKQot
ICAgICwgbV9jb2x1bW5IZWlnaHQoWkVST19MQVlPVVRfVU5JVCkKKyAgICAsIG1fY29sdW1uV2lk
dGgoMCkKKyAgICAsIG1fY29sdW1uSGVpZ2h0KDApCiB7CiB9CiAKQEAgLTgzLDEzICs4MywxMyBA
QCB2b2lkIFJlbmRlck11bHRpQ29sdW1uQmxvY2s6OmNoZWNrRm9yUGFnCiAgICAgLy8gV2UgZG9u
J3QgYWN0dWFsbHkgdXBkYXRlIGFueSBvZiB0aGUgdmFyaWFibGVzLiBXZSBqdXN0IHN1YmNsYXNz
ZWQgdG8gYWRqdXN0IG91ciBjb2x1bW4gaGVpZ2h0LgogICAgIHVwZGF0ZUxvZ2ljYWxIZWlnaHQo
KTsKICAgICBMYXlvdXRVbml0IG5ld0NvbnRlbnRMb2dpY2FsSGVpZ2h0ID0gY29udGVudExvZ2lj
YWxIZWlnaHQoKTsKLSAgICBpZiAobmV3Q29udGVudExvZ2ljYWxIZWlnaHQgPiBaRVJPX0xBWU9V
VF9VTklUKSB7CisgICAgaWYgKG5ld0NvbnRlbnRMb2dpY2FsSGVpZ2h0ID4gTGF5b3V0VW5pdCgp
KSB7CiAgICAgICAgIC8vIFRoZSByZWdpb25zIHdpbGwgYmUgaW52YWxpZGF0ZWQgd2hlbiB3ZSBs
YXkgdGhlbSBvdXQgYW5kIHRoZXkgY2hhbmdlIHNpemUgdG8KICAgICAgICAgLy8gdGhlIG5ldyBj
b2x1bW4gaGVpZ2h0LgogICAgICAgICBpZiAoY29sdW1uSGVpZ2h0KCkgIT0gbmV3Q29udGVudExv
Z2ljYWxIZWlnaHQpCiAgICAgICAgICAgICBzZXRDb2x1bW5IZWlnaHQobmV3Q29udGVudExvZ2lj
YWxIZWlnaHQpOwogICAgIH0KLSAgICBzZXRMb2dpY2FsSGVpZ2h0KFpFUk9fTEFZT1VUX1VOSVQp
OworICAgIHNldExvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCgpKTsKIAogICAgIC8vIFNldCB1cCBv
dXIgY29sdW1uIHNldHMuCiAgICAgZW5zdXJlQ29sdW1uU2V0cygpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwCShyZXZpc2lv
biAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5T
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIFJlbmRlck11bHRpQ29sdW1uU2V0OjpSZW5kZXJNdWx0aUNvbHVtblNldChOb2RlKiBub2Rl
LCBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkKQogICAgIDogUmVuZGVyUmVnaW9uU2V0KG5v
ZGUsIGZsb3dUaHJlYWQpCiAgICAgLCBtX2NvbXB1dGVkQ29sdW1uQ291bnQoMSkKLSAgICAsIG1f
Y29tcHV0ZWRDb2x1bW5XaWR0aChaRVJPX0xBWU9VVF9VTklUKQotICAgICwgbV9jb21wdXRlZENv
bHVtbkhlaWdodChaRVJPX0xBWU9VVF9VTklUKQorICAgICwgbV9jb21wdXRlZENvbHVtbldpZHRo
KExheW91dFVuaXQoKSkKKyAgICAsIG1fY29tcHV0ZWRDb2x1bW5IZWlnaHQoTGF5b3V0VW5pdCgp
KQogewogfQogCkBAIC0yMjgsOSArMjI4LDkgQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtblNldDo6
cGFpbnRDb2x1bW5SdQogICAgIGJvb2wgYW50aWFsaWFzID0gc2hvdWxkQW50aWFsaWFzTGluZXMo
cGFpbnRJbmZvLmNvbnRleHQpOwogCiAgICAgYm9vbCBsZWZ0VG9SaWdodCA9IHN0eWxlKCktPmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLSAgICBMYXlvdXRVbml0IGN1cnJMb2dpY2FsTGVmdE9m
ZnNldCA9IGxlZnRUb1JpZ2h0ID8gWkVST19MQVlPVVRfVU5JVCA6IGNvbnRlbnRMb2dpY2FsV2lk
dGgoKTsKKyAgICBMYXlvdXRVbml0IGN1cnJMb2dpY2FsTGVmdE9mZnNldCA9IGxlZnRUb1JpZ2h0
ID8gTGF5b3V0VW5pdCgpIDogY29udGVudExvZ2ljYWxXaWR0aCgpOwogICAgIExheW91dFVuaXQg
cnVsZUFkZCA9IGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsTGVmdCgpOwotICAgIExheW91dFVuaXQg
cnVsZUxvZ2ljYWxMZWZ0ID0gbGVmdFRvUmlnaHQgPyBaRVJPX0xBWU9VVF9VTklUIDogY29udGVu
dExvZ2ljYWxXaWR0aCgpOworICAgIExheW91dFVuaXQgcnVsZUxvZ2ljYWxMZWZ0ID0gbGVmdFRv
UmlnaHQgPyBMYXlvdXRVbml0KCkgOiBjb250ZW50TG9naWNhbFdpZHRoKCk7CiAgICAgTGF5b3V0
VW5pdCBpbmxpbmVEaXJlY3Rpb25TaXplID0gY29tcHV0ZWRDb2x1bW5XaWR0aCgpOwogICAgIEJv
eFNpZGUgYm94U2lkZSA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkKICAgICAgICAgPyBsZWZ0
VG9SaWdodCA/IEJTTGVmdCA6IEJTUmlnaHQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwCShyZXZpc2lvbiAxMzM1MTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDM0LDcgKzQzNCw3IEBAIHN0YXRpYyBib29sIGlzQ29udGFpbmVkSW5O
b2RlcyhWZWN0b3I8Tm8KIAogc3RhdGljIGJvb2wgYm94SW50ZXJzZWN0c1JlZ2lvbihMYXlvdXRV
bml0IGxvZ2ljYWxUb3BGb3JCb3gsIExheW91dFVuaXQgbG9naWNhbEJvdHRvbUZvckJveCwgTGF5
b3V0VW5pdCBsb2dpY2FsVG9wRm9yUmVnaW9uLCBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b21Gb3JS
ZWdpb24pCiB7Ci0gICAgYm9vbCByZWdpb25Jc0VtcHR5ID0gbG9naWNhbEJvdHRvbUZvclJlZ2lv
biAhPSBNQVhfTEFZT1VUX1VOSVQgJiYgbG9naWNhbFRvcEZvclJlZ2lvbiAhPSBNSU5fTEFZT1VU
X1VOSVQKKyAgICBib29sIHJlZ2lvbklzRW1wdHkgPSBsb2dpY2FsQm90dG9tRm9yUmVnaW9uICE9
IExheW91dFVuaXQ6Om1heCgpICYmIGxvZ2ljYWxUb3BGb3JSZWdpb24gIT0gTGF5b3V0VW5pdDo6
bWluKCkKICAgICAgICAgJiYgKGxvZ2ljYWxCb3R0b21Gb3JSZWdpb24gLSBsb2dpY2FsVG9wRm9y
UmVnaW9uKSA8PSAwOwogICAgIHJldHVybiAgKGxvZ2ljYWxCb3R0b21Gb3JCb3ggLSBsb2dpY2Fs
VG9wRm9yQm94KSA+IDAKICAgICAgICAgJiYgIXJlZ2lvbklzRW1wdHkKQEAgLTQ0OCwxMyArNDQ4
LDEzIEBAIHZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpnZXRSYW5nZXMoVmUKIAogICAgIC8v
IGV4dGVuZCB0aGUgZmlyc3QgcmVnaW9uIHRvcCB0byBjb250YWluIGV2ZXJ5dGhpbmcgdXAgdG8g
aXRzIGxvZ2ljYWwgaGVpZ2h0CiAgICAgaWYgKHJlZ2lvbi0+aXNGaXJzdFJlZ2lvbigpKQotICAg
ICAgICBsb2dpY2FsVG9wRm9yUmVnaW9uID0gTUlOX0xBWU9VVF9VTklUOworICAgICAgICBsb2dp
Y2FsVG9wRm9yUmVnaW9uID0gTGF5b3V0VW5pdDo6bWluKCk7CiAgICAgZWxzZQogICAgICAgICBs
b2dpY2FsVG9wRm9yUmVnaW9uID0gIHJlZ2lvbi0+bG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250
ZW50KCk7CiAKICAgICAvLyBleHRlbmQgdGhlIGxhc3QgcmVnaW9uIHRvIGNvbnRhaW4gZXZlcnl0
aGluZyBhYm92ZSBpdHMgeSgpCiAgICAgaWYgKHJlZ2lvbi0+aXNMYXN0UmVnaW9uKCkpCi0gICAg
ICAgIGxvZ2ljYWxCb3R0b21Gb3JSZWdpb24gPSBNQVhfTEFZT1VUX1VOSVQ7CisgICAgICAgIGxv
Z2ljYWxCb3R0b21Gb3JSZWdpb24gPSBMYXlvdXRVbml0OjptYXgoKTsKICAgICBlbHNlCiAgICAg
ICAgIGxvZ2ljYWxCb3R0b21Gb3JSZWdpb24gPSByZWdpb24tPmxvZ2ljYWxCb3R0b21Gb3JGbG93
VGhyZWFkQ29udGVudCgpOwogCkBAIC00OTYsOCArNDk2LDggQEAgdm9pZCBSZW5kZXJOYW1lZEZs
b3dUaHJlYWQ6OmdldFJhbmdlcyhWZQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBMYXlv
dXRVbml0IG9mZnNldFRvcCA9IHJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKS0+b2Zmc2V0RnJv
bUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpOwotICAgICAgICAgICAgY29uc3QgTGF5b3V0UG9pbnQg
bG9naWNhbE9mZnNldEZyb21Ub3AoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IFpFUk9fTEFZ
T1VUX1VOSVQgOiAgb2Zmc2V0VG9wLAotICAgICAgICAgICAgICAgIGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyBvZmZzZXRUb3AgOiBaRVJPX0xBWU9VVF9VTklUKTsKKyAgICAgICAgICAgIGNv
bnN0IExheW91dFBvaW50IGxvZ2ljYWxPZmZzZXRGcm9tVG9wKGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkgPyBMYXlvdXRVbml0KCkgOiAgb2Zmc2V0VG9wLAorICAgICAgICAgICAgICAgIGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBvZmZzZXRUb3AgOiBMYXlvdXRVbml0KCkpOwogCiAgICAg
ICAgICAgICBib3VuZGluZ0JveC5tb3ZlQnkobG9naWNhbE9mZnNldEZyb21Ub3ApOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMTMz
NTE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0NDQsMTMgKzE0NDQsMTMgQEAgYm9vbCBSZW5kZXJPYmplY3Q6OnJlcGFp
bnRBZnRlckxheW91dElmTgogICAgIFJlbmRlclN0eWxlKiBvdXRsaW5lU3R5bGUgPSBvdXRsaW5l
U3R5bGVGb3JSZXBhaW50KCk7CiAgICAgTGF5b3V0VW5pdCBvdXRsaW5lV2lkdGggPSBvdXRsaW5l
U3R5bGUtPm91dGxpbmVTaXplKCk7CiAgICAgTGF5b3V0Qm94RXh0ZW50IGluc2V0U2hhZG93RXh0
ZW50ID0gc3R5bGUoKS0+Z2V0Qm94U2hhZG93SW5zZXRFeHRlbnQoKTsKLSAgICBMYXlvdXRVbml0
IHdpZHRoID0gYWJzb2x1dGVWYWx1ZShuZXdPdXRsaW5lQm94LndpZHRoKCkgLSBvbGRPdXRsaW5l
Qm94LndpZHRoKCkpOworICAgIExheW91dFVuaXQgd2lkdGggPSAobmV3T3V0bGluZUJveC53aWR0
aCgpIC0gb2xkT3V0bGluZUJveC53aWR0aCgpKS5hYnMoKTsKICAgICBpZiAod2lkdGgpIHsKICAg
ICAgICAgTGF5b3V0VW5pdCBzaGFkb3dMZWZ0OwogICAgICAgICBMYXlvdXRVbml0IHNoYWRvd1Jp
Z2h0OwogICAgICAgICBzdHlsZSgpLT5nZXRCb3hTaGFkb3dIb3Jpem9udGFsRXh0ZW50KHNoYWRv
d0xlZnQsIHNoYWRvd1JpZ2h0KTsKICAgICAgICAgaW50IGJvcmRlclJpZ2h0ID0gaXNCb3goKSA/
IHRvUmVuZGVyQm94KHRoaXMpLT5ib3JkZXJSaWdodCgpIDogMDsKLSAgICAgICAgTGF5b3V0VW5p
dCBib3hXaWR0aCA9IGlzQm94KCkgPyB0b1JlbmRlckJveCh0aGlzKS0+d2lkdGgoKSA6IFpFUk9f
TEFZT1VUX1VOSVQ7CisgICAgICAgIExheW91dFVuaXQgYm94V2lkdGggPSBpc0JveCgpID8gdG9S
ZW5kZXJCb3godGhpcyktPndpZHRoKCkgOiBMYXlvdXRVbml0KDApOwogICAgICAgICBMYXlvdXRV
bml0IG1pbkluc2V0UmlnaHRTaGFkb3dFeHRlbnQgPSBtaW48TGF5b3V0VW5pdD4oLWluc2V0U2hh
ZG93RXh0ZW50LnJpZ2h0KCksIG1pbjxMYXlvdXRVbml0PihuZXdCb3VuZHMud2lkdGgoKSwgb2xk
Qm91bmRzLndpZHRoKCkpKTsKICAgICAgICAgTGF5b3V0VW5pdCBib3JkZXJXaWR0aCA9IG1heDxM
YXlvdXRVbml0Pihib3JkZXJSaWdodCwgbWF4PExheW91dFVuaXQ+KHZhbHVlRm9yTGVuZ3RoKHN0
eWxlKCktPmJvcmRlclRvcFJpZ2h0UmFkaXVzKCkud2lkdGgoKSwgYm94V2lkdGgsIHYpLCB2YWx1
ZUZvckxlbmd0aChzdHlsZSgpLT5ib3JkZXJCb3R0b21SaWdodFJhZGl1cygpLndpZHRoKCksIGJv
eFdpZHRoLCB2KSkpOwogICAgICAgICBMYXlvdXRVbml0IGRlY29yYXRpb25zV2lkdGggPSBtYXg8
TGF5b3V0VW5pdD4oLW91dGxpbmVTdHlsZS0+b3V0bGluZU9mZnNldCgpLCBib3JkZXJXaWR0aCAr
IG1pbkluc2V0UmlnaHRTaGFkb3dFeHRlbnQpICsgbWF4PExheW91dFVuaXQ+KG91dGxpbmVXaWR0
aCwgc2hhZG93UmlnaHQpOwpAQCAtMTQ2NCwxMyArMTQ2NCwxMyBAQCBib29sIFJlbmRlck9iamVj
dDo6cmVwYWludEFmdGVyTGF5b3V0SWZOCiAgICAgICAgICAgICByZXBhaW50VXNpbmdDb250YWlu
ZXIocmVwYWludENvbnRhaW5lciwgcGl4ZWxTbmFwcGVkSW50UmVjdChyaWdodFJlY3QpKTsKICAg
ICAgICAgfQogICAgIH0KLSAgICBMYXlvdXRVbml0IGhlaWdodCA9IGFic29sdXRlVmFsdWUobmV3
T3V0bGluZUJveC5oZWlnaHQoKSAtIG9sZE91dGxpbmVCb3guaGVpZ2h0KCkpOworICAgIExheW91
dFVuaXQgaGVpZ2h0ID0gKG5ld091dGxpbmVCb3guaGVpZ2h0KCkgLSBvbGRPdXRsaW5lQm94Lmhl
aWdodCgpKS5hYnMoKTsKICAgICBpZiAoaGVpZ2h0KSB7CiAgICAgICAgIExheW91dFVuaXQgc2hh
ZG93VG9wOwogICAgICAgICBMYXlvdXRVbml0IHNoYWRvd0JvdHRvbTsKICAgICAgICAgc3R5bGUo
KS0+Z2V0Qm94U2hhZG93VmVydGljYWxFeHRlbnQoc2hhZG93VG9wLCBzaGFkb3dCb3R0b20pOwog
ICAgICAgICBpbnQgYm9yZGVyQm90dG9tID0gaXNCb3goKSA/IHRvUmVuZGVyQm94KHRoaXMpLT5i
b3JkZXJCb3R0b20oKSA6IDA7Ci0gICAgICAgIExheW91dFVuaXQgYm94SGVpZ2h0ID0gaXNCb3go
KSA/IHRvUmVuZGVyQm94KHRoaXMpLT5oZWlnaHQoKSA6IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAg
ICAgIExheW91dFVuaXQgYm94SGVpZ2h0ID0gaXNCb3goKSA/IHRvUmVuZGVyQm94KHRoaXMpLT5o
ZWlnaHQoKSA6IExheW91dFVuaXQoMCk7CiAgICAgICAgIExheW91dFVuaXQgbWluSW5zZXRCb3R0
b21TaGFkb3dFeHRlbnQgPSBtaW48TGF5b3V0VW5pdD4oLWluc2V0U2hhZG93RXh0ZW50LmJvdHRv
bSgpLCBtaW48TGF5b3V0VW5pdD4obmV3Qm91bmRzLmhlaWdodCgpLCBvbGRCb3VuZHMuaGVpZ2h0
KCkpKTsKICAgICAgICAgTGF5b3V0VW5pdCBib3JkZXJIZWlnaHQgPSBtYXg8TGF5b3V0VW5pdD4o
Ym9yZGVyQm90dG9tLCBtYXg8TGF5b3V0VW5pdD4odmFsdWVGb3JMZW5ndGgoc3R5bGUoKS0+Ym9y
ZGVyQm90dG9tTGVmdFJhZGl1cygpLmhlaWdodCgpLCBib3hIZWlnaHQsIHYpLCB2YWx1ZUZvckxl
bmd0aChzdHlsZSgpLT5ib3JkZXJCb3R0b21SaWdodFJhZGl1cygpLmhlaWdodCgpLCBib3hIZWln
aHQsIHYpKSk7CiAgICAgICAgIExheW91dFVuaXQgZGVjb3JhdGlvbnNIZWlnaHQgPSBtYXg8TGF5
b3V0VW5pdD4oLW91dGxpbmVTdHlsZS0+b3V0bGluZU9mZnNldCgpLCBib3JkZXJIZWlnaHQgKyBt
aW5JbnNldEJvdHRvbVNoYWRvd0V4dGVudCkgKyBtYXg8TGF5b3V0VW5pdD4ob3V0bGluZVdpZHRo
LCBzaGFkb3dCb3R0b20pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw3IEBACiAjaW5jbHVkZSAiRG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNs
dWRlICJGbG9hdFF1YWQuaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0VW5pdC5oIgotI2lu
Y2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUg
IlBhaW50UGhhc2UuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3RDaGlsZExpc3QuaCIKICNpbmNs
dWRlICJSZW5kZXJTdHlsZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck92ZXJmbG93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck92ZXJmbG93LmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPdmVyZmxvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAjaWZu
ZGVmIFJlbmRlck92ZXJmbG93X2gKICNkZWZpbmUgUmVuZGVyT3ZlcmZsb3dfaAogCi0jaW5jbHVk
ZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNw
cAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJl
Z2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3MCwxNCArMzcwLDE0IEBAIHZvaWQgUmVuZGVy
UmVnaW9uOjpkZWxldGVBbGxSZW5kZXJCb3hSZWcKIExheW91dFVuaXQgUmVuZGVyUmVnaW9uOjps
b2dpY2FsVG9wT2ZGbG93VGhyZWFkQ29udGVudFJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkg
Y29uc3QKIHsKICAgICBpZiAoIW1faXNWYWxpZCB8fCAhZmxvd1RocmVhZCgpKQotICAgICAgICBy
ZXR1cm4gWkVST19MQVlPVVRfVU5JVDsKKyAgICAgICAgcmV0dXJuIExheW91dFVuaXQoKTsKICAg
ICByZXR1cm4gZmxvd1RocmVhZCgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gcmVjdC55
KCkgOiByZWN0LngoKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJSZWdpb246OmxvZ2ljYWxCb3R0
b21PZkZsb3dUaHJlYWRDb250ZW50UmVjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0KSBjb25zdAog
ewogICAgIGlmICghbV9pc1ZhbGlkIHx8ICFmbG93VGhyZWFkKCkpCi0gICAgICAgIHJldHVybiBa
RVJPX0xBWU9VVF9VTklUOworICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCgpOwogICAgIHJldHVy
biBmbG93VGhyZWFkKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyByZWN0Lm1heFkoKSA6
IHJlY3QubWF4WCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UmVwbGFjZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJSZXBsYWNlZC5jcHAJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4Miw3ICszODIsNyBA
QCBMYXlvdXRVbml0IFJlbmRlclJlcGxhY2VkOjpjb21wdXRlUmVwbGFjCiAgICAgICAgICAgICAg
ICAgLy8gVGhpcyBzb2x2ZXMgYWJvdmUgZXF1YXRpb24gZm9yICd3aWR0aCcgKD09IGxvZ2ljYWxX
aWR0aCkuCiAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBtYXJnaW5TdGFydCA9IG1pbmltdW1W
YWx1ZUZvckxlbmd0aChzdHlsZSgpLT5tYXJnaW5TdGFydCgpLCBsb2dpY2FsV2lkdGgpOwogICAg
ICAgICAgICAgICAgIExheW91dFVuaXQgbWFyZ2luRW5kID0gbWluaW11bVZhbHVlRm9yTGVuZ3Ro
KHN0eWxlKCktPm1hcmdpbkVuZCgpLCBsb2dpY2FsV2lkdGgpOwotICAgICAgICAgICAgICAgIGxv
Z2ljYWxXaWR0aCA9IG1heChaRVJPX0xBWU9VVF9VTklULCBsb2dpY2FsV2lkdGggLSAobWFyZ2lu
U3RhcnQgKyBtYXJnaW5FbmQgKyAod2lkdGgoKSAtIGNsaWVudFdpZHRoKCkpKSk7CisgICAgICAg
ICAgICAgICAgbG9naWNhbFdpZHRoID0gbWF4KExheW91dFVuaXQoKSwgbG9naWNhbFdpZHRoIC0g
KG1hcmdpblN0YXJ0ICsgbWFyZ2luRW5kICsgKHdpZHRoKCkgLSBjbGllbnRXaWR0aCgpKSkpOwog
ICAgICAgICAgICAgICAgIGlmIChpc1BlcmNlbnRhZ2VJbnRyaW5zaWNTaXplKQogICAgICAgICAg
ICAgICAgICAgICBsb2dpY2FsV2lkdGggPSBsb2dpY2FsV2lkdGggKiBjb25zdHJhaW5lZFNpemUu
d2lkdGgoKSAvIDEwMDsKICAgICAgICAgICAgICAgICByZXR1cm4gY29tcHV0ZVJlcGxhY2VkTG9n
aWNhbFdpZHRoUmVzcGVjdGluZ01pbk1heFdpZHRoKGxvZ2ljYWxXaWR0aCwgaW5jbHVkZU1heFdp
ZHRoKTsKQEAgLTQ2MCw3ICs0NjAsNyBAQCB2b2lkIFJlbmRlclJlcGxhY2VkOjpjb21wdXRlUHJl
ZmVycmVkTG9nCiAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBjb21wdXRlTWF4UHJl
ZmVycmVkTG9naWNhbFdpZHRoKCkgKyBib3JkZXJBbmRQYWRkaW5nOwogCiAgICAgaWYgKHN0eWxl
KCktPm1heFdpZHRoKCkuaXNGaXhlZCgpKQotICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxX
aWR0aCA9IG1pbjxMYXlvdXRVbml0PihtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCwgc3R5bGUo
KS0+bWF4V2lkdGgoKS52YWx1ZSgpICsgKHN0eWxlKCktPmJveFNpemluZygpID09IENPTlRFTlRf
Qk9YID8gYm9yZGVyQW5kUGFkZGluZyA6IFpFUk9fTEFZT1VUX1VOSVQpKTsKKyAgICAgICAgbV9t
YXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtaW48TGF5b3V0VW5pdD4obV9tYXhQcmVmZXJyZWRM
b2dpY2FsV2lkdGgsIHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSArIChzdHlsZSgpLT5ib3hT
aXppbmcoKSA9PSBDT05URU5UX0JPWCA/IGJvcmRlckFuZFBhZGRpbmcgOiBMYXlvdXRVbml0KCkp
KTsKIAogICAgIGlmIChoYXNSZWxhdGl2ZURpbWVuc2lvbnMoKSkKICAgICAgICAgbV9taW5QcmVm
ZXJyZWRMb2dpY2FsV2lkdGggPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGUuY3BwCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjEsNyArMzIxLDcgQEAgTGF5
b3V0VW5pdCBSZW5kZXJUYWJsZTo6Y29udmVydFN0eWxlTG9naQogICAgIGlmIChpc0NTU1RhYmxl
ICYmIHN0eWxlTG9naWNhbFdpZHRoLmlzRml4ZWQoKSAmJiBzdHlsZUxvZ2ljYWxXaWR0aC5pc1Bv
c2l0aXZlKCkpIHsKICAgICAgICAgcmVjYWxjQm9yZGVyc0luUm93RGlyZWN0aW9uKCk7CiAgICAg
ICAgIGlmIChzdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCkKLSAgICAgICAgICAg
IGJvcmRlcnMgPSBib3JkZXJTdGFydCgpICsgYm9yZGVyRW5kKCkgKyAoY29sbGFwc2VCb3JkZXJz
KCkgPyBaRVJPX0xBWU9VVF9VTklUIDogcGFkZGluZ1N0YXJ0KCkgKyBwYWRkaW5nRW5kKCkpOwor
ICAgICAgICAgICAgYm9yZGVycyA9IGJvcmRlclN0YXJ0KCkgKyBib3JkZXJFbmQoKSArIChjb2xs
YXBzZUJvcmRlcnMoKSA/IExheW91dFVuaXQoKSA6IHBhZGRpbmdTdGFydCgpICsgcGFkZGluZ0Vu
ZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIG1pbmltdW1WYWx1ZUZvckxlbmd0aChzdHlsZUxvZ2lj
YWxXaWR0aCwgYXZhaWxhYmxlV2lkdGgsIHZpZXcoKSkgKyBib3JkZXJzOwogfQpAQCAtNDM0LDgg
KzQzNCw4IEBAIHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBMYXlvdXRVbml0IGJvcmRlckFuZFBhZGRpbmdCZWZvcmUgPSBib3JkZXJCZWZvcmUoKSAr
IChjb2xsYXBzaW5nID8gWkVST19MQVlPVVRfVU5JVCA6IHBhZGRpbmdCZWZvcmUoKSk7Ci0gICAg
TGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nQWZ0ZXIgPSBib3JkZXJBZnRlcigpICsgKGNvbGxh
cHNpbmcgPyBaRVJPX0xBWU9VVF9VTklUIDogcGFkZGluZ0FmdGVyKCkpOworICAgIExheW91dFVu
aXQgYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSA9IGJvcmRlckJlZm9yZSgpICsgKGNvbGxhcHNpbmcg
PyBMYXlvdXRVbml0KCkgOiBwYWRkaW5nQmVmb3JlKCkpOworICAgIExheW91dFVuaXQgYm9yZGVy
QW5kUGFkZGluZ0FmdGVyID0gYm9yZGVyQWZ0ZXIoKSArIChjb2xsYXBzaW5nID8gTGF5b3V0VW5p
dCgpIDogcGFkZGluZ0FmdGVyKCkpOwogCiAgICAgc2V0TG9naWNhbEhlaWdodChsb2dpY2FsSGVp
Z2h0KCkgKyBib3JkZXJBbmRQYWRkaW5nQmVmb3JlKTsKIApAQCAtNDQ2LDcgKzQ0Niw3IEBAIHZv
aWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiAgICAgTGF5b3V0VW5pdCBjb21wdXRlZExvZ2ljYWxI
ZWlnaHQgPSAwOwogICAgIGlmIChsb2dpY2FsSGVpZ2h0TGVuZ3RoLmlzRml4ZWQoKSkgewogICAg
ICAgICAvLyBIVE1MIHRhYmxlcyBzaXplIGFzIHRob3VnaCBDU1MgaGVpZ2h0IGluY2x1ZGVzIGJv
cmRlci9wYWRkaW5nLCBDU1MgdGFibGVzIGRvIG5vdC4KLSAgICAgICAgTGF5b3V0VW5pdCBib3Jk
ZXJzID0gWkVST19MQVlPVVRfVU5JVDsKKyAgICAgICAgTGF5b3V0VW5pdCBib3JkZXJzID0gTGF5
b3V0VW5pdCgpOwogICAgICAgICAvLyBGSVhNRTogV2UgY2Fubm90IGFwcGx5IGJveC1zaXppbmc6
IGNvbnRlbnQtYm94IG9uIDx0YWJsZT4gd2hpY2ggb3RoZXIgYnJvd3NlcnMgYWxsb3cuCiAgICAg
ICAgIGlmICgobm9kZSgpICYmIG5vZGUoKS0+aGFzVGFnTmFtZSh0YWJsZVRhZykpIHx8IHN0eWxl
KCktPmJveFNpemluZygpID09IEJPUkRFUl9CT1gpCiAgICAgICAgICAgICBib3JkZXJzID0gYm9y
ZGVyQW5kUGFkZGluZ0JlZm9yZSArIGJvcmRlckFuZFBhZGRpbmdBZnRlcjsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTkx
LDE0ICsxOTEsMTMgQEAgcHVibGljOgogICAgICAgICBpZiAodW5zaWduZWQgZWZmZWN0aXZlQ29s
dW1uQ291bnQgPSBudW1FZmZDb2xzKCkpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
TGF5b3V0VW5pdD4oZWZmZWN0aXZlQ29sdW1uQ291bnQgKyAxKSAqIGhCb3JkZXJTcGFjaW5nKCk7
CiAKLSAgICAgICAgcmV0dXJuIFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAgIHJldHVybiBMYXlv
dXRVbml0KCk7CiAgICAgfQogCiAgICAgTGF5b3V0VW5pdCBib3JkZXJzUGFkZGluZ0FuZFNwYWNp
bmdJblJvd0RpcmVjdGlvbigpIGNvbnN0CiAgICAgewogICAgICAgICAvLyAnYm9yZGVyLXNwYWNp
bmcnIG9ubHkgYXBwbGllcyB0byBzZXBhcmF0ZSBib3JkZXJzIChzZWUgMTcuNi4xIFRoZSBzZXBh
cmF0ZWQgYm9yZGVycyBtb2RlbCkuCi0gICAgICAgIHJldHVybiBib3JkZXJTdGFydCgpICsgYm9y
ZGVyRW5kKCkgKwotICAgICAgICAgICAgICAgKGNvbGxhcHNlQm9yZGVycygpID8gWkVST19MQVlP
VVRfVU5JVCA6IChwYWRkaW5nU3RhcnQoKSArIHBhZGRpbmdFbmQoKSArIGJvcmRlclNwYWNpbmdJ
blJvd0RpcmVjdGlvbigpKSk7CisgICAgICAgIHJldHVybiBib3JkZXJTdGFydCgpICsgYm9yZGVy
RW5kKCkgKyAoY29sbGFwc2VCb3JkZXJzKCkgPyBMYXlvdXRVbml0KCkgOiAocGFkZGluZ1N0YXJ0
KCkgKyBwYWRkaW5nRW5kKCkgKyBib3JkZXJTcGFjaW5nSW5Sb3dEaXJlY3Rpb24oKSkpOwogICAg
IH0KIAogICAgIC8vIFJldHVybiB0aGUgZmlyc3QgY29sdW1uIG9yIGNvbHVtbi1ncm91cC4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDEzMzUx
NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTYxNSw4ICsxNjE1LDggQEAgTGF5b3V0UmVjdCBSZW5kZXJUZXh0OjpsaW5lc1Zp
c3VhbE92ZXJmbAogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCiAgICAgLy8gUmV0dXJu
IHRoZSB3aWR0aCBvZiB0aGUgbWluaW1hbCBsZWZ0IHNpZGUgYW5kIHRoZSBtYXhpbWFsIHJpZ2h0
IHNpZGUuCi0gICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdFNpZGUgPSBNQVhfTEFZT1VUX1VOSVQ7
Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRTaWRlID0gTUlOX0xBWU9VVF9VTklUOworICAg
IExheW91dFVuaXQgbG9naWNhbExlZnRTaWRlID0gTGF5b3V0VW5pdDo6bWF4KCk7CisgICAgTGF5
b3V0VW5pdCBsb2dpY2FsUmlnaHRTaWRlID0gTGF5b3V0VW5pdDo6bWluKCk7CiAgICAgZm9yIChJ
bmxpbmVUZXh0Qm94KiBjdXJyID0gZmlyc3RUZXh0Qm94KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5u
ZXh0VGV4dEJveCgpKSB7CiAgICAgICAgIGxvZ2ljYWxMZWZ0U2lkZSA9IG1pbihsb2dpY2FsTGVm
dFNpZGUsIGN1cnItPmxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3coKSk7CiAgICAgICAgIGxvZ2lj
YWxSaWdodFNpZGUgPSBtYXgobG9naWNhbFJpZ2h0U2lkZSwgY3Vyci0+bG9naWNhbFJpZ2h0Vmlz
dWFsT3ZlcmZsb3coKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVDaHJvbWl1bUNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Db21tb24uY3BwCShyZXZpc2lvbiAxMzM1MTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUNvbW1vbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJSZW5kZXJUaGVtZUNocm9taXVtQ29tbW9uLmgiCiAKLSNpbmNsdWRlICJGcmFjdGlvbmFs
TGF5b3V0VW5pdC5oIgogI2luY2x1ZGUgIklucHV0VHlwZU5hbWVzLmgiCisjaW5jbHVkZSAiTGF5
b3V0VW5pdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Db21tb24uaAkocmV2aXNp
b24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21p
dW1Db21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2lmbmRlZiBSZW5k
ZXJUaGVtZUNocm9taXVtQ29tbW9uX2gKICNkZWZpbmUgUmVuZGVyVGhlbWVDaHJvbWl1bUNvbW1v
bl9oCiAKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFVuaXQuaCIK
ICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRy
ZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGMKICAgICByZXR1cm4gdHMgPDwgIigiIDw8IHAu
eCgpIDw8ICIsIiA8PCBwLnkoKSA8PCAiKSI7CiB9CiAKLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcCkKK1RleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IExheW91dFBvaW50JiBwKQogewog
ICAgIC8vIEZJWE1FOiBUaGVzZSBzaG91bGQgYmUgcHJpbnRlZCBhcyBmbG9hdHMuIEtlZXBpbmcg
dGhlbSBpbnRzIGZvciBjb25zaXN0ZW5jeSB3aXRoIHBlcnZpb3VzIHRlc3QgZXhwZWN0YXRpb25z
LgogICAgIHJldHVybiB0cyA8PCAiKCIgPDwgcC54KCkudG9JbnQoKSA8PCAiLCIgPDwgcC55KCku
dG9JbnQoKSA8PCAiKSI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJl
ZUFzVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUcmVlQXNUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRWxlbWVudDsKLWNsYXNzIEZyYWN0aW9uYWxMYXlv
dXRQb2ludDsKK2NsYXNzIExheW91dFBvaW50OwogY2xhc3MgRmxvYXRQb2ludDsKIGNsYXNzIEZs
b2F0U2l6ZTsKIGNsYXNzIEZyYW1lOwpAQCAtNzAsNyArNzAsNyBAQCBzdGF0aWMgdm9pZCB3cml0
ZVJlbmRlck9iamVjdChUZXh0U3RyZWFtCiAKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYsIGNvbnN0IEludFBvaW50Jik7CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mLCBjb25zdCBJbnRSZWN0Jik7Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmKTsKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYsIGNvbnN0IExheW91dFBvaW50Jik7CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mLCBjb25zdCBGbG9hdFBvaW50Jik7CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mLCBjb25zdCBGbG9hdFNpemUmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVmlldy5oCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsOCArMTI3LDggQEAg
cHVibGljOgogICAgICAgICBpZiAobV9sYXlvdXRTdGF0ZSkgewogICAgICAgICAgICAgbV9sYXlv
dXRTdGF0ZS0+bV9sYXlvdXREZWx0YSArPSBkZWx0YTsKICNpZiAhQVNTRVJUX0RJU0FCTEVEICYm
IEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCi0gICAgICAgICAgICBtX2xheW91
dFN0YXRlLT5tX2xheW91dERlbHRhWFNhdHVyYXRlZCB8PSBtX2xheW91dFN0YXRlLT5tX2xheW91
dERlbHRhLndpZHRoKCkgPT0gRnJhY3Rpb25hbExheW91dFVuaXQ6Om1heCgpIHx8IG1fbGF5b3V0
U3RhdGUtPm1fbGF5b3V0RGVsdGEud2lkdGgoKSA9PSBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWlu
KCk7Ci0gICAgICAgICAgICBtX2xheW91dFN0YXRlLT5tX2xheW91dERlbHRhWVNhdHVyYXRlZCB8
PSBtX2xheW91dFN0YXRlLT5tX2xheW91dERlbHRhLmhlaWdodCgpID09IEZyYWN0aW9uYWxMYXlv
dXRVbml0OjptYXgoKSB8fCBtX2xheW91dFN0YXRlLT5tX2xheW91dERlbHRhLmhlaWdodCgpID09
IEZyYWN0aW9uYWxMYXlvdXRVbml0OjptaW4oKTsKKyAgICAgICAgICAgIG1fbGF5b3V0U3RhdGUt
Pm1fbGF5b3V0RGVsdGFYU2F0dXJhdGVkIHw9IG1fbGF5b3V0U3RhdGUtPm1fbGF5b3V0RGVsdGEu
d2lkdGgoKSA9PSBMYXlvdXRVbml0OjptYXgoKSB8fCBtX2xheW91dFN0YXRlLT5tX2xheW91dERl
bHRhLndpZHRoKCkgPT0gTGF5b3V0VW5pdDo6bWluKCk7CisgICAgICAgICAgICBtX2xheW91dFN0
YXRlLT5tX2xheW91dERlbHRhWVNhdHVyYXRlZCB8PSBtX2xheW91dFN0YXRlLT5tX2xheW91dERl
bHRhLmhlaWdodCgpID09IExheW91dFVuaXQ6Om1heCgpIHx8IG1fbGF5b3V0U3RhdGUtPm1fbGF5
b3V0RGVsdGEuaGVpZ2h0KCkgPT0gTGF5b3V0VW5pdDo6bWluKCk7CiAjZW5kaWYKICAgICAgICAg
fQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9OaW5lUGllY2VJ
bWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9OaW5l
UGllY2VJbWFnZS5oCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvTmluZVBpZWNlSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBA
QAogI2lmbmRlZiBOaW5lUGllY2VJbWFnZV9oCiAjZGVmaW5lIE5pbmVQaWVjZUltYWdlX2gKIAot
I2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgogI2luY2x1
ZGUgIkxlbmd0aEJveC5oIgogI2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDEzMzUx
NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSAiRm9udEJhc2VsaW5lLmgiCiAj
aW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgot
I2luY2x1ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dEJv
eEV4dGVudC5oIgogI2luY2x1ZGUgIkxlbmd0aC5oIgogI2luY2x1ZGUgIkxlbmd0aEJveC5oIgog
I2luY2x1ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1NoYWRvd0RhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9TaGFkb3dEYXRhLmNwcAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2hhZG93RGF0
YS5oIgogCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAi
TGF5b3V0UmVjdC5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvU2hhZG93RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFkb3dEYXRhLmgJKHJldmlzaW9uIDEzMzUxNykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFkb3dEYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0
LmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdl
U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxl
Q2FjaGVkSW1hZ2VTZXQuaAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2VTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NyArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2VDbGllbnQuaCIKICNpbmNsdWRlICJD
YWNoZWRSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVk
ZSAiTGF5b3V0U2l6ZS5oIgogI2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFn
ZS5oCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
U3R5bGVJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAi
Q1NTVmFsdWUuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKLSNp
bmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFNpemUuaCIKICNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJTdXBwb3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJTdXBwb3J0LmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3
ICsyNSw3IEBACiAjZGVmaW5lIFNWR1JlbmRlclN1cHBvcnRfaAogCiAjaWYgRU5BQkxFKFNWRykK
LSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNs
dWRlICJQYWludEluZm8uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzUxOCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTItMTEtMDUg
IEVtaWwgQSBFa2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlbW92ZSBMYXlv
dXRUeXBlcyBhYnN0cmFjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTMwNTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBSZW1vdmUgTGF5b3V0VHlwZXMgYWJzdHJhY3Rpb24gYW5kIHJlbmFtZSBGcmFj
dGlvbmFsTGF5b3V0KiB0bworICAgICAgICBMYXlvdXQqIG5vdyB0aGF0IGFsbCBwbGF0Zm9ybXMg
dXNlIHRoZSBGcmFjdGlvbmFsTGF5b3V0IHZlcnNpb24KKyAgICAgICAgKGFsYmVpdCB3aXRoIGRp
ZmZlcmVudCBmcmFjdGlvbnMpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gY2hhbmdlIGlu
IGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBzcmMvTGlua0hpZ2hsaWdodC5jcHA6CisKIDIw
MTItMTEtMDUgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAg
ICAgRml4IGxheWVyIGJvcmRlcnMgdG8gY2xlYW5pbmcgYXBwZWFyIGFuZCBkaXNhcHBlYXIgb24g
c3dpdGNoaW5nCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9MaW5rSGlnaGxpZ2h0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9MaW5rSGlnaGxp
Z2h0LmNwcAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
TGlua0hpZ2hsaWdodC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNs
dWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
Ci0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAi
Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tp
YS5oIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172430</attachid>
            <date>2012-11-05 16:18:25 -0800</date>
            <delta_ts>2012-11-06 13:42:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93050-20121105161639.patch</filename>
            <type>text/plain</type>
            <size>394941</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MyBAQAorMjAxMi0xMS0wNSAgRW1pbCBB
IEVrbHVuZCAgPGVhZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmVtb3ZlIExheW91dFR5cGVz
IGFic3RyYWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05MzA1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFJlbW92ZSBMYXlvdXRUeXBlcyBhYnN0cmFjdGlvbiBhbmQgcmVuYW1lIEZyYWN0aW9uYWxM
YXlvdXQqIHRvCisgICAgICAgIExheW91dCogbm93IHRoYXQgYWxsIHBsYXRmb3JtcyB1c2UgdGhl
IEZyYWN0aW9uYWxMYXlvdXQgdmVyc2lvbgorICAgICAgICAoYWxiZWl0IHdpdGggZGlmZmVyZW50
IGZyYWN0aW9ucykuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBjaGFuZ2UgaW4gZnVuY3Rp
b25hbGl0eS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2Vm
aWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJDb3JlLmV4
cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3Bw
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaDoKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiBjc3Mv
TGVuZ3RoRnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKiBjc3MvTGVuZ3RoRnVuY3Rpb25zLmg6Cisg
ICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogZG9tL0RvY3VtZW50TWFya2VyQ29u
dHJvbGxlci5oOgorICAgICAgICAqIGRvbS9FbGVtZW50UmFyZURhdGEuaDoKKyAgICAgICAgKiBk
b20vTW91c2VSZWxhdGVkRXZlbnQuaDoKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAq
IGRvbS9Ub3VjaC5oOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAg
ICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaDoKKyAgICAgICAgKiBlZGl0aW5nL1JlbmRl
cmVkUG9zaXRpb24uaDoKKyAgICAgICAgKiBodG1sL0hUTUxBcmVhRWxlbWVudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvclRpbWVsaW5lQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvVGltZWxpbmVSZWNv
cmRGYWN0b3J5LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5
Lmg6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmg6CisgICAgICAgICogcGFn
ZS9Gb2N1c0NvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorICAgICAg
ICAqIHBhZ2UvUGFnZS5oOgorICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwOgor
ICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9G
cmFjdGlvbmFsTGF5b3V0VW5pdC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL0xheW91
dFVuaXQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRnJhY3Rpb25hbExh
eW91dFVuaXQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9MZW5ndGguaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9Qb3B1cE1lbnVDbGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hbmltYXRpb24vQW5p
bWF0aW9uVXRpbGl0aWVzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2lu
dC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRSZWN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRT
aXplLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94RXh0
ZW50Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExh
eW91dFBvaW50Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rp
b25hbExheW91dFJlY3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ZyYWN0aW9uYWxMYXlvdXRSZWN0Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRnJhY3Rpb25hbExheW91dFNpemUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbnRSZWN0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50LmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dEJveEV4
dGVudC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50Lmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxM
YXlvdXRCb3hFeHRlbnQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRQb2lu
dC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlv
bmFsTGF5b3V0UG9pbnQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rp
b25hbExheW91dFJlY3QuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJl
Y3QuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rp
b25hbExheW91dFJlY3QuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRTaXpl
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9u
YWxMYXlvdXRTaXplLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlck9wZXJh
dGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVy
UGFyYW1ldGVyTGlzdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyT3BlcmF0aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJPcGVyYXRpb25zLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9WYWxp
ZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFBvaW50UXQuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxMYXlvdXRSZWN0UXQu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxM
YXlvdXRTaXplUXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0
L0xheW91dFBvaW50UXQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9GcmFjdGlvbmFsTGF5b3V0UG9pbnRRdC5jcHAuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvTGF5b3V0UmVjdFF0LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvTGF5b3V0U2l6ZVF0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFNpemVRdC5jcHAuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25zLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25N
YXRyaXguY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNm
b3JtYXRpb25NYXRyaXguaDoKKyAgICAgICAgKiByZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0Lmg6
CisgICAgICAgICogcmVuZGVyaW5nL0NvbHVtbkluZm8uaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmg6CisgICAgICAgICogcmVuZGVyaW5nL0ZpbHRlckVm
ZmVjdFJlbmRlcmVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvR2FwUmVjdHMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0
VGVzdFJlc3VsdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0aW5nVHJhbnNmb3JtU3Rh
dGUuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgICogcmVuZGVy
aW5nL0xheW91dFJlcGFpbnRlci5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL0xheW91dFJlcGFp
bnRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRTdGF0ZS5oOgorICAgICAgICAqIHJl
bmRlcmluZy9MYXlvdXRUeXBlcy5oOgorICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRUeXBlc0lu
bGluZU1ldGhvZHMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUGFpbnRJbmZvLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
QmxvY2suaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNw
cDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJG
bGV4aWJsZUJveC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3Bw
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJHZW9tZXRyeU1hcC5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNlLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
cklubGluZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmg6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlz
dE1hcmtlci5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVs
dGlDb2x1bW5TZXQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJl
YWQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT3Zl
cmZsb3cuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUYWJsZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
aGVtZUNocm9taXVtQ29tbW9uLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVD
aHJvbWl1bUNvbW1vbi5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJWaWV3Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVj
ZUltYWdlLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuY3BwOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdHlsZS9TaGFkb3dEYXRhLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2Fj
aGVkSW1hZ2VTZXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZS5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oOgorCiAyMDEyLTExLTA1
ICBQaGlsaXAgUm9nZXJzICA8cGRyQGdvb2dsZS5jb20+CiAKICAgICAgICAgVW5ibG9jayBTVkcg
ZXh0ZXJuYWwgcmVmZXJlbmNlcwpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDEz
MzUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0xODc1LDggKzE4NzUsOCBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udEZhbWlseS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGgu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZlYXR1cmVTZXR0aW5ncy5jcHAKLSAgICBw
bGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmNwcAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0xheW91dEJveEV4dGVudC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0dlbmVyYXRvckdlbmVyYXRlZEltYWdlLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCShyZXZpc2lvbiAxMzM1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC00Mjc3LDcgKzQyNzcsNyBAQCB3ZWJjb3JlX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0Zsb2F0Q29udmVyc2lvbi5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GcmFjdGlv
bmFsTGF5b3V0VW5pdC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYXlvdXRVbml0Lmgg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dhbWVwYWRzLmggXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0hhc2hUb29scy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9IaXN0b2dy
YW1TdXBwb3J0LmNwcCBcCkBAIC00NDQxLDEyICs0NDQxLDEyIEBAIHdlYmNvcmVfc291cmNlcyAr
PSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNtb290aGluZ01vZGUu
aCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFRyYWl0c01hc2suaCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFdpZHRoVmFyaWFudC5oIFwK
LQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94RXh0
ZW50LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExh
eW91dEJveEV4dGVudC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFj
dGlvbmFsTGF5b3V0UG9pbnQuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RnJhY3Rpb25hbExheW91dFJlY3QuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0U2l6ZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9MYXlvdXRCb3hFeHRlbnQuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9MYXlvdXRCb3hFeHRlbnQuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTGF5b3V0UG9pbnQuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvTGF5b3V0UmVjdC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xh
eW91dFJlY3QuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0U2l6
ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmgg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRvci5oIFwKQEAgLTQ5
ODksOCArNDk4OSw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91
dFN0YXRlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmggXAot
CVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlcy5oIFwKLQlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmggXAogCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9MYXlvdXRSZXBhaW50ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0xheW91dFJlcGFpbnRlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9PdmVybGFw
VGVzdFJlcXVlc3RDbGllbnQuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDEzMzUzOSkK
KysrIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTk2OCw4ICs5
NjgsOCBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udEZhc3RQYXRoLmNwcCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExh
eW91dEJveEV4dGVudC5jcHAgXAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlv
dXRSZWN0LmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50LmNwcCBc
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UmVjdC5jcHAgXAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0dlbmVyYXRlZEltYWdlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJh
dG9yR2VuZXJhdGVkSW1hZ2UuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VU
cmVlTm9kZS5jcHAgXApAQCAtMjc4MSw5ICsyNzgxLDkgQEAgU09VUkNFUyArPSBcCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvRmxvYXRQb2ludFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvRmxvYXRSZWN0UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9GbG9hdFNp
emVRdC5jcHAgXAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxMYXlvdXRQb2lu
dFF0LmNwcCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFJlY3RR
dC5jcHAgXAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxMYXlvdXRTaXplUXQu
Y3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9MYXlvdXRQb2ludFF0LmNwcCBcCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvTGF5b3V0UmVjdFF0LmNwcCBcCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvTGF5b3V0U2l6ZVF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3Jh
ZGllbnRRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0
LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSWNvblF0LmNwcCBcCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTMzNTM5KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw3ICsxNDcsNiBAQCBfX1pON1dlYkNvcmUx
MU1lbW9yeUNhY2hlMTNzZXRDYXBhY2l0aWVzCiBfX1pON1dlYkNvcmUxMU1lbW9yeUNhY2hlMTRl
dmljdFJlc291cmNlc0V2CiBfX1pON1dlYkNvcmUxMU1lbW9yeUNhY2hlMTlnZXRPcmlnaW5zV2l0
aENhY2hlRVJOM1dURjdIYXNoU2V0SU5TMV82UmVmUHRySU5TXzE0U2VjdXJpdHlPcmlnaW5FRUVO
U18xOFNlY3VyaXR5T3JpZ2luSGFzaEVOUzFfMTBIYXNoVHJhaXRzSVM1X0VFRUUKIF9fWk43V2Vi
Q29yZTExTWVtb3J5Q2FjaGUyNXJlbW92ZVJlc291cmNlc1dpdGhPcmlnaW5FUE5TXzE0U2VjdXJp
dHlPcmlnaW5FCi1fX1pON1dlYkNvcmUxMVJlbmRlckxheWVyMTlzY3JvbGxSZWN0VG9WaXNpYmxl
RVJLTlNfMjBGcmFjdGlvbmFsTGF5b3V0UmVjdEVSS05TXzE1U2Nyb2xsQWxpZ25tZW50RVM2Xwog
X19aTjdXZWJDb3JlMTFVUkxXaXRoRGF0YUVQNk5TRGF0YVA1TlNVUkwKIF9fWk43V2ViQ29yZTEx
bWVtb3J5Q2FjaGVFdgogX19aTjdXZWJDb3JlMTFzdGFydE9mV29yZEVSS05TXzE1VmlzaWJsZVBv
c2l0aW9uRU5TXzlFV29yZFNpZGVFCkBAIC0xNTksNyArMTU4LDcgQEAgX19aTjdXZWJDb3JlMTJF
dmVudEhhbmRsZXIxNHNjcm9sbE92ZXJmbAogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxNWhh
bmRsZUFjY2Vzc0tleUVSS05TXzIxUGxhdGZvcm1LZXlib2FyZEV2ZW50RQogX19aTjdXZWJDb3Jl
MTJFdmVudEhhbmRsZXIxNmhhbmRsZVdoZWVsRXZlbnRFUktOU18xOFBsYXRmb3JtV2hlZWxFdmVu
dEUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTdzY3JvbGxSZWN1cnNpdmVseUVOU18xNVNj
cm9sbERpcmVjdGlvbkVOU18xN1Njcm9sbEdyYW51bGFyaXR5RVBOU180Tm9kZUUKLV9fWk43V2Vi
Q29yZTEyRXZlbnRIYW5kbGVyMjBoaXRUZXN0UmVzdWx0QXRQb2ludEVSS05TXzIxRnJhY3Rpb25h
bExheW91dFBvaW50RWJiTlNfMTdIaXRUZXN0U2Nyb2xsYmFyc0VqUktOU18yMEZyYWN0aW9uYWxM
YXlvdXRTaXplRQorX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyMGhpdFRlc3RSZXN1bHRBdFBv
aW50RVJLTlNfMTFMYXlvdXRQb2ludEViYk5TXzE3SGl0VGVzdFNjcm9sbGJhcnNFalJLTlNfMTBM
YXlvdXRTaXplRQogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyMWhhbmRsZU1vdXNlUHJlc3NF
dmVudEVSS05TXzE4UGxhdGZvcm1Nb3VzZUV2ZW50RQogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRs
ZXIyM2hhbmRsZU1vdXNlUmVsZWFzZUV2ZW50RVJLTlNfMThQbGF0Zm9ybU1vdXNlRXZlbnRFCiBf
X1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjI0bG9naWNhbFNjcm9sbFJlY3Vyc2l2ZWx5RU5TXzIy
U2Nyb2xsTG9naWNhbERpcmVjdGlvbkVOU18xN1Njcm9sbEdyYW51bGFyaXR5RVBOU180Tm9kZUUK
QEAgLTE4NSw4ICsxODQsNyBAQCBfX1pON1dlYkNvcmUxMlByaW50Q29udGV4dDlzcG9vbFBhZ2VF
Uk5TCiBfX1pON1dlYkNvcmUxMlByaW50Q29udGV4dDlzcG9vbFJlY3RFUk5TXzE1R3JhcGhpY3ND
b250ZXh0RVJLTlNfN0ludFJlY3RFCiBfX1pON1dlYkNvcmUxMlByaW50Q29udGV4dEMxRVBOU181
RnJhbWVFCiBfX1pON1dlYkNvcmUxMlByaW50Q29udGV4dEQxRXYKLV9fWk5LN1dlYkNvcmUxMlJl
bmRlck9iamVjdDE2cmVwYWludFJlY3RhbmdsZUVSS05TXzIwRnJhY3Rpb25hbExheW91dFJlY3RF
YgotX19aTjdXZWJDb3JlMTJSZW5kZXJPYmplY3QxOXNjcm9sbFJlY3RUb1Zpc2libGVFUktOU18y
MEZyYWN0aW9uYWxMYXlvdXRSZWN0RVJLTlNfMTVTY3JvbGxBbGlnbm1lbnRFUzZfCitfX1pON1dl
YkNvcmUxMlJlbmRlck9iamVjdDE5c2Nyb2xsUmVjdFRvVmlzaWJsZUVSS05TXzEwTGF5b3V0UmVj
dEVSS05TXzE1U2Nyb2xsQWxpZ25tZW50RVM2XwogX19aTjdXZWJDb3JlMTJTaGFyZWRCdWZmZXIx
MHdyYXBDRkRhdGFFUEs4X19DRkRhdGEKIF9fWk43V2ViQ29yZTEyU2hhcmVkQnVmZmVyMTB3cmFw
TlNEYXRhRVA2TlNEYXRhCiBfX1pON1dlYkNvcmUxMlNoYXJlZEJ1ZmZlcjEyY3JlYXRlTlNEYXRh
RXYKQEAgLTQ2Niw3ICs0NjQsNiBAQCBfX1pON1dlYkNvcmUxNlZpc2libGVTZWxlY3Rpb25DMUVS
S05TXzE1CiBfX1pON1dlYkNvcmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUEtOU180Tm9kZUUKIF9fWk43
V2ViQ29yZTE2Y3JlYXRlRnVsbE1hcmt1cEVQS05TXzVSYW5nZUUKIF9fWk43V2ViQ29yZTE2ZGVs
ZXRlQWxsQ29va2llc0V2Ci1fX1pON1dlYkNvcmUxNmVuY2xvc2luZ0ludFJlY3RFUktOU18yMEZy
YWN0aW9uYWxMYXlvdXRSZWN0RQogX19aTjdXZWJDb3JlMTZlbmNsb3NpbmdJbnRSZWN0RVJLTlNf
OUZsb2F0UmVjdEUKIF9fWk43V2ViQ29yZTE2aXNFbmRPZlBhcmFncmFwaEVSS05TXzE1VmlzaWJs
ZVBvc2l0aW9uRU5TXzI3RWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlRQogX19aTjdXZWJDb3Jl
MTZpc1VzZXJWaXNpYmxlVVJMRVA4TlNTdHJpbmcKQEAgLTg2Miw3ICs4NTksNiBAQCBfX1pON1dl
YkNvcmU3RWxlbWVudDlpbm5lclRleHRFdgogX19aTjdXZWJDb3JlN0ludFJlY3Q1c2NhbGVFZgog
X19aTjdXZWJDb3JlN0ludFJlY3Q1dW5pdGVFUktTMF8KIF9fWk43V2ViQ29yZTdJbnRSZWN0OWlu
dGVyc2VjdEVSS1MwXwotX19aTjdXZWJDb3JlN0ludFJlY3RDMUVSS05TXzIwRnJhY3Rpb25hbExh
eW91dFJlY3RFCiBfX1pON1dlYkNvcmU3SW50UmVjdEMxRVJLTlNfOUZsb2F0UmVjdEUKIF9fWk43
V2ViQ29yZTdJbnRTaXplQzFFUks2Q0dTaXplCiBfX1pON1dlYkNvcmU3UnVuTG9vcDE0cnVuRm9y
RHVyYXRpb25FZApAQCAtMTAwMiw5ICs5OTgsNyBAQCBfX1pON1dlYkNvcmU4dG9TdHJpbmdFUktO
M1dURjZWZWN0b3JJTlNfCiBfX1pON1dlYkNvcmU5RE9NV2luZG93MzBkaXNwYXRjaEFsbFBlbmRp
bmdVbmxvYWRFdmVudHNFdgogX19aTjdXZWJDb3JlOURPTVdpbmRvdzM2ZGlzcGF0Y2hBbGxQZW5k
aW5nQmVmb3JlVW5sb2FkRXZlbnRzRXYKIF9fWk43V2ViQ29yZTlGbG9hdFJlY3RDMUVSSzZDR1Jl
Y3QKLV9fWk43V2ViQ29yZTlGbG9hdFJlY3RDMUVSS05TXzIwRnJhY3Rpb25hbExheW91dFJlY3RF
CiBfX1pON1dlYkNvcmU5RmxvYXRSZWN0QzFFUktOU183SW50UmVjdEUKLV9fWk43V2ViQ29yZTlG
bG9hdFNpemVDMUVSS05TXzIwRnJhY3Rpb25hbExheW91dFNpemVFCiBfX1pON1dlYkNvcmU5Rmxv
YXRTaXplQzFFUktOU183SW50U2l6ZUUKIF9fWk43V2ViQ29yZTlGb250Q2FjaGUxM2ZvbnREYXRh
Q291bnRFdgogX19aTjdXZWJDb3JlOUZvbnRDYWNoZTIxaW5hY3RpdmVGb250RGF0YUNvdW50RXYK
QEAgLTExODYsNiArMTE4MCw3IEBAIF9fWk5LN1dlYkNvcmUxMVJlbmRlclN0eWxlNGZvbnRFdgog
X19aTks3V2ViQ29yZTExU2NyaXB0VmFsdWU5Z2V0U3RyaW5nRVBOM0pTQzlFeGVjU3RhdGVFUk4z
V1RGNlN0cmluZ0UKIF9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVjdDE0ZW5jbG9zaW5nTGF5ZXJF
dgogX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTVsb2NhbFRvQWJzb2x1dGVFUktOU18xMEZs
b2F0UG9pbnRFagorX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTZyZXBhaW50UmVjdGFuZ2xl
RVJLTlNfMTBMYXlvdXRSZWN0RWIKIF9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVjdDIwbG9jYWxU
b0NvbnRhaW5lclF1YWRFUktOU185RmxvYXRRdWFkRVBOU18yMlJlbmRlckxheWVyTW9kZWxPYmpl
Y3RFalBiCiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QyM2Fic29sdXRlQm91bmRpbmdCb3hS
ZWN0RWIKIF9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVjdDM5cGl4ZWxTbmFwcGVkQWJzb2x1dGVD
bGlwcGVkT3ZlcmZsb3dSZWN0RXYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDEzMzUz
OSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzc0
LDggKzM3NCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNtb290aGlu
Z01vZGUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRm9udFRyYWl0c01hc2su
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRm9udFdpZHRoVmFyaWFudC5oJywK
LSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5oJywK
LSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0U2l6ZS5oJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0LmgnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFNpemUuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvR2VuZXJhdG9yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L0dseXBoLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgn
LApAQCAtNTU4LDggKzU1OCw2IEBACiAgICAgICAgICAgICAncmVuZGVyaW5nL0lubGluZUZsb3dC
b3guaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL0lubGluZVRleHRCb3guaCcsCiAgICAgICAg
ICAgICAncmVuZGVyaW5nL0xheW91dFN0YXRlLmgnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9M
YXlvdXRUeXBlcy5oJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvTGF5b3V0VHlwZXNJbmxpbmVN
ZXRob2RzLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9MYXlvdXRSZXBhaW50ZXIuaCcsCiAg
ICAgICAgICAgICAncmVuZGVyaW5nL092ZXJsYXBUZXN0UmVxdWVzdENsaWVudC5oJywKICAgICAg
ICAgICAgICdyZW5kZXJpbmcvUGFnaW5hdGlvbi5oJywKQEAgLTQ3ODMsNyArNDc4MSw3IEBACiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaCcsCi0gICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5jcHAnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dEJveEV4dGVudC5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRvckdlbmVyYXRlZEltYWdlLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5oJywKQEAgLTU5MDAsNyArNTg5
OCw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvTGF5b3V0UmVjdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL1JlZ2lvbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5jcHAnLApJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDEzMzUzOSkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0yODM5MSw3ICsyODM5MSw3IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUK
LQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXEZyYWN0aW9uYWxMYXlvdXRVbml0LmgiCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxMYXlvdXRVbml0LmgiCiAJCQkJPgogCQkJPC9G
aWxlPgogCQkJPEZpbGUKQEAgLTI5NDc4LDI3ICsyOTQ3OCwyNyBAQAogCQkJCQk+CiAJCQkJPC9G
aWxlPgogCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Nc
RnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oIgorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRm
b3JtXGdyYXBoaWNzXExheW91dEJveEV4dGVudC5oIgogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJ
CTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRnJhY3Rpb25h
bExheW91dEJveEV4dGVudC5jcHAiCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3Jh
cGhpY3NcTGF5b3V0Qm94RXh0ZW50LmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8Rmls
ZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZyYWN0aW9uYWxMYXlv
dXRQb2ludC5oIgorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXExheW91
dFBvaW50LmgiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAiCisJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcTGF5b3V0UmVjdC5jcHAiCiAJCQkJ
CT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1xGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIgorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXExheW91dFJlY3QuaCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJ
CQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZyYWN0aW9u
YWxMYXlvdXRTaXplLmgiCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Nc
TGF5b3V0U2l6ZS5oIgogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAxMzM1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMwNCw2ICszMDQsMTMgQEAKIAkJMTQxMTVCNzIw
OUY4NENENjAwQ0E0RkMxIC8qIEpTTm9kZUZpbHRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDExNUI3MDA5Rjg0Q0Q2MDBDQTRGQzEgLyogSlNO
b2RlRmlsdGVyLmNwcCAqLzsgfTsKIAkJMTQxMTVCNzMwOUY4NENENjAwQ0E0RkMxIC8qIEpTTm9k
ZUZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTQxMTVCNzEwOUY4NENENjAwQ0E0RkMxIC8qIEpTTm9kZUZpbHRlci5oICovOyB9OwogCQkxNDE5
RDJDNTBDRUE2RjYxMDBGRjUwN0EgLyogVHJlZVNoYXJlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxOUQyQzQwQ0VBNkY2MTAwRkY1MDdBIC8qIFRy
ZWVTaGFyZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkxNDFEQzA0ODE2NDgzNDhGMDAzNzFFNUEgLyogTGF5b3V0VW5pdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxREMwNDcxNjQ4MzQ4RjAwMzcx
RTVBIC8qIExheW91dFVuaXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkxNDFEQzA0RjE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0Qm94RXh0ZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MURD
MDQ5MTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRCb3hFeHRlbnQuY3BwICovOyB9OworCQkxNDFE
QzA1MDE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0Qm94RXh0ZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDFEQzA0QTE2NDgzNEI5MDAzNzFFNUEg
LyogTGF5b3V0Qm94RXh0ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJMTQxREMwNTExNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dFBvaW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDFEQzA0QjE2
NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0UG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNDFEQzA1MjE2NDgzNEI5MDAzNzFFNUEgLyogTGF5
b3V0UmVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDFEQzA0QzE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0UmVjdC5jcHAgKi87IH07CisJCTE0
MURDMDUzMTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRSZWN0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDFEQzA0RDE2NDgzNEI5MDAzNzFFNUEgLyog
TGF5b3V0UmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTE0MURDMDU0MTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRTaXplLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDFEQzA0RTE2NDgzNEI5MDAz
NzFFNUEgLyogTGF5b3V0U2l6ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTE0MjAxMUI2MEEwMDMxMzMwMDgzMDNGOSAvKiBKU0NTU1N0eWxlRGVj
bGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQyMDExQjQwQTAwMzEzMzAwODMwM0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAg
Ki87IH07CiAJCTE0MjAxMUI3MEEwMDMxMzMwMDgzMDNGOSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MjAx
MUI1MEEwMDMxMzMwMDgzMDNGOSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb24uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDJCOTdDOTEzMTM4OTQz
MDA4QkVGNEIgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MkI5N0M3MTMxMzg5NDMwMDhCRUY0QiAv
KiBUZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwICovOyB9OwpAQCAtMzEzLDEwICszMjAsNiBA
QAogCQkxNDQ3NkFBODE1REM0QkIxMDAzMDVEQjIgLyogV3JpdGluZ01vZGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NDc2QUE3MTVEQzRCQjEwMDMw
NURCMiAvKiBXcml0aW5nTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTE0NDlFMjRDMTA3RDRBODQwMEI1NzkzRiAvKiBKU0NhbGxiYWNrRGF0
YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0OUUy
NEExMDdENEE4NDAwQjU3OTNGIC8qIEpTQ2FsbGJhY2tEYXRhLmggKi87IH07CiAJCTE0NDlFMjg3
MTA3RDREQjQwMEI1NzkzRiAvKiBKU0NhbGxiYWNrRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQ5RTI4NjEwN0Q0REI0MDBCNTc5M0YgLyog
SlNDYWxsYmFja0RhdGEuY3BwICovOyB9OwotCQkxNDRGQ0U1MjE0RUM3OUJDMDAwRDE3QTMgLyog
RnJhY3Rpb25hbExheW91dFVuaXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0NEZDRTUxMTRFQzc5QkMwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0
VW5pdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CTE0NEZDRTVEMTRFQzc5RTcwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0U2l6ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0RkNFNTgxNEVDNzlF
NzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRTaXplLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTQ0RkNGRTAxNEVGMjUwOTAwMEQxN0EzIC8q
IEZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE0NEZDRkRFMTRFRjI1MDkwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5
b3V0UmVjdC5jcHAgKi87IH07Ci0JCTE0NEZDRkUxMTRFRjI1MDkwMDBEMTdBMyAvKiBGcmFjdGlv
bmFsTGF5b3V0UmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTQ0RkNGREYxNEVGMjUwOTAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ2NEUw
NkMxMzVFQzEwNjAwRkRCMDBBIC8qIEpTTWVkaWFMaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NjRFMDZCMTM1RUMxMDYwMEZEQjAw
QSAvKiBKU01lZGlhTGlzdEN1c3RvbS5jcHAgKi87IH07CiAJCTE0NkNDMTE1MTU2OTg4RTQwMDEw
OUUzNyAvKiBMZW5ndGhCb3guY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTQ2Q0MxMTMxNTY5ODhCRDAwMTA5RTM3IC8qIExlbmd0aEJveC5jcHAgKi87
IH07CiAJCTE0NzdFNzc2MEJGNDEzNEEwMDE1Mjg3MiAvKiBQYWdlQ2FjaGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3N0U3NzQwQkY0MTM0QTAw
MTUyODcyIC8qIFBhZ2VDYWNoZS5jcHAgKi87IH07CkBAIC0zMjksOCArMzMyLDYgQEAKIAkJMTQ3
OUZBRjIxMDlBRTM3NTAwREVENjU1IC8qIFJlbmRlclJ1YnlSdW4uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NzlGQUVBMTA5QUUzNzUwMERFRDY1NSAv
KiBSZW5kZXJSdWJ5UnVuLmggKi87IH07CiAJCTE0NzlGQUYzMTA5QUUzNzUwMERFRDY1NSAvKiBS
ZW5kZXJSdWJ5VGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNDc5RkFFQjEwOUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieVRleHQuY3BwICov
OyB9OwogCQkxNDc5RkFGNDEwOUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieVRleHQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NzlGQUVDMTA5QUUz
NzUwMERFRDY1NSAvKiBSZW5kZXJSdWJ5VGV4dC5oICovOyB9OwotCQkxNDgyRTBDNjE1NkMzNkRF
MDA5NjUwNjUgLyogRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDgyRTBDNDE1NkMzNkRFMDA5NjUwNjUg
LyogRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5jcHAgKi87IH07Ci0JCTE0ODJFMEM3MTU2QzM2
REUwMDk2NTA2NSAvKiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDgyRTBDNTE1NkMzNkRFMDA5NjUwNjUg
LyogRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0OEFGREE1MEFGNTgzNjAwMDhDQzcwMCAvKiBFeGNl
cHRpb25IYW5kbGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTQ4QUZEQTMwQUY1ODM2MDAwOENDNzAwIC8qIEV4Y2VwdGlvbkhhbmRsZXJzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ4QUZEQTYw
QUY1ODM2MDAwOENDNzAwIC8qIEV4Y2VwdGlvbkhhbmRsZXJzLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4QUZEQTQwQUY1ODM2MDAwOENDNzAwIC8q
IEV4Y2VwdGlvbkhhbmRsZXJzLm1tICovOyB9OwogCQkxNDk0N0ZGRDEyRjgwQ0QyMDBBMEY2MzEg
LyogRG9jdW1lbnRPcmRlcmVkTWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE0OTQ3RkZCMTJGODBDRDIwMEEwRjYzMSAvKiBEb2N1bWVudE9yZGVy
ZWRNYXAuY3BwICovOyB9OwpAQCAtOTIzLDcgKzkyNCw2IEBACiAJCTMxOUU2OUI1MTMyOTlCQkQw
MDRBQzkxQSAvKiBXZWJLaXRBbmltYXRpb25MaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxOUU2OUFGMTMyOTlCQkQwMDRBQzkxQSAvKiBXZWJL
aXRBbmltYXRpb25MaXN0LmNwcCAqLzsgfTsKIAkJMzE5RTY5QjYxMzI5OUJCRDAwNEFDOTFBIC8q
IFdlYktpdEFuaW1hdGlvbkxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMxOUU2OUIwMTMyOTlCQkQwMDRBQzkxQSAvKiBXZWJLaXRBbmltYXRpb25M
aXN0LmggKi87IH07CiAJCTMxOUZCRDVGMTVEMkY0NjQwMDk2NDBBNiAvKiBDYWNoZWRJbWFnZUNs
aWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE5
RkJENUQxNUQyRjQ0NDAwOTY0MEE2IC8qIENhY2hlZEltYWdlQ2xpZW50LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMzFCODAxQkIxNUVDNThDNzAw
Q0U2NDNEIC8qIExheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ4OTRDQTgxNUVDNDg5NzAwQTQwNDgxIC8qIExh
eW91dFR5cGVzSW5saW5lTWV0aG9kcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTMxQzBGRjIxMEU0Q0VCNkUwMDdENkZFNSAvKiBXZWJLaXRBbmlt
YXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMUMwRkYxQjBFNENFQjZFMDA3RDZGRTUgLyogV2ViS2l0QW5pbWF0aW9uRXZlbnQuY3Bw
ICovOyB9OwogCQkzMUMwRkYyMjBFNENFQjZFMDA3RDZGRTUgLyogV2ViS2l0QW5pbWF0aW9uRXZl
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQzBG
RjFDMEU0Q0VCNkUwMDdENkZFNSAvKiBXZWJLaXRBbmltYXRpb25FdmVudC5oICovOyB9OwogCQkz
MUMwRkYyNDBFNENFQjZFMDA3RDZGRTUgLyogV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQzBGRjFFMEU0Q0VC
NkUwMDdENkZFNSAvKiBXZWJLaXRUcmFuc2l0aW9uRXZlbnQuY3BwICovOyB9OwpAQCAtNTI4Nyw4
ICs1Mjg3LDYgQEAKIAkJQjhEQkRCNEMxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNv
bW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4
REJEQjQ4MTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmggKi87IH07CiAJ
CUI4REJEQjREMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ5
MTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCAqLzsgfTsK
IAkJQjhEQkRCNEUxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjRB
MTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmggKi87IH07Ci0J
CUJBQjFDMDZBMTRGQzM2NzkwMDQyMzNGQyAvKiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NEZDRTU0MTRFQzc5
RTcwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlCQUNGMjkwMTEzQjJBMEQ1MDA3ODFGOTAg
LyogTGF5b3V0VHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJBQ0YyOTAwMTNCMkEwRDUwMDc4MUY5MCAvKiBMYXlvdXRUeXBlcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMDBGMDA0MEUwQTE4
NTUwMEZEMDRFMyAvKiBET01GaWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzAwRUZGRTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5oICovOyB9
OwogCQlCQzAwRjAwNTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDBFRkZGMEUwQTE4NTUwMEZEMDRF
MyAvKiBET01GaWxlLm1tICovOyB9OwogCQlCQzAwRjAwNjBFMEExODU1MDBGRDA0RTMgLyogRE9N
RmlsZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQzAwRjAwMDBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZUludGVybmFsLmggKi87IH07
CkBAIC03Mzg3LDYgKzczODUsMTMgQEAKIAkJMTQxOUQyQzQwQ0VBNkY2MTAwRkY1MDdBIC8qIFRy
ZWVTaGFyZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJlZVNoYXJlZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDFCOTRFNTA5RUM0MjIzMDAwRTk0MTMg
LyogTW91c2VFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE1vdXNlRXZlbnQuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDFCOTRFRTA5RUM0MjVBMDAwRTk0MTMg
LyogVUlFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFVJRXZlbnQuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDFEQzA0NzE2NDgzNDhGMDAzNzFFNUEgLyogTGF5
b3V0VW5pdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRVbml0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0MURDMDQ5MTY0ODM0QjkwMDM3MUU1QSAv
KiBMYXlvdXRCb3hFeHRlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTGF5b3V0Qm94RXh0ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQx
REMwNEExNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dEJveEV4dGVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRCb3hFeHRlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMTQxREMwNEIxNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dFBvaW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dFBvaW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTE0MURDMDRDMTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRSZWN0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dFJlY3QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDFEQzA0RDE2NDgzNEI5MDAzNzFFNUEg
LyogTGF5b3V0UmVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRS
ZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0MURDMDRFMTY0ODM0QjkwMDM3
MUU1QSAvKiBMYXlvdXRTaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExh
eW91dFNpemUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQyMDExQUUwQTAwMzEx
NzAwODMwM0Y5IC8qIENTU1N0eWxlRGVjbGFyYXRpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBDU1NTdHlsZURlY2xhcmF0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMTQyMDExQjQwQTAwMzEzMzAwODMwM0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDU1NTdHlsZURlY2xhcmF0
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQyMDExQjUwQTAwMzEzMzAw
ODMwM0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNDU1NTdHlsZURlY2xhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC03Mzk3LDExICs3NDAyLDYgQEAKIAkJMTQ0NzZBQTcxNURDNEJCMTAwMzA1REIy
IC8qIFdyaXRpbmdNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRp
bmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NDlFMjRBMTA3RDRBODQw
MEI1NzkzRiAvKiBKU0NhbGxiYWNrRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0NhbGxiYWNrRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDQ5
RTI4NjEwN0Q0REI0MDBCNTc5M0YgLyogSlNDYWxsYmFja0RhdGEuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYWxsYmFja0RhdGEuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkxNDRGQ0U1MTE0RUM3OUJDMDAwRDE3QTMgLyogRnJhY3Rpb25hbExh
eW91dFVuaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnJhY3Rpb25hbExh
eW91dFVuaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTQ0RkNFNTQxNEVDNzlF
NzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRQb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMTQ0RkNFNTgxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRT
aXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYWN0aW9uYWxMYXlvdXRT
aXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0NEZDRkRFMTRFRjI1MDkwMDBE
MTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBGcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTE0NEZDRkRGMTRFRjI1MDkwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0
UmVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGcmFjdGlvbmFsTGF5b3V0
UmVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDY0RTA2QjEzNUVDMTA2MDBG
REIwMEEgLyogSlNNZWRpYUxpc3RDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNNZWRpYUxpc3RDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxNDZDQzExMzE1Njk4OEJEMDAxMDlFMzcgLyogTGVuZ3RoQm94LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExlbmd0aEJveC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE0NzdFNzc0MEJGNDEzNEEwMDE1Mjg3MiAvKiBQYWdlQ2FjaGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VDYWNoZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NDE1LDggKzc0MTUsNiBAQAogCQkxNDc5
RkFFQjEwOUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieVRleHQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyUnVieVRleHQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxNDc5RkFFQzEwOUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieVRl
eHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyUnVieVRleHQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4MTNCRjMwOUVERjg4RTAwRjc1N0UxIC8q
IElETFBhcnNlci5wbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5wZXJsOyBuYW1lID0gSURMUGFy
c2VyLnBtOyBwYXRoID0gc2NyaXB0cy9JRExQYXJzZXIucG07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTE0ODJFMEM0MTU2QzM2REUwMDk2NTA2NSAvKiBGcmFjdGlvbmFsTGF5b3V0Qm94
RXh0ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZyYWN0aW9u
YWxMYXlvdXRCb3hFeHRlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxNDgy
RTBDNTE1NkMzNkRFMDA5NjUwNjUgLyogRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0OEFGREEzMEFGNTgzNjAwMDhDQzcwMCAv
KiBFeGNlcHRpb25IYW5kbGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RXhjZXB0aW9uSGFuZGxlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4QUZE
QTQwQUY1ODM2MDAwOENDNzAwIC8qIEV4Y2VwdGlvbkhhbmRsZXJzLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEV4Y2VwdGlvbkhhbmRsZXJzLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxNDk0N0ZGQjEyRjgwQ0QyMDBBMEY2MzEgLyogRG9jdW1l
bnRPcmRlcmVkTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERv
Y3VtZW50T3JkZXJlZE1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05Mzgy
LDcgKzkzODAsNiBAQAogCQk4NDg1MjI4NzExOTAxNzNDMDA2RURDN0YgLyogU1ZHVktlcm5FbGVt
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1ZLZXJuRWxl
bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0ODUyMjg4MTE5MDE3M0Mw
MDZFREM3RiAvKiBTVkdWS2VybkVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU1ZHVktlcm5FbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0
ODUyMjg5MTE5MDE3M0MwMDZFREM3RiAvKiBTVkdWS2VybkVsZW1lbnQuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IFNWR1ZLZXJuRWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTg0ODk0Q0E4MTVFQzQ4OTcwMEE0MDQ4MSAvKiBMYXlvdXRUeXBlc0lubGluZU1ldGhv
ZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0VHlwZXNJbmxpbmVN
ZXRob2RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0OUY3Nzc1MEVGRUM2MjAw
MDkwODQ5RCAvKiBTdHJva2VTdHlsZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU3Ryb2tlU3R5bGVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTg0QTgxRjNCMEZDN0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VBbHBoYS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTb3VyY2VBbHBoYS5jcHA7IHBhdGggPSBmaWx0
ZXJzL1NvdXJjZUFscGhhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODRBODFG
M0MwRkM3REZGMDAwOTU1MzAwIC8qIFNvdXJjZUFscGhhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFNvdXJjZUFscGhhLmg7IHBhdGggPSBmaWx0ZXJzL1NvdXJjZUFscGhhLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjYxOSw3ICsxMjYxNiw2IEBACiAJCUI4
REJEQjQ4MTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNldFNlbGVjdGlvbkNvbW1hbmQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjhEQkRCNDkxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUI4REJEQjRBMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21t
YW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwZWxsaW5nQ29ycmVjdGlv
bkNvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkFDRjI5MDAxM0IyQTBE
NTAwNzgxRjkwIC8qIExheW91dFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IExheW91dFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDBFRkZF
MEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERPTUZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMEVGRkYw
RTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBET01GaWxlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
QzAwRjAwMDBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZUludGVybmFsLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUZpbGVJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTk5ODIsMTIgKzE5OTc4LDEyIEBACiAJCQkJMzcyMDIxOTgxMDYyMTND
NjAwRjI1QzRCIC8qIEZvbnRTbW9vdGhpbmdNb2RlLmggKi8sCiAJCQkJMzc4NEMzNEEwRTExQUEz
NDAwN0Q4RDQ4IC8qIEZvbnRUcmFpdHNNYXNrLmggKi8sCiAJCQkJQkNFNDQxMzUxMkY3NDkwQjAw
OUI4NEI4IC8qIEZvbnRXaWR0aFZhcmlhbnQuaCAqLywKLQkJCQkxNDgyRTBDNDE1NkMzNkRFMDA5
NjUwNjUgLyogRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5jcHAgKi8sCi0JCQkJMTQ4MkUwQzUx
NTZDMzZERTAwOTY1MDY1IC8qIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuaCAqLywKLQkJCQkx
NDRGQ0U1NDE0RUM3OUU3MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFBvaW50LmggKi8sCi0J
CQkJMTQ0RkNGREUxNEVGMjUwOTAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcCAq
LywKLQkJCQkxNDRGQ0ZERjE0RUYyNTA5MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFJlY3Qu
aCAqLywKLQkJCQkxNDRGQ0U1ODE0RUM3OUU3MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFNp
emUuaCAqLywKKwkJCQkxNDFEQzA0OTE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0Qm94RXh0ZW50
LmNwcCAqLywKKwkJCQkxNDFEQzA0QTE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0Qm94RXh0ZW50
LmggKi8sCisJCQkJMTQxREMwNEIxNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dFBvaW50LmggKi8s
CisJCQkJMTQxREMwNEMxNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dFJlY3QuY3BwICovLAorCQkJ
CTE0MURDMDREMTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRSZWN0LmggKi8sCisJCQkJMTQxREMw
NEUxNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dFNpemUuaCAqLywKIAkJCQk0RkIzOTBBQzE1RUY2
MUYzMDA3QUQ1MUYgLyogR2VuZXJhdGVkSW1hZ2UuY3BwICovLAogCQkJCUJDMjNGMERBMERBRkY0
QTQwMDlGREM5MSAvKiBHZW5lcmF0ZWRJbWFnZS5oICovLAogCQkJCUJDRTA0Qzg5MERBRkY3QTAw
MDdBMEY0MSAvKiBHZW5lcmF0b3IuaCAqLywKQEAgLTIwODgzLDcgKzIwODc5LDcgQEAKIAkJCQlD
NTdGRURFMDEyMTJFRTlDMDA5N0JFNjUgLyogRmlsZVN5c3RlbS5jcHAgKi8sCiAJCQkJNTE0QjNG
NzIwQzcyMjA0NzAwMDUzMERGIC8qIEZpbGVTeXN0ZW0uaCAqLywKIAkJCQlCQzA3M0JBOTBDMzk5
QjFGMDAwRjU5NzkgLyogRmxvYXRDb252ZXJzaW9uLmggKi8sCi0JCQkJMTQ0RkNFNTExNEVDNzlC
QzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRVbml0LmggKi8sCisJCQkJMTQxREMwNDcxNjQ4
MzQ4RjAwMzcxRTVBIC8qIExheW91dFVuaXQuaCAqLywKIAkJCQlBODc0OEJERjEyQ0JGMkRDMDAx
RkJBNDEgLyogSGFzaFRvb2xzLmggKi8sCiAJCQkJRDZGREFFRjIxNDlDMDYxOTAwMzdCMUUxIC8q
IEhpc3RvZ3JhbVN1cHBvcnQuY3BwICovLAogCQkJCUQ2MzBFMkFCMTQ5QkYzNDQwMDVCMkY5MyAv
KiBIaXN0b2dyYW1TdXBwb3J0LmggKi8sCkBAIC0yMTQ2NSw4ICsyMTQ2MSw2IEBACiAJCQkJQTEy
MEFDQTAxM0Y5OTgzNzAwRkU0QUM3IC8qIExheW91dFJlcGFpbnRlci5oICovLAogCQkJCTJEOTA2
NjA0MEJFMTQxRDQwMDk1Njk5OCAvKiBMYXlvdXRTdGF0ZS5jcHAgKi8sCiAJCQkJMkQ5MDY2MDUw
QkUxNDFENDAwOTU2OTk4IC8qIExheW91dFN0YXRlLmggKi8sCi0JCQkJQkFDRjI5MDAxM0IyQTBE
NTAwNzgxRjkwIC8qIExheW91dFR5cGVzLmggKi8sCi0JCQkJODQ4OTRDQTgxNUVDNDg5NzAwQTQw
NDgxIC8qIExheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oICovLAogCQkJCTM3NzRBQkEzMEZBMjFF
QjQwMEFEN0RFOSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLywKIAkJCQk5Mzc3QUI5
RjE1REVGRUVGMDAzMUZEMDQgLyogUGFnaW5hdGlvbi5oICovLAogCQkJCTA4ODUwNjdEMTFEQTA0
NUIwMDE4MkI5OCAvKiBQYWludEluZm8uaCAqLywKQEAgLTIzNjAzLDExICsyMzU5Nyw2IEBACiAJ
CQkJNjU2RDM3M0EwQURCQTVERTAwQTQ1NTREIC8qIEZvcm1TdGF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNDE4ODVCOTMxMUI2RkRBNjAwMzM4M0JCIC8qIEZvcm1TdWJtaXNzaW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MzVDNDc2RDA5QUM0RDYzMDBBNkFBQjQgLyogRm91bmRhdGlvbkV4dHJh
cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTQ4MkUwQzcxNTZDMzZERTAwOTY1MDY1IC8qIEZyYWN0
aW9uYWxMYXlvdXRCb3hFeHRlbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUJBQjFDMDZBMTRGQzM2
NzkwMDQyMzNGQyAvKiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTE0NEZDRkUxMTRFRjI1MDkwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJMTQ0RkNFNUQxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlv
dXRTaXplLmggaW4gSGVhZGVycyAqLywKLQkJCQkxNDRGQ0U1MjE0RUM3OUJDMDAwRDE3QTMgLyog
RnJhY3Rpb25hbExheW91dFVuaXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NTMxMjNEMTFEMDQ3
MUIwMEQ0RDA3NyAvKiBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCTY1QkYwMjJGMDk3NDgxNjMwMEM0MzE5NiAvKiBGcmFtZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTdCMDcwRDMxMzBBNDA5QzAwQTM3NjNDIC8qIEZyYW1lQWN0aW9uU2NoZWR1bGVyLmgg
aW4gSGVhZGVycyAqLywKQEAgLTI0NDg1LDggKzI0NDc0LDExIEBACiAJCQkJQTEyNTM4RDQxM0Y5
QjYwQTAwMDI0NzU0IC8qIExheW91dFJlcGFpbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ5
MDY2MDcwQkUxNDFENDAwOTU2OTk4IC8qIExheW91dFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlENjMwRTJBQzE0OUJGMzQ0MDA1QjJGOTMgLyogTGF5b3V0VGVzdFN1cHBvcnQuaCBpbiBIZWFk
ZXJzICovLAotCQkJCUJBQ0YyOTAxMTNCMkEwRDUwMDc4MUY5MCAvKiBMYXlvdXRUeXBlcy5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMzFCODAxQkIxNUVDNThDNzAwQ0U2NDNEIC8qIExheW91dFR5cGVz
SW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTQxREMwNDgxNjQ4MzQ4RjAwMzcx
RTVBIC8qIExheW91dFVuaXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0MURDMDUwMTY0ODM0Qjkw
MDM3MUU1QSAvKiBMYXlvdXRCb3hFeHRlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0MURDMDUx
MTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRQb2ludC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTQx
REMwNTMxNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dFJlY3QuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTE0MURDMDU0MTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRTaXplLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MTJERDhGNTBEOTFFNkFGMDAwRjg5RUUgLyogTGVnYWN5V2ViQXJjaGl2ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkNFNjVCRUIwRUFDREYxNjAwN0U0NTMzIC8qIExlbmd0aC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkNGRjY0OTEwRUFEMTVDMjAwQzFENkY3IC8qIExlbmd0aEJveC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yNjgyOSw4ICsyNjgyMSw2IEBACiAJCQkJNTE0Qzc2NEYwQ0U5MjM0
RTAwN0VGM0NEIC8qIEZvcm1EYXRhU3RyZWFtTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU2
RDM3M0IwQURCQTVERTAwQTQ1NTREIC8qIEZvcm1TdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk0MTg4NUI5NDExQjZGREE2MDAzMzgzQkIgLyogRm9ybVN1Ym1pc3Npb24uY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJMTQ4MkUwQzYxNTZDMzZERTAwOTY1MDY1IC8qIEZyYWN0aW9uYWxMYXlvdXRC
b3hFeHRlbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMTQ0RkNGRTAxNEVGMjUwOTAwMEQxN0Ez
IC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1QkYwMjJF
MDk3NDgxNjMwMEM0MzE5NiAvKiBGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0IwNzBE
MjEzMEE0MDlDMDBBMzc2M0MgLyogRnJhbWVBY3Rpb25TY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTc0QTg2MjIxNEI3QURCQjAwM0ZEQzc2IC8qIEZyYW1lRGVzdHJ1Y3Rpb25PYnNl
cnZlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3NzkxLDYgKzI3NzgxLDggQEAKIAkJCQk5MzUy
MDg0NTA5QkQ0M0I5MDBGMjAzOEQgLyogTGFuZ3VhZ2UubW0gaW4gU291cmNlcyAqLywKIAkJCQky
OTE3QjU2MTE0NzM0OTZDMDA1MkM5RDAgLyogTGF5ZXJGbHVzaFNjaGVkdWxlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkyOTE3QjU2NjE0NzM0OTk1MDA1MkM5RDAgLyogTGF5ZXJGbHVzaFNjaGVk
dWxlck1hYy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxNDFEQzA0RjE2NDgzNEI5MDAzNzFFNUEg
LyogTGF5b3V0Qm94RXh0ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE0MURDMDUyMTY0ODM0
QjkwMDM3MUU1QSAvKiBMYXlvdXRSZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExMjBBQ0E0
MTNGOTk4Q0EwMEZFNEFDNyAvKiBMYXlvdXRSZXBhaW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMkQ5MDY2MDYwQkUxNDFENDAwOTU2OTk4IC8qIExheW91dFN0YXRlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUQ2RkRBRUYzMTQ5QzA2MTkwMDM3QjFFNSAvKiBMYXlvdXRUZXN0U3VwcG9ydC5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCShyZXZpc2lvbiAxMzM1Mzkp
CisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDcgKzIzNCw3IEBAIExheW91dFJlY3QgQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6OmJvdW4KICAgICBmb3IgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBv
c2l0aW9uUHJvdmlkZXIgPSBwYXJlbnRPYmplY3QoKTsgcG9zaXRpb25Qcm92aWRlcjsgcG9zaXRp
b25Qcm92aWRlciA9IHBvc2l0aW9uUHJvdmlkZXItPnBhcmVudE9iamVjdCgpKSB7CiAgICAgICAg
IGlmIChwb3NpdGlvblByb3ZpZGVyLT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkgewog
ICAgICAgICAgICAgTGF5b3V0UmVjdCBwYXJlbnRSZWN0ID0gcG9zaXRpb25Qcm92aWRlci0+ZWxl
bWVudFJlY3QoKTsKLSAgICAgICAgICAgIGJvdW5kaW5nQm94LnNldFNpemUoTGF5b3V0U2l6ZShw
YXJlbnRSZWN0LndpZHRoKCksIEZyYWN0aW9uYWxMYXlvdXRVbml0KHN0ZDo6bWluKDEwLjBmLCBw
YXJlbnRSZWN0LmhlaWdodCgpLnRvRmxvYXQoKSkpKSk7CisgICAgICAgICAgICBib3VuZGluZ0Jv
eC5zZXRTaXplKExheW91dFNpemUocGFyZW50UmVjdC53aWR0aCgpLCBMYXlvdXRVbml0KHN0ZDo6
bWluKDEwLjBmLCBwYXJlbnRSZWN0LmhlaWdodCgpLnRvRmxvYXQoKSkpKSk7CiAgICAgICAgICAg
ICBib3VuZGluZ0JveC5zZXRMb2NhdGlvbihwYXJlbnRSZWN0LmxvY2F0aW9uKCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmgJKHJldmlzaW9uIDEzMzUz
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2RlZmluZSBBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdF9oCiAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCi0jaW5j
bHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgJKHJldmlzaW9u
IDEzMzUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw3IEBACiAjZGVmaW5lIEFjY2Vzc2li
aWxpdHlPYmplY3RfaAogCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiRnJhY3Rp
b25hbExheW91dFJlY3QuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxh
eW91dFJlY3QuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxl
UG9zaXRpb24uaCIKICNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuaAkocmV2aXNpb24gMTMzNTM5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMw
LDcgQEAKICNkZWZpbmUgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdF9oCiAKICNpbmNsdWRlICJB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5j
bHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9MZW5ndGhGdW5jdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9MZW5ndGhGdW5jdGlvbnMuY3BwCShy
ZXZpc2lvbiAxMzM1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvTGVuZ3RoRnVuY3Rpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgogCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIK
KyNpbmNsdWRlICJMYXlvdXRVbml0LmgiCiAjaW5jbHVkZSAiTGVuZ3RoLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVmlldy5oIgogCkBAIC01NSwyMCArNTUsMjAgQEAgTGF5b3V0VW5pdCBtaW5pbXVtVmFs
dWVGb3JMZW5ndGgoY29uc3QgTAogICAgIGNhc2UgVmlld3BvcnRQZXJjZW50YWdlV2lkdGg6CiAg
ICAgICAgIGlmIChyZW5kZXJWaWV3KQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PExh
eW91dFVuaXQ+KHJlbmRlclZpZXctPnZpZXdwb3J0U2l6ZSgpLndpZHRoKCkgKiBsZW5ndGgudmll
d3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkgLyAxMDAuMGYpOwotICAgICAgICByZXR1cm4gWkVST19M
QVlPVVRfVU5JVDsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgY2FzZSBWaWV3cG9ydFBlcmNlbnRh
Z2VIZWlnaHQ6CiAgICAgICAgIGlmIChyZW5kZXJWaWV3KQogICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PExheW91dFVuaXQ+KHJlbmRlclZpZXctPnZpZXdwb3J0U2l6ZSgpLmhlaWdodCgp
ICogbGVuZ3RoLnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpIC8gMTAwLjBmKTsKLSAgICAgICAg
cmV0dXJuIFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAgIHJldHVybiAwOwogICAgIGNhc2UgVmll
d3BvcnRQZXJjZW50YWdlTWluOgogICAgICAgICBpZiAocmVuZGVyVmlldykgewogICAgICAgICAg
ICAgSW50U2l6ZSB2aWV3cG9ydFNpemUgPSByZW5kZXJWaWV3LT52aWV3cG9ydFNpemUoKTsKICAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PihzdGQ6Om1pbih2aWV3cG9y
dFNpemUud2lkdGgoKSwgdmlld3BvcnRTaXplLmhlaWdodCgpKSAqIGxlbmd0aC52aWV3cG9ydFBl
cmNlbnRhZ2VMZW5ndGgoKSAvIDEwMC4wZik7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFpF
Uk9fTEFZT1VUX1VOSVQ7CisgICAgICAgIHJldHVybiAwOwogICAgIGNhc2UgRmlsbEF2YWlsYWJs
ZToKICAgICBjYXNlIEF1dG86Ci0gICAgICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOworICAg
ICAgICByZXR1cm4gMDsKICAgICBjYXNlIFJlbGF0aXZlOgogICAgIGNhc2UgSW50cmluc2ljOgog
ICAgIGNhc2UgTWluSW50cmluc2ljOgpAQCAtNzcsMTAgKzc3LDEwIEBAIExheW91dFVuaXQgbWlu
aW11bVZhbHVlRm9yTGVuZ3RoKGNvbnN0IEwKICAgICBjYXNlIEZpdENvbnRlbnQ6CiAgICAgY2Fz
ZSBVbmRlZmluZWQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1
cm4gWkVST19MQVlPVVRfVU5JVDsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOworICAgIHJldHVy
biAwOwogfQogCiBMYXlvdXRVbml0IHZhbHVlRm9yTGVuZ3RoKGNvbnN0IExlbmd0aCYgbGVuZ3Ro
LCBMYXlvdXRVbml0IG1heGltdW1WYWx1ZSwgUmVuZGVyVmlldyogcmVuZGVyVmlldywgYm9vbCBy
b3VuZFBlcmNlbnRhZ2VzKQpAQCAtMTA0LDEwICsxMDQsMTAgQEAgTGF5b3V0VW5pdCB2YWx1ZUZv
ckxlbmd0aChjb25zdCBMZW5ndGgmCiAgICAgY2FzZSBGaXRDb250ZW50OgogICAgIGNhc2UgVW5k
ZWZpbmVkOgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIFpF
Uk9fTEFZT1VUX1VOSVQ7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gWkVST19MQVlPVVRfVU5JVDsKKyAgICByZXR1cm4gMDsK
IH0KIAogLy8gRklYTUU6IHdoZW4gc3VicGl4ZWwgbGF5b3V0IGlzIHN1cHBvcnRlZCB0aGlzIGNv
cHkgb2YgZmxvYXRWYWx1ZUZvckxlbmd0aCgpIGNhbiBiZSByZW1vdmVkLiBTZWUgYnVnIDcxMTQz
LgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0xlbmd0aEZ1bmN0aW9ucy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9MZW5ndGhGdW5jdGlvbnMuaAkocmV2aXNpb24gMTMzNTM5
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0xlbmd0aEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCw3ICsyNCw3IEBACiAjaWZuZGVmIExlbmd0aEZ1bmN0aW9uc19oCiAjZGVmaW5lIExl
bmd0aEZ1bmN0aW9uc19oCiAKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxh
eW91dFVuaXQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuaAkocmV2aXNpb24gMTMzNTM5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJJY29uVVJMLmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yQ291bnRlcnMuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5j
bHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAi
TXV0YXRpb25PYnNlcnZlci5oIgogI2luY2x1ZGUgIlBhZ2VWaXNpYmlsaXR5U3RhdGUuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50TWFya2VyQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaAkocmV2aXNpb24gMTMzNTM5KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw3ICsyOSw3IEBACiAKICNpbmNsdWRlICJEb2N1bWVudE1hcmtlci5oIgogI2luY2x1ZGUgIklu
dFJlY3QuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3Qu
aCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaAkocmV2aXNpb24gMTMzNTM5KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjUsNyArMTI1LDcgQEAgcHVibGljOgogCiBpbmxpbmUgSW50U2l6ZSBkZWZhdWx0TWluaW11
bVNpemVGb3JSZXNpemluZygpCiB7Ci0gICAgcmV0dXJuIEludFNpemUoTUFYX0xBWU9VVF9VTklU
LCBNQVhfTEFZT1VUX1VOSVQpOworICAgIHJldHVybiBJbnRTaXplKExheW91dFVuaXQ6Om1heCgp
LCBMYXlvdXRVbml0OjptYXgoKSk7CiB9CiAKIGlubGluZSBFbGVtZW50UmFyZURhdGE6OkVsZW1l
bnRSYXJlRGF0YSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTW91c2VSZWxhdGVkRXZlbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTW91c2VSZWxhdGVkRXZlbnQuaAko
cmV2aXNpb24gMTMzNTM5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL01vdXNlUmVsYXRlZEV2ZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICNpZm5kZWYgTW91c2VSZWxhdGVk
RXZlbnRfaAogI2RlZmluZSBNb3VzZVJlbGF0ZWRFdmVudF9oCiAKLSNpbmNsdWRlICJMYXlvdXRU
eXBlc0lubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJMYXlvdXRQb2ludC5oIgogI2luY2x1ZGUg
IlVJRXZlbnRXaXRoS2V5U3RhdGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5oCShyZXZpc2lvbiAxMzM1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNyw4IEBACiAKICNpbmNsdWRlICJFZGl0aW5nQm91bmRh
cnkuaCIKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlv
dXRSZWN0LmgiCiAjaW5jbHVkZSAiS1VSTEhhc2guaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5o
IgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVyLmgi
CiAjaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKICNpbmNsdWRlICJTY3JpcHRXcmFw
cGFibGUuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaC5oCShyZXZpc2lvbiAxMzM1MzkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vVG91Y2guaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2lm
IEVOQUJMRShUT1VDSF9FVkVOVFMpCiAKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgotI2luY2x1
ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dFBvaW50Lmgi
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uY3BwCShyZXZpc2lvbiAxMzM1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBA
QCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBzdGF0aWMgaW5saW5lIExheW91dFVuaXQg
Tm9YUG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oKQogewotICAgIHJldHVybiBNSU5fTEFZ
T1VUX1VOSVQ7CisgICAgcmV0dXJuIExheW91dFVuaXQ6Om1pbigpOwogfQogCiBDYXJldEJhc2U6
OkNhcmV0QmFzZShDYXJldFZpc2liaWxpdHkgdmlzaWJpbGl0eSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyAr
MjgsNyBAQAogCiAjaW5jbHVkZSAiRWRpdGluZ1N0eWxlLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5o
IgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2lu
Y2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQmVoYXZpb3IuaCIKICNpbmNsdWRlICJU
aW1lci5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9uLmgJ
KHJldmlzaW9uIDEzMzUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVuZGVyZWRQb3Np
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsMTEgQEAKICNkZWZpbmUgUmVuZGVy
ZWRQb3NpdGlvbl9oCiAKICNpbmNsdWRlICJJbmxpbmVCb3guaCIKLSNpbmNsdWRlICJMYXlvdXRU
eXBlcy5oIgogI2luY2x1ZGUgIlRleHRBZmZpbml0eS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK2NsYXNzIExheW91dFVuaXQ7CiBjbGFzcyBQb3NpdGlvbjsKIGNsYXNzIFJlbmRlck9iamVj
dDsKIGNsYXNzIFZpc2libGVQb3NpdGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEFyZWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXJl
YUVsZW1lbnQuaAkocmV2aXNpb24gMTMzNTM5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
QXJlYUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2RlZmluZSBI
VE1MQXJlYUVsZW1lbnRfaAogCiAjaW5jbHVkZSAiSFRNTEFuY2hvckVsZW1lbnQuaCIKLSNpbmNs
dWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlIDx3
dGYvT3duQXJyYXlQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oCShyZXZpc2lvbiAxMzM1MzkpCisr
KyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw3ICszMSw3IEBACiAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZs
b2F0UXVhZC5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVj
dC5oIgogCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1l
bGluZUFnZW50LmgJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcg
QEAKICNpbmNsdWRlICJJbnNwZWN0b3JCYXNlQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JG
cm9udGVuZC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgotI2luY2x1ZGUgIkxheW91
dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtSW5z
dHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiU2NyaXB0R0NFdmVudC5oIgogI2luY2x1ZGUgIlNj
cmlwdEdDRXZlbnRMaXN0ZW5lci5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1Rp
bWVsaW5lUmVjb3JkRmFjdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5jcHAJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTGF5b3V0
VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUg
IlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKICNpbmNs
dWRlICJTY3JpcHRDYWxsU3RhY2suaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9U
aW1lbGluZVJlY29yZEZhY3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmgJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNyArMzEsNyBAQAogI2lmbmRlZiBUaW1lbGluZVJlY29yZEZhY3RvcnlfaAogI2Rl
ZmluZSBUaW1lbGluZVJlY29yZEZhY3RvcnlfaAogCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIK
KyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZEltYWdlLmgJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVk
ZSAiQ2FjaGVkUmVzb3VyY2UuaCIKICNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCiAjaW5jbHVk
ZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIgorI2lu
Y2x1ZGUgIkxheW91dFNpemUuaCIKICNpbmNsdWRlICJTVkdJbWFnZUNhY2hlLmgiCiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJv
bGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVy
LmgJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9s
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgRm9jdXNDb250
cm9sbGVyX2gKIAogI2luY2x1ZGUgIkZvY3VzRGlyZWN0aW9uLmgiCi0jaW5jbHVkZSAiTGF5b3V0
VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcg
QEAKICNpbmNsdWRlICJBZGp1c3RWaWV3U2l6ZU9yTm90LmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAi
TGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlBhZ2luYXRpb24uaCIKICNpbmNsdWRlICJQYWludFBo
YXNlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgJKHJldmlz
aW9uIDEzMzUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgogI2luY2x1
ZGUgIkZpbmRPcHRpb25zLmgiCiAjaW5jbHVkZSAiTGF5b3V0TWlsZXN0b25lcy5oIgotI2luY2x1
ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlBh
Z2VWaXNpYmlsaXR5U3RhdGUuaCIKICNpbmNsdWRlICJQYWdpbmF0aW9uLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1TY3JlZW4uaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmln
YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmln
YXRpb24uY3BwCShyZXZpc2lvbiAxMzM1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRp
YWxOYXZpZ2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQ1LDE5ICs2NDUsMTkgQEAgdm9p
ZCBkaXN0YW5jZURhdGFGb3JOb2RlKEZvY3VzRGlyZWN0aW9uCiAgICAgc3dpdGNoIChkaXJlY3Rp
b24pIHsKICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKICAgICAgICAgc2FtZUF4aXNEaXN0
YW5jZSA9IGV4aXRQb2ludC54KCkgLSBlbnRyeVBvaW50LngoKTsKLSAgICAgICAgb3RoZXJBeGlz
RGlzdGFuY2UgPSBhYnNvbHV0ZVZhbHVlKGV4aXRQb2ludC55KCkgLSBlbnRyeVBvaW50LnkoKSk7
CisgICAgICAgIG90aGVyQXhpc0Rpc3RhbmNlID0gKGV4aXRQb2ludC55KCkgLSBlbnRyeVBvaW50
LnkoKSkuYWJzKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoK
ICAgICAgICAgc2FtZUF4aXNEaXN0YW5jZSA9IGV4aXRQb2ludC55KCkgLSBlbnRyeVBvaW50Lnko
KTsKLSAgICAgICAgb3RoZXJBeGlzRGlzdGFuY2UgPSBhYnNvbHV0ZVZhbHVlKGV4aXRQb2ludC54
KCkgLSBlbnRyeVBvaW50LngoKSk7CisgICAgICAgIG90aGVyQXhpc0Rpc3RhbmNlID0gKGV4aXRQ
b2ludC54KCkgLSBlbnRyeVBvaW50LngoKSkuYWJzKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKICAgICAgICAgc2FtZUF4aXNEaXN0YW5jZSA9IGVudHJ5
UG9pbnQueCgpIC0gZXhpdFBvaW50LngoKTsKLSAgICAgICAgb3RoZXJBeGlzRGlzdGFuY2UgPSBh
YnNvbHV0ZVZhbHVlKGVudHJ5UG9pbnQueSgpIC0gZXhpdFBvaW50LnkoKSk7CisgICAgICAgIG90
aGVyQXhpc0Rpc3RhbmNlID0gKGVudHJ5UG9pbnQueSgpIC0gZXhpdFBvaW50LnkoKSkuYWJzKCk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgogICAgICAgICBz
YW1lQXhpc0Rpc3RhbmNlID0gZW50cnlQb2ludC55KCkgLSBleGl0UG9pbnQueSgpOwotICAgICAg
ICBvdGhlckF4aXNEaXN0YW5jZSA9IGFic29sdXRlVmFsdWUoZW50cnlQb2ludC54KCkgLSBleGl0
UG9pbnQueCgpKTsKKyAgICAgICAgb3RoZXJBeGlzRGlzdGFuY2UgPSAoZW50cnlQb2ludC54KCkg
LSBleGl0UG9pbnQueCgpKS5hYnMoKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Nw
YXRpYWxOYXZpZ2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0
aWFsTmF2aWdhdGlvbi5oCShyZXZpc2lvbiAxMzM1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L1NwYXRpYWxOYXZpZ2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKIAog
I2luY2x1ZGUgIkZvY3VzRGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0Lmgi
CiAjaW5jbHVkZSAiTm9kZS5oIgogCiAjaW5jbHVkZSA8bGltaXRzPgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCShy
ZXZpc2lvbiAxMzM1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdDb29yZGluYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5l
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yX2gKIAogI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRl
ICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgogI2luY2x1ZGUgIlRp
bWVyLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GcmFjdGlvbmFsTGF5b3V0VW5p
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZyYWN0aW9uYWxMYXlv
dXRVbml0LmgJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Zy
YWN0aW9uYWxMYXlvdXRVbml0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODI1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBGcmFjdGlvbmFsTGF5b3V0VW5pdF9oCi0jZGVmaW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0
X2gKLQotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNsdWRlIDxt
YXRoLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
LSNpbmNsdWRlIDx3dGYvU2F0dXJhdGVkQXJpdGhtZXRpYy5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLSNpZmRlZiBOREVCVUcKLQotI2RlZmluZSBSRVBPUlRfT1ZFUkZMT1coZG9lc092ZXJm
bG93KSAoKHZvaWQpMCkKLQotI2Vsc2UKLQotI2RlZmluZSBSRVBPUlRfT1ZFUkZMT1coZG9lc092
ZXJmbG93KSBkbyBcCi0gICAgaWYgKCEoZG9lc092ZXJmbG93KSkgeyBcCi0gICAgICAgIFdURlJl
cG9ydEVycm9yKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgIiEoJXMp
IiwgI2RvZXNPdmVyZmxvdyk7IFwKLSAgICB9IFwKLXdoaWxlICgwKQotCi0jZW5kaWYKLQotI2lm
IEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCi1zdGF0aWMgY29uc3QgaW50IGtGaXhlZFBvaW50RGVu
b21pbmF0b3IgPSA2NDsKLSNlbHNlCi1zdGF0aWMgY29uc3QgaW50IGtGaXhlZFBvaW50RGVub21p
bmF0b3IgPSAxOwotI2VuZGlmCi1jb25zdCBpbnQgaW50TWF4Rm9yTGF5b3V0VW5pdCA9IElOVF9N
QVggLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOwotY29uc3QgaW50IGludE1pbkZvckxheW91dFVu
aXQgPSBJTlRfTUlOIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKLQotY2xhc3MgRnJhY3Rpb25h
bExheW91dFVuaXQgewotcHVibGljOgotICAgIC8vIEZJWE1FOiBJZGVhbGx5IHdlIHdvdWxkIGhh
dmUgc2l6ZV90IHZlcnNpb25zIG9mIHRoZSBjb25zdHJ1Y3RvciBhbmQgb3BlcmF0b3JzLgotICAg
IC8vIEhvd2V2ZXIgZHVlIHRvIGNvbXBpbGVyIGFuZCBwbGF0Zm9ybSBkaWZmZXJlbmNlcyBhZGRp
bmcgdGhvc2UgYXJlIG5vbi10cml2aWFsLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODM4NDggZm9yIGRldGFpbHMuCi0gICAgCi0gICAgRnJhY3Rp
b25hbExheW91dFVuaXQoKSA6IG1fdmFsdWUoMCkgeyB9Ci0jaWYgRU5BQkxFKFNVQlBJWEVMX0xB
WU9VVCkKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdChpbnQgdmFsdWUpIHsgc2V0VmFsdWUodmFs
dWUpOyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQodW5zaWduZWQgc2hvcnQgdmFsdWUpIHsg
c2V0VmFsdWUodmFsdWUpOyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQodW5zaWduZWQgaW50
IHZhbHVlKSB7IHNldFZhbHVlKHZhbHVlKTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KGZs
b2F0IHZhbHVlKQotICAgIHsKLSNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElD
KQotICAgICAgICBtX3ZhbHVlID0gY2xhbXBUbzxmbG9hdD4odmFsdWUgKiBrRml4ZWRQb2ludERl
bm9taW5hdG9yLCBzdGF0aWNfY2FzdDxmbG9hdD4oSU5UX01JTiksIHN0YXRpY19jYXN0PGZsb2F0
PihJTlRfTUFYKSk7Ci0jZWxzZQotICAgICAgICBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2
YWx1ZSkpOwotICAgICAgICBtX3ZhbHVlID0gdmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9y
OwotI2VuZGlmCi0gICAgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KGRvdWJsZSB2YWx1ZSkK
LSAgICB7Ci0jaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKLSAgICAgICAg
bV92YWx1ZSA9IGNsYW1wVG88ZG91YmxlPih2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3Is
IHN0YXRpY19jYXN0PGRvdWJsZT4oSU5UX01JTiksIHN0YXRpY19jYXN0PGRvdWJsZT4oSU5UX01B
WCkpOwotI2Vsc2UKLSAgICAgICAgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsK
LSAgICAgICAgbV92YWx1ZSA9IHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKLSNlbmRp
ZgotICAgIH0KLSNlbHNlCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQoaW50IHZhbHVlKSB7IFJF
UE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7IG1fdmFsdWUgPSB2YWx1ZTsgfQotICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0KHVuc2lnbmVkIHNob3J0IHZhbHVlKSB7IFJFUE9SVF9PVkVS
RkxPVyhpc0luQm91bmRzKHZhbHVlKSk7IG1fdmFsdWUgPSB2YWx1ZTsgfQotICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0KHVuc2lnbmVkIGludCB2YWx1ZSkgeyBSRVBPUlRfT1ZFUkZMT1coaXNJbkJv
dW5kcyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFsdWU7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dChmbG9hdCB2YWx1ZSkgeyBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOyBtX3Zh
bHVlID0gdmFsdWU7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdChkb3VibGUgdmFsdWUpIHsg
UkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsgbV92YWx1ZSA9IHZhbHVlOyB9Ci0j
ZW5kaWYKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgdmFsdWUpIHsgbV92YWx1ZSA9IHZhbHVlLnJhd1ZhbHVlKCk7IH0KLQotICAgIHN0YXRpYyBG
cmFjdGlvbmFsTGF5b3V0VW5pdCBmcm9tRmxvYXRDZWlsKGZsb2F0IHZhbHVlKQotICAgIHsKLSAg
ICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgdjsKLSNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9V
VF9BUklUSE1FVElDKQotICAgICAgICB2Lm1fdmFsdWUgPSBjbGFtcFRvSW50ZWdlcihjZWlsZih2
YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3IpKTsKLSNlbHNlCi0gICAgICAgIFJFUE9SVF9P
VkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7Ci0gICAgICAgIHYubV92YWx1ZSA9IGNlaWxmKHZh
bHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvcik7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIHY7
Ci0gICAgfQotCi0gICAgc3RhdGljIEZyYWN0aW9uYWxMYXlvdXRVbml0IGZyb21GbG9hdEZsb29y
KGZsb2F0IHZhbHVlKQotICAgIHsKLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgdjsKLSNp
ZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQotICAgICAgICB2Lm1fdmFsdWUg
PSBjbGFtcFRvSW50ZWdlcihmbG9vcmYodmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yKSk7
Ci0jZWxzZQotICAgICAgICBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOwotICAg
ICAgICB2Lm1fdmFsdWUgPSBmbG9vcmYodmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yKTsK
LSNlbmRpZgotICAgICAgICByZXR1cm4gdjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgRnJhY3Rpb25h
bExheW91dFVuaXQgZnJvbUZsb2F0Um91bmQoZmxvYXQgdmFsdWUpCi0gICAgewotI2lmIEVOQUJM
RShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCi0gICAgICAgIGlmICh2YWx1ZSA+PSAwKQot
ICAgICAgICAgICAgcmV0dXJuIGNsYW1wKHZhbHVlICsgZXBzaWxvbigpIC8gMi4wZik7Ci0gICAg
ICAgIHJldHVybiBjbGFtcCh2YWx1ZSAtIGVwc2lsb24oKSAvIDIuMGYpOwotI2Vsc2UKLSAgICAg
ICAgaWYgKHZhbHVlID49IDApIHsKLSAgICAgICAgICAgIFJFUE9SVF9PVkVSRkxPVyhpc0luQm91
bmRzKHZhbHVlICsgZXBzaWxvbigpIC8gMi4wZikpOwotICAgICAgICAgICAgcmV0dXJuIEZyYWN0
aW9uYWxMYXlvdXRVbml0KHZhbHVlICsgZXBzaWxvbigpIC8gMi4wZik7Ci0gICAgICAgIH0KLSAg
ICAgICAgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUgLSBlcHNpbG9uKCkgLyAyLjBm
KSk7Ci0gICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdCh2YWx1ZSAtIGVwc2lsb24o
KSAvIDIuMGYpOwotI2VuZGlmCi0gICAgfQotCi0jaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkK
LSAgICBpbnQgdG9JbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlIC8ga0ZpeGVkUG9pbnREZW5v
bWluYXRvcjsgfQotICAgIGZsb2F0IHRvRmxvYXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxmbG9hdD4obV92YWx1ZSkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOyB9Ci0gICAgZG91Ymxl
IHRvRG91YmxlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3ZhbHVlKSAv
IGtGaXhlZFBvaW50RGVub21pbmF0b3I7IH0KLSAgICBmbG9hdCBjZWlsVG9GbG9hdCgpIGNvbnN0
Ci0gICAgewotICAgICAgICBmbG9hdCBmbG9hdFZhbHVlID0gdG9GbG9hdCgpOwotICAgICAgICBp
ZiAoc3RhdGljX2Nhc3Q8aW50PihmbG9hdFZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvcikg
PT0gbV92YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBmbG9hdFZhbHVlOwotICAgICAgICBpZiAo
ZmxvYXRWYWx1ZSA+IDApCi0gICAgICAgICAgICByZXR1cm4gbmV4dGFmdGVyZihmbG9hdFZhbHVl
LCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpOwotICAgICAgICByZXR1cm4gbmV4
dGFmdGVyZihmbG9hdFZhbHVlLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWluKCkpOwot
ICAgIH0KLSNlbHNlCi0gICAgaW50IHRvSW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQot
ICAgIGZsb2F0IHRvRmxvYXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obV92
YWx1ZSk7IH0KLSAgICBkb3VibGUgdG9Eb3VibGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxkb3VibGU+KG1fdmFsdWUpOyB9Ci0gICAgZmxvYXQgY2VpbFRvRmxvYXQoKSBjb25zdCB7IHJl
dHVybiB0b0Zsb2F0KCk7IH0KLSNlbmRpZgotICAgIHVuc2lnbmVkIHRvVW5zaWduZWQoKSBjb25z
dCB7IFJFUE9SVF9PVkVSRkxPVyhtX3ZhbHVlID49IDApOyByZXR1cm4gdG9JbnQoKTsgfQotCi0g
ICAgb3BlcmF0b3IgaW50KCkgY29uc3QgeyByZXR1cm4gdG9JbnQoKTsgfQotICAgIG9wZXJhdG9y
IHVuc2lnbmVkKCkgY29uc3QgeyByZXR1cm4gdG9VbnNpZ25lZCgpOyB9Ci0gICAgb3BlcmF0b3Ig
ZmxvYXQoKSBjb25zdCB7IHJldHVybiB0b0Zsb2F0KCk7IH0KLSAgICBvcGVyYXRvciBkb3VibGUo
KSBjb25zdCB7IHJldHVybiB0b0RvdWJsZSgpOyB9Ci0gICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWU7IH0KLQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9y
KysoaW50KQotICAgIHsKLSAgICAgICAgbV92YWx1ZSArPSBrRml4ZWRQb2ludERlbm9taW5hdG9y
OwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgaW5saW5lIGludCByYXdWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KLSAgICBpbmxpbmUgdm9pZCBzZXRSYXdWYWx1
ZShpbnQgdmFsdWUpIHsgbV92YWx1ZSA9IHZhbHVlOyB9Ci0gICAgdm9pZCBzZXRSYXdWYWx1ZShs
b25nIGxvbmcgdmFsdWUpCi0gICAgewotICAgICAgICBSRVBPUlRfT1ZFUkZMT1codmFsdWUgPiBz
dGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpICYmIHZhbHVlIDwgc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKSk7Ci0gICAgICAgIG1fdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHZh
bHVlKTsKLSAgICB9Ci0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBhYnMoKSBjb25zdAotICAg
IHsKLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsdWU7Ci0gICAgICAgIHJl
dHVyblZhbHVlLnNldFJhd1ZhbHVlKDo6YWJzKG1fdmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIHJl
dHVyblZhbHVlOwotICAgIH0KLSNpZiBPUyhEQVJXSU4pCi0gICAgaW50IHd0Zl9jZWlsKCkgY29u
c3QKLSNlbHNlCi0gICAgaW50IGNlaWwoKSBjb25zdAotI2VuZGlmCi0gICAgewotI2lmIEVOQUJM
RShTVUJQSVhFTF9MQVlPVVQpCi0gICAgICAgIGlmIChtX3ZhbHVlID49IDApCi0gICAgICAgICAg
ICByZXR1cm4gKG1fdmFsdWUgKyBrRml4ZWRQb2ludERlbm9taW5hdG9yIC0gMSkgLyBrRml4ZWRQ
b2ludERlbm9taW5hdG9yOwotICAgICAgICByZXR1cm4gdG9JbnQoKTsKLSNlbHNlCi0gICAgICAg
IHJldHVybiBtX3ZhbHVlOwotI2VuZGlmCi0gICAgfQotICAgIGludCByb3VuZCgpIGNvbnN0Ci0g
ICAgewotI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpICYmIEVOQUJMRShTQVRVUkFURURfTEFZ
T1VUX0FSSVRITUVUSUMpCi0gICAgICAgIGlmIChtX3ZhbHVlID4gMCkKLSAgICAgICAgICAgIHJl
dHVybiBzYXR1cmF0ZWRBZGRpdGlvbihyYXdWYWx1ZSgpLCBrRml4ZWRQb2ludERlbm9taW5hdG9y
IC8gMikgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOwotICAgICAgICByZXR1cm4gc2F0dXJhdGVk
U3VidHJhY3Rpb24ocmF3VmFsdWUoKSwga0ZpeGVkUG9pbnREZW5vbWluYXRvciAvIDIpIC8ga0Zp
eGVkUG9pbnREZW5vbWluYXRvcjsKLSNlbGlmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCi0gICAg
ICAgIGlmIChtX3ZhbHVlID4gMCkKLSAgICAgICAgICAgIHJldHVybiAobV92YWx1ZSArIChrRml4
ZWRQb2ludERlbm9taW5hdG9yIC8gMikpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKLSAgICAg
ICAgcmV0dXJuIChtX3ZhbHVlIC0gKGtGaXhlZFBvaW50RGVub21pbmF0b3IgLyAyKSkgLyBrRml4
ZWRQb2ludERlbm9taW5hdG9yOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIG1fdmFsdWU7Ci0jZW5k
aWYKLSAgICB9Ci0KLSAgICBpbnQgZmxvb3IoKSBjb25zdAotICAgIHsKLSNpZiBFTkFCTEUoU1VC
UElYRUxfTEFZT1VUKQotICAgICAgICBpZiAobV92YWx1ZSA+PSAwKQotICAgICAgICAgICAgcmV0
dXJuIHRvSW50KCk7Ci0gICAgICAgIHJldHVybiAobV92YWx1ZSAtIGtGaXhlZFBvaW50RGVub21p
bmF0b3IgKyAxKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0jZWxzZQotICAgICAgICByZXR1
cm4gbV92YWx1ZTsKLSNlbmRpZgotICAgIH0KLQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGZy
YWN0aW9uKCkgY29uc3QKLSAgICB7ICAgCi0gICAgICAgIC8vIEFkZCB0aGUgZnJhY3Rpb24gdG8g
dGhlIHNpemUgKGFzIG9wcG9zZWQgdG8gdGhlIGZ1bGwgbG9jYXRpb24pIHRvIGF2b2lkIG92ZXJm
bG93cy4KLSAgICAgICAgLy8gQ29tcHV0ZSBmcmFjdGlvbiB1c2luZyB0aGUgbW9kIG9wZXJhdG9y
IHRvIHByZXNlcnZlIHRoZSBzaWduIG9mIHRoZSB2YWx1ZSBhcyBpdCBtYXkgYWZmZWN0IHJvdW5k
aW5nLgotICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBmcmFjdGlvbjsKLSAgICAgICAgZnJh
Y3Rpb24uc2V0UmF3VmFsdWUocmF3VmFsdWUoKSAlIGtGaXhlZFBvaW50RGVub21pbmF0b3IpOwot
ICAgICAgICByZXR1cm4gZnJhY3Rpb247Ci0gICAgfQotCi0jaWYgRU5BQkxFKFNVQlBJWEVMX0xB
WU9VVCkKLSAgICBzdGF0aWMgZmxvYXQgZXBzaWxvbigpIHsgcmV0dXJuIDEuMGYgLyBrRml4ZWRQ
b2ludERlbm9taW5hdG9yOyB9Ci0jZWxzZQotICAgIHN0YXRpYyBpbnQgZXBzaWxvbigpIHsgcmV0
dXJuIDA7IH0KLSNlbmRpZgotICAgIHN0YXRpYyBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBt
YXgoKQotICAgIHsKLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbTsKLSAgICAgICAgbS5t
X3ZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKLSAgICAgICAgcmV0dXJu
IG07Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtaW4oKQot
ICAgIHsKLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbTsKLSAgICAgICAgbS5tX3ZhbHVl
ID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKTsKLSAgICAgICAgcmV0dXJuIG07Ci0g
ICAgfQotCi0gICAgLy8gVmVyc2lvbnMgb2YgbWF4L21pbiB0aGF0IGFyZSBzbGlnaHRseSBzbWFs
bGVyL2xhcmdlciB0aGFuIG1heC9taW4oKSB0byBhbGxvdyBmb3Igcm9pbmRpbmcgd2l0aG91dCBv
dmVyZmxvd2luZy4KLSAgICBzdGF0aWMgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQgbmVhcmx5
TWF4KCkKLSAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG07Ci0gICAgICAgIG0u
bV92YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkgLSBrRml4ZWRQb2ludERl
bm9taW5hdG9yIC8gMjsKLSAgICAgICAgcmV0dXJuIG07Ci0gICAgfQotICAgIHN0YXRpYyBjb25z
dCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBuZWFybHlNaW4oKQotICAgIHsKLSAgICAgICAgRnJhY3Rp
b25hbExheW91dFVuaXQgbTsKLSAgICAgICAgbS5tX3ZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ+OjptaW4oKSArIGtGaXhlZFBvaW50RGVub21pbmF0b3IgLyAyOwotICAgICAgICByZXR1
cm4gbTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIEZyYWN0aW9uYWxMYXlvdXRVbml0IGNsYW1w
KGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjbGFtcFRvPEZyYWN0aW9uYWxM
YXlvdXRVbml0Pih2YWx1ZSwgRnJhY3Rpb25hbExheW91dFVuaXQ6Om1pbigpLCBGcmFjdGlvbmFs
TGF5b3V0VW5pdDo6bWF4KCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgYm9vbCBp
c0luQm91bmRzKGludCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiA6OmFicyh2YWx1ZSkg
PD0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSAvIGtGaXhlZFBvaW50RGVub21pbmF0
b3I7Ci0gICAgfQotICAgIHN0YXRpYyBib29sIGlzSW5Cb3VuZHModW5zaWduZWQgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gdmFsdWUgPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKLSAg
ICB9Ci0gICAgc3RhdGljIGJvb2wgaXNJbkJvdW5kcyhkb3VibGUgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gOjpmYWJzKHZhbHVlKSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1h
eCgpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKLSAgICB9Ci0gICAgCi0gICAgaW5saW5lIHZv
aWQgc2V0VmFsdWUoaW50IHZhbHVlKQotICAgIHsKLSNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9V
VF9BUklUSE1FVElDKQotICAgICAgICBpZiAodmFsdWUgPiBpbnRNYXhGb3JMYXlvdXRVbml0KQot
ICAgICAgICAgICAgbV92YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7Ci0g
ICAgICAgIGVsc2UgaWYgKHZhbHVlIDwgaW50TWluRm9yTGF5b3V0VW5pdCkKLSAgICAgICAgICAg
IG1fdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBtX3ZhbHVlID0gdmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yOwot
I2Vsc2UKLSAgICAgICAgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsKLSAgICAg
ICAgbV92YWx1ZSA9IHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKLSNlbmRpZgotICAg
IH0KLSAgICBpbmxpbmUgdm9pZCBzZXRWYWx1ZSh1bnNpZ25lZCB2YWx1ZSkKLSAgICB7Ci0jaWYg
RU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKLSAgICAgICAgaWYgKHZhbHVlID49
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbnRNYXhGb3JMYXlvdXRVbml0KSkKLSAgICAgICAgICAg
IG1fdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBtX3ZhbHVlID0gdmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yOwot
I2Vsc2UKLSAgICAgICAgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsKLSAgICAg
ICAgbV92YWx1ZSA9IHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKLSNlbmRpZgotICAg
IH0KLQotICAgIGludCBtX3ZhbHVlOwotfTsKLQotaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25z
dCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIp
Ci17Ci0gICAgcmV0dXJuIGEucmF3VmFsdWUoKSA8PSBiLnJhd1ZhbHVlKCk7Ci19Ci0KLWlubGlu
ZSBib29sIG9wZXJhdG9yPD0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIp
Ci17Ci0gICAgcmV0dXJuIGEudG9GbG9hdCgpIDw9IGI7Ci19Ci0KLWlubGluZSBib29sIG9wZXJh
dG9yPD0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQotewotICAgIHJldHVy
biBhIDw9IEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRv
cjw9KGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAg
IHJldHVybiBhIDw9IGIudG9GbG9hdCgpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNv
bnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFVuaXQoYSkgPD0gYjsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I+
PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVu
aXQmIGIpCi17Ci0gICAgcmV0dXJuIGEucmF3VmFsdWUoKSA+PSBiLnJhd1ZhbHVlKCk7Ci19Ci0K
LWlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGlu
dCBiKQotewotICAgIHJldHVybiBhID49IEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOwotfQotCi1p
bmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBiKQotewotICAgIHJldHVybiBhID49IGIudG9GbG9hdCgpOwotfQotCi1pbmxpbmUg
Ym9vbCBvcGVyYXRvcj49KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQot
ewotICAgIHJldHVybiBhLnRvRmxvYXQoKSA+PSBiOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRv
cj49KGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICBy
ZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgPj0gYjsKLX0KLQotaW5saW5lIGJvb2wgb3Bl
cmF0b3I8KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gYS5yYXdWYWx1ZSgpIDwgYi5yYXdWYWx1ZSgpOwot
fQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEs
IGludCBiKQotewotICAgIHJldHVybiBhIDwgRnJhY3Rpb25hbExheW91dFVuaXQoYik7Ci19Ci0K
LWlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxv
YXQgYikKLXsKLSAgICByZXR1cm4gYS50b0Zsb2F0KCkgPCBiOwotfQotCi1pbmxpbmUgYm9vbCBv
cGVyYXRvcjwoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGRvdWJsZSBiKQotewotICAg
IHJldHVybiBhLnRvRG91YmxlKCkgPCBiOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29u
c3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBG
cmFjdGlvbmFsTGF5b3V0VW5pdChhKSA8IGI7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPChj
b25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1
cm4gYSA8IGIudG9GbG9hdCgpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewot
ICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgPiBiLnJhd1ZhbHVlKCk7Ci19Ci0KLWlubGluZSBib29s
IG9wZXJhdG9yPihjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZG91YmxlIGIpCi17Ci0g
ICAgcmV0dXJuIGEudG9Eb3VibGUoKSA+IGI7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPihj
b25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKLXsKLSAgICByZXR1cm4gYS50
b0Zsb2F0KCkgPiBiOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgRnJhY3Rpb25h
bExheW91dFVuaXQmIGEsIGludCBiKQotewotICAgIHJldHVybiBhID4gRnJhY3Rpb25hbExheW91
dFVuaXQoYik7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBpbnQgYSwgY29uc3Qg
RnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRV
bml0KGEpID4gYjsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IGZsb2F0IGEsIGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBhID4gYi50b0Zsb2F0
KCk7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBkb3VibGUgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJuIGEgPiBiLnRvRG91YmxlKCk7Ci19
Ci0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEs
IGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBhLnJhd1ZhbHVl
KCkgIT0gYi5yYXdWYWx1ZSgpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQotewotICAgIHJldHVybiBhICE9IEZyYWN0
aW9uYWxMYXlvdXRVbml0KGIpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGlu
dCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gRnJhY3Rp
b25hbExheW91dFVuaXQoYSkgIT0gYjsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCi17Ci0gICAgcmV0dXJuIGEgIT0gRnJh
Y3Rpb25hbExheW91dFVuaXQoYik7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
RnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQot
ewotICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgPT0gYi5yYXdWYWx1ZSgpOwotfQotCi1pbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKLXsK
LSAgICByZXR1cm4gYSA9PSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKLX0KLQotaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIp
Ci17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpID09IGI7Ci19Ci0KLWlubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIp
Ci17Ci0gICAgcmV0dXJuIGEudG9GbG9hdCgpID09IGI7Ci19Ci0KLWlubGluZSBib29sIG9wZXJh
dG9yPT0oY29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0g
ICAgcmV0dXJuIGEgPT0gYi50b0Zsb2F0KCk7Ci19Ci0KLS8vIEZvciBtdWx0aXBsaWNhdGlvbiB0
aGF0J3MgcHJvbmUgdG8gb3ZlcmZsb3csIHRoaXMgYm91bmRzIGl0IHRvIEZyYWN0aW9uYWxMYXlv
dXRVbml0OjptYXgoKSBhbmQgOjptaW4oKQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IGJv
dW5kZWRNdWx0aXBseShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rp
b25hbExheW91dFVuaXQmIGIpCi17Ci0jaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICBG
cmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7Ci0gICAgbG9uZyBsb25nIHJhd1ZhbCA9IHN0
YXRpY19jYXN0PGxvbmcgbG9uZz4oYS5yYXdWYWx1ZSgpKSAqIGIucmF3VmFsdWUoKSAvIGtGaXhl
ZFBvaW50RGVub21pbmF0b3I7Ci0gICAgaWYgKHJhd1ZhbCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50Pjo6bWF4KCkpCi0gICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWF4KCk7
Ci0gICAgaWYgKHJhd1ZhbCA8IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkpCi0gICAg
ICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWluKCk7Ci0gICAgcmV0dXJuVmFsLnNl
dFJhd1ZhbHVlKHJhd1ZhbCk7Ci0gICAgcmV0dXJuIHJldHVyblZhbDsKLSNlbHNlCi0gICAgcmV0
dXJuIGEucmF3VmFsdWUoKSAqIGIucmF3VmFsdWUoKTsKLSNlbmRpZgotfQotCi1pbmxpbmUgRnJh
Y3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IqKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSNpZiBFTkFCTEUoU1VCUElYRUxf
TEFZT1VUKSAmJiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQotICAgIHJldHVy
biBib3VuZGVkTXVsdGlwbHkoYSwgYik7Ci0jZWxpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQot
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJldHVyblZhbDsKLSAgICBsb25nIGxvbmcgcmF3VmFs
ID0gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihhLnJhd1ZhbHVlKCkpICogYi5yYXdWYWx1ZSgpIC8g
a0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKLSAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUocmF3VmFs
KTsKLSAgICByZXR1cm4gcmV0dXJuVmFsOwotI2Vsc2UKLSAgICByZXR1cm4gYS5yYXdWYWx1ZSgp
ICogYi5yYXdWYWx1ZSgpOwotI2VuZGlmCi19ICAgIAotCi1pbmxpbmUgZG91YmxlIG9wZXJhdG9y
Kihjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZG91YmxlIGIpCi17Ci0gICAgcmV0dXJu
IGEudG9Eb3VibGUoKSAqIGI7Ci19Ci0KLWlubGluZSBmbG9hdCBvcGVyYXRvciooY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCi17Ci0gICAgcmV0dXJuIGEudG9GbG9hdCgp
ICogYjsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKihjb25zdCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCi17Ci0gICAgcmV0dXJuIGEgKiBGcmFjdGlv
bmFsTGF5b3V0VW5pdChiKTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJh
dG9yKihjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgdW5zaWduZWQgYikKLXsKLSAgICBy
ZXR1cm4gYSAqIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOwotfQotCi1pbmxpbmUgRnJhY3Rpb25h
bExheW91dFVuaXQgb3BlcmF0b3IqKHVuc2lnbmVkIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBiKQotewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSAqIGI7Ci19Ci0K
LWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvciooY29uc3QgaW50IGEsIGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0
VW5pdChhKSAqIGI7Ci19Ci0KLWlubGluZSBmbG9hdCBvcGVyYXRvciooY29uc3QgZmxvYXQgYSwg
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJuIGEgKiBiLnRvRmxv
YXQoKTsKLX0KLQotaW5saW5lIGRvdWJsZSBvcGVyYXRvciooY29uc3QgZG91YmxlIGEsIGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBhICogYi50b0RvdWJsZSgp
OwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IvKGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSNp
ZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJldHVy
blZhbDsKLSAgICBsb25nIGxvbmcgcmF3VmFsID0gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihrRml4
ZWRQb2ludERlbm9taW5hdG9yKSAqIGEucmF3VmFsdWUoKSAvIGIucmF3VmFsdWUoKTsKLSAgICBy
ZXR1cm5WYWwuc2V0UmF3VmFsdWUocmF3VmFsKTsKLSAgICByZXR1cm4gcmV0dXJuVmFsOwotI2Vs
c2UKLSAgICByZXR1cm4gYS5yYXdWYWx1ZSgpIC8gYi5yYXdWYWx1ZSgpOwotI2VuZGlmCi19ICAg
IAotCi1pbmxpbmUgZmxvYXQgb3BlcmF0b3IvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBh
LCBmbG9hdCBiKQotewotICAgIHJldHVybiBhLnRvRmxvYXQoKSAvIGI7Ci19Ci0KLWlubGluZSBk
b3VibGUgb3BlcmF0b3IvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBkb3VibGUgYikK
LXsKLSAgICByZXR1cm4gYS50b0RvdWJsZSgpIC8gYjsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxM
YXlvdXRVbml0IG9wZXJhdG9yLyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIp
Ci17Ci0gICAgcmV0dXJuIGEgLyBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKLX0KLQotaW5saW5l
IEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYSwgdW5zaWduZWQgaW50IGIpCi17Ci0gICAgcmV0dXJuIGEgLyBGcmFjdGlvbmFsTGF5b3V0
VW5pdChiKTsKLX0KLQotaW5saW5lIGZsb2F0IG9wZXJhdG9yLyhjb25zdCBmbG9hdCBhLCBjb25z
dCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gYSAvIGIudG9GbG9hdCgp
OwotfQotCi1pbmxpbmUgZG91YmxlIG9wZXJhdG9yLyhjb25zdCBkb3VibGUgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJuIGEgLyBiLnRvRG91YmxlKCk7Ci19
Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci8oY29uc3QgaW50IGEsIGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5
b3V0VW5pdChhKSAvIGI7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRv
ci8odW5zaWduZWQgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAg
IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSAvIGI7Ci19Ci0KLWlubGluZSBGcmFjdGlv
bmFsTGF5b3V0VW5pdCBvcGVyYXRvcisoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
IHJldHVyblZhbDsKLSNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQotICAg
IHJldHVyblZhbC5zZXRSYXdWYWx1ZShzYXR1cmF0ZWRBZGRpdGlvbihhLnJhd1ZhbHVlKCksIGIu
cmF3VmFsdWUoKSkpOwotI2Vsc2UKLSAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUoYS5yYXdWYWx1
ZSgpICsgYi5yYXdWYWx1ZSgpKTsKLSNlbmRpZgotICAgIHJldHVybiByZXR1cm5WYWw7Ci19Ci0K
LWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvcisoY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGEsIGludCBiKQotewotICAgIHJldHVybiBhICsgRnJhY3Rpb25hbExheW91dFVu
aXQoYik7Ci19Ci0KLWlubGluZSBmbG9hdCBvcGVyYXRvcisoY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGEsIGZsb2F0IGIpCi17Ci0gICAgcmV0dXJuIGEudG9GbG9hdCgpICsgYjsKLX0KLQot
aW5saW5lIGRvdWJsZSBvcGVyYXRvcisoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGRv
dWJsZSBiKQotewotICAgIHJldHVybiBhLnRvRG91YmxlKCkgKyBiOwotfQotCi1pbmxpbmUgRnJh
Y3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IrKGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgKyBi
OwotfQotCi1pbmxpbmUgZmxvYXQgb3BlcmF0b3IrKGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBhICsgYi50b0Zsb2F0KCk7Ci19Ci0K
LWlubGluZSBkb3VibGUgb3BlcmF0b3IrKGNvbnN0IGRvdWJsZSBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gYSArIGIudG9Eb3VibGUoKTsKLX0KLQotaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgRnJhY3Rpb25h
bExheW91dFVuaXQgcmV0dXJuVmFsOwotI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRI
TUVUSUMpCi0gICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKHNhdHVyYXRlZFN1YnRyYWN0aW9uKGEu
cmF3VmFsdWUoKSwgYi5yYXdWYWx1ZSgpKSk7Ci0jZWxzZQotICAgIHJldHVyblZhbC5zZXRSYXdW
YWx1ZShhLnJhd1ZhbHVlKCkgLSBiLnJhd1ZhbHVlKCkpOwotI2VuZGlmCi0gICAgcmV0dXJuIHJl
dHVyblZhbDsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLShjb25z
dCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCi17Ci0gICAgcmV0dXJuIGEgLSBGcmFj
dGlvbmFsTGF5b3V0VW5pdChiKTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9w
ZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgdW5zaWduZWQgYikKLXsKLSAg
ICByZXR1cm4gYSAtIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOwotfQotCi1pbmxpbmUgZmxvYXQg
b3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQotewotICAg
IHJldHVybiBhLnRvRmxvYXQoKSAtIGI7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBvcGVyYXRvci0oY29uc3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQot
ewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSAtIGI7Ci19Ci0KLWlubGluZSBm
bG9hdCBvcGVyYXRvci0oY29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGIpCi17Ci0gICAgcmV0dXJuIGEgLSBiLnRvRmxvYXQoKTsKLX0KLQotaW5saW5lIEZyYWN0aW9u
YWxMYXlvdXRVbml0IG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSkKLXsK
LSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7Ci0gICAgcmV0dXJuVmFsLnNldFJh
d1ZhbHVlKC1hLnJhd1ZhbHVlKCkpOwotICAgIHJldHVybiByZXR1cm5WYWw7Ci19Ci0KLS8vIEZv
ciByZXR1cm5pbmcgdGhlIHJlbWFpbmRlciBhZnRlciBhIGRpdmlzaW9uIHdpdGggaW50ZWdlciBy
ZXN1bHRzLgotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IGludE1vZChjb25zdCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0jaWYg
RU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICAvLyBUaGlzIGNhbGN1bGF0ZXMgdGhlIG1vZHVs
byBzbyB0aGF0OiBhID0gc3RhdGljX2Nhc3Q8aW50PihhIC8gYikgKiBiICsgaW50TW9kKGEsIGIp
LgotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJldHVyblZhbDsKLSAgICByZXR1cm5WYWwuc2V0
UmF3VmFsdWUoYS5yYXdWYWx1ZSgpICUgYi5yYXdWYWx1ZSgpKTsKLSAgICByZXR1cm4gcmV0dXJu
VmFsOwotI2Vsc2UKLSAgICByZXR1cm4gYS5yYXdWYWx1ZSgpICUgYi5yYXdWYWx1ZSgpOwotI2Vu
ZGlmCi19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvciUoY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewot
I2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCi0gICAgLy8gVGhpcyBjYWxjdWxhdGVzIHRoZSBt
b2R1bG8gc28gdGhhdDogYSA9IChhIC8gYikgKiBiICsgYSAlIGIuCi0gICAgRnJhY3Rpb25hbExh
eW91dFVuaXQgcmV0dXJuVmFsOwotICAgIGxvbmcgbG9uZyByYXdWYWwgPSAoc3RhdGljX2Nhc3Q8
bG9uZyBsb25nPihrRml4ZWRQb2ludERlbm9taW5hdG9yKSAqIGEucmF3VmFsdWUoKSkgJSBiLnJh
d1ZhbHVlKCk7Ci0gICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKHJhd1ZhbCAvIGtGaXhlZFBvaW50
RGVub21pbmF0b3IpOwotICAgIHJldHVybiByZXR1cm5WYWw7Ci0jZWxzZQotICAgIHJldHVybiBh
LnJhd1ZhbHVlKCkgJSBiLnJhd1ZhbHVlKCk7Ci0jZW5kaWYKLX0KLQotaW5saW5lIEZyYWN0aW9u
YWxMYXlvdXRVbml0IG9wZXJhdG9yJShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50
IGIpCi17Ci0gICAgcmV0dXJuIGEgJSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKLX0KLQotaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yJShpbnQgYSwgY29uc3QgRnJhY3Rpb25h
bExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpICUg
YjsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvcis9KEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSNpZiBF
TkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQotICAgIGEuc2V0UmF3VmFsdWUoc2F0
dXJhdGVkQWRkaXRpb24oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKLSNlbHNlCi0gICAg
YSA9IGEgKyBiOwotI2VuZGlmCi0gICAgcmV0dXJuIGE7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgb3BlcmF0b3IrPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCi17
Ci0gICAgYSA9IGEgKyBiOwotICAgIHJldHVybiBhOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExh
eW91dFVuaXQmIG9wZXJhdG9yKz0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCi17
Ci0gICAgYSA9IGEgKyBiOwotICAgIHJldHVybiBhOwotfQotCi1pbmxpbmUgZmxvYXQmIG9wZXJh
dG9yKz0oZmxvYXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIGEg
PSBhICsgYjsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBvcGVyYXRvci09KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKLXsKLSAgICBhID0g
YSAtIGI7Ci0gICAgcmV0dXJuIGE7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
b3BlcmF0b3ItPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGIpCi17Ci0jaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKLSAg
ICBhLnNldFJhd1ZhbHVlKHNhdHVyYXRlZFN1YnRyYWN0aW9uKGEucmF3VmFsdWUoKSwgYi5yYXdW
YWx1ZSgpKSk7Ci0jZWxzZQotICAgIGEgPSBhIC0gYjsKLSNlbmRpZgotICAgIHJldHVybiBhOwot
fQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yLT0oRnJhY3Rpb25hbExh
eW91dFVuaXQmIGEsIGZsb2F0IGIpCi17Ci0gICAgYSA9IGEgLSBiOwotICAgIHJldHVybiBhOwot
fQotCi1pbmxpbmUgZmxvYXQmIG9wZXJhdG9yLT0oZmxvYXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRVbml0JiBiKQotewotICAgIGEgPSBhIC0gYjsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvcio9KEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICBhID0gYSAqIGI7Ci0g
ICAgcmV0dXJuIGE7Ci19Ci0vLyBvcGVyYXRvcio9KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBp
bnQgYikgaXMgc3VwcG9ydGVkIGJ5IHRoZSBvcGVyYXRvciBhYm92ZSBwbHVzIEZyYWN0aW9uYWxM
YXlvdXRVbml0KGludCkuCi0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3Iq
PShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKLXsKLSAgICBhID0gYSAqIGI7Ci0g
ICAgcmV0dXJuIGE7Ci19Ci0KLWlubGluZSBmbG9hdCYgb3BlcmF0b3IqPShmbG9hdCYgYSwgY29u
c3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgYSA9IGEgKiBiOwotICAgIHJldHVy
biBhOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yLz0oRnJhY3Rp
b25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAg
IGEgPSBhIC8gYjsKLSAgICByZXR1cm4gYTsKLX0KLS8vIG9wZXJhdG9yLz0oRnJhY3Rpb25hbExh
eW91dFVuaXQmIGEsIGludCBiKSBpcyBzdXBwb3J0ZWQgYnkgdGhlIG9wZXJhdG9yIGFib3ZlIHBs
dXMgRnJhY3Rpb25hbExheW91dFVuaXQoaW50KS4KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBvcGVyYXRvci89KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQotewotICAg
IGEgPSBhIC8gYjsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5lIGZsb2F0JiBvcGVyYXRvci89
KGZsb2F0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICBhID0gYSAv
IGI7Ci0gICAgcmV0dXJuIGE7Ci19Ci0KLWlubGluZSBpbnQgc25hcFNpemVUb1BpeGVsKEZyYWN0
aW9uYWxMYXlvdXRVbml0IHNpemUsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGxvY2F0aW9uKSAKLXsK
LSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBmcmFjdGlvbiA9IGxvY2F0aW9uLmZyYWN0aW9uKCk7
Ci0gICAgcmV0dXJuIChmcmFjdGlvbiArIHNpemUpLnJvdW5kKCkgLSBmcmFjdGlvbi5yb3VuZCgp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBGcmFjdGlvbmFsTGF5
b3V0VW5pdF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYXlvdXRVbml0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGF5b3V0VW5pdC5oCShyZXZpc2lv
biAxMzM1MTcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZyYWN0aW9uYWxMYXlvdXRV
bml0Lmg6MTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGF5b3V0VW5pdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODI1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEy
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRnJhY3Rpb25hbExheW91dFVu
aXRfaAorI2RlZmluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdF9oCisKKyNpbmNsdWRlIDxsaW1pdHMu
aD4KKyNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN0ZGxp
Yi5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1NhdHVyYXRl
ZEFyaXRobWV0aWMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWZkZWYgTkRFQlVHCisK
KyNkZWZpbmUgUkVQT1JUX09WRVJGTE9XKGRvZXNPdmVyZmxvdykgKCh2b2lkKTApCisKKyNlbHNl
CisKKyNkZWZpbmUgUkVQT1JUX09WRVJGTE9XKGRvZXNPdmVyZmxvdykgZG8gXAorICAgIGlmICgh
KGRvZXNPdmVyZmxvdykpIHsgXAorICAgICAgICBXVEZSZXBvcnRFcnJvcihfX0ZJTEVfXywgX19M
SU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICIhKCVzKSIsICNkb2VzT3ZlcmZsb3cpOyBcCisg
ICAgfSBcCit3aGlsZSAoMCkKKworI2VuZGlmCisKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VU
KQorc3RhdGljIGNvbnN0IGludCBrRml4ZWRQb2ludERlbm9taW5hdG9yID0gNjQ7CisjZWxzZQor
c3RhdGljIGNvbnN0IGludCBrRml4ZWRQb2ludERlbm9taW5hdG9yID0gMTsKKyNlbmRpZgorY29u
c3QgaW50IGludE1heEZvckxheW91dFVuaXQgPSBJTlRfTUFYIC8ga0ZpeGVkUG9pbnREZW5vbWlu
YXRvcjsKK2NvbnN0IGludCBpbnRNaW5Gb3JMYXlvdXRVbml0ID0gSU5UX01JTiAvIGtGaXhlZFBv
aW50RGVub21pbmF0b3I7CisKK2NsYXNzIEZyYWN0aW9uYWxMYXlvdXRVbml0IHsKK3B1YmxpYzoK
KyAgICAvLyBGSVhNRTogSWRlYWxseSB3ZSB3b3VsZCBoYXZlIHNpemVfdCB2ZXJzaW9ucyBvZiB0
aGUgY29uc3RydWN0b3IgYW5kIG9wZXJhdG9ycy4KKyAgICAvLyBIb3dldmVyIGR1ZSB0byBjb21w
aWxlciBhbmQgcGxhdGZvcm0gZGlmZmVyZW5jZXMgYWRkaW5nIHRob3NlIGFyZSBub24tdHJpdmlh
bC4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgz
ODQ4IGZvciBkZXRhaWxzLgorICAgIAorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KCkgOiBtX3Zh
bHVlKDApIHsgfQorI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisgICAgRnJhY3Rpb25hbExh
eW91dFVuaXQoaW50IHZhbHVlKSB7IHNldFZhbHVlKHZhbHVlKTsgfQorICAgIEZyYWN0aW9uYWxM
YXlvdXRVbml0KHVuc2lnbmVkIHNob3J0IHZhbHVlKSB7IHNldFZhbHVlKHZhbHVlKTsgfQorICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0KHVuc2lnbmVkIGludCB2YWx1ZSkgeyBzZXRWYWx1ZSh2YWx1
ZSk7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdChmbG9hdCB2YWx1ZSkKKyAgICB7CisjaWYg
RU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKKyAgICAgICAgbV92YWx1ZSA9IGNs
YW1wVG88ZmxvYXQ+KHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvciwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KElOVF9NSU4pLCBzdGF0aWNfY2FzdDxmbG9hdD4oSU5UX01BWCkpOworI2Vsc2UKKyAg
ICAgICAgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsKKyAgICAgICAgbV92YWx1
ZSA9IHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKKyNlbmRpZgorICAgIH0KKyAgICBG
cmFjdGlvbmFsTGF5b3V0VW5pdChkb3VibGUgdmFsdWUpCisgICAgeworI2lmIEVOQUJMRShTQVRV
UkFURURfTEFZT1VUX0FSSVRITUVUSUMpCisgICAgICAgIG1fdmFsdWUgPSBjbGFtcFRvPGRvdWJs
ZT4odmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yLCBzdGF0aWNfY2FzdDxkb3VibGU+KElO
VF9NSU4pLCBzdGF0aWNfY2FzdDxkb3VibGU+KElOVF9NQVgpKTsKKyNlbHNlCisgICAgICAgIFJF
UE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7CisgICAgICAgIG1fdmFsdWUgPSB2YWx1
ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3I7CisjZW5kaWYKKyAgICB9CisjZWxzZQorICAgIEZy
YWN0aW9uYWxMYXlvdXRVbml0KGludCB2YWx1ZSkgeyBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5k
cyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFsdWU7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCh1
bnNpZ25lZCBzaG9ydCB2YWx1ZSkgeyBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkp
OyBtX3ZhbHVlID0gdmFsdWU7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCh1bnNpZ25lZCBp
bnQgdmFsdWUpIHsgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsgbV92YWx1ZSA9
IHZhbHVlOyB9CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQoZmxvYXQgdmFsdWUpIHsgUkVQT1JU
X09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsgbV92YWx1ZSA9IHZhbHVlOyB9CisgICAgRnJh
Y3Rpb25hbExheW91dFVuaXQoZG91YmxlIHZhbHVlKSB7IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91
bmRzKHZhbHVlKSk7IG1fdmFsdWUgPSB2YWx1ZTsgfQorI2VuZGlmCisgICAgRnJhY3Rpb25hbExh
eW91dFVuaXQoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIHZhbHVlKSB7IG1fdmFsdWUgPSB2
YWx1ZS5yYXdWYWx1ZSgpOyB9CisKKyAgICBzdGF0aWMgRnJhY3Rpb25hbExheW91dFVuaXQgZnJv
bUZsb2F0Q2VpbChmbG9hdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEZyYWN0aW9uYWxMYXlvdXRV
bml0IHY7CisjaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKKyAgICAgICAg
di5tX3ZhbHVlID0gY2xhbXBUb0ludGVnZXIoY2VpbGYodmFsdWUgKiBrRml4ZWRQb2ludERlbm9t
aW5hdG9yKSk7CisjZWxzZQorICAgICAgICBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1
ZSkpOworICAgICAgICB2Lm1fdmFsdWUgPSBjZWlsZih2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21p
bmF0b3IpOworI2VuZGlmCisgICAgICAgIHJldHVybiB2OworICAgIH0KKworICAgIHN0YXRpYyBG
cmFjdGlvbmFsTGF5b3V0VW5pdCBmcm9tRmxvYXRGbG9vcihmbG9hdCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHY7CisjaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlP
VVRfQVJJVEhNRVRJQykKKyAgICAgICAgdi5tX3ZhbHVlID0gY2xhbXBUb0ludGVnZXIoZmxvb3Jm
KHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvcikpOworI2Vsc2UKKyAgICAgICAgUkVQT1JU
X09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsKKyAgICAgICAgdi5tX3ZhbHVlID0gZmxvb3Jm
KHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvcik7CisjZW5kaWYKKyAgICAgICAgcmV0dXJu
IHY7CisgICAgfQorCisgICAgc3RhdGljIEZyYWN0aW9uYWxMYXlvdXRVbml0IGZyb21GbG9hdFJv
dW5kKGZsb2F0IHZhbHVlKQorICAgIHsKKyNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklU
SE1FVElDKQorICAgICAgICBpZiAodmFsdWUgPj0gMCkKKyAgICAgICAgICAgIHJldHVybiBjbGFt
cCh2YWx1ZSArIGVwc2lsb24oKSAvIDIuMGYpOworICAgICAgICByZXR1cm4gY2xhbXAodmFsdWUg
LSBlcHNpbG9uKCkgLyAyLjBmKTsKKyNlbHNlCisgICAgICAgIGlmICh2YWx1ZSA+PSAwKSB7Cisg
ICAgICAgICAgICBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSArIGVwc2lsb24oKSAv
IDIuMGYpKTsKKyAgICAgICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdCh2YWx1ZSAr
IGVwc2lsb24oKSAvIDIuMGYpOworICAgICAgICB9CisgICAgICAgIFJFUE9SVF9PVkVSRkxPVyhp
c0luQm91bmRzKHZhbHVlIC0gZXBzaWxvbigpIC8gMi4wZikpOworICAgICAgICByZXR1cm4gRnJh
Y3Rpb25hbExheW91dFVuaXQodmFsdWUgLSBlcHNpbG9uKCkgLyAyLjBmKTsKKyNlbmRpZgorICAg
IH0KKworI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisgICAgaW50IHRvSW50KCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7IH0KKyAgICBmbG9hdCB0
b0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdmFsdWUpIC8ga0Zp
eGVkUG9pbnREZW5vbWluYXRvcjsgfQorICAgIGRvdWJsZSB0b0RvdWJsZSgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV92YWx1ZSkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9y
OyB9CisgICAgZmxvYXQgY2VpbFRvRmxvYXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgZmxvYXQg
ZmxvYXRWYWx1ZSA9IHRvRmxvYXQoKTsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PGludD4oZmxv
YXRWYWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3IpID09IG1fdmFsdWUpCisgICAgICAgICAg
ICByZXR1cm4gZmxvYXRWYWx1ZTsKKyAgICAgICAgaWYgKGZsb2F0VmFsdWUgPiAwKQorICAgICAg
ICAgICAgcmV0dXJuIG5leHRhZnRlcmYoZmxvYXRWYWx1ZSwgc3RkOjpudW1lcmljX2xpbWl0czxm
bG9hdD46Om1heCgpKTsKKyAgICAgICAgcmV0dXJuIG5leHRhZnRlcmYoZmxvYXRWYWx1ZSwgc3Rk
OjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1pbigpKTsKKyAgICB9CisjZWxzZQorICAgIGludCB0
b0ludCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBmbG9hdCB0b0Zsb2F0KCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdmFsdWUpOyB9CisgICAgZG91YmxlIHRv
RG91YmxlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3ZhbHVlKTsgfQor
ICAgIGZsb2F0IGNlaWxUb0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gdG9GbG9hdCgpOyB9CisjZW5k
aWYKKyAgICB1bnNpZ25lZCB0b1Vuc2lnbmVkKCkgY29uc3QgeyBSRVBPUlRfT1ZFUkZMT1cobV92
YWx1ZSA+PSAwKTsgcmV0dXJuIHRvSW50KCk7IH0KKworICAgIG9wZXJhdG9yIGludCgpIGNvbnN0
IHsgcmV0dXJuIHRvSW50KCk7IH0KKyAgICBvcGVyYXRvciB1bnNpZ25lZCgpIGNvbnN0IHsgcmV0
dXJuIHRvVW5zaWduZWQoKTsgfQorICAgIG9wZXJhdG9yIGZsb2F0KCkgY29uc3QgeyByZXR1cm4g
dG9GbG9hdCgpOyB9CisgICAgb3BlcmF0b3IgZG91YmxlKCkgY29uc3QgeyByZXR1cm4gdG9Eb3Vi
bGUoKTsgfQorICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisK
KyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvcisrKGludCkKKyAgICB7CisgICAgICAg
IG1fdmFsdWUgKz0ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKKyAgICAgICAgcmV0dXJuICp0aGlz
OworICAgIH0KKworICAgIGlubGluZSBpbnQgcmF3VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlOyB9CisgICAgaW5saW5lIHZvaWQgc2V0UmF3VmFsdWUoaW50IHZhbHVlKSB7IG1fdmFsdWUg
PSB2YWx1ZTsgfQorICAgIHZvaWQgc2V0UmF3VmFsdWUobG9uZyBsb25nIHZhbHVlKQorICAgIHsK
KyAgICAgICAgUkVQT1JUX09WRVJGTE9XKHZhbHVlID4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptaW4oKSAmJiB2YWx1ZSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpOworICAg
ICAgICBtX3ZhbHVlID0gc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSk7CisgICAgfQorCisgICAgRnJh
Y3Rpb25hbExheW91dFVuaXQgYWJzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEZyYWN0aW9uYWxM
YXlvdXRVbml0IHJldHVyblZhbHVlOworICAgICAgICByZXR1cm5WYWx1ZS5zZXRSYXdWYWx1ZSg6
OmFicyhtX3ZhbHVlKSk7CisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisjaWYg
T1MoREFSV0lOKQorICAgIGludCB3dGZfY2VpbCgpIGNvbnN0CisjZWxzZQorICAgIGludCBjZWls
KCkgY29uc3QKKyNlbmRpZgorICAgIHsKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAg
ICAgICBpZiAobV92YWx1ZSA+PSAwKQorICAgICAgICAgICAgcmV0dXJuIChtX3ZhbHVlICsga0Zp
eGVkUG9pbnREZW5vbWluYXRvciAtIDEpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKKyAgICAg
ICAgcmV0dXJuIHRvSW50KCk7CisjZWxzZQorICAgICAgICByZXR1cm4gbV92YWx1ZTsKKyNlbmRp
ZgorICAgIH0KKyAgICBpbnQgcm91bmQoKSBjb25zdAorICAgIHsKKyNpZiBFTkFCTEUoU1VCUElY
RUxfTEFZT1VUKSAmJiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQorICAgICAg
ICBpZiAobV92YWx1ZSA+IDApCisgICAgICAgICAgICByZXR1cm4gc2F0dXJhdGVkQWRkaXRpb24o
cmF3VmFsdWUoKSwga0ZpeGVkUG9pbnREZW5vbWluYXRvciAvIDIpIC8ga0ZpeGVkUG9pbnREZW5v
bWluYXRvcjsKKyAgICAgICAgcmV0dXJuIHNhdHVyYXRlZFN1YnRyYWN0aW9uKHJhd1ZhbHVlKCks
IGtGaXhlZFBvaW50RGVub21pbmF0b3IgLyAyKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Cisj
ZWxpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgICAgICBpZiAobV92YWx1ZSA+IDApCisg
ICAgICAgICAgICByZXR1cm4gKG1fdmFsdWUgKyAoa0ZpeGVkUG9pbnREZW5vbWluYXRvciAvIDIp
KSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7CisgICAgICAgIHJldHVybiAobV92YWx1ZSAtIChr
Rml4ZWRQb2ludERlbm9taW5hdG9yIC8gMikpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKKyNl
bHNlCisgICAgICAgIHJldHVybiBtX3ZhbHVlOworI2VuZGlmCisgICAgfQorCisgICAgaW50IGZs
b29yKCkgY29uc3QKKyAgICB7CisjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKKyAgICAgICAg
aWYgKG1fdmFsdWUgPj0gMCkKKyAgICAgICAgICAgIHJldHVybiB0b0ludCgpOworICAgICAgICBy
ZXR1cm4gKG1fdmFsdWUgLSBrRml4ZWRQb2ludERlbm9taW5hdG9yICsgMSkgLyBrRml4ZWRQb2lu
dERlbm9taW5hdG9yOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fdmFsdWU7CisjZW5kaWYKKyAg
ICB9CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBmcmFjdGlvbigpIGNvbnN0CisgICAgeyAg
IAorICAgICAgICAvLyBBZGQgdGhlIGZyYWN0aW9uIHRvIHRoZSBzaXplIChhcyBvcHBvc2VkIHRv
IHRoZSBmdWxsIGxvY2F0aW9uKSB0byBhdm9pZCBvdmVyZmxvd3MuCisgICAgICAgIC8vIENvbXB1
dGUgZnJhY3Rpb24gdXNpbmcgdGhlIG1vZCBvcGVyYXRvciB0byBwcmVzZXJ2ZSB0aGUgc2lnbiBv
ZiB0aGUgdmFsdWUgYXMgaXQgbWF5IGFmZmVjdCByb3VuZGluZy4KKyAgICAgICAgRnJhY3Rpb25h
bExheW91dFVuaXQgZnJhY3Rpb247CisgICAgICAgIGZyYWN0aW9uLnNldFJhd1ZhbHVlKHJhd1Zh
bHVlKCkgJSBrRml4ZWRQb2ludERlbm9taW5hdG9yKTsKKyAgICAgICAgcmV0dXJuIGZyYWN0aW9u
OworICAgIH0KKworI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisgICAgc3RhdGljIGZsb2F0
IGVwc2lsb24oKSB7IHJldHVybiAxLjBmIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsgfQorI2Vs
c2UKKyAgICBzdGF0aWMgaW50IGVwc2lsb24oKSB7IHJldHVybiAwOyB9CisjZW5kaWYKKyAgICBz
dGF0aWMgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQgbWF4KCkKKyAgICB7CisgICAgICAgIEZy
YWN0aW9uYWxMYXlvdXRVbml0IG07CisgICAgICAgIG0ubV92YWx1ZSA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50Pjo6bWF4KCk7CisgICAgICAgIHJldHVybiBtOworICAgIH0KKyAgICBzdGF0aWMg
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQgbWluKCkKKyAgICB7CisgICAgICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IG07CisgICAgICAgIG0ubV92YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50Pjo6bWluKCk7CisgICAgICAgIHJldHVybiBtOworICAgIH0KKworICAgIC8vIFZlcnNpb25z
IG9mIG1heC9taW4gdGhhdCBhcmUgc2xpZ2h0bHkgc21hbGxlci9sYXJnZXIgdGhhbiBtYXgvbWlu
KCkgdG8gYWxsb3cgZm9yIHJvaW5kaW5nIHdpdGhvdXQgb3ZlcmZsb3dpbmcuCisgICAgc3RhdGlj
IGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0IG5lYXJseU1heCgpCisgICAgeworICAgICAgICBG
cmFjdGlvbmFsTGF5b3V0VW5pdCBtOworICAgICAgICBtLm1fdmFsdWUgPSBzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpIC0ga0ZpeGVkUG9pbnREZW5vbWluYXRvciAvIDI7CisgICAgICAg
IHJldHVybiBtOworICAgIH0KKyAgICBzdGF0aWMgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQg
bmVhcmx5TWluKCkKKyAgICB7CisgICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG07CisgICAg
ICAgIG0ubV92YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkgKyBrRml4ZWRQ
b2ludERlbm9taW5hdG9yIC8gMjsKKyAgICAgICAgcmV0dXJuIG07CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBGcmFjdGlvbmFsTGF5b3V0VW5pdCBjbGFtcChkb3VibGUgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gY2xhbXBUbzxGcmFjdGlvbmFsTGF5b3V0VW5pdD4odmFsdWUsIEZyYWN0
aW9uYWxMYXlvdXRVbml0OjptaW4oKSwgRnJhY3Rpb25hbExheW91dFVuaXQ6Om1heCgpKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGJvb2wgaXNJbkJvdW5kcyhpbnQgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gOjphYnModmFsdWUpIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50Pjo6bWF4KCkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOworICAgIH0KKyAgICBzdGF0aWMg
Ym9vbCBpc0luQm91bmRzKHVuc2lnbmVkIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZh
bHVlIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1h
eCgpKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7CisgICAgfQorICAgIHN0YXRpYyBib29sIGlz
SW5Cb3VuZHMoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDo6ZmFicyh2YWx1
ZSkgPD0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSAvIGtGaXhlZFBvaW50RGVub21p
bmF0b3I7CisgICAgfQorICAgIAorICAgIGlubGluZSB2b2lkIHNldFZhbHVlKGludCB2YWx1ZSkK
KyAgICB7CisjaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKKyAgICAgICAg
aWYgKHZhbHVlID4gaW50TWF4Rm9yTGF5b3V0VW5pdCkKKyAgICAgICAgICAgIG1fdmFsdWUgPSBz
dGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOworICAgICAgICBlbHNlIGlmICh2YWx1ZSA8
IGludE1pbkZvckxheW91dFVuaXQpCisgICAgICAgICAgICBtX3ZhbHVlID0gc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptaW4oKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV92YWx1ZSA9
IHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKKyNlbHNlCisgICAgICAgIFJFUE9SVF9P
VkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7CisgICAgICAgIG1fdmFsdWUgPSB2YWx1ZSAqIGtG
aXhlZFBvaW50RGVub21pbmF0b3I7CisjZW5kaWYKKyAgICB9CisgICAgaW5saW5lIHZvaWQgc2V0
VmFsdWUodW5zaWduZWQgdmFsdWUpCisgICAgeworI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VU
X0FSSVRITUVUSUMpCisgICAgICAgIGlmICh2YWx1ZSA+PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
aW50TWF4Rm9yTGF5b3V0VW5pdCkpCisgICAgICAgICAgICBtX3ZhbHVlID0gc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptYXgoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV92YWx1ZSA9
IHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKKyNlbHNlCisgICAgICAgIFJFUE9SVF9P
VkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7CisgICAgICAgIG1fdmFsdWUgPSB2YWx1ZSAqIGtG
aXhlZFBvaW50RGVub21pbmF0b3I7CisjZW5kaWYKKyAgICB9CisKKyAgICBpbnQgbV92YWx1ZTsK
K307CisKK2lubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBhLnJhd1Zh
bHVlKCkgPD0gYi5yYXdWYWx1ZSgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQoreworICAgIHJldHVybiBhLnRvRmxv
YXQoKSA8PSBiOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRVbml0JiBhLCBpbnQgYikKK3sKKyAgICByZXR1cm4gYSA8PSBGcmFjdGlvbmFsTGF5b3V0
VW5pdChiKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBmbG9hdCBhLCBjb25z
dCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4gYSA8PSBiLnRvRmxvYXQo
KTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rp
b25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEp
IDw9IGI7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBh
LnJhd1ZhbHVlKCkgPj0gYi5yYXdWYWx1ZSgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj49
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK3sKKyAgICByZXR1cm4gYSA+
PSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I+PShj
b25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1
cm4gYSA+PSBiLnRvRmxvYXQoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK3sKKyAgICByZXR1cm4gYS50b0Zsb2F0
KCkgPj0gYjsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBpbnQgYSwgY29uc3Qg
RnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRV
bml0KGEpID49IGI7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0
dXJuIGEucmF3VmFsdWUoKSA8IGIucmF3VmFsdWUoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0
b3I8KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK3sKKyAgICByZXR1cm4g
YSA8IEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcjwo
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEu
dG9GbG9hdCgpIDwgYjsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBhLCBkb3VibGUgYikKK3sKKyAgICByZXR1cm4gYS50b0RvdWJsZSgpIDwg
YjsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkg
PCBiOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgZmxvYXQgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEgPCBiLnRvRmxvYXQoKTsKK30K
KworaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBj
b25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4gYS5yYXdWYWx1ZSgp
ID4gYi5yYXdWYWx1ZSgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgRnJhY3Rp
b25hbExheW91dFVuaXQmIGEsIGRvdWJsZSBiKQoreworICAgIHJldHVybiBhLnRvRG91YmxlKCkg
PiBiOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgRnJhY3Rpb25hbExheW91dFVu
aXQmIGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEudG9GbG9hdCgpID4gYjsKK30KKworaW5s
aW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikK
K3sKKyAgICByZXR1cm4gYSA+IEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworfQorCitpbmxpbmUg
Ym9vbCBvcGVyYXRvcj4oY29uc3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBi
KQoreworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSA+IGI7Cit9CisKK2lubGlu
ZSBib29sIG9wZXJhdG9yPihjb25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYikKK3sKKyAgICByZXR1cm4gYSA+IGIudG9GbG9hdCgpOworfQorCitpbmxpbmUgYm9vbCBv
cGVyYXRvcj4oY29uc3QgZG91YmxlIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQor
eworICAgIHJldHVybiBhID4gYi50b0RvdWJsZSgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYikKK3sKKyAgICByZXR1cm4gYS5yYXdWYWx1ZSgpICE9IGIucmF3VmFsdWUoKTsKK30K
KworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwg
ZmxvYXQgYikKK3sKKyAgICByZXR1cm4gYSAhPSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKK30K
KworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpICE9IGI7
Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGEsIGludCBiKQoreworICAgIHJldHVybiBhICE9IEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOwor
fQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4gYS5yYXdWYWx1
ZSgpID09IGIucmF3VmFsdWUoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCit7CisgICAgcmV0dXJuIGEgPT0gRnJhY3Rp
b25hbExheW91dFVuaXQoYik7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgaW50
IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBGcmFjdGlv
bmFsTGF5b3V0VW5pdChhKSA9PSBiOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQoreworICAgIHJldHVybiBhLnRvRmxv
YXQoKSA9PSBiOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGZsb2F0IGEsIGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBhID09IGIudG9GbG9h
dCgpOworfQorCisvLyBGb3IgbXVsdGlwbGljYXRpb24gdGhhdCdzIHByb25lIHRvIG92ZXJmbG93
LCB0aGlzIGJvdW5kcyBpdCB0byBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWF4KCkgYW5kIDo6bWlu
KCkKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBib3VuZGVkTXVsdGlwbHkoY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQorewor
I2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0
dXJuVmFsOworICAgIGxvbmcgbG9uZyByYXdWYWwgPSBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGEu
cmF3VmFsdWUoKSkgKiBiLnJhd1ZhbHVlKCkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOworICAg
IGlmIChyYXdWYWwgPiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQorICAgICAgICBy
ZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQ6Om1heCgpOworICAgIGlmIChyYXdWYWwgPCBzdGQ6
Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpKQorICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExh
eW91dFVuaXQ6Om1pbigpOworICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShyYXdWYWwpOworICAg
IHJldHVybiByZXR1cm5WYWw7CisjZWxzZQorICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgKiBiLnJh
d1ZhbHVlKCk7CisjZW5kaWYKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJh
dG9yKihjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGIpCit7CisjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkgJiYgRU5BQkxFKFNBVFVS
QVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKKyAgICByZXR1cm4gYm91bmRlZE11bHRpcGx5KGEsIGIp
OworI2VsaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dCByZXR1cm5WYWw7CisgICAgbG9uZyBsb25nIHJhd1ZhbCA9IHN0YXRpY19jYXN0PGxvbmcgbG9u
Zz4oYS5yYXdWYWx1ZSgpKSAqIGIucmF3VmFsdWUoKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7
CisgICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKHJhd1ZhbCk7CisgICAgcmV0dXJuIHJldHVyblZh
bDsKKyNlbHNlCisgICAgcmV0dXJuIGEucmF3VmFsdWUoKSAqIGIucmF3VmFsdWUoKTsKKyNlbmRp
ZgorfSAgICAKKworaW5saW5lIGRvdWJsZSBvcGVyYXRvciooY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGEsIGRvdWJsZSBiKQoreworICAgIHJldHVybiBhLnRvRG91YmxlKCkgKiBiOworfQor
CitpbmxpbmUgZmxvYXQgb3BlcmF0b3IqKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBm
bG9hdCBiKQoreworICAgIHJldHVybiBhLnRvRmxvYXQoKSAqIGI7Cit9CisKK2lubGluZSBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvciooY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEs
IGludCBiKQoreworICAgIHJldHVybiBhICogRnJhY3Rpb25hbExheW91dFVuaXQoYik7Cit9CisK
K2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvciooY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGEsIHVuc2lnbmVkIGIpCit7CisgICAgcmV0dXJuIGEgKiBGcmFjdGlvbmFsTGF5
b3V0VW5pdChiKTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKih1
bnNpZ25lZCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFVuaXQoYSkgKiBiOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91
dFVuaXQgb3BlcmF0b3IqKGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
YikKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgKiBiOworfQorCitpbmxp
bmUgZmxvYXQgb3BlcmF0b3IqKGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBiKQoreworICAgIHJldHVybiBhICogYi50b0Zsb2F0KCk7Cit9CisKK2lubGluZSBkb3Vi
bGUgb3BlcmF0b3IqKGNvbnN0IGRvdWJsZSBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
YikKK3sKKyAgICByZXR1cm4gYSAqIGIudG9Eb3VibGUoKTsKK30KKworaW5saW5lIEZyYWN0aW9u
YWxMYXlvdXRVbml0IG9wZXJhdG9yLyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29u
c3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9V
VCkKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7CisgICAgbG9uZyBsb25nIHJh
d1ZhbCA9IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oa0ZpeGVkUG9pbnREZW5vbWluYXRvcikgKiBh
LnJhd1ZhbHVlKCkgLyBiLnJhd1ZhbHVlKCk7CisgICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKHJh
d1ZhbCk7CisgICAgcmV0dXJuIHJldHVyblZhbDsKKyNlbHNlCisgICAgcmV0dXJuIGEucmF3VmFs
dWUoKSAvIGIucmF3VmFsdWUoKTsKKyNlbmRpZgorfSAgICAKKworaW5saW5lIGZsb2F0IG9wZXJh
dG9yLyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK3sKKyAgICByZXR1
cm4gYS50b0Zsb2F0KCkgLyBiOworfQorCitpbmxpbmUgZG91YmxlIG9wZXJhdG9yLyhjb25zdCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZG91YmxlIGIpCit7CisgICAgcmV0dXJuIGEudG9Eb3Vi
bGUoKSAvIGI7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci8oY29u
c3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQoreworICAgIHJldHVybiBhIC8gRnJh
Y3Rpb25hbExheW91dFVuaXQoYik7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBv
cGVyYXRvci8oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIHVuc2lnbmVkIGludCBiKQor
eworICAgIHJldHVybiBhIC8gRnJhY3Rpb25hbExheW91dFVuaXQoYik7Cit9CisKK2lubGluZSBm
bG9hdCBvcGVyYXRvci8oY29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGIpCit7CisgICAgcmV0dXJuIGEgLyBiLnRvRmxvYXQoKTsKK30KKworaW5saW5lIGRvdWJsZSBv
cGVyYXRvci8oY29uc3QgZG91YmxlIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQor
eworICAgIHJldHVybiBhIC8gYi50b0RvdWJsZSgpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExh
eW91dFVuaXQgb3BlcmF0b3IvKGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYikKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgLyBiOworfQorCitp
bmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IvKHVuc2lnbmVkIGludCBhLCBjb25z
dCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91
dFVuaXQoYSkgLyBiOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3Ir
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYikKK3sKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7CisjaWYgRU5BQkxF
KFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKKyAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUo
c2F0dXJhdGVkQWRkaXRpb24oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKKyNlbHNlCisg
ICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKGEucmF3VmFsdWUoKSArIGIucmF3VmFsdWUoKSk7Cisj
ZW5kaWYKKyAgICByZXR1cm4gcmV0dXJuVmFsOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91
dFVuaXQgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK3sK
KyAgICByZXR1cm4gYSArIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworfQorCitpbmxpbmUgZmxv
YXQgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQorewor
ICAgIHJldHVybiBhLnRvRmxvYXQoKSArIGI7Cit9CisKK2lubGluZSBkb3VibGUgb3BlcmF0b3Ir
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBkb3VibGUgYikKK3sKKyAgICByZXR1cm4g
YS50b0RvdWJsZSgpICsgYjsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJh
dG9yKyhjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAg
cmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpICsgYjsKK30KKworaW5saW5lIGZsb2F0IG9w
ZXJhdG9yKyhjb25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sK
KyAgICByZXR1cm4gYSArIGIudG9GbG9hdCgpOworfQorCitpbmxpbmUgZG91YmxlIG9wZXJhdG9y
Kyhjb25zdCBkb3VibGUgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAg
cmV0dXJuIGEgKyBiLnRvRG91YmxlKCk7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBiKQoreworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJldHVyblZhbDsK
KyNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQorICAgIHJldHVyblZhbC5z
ZXRSYXdWYWx1ZShzYXR1cmF0ZWRTdWJ0cmFjdGlvbihhLnJhd1ZhbHVlKCksIGIucmF3VmFsdWUo
KSkpOworI2Vsc2UKKyAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUoYS5yYXdWYWx1ZSgpIC0gYi5y
YXdWYWx1ZSgpKTsKKyNlbmRpZgorICAgIHJldHVybiByZXR1cm5WYWw7Cit9CisKK2lubGluZSBG
cmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGEsIGludCBiKQoreworICAgIHJldHVybiBhIC0gRnJhY3Rpb25hbExheW91dFVuaXQoYik7Cit9
CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25h
bExheW91dFVuaXQmIGEsIHVuc2lnbmVkIGIpCit7CisgICAgcmV0dXJuIGEgLSBGcmFjdGlvbmFs
TGF5b3V0VW5pdChiKTsKK30KKworaW5saW5lIGZsb2F0IG9wZXJhdG9yLShjb25zdCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK3sKKyAgICByZXR1cm4gYS50b0Zsb2F0KCkgLSBi
OworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3ItKGNvbnN0IGludCBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25h
bExheW91dFVuaXQoYSkgLSBiOworfQorCitpbmxpbmUgZmxvYXQgb3BlcmF0b3ItKGNvbnN0IGZs
b2F0IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBhIC0g
Yi50b0Zsb2F0KCk7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci0o
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEpCit7CisgICAgRnJhY3Rpb25hbExheW91dFVu
aXQgcmV0dXJuVmFsOworICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZSgtYS5yYXdWYWx1ZSgpKTsK
KyAgICByZXR1cm4gcmV0dXJuVmFsOworfQorCisvLyBGb3IgcmV0dXJuaW5nIHRoZSByZW1haW5k
ZXIgYWZ0ZXIgYSBkaXZpc2lvbiB3aXRoIGludGVnZXIgcmVzdWx0cy4KK2lubGluZSBGcmFjdGlv
bmFsTGF5b3V0VW5pdCBpbnRNb2QoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQp
CisgICAgLy8gVGhpcyBjYWxjdWxhdGVzIHRoZSBtb2R1bG8gc28gdGhhdDogYSA9IHN0YXRpY19j
YXN0PGludD4oYSAvIGIpICogYiArIGludE1vZChhLCBiKS4KKyAgICBGcmFjdGlvbmFsTGF5b3V0
VW5pdCByZXR1cm5WYWw7CisgICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKGEucmF3VmFsdWUoKSAl
IGIucmF3VmFsdWUoKSk7CisgICAgcmV0dXJuIHJldHVyblZhbDsKKyNlbHNlCisgICAgcmV0dXJu
IGEucmF3VmFsdWUoKSAlIGIucmF3VmFsdWUoKTsKKyNlbmRpZgorfQorCitpbmxpbmUgRnJhY3Rp
b25hbExheW91dFVuaXQgb3BlcmF0b3IlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBj
b25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZ
T1VUKQorICAgIC8vIFRoaXMgY2FsY3VsYXRlcyB0aGUgbW9kdWxvIHNvIHRoYXQ6IGEgPSAoYSAv
IGIpICogYiArIGEgJSBiLgorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJldHVyblZhbDsKKyAg
ICBsb25nIGxvbmcgcmF3VmFsID0gKHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oa0ZpeGVkUG9pbnRE
ZW5vbWluYXRvcikgKiBhLnJhd1ZhbHVlKCkpICUgYi5yYXdWYWx1ZSgpOworICAgIHJldHVyblZh
bC5zZXRSYXdWYWx1ZShyYXdWYWwgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yKTsKKyAgICByZXR1
cm4gcmV0dXJuVmFsOworI2Vsc2UKKyAgICByZXR1cm4gYS5yYXdWYWx1ZSgpICUgYi5yYXdWYWx1
ZSgpOworI2VuZGlmCit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvciUo
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQoreworICAgIHJldHVybiBhICUg
RnJhY3Rpb25hbExheW91dFVuaXQoYik7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBvcGVyYXRvciUoaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAg
IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSAlIGI7Cit9CisKK2lubGluZSBGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgb3BlcmF0b3IrPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3Qg
RnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisjaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRf
QVJJVEhNRVRJQykKKyAgICBhLnNldFJhd1ZhbHVlKHNhdHVyYXRlZEFkZGl0aW9uKGEucmF3VmFs
dWUoKSwgYi5yYXdWYWx1ZSgpKSk7CisjZWxzZQorICAgIGEgPSBhICsgYjsKKyNlbmRpZgorICAg
IHJldHVybiBhOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yKz0o
RnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQoreworICAgIGEgPSBhICsgYjsKKyAgICBy
ZXR1cm4gYTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvcis9KEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQoreworICAgIGEgPSBhICsgYjsKKyAgICBy
ZXR1cm4gYTsKK30KKworaW5saW5lIGZsb2F0JiBvcGVyYXRvcis9KGZsb2F0JiBhLCBjb25zdCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICBhID0gYSArIGI7CisgICAgcmV0dXJuIGE7
Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3ItPShGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYSwgaW50IGIpCit7CisgICAgYSA9IGEgLSBiOworICAgIHJldHVybiBhOwor
fQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yLT0oRnJhY3Rpb25hbExh
eW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworI2lmIEVOQUJM
RShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCisgICAgYS5zZXRSYXdWYWx1ZShzYXR1cmF0
ZWRTdWJ0cmFjdGlvbihhLnJhd1ZhbHVlKCksIGIucmF3VmFsdWUoKSkpOworI2Vsc2UKKyAgICBh
ID0gYSAtIGI7CisjZW5kaWYKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxM
YXlvdXRVbml0JiBvcGVyYXRvci09KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQor
eworICAgIGEgPSBhIC0gYjsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIGZsb2F0JiBvcGVy
YXRvci09KGZsb2F0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICBh
ID0gYSAtIGI7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgb3BlcmF0b3IqPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGIpCit7CisgICAgYSA9IGEgKiBiOworICAgIHJldHVybiBhOworfQorLy8gb3Bl
cmF0b3IqPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpIGlzIHN1cHBvcnRlZCBieSB0
aGUgb3BlcmF0b3IgYWJvdmUgcGx1cyBGcmFjdGlvbmFsTGF5b3V0VW5pdChpbnQpLgorCitpbmxp
bmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yKj0oRnJhY3Rpb25hbExheW91dFVuaXQm
IGEsIGZsb2F0IGIpCit7CisgICAgYSA9IGEgKiBiOworICAgIHJldHVybiBhOworfQorCitpbmxp
bmUgZmxvYXQmIG9wZXJhdG9yKj0oZmxvYXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBiKQoreworICAgIGEgPSBhICogYjsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvci89KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25z
dCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICBhID0gYSAvIGI7CisgICAgcmV0dXJu
IGE7Cit9CisvLyBvcGVyYXRvci89KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikgaXMg
c3VwcG9ydGVkIGJ5IHRoZSBvcGVyYXRvciBhYm92ZSBwbHVzIEZyYWN0aW9uYWxMYXlvdXRVbml0
KGludCkuCisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3IvPShGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK3sKKyAgICBhID0gYSAvIGI7CisgICAgcmV0dXJu
IGE7Cit9CisKK2lubGluZSBmbG9hdCYgb3BlcmF0b3IvPShmbG9hdCYgYSwgY29uc3QgRnJhY3Rp
b25hbExheW91dFVuaXQmIGIpCit7CisgICAgYSA9IGEgLyBiOworICAgIHJldHVybiBhOworfQor
CitpbmxpbmUgaW50IHNuYXBTaXplVG9QaXhlbChGcmFjdGlvbmFsTGF5b3V0VW5pdCBzaXplLCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCBsb2NhdGlvbikgCit7CisgICAgRnJhY3Rpb25hbExheW91dFVu
aXQgZnJhY3Rpb24gPSBsb2NhdGlvbi5mcmFjdGlvbigpOworICAgIHJldHVybiAoZnJhY3Rpb24g
KyBzaXplKS5yb3VuZCgpIC0gZnJhY3Rpb24ucm91bmQoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRnJhY3Rpb25hbExheW91dFVuaXRfaApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vTGF5b3V0VW5pdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0xheW91dFVuaXQuaAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vTGF5b3V0VW5pdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw4
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgRnJhY3Rpb25hbExheW91dFVuaXRf
aAotI2RlZmluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdF9oCisjaWZuZGVmIExheW91dFVuaXRfaAor
I2RlZmluZSBMYXlvdXRVbml0X2gKIAogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPGxp
bWl0cz4KQEAgLTYyLDE4ICs2MiwxOCBAQCBzdGF0aWMgY29uc3QgaW50IGtGaXhlZFBvaW50RGVu
b21pbmF0b3IKIGNvbnN0IGludCBpbnRNYXhGb3JMYXlvdXRVbml0ID0gSU5UX01BWCAvIGtGaXhl
ZFBvaW50RGVub21pbmF0b3I7CiBjb25zdCBpbnQgaW50TWluRm9yTGF5b3V0VW5pdCA9IElOVF9N
SU4gLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOwogCi1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0VW5p
dCB7CitjbGFzcyBMYXlvdXRVbml0IHsKIHB1YmxpYzoKICAgICAvLyBGSVhNRTogSWRlYWxseSB3
ZSB3b3VsZCBoYXZlIHNpemVfdCB2ZXJzaW9ucyBvZiB0aGUgY29uc3RydWN0b3IgYW5kIG9wZXJh
dG9ycy4KICAgICAvLyBIb3dldmVyIGR1ZSB0byBjb21waWxlciBhbmQgcGxhdGZvcm0gZGlmZmVy
ZW5jZXMgYWRkaW5nIHRob3NlIGFyZSBub24tdHJpdmlhbC4KICAgICAvLyBTZWUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgzODQ4IGZvciBkZXRhaWxzLgogICAgIAot
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KCkgOiBtX3ZhbHVlKDApIHsgfQorICAgIExheW91dFVu
aXQoKSA6IG1fdmFsdWUoMCkgeyB9CiAjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICBG
cmFjdGlvbmFsTGF5b3V0VW5pdChpbnQgdmFsdWUpIHsgc2V0VmFsdWUodmFsdWUpOyB9Ci0gICAg
RnJhY3Rpb25hbExheW91dFVuaXQodW5zaWduZWQgc2hvcnQgdmFsdWUpIHsgc2V0VmFsdWUodmFs
dWUpOyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQodW5zaWduZWQgaW50IHZhbHVlKSB7IHNl
dFZhbHVlKHZhbHVlKTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KGZsb2F0IHZhbHVlKQor
ICAgIExheW91dFVuaXQoaW50IHZhbHVlKSB7IHNldFZhbHVlKHZhbHVlKTsgfQorICAgIExheW91
dFVuaXQodW5zaWduZWQgc2hvcnQgdmFsdWUpIHsgc2V0VmFsdWUodmFsdWUpOyB9CisgICAgTGF5
b3V0VW5pdCh1bnNpZ25lZCB2YWx1ZSkgeyBzZXRWYWx1ZSh2YWx1ZSk7IH0KKyAgICBMYXlvdXRV
bml0KGZsb2F0IHZhbHVlKQogICAgIHsKICNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklU
SE1FVElDKQogICAgICAgICBtX3ZhbHVlID0gY2xhbXBUbzxmbG9hdD4odmFsdWUgKiBrRml4ZWRQ
b2ludERlbm9taW5hdG9yLCBzdGF0aWNfY2FzdDxmbG9hdD4oSU5UX01JTiksIHN0YXRpY19jYXN0
PGZsb2F0PihJTlRfTUFYKSk7CkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgbV92
YWx1ZSA9IHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKICNlbmRpZgogICAgIH0KLSAg
ICBGcmFjdGlvbmFsTGF5b3V0VW5pdChkb3VibGUgdmFsdWUpCisgICAgTGF5b3V0VW5pdChkb3Vi
bGUgdmFsdWUpCiAgICAgewogI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMp
CiAgICAgICAgIG1fdmFsdWUgPSBjbGFtcFRvPGRvdWJsZT4odmFsdWUgKiBrRml4ZWRQb2ludERl
bm9taW5hdG9yLCBzdGF0aWNfY2FzdDxkb3VibGU+KElOVF9NSU4pLCBzdGF0aWNfY2FzdDxkb3Vi
bGU+KElOVF9NQVgpKTsKQEAgLTkyLDE3ICs5MiwxNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9
CiAjZWxzZQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KGludCB2YWx1ZSkgeyBSRVBPUlRfT1ZF
UkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFsdWU7IH0KLSAgICBGcmFjdGlv
bmFsTGF5b3V0VW5pdCh1bnNpZ25lZCBzaG9ydCB2YWx1ZSkgeyBSRVBPUlRfT1ZFUkZMT1coaXNJ
bkJvdW5kcyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFsdWU7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0
VW5pdCh1bnNpZ25lZCBpbnQgdmFsdWUpIHsgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFs
dWUpKTsgbV92YWx1ZSA9IHZhbHVlOyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQoZmxvYXQg
dmFsdWUpIHsgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsgbV92YWx1ZSA9IHZh
bHVlOyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQoZG91YmxlIHZhbHVlKSB7IFJFUE9SVF9P
VkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7IG1fdmFsdWUgPSB2YWx1ZTsgfQorICAgIExheW91
dFVuaXQoaW50IHZhbHVlKSB7IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7IG1f
dmFsdWUgPSB2YWx1ZTsgfQorICAgIExheW91dFVuaXQodW5zaWduZWQgc2hvcnQgdmFsdWUpIHsg
UkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsgbV92YWx1ZSA9IHZhbHVlOyB9Cisg
ICAgTGF5b3V0VW5pdCh1bnNpZ25lZCB2YWx1ZSkgeyBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5k
cyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFsdWU7IH0KKyAgICBMYXlvdXRVbml0KGZsb2F0IHZhbHVl
KSB7IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7IG1fdmFsdWUgPSB2YWx1ZTsg
fQorICAgIExheW91dFVuaXQoZG91YmxlIHZhbHVlKSB7IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91
bmRzKHZhbHVlKSk7IG1fdmFsdWUgPSB2YWx1ZTsgfQogI2VuZGlmCi0gICAgRnJhY3Rpb25hbExh
eW91dFVuaXQoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIHZhbHVlKSB7IG1fdmFsdWUgPSB2
YWx1ZS5yYXdWYWx1ZSgpOyB9CisgICAgTGF5b3V0VW5pdChjb25zdCBMYXlvdXRVbml0JiB2YWx1
ZSkgeyBtX3ZhbHVlID0gdmFsdWUucmF3VmFsdWUoKTsgfQogCi0gICAgc3RhdGljIEZyYWN0aW9u
YWxMYXlvdXRVbml0IGZyb21GbG9hdENlaWwoZmxvYXQgdmFsdWUpCisgICAgc3RhdGljIExheW91
dFVuaXQgZnJvbUZsb2F0Q2VpbChmbG9hdCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IHY7CisgICAgICAgIExheW91dFVuaXQgdjsKICNpZiBFTkFCTEUoU0FUVVJB
VEVEX0xBWU9VVF9BUklUSE1FVElDKQogICAgICAgICB2Lm1fdmFsdWUgPSBjbGFtcFRvSW50ZWdl
cihjZWlsZih2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3IpKTsKICNlbHNlCkBAIC0xMTIs
OSArMTEyLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdjsKICAgICB9CiAKLSAgICBzdGF0
aWMgRnJhY3Rpb25hbExheW91dFVuaXQgZnJvbUZsb2F0Rmxvb3IoZmxvYXQgdmFsdWUpCisgICAg
c3RhdGljIExheW91dFVuaXQgZnJvbUZsb2F0Rmxvb3IoZmxvYXQgdmFsdWUpCiAgICAgewotICAg
ICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB2OworICAgICAgICBMYXlvdXRVbml0IHY7CiAjaWYg
RU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKICAgICAgICAgdi5tX3ZhbHVlID0g
Y2xhbXBUb0ludGVnZXIoZmxvb3JmKHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvcikpOwog
I2Vsc2UKQEAgLTEyNCw3ICsxMjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB2OwogICAg
IH0KIAotICAgIHN0YXRpYyBGcmFjdGlvbmFsTGF5b3V0VW5pdCBmcm9tRmxvYXRSb3VuZChmbG9h
dCB2YWx1ZSkKKyAgICBzdGF0aWMgTGF5b3V0VW5pdCBmcm9tRmxvYXRSb3VuZChmbG9hdCB2YWx1
ZSkKICAgICB7CiAjaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKICAgICAg
ICAgaWYgKHZhbHVlID49IDApCkBAIC0xMzMsMTAgKzEzMywxMCBAQCBwdWJsaWM6CiAjZWxzZQog
ICAgICAgICBpZiAodmFsdWUgPj0gMCkgewogICAgICAgICAgICAgUkVQT1JUX09WRVJGTE9XKGlz
SW5Cb3VuZHModmFsdWUgKyBlcHNpbG9uKCkgLyAyLjBmKSk7Ci0gICAgICAgICAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFVuaXQodmFsdWUgKyBlcHNpbG9uKCkgLyAyLjBmKTsKKyAgICAgICAg
ICAgIHJldHVybiBMYXlvdXRVbml0KHZhbHVlICsgZXBzaWxvbigpIC8gMi4wZik7CiAgICAgICAg
IH0KICAgICAgICAgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUgLSBlcHNpbG9uKCkg
LyAyLjBmKSk7Ci0gICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdCh2YWx1ZSAtIGVw
c2lsb24oKSAvIDIuMGYpOworICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCh2YWx1ZSAtIGVwc2ls
b24oKSAvIDIuMGYpOwogI2VuZGlmCiAgICAgfQogCkBAIC0xNjcsNyArMTY3LDcgQEAgcHVibGlj
OgogICAgIG9wZXJhdG9yIGRvdWJsZSgpIGNvbnN0IHsgcmV0dXJuIHRvRG91YmxlKCk7IH0KICAg
ICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQogCi0gICAgRnJhY3Rp
b25hbExheW91dFVuaXQgb3BlcmF0b3IrKyhpbnQpCisgICAgTGF5b3V0VW5pdCBvcGVyYXRvcisr
KGludCkKICAgICB7CiAgICAgICAgIG1fdmFsdWUgKz0ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsK
ICAgICAgICAgcmV0dXJuICp0aGlzOwpAQCAtMTgxLDkgKzE4MSw5IEBAIHB1YmxpYzoKICAgICAg
ICAgbV92YWx1ZSA9IHN0YXRpY19jYXN0PGludD4odmFsdWUpOwogICAgIH0KIAotICAgIEZyYWN0
aW9uYWxMYXlvdXRVbml0IGFicygpIGNvbnN0CisgICAgTGF5b3V0VW5pdCBhYnMoKSBjb25zdAog
ICAgIHsKLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsdWU7CisgICAgICAg
IExheW91dFVuaXQgcmV0dXJuVmFsdWU7CiAgICAgICAgIHJldHVyblZhbHVlLnNldFJhd1ZhbHVl
KDo6YWJzKG1fdmFsdWUpKTsKICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogICAgIH0KQEAg
LTIyNywxMSArMjI3LDExIEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAotICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IGZyYWN0aW9uKCkgY29uc3QKKyAgICBMYXlvdXRVbml0IGZyYWN0aW9uKCkg
Y29uc3QKICAgICB7ICAgCiAgICAgICAgIC8vIEFkZCB0aGUgZnJhY3Rpb24gdG8gdGhlIHNpemUg
KGFzIG9wcG9zZWQgdG8gdGhlIGZ1bGwgbG9jYXRpb24pIHRvIGF2b2lkIG92ZXJmbG93cy4KICAg
ICAgICAgLy8gQ29tcHV0ZSBmcmFjdGlvbiB1c2luZyB0aGUgbW9kIG9wZXJhdG9yIHRvIHByZXNl
cnZlIHRoZSBzaWduIG9mIHRoZSB2YWx1ZSBhcyBpdCBtYXkgYWZmZWN0IHJvdW5kaW5nLgotICAg
ICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBmcmFjdGlvbjsKKyAgICAgICAgTGF5b3V0VW5pdCBm
cmFjdGlvbjsKICAgICAgICAgZnJhY3Rpb24uc2V0UmF3VmFsdWUocmF3VmFsdWUoKSAlIGtGaXhl
ZFBvaW50RGVub21pbmF0b3IpOwogICAgICAgICByZXR1cm4gZnJhY3Rpb247CiAgICAgfQpAQCAt
MjQxLDM2ICsyNDEsMzYgQEAgcHVibGljOgogI2Vsc2UKICAgICBzdGF0aWMgaW50IGVwc2lsb24o
KSB7IHJldHVybiAwOyB9CiAjZW5kaWYKLSAgICBzdGF0aWMgY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQgbWF4KCkKKyAgICBzdGF0aWMgY29uc3QgTGF5b3V0VW5pdCBtYXgoKQogICAgIHsKLSAg
ICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbTsKKyAgICAgICAgTGF5b3V0VW5pdCBtOwogICAg
ICAgICBtLm1fdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwogICAgICAg
ICByZXR1cm4gbTsKICAgICB9Ci0gICAgc3RhdGljIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0
IG1pbigpCisgICAgc3RhdGljIGNvbnN0IExheW91dFVuaXQgbWluKCkKICAgICB7Ci0gICAgICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0IG07CisgICAgICAgIExheW91dFVuaXQgbTsKICAgICAgICAg
bS5tX3ZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKTsKICAgICAgICAgcmV0
dXJuIG07CiAgICAgfQogCiAgICAgLy8gVmVyc2lvbnMgb2YgbWF4L21pbiB0aGF0IGFyZSBzbGln
aHRseSBzbWFsbGVyL2xhcmdlciB0aGFuIG1heC9taW4oKSB0byBhbGxvdyBmb3Igcm9pbmRpbmcg
d2l0aG91dCBvdmVyZmxvd2luZy4KLSAgICBzdGF0aWMgY29uc3QgRnJhY3Rpb25hbExheW91dFVu
aXQgbmVhcmx5TWF4KCkKKyAgICBzdGF0aWMgY29uc3QgTGF5b3V0VW5pdCBuZWFybHlNYXgoKQog
ICAgIHsKLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbTsKKyAgICAgICAgTGF5b3V0VW5p
dCBtOwogICAgICAgICBtLm1fdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgp
IC0ga0ZpeGVkUG9pbnREZW5vbWluYXRvciAvIDI7CiAgICAgICAgIHJldHVybiBtOwogICAgIH0K
LSAgICBzdGF0aWMgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQgbmVhcmx5TWluKCkKKyAgICBz
dGF0aWMgY29uc3QgTGF5b3V0VW5pdCBuZWFybHlNaW4oKQogICAgIHsKLSAgICAgICAgRnJhY3Rp
b25hbExheW91dFVuaXQgbTsKKyAgICAgICAgTGF5b3V0VW5pdCBtOwogICAgICAgICBtLm1fdmFs
dWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpICsga0ZpeGVkUG9pbnREZW5vbWlu
YXRvciAvIDI7CiAgICAgICAgIHJldHVybiBtOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgRnJh
Y3Rpb25hbExheW91dFVuaXQgY2xhbXAoZG91YmxlIHZhbHVlKQorICAgIHN0YXRpYyBMYXlvdXRV
bml0IGNsYW1wKGRvdWJsZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBjbGFtcFRvPEZy
YWN0aW9uYWxMYXlvdXRVbml0Pih2YWx1ZSwgRnJhY3Rpb25hbExheW91dFVuaXQ6Om1pbigpLCBG
cmFjdGlvbmFsTGF5b3V0VW5pdDo6bWF4KCkpOworICAgICAgICByZXR1cm4gY2xhbXBUbzxMYXlv
dXRVbml0Pih2YWx1ZSwgTGF5b3V0VW5pdDo6bWluKCksIExheW91dFVuaXQ6Om1heCgpKTsKICAg
ICB9CiAKIHByaXZhdGU6CkBAIC0zMTcsMTc2ICszMTcsMTc2IEBAIHByaXZhdGU6CiAgICAgaW50
IG1fdmFsdWU7CiB9OwogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBib29s
IG9wZXJhdG9yPD0oY29uc3QgTGF5b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsK
ICAgICByZXR1cm4gYS5yYXdWYWx1ZSgpIDw9IGIucmF3VmFsdWUoKTsKIH0KIAotaW5saW5lIGJv
b2wgb3BlcmF0b3I8PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK2lu
bGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKIHsKICAg
ICByZXR1cm4gYS50b0Zsb2F0KCkgPD0gYjsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3I8PShj
b25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCitpbmxpbmUgYm9vbCBvcGVyYXRv
cjw9KGNvbnN0IExheW91dFVuaXQmIGEsIGludCBiKQogewotICAgIHJldHVybiBhIDw9IEZyYWN0
aW9uYWxMYXlvdXRVbml0KGIpOworICAgIHJldHVybiBhIDw9IExheW91dFVuaXQoYik7CiB9CiAK
LWlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IGZsb2F0IGEsIGNvbnN0
IExheW91dFVuaXQmIGIpCiB7CiAgICAgcmV0dXJuIGEgPD0gYi50b0Zsb2F0KCk7CiB9CiAKLWlu
bGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBpbnQgYSwgY29uc3QgTGF5b3V0
VW5pdCYgYikKIHsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgPD0gYjsKKyAg
ICByZXR1cm4gTGF5b3V0VW5pdChhKSA8PSBiOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj49
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYikKK2lubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgTGF5b3V0VW5pdCYgYSwgY29uc3Qg
TGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1cm4gYS5yYXdWYWx1ZSgpID49IGIucmF3VmFsdWUo
KTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYSwgaW50IGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IExheW91dFVuaXQmIGEs
IGludCBiKQogewotICAgIHJldHVybiBhID49IEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworICAg
IHJldHVybiBhID49IExheW91dFVuaXQoYik7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPj0o
Y29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgYm9v
bCBvcGVyYXRvcj49KGNvbnN0IGZsb2F0IGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAgICAg
cmV0dXJuIGEgPj0gYi50b0Zsb2F0KCk7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPj0oY29u
c3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCitpbmxpbmUgYm9vbCBvcGVyYXRv
cj49KGNvbnN0IExheW91dFVuaXQmIGEsIGZsb2F0IGIpCiB7CiAgICAgcmV0dXJuIGEudG9GbG9h
dCgpID49IGI7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgaW50IGEsIGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBp
bnQgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91
dFVuaXQoYSkgPj0gYjsKKyAgICByZXR1cm4gTGF5b3V0VW5pdChhKSA+PSBiOwogfQogCi1pbmxp
bmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IExheW91
dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAgICAgcmV0dXJuIGEucmF3VmFsdWUo
KSA8IGIucmF3VmFsdWUoKTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK2lubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBM
YXlvdXRVbml0JiBhLCBpbnQgYikKIHsKLSAgICByZXR1cm4gYSA8IEZyYWN0aW9uYWxMYXlvdXRV
bml0KGIpOworICAgIHJldHVybiBhIDwgTGF5b3V0VW5pdChiKTsKIH0KIAotaW5saW5lIGJvb2wg
b3BlcmF0b3I8KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQoraW5saW5l
IGJvb2wgb3BlcmF0b3I8KGNvbnN0IExheW91dFVuaXQmIGEsIGZsb2F0IGIpCiB7CiAgICAgcmV0
dXJuIGEudG9GbG9hdCgpIDwgYjsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBhLCBkb3VibGUgYikKK2lubGluZSBib29sIG9wZXJhdG9yPChj
b25zdCBMYXlvdXRVbml0JiBhLCBkb3VibGUgYikKIHsKICAgICByZXR1cm4gYS50b0RvdWJsZSgp
IDwgYjsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IGludCBhLCBjb25zdCBGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBpbnQgYSwg
Y29uc3QgTGF5b3V0VW5pdCYgYikKIHsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQo
YSkgPCBiOworICAgIHJldHVybiBMYXlvdXRVbml0KGEpIDwgYjsKIH0KIAotaW5saW5lIGJvb2wg
b3BlcmF0b3I8KGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQor
aW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IGZsb2F0IGEsIGNvbnN0IExheW91dFVuaXQmIGIp
CiB7CiAgICAgcmV0dXJuIGEgPCBiLnRvRmxvYXQoKTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0
b3I+KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYikKK2lubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBMYXlvdXRVbml0JiBhLCBjb25z
dCBMYXlvdXRVbml0JiBiKQogewogICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgPiBiLnJhd1ZhbHVl
KCk7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYSwgZG91YmxlIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgTGF5b3V0VW5pdCYg
YSwgZG91YmxlIGIpCiB7CiAgICAgcmV0dXJuIGEudG9Eb3VibGUoKSA+IGI7CiB9CiAKLWlubGlu
ZSBib29sIG9wZXJhdG9yPihjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikK
K2lubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQogewog
ICAgIHJldHVybiBhLnRvRmxvYXQoKSA+IGI7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPihj
b25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCitpbmxpbmUgYm9vbCBvcGVyYXRv
cj4oY29uc3QgTGF5b3V0VW5pdCYgYSwgaW50IGIpCiB7Ci0gICAgcmV0dXJuIGEgPiBGcmFjdGlv
bmFsTGF5b3V0VW5pdChiKTsKKyAgICByZXR1cm4gYSA+IExheW91dFVuaXQoYik7CiB9CiAKLWlu
bGluZSBib29sIG9wZXJhdG9yPihjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVu
aXQmIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgaW50IGEsIGNvbnN0IExheW91dFVu
aXQmIGIpCiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpID4gYjsKKyAgICBy
ZXR1cm4gTGF5b3V0VW5pdChhKSA+IGI7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPihjb25z
dCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBib29sIG9w
ZXJhdG9yPihjb25zdCBmbG9hdCBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewogICAgIHJldHVy
biBhID4gYi50b0Zsb2F0KCk7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBkb3Vi
bGUgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRv
cj4oY29uc3QgZG91YmxlIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAgICAgcmV0dXJuIGEg
PiBiLnRvRG91YmxlKCk7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJhY3Rp
b25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBMYXlvdXRVbml0JiBhLCBjb25zdCBMYXlvdXRVbml0JiBi
KQogewogICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgIT0gYi5yYXdWYWx1ZSgpOwogfQogCi1pbmxp
bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBi
KQoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQog
ewotICAgIHJldHVybiBhICE9IEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworICAgIHJldHVybiBh
ICE9IExheW91dFVuaXQoYik7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgaW50
IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBpbnQgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKLSAgICByZXR1cm4gRnJhY3Rp
b25hbExheW91dFVuaXQoYSkgIT0gYjsKKyAgICByZXR1cm4gTGF5b3V0VW5pdChhKSAhPSBiOwog
fQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBh
LCBpbnQgYikKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgTGF5b3V0VW5pdCYgYSwgaW50
IGIpCiB7Ci0gICAgcmV0dXJuIGEgIT0gRnJhY3Rpb25hbExheW91dFVuaXQoYik7CisgICAgcmV0
dXJuIGEgIT0gTGF5b3V0VW5pdChiKTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIp
CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExheW91dFVuaXQmIGEsIGNvbnN0IExheW91
dFVuaXQmIGIpCiB7CiAgICAgcmV0dXJuIGEucmF3VmFsdWUoKSA9PSBiLnJhd1ZhbHVlKCk7CiB9
CiAKLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEs
IGludCBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMYXlvdXRVbml0JiBhLCBpbnQg
YikKIHsKLSAgICByZXR1cm4gYSA9PSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKKyAgICByZXR1
cm4gYSA9PSBMYXlvdXRVbml0KGIpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBib29sIG9wZXJh
dG9yPT0oY29uc3QgaW50IGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7Ci0gICAgcmV0dXJuIEZy
YWN0aW9uYWxMYXlvdXRVbml0KGEpID09IGI7CisgICAgcmV0dXJuIExheW91dFVuaXQoYSkgPT0g
YjsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYSwgZmxvYXQgYikKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgTGF5b3V0VW5pdCYg
YSwgZmxvYXQgYikKIHsKICAgICByZXR1cm4gYS50b0Zsb2F0KCkgPT0gYjsKIH0KIAotaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYikKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgZmxvYXQgYSwgY29uc3QgTGF5b3V0
VW5pdCYgYikKIHsKICAgICByZXR1cm4gYSA9PSBiLnRvRmxvYXQoKTsKIH0KIAotLy8gRm9yIG11
bHRpcGxpY2F0aW9uIHRoYXQncyBwcm9uZSB0byBvdmVyZmxvdywgdGhpcyBib3VuZHMgaXQgdG8g
RnJhY3Rpb25hbExheW91dFVuaXQ6Om1heCgpIGFuZCA6Om1pbigpCi1pbmxpbmUgRnJhY3Rpb25h
bExheW91dFVuaXQgYm91bmRlZE11bHRpcGx5KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKKy8vIEZvciBtdWx0aXBsaWNhdGlvbiB0
aGF0J3MgcHJvbmUgdG8gb3ZlcmZsb3csIHRoaXMgYm91bmRzIGl0IHRvIExheW91dFVuaXQ6Om1h
eCgpIGFuZCA6Om1pbigpCitpbmxpbmUgTGF5b3V0VW5pdCBib3VuZGVkTXVsdGlwbHkoY29uc3Qg
TGF5b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICNpZiBFTkFCTEUoU1VCUElY
RUxfTEFZT1VUKQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJldHVyblZhbDsKKyAgICBMYXlv
dXRVbml0IHJldHVyblZhbDsKICAgICBsb25nIGxvbmcgcmF3VmFsID0gc3RhdGljX2Nhc3Q8bG9u
ZyBsb25nPihhLnJhd1ZhbHVlKCkpICogYi5yYXdWYWx1ZSgpIC8ga0ZpeGVkUG9pbnREZW5vbWlu
YXRvcjsKICAgICBpZiAocmF3VmFsID4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkK
LSAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0OjptYXgoKTsKKyAgICAgICAgcmV0
dXJuIExheW91dFVuaXQ6Om1heCgpOwogICAgIGlmIChyYXdWYWwgPCBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludD46Om1pbigpKQotICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQ6Om1p
bigpOworICAgICAgICByZXR1cm4gTGF5b3V0VW5pdDo6bWluKCk7CiAgICAgcmV0dXJuVmFsLnNl
dFJhd1ZhbHVlKHJhd1ZhbCk7CiAgICAgcmV0dXJuIHJldHVyblZhbDsKICNlbHNlCkBAIC00OTQs
MTIgKzQ5NCwxMiBAQCBpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgYm91bmRlZE11bHRpCiAj
ZW5kaWYKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKihjb25zdCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitp
bmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvciooY29uc3QgTGF5b3V0VW5pdCYgYSwgY29uc3QgTGF5
b3V0VW5pdCYgYikKIHsKICNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKSAmJiBFTkFCTEUoU0FU
VVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQogICAgIHJldHVybiBib3VuZGVkTXVsdGlwbHkoYSwg
Yik7CiAjZWxpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAgIEZyYWN0aW9uYWxMYXlvdXRV
bml0IHJldHVyblZhbDsKKyAgICBMYXlvdXRVbml0IHJldHVyblZhbDsKICAgICBsb25nIGxvbmcg
cmF3VmFsID0gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihhLnJhd1ZhbHVlKCkpICogYi5yYXdWYWx1
ZSgpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKICAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUo
cmF3VmFsKTsKICAgICByZXR1cm4gcmV0dXJuVmFsOwpAQCAtNTA4LDUwICs1MDgsNTAgQEAgaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKihjbwogI2VuZGlmCiB9ICAgIAogCi1p
bmxpbmUgZG91YmxlIG9wZXJhdG9yKihjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZG91
YmxlIGIpCitpbmxpbmUgZG91YmxlIG9wZXJhdG9yKihjb25zdCBMYXlvdXRVbml0JiBhLCBkb3Vi
bGUgYikKIHsKICAgICByZXR1cm4gYS50b0RvdWJsZSgpICogYjsKIH0KIAotaW5saW5lIGZsb2F0
IG9wZXJhdG9yKihjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK2lubGlu
ZSBmbG9hdCBvcGVyYXRvciooY29uc3QgTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKIHsKICAgICBy
ZXR1cm4gYS50b0Zsb2F0KCkgKiBiOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQg
b3BlcmF0b3IqKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK2lubGluZSBM
YXlvdXRVbml0IG9wZXJhdG9yKihjb25zdCBMYXlvdXRVbml0JiBhLCBpbnQgYikKIHsKLSAgICBy
ZXR1cm4gYSAqIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworICAgIHJldHVybiBhICogTGF5b3V0
VW5pdChiKTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKihjb25z
dCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgdW5zaWduZWQgYikKK2lubGluZSBMYXlvdXRVbml0
IG9wZXJhdG9yKihjb25zdCBMYXlvdXRVbml0JiBhLCB1bnNpZ25lZCBiKQogewotICAgIHJldHVy
biBhICogRnJhY3Rpb25hbExheW91dFVuaXQoYik7CisgICAgcmV0dXJuIGEgKiBMYXlvdXRVbml0
KGIpOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IqKHVuc2lnbmVk
IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIExheW91dFVuaXQgb3Bl
cmF0b3IqKHVuc2lnbmVkIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7Ci0gICAgcmV0dXJuIEZy
YWN0aW9uYWxMYXlvdXRVbml0KGEpICogYjsKKyAgICByZXR1cm4gTGF5b3V0VW5pdChhKSAqIGI7
CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvciooY29uc3QgaW50IGEs
IGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIExheW91dFVuaXQgb3BlcmF0
b3IqKGNvbnN0IGludCBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewotICAgIHJldHVybiBGcmFj
dGlvbmFsTGF5b3V0VW5pdChhKSAqIGI7CisgICAgcmV0dXJuIExheW91dFVuaXQoYSkgKiBiOwog
fQogCi1pbmxpbmUgZmxvYXQgb3BlcmF0b3IqKGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBiKQoraW5saW5lIGZsb2F0IG9wZXJhdG9yKihjb25zdCBmbG9hdCBhLCBj
b25zdCBMYXlvdXRVbml0JiBiKQogewogICAgIHJldHVybiBhICogYi50b0Zsb2F0KCk7CiB9CiAK
LWlubGluZSBkb3VibGUgb3BlcmF0b3IqKGNvbnN0IGRvdWJsZSBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYikKK2lubGluZSBkb3VibGUgb3BlcmF0b3IqKGNvbnN0IGRvdWJsZSBhLCBj
b25zdCBMYXlvdXRVbml0JiBiKQogewogICAgIHJldHVybiBhICogYi50b0RvdWJsZSgpOwogfQog
Ci1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IvKGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBMYXlv
dXRVbml0IG9wZXJhdG9yLyhjb25zdCBMYXlvdXRVbml0JiBhLCBjb25zdCBMYXlvdXRVbml0JiBi
KQogewogI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCi0gICAgRnJhY3Rpb25hbExheW91dFVu
aXQgcmV0dXJuVmFsOworICAgIExheW91dFVuaXQgcmV0dXJuVmFsOwogICAgIGxvbmcgbG9uZyBy
YXdWYWwgPSBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGtGaXhlZFBvaW50RGVub21pbmF0b3IpICog
YS5yYXdWYWx1ZSgpIC8gYi5yYXdWYWx1ZSgpOwogICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShy
YXdWYWwpOwogICAgIHJldHVybiByZXR1cm5WYWw7CkBAIC01NjAsNDkgKzU2MCw0OSBAQCBpbmxp
bmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IvKGNvCiAjZW5kaWYKIH0gICAgCiAKLWlu
bGluZSBmbG9hdCBvcGVyYXRvci8oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0
IGIpCitpbmxpbmUgZmxvYXQgb3BlcmF0b3IvKGNvbnN0IExheW91dFVuaXQmIGEsIGZsb2F0IGIp
CiB7CiAgICAgcmV0dXJuIGEudG9GbG9hdCgpIC8gYjsKIH0KIAotaW5saW5lIGRvdWJsZSBvcGVy
YXRvci8oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGRvdWJsZSBiKQoraW5saW5lIGRv
dWJsZSBvcGVyYXRvci8oY29uc3QgTGF5b3V0VW5pdCYgYSwgZG91YmxlIGIpCiB7CiAgICAgcmV0
dXJuIGEudG9Eb3VibGUoKSAvIGI7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBv
cGVyYXRvci8oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQoraW5saW5lIExh
eW91dFVuaXQgb3BlcmF0b3IvKGNvbnN0IExheW91dFVuaXQmIGEsIGludCBiKQogewotICAgIHJl
dHVybiBhIC8gRnJhY3Rpb25hbExheW91dFVuaXQoYik7CisgICAgcmV0dXJuIGEgLyBMYXlvdXRV
bml0KGIpOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IvKGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCB1bnNpZ25lZCBpbnQgYikKK2lubGluZSBMYXlvdXRV
bml0IG9wZXJhdG9yLyhjb25zdCBMYXlvdXRVbml0JiBhLCB1bnNpZ25lZCBiKQogewotICAgIHJl
dHVybiBhIC8gRnJhY3Rpb25hbExheW91dFVuaXQoYik7CisgICAgcmV0dXJuIGEgLyBMYXlvdXRV
bml0KGIpOwogfQogCi1pbmxpbmUgZmxvYXQgb3BlcmF0b3IvKGNvbnN0IGZsb2F0IGEsIGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIGZsb2F0IG9wZXJhdG9yLyhjb25zdCBm
bG9hdCBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewogICAgIHJldHVybiBhIC8gYi50b0Zsb2F0
KCk7CiB9CiAKLWlubGluZSBkb3VibGUgb3BlcmF0b3IvKGNvbnN0IGRvdWJsZSBhLCBjb25zdCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBkb3VibGUgb3BlcmF0b3IvKGNvbnN0IGRv
dWJsZSBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewogICAgIHJldHVybiBhIC8gYi50b0RvdWJs
ZSgpOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IvKGNvbnN0IGlu
dCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBMYXlvdXRVbml0IG9w
ZXJhdG9yLyhjb25zdCBpbnQgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKLSAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFVuaXQoYSkgLyBiOworICAgIHJldHVybiBMYXlvdXRVbml0KGEpIC8g
YjsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLyh1bnNpZ25lZCBp
bnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgTGF5b3V0VW5pdCBv
cGVyYXRvci8odW5zaWduZWQgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKLSAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFVuaXQoYSkgLyBiOworICAgIHJldHVybiBMYXlvdXRVbml0KGEpIC8g
YjsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKyhjb25zdCBGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxp
bmUgTGF5b3V0VW5pdCBvcGVyYXRvcisoY29uc3QgTGF5b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0
VW5pdCYgYikKIHsKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7CisgICAgTGF5
b3V0VW5pdCByZXR1cm5WYWw7CiAjaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJ
QykKICAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUoc2F0dXJhdGVkQWRkaXRpb24oYS5yYXdWYWx1
ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKICNlbHNlCkBAIC02MTEsMzkgKzYxMSwzOSBAQCBpbmxpbmUg
RnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IrKGNvCiAgICAgcmV0dXJuIHJldHVyblZhbDsK
IH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKyhjb25zdCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCitpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvcisoY29u
c3QgTGF5b3V0VW5pdCYgYSwgaW50IGIpCiB7Ci0gICAgcmV0dXJuIGEgKyBGcmFjdGlvbmFsTGF5
b3V0VW5pdChiKTsKKyAgICByZXR1cm4gYSArIExheW91dFVuaXQoYik7CiB9CiAKLWlubGluZSBm
bG9hdCBvcGVyYXRvcisoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCitp
bmxpbmUgZmxvYXQgb3BlcmF0b3IrKGNvbnN0IExheW91dFVuaXQmIGEsIGZsb2F0IGIpCiB7CiAg
ICAgcmV0dXJuIGEudG9GbG9hdCgpICsgYjsKIH0KIAotaW5saW5lIGRvdWJsZSBvcGVyYXRvciso
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGRvdWJsZSBiKQoraW5saW5lIGRvdWJsZSBv
cGVyYXRvcisoY29uc3QgTGF5b3V0VW5pdCYgYSwgZG91YmxlIGIpCiB7CiAgICAgcmV0dXJuIGEu
dG9Eb3VibGUoKSArIGI7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRv
cisoY29uc3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIExh
eW91dFVuaXQgb3BlcmF0b3IrKGNvbnN0IGludCBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewot
ICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSArIGI7CisgICAgcmV0dXJuIExheW91
dFVuaXQoYSkgKyBiOwogfQogCi1pbmxpbmUgZmxvYXQgb3BlcmF0b3IrKGNvbnN0IGZsb2F0IGEs
IGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIGZsb2F0IG9wZXJhdG9yKyhj
b25zdCBmbG9hdCBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewogICAgIHJldHVybiBhICsgYi50
b0Zsb2F0KCk7CiB9CiAKLWlubGluZSBkb3VibGUgb3BlcmF0b3IrKGNvbnN0IGRvdWJsZSBhLCBj
b25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBkb3VibGUgb3BlcmF0b3IrKGNv
bnN0IGRvdWJsZSBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewogICAgIHJldHVybiBhICsgYi50
b0RvdWJsZSgpOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3ItKGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
YikKK2lubGluZSBMYXlvdXRVbml0IG9wZXJhdG9yLShjb25zdCBMYXlvdXRVbml0JiBhLCBjb25z
dCBMYXlvdXRVbml0JiBiKQogewotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJldHVyblZhbDsK
KyAgICBMYXlvdXRVbml0IHJldHVyblZhbDsKICNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9B
UklUSE1FVElDKQogICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShzYXR1cmF0ZWRTdWJ0cmFjdGlv
bihhLnJhd1ZhbHVlKCksIGIucmF3VmFsdWUoKSkpOwogI2Vsc2UKQEAgLTY1Miw0NCArNjUyLDQ0
IEBAIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci0oY28KICAgICByZXR1cm4g
cmV0dXJuVmFsOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3ItKGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK2lubGluZSBMYXlvdXRVbml0IG9w
ZXJhdG9yLShjb25zdCBMYXlvdXRVbml0JiBhLCBpbnQgYikKIHsKLSAgICByZXR1cm4gYSAtIEZy
YWN0aW9uYWxMYXlvdXRVbml0KGIpOworICAgIHJldHVybiBhIC0gTGF5b3V0VW5pdChiKTsKIH0K
IAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYSwgdW5zaWduZWQgYikKK2lubGluZSBMYXlvdXRVbml0IG9wZXJhdG9yLShj
b25zdCBMYXlvdXRVbml0JiBhLCB1bnNpZ25lZCBiKQogewotICAgIHJldHVybiBhIC0gRnJhY3Rp
b25hbExheW91dFVuaXQoYik7CisgICAgcmV0dXJuIGEgLSBMYXlvdXRVbml0KGIpOwogfQogCi1p
bmxpbmUgZmxvYXQgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9h
dCBiKQoraW5saW5lIGZsb2F0IG9wZXJhdG9yLShjb25zdCBMYXlvdXRVbml0JiBhLCBmbG9hdCBi
KQogewogICAgIHJldHVybiBhLnRvRmxvYXQoKSAtIGI7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBvcGVyYXRvci0oY29uc3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBiKQoraW5saW5lIExheW91dFVuaXQgb3BlcmF0b3ItKGNvbnN0IGludCBhLCBjb25zdCBM
YXlvdXRVbml0JiBiKQogewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSAtIGI7
CisgICAgcmV0dXJuIExheW91dFVuaXQoYSkgLSBiOwogfQogCi1pbmxpbmUgZmxvYXQgb3BlcmF0
b3ItKGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5l
IGZsb2F0IG9wZXJhdG9yLShjb25zdCBmbG9hdCBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewog
ICAgIHJldHVybiBhIC0gYi50b0Zsb2F0KCk7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEpCitpbmxpbmUgTGF5
b3V0VW5pdCBvcGVyYXRvci0oY29uc3QgTGF5b3V0VW5pdCYgYSkKIHsKLSAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCByZXR1cm5WYWw7CisgICAgTGF5b3V0VW5pdCByZXR1cm5WYWw7CiAgICAgcmV0
dXJuVmFsLnNldFJhd1ZhbHVlKC1hLnJhd1ZhbHVlKCkpOwogICAgIHJldHVybiByZXR1cm5WYWw7
CiB9CiAKIC8vIEZvciByZXR1cm5pbmcgdGhlIHJlbWFpbmRlciBhZnRlciBhIGRpdmlzaW9uIHdp
dGggaW50ZWdlciByZXN1bHRzLgotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IGludE1vZChj
b25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGIpCitpbmxpbmUgTGF5b3V0VW5pdCBpbnRNb2QoY29uc3QgTGF5b3V0VW5pdCYgYSwgY29uc3Qg
TGF5b3V0VW5pdCYgYikKIHsKICNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQogICAgIC8vIFRo
aXMgY2FsY3VsYXRlcyB0aGUgbW9kdWxvIHNvIHRoYXQ6IGEgPSBzdGF0aWNfY2FzdDxpbnQ+KGEg
LyBiKSAqIGIgKyBpbnRNb2QoYSwgYikuCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJu
VmFsOworICAgIExheW91dFVuaXQgcmV0dXJuVmFsOwogICAgIHJldHVyblZhbC5zZXRSYXdWYWx1
ZShhLnJhd1ZhbHVlKCkgJSBiLnJhd1ZhbHVlKCkpOwogICAgIHJldHVybiByZXR1cm5WYWw7CiAj
ZWxzZQpAQCAtNjk3LDExICs2OTcsMTEgQEAgaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IGlu
dE1vZChjb25zdAogI2VuZGlmCiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVy
YXRvciUoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBiKQoraW5saW5lIExheW91dFVuaXQgb3BlcmF0b3IlKGNvbnN0IExheW91dFVuaXQm
IGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkK
ICAgICAvLyBUaGlzIGNhbGN1bGF0ZXMgdGhlIG1vZHVsbyBzbyB0aGF0OiBhID0gKGEgLyBiKSAq
IGIgKyBhICUgYi4KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7CisgICAgTGF5
b3V0VW5pdCByZXR1cm5WYWw7CiAgICAgbG9uZyBsb25nIHJhd1ZhbCA9IChzdGF0aWNfY2FzdDxs
b25nIGxvbmc+KGtGaXhlZFBvaW50RGVub21pbmF0b3IpICogYS5yYXdWYWx1ZSgpKSAlIGIucmF3
VmFsdWUoKTsKICAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUocmF3VmFsIC8ga0ZpeGVkUG9pbnRE
ZW5vbWluYXRvcik7CiAgICAgcmV0dXJuIHJldHVyblZhbDsKQEAgLTcxMCwxNyArNzEwLDE3IEBA
IGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvciUoY28KICNlbmRpZgogfQogCi1p
bmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IlKGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBhLCBpbnQgYikKK2lubGluZSBMYXlvdXRVbml0IG9wZXJhdG9yJShjb25zdCBMYXlv
dXRVbml0JiBhLCBpbnQgYikKIHsKLSAgICByZXR1cm4gYSAlIEZyYWN0aW9uYWxMYXlvdXRVbml0
KGIpOworICAgIHJldHVybiBhICUgTGF5b3V0VW5pdChiKTsKIH0KIAotaW5saW5lIEZyYWN0aW9u
YWxMYXlvdXRVbml0IG9wZXJhdG9yJShpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGIpCitpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvciUoaW50IGEsIGNvbnN0IExheW91dFVuaXQm
IGIpCiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpICUgYjsKKyAgICByZXR1
cm4gTGF5b3V0VW5pdChhKSAlIGI7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
b3BlcmF0b3IrPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGIpCitpbmxpbmUgTGF5b3V0VW5pdCYgb3BlcmF0b3IrPShMYXlvdXRVbml0JiBhLCBj
b25zdCBMYXlvdXRVbml0JiBiKQogewogI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRI
TUVUSUMpCiAgICAgYS5zZXRSYXdWYWx1ZShzYXR1cmF0ZWRBZGRpdGlvbihhLnJhd1ZhbHVlKCks
IGIucmF3VmFsdWUoKSkpOwpAQCAtNzMwLDMxICs3MzAsMzEgQEAgaW5saW5lIEZyYWN0aW9uYWxM
YXlvdXRVbml0JiBvcGVyYXRvcis9KAogICAgIHJldHVybiBhOwogfQogCi1pbmxpbmUgRnJhY3Rp
b25hbExheW91dFVuaXQmIG9wZXJhdG9yKz0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBi
KQoraW5saW5lIExheW91dFVuaXQmIG9wZXJhdG9yKz0oTGF5b3V0VW5pdCYgYSwgaW50IGIpCiB7
CiAgICAgYSA9IGEgKyBiOwogICAgIHJldHVybiBhOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExh
eW91dFVuaXQmIG9wZXJhdG9yKz0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCitp
bmxpbmUgTGF5b3V0VW5pdCYgb3BlcmF0b3IrPShMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQogewog
ICAgIGEgPSBhICsgYjsKICAgICByZXR1cm4gYTsKIH0KIAotaW5saW5lIGZsb2F0JiBvcGVyYXRv
cis9KGZsb2F0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBmbG9h
dCYgb3BlcmF0b3IrPShmbG9hdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICBhID0g
YSArIGI7CiAgICAgcmV0dXJuIGE7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
b3BlcmF0b3ItPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCitpbmxpbmUgTGF5b3V0
VW5pdCYgb3BlcmF0b3ItPShMYXlvdXRVbml0JiBhLCBpbnQgYikKIHsKICAgICBhID0gYSAtIGI7
CiAgICAgcmV0dXJuIGE7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0
b3ItPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGIpCitpbmxpbmUgTGF5b3V0VW5pdCYgb3BlcmF0b3ItPShMYXlvdXRVbml0JiBhLCBjb25zdCBM
YXlvdXRVbml0JiBiKQogewogI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMp
CiAgICAgYS5zZXRSYXdWYWx1ZShzYXR1cmF0ZWRTdWJ0cmFjdGlvbihhLnJhd1ZhbHVlKCksIGIu
cmF3VmFsdWUoKSkpOwpAQCAtNzY0LDYyICs3NjQsMTAyIEBAIGlubGluZSBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgb3BlcmF0b3ItPSgKICAgICByZXR1cm4gYTsKIH0KIAotaW5saW5lIEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBvcGVyYXRvci09KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBi
KQoraW5saW5lIExheW91dFVuaXQmIG9wZXJhdG9yLT0oTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikK
IHsKICAgICBhID0gYSAtIGI7CiAgICAgcmV0dXJuIGE7CiB9CiAKLWlubGluZSBmbG9hdCYgb3Bl
cmF0b3ItPShmbG9hdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUg
ZmxvYXQmIG9wZXJhdG9yLT0oZmxvYXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAgICAg
YSA9IGEgLSBiOwogICAgIHJldHVybiBhOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVu
aXQmIG9wZXJhdG9yKj0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRVbml0JiBiKQoraW5saW5lIExheW91dFVuaXQmIG9wZXJhdG9yKj0oTGF5b3V0VW5pdCYg
YSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICBhID0gYSAqIGI7CiAgICAgcmV0dXJuIGE7
CiB9Ci0vLyBvcGVyYXRvcio9KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikgaXMgc3Vw
cG9ydGVkIGJ5IHRoZSBvcGVyYXRvciBhYm92ZSBwbHVzIEZyYWN0aW9uYWxMYXlvdXRVbml0KGlu
dCkuCisvLyBvcGVyYXRvcio9KExheW91dFVuaXQmIGEsIGludCBiKSBpcyBzdXBwb3J0ZWQgYnkg
dGhlIG9wZXJhdG9yIGFib3ZlIHBsdXMgTGF5b3V0VW5pdChpbnQpLgogCi1pbmxpbmUgRnJhY3Rp
b25hbExheW91dFVuaXQmIG9wZXJhdG9yKj0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0
IGIpCitpbmxpbmUgTGF5b3V0VW5pdCYgb3BlcmF0b3IqPShMYXlvdXRVbml0JiBhLCBmbG9hdCBi
KQogewogICAgIGEgPSBhICogYjsKICAgICByZXR1cm4gYTsKIH0KIAotaW5saW5lIGZsb2F0JiBv
cGVyYXRvcio9KGZsb2F0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGlu
ZSBmbG9hdCYgb3BlcmF0b3IqPShmbG9hdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAg
ICBhID0gYSAqIGI7CiAgICAgcmV0dXJuIGE7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgb3BlcmF0b3IvPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25h
bExheW91dFVuaXQmIGIpCitpbmxpbmUgTGF5b3V0VW5pdCYgb3BlcmF0b3IvPShMYXlvdXRVbml0
JiBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewogICAgIGEgPSBhIC8gYjsKICAgICByZXR1cm4g
YTsKIH0KLS8vIG9wZXJhdG9yLz0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKSBpcyBz
dXBwb3J0ZWQgYnkgdGhlIG9wZXJhdG9yIGFib3ZlIHBsdXMgRnJhY3Rpb25hbExheW91dFVuaXQo
aW50KS4KKy8vIG9wZXJhdG9yLz0oTGF5b3V0VW5pdCYgYSwgaW50IGIpIGlzIHN1cHBvcnRlZCBi
eSB0aGUgb3BlcmF0b3IgYWJvdmUgcGx1cyBMYXlvdXRVbml0KGludCkuCiAKLWlubGluZSBGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3IvPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxv
YXQgYikKK2lubGluZSBMYXlvdXRVbml0JiBvcGVyYXRvci89KExheW91dFVuaXQmIGEsIGZsb2F0
IGIpCiB7CiAgICAgYSA9IGEgLyBiOwogICAgIHJldHVybiBhOwogfQogCi1pbmxpbmUgZmxvYXQm
IG9wZXJhdG9yLz0oZmxvYXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5s
aW5lIGZsb2F0JiBvcGVyYXRvci89KGZsb2F0JiBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewog
ICAgIGEgPSBhIC8gYjsKICAgICByZXR1cm4gYTsKIH0KIAotaW5saW5lIGludCBzbmFwU2l6ZVRv
UGl4ZWwoRnJhY3Rpb25hbExheW91dFVuaXQgc2l6ZSwgRnJhY3Rpb25hbExheW91dFVuaXQgbG9j
YXRpb24pIAoraW5saW5lIGludCBzbmFwU2l6ZVRvUGl4ZWwoTGF5b3V0VW5pdCBzaXplLCBMYXlv
dXRVbml0IGxvY2F0aW9uKSAKIHsKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBmcmFjdGlvbiA9
IGxvY2F0aW9uLmZyYWN0aW9uKCk7CisgICAgTGF5b3V0VW5pdCBmcmFjdGlvbiA9IGxvY2F0aW9u
LmZyYWN0aW9uKCk7CiAgICAgcmV0dXJuIChmcmFjdGlvbiArIHNpemUpLnJvdW5kKCkgLSBmcmFj
dGlvbi5yb3VuZCgpOwogfQogCisKK2lubGluZSBpbnQgcm91bmRUb0ludChMYXlvdXRVbml0IHZh
bHVlKQoreworICAgIHJldHVybiB2YWx1ZS5yb3VuZCgpOworfQorCitpbmxpbmUgaW50IGZsb29y
VG9JbnQoTGF5b3V0VW5pdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUuZmxvb3IoKTsKK30K
KworaW5saW5lIExheW91dFVuaXQgcm91bmRlZExheW91dFVuaXQoZmxvYXQgdmFsdWUpCit7Cisj
aWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKKyAgICByZXR1cm4gTGF5b3V0VW5pdDo6ZnJvbUZs
b2F0Um91bmQodmFsdWUpOworI2Vsc2UKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihscm91
bmRmKHZhbHVlKSk7CisjZW5kaWYKK30KKworaW5saW5lIExheW91dFVuaXQgY2VpbGVkTGF5b3V0
VW5pdChmbG9hdCB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIHJl
dHVybiBMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKHZhbHVlKTsKKyNlbHNlCisgICAgcmV0dXJu
IGNlaWxmKHZhbHVlKTsKKyNlbmRpZgorfQorCitpbmxpbmUgTGF5b3V0VW5pdCBsYXlvdXRNb2Qo
Y29uc3QgTGF5b3V0VW5pdCYgbnVtZXJhdG9yLCBjb25zdCBMYXlvdXRVbml0JiBkZW5vbWluYXRv
cikKK3sKKyAgICByZXR1cm4gbnVtZXJhdG9yICUgZGVub21pbmF0b3I7Cit9CisKK2lubGluZSBi
b29sIGlzSW50ZWdlclZhbHVlKGNvbnN0IExheW91dFVuaXQgdmFsdWUpCit7CisgICAgcmV0dXJu
IHZhbHVlLnRvSW50KCkgPT0gdmFsdWU7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
Ci0jZW5kaWYgLy8gRnJhY3Rpb25hbExheW91dFVuaXRfaAorI2VuZGlmIC8vIExheW91dFVuaXRf
aApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmgJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2
NCw3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHQgIT0gQ2FsY3VsYXRlZCk7CiAgICAgfQog
ICAgIAotICAgIExlbmd0aChGcmFjdGlvbmFsTGF5b3V0VW5pdCB2LCBMZW5ndGhUeXBlIHQsIGJv
b2wgcSA9IGZhbHNlKQorICAgIExlbmd0aChMYXlvdXRVbml0IHYsIExlbmd0aFR5cGUgdCwgYm9v
bCBxID0gZmFsc2UpCiAgICAgICAgIDogbV9mbG9hdFZhbHVlKHYudG9GbG9hdCgpKSwgbV9xdWly
ayhxKSwgbV90eXBlKHQpLCBtX2lzRmxvYXQodHJ1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCh0
ICE9IENhbGN1bGF0ZWQpOwpAQCAtMTcyLDcgKzE3Miw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9p
c0Zsb2F0ID0gdHJ1ZTsgICAgCiAgICAgfQogCi0gICAgdm9pZCBzZXRWYWx1ZShMZW5ndGhUeXBl
IHQsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKQorICAgIHZvaWQgc2V0VmFsdWUoTGVuZ3Ro
VHlwZSB0LCBMYXlvdXRVbml0IHZhbHVlKQogICAgIHsKICAgICAgICAgbV90eXBlID0gdDsKICAg
ICAgICAgbV9mbG9hdFZhbHVlID0gdmFsdWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Qb3B1cE1lbnVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Qb3B1cE1lbnVDbGllbnQuaAkocmV2aXNpb24gMTMzNTM5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUG9wdXBNZW51Q2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcg
QEAKICNpZm5kZWYgUG9wdXBNZW51Q2xpZW50X2gKICNkZWZpbmUgUG9wdXBNZW51Q2xpZW50X2gK
IAotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgogI2lu
Y2x1ZGUgIlBvcHVwTWVudVN0eWxlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0
aW9uL0FuaW1hdGlvblV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb25VdGlsaXRpZXMuaAkocmV2aXNpb24gMTMzNTM5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvblV0aWxpdGllcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBACiAjaWZuZGVmIEFuaW1hdGlvblV0aWxp
dGllc19oCiAjZGVmaW5lIEFuaW1hdGlvblV0aWxpdGllc19oCiAKLSNpbmNsdWRlICJGcmFjdGlv
bmFsTGF5b3V0VW5pdC5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiTGF5b3V0
VW5pdC5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTUyLDcgKzUyLDcgQEAgaW5saW5lIGZsb2F0IGJsZW5kKGZsb2F0IGZyb20sIGZsb2F0
IHRvLAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oZnJvbSArICh0byAtIGZyb20pICog
cHJvZ3Jlc3MpOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgYmxlbmQoRnJhY3Rp
b25hbExheW91dFVuaXQgZnJvbSwgRnJhY3Rpb25hbExheW91dFVuaXQgdG8sIGRvdWJsZSBwcm9n
cmVzcykKK2lubGluZSBMYXlvdXRVbml0IGJsZW5kKExheW91dFVuaXQgZnJvbSwgTGF5b3V0VW5p
dCB0bywgZG91YmxlIHByb2dyZXNzKQogeyAgCiAgICAgcmV0dXJuIGZyb20gKyAodG8gLSBmcm9t
KSAqIHByb2dyZXNzOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRQb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRQb2ludC5jcHAJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwx
MCArMjgsMTAgQEAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAKICNpbmNsdWRlICJBZmZpbmVU
cmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCIKICNpbmNsdWRl
ICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0U2l6ZS5oIgog
I2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiTGF5b3V0UG9pbnQuaCIKKyNpbmNsdWRl
ICJMYXlvdXRTaXplLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNs
dWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8bWF0aC5oPgpAQCAtNDIsNyArNDIsNyBAQCBGbG9hdFBv
aW50OjpGbG9hdFBvaW50KGNvbnN0IEludFBvaW50JiBwCiB7CiB9CiAKLUZsb2F0UG9pbnQ6OkZs
b2F0UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBwKSA6IG1feChwLngoKSksIG1f
eShwLnkoKSkKK0Zsb2F0UG9pbnQ6OkZsb2F0UG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHApIDog
bV94KHAueCgpKSwgbV95KHAueSgpKQogewogfQogCkBAIC02MSwxMyArNjEsMTMgQEAgZmxvYXQg
RmxvYXRQb2ludDo6bGVuZ3RoKCkgY29uc3QKICAgICByZXR1cm4gc3FydGYobGVuZ3RoU3F1YXJl
ZCgpKTsKIH0KIAotdm9pZCBGbG9hdFBvaW50Ojptb3ZlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRT
aXplJiBzaXplKQordm9pZCBGbG9hdFBvaW50Ojptb3ZlKGNvbnN0IExheW91dFNpemUmIHNpemUp
CiB7CiAgICAgbV94ICs9IHNpemUud2lkdGgoKTsKICAgICBtX3kgKz0gc2l6ZS5oZWlnaHQoKTsK
IH0KIAotdm9pZCBGbG9hdFBvaW50Ojptb3ZlQnkoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50
JiBwb2ludCkKK3ZvaWQgRmxvYXRQb2ludDo6bW92ZUJ5KGNvbnN0IExheW91dFBvaW50JiBwb2lu
dCkKIHsKICAgICBtX3ggKz0gcG9pbnQueCgpOwogICAgIG1feSArPSBwb2ludC55KCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCShyZXZp
c2lvbiAxMzM1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBv
aW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDE1ICs2OCwxNSBAQCBjbGFzcyBBZmZpbmVUcmFu
c2Zvcm07CiBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIGNsYXNzIEludFBvaW50OwogY2xh
c3MgSW50U2l6ZTsKLWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRQb2ludDsKLWNsYXNzIEZyYWN0aW9u
YWxMYXlvdXRTaXplOworY2xhc3MgTGF5b3V0UG9pbnQ7CitjbGFzcyBMYXlvdXRTaXplOwogCiBj
bGFzcyBGbG9hdFBvaW50IHsKIHB1YmxpYzoKICAgICBGbG9hdFBvaW50KCkgOiBtX3goMCksIG1f
eSgwKSB7IH0KICAgICBGbG9hdFBvaW50KGZsb2F0IHgsIGZsb2F0IHkpIDogbV94KHgpLCBtX3ko
eSkgeyB9CiAgICAgRmxvYXRQb2ludChjb25zdCBJbnRQb2ludCYpOwotICAgIEZsb2F0UG9pbnQo
Y29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50Jik7CisgICAgRmxvYXRQb2ludChjb25zdCBMYXlv
dXRQb2ludCYpOwogICAgIGV4cGxpY2l0IEZsb2F0UG9pbnQoY29uc3QgRmxvYXRTaXplJiBzaXpl
KSA6IG1feChzaXplLndpZHRoKCkpLCBtX3koc2l6ZS5oZWlnaHQoKSkgeyB9CiAKICAgICBzdGF0
aWMgRmxvYXRQb2ludCB6ZXJvKCkgeyByZXR1cm4gRmxvYXRQb2ludCgpOyB9CkBAIC0xMDMsNyAr
MTAzLDcgQEAgcHVibGljOgogICAgICAgICBtX3ggKz0gYS53aWR0aCgpOwogICAgICAgICBtX3kg
Kz0gYS5oZWlnaHQoKTsKICAgICB9Ci0gICAgdm9pZCBtb3ZlKGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRTaXplJik7CisgICAgdm9pZCBtb3ZlKGNvbnN0IExheW91dFNpemUmKTsKICAgICB2b2lkIG1v
dmUoY29uc3QgRmxvYXRTaXplJiBhKQogICAgIHsKICAgICAgICAgbV94ICs9IGEud2lkdGgoKTsK
QEAgLTExNCw3ICsxMTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1feCArPSBhLngoKTsKICAgICAg
ICAgbV95ICs9IGEueSgpOwogICAgIH0KLSAgICB2b2lkIG1vdmVCeShjb25zdCBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQmKTsKKyAgICB2b2lkIG1vdmVCeShjb25zdCBMYXlvdXRQb2ludCYpOwogICAg
IHZvaWQgbW92ZUJ5KGNvbnN0IEZsb2F0UG9pbnQmIGEpCiAgICAgewogICAgICAgICBtX3ggKz0g
YS54KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UmVjdC5jcHAJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UmVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAKICNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKIAogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2lu
Y2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8bWF0
aC5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC00Myw3ICs0Myw3IEBAIEZsb2F0
UmVjdDo6RmxvYXRSZWN0KGNvbnN0IEludFJlY3QmIHIpIDoKIHsKIH0KIAotRmxvYXRSZWN0OjpG
bG9hdFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIHIpIDogbV9sb2NhdGlvbihyLmxv
Y2F0aW9uKCkpLCBtX3NpemUoci5zaXplKCkpCitGbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBM
YXlvdXRSZWN0JiByKSA6IG1fbG9jYXRpb24oci5sb2NhdGlvbigpKSwgbV9zaXplKHIuc2l6ZSgp
KQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFJlY3QuaAkocmV2aXNpb24gMTMzNTM5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgVkdSZWN0OwogI2VuZGlmCiAKLWNsYXNzIEZyYWN0aW9uYWxM
YXlvdXRSZWN0OworY2xhc3MgTGF5b3V0UmVjdDsKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBJbnRQ
b2ludDsKIApAQCAtOTEsNyArOTEsNyBAQCBwdWJsaWM6CiAgICAgRmxvYXRSZWN0KGZsb2F0IHgs
IGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpCiAgICAgICAgIDogbV9sb2NhdGlv
bihGbG9hdFBvaW50KHgsIHkpKSwgbV9zaXplKEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkgeyB9
CiAgICAgRmxvYXRSZWN0KGNvbnN0IEludFJlY3QmKTsKLSAgICBGbG9hdFJlY3QoY29uc3QgRnJh
Y3Rpb25hbExheW91dFJlY3QmKTsKKyAgICBGbG9hdFJlY3QoY29uc3QgTGF5b3V0UmVjdCYpOwog
CiAgICAgc3RhdGljIEZsb2F0UmVjdCBuYXJyb3dQcmVjaXNpb24oZG91YmxlIHgsIGRvdWJsZSB5
LCBkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5jcHAJKHJldmlzaW9uIDEzMzUzOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDkgKzI3LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJG
bG9hdFNpemUuaCIKIAotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRTaXplLmgiCiAjaW5jbHVk
ZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIkxh
eW91dFNpemUuaCIKICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8bWF0aC5oPgogCkBAIC00
MSw3ICs0MSw3IEBAIEZsb2F0U2l6ZTo6RmxvYXRTaXplKGNvbnN0IEludFNpemUmIHNpemUKIHsK
IH0KIAotRmxvYXRTaXplOjpGbG9hdFNpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNp
emUpIDogbV93aWR0aChzaXplLndpZHRoKCkpLCBtX2hlaWdodChzaXplLmhlaWdodCgpKQorRmxv
YXRTaXplOjpGbG9hdFNpemUoY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkgOiBtX3dpZHRoKHNpemUu
d2lkdGgoKSksIG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCShyZXZpc2lvbiAxMzM1Mzkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjAsMTQgKzYwLDE0IEBAIHR5cGVkZWYgc3RydWN0IF9OU1NpemUgTlNTaXpl
OwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbnRTaXplOwotY2xhc3MgRnJhY3Rpb25h
bExheW91dFNpemU7CitjbGFzcyBMYXlvdXRTaXplOwogCiBjbGFzcyBGbG9hdFNpemUgewogcHVi
bGljOgogICAgIEZsb2F0U2l6ZSgpIDogbV93aWR0aCgwKSwgbV9oZWlnaHQoMCkgeyB9CiAgICAg
RmxvYXRTaXplKGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpIDogbV93aWR0aCh3aWR0aCksIG1f
aGVpZ2h0KGhlaWdodCkgeyB9CiAgICAgRmxvYXRTaXplKGNvbnN0IEludFNpemUmKTsKLSAgICBG
bG9hdFNpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmKTsKKyAgICBGbG9hdFNpemUoY29u
c3QgTGF5b3V0U2l6ZSYpOwogCiAgICAgc3RhdGljIEZsb2F0U2l6ZSBuYXJyb3dQcmVjaXNpb24o
ZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dEJveEV4
dGVudC5jcHAJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDE5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5
b3V0Qm94RXh0ZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRnJhY3Rpb25hbExheW91
dFVuaXQgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6bG9naWNhbFRvcChXcml0aW5nTW9kZSB3
cml0aW5nTW9kZSkgY29uc3QKLXsKLSAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
d3JpdGluZ01vZGUpID8gbV90b3AgOiBtX2xlZnQ7Ci19Ci0KLUZyYWN0aW9uYWxMYXlvdXRVbml0
IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmxvZ2ljYWxCb3R0b20oV3JpdGluZ01vZGUgd3Jp
dGluZ01vZGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdy
aXRpbmdNb2RlKSA/IG1fYm90dG9tIDogbV9yaWdodDsKLX0KLQotRnJhY3Rpb25hbExheW91dFVu
aXQgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6bG9naWNhbExlZnQoV3JpdGluZ01vZGUgd3Jp
dGluZ01vZGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdy
aXRpbmdNb2RlKSA/IG1fbGVmdCA6IG1fdG9wOwotfQotCi1GcmFjdGlvbmFsTGF5b3V0VW5pdCBG
cmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Ojpsb2dpY2FsUmlnaHQoV3JpdGluZ01vZGUgd3JpdGlu
Z01vZGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRp
bmdNb2RlKSA/IG1fcmlnaHQgOiBtX2JvdHRvbTsKLX0KLQotRnJhY3Rpb25hbExheW91dFVuaXQg
RnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6YmVmb3JlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2Rl
KSBjb25zdAotewotICAgIHN3aXRjaCAod3JpdGluZ01vZGUpIHsKLSAgICBjYXNlIFRvcFRvQm90
dG9tV3JpdGluZ01vZGU6Ci0gICAgICAgIHJldHVybiBtX3RvcDsKLSAgICBjYXNlIEJvdHRvbVRv
VG9wV3JpdGluZ01vZGU6Ci0gICAgICAgIHJldHVybiBtX2JvdHRvbTsKLSAgICBjYXNlIExlZnRU
b1JpZ2h0V3JpdGluZ01vZGU6Ci0gICAgICAgIHJldHVybiBtX2xlZnQ7Ci0gICAgY2FzZSBSaWdo
dFRvTGVmdFdyaXRpbmdNb2RlOgotICAgICAgICByZXR1cm4gbV9yaWdodDsKLSAgICB9Ci0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG1fdG9wOwotfQotCi1GcmFjdGlvbmFs
TGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjphZnRlcihXcml0aW5nTW9kZSB3
cml0aW5nTW9kZSkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKHdyaXRpbmdNb2RlKSB7Ci0gICAgY2Fz
ZSBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlOgotICAgICAgICByZXR1cm4gbV9ib3R0b207Ci0gICAg
Y2FzZSBCb3R0b21Ub1RvcFdyaXRpbmdNb2RlOgotICAgICAgICByZXR1cm4gbV90b3A7Ci0gICAg
Y2FzZSBMZWZ0VG9SaWdodFdyaXRpbmdNb2RlOgotICAgICAgICByZXR1cm4gbV9yaWdodDsKLSAg
ICBjYXNlIFJpZ2h0VG9MZWZ0V3JpdGluZ01vZGU6Ci0gICAgICAgIHJldHVybiBtX2xlZnQ7Ci0g
ICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBtX2JvdHRvbTsKLX0K
LQotRnJhY3Rpb25hbExheW91dFVuaXQgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6c3RhcnQo
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdAot
ewotICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpCi0gICAgICAg
IHJldHVybiBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKGRpcmVjdGlvbikgPyBtX2xlZnQgOiBtX3Jp
Z2h0OwotICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKGRpcmVjdGlvbikgPyBtX3Rv
cCA6IG1fYm90dG9tOwotfQotCi1GcmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0
Qm94RXh0ZW50OjplbmQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24gZGly
ZWN0aW9uKSBjb25zdAotewotICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5n
TW9kZSkpCi0gICAgICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKGRpcmVjdGlvbikg
PyBtX3JpZ2h0IDogbV9sZWZ0OwotICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKGRp
cmVjdGlvbikgPyBtX2JvdHRvbSA6IG1fdG9wOwotfQotCi12b2lkIEZyYWN0aW9uYWxMYXlvdXRC
b3hFeHRlbnQ6OnNldEJlZm9yZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgRnJhY3Rpb25hbExh
eW91dFVuaXQgdmFsdWUpCi17Ci0gICAgc3dpdGNoICh3cml0aW5nTW9kZSkgewotICAgIGNhc2Ug
VG9wVG9Cb3R0b21Xcml0aW5nTW9kZToKLSAgICAgICAgbV90b3AgPSB2YWx1ZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBCb3R0b21Ub1RvcFdyaXRpbmdNb2RlOgotICAgICAgICBtX2JvdHRv
bSA9IHZhbHVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExlZnRUb1JpZ2h0V3JpdGluZ01v
ZGU6Ci0gICAgICAgIG1fbGVmdCA9IHZhbHVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJp
Z2h0VG9MZWZ0V3JpdGluZ01vZGU6Ci0gICAgICAgIG1fcmlnaHQgPSB2YWx1ZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIG1fdG9wID0gdmFsdWU7Ci0gICAgfQotfQotCi12b2lkIEZyYWN0aW9uYWxMYXlvdXRCb3hF
eHRlbnQ6OnNldEFmdGVyKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCB2YWx1ZSkKLXsKLSAgICBzd2l0Y2ggKHdyaXRpbmdNb2RlKSB7Ci0gICAgY2FzZSBUb3BU
b0JvdHRvbVdyaXRpbmdNb2RlOgotICAgICAgICBtX2JvdHRvbSA9IHZhbHVlOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEJvdHRvbVRvVG9wV3JpdGluZ01vZGU6Ci0gICAgICAgIG1fdG9wID0g
dmFsdWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGVmdFRvUmlnaHRXcml0aW5nTW9kZToK
LSAgICAgICAgbV9yaWdodCA9IHZhbHVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJpZ2h0
VG9MZWZ0V3JpdGluZ01vZGU6Ci0gICAgICAgIG1fbGVmdCA9IHZhbHVlOwotICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
bV9ib3R0b20gPSB2YWx1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgRnJhY3Rpb25hbExheW91dEJveEV4
dGVudDo6c2V0U3RhcnQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24gZGly
ZWN0aW9uLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCB2YWx1ZSkKLXsKLSAgICBpZiAoaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKSB7Ci0gICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKGRpcmVjdGlvbikpCi0gICAgICAgICAgICBtX2xlZnQgPSB2YWx1ZTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbV9yaWdodCA9IHZhbHVlOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKGRpcmVjdGlvbikpCi0gICAgICAgICAgICBt
X3RvcCA9IHZhbHVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2JvdHRvbSA9IHZhbHVl
OwotICAgIH0KLX0KLQotdm9pZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzZXRFbmQoV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCB2YWx1ZSkKLXsKLSAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3Jp
dGluZ01vZGUpKSB7Ci0gICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKGRpcmVjdGlv
bikpCi0gICAgICAgICAgICBtX3JpZ2h0ID0gdmFsdWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG1fbGVmdCA9IHZhbHVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChpc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKGRpcmVjdGlvbikpCi0gICAgICAgICAgICBtX2JvdHRvbSA9IHZhbHVlOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3RvcCA9IHZhbHVlOwotICAgIH0KLX0KLQotRnJh
Y3Rpb25hbExheW91dFVuaXQmIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6Om11dGFibGVMb2dp
Y2FsTGVmdChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKLXsKLSAgICByZXR1cm4gaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9sZWZ0IDogbV90b3A7Ci19Ci0KLUZyYWN0
aW9uYWxMYXlvdXRVbml0JiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjptdXRhYmxlTG9naWNh
bFJpZ2h0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQotewotICAgIHJldHVybiBpc0hvcml6b250
YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX3JpZ2h0IDogbV9ib3R0b207Ci19Ci0KLUZy
YWN0aW9uYWxMYXlvdXRVbml0JiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjptdXRhYmxlQmVm
b3JlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQotewotICAgIHJldHVybiBpc0hvcml6b250YWxX
cml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3Jp
dGluZ01vZGUpID8gbV9ib3R0b20gOiBtX3RvcCkgOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3Jp
dGluZ01vZGUpID8gbV9yaWdodDogbV9sZWZ0KTsKLX0KLQotRnJhY3Rpb25hbExheW91dFVuaXQm
IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6Om11dGFibGVBZnRlcihXcml0aW5nTW9kZSB3cml0
aW5nTW9kZSkKLXsKLSAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01v
ZGUpID8gKGlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fdG9wIDog
bV9ib3R0b20pIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fbGVmdDog
bV9yaWdodCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0
Qm94RXh0ZW50LmgJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgRnJhY3Rpb25hbExheW91dEJveEV4dGVudF9oCi0jZGVmaW5l
IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnRfaAotCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91
dFVuaXQuaCIKLSNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCi0jaW5jbHVkZSAiV3JpdGluZ01v
ZGUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0Qm94
RXh0ZW50IHsKLXB1YmxpYzoKLSAgICBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50KCkgOiBtX3Rv
cCgwKSwgbV9yaWdodCgwKSwgbV9ib3R0b20oMCksIG1fbGVmdCgwKSB7IH0KLSAgICBGcmFjdGlv
bmFsTGF5b3V0Qm94RXh0ZW50KEZyYWN0aW9uYWxMYXlvdXRVbml0IHRvcCwgRnJhY3Rpb25hbExh
eW91dFVuaXQgcmlnaHQsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGJvdHRvbSwgRnJhY3Rpb25hbExh
eW91dFVuaXQgbGVmdCkKLSAgICAgICAgOiBtX3RvcCh0b3ApLCBtX3JpZ2h0KHJpZ2h0KSwgbV9i
b3R0b20oYm90dG9tKSwgbV9sZWZ0KGxlZnQpIHsgfQotCi0gICAgaW5saW5lIEZyYWN0aW9uYWxM
YXlvdXRVbml0IHRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wOyB9Ci0gICAgaW5saW5lIEZyYWN0
aW9uYWxMYXlvdXRVbml0IHJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yaWdodDsgfQotICAgIGlu
bGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBib3R0b20oKSBjb25zdCB7IHJldHVybiBtX2JvdHRv
bTsgfQotICAgIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBsZWZ0KCkgY29uc3QgeyByZXR1
cm4gbV9sZWZ0OyB9Ci0KLSAgICBpbmxpbmUgdm9pZCBzZXRUb3AoRnJhY3Rpb25hbExheW91dFVu
aXQgdmFsdWUpIHsgbV90b3AgPSB2YWx1ZTsgfQotICAgIGlubGluZSB2b2lkIHNldFJpZ2h0KEZy
YWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKSB7IG1fcmlnaHQgPSB2YWx1ZTsgfQotICAgIGlubGlu
ZSB2b2lkIHNldEJvdHRvbShGcmFjdGlvbmFsTGF5b3V0VW5pdCB2YWx1ZSkgeyBtX2JvdHRvbSA9
IHZhbHVlOyB9Ci0gICAgaW5saW5lIHZvaWQgc2V0TGVmdChGcmFjdGlvbmFsTGF5b3V0VW5pdCB2
YWx1ZSkgeyBtX2xlZnQgPSB2YWx1ZTsgfQotCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgbG9n
aWNhbFRvcChXcml0aW5nTW9kZSkgY29uc3Q7Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgbG9n
aWNhbEJvdHRvbShXcml0aW5nTW9kZSkgY29uc3Q7Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQg
bG9naWNhbExlZnQoV3JpdGluZ01vZGUpIGNvbnN0OwotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
IGxvZ2ljYWxSaWdodChXcml0aW5nTW9kZSkgY29uc3Q7Ci0KLSAgICBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBiZWZvcmUoV3JpdGluZ01vZGUpIGNvbnN0OwotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
IGFmdGVyKFdyaXRpbmdNb2RlKSBjb25zdDsKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBzdGFy
dChXcml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbikgY29uc3Q7Ci0gICAgRnJhY3Rpb25hbExheW91
dFVuaXQgZW5kKFdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uKSBjb25zdDsKLQotICAgIHZvaWQg
c2V0QmVmb3JlKFdyaXRpbmdNb2RlLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCk7Ci0gICAgdm9pZCBz
ZXRBZnRlcihXcml0aW5nTW9kZSwgRnJhY3Rpb25hbExheW91dFVuaXQpOwotICAgIHZvaWQgc2V0
U3RhcnQoV3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24sIEZyYWN0aW9uYWxMYXlvdXRVbml0KTsK
LSAgICB2b2lkIHNldEVuZChXcml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiwgRnJhY3Rpb25hbExh
eW91dFVuaXQpOwotCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQmIG11dGFibGVMb2dpY2FsTGVm
dChXcml0aW5nTW9kZSk7Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQmIG11dGFibGVMb2dpY2Fs
UmlnaHQoV3JpdGluZ01vZGUpOwotCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQmIG11dGFibGVC
ZWZvcmUoV3JpdGluZ01vZGUpOwotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBtdXRhYmxlQWZ0
ZXIoV3JpdGluZ01vZGUpOwotCi1wcml2YXRlOgotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1f
dG9wOwotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1fcmlnaHQ7Ci0gICAgRnJhY3Rpb25hbExh
eW91dFVuaXQgbV9ib3R0b207Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgbV9sZWZ0OwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRnJhY3Rpb25hbExheW91dEJv
eEV4dGVudF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlv
bmFsTGF5b3V0UG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UG9pbnQuaAkocmV2aXNpb24gMTMzNTM5KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFBvaW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTkyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTIs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBGcmFjdGlvbmFsTGF5b3V0UG9p
bnRfaAotI2RlZmluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnRfaAotCi0jaW5jbHVkZSAiRmxvYXRQ
b2ludC5oIgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRTaXplLmgiCi0jaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KLQotI2lmIFBMQVRGT1JNKFFUKQotI2luY2x1ZGUgPHFnbG9iYWwuaD4K
LVFUX0JFR0lOX05BTUVTUEFDRQotY2xhc3MgUVBvaW50OwotY2xhc3MgUVBvaW50RjsKLVFUX0VO
RF9OQU1FU1BBQ0UKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZyYWN0
aW9uYWxMYXlvdXRQb2ludCB7Ci1wdWJsaWM6Ci0gICAgRnJhY3Rpb25hbExheW91dFBvaW50KCkg
OiBtX3goMCksIG1feSgwKSB7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoRnJhY3Rpb25h
bExheW91dFVuaXQgeCwgRnJhY3Rpb25hbExheW91dFVuaXQgeSkgOiBtX3goeCksIG1feSh5KSB7
IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KSA6IG1f
eChwb2ludC54KCkpLCBtX3kocG9pbnQueSgpKSB7IH0KLSAgICBleHBsaWNpdCBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgc2l6ZSkgOiBtX3goc2l6ZS54KCkpLCBtX3ko
c2l6ZS55KCkpIHsgfQotICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRQb2ludChjb25zdCBG
cmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkgOiBtX3goc2l6ZS53aWR0aCgpKSwgbV95KHNpemUu
aGVpZ2h0KCkpIHsgfQotCi0gICAgc3RhdGljIEZyYWN0aW9uYWxMYXlvdXRQb2ludCB6ZXJvKCkg
eyByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KCk7IH0KLQotICAgIEZyYWN0aW9uYWxMYXlv
dXRVbml0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9Ci0KLSAgICB2b2lkIHNldFgoRnJhY3Rpb25hbExh
eW91dFVuaXQgeCkgeyBtX3ggPSB4OyB9Ci0gICAgdm9pZCBzZXRZKEZyYWN0aW9uYWxMYXlvdXRV
bml0IHkpIHsgbV95ID0geTsgfQotCi0gICAgdm9pZCBtb3ZlKGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRTaXplJiBzKSB7IG1vdmUocy53aWR0aCgpLCBzLmhlaWdodCgpKTsgfSAKLSAgICB2b2lkIG1v
dmVCeShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIG9mZnNldCkgeyBtb3ZlKG9mZnNldC54
KCksIG9mZnNldC55KCkpOyB9Ci0gICAgdm9pZCBtb3ZlKEZyYWN0aW9uYWxMYXlvdXRVbml0IGR4
LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeSkgeyBtX3ggKz0gZHg7IG1feSArPSBkeTsgfQotICAg
IHZvaWQgc2NhbGUoZmxvYXQgc3gsIGZsb2F0IHN5KQotICAgIHsKLSAgICAgICAgbV94ICo9IHN4
OwotICAgICAgICBtX3kgKj0gc3k7Ci0gICAgfQotICAgIAotICAgIEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCBleHBhbmRlZFRvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgb3RoZXIpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KHN0ZDo6bWF4KG1f
eCwgb3RoZXIubV94KSwgc3RkOjptYXgobV95LCBvdGhlci5tX3kpKTsKLSAgICB9Ci0KLSAgICBG
cmFjdGlvbmFsTGF5b3V0UG9pbnQgc2hydW5rVG8oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50
JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9p
bnQoc3RkOjptaW4obV94LCBvdGhlci5tX3gpLCBzdGQ6Om1pbihtX3ksIG90aGVyLm1feSkpOwot
ICAgIH0KLQotICAgIHZvaWQgY2xhbXBOZWdhdGl2ZVRvWmVybygpCi0gICAgewotICAgICAgICAq
dGhpcyA9IGV4cGFuZGVkVG8oemVybygpKTsKLSAgICB9Ci0KLSAgICBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQgdHJhbnNwb3NlZFBvaW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQobV95LCBtX3gpOwotICAgIH0KLQotI2lmIFBMQVRGT1JNKFFUKQot
ICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRQb2ludChjb25zdCBRUG9pbnQmKTsKLSAgICBl
eHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgUVBvaW50RiYpOwotICAgIG9wZXJh
dG9yIFFQb2ludEYoKSBjb25zdDsKLSNlbmRpZgotCi1wcml2YXRlOgotICAgIEZyYWN0aW9uYWxM
YXlvdXRVbml0IG1feCwgbV95OwotfTsKLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCYg
b3BlcmF0b3IrPShGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRTaXplJiBiKQotewotICAgIGEubW92ZShiLndpZHRoKCksIGIuaGVpZ2h0KCkpOwotICAgIHJl
dHVybiBhOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50JiBvcGVyYXRvci09KEZy
YWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCi17
Ci0gICAgYS5tb3ZlKC1iLndpZHRoKCksIC1iLmhlaWdodCgpKTsKLSAgICByZXR1cm4gYTsKLX0K
LQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBvcGVyYXRvcisoY29uc3QgRnJhY3Rpb25h
bExheW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKLXsKLSAgICBy
ZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KGEueCgpICsgYi53aWR0aCgpLCBhLnkoKSArIGIu
aGVpZ2h0KCkpOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50IG9wZXJhdG9yKyhj
b25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2lu
dCYgYikKLXsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KGEueCgpICsgYi54KCks
IGEueSgpICsgYi55KCkpOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFNpemUgb3BlcmF0
b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91
dFBvaW50JiBiKQotewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShhLngoKSAtIGIu
eCgpLCBhLnkoKSAtIGIueSgpKTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBv
cGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0U2l6ZSYgYikKLXsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KGEueCgp
IC0gYi53aWR0aCgpLCBhLnkoKSAtIGIuaGVpZ2h0KCkpOwotfQotCi1pbmxpbmUgRnJhY3Rpb25h
bExheW91dFBvaW50IG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50
KQotewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoLXBvaW50LngoKSwgLXBvaW50
LnkoKSk7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJhY3Rpb25hbExheW91
dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGIpCi17Ci0gICAgcmV0dXJu
IGEueCgpID09IGIueCgpICYmIGEueSgpID09IGIueSgpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExh
eW91dFBvaW50JiBiKQotewotICAgIHJldHVybiBhLngoKSAhPSBiLngoKSB8fCBhLnkoKSAhPSBi
LnkoKTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCB0b1BvaW50KGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKQotewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLX0KLQotaW5saW5lIEZyYWN0aW9u
YWxMYXlvdXRTaXplIHRvU2l6ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEpCi17Ci0g
ICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKGEueCgpLCBhLnkoKSk7Ci19Ci0KLWlubGlu
ZSBJbnRQb2ludCBmbG9vcmVkSW50UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBw
b2ludCkKLXsKLSAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpLmZsb29yKCksIHBvaW50Lnko
KS5mbG9vcigpKTsKLX0KLQotaW5saW5lIEludFBvaW50IHJvdW5kZWRJbnRQb2ludChjb25zdCBG
cmFjdGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50KQotewotICAgIHJldHVybiBJbnRQb2ludChwb2lu
dC54KCkucm91bmQoKSwgcG9pbnQueSgpLnJvdW5kKCkpOwotfQotCi1pbmxpbmUgSW50UG9pbnQg
cm91bmRlZEludFBvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKQotewotICAg
IHJldHVybiBJbnRQb2ludChzaXplLndpZHRoKCkucm91bmQoKSwgc2l6ZS5oZWlnaHQoKS5yb3Vu
ZCgpKTsKLX0KLQotaW5saW5lIEludFBvaW50IGNlaWxlZEludFBvaW50KGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRQb2ludCYgcG9pbnQpCi17Ci0gICAgcmV0dXJuIEludFBvaW50KHBvaW50LngoKS5j
ZWlsKCksIHBvaW50LnkoKS5jZWlsKCkpOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFBv
aW50IGZsb29yZWRGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkKLXsK
LSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpm
cm9tRmxvYXRGbG9vcihwLngoKSksIEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpmcm9tRmxvYXRGbG9v
cihwLnkoKSkpOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50IGNlaWxlZEZyYWN0
aW9uYWxMYXlvdXRQb2ludChjb25zdCBGbG9hdFBvaW50JiBwKQotewotICAgIHJldHVybiBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQoRnJhY3Rpb25hbExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwocC54
KCkpLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChwLnkoKSkpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBGcmFjdGlvbmFsTGF5b3V0UG9pbnRf
aApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91
dFJlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcAkocmV2aXNpb24gMTMzNTM5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDE0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJG
cmFjdGlvbmFsTGF5b3V0UmVjdC5oIgotCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVk
ZSAiRnJhY3Rpb25hbExheW91dFVuaXQuaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLXVzaW5n
IHN0ZDo6bWF4OwotdXNpbmcgc3RkOjptaW47Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRnJh
Y3Rpb25hbExheW91dFJlY3Q6OkZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cikKLSAgICA6IG1fbG9jYXRpb24oRnJhY3Rpb25hbExheW91dFBvaW50KHIubG9jYXRpb24oKSkp
Ci0gICAgLCBtX3NpemUoRnJhY3Rpb25hbExheW91dFNpemUoci5zaXplKCkpKQotewotfQotCi1i
b29sIEZyYWN0aW9uYWxMYXlvdXRSZWN0OjppbnRlcnNlY3RzKGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRSZWN0JiBvdGhlcikgY29uc3QKLXsKLSAgICAvLyBDaGVja2luZyBlbXB0aW5lc3MgaGFuZGxl
cyBuZWdhdGl2ZSB3aWR0aHMgYXMgd2VsbCBhcyB6ZXJvLgotICAgIHJldHVybiAhaXNFbXB0eSgp
ICYmICFvdGhlci5pc0VtcHR5KCkKLSAgICAgICAgJiYgeCgpIDwgb3RoZXIubWF4WCgpICYmIG90
aGVyLngoKSA8IG1heFgoKQotICAgICAgICAmJiB5KCkgPCBvdGhlci5tYXhZKCkgJiYgb3RoZXIu
eSgpIDwgbWF4WSgpOwotfQotCi1ib29sIEZyYWN0aW9uYWxMYXlvdXRSZWN0Ojpjb250YWlucyhj
b25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHgo
KSA8PSBvdGhlci54KCkgJiYgbWF4WCgpID49IG90aGVyLm1heFgoKQotICAgICAgICAmJiB5KCkg
PD0gb3RoZXIueSgpICYmIG1heFkoKSA+PSBvdGhlci5tYXhZKCk7Ci19Ci0KLXZvaWQgRnJhY3Rp
b25hbExheW91dFJlY3Q6OmludGVyc2VjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgb3Ro
ZXIpCi17Ci0gICAgRnJhY3Rpb25hbExheW91dFBvaW50IG5ld0xvY2F0aW9uKG1heCh4KCksIG90
aGVyLngoKSksIG1heCh5KCksIG90aGVyLnkoKSkpOwotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2lu
dCBuZXdNYXhQb2ludChtaW4obWF4WCgpLCBvdGhlci5tYXhYKCkpLCBtaW4obWF4WSgpLCBvdGhl
ci5tYXhZKCkpKTsKLQotICAgIC8vIFJldHVybiBhIGNsZWFuIGVtcHR5IHJlY3RhbmdsZSBmb3Ig
bm9uLWludGVyc2VjdGluZyBjYXNlcy4KLSAgICBpZiAobmV3TG9jYXRpb24ueCgpID49IG5ld01h
eFBvaW50LngoKSB8fCBuZXdMb2NhdGlvbi55KCkgPj0gbmV3TWF4UG9pbnQueSgpKSB7Ci0gICAg
ICAgIG5ld0xvY2F0aW9uID0gRnJhY3Rpb25hbExheW91dFBvaW50KDAsIDApOwotICAgICAgICBu
ZXdNYXhQb2ludCA9IEZyYWN0aW9uYWxMYXlvdXRQb2ludCgwLCAwKTsKLSAgICB9Ci0KLSAgICBt
X2xvY2F0aW9uID0gbmV3TG9jYXRpb247Ci0gICAgbV9zaXplID0gbmV3TWF4UG9pbnQgLSBuZXdM
b2NhdGlvbjsKLX0KLQotdm9pZCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6dW5pdGUoY29uc3QgRnJh
Y3Rpb25hbExheW91dFJlY3QmIG90aGVyKQotewotICAgIC8vIEhhbmRsZSBlbXB0eSBzcGVjaWFs
IGNhc2VzIGZpcnN0LgotICAgIGlmIChvdGhlci5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBpZiAoaXNFbXB0eSgpKSB7Ci0gICAgICAgICp0aGlzID0gb3RoZXI7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbmV3TG9jYXRpb24obWlu
KHgoKSwgb3RoZXIueCgpKSwgbWluKHkoKSwgb3RoZXIueSgpKSk7Ci0gICAgRnJhY3Rpb25hbExh
eW91dFBvaW50IG5ld01heFBvaW50KG1heChtYXhYKCksIG90aGVyLm1heFgoKSksIG1heChtYXhZ
KCksIG90aGVyLm1heFkoKSkpOwotCi0gICAgbV9sb2NhdGlvbiA9IG5ld0xvY2F0aW9uOwotICAg
IG1fc2l6ZSA9IG5ld01heFBvaW50IC0gbmV3TG9jYXRpb247Ci19Ci0KLXZvaWQgRnJhY3Rpb25h
bExheW91dFJlY3Q6OnVuaXRlSWZOb25aZXJvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBv
dGhlcikKLXsKLSAgICAvLyBIYW5kbGUgZW1wdHkgc3BlY2lhbCBjYXNlcyBmaXJzdC4KLSAgICBp
ZiAoIW90aGVyLndpZHRoKCkgJiYgIW90aGVyLmhlaWdodCgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKCF3aWR0aCgpICYmICFoZWlnaHQoKSkgewotICAgICAgICAqdGhpcyA9IG90aGVyOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRnJhY3Rpb25hbExheW91dFBvaW50IG5ld0xv
Y2F0aW9uKG1pbih4KCksIG90aGVyLngoKSksIG1pbih5KCksIG90aGVyLnkoKSkpOwotICAgIEZy
YWN0aW9uYWxMYXlvdXRQb2ludCBuZXdNYXhQb2ludChtYXgobWF4WCgpLCBvdGhlci5tYXhYKCkp
LCBtYXgobWF4WSgpLCBvdGhlci5tYXhZKCkpKTsKLQotICAgIG1fbG9jYXRpb24gPSBuZXdMb2Nh
dGlvbjsKLSAgICBtX3NpemUgPSBuZXdNYXhQb2ludCAtIG5ld0xvY2F0aW9uOwotfQotCi12b2lk
IEZyYWN0aW9uYWxMYXlvdXRSZWN0OjpzY2FsZShmbG9hdCBzKQotewotICAgIG1fbG9jYXRpb24u
c2NhbGUocywgcyk7Ci0gICAgbV9zaXplLnNjYWxlKHMpOwotfQotCi1GcmFjdGlvbmFsTGF5b3V0
UmVjdCB1bmlvblJlY3QoY29uc3QgVmVjdG9yPEZyYWN0aW9uYWxMYXlvdXRSZWN0PiYgcmVjdHMp
Ci17Ci0gICAgRnJhY3Rpb25hbExheW91dFJlY3QgcmVzdWx0OwotCi0gICAgc2l6ZV90IGNvdW50
ID0gcmVjdHMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkK
LSAgICAgICAgcmVzdWx0LnVuaXRlKHJlY3RzW2ldKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLUludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYg
cmVjdCkKLXsKLSAgICBJbnRQb2ludCBsb2NhdGlvbiA9IGZsb29yZWRJbnRQb2ludChyZWN0Lm1p
blhNaW5ZQ29ybmVyKCkpOwotICAgIEludFBvaW50IG1heFBvaW50ID0gY2VpbGVkSW50UG9pbnQo
cmVjdC5tYXhYTWF4WUNvcm5lcigpKTsKLQotICAgIHJldHVybiBJbnRSZWN0KGxvY2F0aW9uLCBt
YXhQb2ludCAtIGxvY2F0aW9uKTsKLX0KLQotRnJhY3Rpb25hbExheW91dFJlY3QgZW5jbG9zaW5n
RnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotI2lmIEVOQUJM
RShTVUJQSVhFTF9MQVlPVVQpCi0gICAgRnJhY3Rpb25hbExheW91dFBvaW50IGxvY2F0aW9uID0g
Zmxvb3JlZEZyYWN0aW9uYWxMYXlvdXRQb2ludChyZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwotICAg
IEZyYWN0aW9uYWxMYXlvdXRQb2ludCBtYXhQb2ludCA9IGNlaWxlZEZyYWN0aW9uYWxMYXlvdXRQ
b2ludChyZWN0Lm1heFhNYXhZQ29ybmVyKCkpOwotCi0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlv
dXRSZWN0KGxvY2F0aW9uLCBtYXhQb2ludCAtIGxvY2F0aW9uKTsKLSNlbHNlCi0gICAgcmV0dXJu
IGVuY2xvc2luZ0ludFJlY3QocmVjdCk7Ci0jZW5kaWYKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExh
eW91dFJlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5oCShyZXZpc2lvbiAxMzM1MzkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDIyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRnJhY3Rpb25hbExheW91dFJlY3RfaAotI2Rl
ZmluZSBGcmFjdGlvbmFsTGF5b3V0UmVjdF9oCi0KLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0
Qm94RXh0ZW50LmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFBvaW50LmgiCi0jaW5jbHVk
ZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotI2lmIFBMQVRGT1JNKFFU
KQotI2luY2x1ZGUgPHFnbG9iYWwuaD4KLVFUX0JFR0lOX05BTUVTUEFDRQotY2xhc3MgUVJlY3Q7
Ci1jbGFzcyBRUmVjdEY7Ci1RVF9FTkRfTkFNRVNQQUNFCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBGbG9hdFJlY3Q7Ci0KLWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRSZWN0
IHsKLXB1YmxpYzoKLSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCgpIHsgfQotICAgIEZyYWN0aW9u
YWxMYXlvdXRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgbG9jYXRpb24sIGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKQotICAgICAgICA6IG1fbG9jYXRpb24obG9jYXRp
b24pLCBtX3NpemUoc2l6ZSkgeyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFJlY3QoRnJhY3Rpb25h
bExheW91dFVuaXQgeCwgRnJhY3Rpb25hbExheW91dFVuaXQgeSwgRnJhY3Rpb25hbExheW91dFVu
aXQgd2lkdGgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCkKLSAgICAgICAgOiBtX2xvY2F0
aW9uKEZyYWN0aW9uYWxMYXlvdXRQb2ludCh4LCB5KSksIG1fc2l6ZShGcmFjdGlvbmFsTGF5b3V0
U2l6ZSh3aWR0aCwgaGVpZ2h0KSkgeyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3Qg
RmxvYXRQb2ludCYgbG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLSAgICAgICAgOiBt
X2xvY2F0aW9uKGxvY2F0aW9uKSwgbV9zaXplKHNpemUpIHsgfQotICAgIEZyYWN0aW9uYWxMYXlv
dXRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIDogbV9sb2NhdGlvbihyZWN0LmxvY2F0aW9uKCkp
LCBtX3NpemUocmVjdC5zaXplKCkpIHsgfQotCi0gICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91
dFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5j
ZSBpdCdzIGxvc3N5Ci0gICAgICAgIAotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBsb2NhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb247IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0U2l6
ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0KLSAgICBJbnRQb2ludCBwaXhlbFNu
YXBwZWRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHJvdW5kZWRJbnRQb2ludChtX2xvY2F0aW9u
KTsgfQotICAgIEludFNpemUgcGl4ZWxTbmFwcGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIEludFNp
emUoc25hcFNpemVUb1BpeGVsKG1fc2l6ZS53aWR0aCgpLCBtX2xvY2F0aW9uLngoKSksIHNuYXBT
aXplVG9QaXhlbChtX3NpemUuaGVpZ2h0KCksIG1fbG9jYXRpb24ueSgpKSk7IH0KLQotICAgIHZv
aWQgc2V0TG9jYXRpb24oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBsb2NhdGlvbikgeyBt
X2xvY2F0aW9uID0gbG9jYXRpb247IH0KLSAgICB2b2lkIHNldFNpemUoY29uc3QgRnJhY3Rpb25h
bExheW91dFNpemUmIHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQotCi0gICAgRnJhY3Rpb25hbExh
eW91dFVuaXQgeCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb24ueCgpOyB9Ci0gICAgRnJhY3Rp
b25hbExheW91dFVuaXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb24ueSgpOyB9Ci0gICAg
RnJhY3Rpb25hbExheW91dFVuaXQgbWF4WCgpIGNvbnN0IHsgcmV0dXJuIHgoKSArIHdpZHRoKCk7
IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtYXhZKCkgY29uc3QgeyByZXR1cm4geSgpICsg
aGVpZ2h0KCk7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZS53aWR0aCgpOyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplLmhlaWdodCgpOyB9Ci0KLSAgICBpbnQgcGl4ZWxTbmFwcGVk
WCgpIGNvbnN0IHsgcmV0dXJuIHgoKS5yb3VuZCgpOyB9Ci0gICAgaW50IHBpeGVsU25hcHBlZFko
KSBjb25zdCB7IHJldHVybiB5KCkucm91bmQoKTsgfQotICAgIGludCBwaXhlbFNuYXBwZWRXaWR0
aCgpIGNvbnN0IHsgcmV0dXJuIHNuYXBTaXplVG9QaXhlbCh3aWR0aCgpLCB4KCkpOyB9Ci0gICAg
aW50IHBpeGVsU25hcHBlZEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIHNuYXBTaXplVG9QaXhlbCho
ZWlnaHQoKSwgeSgpKTsgfQotICAgIGludCBwaXhlbFNuYXBwZWRNYXhYKCkgY29uc3QgeyByZXR1
cm4gKG1fbG9jYXRpb24ueCgpICsgbV9zaXplLndpZHRoKCkpLnJvdW5kKCk7IH0KLSAgICBpbnQg
cGl4ZWxTbmFwcGVkTWF4WSgpIGNvbnN0IHsgcmV0dXJuIChtX2xvY2F0aW9uLnkoKSArIG1fc2l6
ZS5oZWlnaHQoKSkucm91bmQoKTsgfQotCi0gICAgdm9pZCBzZXRYKEZyYWN0aW9uYWxMYXlvdXRV
bml0IHgpIHsgbV9sb2NhdGlvbi5zZXRYKHgpOyB9Ci0gICAgdm9pZCBzZXRZKEZyYWN0aW9uYWxM
YXlvdXRVbml0IHkpIHsgbV9sb2NhdGlvbi5zZXRZKHkpOyB9Ci0gICAgdm9pZCBzZXRXaWR0aChG
cmFjdGlvbmFsTGF5b3V0VW5pdCB3aWR0aCkgeyBtX3NpemUuc2V0V2lkdGgod2lkdGgpOyB9Ci0g
ICAgdm9pZCBzZXRIZWlnaHQoRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KSB7IG1fc2l6ZS5z
ZXRIZWlnaHQoaGVpZ2h0KTsgfQotCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4g
bV9zaXplLmlzRW1wdHkoKTsgfQotCi0gICAgLy8gTk9URTogVGhlIHJlc3VsdCBpcyByb3VuZGVk
IHRvIGludGVnZXIgdmFsdWVzLCBhbmQgdGh1cyBtYXkgYmUgbm90IHRoZSBleGFjdAotICAgIC8v
IGNlbnRlciBwb2ludC4KLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgY2VudGVyKCkgY29uc3Qg
eyByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KHgoKSArIHdpZHRoKCkgLyAyLCB5KCkgKyBo
ZWlnaHQoKSAvIDIpOyB9Ci0KLSAgICB2b2lkIG1vdmUoY29uc3QgRnJhY3Rpb25hbExheW91dFNp
emUmIHNpemUpIHsgbV9sb2NhdGlvbiArPSBzaXplOyB9IAotICAgIHZvaWQgbW92ZUJ5KGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgb2Zmc2V0KSB7IG1fbG9jYXRpb24ubW92ZShvZmZzZXQu
eCgpLCBvZmZzZXQueSgpKTsgfQotICAgIHZvaWQgbW92ZShGcmFjdGlvbmFsTGF5b3V0VW5pdCBk
eCwgRnJhY3Rpb25hbExheW91dFVuaXQgZHkpIHsgbV9sb2NhdGlvbi5tb3ZlKGR4LCBkeSk7IH0g
Ci0KLSAgICB2b2lkIGV4cGFuZChjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkgeyBt
X3NpemUgKz0gc2l6ZTsgfQotICAgIHZvaWQgZXhwYW5kKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRC
b3hFeHRlbnQmIGJveCkKLSAgICB7Ci0gICAgICAgIG1fbG9jYXRpb24ubW92ZSgtYm94LmxlZnQo
KSwgLWJveC50b3AoKSk7Ci0gICAgICAgIG1fc2l6ZS5leHBhbmQoYm94LmxlZnQoKSArIGJveC5y
aWdodCgpLCBib3gudG9wKCkgKyBib3guYm90dG9tKCkpOwotICAgIH0KLSAgICB2b2lkIGV4cGFu
ZChGcmFjdGlvbmFsTGF5b3V0VW5pdCBkdywgRnJhY3Rpb25hbExheW91dFVuaXQgZGgpIHsgbV9z
aXplLmV4cGFuZChkdywgZGgpOyB9Ci0gICAgdm9pZCBjb250cmFjdChjb25zdCBGcmFjdGlvbmFs
TGF5b3V0U2l6ZSYgc2l6ZSkgeyBtX3NpemUgLT0gc2l6ZTsgfQotICAgIHZvaWQgY29udHJhY3Qo
RnJhY3Rpb25hbExheW91dFVuaXQgZHcsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRoKSB7IG1fc2l6
ZS5leHBhbmQoLWR3LCAtZGgpOyB9Ci0KLSAgICB2b2lkIHNoaWZ0WEVkZ2VUbyhGcmFjdGlvbmFs
TGF5b3V0VW5pdCBlZGdlKQotICAgIHsKLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZGVs
dGEgPSBlZGdlIC0geCgpOwotICAgICAgICBzZXRYKGVkZ2UpOwotICAgICAgICBzZXRXaWR0aChz
dGQ6Om1heDxGcmFjdGlvbmFsTGF5b3V0VW5pdD4oMCwgd2lkdGgoKSAtIGRlbHRhKSk7Ci0gICAg
fQotICAgIHZvaWQgc2hpZnRNYXhYRWRnZVRvKEZyYWN0aW9uYWxMYXlvdXRVbml0IGVkZ2UpCi0g
ICAgewotICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkZWx0YSA9IGVkZ2UgLSBtYXhYKCk7
Ci0gICAgICAgIHNldFdpZHRoKHN0ZDo6bWF4PEZyYWN0aW9uYWxMYXlvdXRVbml0PigwLCB3aWR0
aCgpICsgZGVsdGEpKTsKLSAgICB9Ci0gICAgdm9pZCBzaGlmdFlFZGdlVG8oRnJhY3Rpb25hbExh
eW91dFVuaXQgZWRnZSkKLSAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRlbHRh
ID0gZWRnZSAtIHkoKTsKLSAgICAgICAgc2V0WShlZGdlKTsKLSAgICAgICAgc2V0SGVpZ2h0KHN0
ZDo6bWF4PEZyYWN0aW9uYWxMYXlvdXRVbml0PigwLCBoZWlnaHQoKSAtIGRlbHRhKSk7Ci0gICAg
fQotICAgIHZvaWQgc2hpZnRNYXhZRWRnZVRvKEZyYWN0aW9uYWxMYXlvdXRVbml0IGVkZ2UpCi0g
ICAgewotICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkZWx0YSA9IGVkZ2UgLSBtYXhZKCk7
Ci0gICAgICAgIHNldEhlaWdodChzdGQ6Om1heDxGcmFjdGlvbmFsTGF5b3V0VW5pdD4oMCwgaGVp
Z2h0KCkgKyBkZWx0YSkpOwotICAgIH0KLQotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBtaW5Y
TWluWUNvcm5lcigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb247IH0gLy8gdHlwaWNhbGx5IHRv
cExlZnQKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbWF4WE1pbllDb3JuZXIoKSBjb25zdCB7
IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQobV9sb2NhdGlvbi54KCkgKyBtX3NpemUud2lk
dGgoKSwgbV9sb2NhdGlvbi55KCkpOyB9IC8vIHR5cGljYWxseSB0b3BSaWdodAotICAgIEZyYWN0
aW9uYWxMYXlvdXRQb2ludCBtaW5YTWF4WUNvcm5lcigpIGNvbnN0IHsgcmV0dXJuIEZyYWN0aW9u
YWxMYXlvdXRQb2ludChtX2xvY2F0aW9uLngoKSwgbV9sb2NhdGlvbi55KCkgKyBtX3NpemUuaGVp
Z2h0KCkpOyB9IC8vIHR5cGljYWxseSBib3R0b21MZWZ0Ci0gICAgRnJhY3Rpb25hbExheW91dFBv
aW50IG1heFhNYXhZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50
KG1fbG9jYXRpb24ueCgpICsgbV9zaXplLndpZHRoKCksIG1fbG9jYXRpb24ueSgpICsgbV9zaXpl
LmhlaWdodCgpKTsgfSAvLyB0eXBpY2FsbHkgYm90dG9tUmlnaHQKLSAgICAKLSAgICBib29sIGlu
dGVyc2VjdHMoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKSBjb25zdDsKLSAgICBib29sIGNv
bnRhaW5zKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JikgY29uc3Q7Ci0KLSAgICAvLyBUaGlz
IGNoZWNrcyB0byBzZWUgaWYgdGhlIHJlY3QgY29udGFpbnMgeCx5IGluIHRoZSB0cmFkaXRpb25h
bCBzZW5zZS4KLSAgICAvLyBFcXVpdmFsZW50IHRvIGNoZWNraW5nIGlmIHRoZSByZWN0IGNvbnRh
aW5zIGEgMXgxIHJlY3QgYmVsb3cgYW5kIHRvIHRoZSByaWdodCBvZiAocHgscHkpLgotICAgIGJv
b2wgY29udGFpbnMoRnJhY3Rpb25hbExheW91dFVuaXQgcHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0
IHB5KSBjb25zdAotICAgICAgICB7IHJldHVybiBweCA+PSB4KCkgJiYgcHggPCBtYXhYKCkgJiYg
cHkgPj0geSgpICYmIHB5IDwgbWF4WSgpOyB9Ci0gICAgYm9vbCBjb250YWlucyhjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50KSBjb25zdCB7IHJldHVybiBjb250YWlucyhwb2ludC54
KCksIHBvaW50LnkoKSk7IH0KLQotICAgIHZvaWQgaW50ZXJzZWN0KGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRSZWN0Jik7Ci0gICAgdm9pZCB1bml0ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYp
OwotICAgIHZvaWQgdW5pdGVJZk5vblplcm8oY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKTsK
LQotICAgIHZvaWQgaW5mbGF0ZVgoRnJhY3Rpb25hbExheW91dFVuaXQgZHgpCi0gICAgewotICAg
ICAgICBtX2xvY2F0aW9uLnNldFgobV9sb2NhdGlvbi54KCkgLSBkeCk7Ci0gICAgICAgIG1fc2l6
ZS5zZXRXaWR0aChtX3NpemUud2lkdGgoKSArIGR4ICsgZHgpOwotICAgIH0KLSAgICB2b2lkIGlu
ZmxhdGVZKEZyYWN0aW9uYWxMYXlvdXRVbml0IGR5KQotICAgIHsKLSAgICAgICAgbV9sb2NhdGlv
bi5zZXRZKG1fbG9jYXRpb24ueSgpIC0gZHkpOwotICAgICAgICBtX3NpemUuc2V0SGVpZ2h0KG1f
c2l6ZS5oZWlnaHQoKSArIGR5ICsgZHkpOwotICAgIH0KLSAgICB2b2lkIGluZmxhdGUoRnJhY3Rp
b25hbExheW91dFVuaXQgZCkgeyBpbmZsYXRlWChkKTsgaW5mbGF0ZVkoZCk7IH0KLSAgICB2b2lk
IHNjYWxlKGZsb2F0IHMpOwotCi0gICAgRnJhY3Rpb25hbExheW91dFJlY3QgdHJhbnNwb3NlZFJl
Y3QoKSBjb25zdCB7IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UmVjdChtX2xvY2F0aW9uLnRyYW5z
cG9zZWRQb2ludCgpLCBtX3NpemUudHJhbnNwb3NlZFNpemUoKSk7IH0KLQotICAgIHN0YXRpYyBG
cmFjdGlvbmFsTGF5b3V0UmVjdCBpbmZpbml0ZVJlY3QoKQotICAgIHsKLSAgICAgICAgLy8gUmV0
dXJuIGEgcmVjdCB0aGF0IGlzIHNsaWdodGx5IHNtYWxsZXIgdGhhbiB0aGUgdHJ1ZSBtYXggcmVj
dCB0byBhbGxvdyBwaXhlbFNuYXBwaW5nIHRvIHJvdW5kIHVwIHRvIHRoZSBuZWFyZXN0IEludFJl
Y3Qgd2l0aG91dCBvdmVyZmxvd2luZy4KLSAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRS
ZWN0KEZyYWN0aW9uYWxMYXlvdXRVbml0OjpuZWFybHlNaW4oKSAvIDIsIEZyYWN0aW9uYWxMYXlv
dXRVbml0OjpuZWFybHlNaW4oKSAvIDIsIEZyYWN0aW9uYWxMYXlvdXRVbml0OjpuZWFybHlNYXgo
KSwgRnJhY3Rpb25hbExheW91dFVuaXQ6Om5lYXJseU1heCgpKTsKLSAgICB9Ci0KLSNpZiBQTEFU
Rk9STShRVCkKLSAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBRUmVjdCYp
OwotICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IFFSZWN0RiYpOwotICAg
IG9wZXJhdG9yIFFSZWN0RigpIGNvbnN0OwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgRnJhY3Rp
b25hbExheW91dFBvaW50IG1fbG9jYXRpb247Ci0gICAgRnJhY3Rpb25hbExheW91dFNpemUgbV9z
aXplOwotfTsKLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRSZWN0IGludGVyc2VjdGlvbihjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGIp
Ci17Ci0gICAgRnJhY3Rpb25hbExheW91dFJlY3QgYyA9IGE7Ci0gICAgYy5pbnRlcnNlY3QoYik7
Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UmVjdCB1bmlvblJl
Y3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRS
ZWN0JiBiKQotewotICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0IGMgPSBhOwotICAgIGMudW5pdGUo
Yik7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLUZyYWN0aW9uYWxMYXlvdXRSZWN0IHVuaW9uUmVjdChj
b25zdCBWZWN0b3I8RnJhY3Rpb25hbExheW91dFJlY3Q+Jik7Ci0KLWlubGluZSBib29sIG9wZXJh
dG9yPT0oY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRSZWN0JiBiKQotewotICAgIHJldHVybiBhLmxvY2F0aW9uKCkgPT0gYi5sb2NhdGlvbigpICYm
IGEuc2l6ZSgpID09IGIuc2l6ZSgpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYikK
LXsKLSAgICByZXR1cm4gYS5sb2NhdGlvbigpICE9IGIubG9jYXRpb24oKSB8fCBhLnNpemUoKSAh
PSBiLnNpemUoKTsKLX0KLQotaW5saW5lIEludFJlY3QgcGl4ZWxTbmFwcGVkSW50UmVjdChjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgcmVjdCkKLXsKLSNpZiBFTkFCTEUoU1VCUElYRUxfTEFZ
T1VUKQotICAgIHJldHVybiBJbnRSZWN0KHJvdW5kZWRJbnRQb2ludChyZWN0LmxvY2F0aW9uKCkp
LCBJbnRTaXplKHNuYXBTaXplVG9QaXhlbChyZWN0LndpZHRoKCksIHJlY3QueCgpKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
bmFwU2l6ZVRvUGl4ZWwocmVjdC5oZWlnaHQoKSwgcmVjdC55KCkpKSk7Ci0KLSNlbHNlCi0gICAg
cmV0dXJuIEludFJlY3QocmVjdCk7Ci0jZW5kaWYKLX0KLQotSW50UmVjdCBlbmNsb3NpbmdJbnRS
ZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0Jik7Ci1GcmFjdGlvbmFsTGF5b3V0UmVjdCBl
bmNsb3NpbmdGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRnJhY3Rpb25hbExheW91dFJlY3RfaApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFNpemUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlv
bmFsTGF5b3V0U2l6ZS5oCShyZXZpc2lvbiAxMzM1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0U2l6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDE3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgRnJhY3Rpb25hbExheW91dFNpemVfaAotI2RlZmluZSBGcmFj
dGlvbmFsTGF5b3V0U2l6ZV9oCi0KLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlICJG
cmFjdGlvbmFsTGF5b3V0VW5pdC5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLQotI2lmIFBMQVRG
T1JNKFFUKQotI2luY2x1ZGUgPHFnbG9iYWwuaD4KLVFUX0JFR0lOX05BTUVTUEFDRQotY2xhc3Mg
UVNpemU7Ci1jbGFzcyBRU2l6ZUY7Ci1RVF9FTkRfTkFNRVNQQUNFCi0jZW5kaWYKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0UG9pbnQ7Ci0KLWNsYXNzIEZy
YWN0aW9uYWxMYXlvdXRTaXplIHsKLXB1YmxpYzoKLSAgICBGcmFjdGlvbmFsTGF5b3V0U2l6ZSgp
IDogbV93aWR0aCgwKSwgbV9oZWlnaHQoMCkgeyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFNpemUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSkgOiBtX3dpZHRoKHNpemUud2lkdGgoKSksIG1faGVpZ2h0KHNp
emUuaGVpZ2h0KCkpIHsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplKEZyYWN0aW9uYWxMYXlv
dXRVbml0IHdpZHRoLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBoZWlnaHQpIDogbV93aWR0aCh3aWR0
aCksIG1faGVpZ2h0KGhlaWdodCkgeyB9Ci0KLSAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0
U2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUpIDogbV93aWR0aChzaXplLndpZHRoKCkpLCBtX2hl
aWdodChzaXplLmhlaWdodCgpKSB7IH0KLSAgICAKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB3
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hlaWdodDsgfQotCi0gICAgdm9pZCBzZXRXaWR0
aChGcmFjdGlvbmFsTGF5b3V0VW5pdCB3aWR0aCkgeyBtX3dpZHRoID0gd2lkdGg7IH0KLSAgICB2
b2lkIHNldEhlaWdodChGcmFjdGlvbmFsTGF5b3V0VW5pdCBoZWlnaHQpIHsgbV9oZWlnaHQgPSBo
ZWlnaHQ7IH0KLQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGggPD0g
MCB8fCBtX2hlaWdodCA8PSAwOyB9Ci0gICAgYm9vbCBpc1plcm8oKSBjb25zdCB7IHJldHVybiAh
bV93aWR0aCAmJiAhbV9oZWlnaHQ7IH0KLQotICAgIGZsb2F0IGFzcGVjdFJhdGlvKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fd2lkdGgpIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG1faGVpZ2h0KTsgfQotICAgIAotICAgIHZvaWQgZXhwYW5kKEZyYWN0aW9uYWxMYXlvdXRVbml0
IHdpZHRoLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBoZWlnaHQpCi0gICAgewotICAgICAgICBtX3dp
ZHRoICs9IHdpZHRoOwotICAgICAgICBtX2hlaWdodCArPSBoZWlnaHQ7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgc2NhbGUoZmxvYXQgc2NhbGUpCi0gICAgewotICAgICAgICBtX3dpZHRoICo9IHNj
YWxlOwotICAgICAgICBtX2hlaWdodCAqPSBzY2FsZTsKLSAgICB9Ci0KLSAgICB2b2lkIHNjYWxl
KGZsb2F0IHdpZHRoU2NhbGUsIGZsb2F0IGhlaWdodFNjYWxlKQotICAgIHsKLSAgICAgICAgbV93
aWR0aCAqPSB3aWR0aFNjYWxlOwotICAgICAgICBtX2hlaWdodCAqPSBoZWlnaHRTY2FsZTsKLSAg
ICB9Ci0gICAgCi0gICAgRnJhY3Rpb25hbExheW91dFNpemUgZXhwYW5kZWRUbyhjb25zdCBGcmFj
dGlvbmFsTGF5b3V0U2l6ZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gRnJh
Y3Rpb25hbExheW91dFNpemUobV93aWR0aCA+IG90aGVyLm1fd2lkdGggPyBtX3dpZHRoIDogb3Ro
ZXIubV93aWR0aCwKLSAgICAgICAgICAgIG1faGVpZ2h0ID4gb3RoZXIubV9oZWlnaHQgPyBtX2hl
aWdodCA6IG90aGVyLm1faGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBGcmFjdGlvbmFsTGF5b3V0U2l6
ZSBzaHJ1bmtUbyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgb3RoZXIpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUobV93aWR0aCA8IG90aGVyLm1f
d2lkdGggPyBtX3dpZHRoIDogb3RoZXIubV93aWR0aCwKLSAgICAgICAgICAgIG1faGVpZ2h0IDwg
b3RoZXIubV9oZWlnaHQgPyBtX2hlaWdodCA6IG90aGVyLm1faGVpZ2h0KTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGNsYW1wTmVnYXRpdmVUb1plcm8oKQotICAgIHsKLSAgICAgICAgKnRoaXMgPSBleHBh
bmRlZFRvKEZyYWN0aW9uYWxMYXlvdXRTaXplKCkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNs
YW1wVG9NaW5pbXVtU2l6ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgbWluaW11bVNpemUp
Ci0gICAgewotICAgICAgICBpZiAobV93aWR0aCA8IG1pbmltdW1TaXplLndpZHRoKCkpCi0gICAg
ICAgICAgICBtX3dpZHRoID0gbWluaW11bVNpemUud2lkdGgoKTsKLSAgICAgICAgaWYgKG1faGVp
Z2h0IDwgbWluaW11bVNpemUuaGVpZ2h0KCkpCi0gICAgICAgICAgICBtX2hlaWdodCA9IG1pbmlt
dW1TaXplLmhlaWdodCgpOwotICAgIH0KLQotICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplIHRyYW5z
cG9zZWRTaXplKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0
U2l6ZShtX2hlaWdodCwgbV93aWR0aCk7Ci0gICAgfQotCi0jaWYgUExBVEZPUk0oUVQpCi0gICAg
ZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFNpemUoY29uc3QgUVNpemUmKTsKLSAgICBleHBsaWNp
dCBGcmFjdGlvbmFsTGF5b3V0U2l6ZShjb25zdCBRU2l6ZUYmKTsKLSAgICBvcGVyYXRvciBRU2l6
ZUYoKSBjb25zdDsKLSNlbmRpZgotCi1wcml2YXRlOgotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
IG1fd2lkdGgsIG1faGVpZ2h0OwotfTsKLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplJiBv
cGVyYXRvcis9KEZyYWN0aW9uYWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0
U2l6ZSYgYikKLXsKLSAgICBhLnNldFdpZHRoKGEud2lkdGgoKSArIGIud2lkdGgoKSk7Ci0gICAg
YS5zZXRIZWlnaHQoYS5oZWlnaHQoKSArIGIuaGVpZ2h0KCkpOwotICAgIHJldHVybiBhOwotfQot
Ci1pbmxpbmUgRnJhY3Rpb25hbExheW91dFNpemUmIG9wZXJhdG9yLT0oRnJhY3Rpb25hbExheW91
dFNpemUmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQotewotICAgIGEuc2V0V2lk
dGgoYS53aWR0aCgpIC0gYi53aWR0aCgpKTsKLSAgICBhLnNldEhlaWdodChhLmhlaWdodCgpIC0g
Yi5oZWlnaHQoKSk7Ci0gICAgcmV0dXJuIGE7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0
U2l6ZSBvcGVyYXRvcisoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRTaXplJiBiKQotewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShh
LndpZHRoKCkgKyBiLndpZHRoKCksIGEuaGVpZ2h0KCkgKyBiLmhlaWdodCgpKTsKLX0KLQotaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplIG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0
U2l6ZSYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCi17Ci0gICAgcmV0dXJuIEZy
YWN0aW9uYWxMYXlvdXRTaXplKGEud2lkdGgoKSAtIGIud2lkdGgoKSwgYS5oZWlnaHQoKSAtIGIu
aGVpZ2h0KCkpOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFNpemUgb3BlcmF0b3ItKGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKQotewotICAgIHJldHVybiBGcmFjdGlvbmFs
TGF5b3V0U2l6ZSgtc2l6ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLWlubGluZSBi
b29sIG9wZXJhdG9yPT0oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRTaXplJiBiKQotewotICAgIHJldHVybiBhLndpZHRoKCkgPT0gYi53aWR0aCgp
ICYmIGEuaGVpZ2h0KCkgPT0gYi5oZWlnaHQoKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNp
emUmIGIpCi17Ci0gICAgcmV0dXJuIGEud2lkdGgoKSAhPSBiLndpZHRoKCkgfHwgYS5oZWlnaHQo
KSAhPSBiLmhlaWdodCgpOwotfQotCi1pbmxpbmUgSW50U2l6ZSBmbG9vcmVkSW50U2l6ZShjb25z
dCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgcykKLXsKLSAgICByZXR1cm4gSW50U2l6ZShzLndpZHRo
KCkuZmxvb3IoKSwgcy5oZWlnaHQoKS5mbG9vcigpKTsKLX0KLQotaW5saW5lIEludFNpemUgcm91
bmRlZEludFNpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHMpCi17Ci0gICAgcmV0dXJu
IEludFNpemUocy53aWR0aCgpLnJvdW5kKCksIHMuaGVpZ2h0KCkucm91bmQoKSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEZyYWN0aW9uYWxMYXlvdXRTaXplX2gK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
TGF5ZXIuY3BwCShyZXZpc2lvbiAxMzM1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBA
QAogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZU1ldGhv
ZHMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiUm90YXRlVHJhbnNmb3Jt
T3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xh
eWVyQW5pbWF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmNwcAkocmV2aXNpb24gMTMzNTM5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oIgogCi0jaW5j
bHVkZSAiRnJhY3Rpb25hbExheW91dFNpemUuaCIKKyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCiAj
aW5jbHVkZSAiVW5pdEJlemllci5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAkocmV2
aXNpb24gMTMzNTM5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UmVj
dC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNp
bmNsdWRlIDxhbGdvcml0aG0+CiAKIHVzaW5nIHN0ZDo6bWF4OwpAQCAtNDEsNyArNDEsNyBAQCBJ
bnRSZWN0OjpJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKIHsKIH0KIAotSW50UmVjdDo6SW50
UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgcikKK0ludFJlY3Q6OkludFJlY3QoY29u
c3QgTGF5b3V0UmVjdCYgcikKICAgICA6IG1fbG9jYXRpb24oci54KCksIHIueSgpKQogICAgICwg
bV9zaXplKHIud2lkdGgoKSwgci5oZWlnaHQoKSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzcs
NyArNzcsNyBAQCBzdHJ1Y3QgU2tJUmVjdDsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
RmxvYXRSZWN0OwotY2xhc3MgRnJhY3Rpb25hbExheW91dFJlY3Q7CitjbGFzcyBMYXlvdXRSZWN0
OwogCiBjbGFzcyBJbnRSZWN0IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTg5
LDcgKzg5LDcgQEAgcHVibGljOgogICAgICAgICA6IG1fbG9jYXRpb24oSW50UG9pbnQoeCwgeSkp
LCBtX3NpemUoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSkgeyB9CiAKICAgICBleHBsaWNpdCBJbnRS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2Ug
aXQncyBsb3NzeQotICAgIGV4cGxpY2l0IEludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJl
Y3QmKTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKKyAgICBl
eHBsaWNpdCBJbnRSZWN0KGNvbnN0IExheW91dFJlY3QmKTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBs
aWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKICAgICAgICAgCiAgICAgSW50UG9pbnQgbG9jYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9CiAgICAgSW50U2l6ZSBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9MYXlvdXRCb3hFeHRlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0xheW91dEJveEV4dGVudC5jcHAJKHJldmlzaW9uIDEzMzUxNykJKGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dEJveEV4dGVu
dC5jcHA6MTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0
Qm94RXh0ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0ZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRC
b3hFeHRlbnQ6OmxvZ2ljYWxUb3AoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fdG9wIDog
bV9sZWZ0OworfQorCitGcmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0
ZW50Ojpsb2dpY2FsQm90dG9tKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAoreworICAg
IHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX2JvdHRvbSA6
IG1fcmlnaHQ7Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hF
eHRlbnQ6OmxvZ2ljYWxMZWZ0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAoreworICAg
IHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX2xlZnQgOiBt
X3RvcDsKK30KKworRnJhY3Rpb25hbExheW91dFVuaXQgRnJhY3Rpb25hbExheW91dEJveEV4dGVu
dDo6bG9naWNhbFJpZ2h0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAoreworICAgIHJl
dHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX3JpZ2h0IDogbV9i
b3R0b207Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRl
bnQ6OmJlZm9yZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QKK3sKKyAgICBzd2l0Y2gg
KHdyaXRpbmdNb2RlKSB7CisgICAgY2FzZSBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlOgorICAgICAg
ICByZXR1cm4gbV90b3A7CisgICAgY2FzZSBCb3R0b21Ub1RvcFdyaXRpbmdNb2RlOgorICAgICAg
ICByZXR1cm4gbV9ib3R0b207CisgICAgY2FzZSBMZWZ0VG9SaWdodFdyaXRpbmdNb2RlOgorICAg
ICAgICByZXR1cm4gbV9sZWZ0OworICAgIGNhc2UgUmlnaHRUb0xlZnRXcml0aW5nTW9kZToKKyAg
ICAgICAgcmV0dXJuIG1fcmlnaHQ7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBtX3RvcDsKK30KKworRnJhY3Rpb25hbExheW91dFVuaXQgRnJhY3Rpb25hbExh
eW91dEJveEV4dGVudDo6YWZ0ZXIoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0Cit7Cisg
ICAgc3dpdGNoICh3cml0aW5nTW9kZSkgeworICAgIGNhc2UgVG9wVG9Cb3R0b21Xcml0aW5nTW9k
ZToKKyAgICAgICAgcmV0dXJuIG1fYm90dG9tOworICAgIGNhc2UgQm90dG9tVG9Ub3BXcml0aW5n
TW9kZToKKyAgICAgICAgcmV0dXJuIG1fdG9wOworICAgIGNhc2UgTGVmdFRvUmlnaHRXcml0aW5n
TW9kZToKKyAgICAgICAgcmV0dXJuIG1fcmlnaHQ7CisgICAgY2FzZSBSaWdodFRvTGVmdFdyaXRp
bmdNb2RlOgorICAgICAgICByZXR1cm4gbV9sZWZ0OworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gbV9ib3R0b207Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRVbml0
IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OnN0YXJ0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2Rl
LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikgY29uc3QKK3sKKyAgICBpZiAoaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUod3JpdGluZ01vZGUpKQorICAgICAgICByZXR1cm4gaXNMZWZ0VG9SaWdodERp
cmVjdGlvbihkaXJlY3Rpb24pID8gbV9sZWZ0IDogbV9yaWdodDsKKyAgICByZXR1cm4gaXNMZWZ0
VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24pID8gbV90b3AgOiBtX2JvdHRvbTsKK30KKworRnJh
Y3Rpb25hbExheW91dFVuaXQgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6ZW5kKFdyaXRpbmdN
b2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikgY29uc3QKK3sKKyAgICBp
ZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKQorICAgICAgICByZXR1cm4g
aXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24pID8gbV9yaWdodCA6IG1fbGVmdDsKKyAg
ICByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24pID8gbV9ib3R0b20gOiBt
X3RvcDsKK30KKwordm9pZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzZXRCZWZvcmUoV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKQoreworICAg
IHN3aXRjaCAod3JpdGluZ01vZGUpIHsKKyAgICBjYXNlIFRvcFRvQm90dG9tV3JpdGluZ01vZGU6
CisgICAgICAgIG1fdG9wID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQm90dG9t
VG9Ub3BXcml0aW5nTW9kZToKKyAgICAgICAgbV9ib3R0b20gPSB2YWx1ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBMZWZ0VG9SaWdodFdyaXRpbmdNb2RlOgorICAgICAgICBtX2xlZnQgPSB2
YWx1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSaWdodFRvTGVmdFdyaXRpbmdNb2RlOgor
ICAgICAgICBtX3JpZ2h0ID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBtX3RvcCA9IHZhbHVlOworICAg
IH0KK30KKwordm9pZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzZXRBZnRlcihXcml0aW5n
TW9kZSB3cml0aW5nTW9kZSwgRnJhY3Rpb25hbExheW91dFVuaXQgdmFsdWUpCit7CisgICAgc3dp
dGNoICh3cml0aW5nTW9kZSkgeworICAgIGNhc2UgVG9wVG9Cb3R0b21Xcml0aW5nTW9kZToKKyAg
ICAgICAgbV9ib3R0b20gPSB2YWx1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCb3R0b21U
b1RvcFdyaXRpbmdNb2RlOgorICAgICAgICBtX3RvcCA9IHZhbHVlOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIExlZnRUb1JpZ2h0V3JpdGluZ01vZGU6CisgICAgICAgIG1fcmlnaHQgPSB2YWx1
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSaWdodFRvTGVmdFdyaXRpbmdNb2RlOgorICAg
ICAgICBtX2xlZnQgPSB2YWx1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIG1fYm90dG9tID0gdmFsdWU7CisgICAg
fQorfQorCit2b2lkIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OnNldFN0YXJ0KFdyaXRpbmdN
b2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgRnJhY3Rpb25hbExheW91
dFVuaXQgdmFsdWUpCit7CisgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdN
b2RlKSkgeworICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24pKQor
ICAgICAgICAgICAgbV9sZWZ0ID0gdmFsdWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1f
cmlnaHQgPSB2YWx1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodERp
cmVjdGlvbihkaXJlY3Rpb24pKQorICAgICAgICAgICAgbV90b3AgPSB2YWx1ZTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgbV9ib3R0b20gPSB2YWx1ZTsKKyAgICB9Cit9CisKK3ZvaWQgRnJh
Y3Rpb25hbExheW91dEJveEV4dGVudDo6c2V0RW5kKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgRnJhY3Rpb25hbExheW91dFVuaXQgdmFsdWUpCit7Cisg
ICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkgeworICAgICAgICBp
ZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24pKQorICAgICAgICAgICAgbV9yaWdo
dCA9IHZhbHVlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2xlZnQgPSB2YWx1ZTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24p
KQorICAgICAgICAgICAgbV9ib3R0b20gPSB2YWx1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbV90b3AgPSB2YWx1ZTsKKyAgICB9Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRVbml0JiBGcmFj
dGlvbmFsTGF5b3V0Qm94RXh0ZW50OjptdXRhYmxlTG9naWNhbExlZnQoV3JpdGluZ01vZGUgd3Jp
dGluZ01vZGUpCit7CisgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdN
b2RlKSA/IG1fbGVmdCA6IG1fdG9wOworfQorCitGcmFjdGlvbmFsTGF5b3V0VW5pdCYgRnJhY3Rp
b25hbExheW91dEJveEV4dGVudDo6bXV0YWJsZUxvZ2ljYWxSaWdodChXcml0aW5nTW9kZSB3cml0
aW5nTW9kZSkKK3sKKyAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01v
ZGUpID8gbV9yaWdodCA6IG1fYm90dG9tOworfQorCitGcmFjdGlvbmFsTGF5b3V0VW5pdCYgRnJh
Y3Rpb25hbExheW91dEJveEV4dGVudDo6bXV0YWJsZUJlZm9yZShXcml0aW5nTW9kZSB3cml0aW5n
TW9kZSkKK3sKKyAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUp
ID8gKGlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fYm90dG9tIDog
bV90b3ApIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fcmlnaHQ6IG1f
bGVmdCk7Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRVbml0JiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0
ZW50OjptdXRhYmxlQWZ0ZXIoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCit7CisgICAgcmV0dXJu
IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IChpc0ZsaXBwZWRCbG9ja3NX
cml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX3RvcCA6IG1fYm90dG9tKSA6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpc0ZsaXBwZWRCbG9ja3NX
cml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX2xlZnQ6IG1fcmlnaHQpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9M
YXlvdXRCb3hFeHRlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0xheW91dEJveEV4dGVudC5jcHAJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dEJveEV4dGVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDMxICsyOSwzMSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94
RXh0ZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRnJhY3Rpb25hbExheW91dFVuaXQg
RnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6bG9naWNhbFRvcChXcml0aW5nTW9kZSB3cml0aW5n
TW9kZSkgY29uc3QKK0xheW91dFVuaXQgTGF5b3V0Qm94RXh0ZW50Ojpsb2dpY2FsVG9wKFdyaXRp
bmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAogewogICAgIHJldHVybiBpc0hvcml6b250YWxXcml0
aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX3RvcCA6IG1fbGVmdDsKIH0KIAotRnJhY3Rpb25hbExh
eW91dFVuaXQgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6bG9naWNhbEJvdHRvbShXcml0aW5n
TW9kZSB3cml0aW5nTW9kZSkgY29uc3QKK0xheW91dFVuaXQgTGF5b3V0Qm94RXh0ZW50Ojpsb2dp
Y2FsQm90dG9tKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAogewogICAgIHJldHVybiBp
c0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX2JvdHRvbSA6IG1fcmlnaHQ7
CiB9CiAKLUZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6Omxv
Z2ljYWxMZWZ0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAorTGF5b3V0VW5pdCBMYXlv
dXRCb3hFeHRlbnQ6OmxvZ2ljYWxMZWZ0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAog
ewogICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX2xl
ZnQgOiBtX3RvcDsKIH0KIAotRnJhY3Rpb25hbExheW91dFVuaXQgRnJhY3Rpb25hbExheW91dEJv
eEV4dGVudDo6bG9naWNhbFJpZ2h0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAorTGF5
b3V0VW5pdCBMYXlvdXRCb3hFeHRlbnQ6OmxvZ2ljYWxSaWdodChXcml0aW5nTW9kZSB3cml0aW5n
TW9kZSkgY29uc3QKIHsKICAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGlu
Z01vZGUpID8gbV9yaWdodCA6IG1fYm90dG9tOwogfQogCi1GcmFjdGlvbmFsTGF5b3V0VW5pdCBG
cmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpiZWZvcmUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUp
IGNvbnN0CitMYXlvdXRVbml0IExheW91dEJveEV4dGVudDo6YmVmb3JlKFdyaXRpbmdNb2RlIHdy
aXRpbmdNb2RlKSBjb25zdAogewogICAgIHN3aXRjaCAod3JpdGluZ01vZGUpIHsKICAgICBjYXNl
IFRvcFRvQm90dG9tV3JpdGluZ01vZGU6CkBAIC02OSw3ICs2OSw3IEBAIEZyYWN0aW9uYWxMYXlv
dXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3gKICAgICByZXR1cm4gbV90b3A7CiB9CiAKLUZyYWN0
aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmFmdGVyKFdyaXRpbmdN
b2RlIHdyaXRpbmdNb2RlKSBjb25zdAorTGF5b3V0VW5pdCBMYXlvdXRCb3hFeHRlbnQ6OmFmdGVy
KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAogewogICAgIHN3aXRjaCAod3JpdGluZ01v
ZGUpIHsKICAgICBjYXNlIFRvcFRvQm90dG9tV3JpdGluZ01vZGU6CkBAIC04NSwyMSArODUsMjEg
QEAgRnJhY3Rpb25hbExheW91dFVuaXQgRnJhY3Rpb25hbExheW91dEJveAogICAgIHJldHVybiBt
X2JvdHRvbTsKIH0KIAotRnJhY3Rpb25hbExheW91dFVuaXQgRnJhY3Rpb25hbExheW91dEJveEV4
dGVudDo6c3RhcnQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0
aW9uKSBjb25zdAorTGF5b3V0VW5pdCBMYXlvdXRCb3hFeHRlbnQ6OnN0YXJ0KFdyaXRpbmdNb2Rl
IHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikgY29uc3QKIHsKICAgICBpZiAo
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKQogICAgICAgICByZXR1cm4gaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24pID8gbV9sZWZ0IDogbV9yaWdodDsKICAgICBy
ZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24pID8gbV90b3AgOiBtX2JvdHRv
bTsKIH0KIAotRnJhY3Rpb25hbExheW91dFVuaXQgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6
ZW5kKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikgY29u
c3QKK0xheW91dFVuaXQgTGF5b3V0Qm94RXh0ZW50OjplbmQoV3JpdGluZ01vZGUgd3JpdGluZ01v
ZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdAogewogICAgIGlmIChpc0hvcml6b250
YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpCiAgICAgICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKGRpcmVjdGlvbikgPyBtX3JpZ2h0IDogbV9sZWZ0OwogICAgIHJldHVybiBpc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKGRpcmVjdGlvbikgPyBtX2JvdHRvbSA6IG1fdG9wOwogfQogCi12
b2lkIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OnNldEJlZm9yZShXcml0aW5nTW9kZSB3cml0
aW5nTW9kZSwgRnJhY3Rpb25hbExheW91dFVuaXQgdmFsdWUpCit2b2lkIExheW91dEJveEV4dGVu
dDo6c2V0QmVmb3JlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBMYXlvdXRVbml0IHZhbHVlKQog
ewogICAgIHN3aXRjaCAod3JpdGluZ01vZGUpIHsKICAgICBjYXNlIFRvcFRvQm90dG9tV3JpdGlu
Z01vZGU6CkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50
OjpzZXRCZWZvcgogICAgIH0KIH0KIAotdm9pZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Ojpz
ZXRBZnRlcihXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgRnJhY3Rpb25hbExheW91dFVuaXQgdmFs
dWUpCit2b2lkIExheW91dEJveEV4dGVudDo6c2V0QWZ0ZXIoV3JpdGluZ01vZGUgd3JpdGluZ01v
ZGUsIExheW91dFVuaXQgdmFsdWUpCiB7CiAgICAgc3dpdGNoICh3cml0aW5nTW9kZSkgewogICAg
IGNhc2UgVG9wVG9Cb3R0b21Xcml0aW5nTW9kZToKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIEZy
YWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OnNldEFmdGVyCiAgICAgfQogfQogCi12b2lkIEZyYWN0
aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OnNldFN0YXJ0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgRnJhY3Rpb25hbExheW91dFVuaXQgdmFsdWUpCit2b2lk
IExheW91dEJveEV4dGVudDo6c2V0U3RhcnQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHRE
aXJlY3Rpb24gZGlyZWN0aW9uLCBMYXlvdXRVbml0IHZhbHVlKQogewogICAgIGlmIChpc0hvcml6
b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpIHsKICAgICAgICAgaWYgKGlzTGVmdFRvUmln
aHREaXJlY3Rpb24oZGlyZWN0aW9uKSkKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIEZyYWN0aW9u
YWxMYXlvdXRCb3hFeHRlbnQ6OnNldFN0YXJ0CiAgICAgfQogfQogCi12b2lkIEZyYWN0aW9uYWxM
YXlvdXRCb3hFeHRlbnQ6OnNldEVuZChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVj
dGlvbiBkaXJlY3Rpb24sIEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKQordm9pZCBMYXlvdXRC
b3hFeHRlbnQ6OnNldEVuZChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBk
aXJlY3Rpb24sIExheW91dFVuaXQgdmFsdWUpCiB7CiAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKHdyaXRpbmdNb2RlKSkgewogICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlv
bihkaXJlY3Rpb24pKQpAQCAtMTcxLDIzICsxNzEsMjMgQEAgdm9pZCBGcmFjdGlvbmFsTGF5b3V0
Qm94RXh0ZW50OjpzZXRFbmQoVwogICAgIH0KIH0KIAotRnJhY3Rpb25hbExheW91dFVuaXQmIEZy
YWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6Om11dGFibGVMb2dpY2FsTGVmdChXcml0aW5nTW9kZSB3
cml0aW5nTW9kZSkKK0xheW91dFVuaXQmIExheW91dEJveEV4dGVudDo6bXV0YWJsZUxvZ2ljYWxM
ZWZ0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQogewogICAgIHJldHVybiBpc0hvcml6b250YWxX
cml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX2xlZnQgOiBtX3RvcDsKIH0KIAotRnJhY3Rpb25h
bExheW91dFVuaXQmIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6Om11dGFibGVMb2dpY2FsUmln
aHQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCitMYXlvdXRVbml0JiBMYXlvdXRCb3hFeHRlbnQ6
Om11dGFibGVMb2dpY2FsUmlnaHQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCiB7CiAgICAgcmV0
dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fcmlnaHQgOiBtX2Jv
dHRvbTsKIH0KIAotRnJhY3Rpb25hbExheW91dFVuaXQmIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRl
bnQ6Om11dGFibGVCZWZvcmUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCitMYXlvdXRVbml0JiBM
YXlvdXRCb3hFeHRlbnQ6Om11dGFibGVCZWZvcmUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCiB7
CiAgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IChpc0Zs
aXBwZWRCbG9ja3NXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX2JvdHRvbSA6IG1fdG9wKSA6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpc0Zs
aXBwZWRCbG9ja3NXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX3JpZ2h0OiBtX2xlZnQpOwog
fQogCi1GcmFjdGlvbmFsTGF5b3V0VW5pdCYgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6bXV0
YWJsZUFmdGVyKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQorTGF5b3V0VW5pdCYgTGF5b3V0Qm94
RXh0ZW50OjptdXRhYmxlQWZ0ZXIoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCiB7CiAgICAgcmV0
dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IChpc0ZsaXBwZWRCbG9j
a3NXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX3RvcCA6IG1fYm90dG9tKSA6CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpc0ZsaXBwZWRCbG9j
a3NXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX2xlZnQ6IG1fcmlnaHQpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50LmgJ
KHJldmlzaW9uIDEzMzUxNykJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oOjEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0xheW91dEJveEV4dGVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50X2gKKyNkZWZpbmUgRnJh
Y3Rpb25hbExheW91dEJveEV4dGVudF9oCisKKyNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0VW5p
dC5oIgorI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKKyNpbmNsdWRlICJXcml0aW5nTW9kZS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRl
bnQgeworcHVibGljOgorICAgIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQoKSA6IG1fdG9wKDAp
LCBtX3JpZ2h0KDApLCBtX2JvdHRvbSgwKSwgbV9sZWZ0KDApIHsgfQorICAgIEZyYWN0aW9uYWxM
YXlvdXRCb3hFeHRlbnQoRnJhY3Rpb25hbExheW91dFVuaXQgdG9wLCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCByaWdodCwgRnJhY3Rpb25hbExheW91dFVuaXQgYm90dG9tLCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBsZWZ0KQorICAgICAgICA6IG1fdG9wKHRvcCksIG1fcmlnaHQocmlnaHQpLCBtX2JvdHRv
bShib3R0b20pLCBtX2xlZnQobGVmdCkgeyB9CisKKyAgICBpbmxpbmUgRnJhY3Rpb25hbExheW91
dFVuaXQgdG9wKCkgY29uc3QgeyByZXR1cm4gbV90b3A7IH0KKyAgICBpbmxpbmUgRnJhY3Rpb25h
bExheW91dFVuaXQgcmlnaHQoKSBjb25zdCB7IHJldHVybiBtX3JpZ2h0OyB9CisgICAgaW5saW5l
IEZyYWN0aW9uYWxMYXlvdXRVbml0IGJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fYm90dG9tOyB9
CisgICAgaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IGxlZnQoKSBjb25zdCB7IHJldHVybiBt
X2xlZnQ7IH0KKworICAgIGlubGluZSB2b2lkIHNldFRvcChGcmFjdGlvbmFsTGF5b3V0VW5pdCB2
YWx1ZSkgeyBtX3RvcCA9IHZhbHVlOyB9CisgICAgaW5saW5lIHZvaWQgc2V0UmlnaHQoRnJhY3Rp
b25hbExheW91dFVuaXQgdmFsdWUpIHsgbV9yaWdodCA9IHZhbHVlOyB9CisgICAgaW5saW5lIHZv
aWQgc2V0Qm90dG9tKEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKSB7IG1fYm90dG9tID0gdmFs
dWU7IH0KKyAgICBpbmxpbmUgdm9pZCBzZXRMZWZ0KEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVl
KSB7IG1fbGVmdCA9IHZhbHVlOyB9CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBsb2dpY2Fs
VG9wKFdyaXRpbmdNb2RlKSBjb25zdDsKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBsb2dpY2Fs
Qm90dG9tKFdyaXRpbmdNb2RlKSBjb25zdDsKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBsb2dp
Y2FsTGVmdChXcml0aW5nTW9kZSkgY29uc3Q7CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbG9n
aWNhbFJpZ2h0KFdyaXRpbmdNb2RlKSBjb25zdDsKKworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
IGJlZm9yZShXcml0aW5nTW9kZSkgY29uc3Q7CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgYWZ0
ZXIoV3JpdGluZ01vZGUpIGNvbnN0OworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHN0YXJ0KFdy
aXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uKSBjb25zdDsKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBlbmQoV3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24pIGNvbnN0OworCisgICAgdm9pZCBzZXRC
ZWZvcmUoV3JpdGluZ01vZGUsIEZyYWN0aW9uYWxMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNldEFm
dGVyKFdyaXRpbmdNb2RlLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCk7CisgICAgdm9pZCBzZXRTdGFy
dChXcml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiwgRnJhY3Rpb25hbExheW91dFVuaXQpOworICAg
IHZvaWQgc2V0RW5kKFdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uLCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCk7CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgbXV0YWJsZUxvZ2ljYWxMZWZ0KFdy
aXRpbmdNb2RlKTsKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgbXV0YWJsZUxvZ2ljYWxSaWdo
dChXcml0aW5nTW9kZSk7CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgbXV0YWJsZUJlZm9y
ZShXcml0aW5nTW9kZSk7CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQmIG11dGFibGVBZnRlcihX
cml0aW5nTW9kZSk7CisKK3ByaXZhdGU6CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbV90b3A7
CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbV9yaWdodDsKKyAgICBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBtX2JvdHRvbTsKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtX2xlZnQ7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0
ZW50X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dEJveEV4
dGVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xh
eW91dEJveEV4dGVudC5oCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9MYXlvdXRCb3hFeHRlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNTkg
KzI4LDU5IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgRnJhY3Rpb25hbExheW91
dEJveEV4dGVudF9oCi0jZGVmaW5lIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnRfaAorI2lmbmRl
ZiBMYXlvdXRCb3hFeHRlbnRfaAorI2RlZmluZSBMYXlvdXRCb3hFeHRlbnRfaAogCi0jaW5jbHVk
ZSAiRnJhY3Rpb25hbExheW91dFVuaXQuaCIKKyNpbmNsdWRlICJMYXlvdXRVbml0LmgiCiAjaW5j
bHVkZSAiVGV4dERpcmVjdGlvbi5oIgogI2luY2x1ZGUgIldyaXRpbmdNb2RlLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRnJhY3Rpb25hbExheW91dEJveEV4dGVudCB7CitjbGFz
cyBMYXlvdXRCb3hFeHRlbnQgewogcHVibGljOgotICAgIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRl
bnQoKSA6IG1fdG9wKDApLCBtX3JpZ2h0KDApLCBtX2JvdHRvbSgwKSwgbV9sZWZ0KDApIHsgfQot
ICAgIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQoRnJhY3Rpb25hbExheW91dFVuaXQgdG9wLCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCByaWdodCwgRnJhY3Rpb25hbExheW91dFVuaXQgYm90dG9tLCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCBsZWZ0KQorICAgIExheW91dEJveEV4dGVudCgpIDogbV90b3Ao
MCksIG1fcmlnaHQoMCksIG1fYm90dG9tKDApLCBtX2xlZnQoMCkgeyB9CisgICAgTGF5b3V0Qm94
RXh0ZW50KExheW91dFVuaXQgdG9wLCBMYXlvdXRVbml0IHJpZ2h0LCBMYXlvdXRVbml0IGJvdHRv
bSwgTGF5b3V0VW5pdCBsZWZ0KQogICAgICAgICA6IG1fdG9wKHRvcCksIG1fcmlnaHQocmlnaHQp
LCBtX2JvdHRvbShib3R0b20pLCBtX2xlZnQobGVmdCkgeyB9CiAKLSAgICBpbmxpbmUgRnJhY3Rp
b25hbExheW91dFVuaXQgdG9wKCkgY29uc3QgeyByZXR1cm4gbV90b3A7IH0KLSAgICBpbmxpbmUg
RnJhY3Rpb25hbExheW91dFVuaXQgcmlnaHQoKSBjb25zdCB7IHJldHVybiBtX3JpZ2h0OyB9Ci0g
ICAgaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IGJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1f
Ym90dG9tOyB9Ci0gICAgaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IGxlZnQoKSBjb25zdCB7
IHJldHVybiBtX2xlZnQ7IH0KLQotICAgIGlubGluZSB2b2lkIHNldFRvcChGcmFjdGlvbmFsTGF5
b3V0VW5pdCB2YWx1ZSkgeyBtX3RvcCA9IHZhbHVlOyB9Ci0gICAgaW5saW5lIHZvaWQgc2V0Umln
aHQoRnJhY3Rpb25hbExheW91dFVuaXQgdmFsdWUpIHsgbV9yaWdodCA9IHZhbHVlOyB9Ci0gICAg
aW5saW5lIHZvaWQgc2V0Qm90dG9tKEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKSB7IG1fYm90
dG9tID0gdmFsdWU7IH0KLSAgICBpbmxpbmUgdm9pZCBzZXRMZWZ0KEZyYWN0aW9uYWxMYXlvdXRV
bml0IHZhbHVlKSB7IG1fbGVmdCA9IHZhbHVlOyB9Ci0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBsb2dpY2FsVG9wKFdyaXRpbmdNb2RlKSBjb25zdDsKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBsb2dpY2FsQm90dG9tKFdyaXRpbmdNb2RlKSBjb25zdDsKLSAgICBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBsb2dpY2FsTGVmdChXcml0aW5nTW9kZSkgY29uc3Q7Ci0gICAgRnJhY3Rpb25hbExheW91
dFVuaXQgbG9naWNhbFJpZ2h0KFdyaXRpbmdNb2RlKSBjb25zdDsKLQotICAgIEZyYWN0aW9uYWxM
YXlvdXRVbml0IGJlZm9yZShXcml0aW5nTW9kZSkgY29uc3Q7Ci0gICAgRnJhY3Rpb25hbExheW91
dFVuaXQgYWZ0ZXIoV3JpdGluZ01vZGUpIGNvbnN0OwotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
IHN0YXJ0KFdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uKSBjb25zdDsKLSAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBlbmQoV3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24pIGNvbnN0OwotCi0gICAg
dm9pZCBzZXRCZWZvcmUoV3JpdGluZ01vZGUsIEZyYWN0aW9uYWxMYXlvdXRVbml0KTsKLSAgICB2
b2lkIHNldEFmdGVyKFdyaXRpbmdNb2RlLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCk7Ci0gICAgdm9p
ZCBzZXRTdGFydChXcml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiwgRnJhY3Rpb25hbExheW91dFVu
aXQpOwotICAgIHZvaWQgc2V0RW5kKFdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uLCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCk7CisgICAgaW5saW5lIExheW91dFVuaXQgdG9wKCkgY29uc3QgeyByZXR1
cm4gbV90b3A7IH0KKyAgICBpbmxpbmUgTGF5b3V0VW5pdCByaWdodCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmlnaHQ7IH0KKyAgICBpbmxpbmUgTGF5b3V0VW5pdCBib3R0b20oKSBjb25zdCB7IHJldHVy
biBtX2JvdHRvbTsgfQorICAgIGlubGluZSBMYXlvdXRVbml0IGxlZnQoKSBjb25zdCB7IHJldHVy
biBtX2xlZnQ7IH0KKworICAgIGlubGluZSB2b2lkIHNldFRvcChMYXlvdXRVbml0IHZhbHVlKSB7
IG1fdG9wID0gdmFsdWU7IH0KKyAgICBpbmxpbmUgdm9pZCBzZXRSaWdodChMYXlvdXRVbml0IHZh
bHVlKSB7IG1fcmlnaHQgPSB2YWx1ZTsgfQorICAgIGlubGluZSB2b2lkIHNldEJvdHRvbShMYXlv
dXRVbml0IHZhbHVlKSB7IG1fYm90dG9tID0gdmFsdWU7IH0KKyAgICBpbmxpbmUgdm9pZCBzZXRM
ZWZ0KExheW91dFVuaXQgdmFsdWUpIHsgbV9sZWZ0ID0gdmFsdWU7IH0KKworICAgIExheW91dFVu
aXQgbG9naWNhbFRvcChXcml0aW5nTW9kZSkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
Qm90dG9tKFdyaXRpbmdNb2RlKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KFdy
aXRpbmdNb2RlKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodChXcml0aW5nTW9k
ZSkgY29uc3Q7CisKKyAgICBMYXlvdXRVbml0IGJlZm9yZShXcml0aW5nTW9kZSkgY29uc3Q7Cisg
ICAgTGF5b3V0VW5pdCBhZnRlcihXcml0aW5nTW9kZSkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBz
dGFydChXcml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbikgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBl
bmQoV3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24pIGNvbnN0OworCisgICAgdm9pZCBzZXRCZWZv
cmUoV3JpdGluZ01vZGUsIExheW91dFVuaXQpOworICAgIHZvaWQgc2V0QWZ0ZXIoV3JpdGluZ01v
ZGUsIExheW91dFVuaXQpOworICAgIHZvaWQgc2V0U3RhcnQoV3JpdGluZ01vZGUsIFRleHREaXJl
Y3Rpb24sIExheW91dFVuaXQpOworICAgIHZvaWQgc2V0RW5kKFdyaXRpbmdNb2RlLCBUZXh0RGly
ZWN0aW9uLCBMYXlvdXRVbml0KTsKIAotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBtdXRhYmxl
TG9naWNhbExlZnQoV3JpdGluZ01vZGUpOwotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBtdXRh
YmxlTG9naWNhbFJpZ2h0KFdyaXRpbmdNb2RlKTsKKyAgICBMYXlvdXRVbml0JiBtdXRhYmxlTG9n
aWNhbExlZnQoV3JpdGluZ01vZGUpOworICAgIExheW91dFVuaXQmIG11dGFibGVMb2dpY2FsUmln
aHQoV3JpdGluZ01vZGUpOwogCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQmIG11dGFibGVCZWZv
cmUoV3JpdGluZ01vZGUpOwotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBtdXRhYmxlQWZ0ZXIo
V3JpdGluZ01vZGUpOworICAgIExheW91dFVuaXQmIG11dGFibGVCZWZvcmUoV3JpdGluZ01vZGUp
OworICAgIExheW91dFVuaXQmIG11dGFibGVBZnRlcihXcml0aW5nTW9kZSk7CiAKIHByaXZhdGU6
Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgbV90b3A7Ci0gICAgRnJhY3Rpb25hbExheW91dFVu
aXQgbV9yaWdodDsKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtX2JvdHRvbTsKLSAgICBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBtX2xlZnQ7CisgICAgTGF5b3V0VW5pdCBtX3RvcDsKKyAgICBMYXlv
dXRVbml0IG1fcmlnaHQ7CisgICAgTGF5b3V0VW5pdCBtX2JvdHRvbTsKKyAgICBMYXlvdXRVbml0
IG1fbGVmdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEZyYWN0
aW9uYWxMYXlvdXRCb3hFeHRlbnRfaAorI2VuZGlmIC8vIExheW91dEJveEV4dGVudF9oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRQb2ludC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFBvaW50LmgJKHJl
dmlzaW9uIDEzMzUxNykJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJh
Y3Rpb25hbExheW91dFBvaW50Lmg6MTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTGF5b3V0UG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEZyYWN0aW9uYWxMYXlvdXRQb2ludF9oCisjZGVmaW5lIEZyYWN0aW9uYWxMYXlvdXRQ
b2ludF9oCisKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRnJhY3Rpb25hbExh
eW91dFNpemUuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCisjaWYgUExBVEZPUk0o
UVQpCisjaW5jbHVkZSA8cWdsb2JhbC5oPgorUVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRUG9p
bnQ7CitjbGFzcyBRUG9pbnRGOworUVRfRU5EX05BTUVTUEFDRQorI2VuZGlmCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgRnJhY3Rpb25hbExheW91dFBvaW50IHsKK3B1YmxpYzoKKyAg
ICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoKSA6IG1feCgwKSwgbV95KDApIHsgfQorICAgIEZyYWN0
aW9uYWxMYXlvdXRQb2ludChGcmFjdGlvbmFsTGF5b3V0VW5pdCB4LCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCB5KSA6IG1feCh4KSwgbV95KHkpIHsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludChj
b25zdCBJbnRQb2ludCYgcG9pbnQpIDogbV94KHBvaW50LngoKSksIG1feShwb2ludC55KCkpIHsg
fQorICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRQb2ludChjb25zdCBGbG9hdFBvaW50JiBz
aXplKSA6IG1feChzaXplLngoKSksIG1feShzaXplLnkoKSkgeyB9CisgICAgZXhwbGljaXQgRnJh
Y3Rpb25hbExheW91dFBvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSA6IG1f
eChzaXplLndpZHRoKCkpLCBtX3koc2l6ZS5oZWlnaHQoKSkgeyB9CisKKyAgICBzdGF0aWMgRnJh
Y3Rpb25hbExheW91dFBvaW50IHplcm8oKSB7IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQo
KTsgfQorCisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgeCgpIGNvbnN0IHsgcmV0dXJuIG1feDsg
fQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHkoKSBjb25zdCB7IHJldHVybiBtX3k7IH0KKwor
ICAgIHZvaWQgc2V0WChGcmFjdGlvbmFsTGF5b3V0VW5pdCB4KSB7IG1feCA9IHg7IH0KKyAgICB2
b2lkIHNldFkoRnJhY3Rpb25hbExheW91dFVuaXQgeSkgeyBtX3kgPSB5OyB9CisKKyAgICB2b2lk
IG1vdmUoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHMpIHsgbW92ZShzLndpZHRoKCksIHMu
aGVpZ2h0KCkpOyB9IAorICAgIHZvaWQgbW92ZUJ5KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2lu
dCYgb2Zmc2V0KSB7IG1vdmUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7IH0KKyAgICB2b2lkIG1v
dmUoRnJhY3Rpb25hbExheW91dFVuaXQgZHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGR5KSB7IG1f
eCArPSBkeDsgbV95ICs9IGR5OyB9CisgICAgdm9pZCBzY2FsZShmbG9hdCBzeCwgZmxvYXQgc3kp
CisgICAgeworICAgICAgICBtX3ggKj0gc3g7CisgICAgICAgIG1feSAqPSBzeTsKKyAgICB9Cisg
ICAgCisgICAgRnJhY3Rpb25hbExheW91dFBvaW50IGV4cGFuZGVkVG8oY29uc3QgRnJhY3Rpb25h
bExheW91dFBvaW50JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQoc3RkOjptYXgobV94LCBvdGhlci5tX3gpLCBzdGQ6Om1heChtX3ksIG90
aGVyLm1feSkpOworICAgIH0KKworICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBzaHJ1bmtUbyhj
b25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChzdGQ6Om1pbihtX3gsIG90aGVyLm1feCksIHN0
ZDo6bWluKG1feSwgb3RoZXIubV95KSk7CisgICAgfQorCisgICAgdm9pZCBjbGFtcE5lZ2F0aXZl
VG9aZXJvKCkKKyAgICB7CisgICAgICAgICp0aGlzID0gZXhwYW5kZWRUbyh6ZXJvKCkpOworICAg
IH0KKworICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCB0cmFuc3Bvc2VkUG9pbnQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChtX3ksIG1feCk7Cisg
ICAgfQorCisjaWYgUExBVEZPUk0oUVQpCisgICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFBv
aW50KGNvbnN0IFFQb2ludCYpOworICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRQb2ludChj
b25zdCBRUG9pbnRGJik7CisgICAgb3BlcmF0b3IgUVBvaW50RigpIGNvbnN0OworI2VuZGlmCisK
K3ByaXZhdGU6CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbV94LCBtX3k7Cit9OworCitpbmxp
bmUgRnJhY3Rpb25hbExheW91dFBvaW50JiBvcGVyYXRvcis9KEZyYWN0aW9uYWxMYXlvdXRQb2lu
dCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCit7CisgICAgYS5tb3ZlKGIud2lk
dGgoKSwgYi5oZWlnaHQoKSk7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQmIG9wZXJhdG9yLT0oRnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25zdCBG
cmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK3sKKyAgICBhLm1vdmUoLWIud2lkdGgoKSwgLWIuaGVp
Z2h0KCkpOworICAgIHJldHVybiBhOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50
IG9wZXJhdG9yKyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRTaXplJiBiKQoreworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoYS54
KCkgKyBiLndpZHRoKCksIGEueSgpICsgYi5oZWlnaHQoKSk7Cit9CisKK2lubGluZSBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwg
Y29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBiKQoreworICAgIHJldHVybiBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQoYS54KCkgKyBiLngoKSwgYS55KCkgKyBiLnkoKSk7Cit9CisKK2lubGluZSBG
cmFjdGlvbmFsTGF5b3V0U2l6ZSBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50
JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGIpCit7CisgICAgcmV0dXJuIEZyYWN0
aW9uYWxMYXlvdXRTaXplKGEueCgpIC0gYi54KCksIGEueSgpIC0gYi55KCkpOworfQorCitpbmxp
bmUgRnJhY3Rpb25hbExheW91dFBvaW50IG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQoreworICAgIHJldHVybiBG
cmFjdGlvbmFsTGF5b3V0UG9pbnQoYS54KCkgLSBiLndpZHRoKCksIGEueSgpIC0gYi5oZWlnaHQo
KSk7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgb3BlcmF0b3ItKGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRQb2ludCYgcG9pbnQpCit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlv
dXRQb2ludCgtcG9pbnQueCgpLCAtcG9pbnQueSgpKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRQb2ludCYgYikKK3sKKyAgICByZXR1cm4gYS54KCkgPT0gYi54KCkgJiYgYS55KCkgPT0gYi55
KCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJhY3Rpb25hbExheW91dFBv
aW50JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGIpCit7CisgICAgcmV0dXJuIGEu
eCgpICE9IGIueCgpIHx8IGEueSgpICE9IGIueSgpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExh
eW91dFBvaW50IHRvUG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpCit7Cisg
ICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCkpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFNpemUgdG9TaXplKGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRQb2ludCYgYSkKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUo
YS54KCksIGEueSgpKTsKK30KKworaW5saW5lIEludFBvaW50IGZsb29yZWRJbnRQb2ludChjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50KQoreworICAgIHJldHVybiBJbnRQb2ludChw
b2ludC54KCkuZmxvb3IoKSwgcG9pbnQueSgpLmZsb29yKCkpOworfQorCitpbmxpbmUgSW50UG9p
bnQgcm91bmRlZEludFBvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcG9pbnQpCit7
CisgICAgcmV0dXJuIEludFBvaW50KHBvaW50LngoKS5yb3VuZCgpLCBwb2ludC55KCkucm91bmQo
KSk7Cit9CisKK2lubGluZSBJbnRQb2ludCByb3VuZGVkSW50UG9pbnQoY29uc3QgRnJhY3Rpb25h
bExheW91dFNpemUmIHNpemUpCit7CisgICAgcmV0dXJuIEludFBvaW50KHNpemUud2lkdGgoKS5y
b3VuZCgpLCBzaXplLmhlaWdodCgpLnJvdW5kKCkpOworfQorCitpbmxpbmUgSW50UG9pbnQgY2Vp
bGVkSW50UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBwb2ludCkKK3sKKyAgICBy
ZXR1cm4gSW50UG9pbnQocG9pbnQueCgpLmNlaWwoKSwgcG9pbnQueSgpLmNlaWwoKSk7Cit9CisK
K2lubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgZmxvb3JlZEZyYWN0aW9uYWxMYXlvdXRQb2lu
dChjb25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9p
bnQoRnJhY3Rpb25hbExheW91dFVuaXQ6OmZyb21GbG9hdEZsb29yKHAueCgpKSwgRnJhY3Rpb25h
bExheW91dFVuaXQ6OmZyb21GbG9hdEZsb29yKHAueSgpKSk7Cit9CisKK2lubGluZSBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQgY2VpbGVkRnJhY3Rpb25hbExheW91dFBvaW50KGNvbnN0IEZsb2F0UG9p
bnQmIHApCit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChGcmFjdGlvbmFsTGF5
b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChwLngoKSksIEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpmcm9t
RmxvYXRDZWlsKHAueSgpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEZyYWN0aW9uYWxMYXlvdXRQb2ludF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9MYXlvdXRQb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0xheW91dFBvaW50LmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFBvaW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDExICsyOCwxMSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEZyYWN0
aW9uYWxMYXlvdXRQb2ludF9oCi0jZGVmaW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludF9oCisjaWZu
ZGVmIExheW91dFBvaW50X2gKKyNkZWZpbmUgTGF5b3V0UG9pbnRfaAogCiAjaW5jbHVkZSAiRmxv
YXRQb2ludC5oIgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRTaXplLmgiCisjaW5jbHVkZSAi
TGF5b3V0U2l6ZS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKICNpZiBQTEFURk9S
TShRVCkKQEAgLTQ1LDM5ICs0NSwzOSBAQCBRVF9FTkRfTkFNRVNQQUNFCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgRnJhY3Rpb25hbExheW91dFBvaW50IHsKK2NsYXNzIExheW91dFBv
aW50IHsKIHB1YmxpYzoKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoKSA6IG1feCgwKSwgbV95
KDApIHsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludChGcmFjdGlvbmFsTGF5b3V0VW5pdCB4
LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCB5KSA6IG1feCh4KSwgbV95KHkpIHsgfQotICAgIEZyYWN0
aW9uYWxMYXlvdXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpIDogbV94KHBvaW50LngoKSks
IG1feShwb2ludC55KCkpIHsgfQotICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRQb2ludChj
b25zdCBGbG9hdFBvaW50JiBzaXplKSA6IG1feChzaXplLngoKSksIG1feShzaXplLnkoKSkgeyB9
Ci0gICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFBvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRTaXplJiBzaXplKSA6IG1feChzaXplLndpZHRoKCkpLCBtX3koc2l6ZS5oZWlnaHQoKSkgeyB9
Ci0KLSAgICBzdGF0aWMgRnJhY3Rpb25hbExheW91dFBvaW50IHplcm8oKSB7IHJldHVybiBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQoKTsgfQotCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgeCgpIGNv
bnN0IHsgcmV0dXJuIG1feDsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHkoKSBjb25zdCB7
IHJldHVybiBtX3k7IH0KLQotICAgIHZvaWQgc2V0WChGcmFjdGlvbmFsTGF5b3V0VW5pdCB4KSB7
IG1feCA9IHg7IH0KLSAgICB2b2lkIHNldFkoRnJhY3Rpb25hbExheW91dFVuaXQgeSkgeyBtX3kg
PSB5OyB9Ci0KLSAgICB2b2lkIG1vdmUoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHMpIHsg
bW92ZShzLndpZHRoKCksIHMuaGVpZ2h0KCkpOyB9IAotICAgIHZvaWQgbW92ZUJ5KGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRQb2ludCYgb2Zmc2V0KSB7IG1vdmUob2Zmc2V0LngoKSwgb2Zmc2V0Lnko
KSk7IH0KLSAgICB2b2lkIG1vdmUoRnJhY3Rpb25hbExheW91dFVuaXQgZHgsIEZyYWN0aW9uYWxM
YXlvdXRVbml0IGR5KSB7IG1feCArPSBkeDsgbV95ICs9IGR5OyB9CisgICAgTGF5b3V0UG9pbnQo
KSA6IG1feCgwKSwgbV95KDApIHsgfQorICAgIExheW91dFBvaW50KExheW91dFVuaXQgeCwgTGF5
b3V0VW5pdCB5KSA6IG1feCh4KSwgbV95KHkpIHsgfQorICAgIExheW91dFBvaW50KGNvbnN0IElu
dFBvaW50JiBwb2ludCkgOiBtX3gocG9pbnQueCgpKSwgbV95KHBvaW50LnkoKSkgeyB9CisgICAg
ZXhwbGljaXQgTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgc2l6ZSkgOiBtX3goc2l6ZS54
KCkpLCBtX3koc2l6ZS55KCkpIHsgfQorICAgIGV4cGxpY2l0IExheW91dFBvaW50KGNvbnN0IExh
eW91dFNpemUmIHNpemUpIDogbV94KHNpemUud2lkdGgoKSksIG1feShzaXplLmhlaWdodCgpKSB7
IH0KKworICAgIHN0YXRpYyBMYXlvdXRQb2ludCB6ZXJvKCkgeyByZXR1cm4gTGF5b3V0UG9pbnQo
KTsgfQorCisgICAgTGF5b3V0VW5pdCB4KCkgY29uc3QgeyByZXR1cm4gbV94OyB9CisgICAgTGF5
b3V0VW5pdCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9CisKKyAgICB2b2lkIHNldFgoTGF5b3V0
VW5pdCB4KSB7IG1feCA9IHg7IH0KKyAgICB2b2lkIHNldFkoTGF5b3V0VW5pdCB5KSB7IG1feSA9
IHk7IH0KKworICAgIHZvaWQgbW92ZShjb25zdCBMYXlvdXRTaXplJiBzKSB7IG1vdmUocy53aWR0
aCgpLCBzLmhlaWdodCgpKTsgfSAKKyAgICB2b2lkIG1vdmVCeShjb25zdCBMYXlvdXRQb2ludCYg
b2Zmc2V0KSB7IG1vdmUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7IH0KKyAgICB2b2lkIG1vdmUo
TGF5b3V0VW5pdCBkeCwgTGF5b3V0VW5pdCBkeSkgeyBtX3ggKz0gZHg7IG1feSArPSBkeTsgfQog
ICAgIHZvaWQgc2NhbGUoZmxvYXQgc3gsIGZsb2F0IHN5KQogICAgIHsKICAgICAgICAgbV94ICo9
IHN4OwogICAgICAgICBtX3kgKj0gc3k7CiAgICAgfQogICAgIAotICAgIEZyYWN0aW9uYWxMYXlv
dXRQb2ludCBleHBhbmRlZFRvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgb3RoZXIpIGNv
bnN0CisgICAgTGF5b3V0UG9pbnQgZXhwYW5kZWRUbyhjb25zdCBMYXlvdXRQb2ludCYgb3RoZXIp
IGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KHN0ZDo6
bWF4KG1feCwgb3RoZXIubV94KSwgc3RkOjptYXgobV95LCBvdGhlci5tX3kpKTsKKyAgICAgICAg
cmV0dXJuIExheW91dFBvaW50KHN0ZDo6bWF4KG1feCwgb3RoZXIubV94KSwgc3RkOjptYXgobV95
LCBvdGhlci5tX3kpKTsKICAgICB9CiAKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgc2hydW5r
VG8oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBvdGhlcikgY29uc3QKKyAgICBMYXlvdXRQ
b2ludCBzaHJ1bmtUbyhjb25zdCBMYXlvdXRQb2ludCYgb3RoZXIpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KHN0ZDo6bWluKG1feCwgb3RoZXIubV94
KSwgc3RkOjptaW4obV95LCBvdGhlci5tX3kpKTsKKyAgICAgICAgcmV0dXJuIExheW91dFBvaW50
KHN0ZDo6bWluKG1feCwgb3RoZXIubV94KSwgc3RkOjptaW4obV95LCBvdGhlci5tX3kpKTsKICAg
ICB9CiAKICAgICB2b2lkIGNsYW1wTmVnYXRpdmVUb1plcm8oKQpAQCAtODUsMTA4ICs4NSwxMzcg
QEAgcHVibGljOgogICAgICAgICAqdGhpcyA9IGV4cGFuZGVkVG8oemVybygpKTsKICAgICB9CiAK
LSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgdHJhbnNwb3NlZFBvaW50KCkgY29uc3QKKyAgICBM
YXlvdXRQb2ludCB0cmFuc3Bvc2VkUG9pbnQoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJu
IEZyYWN0aW9uYWxMYXlvdXRQb2ludChtX3ksIG1feCk7CisgICAgICAgIHJldHVybiBMYXlvdXRQ
b2ludChtX3ksIG1feCk7CiAgICAgfQogCiAjaWYgUExBVEZPUk0oUVQpCi0gICAgZXhwbGljaXQg
RnJhY3Rpb25hbExheW91dFBvaW50KGNvbnN0IFFQb2ludCYpOwotICAgIGV4cGxpY2l0IEZyYWN0
aW9uYWxMYXlvdXRQb2ludChjb25zdCBRUG9pbnRGJik7CisgICAgZXhwbGljaXQgTGF5b3V0UG9p
bnQoY29uc3QgUVBvaW50Jik7CisgICAgZXhwbGljaXQgTGF5b3V0UG9pbnQoY29uc3QgUVBvaW50
RiYpOwogICAgIG9wZXJhdG9yIFFQb2ludEYoKSBjb25zdDsKICNlbmRpZgogCiBwcml2YXRlOgot
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1feCwgbV95OworICAgIExheW91dFVuaXQgbV94LCBt
X3k7CiB9OwogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50JiBvcGVyYXRvcis9KEZyYWN0
aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCitpbmxp
bmUgTGF5b3V0UG9pbnQmIG9wZXJhdG9yKz0oTGF5b3V0UG9pbnQmIGEsIGNvbnN0IExheW91dFNp
emUmIGIpCiB7CiAgICAgYS5tb3ZlKGIud2lkdGgoKSwgYi5oZWlnaHQoKSk7CiAgICAgcmV0dXJu
IGE7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIG9wZXJhdG9yLT0oRnJhY3Rp
b25hbExheW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK2lubGlu
ZSBMYXlvdXRQb2ludCYgb3BlcmF0b3ItPShMYXlvdXRQb2ludCYgYSwgY29uc3QgTGF5b3V0U2l6
ZSYgYikKIHsKICAgICBhLm1vdmUoLWIud2lkdGgoKSwgLWIuaGVpZ2h0KCkpOwogICAgIHJldHVy
biBhOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50IG9wZXJhdG9yKyhjb25zdCBG
cmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQor
aW5saW5lIExheW91dFBvaW50IG9wZXJhdG9yKyhjb25zdCBMYXlvdXRQb2ludCYgYSwgY29uc3Qg
TGF5b3V0U2l6ZSYgYikKIHsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KGEueCgp
ICsgYi53aWR0aCgpLCBhLnkoKSArIGIuaGVpZ2h0KCkpOworICAgIHJldHVybiBMYXlvdXRQb2lu
dChhLngoKSArIGIud2lkdGgoKSwgYS55KCkgKyBiLmhlaWdodCgpKTsKIH0KIAotaW5saW5lIEZy
YWN0aW9uYWxMYXlvdXRQb2ludCBvcGVyYXRvcisoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50
JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGIpCitpbmxpbmUgTGF5b3V0UG9pbnQg
b3BlcmF0b3IrKGNvbnN0IExheW91dFBvaW50JiBhLCBjb25zdCBMYXlvdXRQb2ludCYgYikKIHsK
LSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KGEueCgpICsgYi54KCksIGEueSgpICsg
Yi55KCkpOworICAgIHJldHVybiBMYXlvdXRQb2ludChhLngoKSArIGIueCgpLCBhLnkoKSArIGIu
eSgpKTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplIG9wZXJhdG9yLShjb25zdCBG
cmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYikK
K2lubGluZSBMYXlvdXRTaXplIG9wZXJhdG9yLShjb25zdCBMYXlvdXRQb2ludCYgYSwgY29uc3Qg
TGF5b3V0UG9pbnQmIGIpCiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKGEueCgp
IC0gYi54KCksIGEueSgpIC0gYi55KCkpOworICAgIHJldHVybiBMYXlvdXRTaXplKGEueCgpIC0g
Yi54KCksIGEueSgpIC0gYi55KCkpOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50
IG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRTaXplJiBiKQoraW5saW5lIExheW91dFBvaW50IG9wZXJhdG9yLShjb25zdCBMYXlv
dXRQb2ludCYgYSwgY29uc3QgTGF5b3V0U2l6ZSYgYikKIHsKLSAgICByZXR1cm4gRnJhY3Rpb25h
bExheW91dFBvaW50KGEueCgpIC0gYi53aWR0aCgpLCBhLnkoKSAtIGIuaGVpZ2h0KCkpOworICAg
IHJldHVybiBMYXlvdXRQb2ludChhLngoKSAtIGIud2lkdGgoKSwgYS55KCkgLSBiLmhlaWdodCgp
KTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBvcGVyYXRvci0oY29uc3QgRnJh
Y3Rpb25hbExheW91dFBvaW50JiBwb2ludCkKK2lubGluZSBMYXlvdXRQb2ludCBvcGVyYXRvci0o
Y29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQogewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQoLXBvaW50LngoKSwgLXBvaW50LnkoKSk7CisgICAgcmV0dXJuIExheW91dFBvaW50KC1w
b2ludC54KCksIC1wb2ludC55KCkpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBi
KQoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMYXlvdXRQb2ludCYgYSwgY29uc3QgTGF5
b3V0UG9pbnQmIGIpCiB7CiAgICAgcmV0dXJuIGEueCgpID09IGIueCgpICYmIGEueSgpID09IGIu
eSgpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBiKQoraW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBMYXlvdXRQb2ludCYgYSwgY29uc3QgTGF5b3V0UG9pbnQmIGIpCiB7CiAg
ICAgcmV0dXJuIGEueCgpICE9IGIueCgpIHx8IGEueSgpICE9IGIueSgpOwogfQogCi1pbmxpbmUg
RnJhY3Rpb25hbExheW91dFBvaW50IHRvUG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUm
IHNpemUpCitpbmxpbmUgTGF5b3V0UG9pbnQgdG9Qb2ludChjb25zdCBMYXlvdXRTaXplJiBzaXpl
KQogewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpKTsKKyAgICByZXR1cm4gTGF5b3V0UG9pbnQoc2l6ZS53aWR0aCgpLCBzaXplLmhl
aWdodCgpKTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplIHRvU2l6ZShjb25zdCBG
cmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEpCitpbmxpbmUgTGF5b3V0UG9pbnQgdG9MYXlvdXRQb2lu
dChjb25zdCBMYXlvdXRTaXplJiBwKQogewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6
ZShhLngoKSwgYS55KCkpOworICAgIHJldHVybiBMYXlvdXRQb2ludChwLndpZHRoKCksIHAuaGVp
Z2h0KCkpOwogfQogCi1pbmxpbmUgSW50UG9pbnQgZmxvb3JlZEludFBvaW50KGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRQb2ludCYgcG9pbnQpCitpbmxpbmUgTGF5b3V0U2l6ZSB0b1NpemUoY29uc3Qg
TGF5b3V0UG9pbnQmIGEpCit7CisgICAgcmV0dXJuIExheW91dFNpemUoYS54KCksIGEueSgpKTsK
K30KKworaW5saW5lIExheW91dFBvaW50IHJvdW5kZWRMYXlvdXRQb2ludChjb25zdCBGbG9hdFBv
aW50JiBwKQoreworI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisgICAgcmV0dXJuIExheW91
dFBvaW50KHApOworI2Vsc2UKKyAgICByZXR1cm4gcm91bmRlZEludFBvaW50KHApOworI2VuZGlm
Cit9CisKK2lubGluZSBJbnRQb2ludCBmbG9vcmVkSW50UG9pbnQoY29uc3QgTGF5b3V0UG9pbnQm
IHBvaW50KQogewogICAgIHJldHVybiBJbnRQb2ludChwb2ludC54KCkuZmxvb3IoKSwgcG9pbnQu
eSgpLmZsb29yKCkpOwogfQogCi1pbmxpbmUgSW50UG9pbnQgcm91bmRlZEludFBvaW50KGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcG9pbnQpCitpbmxpbmUgSW50UG9pbnQgcm91bmRlZElu
dFBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCkKIHsKICAgICByZXR1cm4gSW50UG9pbnQo
cG9pbnQueCgpLnJvdW5kKCksIHBvaW50LnkoKS5yb3VuZCgpKTsKIH0KIAotaW5saW5lIEludFBv
aW50IHJvdW5kZWRJbnRQb2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkKK2lu
bGluZSBJbnRQb2ludCByb3VuZGVkSW50UG9pbnQoY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkKIHsK
ICAgICByZXR1cm4gSW50UG9pbnQoc2l6ZS53aWR0aCgpLnJvdW5kKCksIHNpemUuaGVpZ2h0KCku
cm91bmQoKSk7CiB9CiAKLWlubGluZSBJbnRQb2ludCBjZWlsZWRJbnRQb2ludChjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50KQoraW5saW5lIEludFBvaW50IGNlaWxlZEludFBvaW50
KGNvbnN0IExheW91dFBvaW50JiBwb2ludCkKIHsKICAgICByZXR1cm4gSW50UG9pbnQocG9pbnQu
eCgpLmNlaWwoKSwgcG9pbnQueSgpLmNlaWwoKSk7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQgZmxvb3JlZEZyYWN0aW9uYWxMYXlvdXRQb2ludChjb25zdCBGbG9hdFBvaW50JiBw
KQoraW5saW5lIExheW91dFBvaW50IGZsb29yZWRMYXlvdXRQb2ludChjb25zdCBGbG9hdFBvaW50
JiBwKQoreworICAgIHJldHVybiBMYXlvdXRQb2ludChMYXlvdXRVbml0Ojpmcm9tRmxvYXRGbG9v
cihwLngoKSksIExheW91dFVuaXQ6OmZyb21GbG9hdEZsb29yKHAueSgpKSk7Cit9CisKK2lubGlu
ZSBMYXlvdXRQb2ludCBmbG9vcmVkTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRTaXplJiBwKQorewor
ICAgIHJldHVybiBMYXlvdXRQb2ludChMYXlvdXRVbml0Ojpmcm9tRmxvYXRGbG9vcihwLndpZHRo
KCkpLCBMYXlvdXRVbml0Ojpmcm9tRmxvYXRGbG9vcihwLmhlaWdodCgpKSk7Cit9CisKK2lubGlu
ZSBMYXlvdXRQb2ludCBjZWlsZWRMYXlvdXRQb2ludChjb25zdCBGbG9hdFBvaW50JiBwKQorewor
ICAgIHJldHVybiBMYXlvdXRQb2ludChMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKHAueCgpKSwg
TGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChwLnkoKSkpOworfQorCitpbmxpbmUgTGF5b3V0U2l6
ZSB0b0xheW91dFNpemUoY29uc3QgTGF5b3V0UG9pbnQmIHApCiB7Ci0gICAgcmV0dXJuIEZyYWN0
aW9uYWxMYXlvdXRQb2ludChGcmFjdGlvbmFsTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Rmxvb3IocC54
KCkpLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Rmxvb3IocC55KCkpKTsKKyAgICBy
ZXR1cm4gTGF5b3V0U2l6ZShwLngoKSwgcC55KCkpOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExh
eW91dFBvaW50IGNlaWxlZEZyYWN0aW9uYWxMYXlvdXRQb2ludChjb25zdCBGbG9hdFBvaW50JiBw
KQoraW5saW5lIEludFNpemUgcGl4ZWxTbmFwcGVkSW50U2l6ZShjb25zdCBMYXlvdXRTaXplJiBz
LCBjb25zdCBMYXlvdXRQb2ludCYgcCkKIHsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBv
aW50KEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKHAueCgpKSwgRnJhY3Rpb25h
bExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwocC55KCkpKTsKKyAgICByZXR1cm4gSW50U2l6ZShz
bmFwU2l6ZVRvUGl4ZWwocy53aWR0aCgpLCBwLngoKSksIHNuYXBTaXplVG9QaXhlbChzLmhlaWdo
dCgpLCBwLnkoKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBG
cmFjdGlvbmFsTGF5b3V0UG9pbnRfaAorI2VuZGlmIC8vIExheW91dFBvaW50X2gKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJlY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJlY3QuY3BwCShyZXZp
c2lvbiAxMzM1MTcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0
aW9uYWxMYXlvdXRSZWN0LmNwcDoxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9MYXlvdXRSZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFJlY3QuaCIKKwor
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRVbml0Lmgi
CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCit1c2luZyBzdGQ6Om1heDsKK3VzaW5nIHN0ZDo6bWlu
OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZyYWN0aW9uYWxMYXlvdXRSZWN0OjpGcmFjdGlv
bmFsTGF5b3V0UmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCisgICAgOiBtX2xvY2F0aW9uKEZyYWN0
aW9uYWxMYXlvdXRQb2ludChyLmxvY2F0aW9uKCkpKQorICAgICwgbV9zaXplKEZyYWN0aW9uYWxM
YXlvdXRTaXplKHIuc2l6ZSgpKSkKK3sKK30KKworYm9vbCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6
aW50ZXJzZWN0cyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgb3RoZXIpIGNvbnN0Cit7Cisg
ICAgLy8gQ2hlY2tpbmcgZW1wdGluZXNzIGhhbmRsZXMgbmVnYXRpdmUgd2lkdGhzIGFzIHdlbGwg
YXMgemVyby4KKyAgICByZXR1cm4gIWlzRW1wdHkoKSAmJiAhb3RoZXIuaXNFbXB0eSgpCisgICAg
ICAgICYmIHgoKSA8IG90aGVyLm1heFgoKSAmJiBvdGhlci54KCkgPCBtYXhYKCkKKyAgICAgICAg
JiYgeSgpIDwgb3RoZXIubWF4WSgpICYmIG90aGVyLnkoKSA8IG1heFkoKTsKK30KKworYm9vbCBG
cmFjdGlvbmFsTGF5b3V0UmVjdDo6Y29udGFpbnMoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3Qm
IG90aGVyKSBjb25zdAoreworICAgIHJldHVybiB4KCkgPD0gb3RoZXIueCgpICYmIG1heFgoKSA+
PSBvdGhlci5tYXhYKCkKKyAgICAgICAgJiYgeSgpIDw9IG90aGVyLnkoKSAmJiBtYXhZKCkgPj0g
b3RoZXIubWF4WSgpOworfQorCit2b2lkIEZyYWN0aW9uYWxMYXlvdXRSZWN0OjppbnRlcnNlY3Qo
Y29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90aGVyKQoreworICAgIEZyYWN0aW9uYWxMYXlv
dXRQb2ludCBuZXdMb2NhdGlvbihtYXgoeCgpLCBvdGhlci54KCkpLCBtYXgoeSgpLCBvdGhlci55
KCkpKTsKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbmV3TWF4UG9pbnQobWluKG1heFgoKSwg
b3RoZXIubWF4WCgpKSwgbWluKG1heFkoKSwgb3RoZXIubWF4WSgpKSk7CisKKyAgICAvLyBSZXR1
cm4gYSBjbGVhbiBlbXB0eSByZWN0YW5nbGUgZm9yIG5vbi1pbnRlcnNlY3RpbmcgY2FzZXMuCisg
ICAgaWYgKG5ld0xvY2F0aW9uLngoKSA+PSBuZXdNYXhQb2ludC54KCkgfHwgbmV3TG9jYXRpb24u
eSgpID49IG5ld01heFBvaW50LnkoKSkgeworICAgICAgICBuZXdMb2NhdGlvbiA9IEZyYWN0aW9u
YWxMYXlvdXRQb2ludCgwLCAwKTsKKyAgICAgICAgbmV3TWF4UG9pbnQgPSBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQoMCwgMCk7CisgICAgfQorCisgICAgbV9sb2NhdGlvbiA9IG5ld0xvY2F0aW9uOwor
ICAgIG1fc2l6ZSA9IG5ld01heFBvaW50IC0gbmV3TG9jYXRpb247Cit9CisKK3ZvaWQgRnJhY3Rp
b25hbExheW91dFJlY3Q6OnVuaXRlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBvdGhlcikK
K3sKKyAgICAvLyBIYW5kbGUgZW1wdHkgc3BlY2lhbCBjYXNlcyBmaXJzdC4KKyAgICBpZiAob3Ro
ZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGlzRW1wdHkoKSkgeworICAg
ICAgICAqdGhpcyA9IG90aGVyOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRnJhY3Rp
b25hbExheW91dFBvaW50IG5ld0xvY2F0aW9uKG1pbih4KCksIG90aGVyLngoKSksIG1pbih5KCks
IG90aGVyLnkoKSkpOworICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdNYXhQb2ludChtYXgo
bWF4WCgpLCBvdGhlci5tYXhYKCkpLCBtYXgobWF4WSgpLCBvdGhlci5tYXhZKCkpKTsKKworICAg
IG1fbG9jYXRpb24gPSBuZXdMb2NhdGlvbjsKKyAgICBtX3NpemUgPSBuZXdNYXhQb2ludCAtIG5l
d0xvY2F0aW9uOworfQorCit2b2lkIEZyYWN0aW9uYWxMYXlvdXRSZWN0Ojp1bml0ZUlmTm9uWmVy
byhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgb3RoZXIpCit7CisgICAgLy8gSGFuZGxlIGVt
cHR5IHNwZWNpYWwgY2FzZXMgZmlyc3QuCisgICAgaWYgKCFvdGhlci53aWR0aCgpICYmICFvdGhl
ci5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghd2lkdGgoKSAmJiAhaGVpZ2h0
KCkpIHsKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdMb2NhdGlvbihtaW4oeCgpLCBvdGhlci54KCkp
LCBtaW4oeSgpLCBvdGhlci55KCkpKTsKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbmV3TWF4
UG9pbnQobWF4KG1heFgoKSwgb3RoZXIubWF4WCgpKSwgbWF4KG1heFkoKSwgb3RoZXIubWF4WSgp
KSk7CisKKyAgICBtX2xvY2F0aW9uID0gbmV3TG9jYXRpb247CisgICAgbV9zaXplID0gbmV3TWF4
UG9pbnQgLSBuZXdMb2NhdGlvbjsKK30KKwordm9pZCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6c2Nh
bGUoZmxvYXQgcykKK3sKKyAgICBtX2xvY2F0aW9uLnNjYWxlKHMsIHMpOworICAgIG1fc2l6ZS5z
Y2FsZShzKTsKK30KKworRnJhY3Rpb25hbExheW91dFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlY3Rv
cjxGcmFjdGlvbmFsTGF5b3V0UmVjdD4mIHJlY3RzKQoreworICAgIEZyYWN0aW9uYWxMYXlvdXRS
ZWN0IHJlc3VsdDsKKworICAgIHNpemVfdCBjb3VudCA9IHJlY3RzLnNpemUoKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIHJlc3VsdC51bml0ZShyZWN0
c1tpXSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitJbnRSZWN0IGVuY2xvc2luZ0ludFJl
Y3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIHJlY3QpCit7CisgICAgSW50UG9pbnQgbG9j
YXRpb24gPSBmbG9vcmVkSW50UG9pbnQocmVjdC5taW5YTWluWUNvcm5lcigpKTsKKyAgICBJbnRQ
b2ludCBtYXhQb2ludCA9IGNlaWxlZEludFBvaW50KHJlY3QubWF4WE1heFlDb3JuZXIoKSk7CisK
KyAgICByZXR1cm4gSW50UmVjdChsb2NhdGlvbiwgbWF4UG9pbnQgLSBsb2NhdGlvbik7Cit9CisK
K0ZyYWN0aW9uYWxMYXlvdXRSZWN0IGVuY2xvc2luZ0ZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIEZy
YWN0aW9uYWxMYXlvdXRQb2ludCBsb2NhdGlvbiA9IGZsb29yZWRGcmFjdGlvbmFsTGF5b3V0UG9p
bnQocmVjdC5taW5YTWluWUNvcm5lcigpKTsKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbWF4
UG9pbnQgPSBjZWlsZWRGcmFjdGlvbmFsTGF5b3V0UG9pbnQocmVjdC5tYXhYTWF4WUNvcm5lcigp
KTsKKworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UmVjdChsb2NhdGlvbiwgbWF4UG9pbnQg
LSBsb2NhdGlvbik7CisjZWxzZQorICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHJlY3QpOwor
I2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJlY3QuY3BwCShyZXZpc2lvbiAxMzM1MTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDEwIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRSZWN0LmgiCisjaW5jbHVkZSAiTGF5b3V0UmVj
dC5oIgogCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91
dFVuaXQuaCIKKyNpbmNsdWRlICJMYXlvdXRVbml0LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgog
CiB1c2luZyBzdGQ6Om1heDsKQEAgLTQwLDEzICs0MCwxMyBAQCB1c2luZyBzdGQ6Om1pbjsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1GcmFjdGlvbmFsTGF5b3V0UmVjdDo6RnJhY3Rpb25hbExh
eW91dFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQotICAgIDogbV9sb2NhdGlvbihGcmFjdGlvbmFs
TGF5b3V0UG9pbnQoci5sb2NhdGlvbigpKSkKLSAgICAsIG1fc2l6ZShGcmFjdGlvbmFsTGF5b3V0
U2l6ZShyLnNpemUoKSkpCitMYXlvdXRSZWN0OjpMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cikKKyAgICA6IG1fbG9jYXRpb24oTGF5b3V0UG9pbnQoci5sb2NhdGlvbigpKSkKKyAgICAsIG1f
c2l6ZShMYXlvdXRTaXplKHIuc2l6ZSgpKSkKIHsKIH0KIAotYm9vbCBGcmFjdGlvbmFsTGF5b3V0
UmVjdDo6aW50ZXJzZWN0cyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgb3RoZXIpIGNvbnN0
Citib29sIExheW91dFJlY3Q6OmludGVyc2VjdHMoY29uc3QgTGF5b3V0UmVjdCYgb3RoZXIpIGNv
bnN0CiB7CiAgICAgLy8gQ2hlY2tpbmcgZW1wdGluZXNzIGhhbmRsZXMgbmVnYXRpdmUgd2lkdGhz
IGFzIHdlbGwgYXMgemVyby4KICAgICByZXR1cm4gIWlzRW1wdHkoKSAmJiAhb3RoZXIuaXNFbXB0
eSgpCkBAIC01NCwyOCArNTQsMjggQEAgYm9vbCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6aW50ZXJz
ZWN0cyhjbwogICAgICAgICAmJiB5KCkgPCBvdGhlci5tYXhZKCkgJiYgb3RoZXIueSgpIDwgbWF4
WSgpOwogfQogCi1ib29sIEZyYWN0aW9uYWxMYXlvdXRSZWN0Ojpjb250YWlucyhjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UmVjdCYgb3RoZXIpIGNvbnN0Citib29sIExheW91dFJlY3Q6OmNvbnRhaW5z
KGNvbnN0IExheW91dFJlY3QmIG90aGVyKSBjb25zdAogewogICAgIHJldHVybiB4KCkgPD0gb3Ro
ZXIueCgpICYmIG1heFgoKSA+PSBvdGhlci5tYXhYKCkKICAgICAgICAgJiYgeSgpIDw9IG90aGVy
LnkoKSAmJiBtYXhZKCkgPj0gb3RoZXIubWF4WSgpOwogfQogCi12b2lkIEZyYWN0aW9uYWxMYXlv
dXRSZWN0OjppbnRlcnNlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90aGVyKQordm9p
ZCBMYXlvdXRSZWN0OjppbnRlcnNlY3QoY29uc3QgTGF5b3V0UmVjdCYgb3RoZXIpCiB7Ci0gICAg
RnJhY3Rpb25hbExheW91dFBvaW50IG5ld0xvY2F0aW9uKG1heCh4KCksIG90aGVyLngoKSksIG1h
eCh5KCksIG90aGVyLnkoKSkpOwotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdNYXhQb2lu
dChtaW4obWF4WCgpLCBvdGhlci5tYXhYKCkpLCBtaW4obWF4WSgpLCBvdGhlci5tYXhZKCkpKTsK
KyAgICBMYXlvdXRQb2ludCBuZXdMb2NhdGlvbihtYXgoeCgpLCBvdGhlci54KCkpLCBtYXgoeSgp
LCBvdGhlci55KCkpKTsKKyAgICBMYXlvdXRQb2ludCBuZXdNYXhQb2ludChtaW4obWF4WCgpLCBv
dGhlci5tYXhYKCkpLCBtaW4obWF4WSgpLCBvdGhlci5tYXhZKCkpKTsKIAogICAgIC8vIFJldHVy
biBhIGNsZWFuIGVtcHR5IHJlY3RhbmdsZSBmb3Igbm9uLWludGVyc2VjdGluZyBjYXNlcy4KICAg
ICBpZiAobmV3TG9jYXRpb24ueCgpID49IG5ld01heFBvaW50LngoKSB8fCBuZXdMb2NhdGlvbi55
KCkgPj0gbmV3TWF4UG9pbnQueSgpKSB7Ci0gICAgICAgIG5ld0xvY2F0aW9uID0gRnJhY3Rpb25h
bExheW91dFBvaW50KDAsIDApOwotICAgICAgICBuZXdNYXhQb2ludCA9IEZyYWN0aW9uYWxMYXlv
dXRQb2ludCgwLCAwKTsKKyAgICAgICAgbmV3TG9jYXRpb24gPSBMYXlvdXRQb2ludCgwLCAwKTsK
KyAgICAgICAgbmV3TWF4UG9pbnQgPSBMYXlvdXRQb2ludCgwLCAwKTsKICAgICB9CiAKICAgICBt
X2xvY2F0aW9uID0gbmV3TG9jYXRpb247CiAgICAgbV9zaXplID0gbmV3TWF4UG9pbnQgLSBuZXdM
b2NhdGlvbjsKIH0KIAotdm9pZCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6dW5pdGUoY29uc3QgRnJh
Y3Rpb25hbExheW91dFJlY3QmIG90aGVyKQordm9pZCBMYXlvdXRSZWN0Ojp1bml0ZShjb25zdCBM
YXlvdXRSZWN0JiBvdGhlcikKIHsKICAgICAvLyBIYW5kbGUgZW1wdHkgc3BlY2lhbCBjYXNlcyBm
aXJzdC4KICAgICBpZiAob3RoZXIuaXNFbXB0eSgpKQpAQCAtODUsMTQgKzg1LDE0IEBAIHZvaWQg
RnJhY3Rpb25hbExheW91dFJlY3Q6OnVuaXRlKGNvbnN0IEYKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdMb2NhdGlvbihtaW4oeCgpLCBvdGhl
ci54KCkpLCBtaW4oeSgpLCBvdGhlci55KCkpKTsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQg
bmV3TWF4UG9pbnQobWF4KG1heFgoKSwgb3RoZXIubWF4WCgpKSwgbWF4KG1heFkoKSwgb3RoZXIu
bWF4WSgpKSk7CisgICAgTGF5b3V0UG9pbnQgbmV3TG9jYXRpb24obWluKHgoKSwgb3RoZXIueCgp
KSwgbWluKHkoKSwgb3RoZXIueSgpKSk7CisgICAgTGF5b3V0UG9pbnQgbmV3TWF4UG9pbnQobWF4
KG1heFgoKSwgb3RoZXIubWF4WCgpKSwgbWF4KG1heFkoKSwgb3RoZXIubWF4WSgpKSk7CiAKICAg
ICBtX2xvY2F0aW9uID0gbmV3TG9jYXRpb247CiAgICAgbV9zaXplID0gbmV3TWF4UG9pbnQgLSBu
ZXdMb2NhdGlvbjsKIH0KIAotdm9pZCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6dW5pdGVJZk5vblpl
cm8oY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90aGVyKQordm9pZCBMYXlvdXRSZWN0Ojp1
bml0ZUlmTm9uWmVybyhjb25zdCBMYXlvdXRSZWN0JiBvdGhlcikKIHsKICAgICAvLyBIYW5kbGUg
ZW1wdHkgc3BlY2lhbCBjYXNlcyBmaXJzdC4KICAgICBpZiAoIW90aGVyLndpZHRoKCkgJiYgIW90
aGVyLmhlaWdodCgpKQpAQCAtMTAyLDIyICsxMDIsMjIgQEAgdm9pZCBGcmFjdGlvbmFsTGF5b3V0
UmVjdDo6dW5pdGVJZk5vblplcgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgRnJhY3Rp
b25hbExheW91dFBvaW50IG5ld0xvY2F0aW9uKG1pbih4KCksIG90aGVyLngoKSksIG1pbih5KCks
IG90aGVyLnkoKSkpOwotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdNYXhQb2ludChtYXgo
bWF4WCgpLCBvdGhlci5tYXhYKCkpLCBtYXgobWF4WSgpLCBvdGhlci5tYXhZKCkpKTsKKyAgICBM
YXlvdXRQb2ludCBuZXdMb2NhdGlvbihtaW4oeCgpLCBvdGhlci54KCkpLCBtaW4oeSgpLCBvdGhl
ci55KCkpKTsKKyAgICBMYXlvdXRQb2ludCBuZXdNYXhQb2ludChtYXgobWF4WCgpLCBvdGhlci5t
YXhYKCkpLCBtYXgobWF4WSgpLCBvdGhlci5tYXhZKCkpKTsKIAogICAgIG1fbG9jYXRpb24gPSBu
ZXdMb2NhdGlvbjsKICAgICBtX3NpemUgPSBuZXdNYXhQb2ludCAtIG5ld0xvY2F0aW9uOwogfQog
Ci12b2lkIEZyYWN0aW9uYWxMYXlvdXRSZWN0OjpzY2FsZShmbG9hdCBzKQordm9pZCBMYXlvdXRS
ZWN0OjpzY2FsZShmbG9hdCBzKQogewogICAgIG1fbG9jYXRpb24uc2NhbGUocywgcyk7CiAgICAg
bV9zaXplLnNjYWxlKHMpOwogfQogCi1GcmFjdGlvbmFsTGF5b3V0UmVjdCB1bmlvblJlY3QoY29u
c3QgVmVjdG9yPEZyYWN0aW9uYWxMYXlvdXRSZWN0PiYgcmVjdHMpCitMYXlvdXRSZWN0IHVuaW9u
UmVjdChjb25zdCBWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzKQogewotICAgIEZyYWN0aW9uYWxM
YXlvdXRSZWN0IHJlc3VsdDsKKyAgICBMYXlvdXRSZWN0IHJlc3VsdDsKIAogICAgIHNpemVfdCBj
b3VudCA9IHJlY3RzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpCkBAIC0xMjYsNyArMTI2LDcgQEAgRnJhY3Rpb25hbExheW91dFJlY3QgdW5pb25SZWN0KGNv
bnN0IFZlYwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUludFJlY3QgZW5jbG9zaW5nSW50UmVj
dChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgcmVjdCkKK0ludFJlY3QgZW5jbG9zaW5nSW50
UmVjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0KQogewogICAgIEludFBvaW50IGxvY2F0aW9uID0g
Zmxvb3JlZEludFBvaW50KHJlY3QubWluWE1pbllDb3JuZXIoKSk7CiAgICAgSW50UG9pbnQgbWF4
UG9pbnQgPSBjZWlsZWRJbnRQb2ludChyZWN0Lm1heFhNYXhZQ29ybmVyKCkpOwpAQCAtMTM0LDEz
ICsxMzQsMTMgQEAgSW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IEZyYWN0aW9uYQogICAg
IHJldHVybiBJbnRSZWN0KGxvY2F0aW9uLCBtYXhQb2ludCAtIGxvY2F0aW9uKTsKIH0KIAotRnJh
Y3Rpb25hbExheW91dFJlY3QgZW5jbG9zaW5nRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQorTGF5b3V0UmVjdCBlbmNsb3NpbmdMYXlvdXRSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKIHsKICNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAgIEZyYWN0aW9u
YWxMYXlvdXRQb2ludCBsb2NhdGlvbiA9IGZsb29yZWRGcmFjdGlvbmFsTGF5b3V0UG9pbnQocmVj
dC5taW5YTWluWUNvcm5lcigpKTsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbWF4UG9pbnQg
PSBjZWlsZWRGcmFjdGlvbmFsTGF5b3V0UG9pbnQocmVjdC5tYXhYTWF4WUNvcm5lcigpKTsKKyAg
ICBMYXlvdXRQb2ludCBsb2NhdGlvbiA9IGZsb29yZWRMYXlvdXRQb2ludChyZWN0Lm1pblhNaW5Z
Q29ybmVyKCkpOworICAgIExheW91dFBvaW50IG1heFBvaW50ID0gY2VpbGVkTGF5b3V0UG9pbnQo
cmVjdC5tYXhYTWF4WUNvcm5lcigpKTsKIAotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UmVj
dChsb2NhdGlvbiwgbWF4UG9pbnQgLSBsb2NhdGlvbik7CisgICAgcmV0dXJuIExheW91dFJlY3Qo
bG9jYXRpb24sIG1heFBvaW50IC0gbG9jYXRpb24pOwogI2Vsc2UKICAgICByZXR1cm4gZW5jbG9z
aW5nSW50UmVjdChyZWN0KTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTGF5b3V0UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0xheW91dFJlY3QuaAkocmV2aXNpb24gMTMzNTE3KQkoZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5oOjEzMzUxNykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJlY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDIyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZyYWN0aW9uYWxMYXlvdXRSZWN0X2gK
KyNkZWZpbmUgRnJhY3Rpb25hbExheW91dFJlY3RfaAorCisjaW5jbHVkZSAiRnJhY3Rpb25hbExh
eW91dEJveEV4dGVudC5oIgorI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRQb2ludC5oIgorI2lu
Y2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBQTEFURk9S
TShRVCkKKyNpbmNsdWRlIDxxZ2xvYmFsLmg+CitRVF9CRUdJTl9OQU1FU1BBQ0UKK2NsYXNzIFFS
ZWN0OworY2xhc3MgUVJlY3RGOworUVRfRU5EX05BTUVTUEFDRQorI2VuZGlmCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRSZWN0OworCitjbGFzcyBGcmFjdGlvbmFsTGF5b3V0
UmVjdCB7CitwdWJsaWM6CisgICAgRnJhY3Rpb25hbExheW91dFJlY3QoKSB7IH0KKyAgICBGcmFj
dGlvbmFsTGF5b3V0UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBj
b25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkKKyAgICAgICAgOiBtX2xvY2F0aW9uKGxv
Y2F0aW9uKSwgbV9zaXplKHNpemUpIHsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0KEZyYWN0
aW9uYWxMYXlvdXRVbml0IHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHksIEZyYWN0aW9uYWxMYXlv
dXRVbml0IHdpZHRoLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBoZWlnaHQpCisgICAgICAgIDogbV9s
b2NhdGlvbihGcmFjdGlvbmFsTGF5b3V0UG9pbnQoeCwgeSkpLCBtX3NpemUoRnJhY3Rpb25hbExh
eW91dFNpemUod2lkdGgsIGhlaWdodCkpIHsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0KGNv
bnN0IEZsb2F0UG9pbnQmIGxvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgICAg
IDogbV9sb2NhdGlvbihsb2NhdGlvbiksIG1fc2l6ZShzaXplKSB7IH0KKyAgICBGcmFjdGlvbmFs
TGF5b3V0UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSA6IG1fbG9jYXRpb24ocmVjdC5sb2NhdGlv
bigpKSwgbV9zaXplKHJlY3Quc2l6ZSgpKSB7IH0KKworICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxM
YXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkg
c2luY2UgaXQncyBsb3NzeQorICAgICAgICAKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbG9j
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9CisgICAgRnJhY3Rpb25hbExheW91
dFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCisgICAgSW50UG9pbnQgcGl4
ZWxTbmFwcGVkTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiByb3VuZGVkSW50UG9pbnQobV9sb2Nh
dGlvbik7IH0KKyAgICBJbnRTaXplIHBpeGVsU25hcHBlZFNpemUoKSBjb25zdCB7IHJldHVybiBJ
bnRTaXplKHNuYXBTaXplVG9QaXhlbChtX3NpemUud2lkdGgoKSwgbV9sb2NhdGlvbi54KCkpLCBz
bmFwU2l6ZVRvUGl4ZWwobV9zaXplLmhlaWdodCgpLCBtX2xvY2F0aW9uLnkoKSkpOyB9CisKKyAg
ICB2b2lkIHNldExvY2F0aW9uKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgbG9jYXRpb24p
IHsgbV9sb2NhdGlvbiA9IGxvY2F0aW9uOyB9CisgICAgdm9pZCBzZXRTaXplKGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KKworICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IHgoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uLngoKTsgfQorICAgIEZy
YWN0aW9uYWxMYXlvdXRVbml0IHkoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uLnkoKTsgfQor
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1heFgoKSBjb25zdCB7IHJldHVybiB4KCkgKyB3aWR0
aCgpOyB9CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbWF4WSgpIGNvbnN0IHsgcmV0dXJuIHko
KSArIGhlaWdodCgpOyB9CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7
IHJldHVybiBtX3NpemUud2lkdGgoKTsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdo
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQorCisgICAgaW50IHBpeGVsU25h
cHBlZFgoKSBjb25zdCB7IHJldHVybiB4KCkucm91bmQoKTsgfQorICAgIGludCBwaXhlbFNuYXBw
ZWRZKCkgY29uc3QgeyByZXR1cm4geSgpLnJvdW5kKCk7IH0KKyAgICBpbnQgcGl4ZWxTbmFwcGVk
V2lkdGgoKSBjb25zdCB7IHJldHVybiBzbmFwU2l6ZVRvUGl4ZWwod2lkdGgoKSwgeCgpKTsgfQor
ICAgIGludCBwaXhlbFNuYXBwZWRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBzbmFwU2l6ZVRvUGl4
ZWwoaGVpZ2h0KCksIHkoKSk7IH0KKyAgICBpbnQgcGl4ZWxTbmFwcGVkTWF4WCgpIGNvbnN0IHsg
cmV0dXJuIChtX2xvY2F0aW9uLngoKSArIG1fc2l6ZS53aWR0aCgpKS5yb3VuZCgpOyB9CisgICAg
aW50IHBpeGVsU25hcHBlZE1heFkoKSBjb25zdCB7IHJldHVybiAobV9sb2NhdGlvbi55KCkgKyBt
X3NpemUuaGVpZ2h0KCkpLnJvdW5kKCk7IH0KKworICAgIHZvaWQgc2V0WChGcmFjdGlvbmFsTGF5
b3V0VW5pdCB4KSB7IG1fbG9jYXRpb24uc2V0WCh4KTsgfQorICAgIHZvaWQgc2V0WShGcmFjdGlv
bmFsTGF5b3V0VW5pdCB5KSB7IG1fbG9jYXRpb24uc2V0WSh5KTsgfQorICAgIHZvaWQgc2V0V2lk
dGgoRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgpIHsgbV9zaXplLnNldFdpZHRoKHdpZHRoKTsg
fQorICAgIHZvaWQgc2V0SGVpZ2h0KEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCkgeyBtX3Np
emUuc2V0SGVpZ2h0KGhlaWdodCk7IH0KKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0KKworICAgIC8vIE5PVEU6IFRoZSByZXN1bHQgaXMgcm91
bmRlZCB0byBpbnRlZ2VyIHZhbHVlcywgYW5kIHRodXMgbWF5IGJlIG5vdCB0aGUgZXhhY3QKKyAg
ICAvLyBjZW50ZXIgcG9pbnQuCisgICAgRnJhY3Rpb25hbExheW91dFBvaW50IGNlbnRlcigpIGNv
bnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludCh4KCkgKyB3aWR0aCgpIC8gMiwgeSgp
ICsgaGVpZ2h0KCkgLyAyKTsgfQorCisgICAgdm9pZCBtb3ZlKGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRTaXplJiBzaXplKSB7IG1fbG9jYXRpb24gKz0gc2l6ZTsgfSAKKyAgICB2b2lkIG1vdmVCeShj
b25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIG9mZnNldCkgeyBtX2xvY2F0aW9uLm1vdmUob2Zm
c2V0LngoKSwgb2Zmc2V0LnkoKSk7IH0KKyAgICB2b2lkIG1vdmUoRnJhY3Rpb25hbExheW91dFVu
aXQgZHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGR5KSB7IG1fbG9jYXRpb24ubW92ZShkeCwgZHkp
OyB9IAorCisgICAgdm9pZCBleHBhbmQoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUp
IHsgbV9zaXplICs9IHNpemU7IH0KKyAgICB2b2lkIGV4cGFuZChjb25zdCBGcmFjdGlvbmFsTGF5
b3V0Qm94RXh0ZW50JiBib3gpCisgICAgeworICAgICAgICBtX2xvY2F0aW9uLm1vdmUoLWJveC5s
ZWZ0KCksIC1ib3gudG9wKCkpOworICAgICAgICBtX3NpemUuZXhwYW5kKGJveC5sZWZ0KCkgKyBi
b3gucmlnaHQoKSwgYm94LnRvcCgpICsgYm94LmJvdHRvbSgpKTsKKyAgICB9CisgICAgdm9pZCBl
eHBhbmQoRnJhY3Rpb25hbExheW91dFVuaXQgZHcsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRoKSB7
IG1fc2l6ZS5leHBhbmQoZHcsIGRoKTsgfQorICAgIHZvaWQgY29udHJhY3QoY29uc3QgRnJhY3Rp
b25hbExheW91dFNpemUmIHNpemUpIHsgbV9zaXplIC09IHNpemU7IH0KKyAgICB2b2lkIGNvbnRy
YWN0KEZyYWN0aW9uYWxMYXlvdXRVbml0IGR3LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkaCkgeyBt
X3NpemUuZXhwYW5kKC1kdywgLWRoKTsgfQorCisgICAgdm9pZCBzaGlmdFhFZGdlVG8oRnJhY3Rp
b25hbExheW91dFVuaXQgZWRnZSkKKyAgICB7CisgICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
IGRlbHRhID0gZWRnZSAtIHgoKTsKKyAgICAgICAgc2V0WChlZGdlKTsKKyAgICAgICAgc2V0V2lk
dGgoc3RkOjptYXg8RnJhY3Rpb25hbExheW91dFVuaXQ+KDAsIHdpZHRoKCkgLSBkZWx0YSkpOwor
ICAgIH0KKyAgICB2b2lkIHNoaWZ0TWF4WEVkZ2VUbyhGcmFjdGlvbmFsTGF5b3V0VW5pdCBlZGdl
KQorICAgIHsKKyAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZGVsdGEgPSBlZGdlIC0gbWF4
WCgpOworICAgICAgICBzZXRXaWR0aChzdGQ6Om1heDxGcmFjdGlvbmFsTGF5b3V0VW5pdD4oMCwg
d2lkdGgoKSArIGRlbHRhKSk7CisgICAgfQorICAgIHZvaWQgc2hpZnRZRWRnZVRvKEZyYWN0aW9u
YWxMYXlvdXRVbml0IGVkZ2UpCisgICAgeworICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBk
ZWx0YSA9IGVkZ2UgLSB5KCk7CisgICAgICAgIHNldFkoZWRnZSk7CisgICAgICAgIHNldEhlaWdo
dChzdGQ6Om1heDxGcmFjdGlvbmFsTGF5b3V0VW5pdD4oMCwgaGVpZ2h0KCkgLSBkZWx0YSkpOwor
ICAgIH0KKyAgICB2b2lkIHNoaWZ0TWF4WUVkZ2VUbyhGcmFjdGlvbmFsTGF5b3V0VW5pdCBlZGdl
KQorICAgIHsKKyAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZGVsdGEgPSBlZGdlIC0gbWF4
WSgpOworICAgICAgICBzZXRIZWlnaHQoc3RkOjptYXg8RnJhY3Rpb25hbExheW91dFVuaXQ+KDAs
IGhlaWdodCgpICsgZGVsdGEpKTsKKyAgICB9CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQg
bWluWE1pbllDb3JuZXIoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9IC8vIHR5cGljYWxs
eSB0b3BMZWZ0CisgICAgRnJhY3Rpb25hbExheW91dFBvaW50IG1heFhNaW5ZQ29ybmVyKCkgY29u
c3QgeyByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KG1fbG9jYXRpb24ueCgpICsgbV9zaXpl
LndpZHRoKCksIG1fbG9jYXRpb24ueSgpKTsgfSAvLyB0eXBpY2FsbHkgdG9wUmlnaHQKKyAgICBG
cmFjdGlvbmFsTGF5b3V0UG9pbnQgbWluWE1heFlDb3JuZXIoKSBjb25zdCB7IHJldHVybiBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQobV9sb2NhdGlvbi54KCksIG1fbG9jYXRpb24ueSgpICsgbV9zaXpl
LmhlaWdodCgpKTsgfSAvLyB0eXBpY2FsbHkgYm90dG9tTGVmdAorICAgIEZyYWN0aW9uYWxMYXlv
dXRQb2ludCBtYXhYTWF4WUNvcm5lcigpIGNvbnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQ
b2ludChtX2xvY2F0aW9uLngoKSArIG1fc2l6ZS53aWR0aCgpLCBtX2xvY2F0aW9uLnkoKSArIG1f
c2l6ZS5oZWlnaHQoKSk7IH0gLy8gdHlwaWNhbGx5IGJvdHRvbVJpZ2h0CisgICAgCisgICAgYm9v
bCBpbnRlcnNlY3RzKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JikgY29uc3Q7CisgICAgYm9v
bCBjb250YWlucyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpIGNvbnN0OworCisgICAgLy8g
VGhpcyBjaGVja3MgdG8gc2VlIGlmIHRoZSByZWN0IGNvbnRhaW5zIHgseSBpbiB0aGUgdHJhZGl0
aW9uYWwgc2Vuc2UuCisgICAgLy8gRXF1aXZhbGVudCB0byBjaGVja2luZyBpZiB0aGUgcmVjdCBj
b250YWlucyBhIDF4MSByZWN0IGJlbG93IGFuZCB0byB0aGUgcmlnaHQgb2YgKHB4LHB5KS4KKyAg
ICBib29sIGNvbnRhaW5zKEZyYWN0aW9uYWxMYXlvdXRVbml0IHB4LCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBweSkgY29uc3QKKyAgICAgICAgeyByZXR1cm4gcHggPj0geCgpICYmIHB4IDwgbWF4WCgp
ICYmIHB5ID49IHkoKSAmJiBweSA8IG1heFkoKTsgfQorICAgIGJvb2wgY29udGFpbnMoY29uc3Qg
RnJhY3Rpb25hbExheW91dFBvaW50JiBwb2ludCkgY29uc3QgeyByZXR1cm4gY29udGFpbnMocG9p
bnQueCgpLCBwb2ludC55KCkpOyB9CisKKyAgICB2b2lkIGludGVyc2VjdChjb25zdCBGcmFjdGlv
bmFsTGF5b3V0UmVjdCYpOworICAgIHZvaWQgdW5pdGUoY29uc3QgRnJhY3Rpb25hbExheW91dFJl
Y3QmKTsKKyAgICB2b2lkIHVuaXRlSWZOb25aZXJvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0
Jik7CisKKyAgICB2b2lkIGluZmxhdGVYKEZyYWN0aW9uYWxMYXlvdXRVbml0IGR4KQorICAgIHsK
KyAgICAgICAgbV9sb2NhdGlvbi5zZXRYKG1fbG9jYXRpb24ueCgpIC0gZHgpOworICAgICAgICBt
X3NpemUuc2V0V2lkdGgobV9zaXplLndpZHRoKCkgKyBkeCArIGR4KTsKKyAgICB9CisgICAgdm9p
ZCBpbmZsYXRlWShGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeSkKKyAgICB7CisgICAgICAgIG1fbG9j
YXRpb24uc2V0WShtX2xvY2F0aW9uLnkoKSAtIGR5KTsKKyAgICAgICAgbV9zaXplLnNldEhlaWdo
dChtX3NpemUuaGVpZ2h0KCkgKyBkeSArIGR5KTsKKyAgICB9CisgICAgdm9pZCBpbmZsYXRlKEZy
YWN0aW9uYWxMYXlvdXRVbml0IGQpIHsgaW5mbGF0ZVgoZCk7IGluZmxhdGVZKGQpOyB9CisgICAg
dm9pZCBzY2FsZShmbG9hdCBzKTsKKworICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0IHRyYW5zcG9z
ZWRSZWN0KCkgY29uc3QgeyByZXR1cm4gRnJhY3Rpb25hbExheW91dFJlY3QobV9sb2NhdGlvbi50
cmFuc3Bvc2VkUG9pbnQoKSwgbV9zaXplLnRyYW5zcG9zZWRTaXplKCkpOyB9CisKKyAgICBzdGF0
aWMgRnJhY3Rpb25hbExheW91dFJlY3QgaW5maW5pdGVSZWN0KCkKKyAgICB7CisgICAgICAgIC8v
IFJldHVybiBhIHJlY3QgdGhhdCBpcyBzbGlnaHRseSBzbWFsbGVyIHRoYW4gdGhlIHRydWUgbWF4
IHJlY3QgdG8gYWxsb3cgcGl4ZWxTbmFwcGluZyB0byByb3VuZCB1cCB0byB0aGUgbmVhcmVzdCBJ
bnRSZWN0IHdpdGhvdXQgb3ZlcmZsb3dpbmcuCisgICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5
b3V0UmVjdChGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bmVhcmx5TWluKCkgLyAyLCBGcmFjdGlvbmFs
TGF5b3V0VW5pdDo6bmVhcmx5TWluKCkgLyAyLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bmVhcmx5
TWF4KCksIEZyYWN0aW9uYWxMYXlvdXRVbml0OjpuZWFybHlNYXgoKSk7CisgICAgfQorCisjaWYg
UExBVEZPUk0oUVQpCisgICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgUVJl
Y3QmKTsKKyAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBRUmVjdEYmKTsK
KyAgICBvcGVyYXRvciBRUmVjdEYoKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIEZy
YWN0aW9uYWxMYXlvdXRQb2ludCBtX2xvY2F0aW9uOworICAgIEZyYWN0aW9uYWxMYXlvdXRTaXpl
IG1fc2l6ZTsKK307CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0UmVjdCBpbnRlcnNlY3Rpb24o
Y29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0
JiBiKQoreworICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0IGMgPSBhOworICAgIGMuaW50ZXJzZWN0
KGIpOworICAgIHJldHVybiBjOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFJlY3QgdW5p
b25SZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0UmVjdCYgYikKK3sKKyAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCBjID0gYTsKKyAgICBjLnVu
aXRlKGIpOworICAgIHJldHVybiBjOworfQorCitGcmFjdGlvbmFsTGF5b3V0UmVjdCB1bmlvblJl
Y3QoY29uc3QgVmVjdG9yPEZyYWN0aW9uYWxMYXlvdXRSZWN0PiYpOworCitpbmxpbmUgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0UmVjdCYgYikKK3sKKyAgICByZXR1cm4gYS5sb2NhdGlvbigpID09IGIubG9jYXRpb24o
KSAmJiBhLnNpemUoKSA9PSBiLnNpemUoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3Qm
IGIpCit7CisgICAgcmV0dXJuIGEubG9jYXRpb24oKSAhPSBiLmxvY2F0aW9uKCkgfHwgYS5zaXpl
KCkgIT0gYi5zaXplKCk7Cit9CisKK2lubGluZSBJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3Qo
Y29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIHJlY3QpCit7CisjaWYgRU5BQkxFKFNVQlBJWEVM
X0xBWU9VVCkKKyAgICByZXR1cm4gSW50UmVjdChyb3VuZGVkSW50UG9pbnQocmVjdC5sb2NhdGlv
bigpKSwgSW50U2l6ZShzbmFwU2l6ZVRvUGl4ZWwocmVjdC53aWR0aCgpLCByZWN0LngoKSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc25hcFNpemVUb1BpeGVsKHJlY3QuaGVpZ2h0KCksIHJlY3QueSgpKSkpOworCisjZWxzZQor
ICAgIHJldHVybiBJbnRSZWN0KHJlY3QpOworI2VuZGlmCit9CisKK0ludFJlY3QgZW5jbG9zaW5n
SW50UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpOworRnJhY3Rpb25hbExheW91dFJl
Y3QgZW5jbG9zaW5nRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEZyYWN0aW9uYWxMYXlvdXRSZWN0X2gK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJlY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0LmgJ
KHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xh
eW91dFJlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTIgKzI4LDEyIEBACiAgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLSNpZm5kZWYgRnJhY3Rpb25hbExheW91dFJlY3RfaAotI2RlZmluZSBGcmFj
dGlvbmFsTGF5b3V0UmVjdF9oCisjaWZuZGVmIExheW91dFJlY3RfaAorI2RlZmluZSBMYXlvdXRS
ZWN0X2gKIAotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuaCIKLSNpbmNsdWRl
ICJGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVk
ZSAiTGF5b3V0Qm94RXh0ZW50LmgiCisjaW5jbHVkZSAiTGF5b3V0UG9pbnQuaCIKICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKICNpZiBQTEFURk9STShRVCkKQEAgLTQ4LDM0ICs0OCwzNCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0UmVjdDsKIAotY2xhc3MgRnJhY3Rpb25h
bExheW91dFJlY3QgeworY2xhc3MgTGF5b3V0UmVjdCB7CiBwdWJsaWM6Ci0gICAgRnJhY3Rpb25h
bExheW91dFJlY3QoKSB7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6
ZSkKKyAgICBMYXlvdXRSZWN0KCkgeyB9CisgICAgTGF5b3V0UmVjdChjb25zdCBMYXlvdXRQb2lu
dCYgbG9jYXRpb24sIGNvbnN0IExheW91dFNpemUmIHNpemUpCiAgICAgICAgIDogbV9sb2NhdGlv
bihsb2NhdGlvbiksIG1fc2l6ZShzaXplKSB7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdChG
cmFjdGlvbmFsTGF5b3V0VW5pdCB4LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCB5LCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCB3aWR0aCwgRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KQotICAgICAgICA6
IG1fbG9jYXRpb24oRnJhY3Rpb25hbExheW91dFBvaW50KHgsIHkpKSwgbV9zaXplKEZyYWN0aW9u
YWxMYXlvdXRTaXplKHdpZHRoLCBoZWlnaHQpKSB7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0UmVj
dChjb25zdCBGbG9hdFBvaW50JiBsb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBzaXplKQorICAg
IExheW91dFJlY3QoTGF5b3V0VW5pdCB4LCBMYXlvdXRVbml0IHksIExheW91dFVuaXQgd2lkdGgs
IExheW91dFVuaXQgaGVpZ2h0KQorICAgICAgICA6IG1fbG9jYXRpb24oTGF5b3V0UG9pbnQoeCwg
eSkpLCBtX3NpemUoTGF5b3V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkgeyB9CisgICAgTGF5b3V0UmVj
dChjb25zdCBGbG9hdFBvaW50JiBsb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBzaXplKQogICAg
ICAgICA6IG1fbG9jYXRpb24obG9jYXRpb24pLCBtX3NpemUoc2l6ZSkgeyB9Ci0gICAgRnJhY3Rp
b25hbExheW91dFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgOiBtX2xvY2F0aW9uKHJlY3QubG9j
YXRpb24oKSksIG1fc2l6ZShyZWN0LnNpemUoKSkgeyB9CisgICAgTGF5b3V0UmVjdChjb25zdCBJ
bnRSZWN0JiByZWN0KSA6IG1fbG9jYXRpb24ocmVjdC5sb2NhdGlvbigpKSwgbV9zaXplKHJlY3Qu
c2l6ZSgpKSB7IH0KIAotICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQor
ICAgIGV4cGxpY2l0IExheW91dFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7IC8vIGRvbid0IGRvIHRo
aXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CiAgICAgICAgIAotICAgIEZyYWN0aW9uYWxM
YXlvdXRQb2ludCBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb247IH0KLSAgICBG
cmFjdGlvbmFsTGF5b3V0U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAg
TGF5b3V0UG9pbnQgbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9CisgICAg
TGF5b3V0U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAKICAgICBJbnRQb2lu
dCBwaXhlbFNuYXBwZWRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHJvdW5kZWRJbnRQb2ludCht
X2xvY2F0aW9uKTsgfQogICAgIEludFNpemUgcGl4ZWxTbmFwcGVkU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIEludFNpemUoc25hcFNpemVUb1BpeGVsKG1fc2l6ZS53aWR0aCgpLCBtX2xvY2F0aW9uLngo
KSksIHNuYXBTaXplVG9QaXhlbChtX3NpemUuaGVpZ2h0KCksIG1fbG9jYXRpb24ueSgpKSk7IH0K
IAotICAgIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBsb2Nh
dGlvbikgeyBtX2xvY2F0aW9uID0gbG9jYXRpb247IH0KLSAgICB2b2lkIHNldFNpemUoY29uc3Qg
RnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQorICAgIHZvaWQg
c2V0TG9jYXRpb24oY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uKSB7IG1fbG9jYXRpb24gPSBs
b2NhdGlvbjsgfQorICAgIHZvaWQgc2V0U2l6ZShjb25zdCBMYXlvdXRTaXplJiBzaXplKSB7IG1f
c2l6ZSA9IHNpemU7IH0KIAotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHgoKSBjb25zdCB7IHJl
dHVybiBtX2xvY2F0aW9uLngoKTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHkoKSBjb25z
dCB7IHJldHVybiBtX2xvY2F0aW9uLnkoKTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1h
eFgoKSBjb25zdCB7IHJldHVybiB4KCkgKyB3aWR0aCgpOyB9Ci0gICAgRnJhY3Rpb25hbExheW91
dFVuaXQgbWF4WSgpIGNvbnN0IHsgcmV0dXJuIHkoKSArIGhlaWdodCgpOyB9Ci0gICAgRnJhY3Rp
b25hbExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3NpemUud2lkdGgoKTsgfQot
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5o
ZWlnaHQoKTsgfQorICAgIExheW91dFVuaXQgeCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb24u
eCgpOyB9CisgICAgTGF5b3V0VW5pdCB5KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi55KCk7
IH0KKyAgICBMYXlvdXRVbml0IG1heFgoKSBjb25zdCB7IHJldHVybiB4KCkgKyB3aWR0aCgpOyB9
CisgICAgTGF5b3V0VW5pdCBtYXhZKCkgY29uc3QgeyByZXR1cm4geSgpICsgaGVpZ2h0KCk7IH0K
KyAgICBMYXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9zaXplLndpZHRoKCk7IH0K
KyAgICBMYXlvdXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsg
fQogCiAgICAgaW50IHBpeGVsU25hcHBlZFgoKSBjb25zdCB7IHJldHVybiB4KCkucm91bmQoKTsg
fQogICAgIGludCBwaXhlbFNuYXBwZWRZKCkgY29uc3QgeyByZXR1cm4geSgpLnJvdW5kKCk7IH0K
QEAgLTg0LDEzMSArODQsMTMxIEBAIHB1YmxpYzoKICAgICBpbnQgcGl4ZWxTbmFwcGVkTWF4WCgp
IGNvbnN0IHsgcmV0dXJuIChtX2xvY2F0aW9uLngoKSArIG1fc2l6ZS53aWR0aCgpKS5yb3VuZCgp
OyB9CiAgICAgaW50IHBpeGVsU25hcHBlZE1heFkoKSBjb25zdCB7IHJldHVybiAobV9sb2NhdGlv
bi55KCkgKyBtX3NpemUuaGVpZ2h0KCkpLnJvdW5kKCk7IH0KIAotICAgIHZvaWQgc2V0WChGcmFj
dGlvbmFsTGF5b3V0VW5pdCB4KSB7IG1fbG9jYXRpb24uc2V0WCh4KTsgfQotICAgIHZvaWQgc2V0
WShGcmFjdGlvbmFsTGF5b3V0VW5pdCB5KSB7IG1fbG9jYXRpb24uc2V0WSh5KTsgfQotICAgIHZv
aWQgc2V0V2lkdGgoRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgpIHsgbV9zaXplLnNldFdpZHRo
KHdpZHRoKTsgfQotICAgIHZvaWQgc2V0SGVpZ2h0KEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdo
dCkgeyBtX3NpemUuc2V0SGVpZ2h0KGhlaWdodCk7IH0KKyAgICB2b2lkIHNldFgoTGF5b3V0VW5p
dCB4KSB7IG1fbG9jYXRpb24uc2V0WCh4KTsgfQorICAgIHZvaWQgc2V0WShMYXlvdXRVbml0IHkp
IHsgbV9sb2NhdGlvbi5zZXRZKHkpOyB9CisgICAgdm9pZCBzZXRXaWR0aChMYXlvdXRVbml0IHdp
ZHRoKSB7IG1fc2l6ZS5zZXRXaWR0aCh3aWR0aCk7IH0KKyAgICB2b2lkIHNldEhlaWdodChMYXlv
dXRVbml0IGhlaWdodCkgeyBtX3NpemUuc2V0SGVpZ2h0KGhlaWdodCk7IH0KIAogICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0KIAogICAgIC8vIE5P
VEU6IFRoZSByZXN1bHQgaXMgcm91bmRlZCB0byBpbnRlZ2VyIHZhbHVlcywgYW5kIHRodXMgbWF5
IGJlIG5vdCB0aGUgZXhhY3QKICAgICAvLyBjZW50ZXIgcG9pbnQuCi0gICAgRnJhY3Rpb25hbExh
eW91dFBvaW50IGNlbnRlcigpIGNvbnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludCh4
KCkgKyB3aWR0aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAyKTsgfQorICAgIExheW91dFBvaW50
IGNlbnRlcigpIGNvbnN0IHsgcmV0dXJuIExheW91dFBvaW50KHgoKSArIHdpZHRoKCkgLyAyLCB5
KCkgKyBoZWlnaHQoKSAvIDIpOyB9CiAKLSAgICB2b2lkIG1vdmUoY29uc3QgRnJhY3Rpb25hbExh
eW91dFNpemUmIHNpemUpIHsgbV9sb2NhdGlvbiArPSBzaXplOyB9IAotICAgIHZvaWQgbW92ZUJ5
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgb2Zmc2V0KSB7IG1fbG9jYXRpb24ubW92ZShv
ZmZzZXQueCgpLCBvZmZzZXQueSgpKTsgfQotICAgIHZvaWQgbW92ZShGcmFjdGlvbmFsTGF5b3V0
VW5pdCBkeCwgRnJhY3Rpb25hbExheW91dFVuaXQgZHkpIHsgbV9sb2NhdGlvbi5tb3ZlKGR4LCBk
eSk7IH0gCisgICAgdm9pZCBtb3ZlKGNvbnN0IExheW91dFNpemUmIHNpemUpIHsgbV9sb2NhdGlv
biArPSBzaXplOyB9IAorICAgIHZvaWQgbW92ZUJ5KGNvbnN0IExheW91dFBvaW50JiBvZmZzZXQp
IHsgbV9sb2NhdGlvbi5tb3ZlKG9mZnNldC54KCksIG9mZnNldC55KCkpOyB9CisgICAgdm9pZCBt
b3ZlKExheW91dFVuaXQgZHgsIExheW91dFVuaXQgZHkpIHsgbV9sb2NhdGlvbi5tb3ZlKGR4LCBk
eSk7IH0gCiAKLSAgICB2b2lkIGV4cGFuZChjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6
ZSkgeyBtX3NpemUgKz0gc2l6ZTsgfQotICAgIHZvaWQgZXhwYW5kKGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRCb3hFeHRlbnQmIGJveCkKKyAgICB2b2lkIGV4cGFuZChjb25zdCBMYXlvdXRTaXplJiBz
aXplKSB7IG1fc2l6ZSArPSBzaXplOyB9CisgICAgdm9pZCBleHBhbmQoY29uc3QgTGF5b3V0Qm94
RXh0ZW50JiBib3gpCiAgICAgewogICAgICAgICBtX2xvY2F0aW9uLm1vdmUoLWJveC5sZWZ0KCks
IC1ib3gudG9wKCkpOwogICAgICAgICBtX3NpemUuZXhwYW5kKGJveC5sZWZ0KCkgKyBib3gucmln
aHQoKSwgYm94LnRvcCgpICsgYm94LmJvdHRvbSgpKTsKICAgICB9Ci0gICAgdm9pZCBleHBhbmQo
RnJhY3Rpb25hbExheW91dFVuaXQgZHcsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRoKSB7IG1fc2l6
ZS5leHBhbmQoZHcsIGRoKTsgfQotICAgIHZvaWQgY29udHJhY3QoY29uc3QgRnJhY3Rpb25hbExh
eW91dFNpemUmIHNpemUpIHsgbV9zaXplIC09IHNpemU7IH0KLSAgICB2b2lkIGNvbnRyYWN0KEZy
YWN0aW9uYWxMYXlvdXRVbml0IGR3LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkaCkgeyBtX3NpemUu
ZXhwYW5kKC1kdywgLWRoKTsgfQorICAgIHZvaWQgZXhwYW5kKExheW91dFVuaXQgZHcsIExheW91
dFVuaXQgZGgpIHsgbV9zaXplLmV4cGFuZChkdywgZGgpOyB9CisgICAgdm9pZCBjb250cmFjdChj
b25zdCBMYXlvdXRTaXplJiBzaXplKSB7IG1fc2l6ZSAtPSBzaXplOyB9CisgICAgdm9pZCBjb250
cmFjdChMYXlvdXRVbml0IGR3LCBMYXlvdXRVbml0IGRoKSB7IG1fc2l6ZS5leHBhbmQoLWR3LCAt
ZGgpOyB9CiAKLSAgICB2b2lkIHNoaWZ0WEVkZ2VUbyhGcmFjdGlvbmFsTGF5b3V0VW5pdCBlZGdl
KQorICAgIHZvaWQgc2hpZnRYRWRnZVRvKExheW91dFVuaXQgZWRnZSkKICAgICB7Ci0gICAgICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0IGRlbHRhID0gZWRnZSAtIHgoKTsKKyAgICAgICAgTGF5b3V0
VW5pdCBkZWx0YSA9IGVkZ2UgLSB4KCk7CiAgICAgICAgIHNldFgoZWRnZSk7Ci0gICAgICAgIHNl
dFdpZHRoKHN0ZDo6bWF4PEZyYWN0aW9uYWxMYXlvdXRVbml0PigwLCB3aWR0aCgpIC0gZGVsdGEp
KTsKKyAgICAgICAgc2V0V2lkdGgoc3RkOjptYXg8TGF5b3V0VW5pdD4oMCwgd2lkdGgoKSAtIGRl
bHRhKSk7CiAgICAgfQotICAgIHZvaWQgc2hpZnRNYXhYRWRnZVRvKEZyYWN0aW9uYWxMYXlvdXRV
bml0IGVkZ2UpCisgICAgdm9pZCBzaGlmdE1heFhFZGdlVG8oTGF5b3V0VW5pdCBlZGdlKQogICAg
IHsKLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZGVsdGEgPSBlZGdlIC0gbWF4WCgpOwot
ICAgICAgICBzZXRXaWR0aChzdGQ6Om1heDxGcmFjdGlvbmFsTGF5b3V0VW5pdD4oMCwgd2lkdGgo
KSArIGRlbHRhKSk7CisgICAgICAgIExheW91dFVuaXQgZGVsdGEgPSBlZGdlIC0gbWF4WCgpOwor
ICAgICAgICBzZXRXaWR0aChzdGQ6Om1heDxMYXlvdXRVbml0PigwLCB3aWR0aCgpICsgZGVsdGEp
KTsKICAgICB9Ci0gICAgdm9pZCBzaGlmdFlFZGdlVG8oRnJhY3Rpb25hbExheW91dFVuaXQgZWRn
ZSkKKyAgICB2b2lkIHNoaWZ0WUVkZ2VUbyhMYXlvdXRVbml0IGVkZ2UpCiAgICAgewotICAgICAg
ICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkZWx0YSA9IGVkZ2UgLSB5KCk7CisgICAgICAgIExheW91
dFVuaXQgZGVsdGEgPSBlZGdlIC0geSgpOwogICAgICAgICBzZXRZKGVkZ2UpOwotICAgICAgICBz
ZXRIZWlnaHQoc3RkOjptYXg8RnJhY3Rpb25hbExheW91dFVuaXQ+KDAsIGhlaWdodCgpIC0gZGVs
dGEpKTsKKyAgICAgICAgc2V0SGVpZ2h0KHN0ZDo6bWF4PExheW91dFVuaXQ+KDAsIGhlaWdodCgp
IC0gZGVsdGEpKTsKICAgICB9Ci0gICAgdm9pZCBzaGlmdE1heFlFZGdlVG8oRnJhY3Rpb25hbExh
eW91dFVuaXQgZWRnZSkKKyAgICB2b2lkIHNoaWZ0TWF4WUVkZ2VUbyhMYXlvdXRVbml0IGVkZ2Up
CiAgICAgewotICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkZWx0YSA9IGVkZ2UgLSBtYXhZ
KCk7Ci0gICAgICAgIHNldEhlaWdodChzdGQ6Om1heDxGcmFjdGlvbmFsTGF5b3V0VW5pdD4oMCwg
aGVpZ2h0KCkgKyBkZWx0YSkpOworICAgICAgICBMYXlvdXRVbml0IGRlbHRhID0gZWRnZSAtIG1h
eFkoKTsKKyAgICAgICAgc2V0SGVpZ2h0KHN0ZDo6bWF4PExheW91dFVuaXQ+KDAsIGhlaWdodCgp
ICsgZGVsdGEpKTsKICAgICB9CiAKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbWluWE1pbllD
b3JuZXIoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9IC8vIHR5cGljYWxseSB0b3BMZWZ0
Ci0gICAgRnJhY3Rpb25hbExheW91dFBvaW50IG1heFhNaW5ZQ29ybmVyKCkgY29uc3QgeyByZXR1
cm4gRnJhY3Rpb25hbExheW91dFBvaW50KG1fbG9jYXRpb24ueCgpICsgbV9zaXplLndpZHRoKCks
IG1fbG9jYXRpb24ueSgpKTsgfSAvLyB0eXBpY2FsbHkgdG9wUmlnaHQKLSAgICBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQgbWluWE1heFlDb3JuZXIoKSBjb25zdCB7IHJldHVybiBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQobV9sb2NhdGlvbi54KCksIG1fbG9jYXRpb24ueSgpICsgbV9zaXplLmhlaWdodCgp
KTsgfSAvLyB0eXBpY2FsbHkgYm90dG9tTGVmdAotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBt
YXhYTWF4WUNvcm5lcigpIGNvbnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChtX2xv
Y2F0aW9uLngoKSArIG1fc2l6ZS53aWR0aCgpLCBtX2xvY2F0aW9uLnkoKSArIG1fc2l6ZS5oZWln
aHQoKSk7IH0gLy8gdHlwaWNhbGx5IGJvdHRvbVJpZ2h0CisgICAgTGF5b3V0UG9pbnQgbWluWE1p
bllDb3JuZXIoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9IC8vIHR5cGljYWxseSB0b3BM
ZWZ0CisgICAgTGF5b3V0UG9pbnQgbWF4WE1pbllDb3JuZXIoKSBjb25zdCB7IHJldHVybiBMYXlv
dXRQb2ludChtX2xvY2F0aW9uLngoKSArIG1fc2l6ZS53aWR0aCgpLCBtX2xvY2F0aW9uLnkoKSk7
IH0gLy8gdHlwaWNhbGx5IHRvcFJpZ2h0CisgICAgTGF5b3V0UG9pbnQgbWluWE1heFlDb3JuZXIo
KSBjb25zdCB7IHJldHVybiBMYXlvdXRQb2ludChtX2xvY2F0aW9uLngoKSwgbV9sb2NhdGlvbi55
KCkgKyBtX3NpemUuaGVpZ2h0KCkpOyB9IC8vIHR5cGljYWxseSBib3R0b21MZWZ0CisgICAgTGF5
b3V0UG9pbnQgbWF4WE1heFlDb3JuZXIoKSBjb25zdCB7IHJldHVybiBMYXlvdXRQb2ludChtX2xv
Y2F0aW9uLngoKSArIG1fc2l6ZS53aWR0aCgpLCBtX2xvY2F0aW9uLnkoKSArIG1fc2l6ZS5oZWln
aHQoKSk7IH0gLy8gdHlwaWNhbGx5IGJvdHRvbVJpZ2h0CiAgICAgCi0gICAgYm9vbCBpbnRlcnNl
Y3RzKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JikgY29uc3Q7Ci0gICAgYm9vbCBjb250YWlu
cyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpIGNvbnN0OworICAgIGJvb2wgaW50ZXJzZWN0
cyhjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CisgICAgYm9vbCBjb250YWlucyhjb25zdCBMYXlv
dXRSZWN0JikgY29uc3Q7CiAKICAgICAvLyBUaGlzIGNoZWNrcyB0byBzZWUgaWYgdGhlIHJlY3Qg
Y29udGFpbnMgeCx5IGluIHRoZSB0cmFkaXRpb25hbCBzZW5zZS4KICAgICAvLyBFcXVpdmFsZW50
IHRvIGNoZWNraW5nIGlmIHRoZSByZWN0IGNvbnRhaW5zIGEgMXgxIHJlY3QgYmVsb3cgYW5kIHRv
IHRoZSByaWdodCBvZiAocHgscHkpLgotICAgIGJvb2wgY29udGFpbnMoRnJhY3Rpb25hbExheW91
dFVuaXQgcHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHB5KSBjb25zdAorICAgIGJvb2wgY29udGFp
bnMoTGF5b3V0VW5pdCBweCwgTGF5b3V0VW5pdCBweSkgY29uc3QKICAgICAgICAgeyByZXR1cm4g
cHggPj0geCgpICYmIHB4IDwgbWF4WCgpICYmIHB5ID49IHkoKSAmJiBweSA8IG1heFkoKTsgfQot
ICAgIGJvb2wgY29udGFpbnMoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBwb2ludCkgY29u
c3QgeyByZXR1cm4gY29udGFpbnMocG9pbnQueCgpLCBwb2ludC55KCkpOyB9CisgICAgYm9vbCBj
b250YWlucyhjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5z
KHBvaW50LngoKSwgcG9pbnQueSgpKTsgfQogCi0gICAgdm9pZCBpbnRlcnNlY3QoY29uc3QgRnJh
Y3Rpb25hbExheW91dFJlY3QmKTsKLSAgICB2b2lkIHVuaXRlKGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRSZWN0Jik7Ci0gICAgdm9pZCB1bml0ZUlmTm9uWmVybyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0
UmVjdCYpOworICAgIHZvaWQgaW50ZXJzZWN0KGNvbnN0IExheW91dFJlY3QmKTsKKyAgICB2b2lk
IHVuaXRlKGNvbnN0IExheW91dFJlY3QmKTsKKyAgICB2b2lkIHVuaXRlSWZOb25aZXJvKGNvbnN0
IExheW91dFJlY3QmKTsKIAotICAgIHZvaWQgaW5mbGF0ZVgoRnJhY3Rpb25hbExheW91dFVuaXQg
ZHgpCisgICAgdm9pZCBpbmZsYXRlWChMYXlvdXRVbml0IGR4KQogICAgIHsKICAgICAgICAgbV9s
b2NhdGlvbi5zZXRYKG1fbG9jYXRpb24ueCgpIC0gZHgpOwogICAgICAgICBtX3NpemUuc2V0V2lk
dGgobV9zaXplLndpZHRoKCkgKyBkeCArIGR4KTsKICAgICB9Ci0gICAgdm9pZCBpbmZsYXRlWShG
cmFjdGlvbmFsTGF5b3V0VW5pdCBkeSkKKyAgICB2b2lkIGluZmxhdGVZKExheW91dFVuaXQgZHkp
CiAgICAgewogICAgICAgICBtX2xvY2F0aW9uLnNldFkobV9sb2NhdGlvbi55KCkgLSBkeSk7CiAg
ICAgICAgIG1fc2l6ZS5zZXRIZWlnaHQobV9zaXplLmhlaWdodCgpICsgZHkgKyBkeSk7CiAgICAg
fQotICAgIHZvaWQgaW5mbGF0ZShGcmFjdGlvbmFsTGF5b3V0VW5pdCBkKSB7IGluZmxhdGVYKGQp
OyBpbmZsYXRlWShkKTsgfQorICAgIHZvaWQgaW5mbGF0ZShMYXlvdXRVbml0IGQpIHsgaW5mbGF0
ZVgoZCk7IGluZmxhdGVZKGQpOyB9CiAgICAgdm9pZCBzY2FsZShmbG9hdCBzKTsKIAotICAgIEZy
YWN0aW9uYWxMYXlvdXRSZWN0IHRyYW5zcG9zZWRSZWN0KCkgY29uc3QgeyByZXR1cm4gRnJhY3Rp
b25hbExheW91dFJlY3QobV9sb2NhdGlvbi50cmFuc3Bvc2VkUG9pbnQoKSwgbV9zaXplLnRyYW5z
cG9zZWRTaXplKCkpOyB9CisgICAgTGF5b3V0UmVjdCB0cmFuc3Bvc2VkUmVjdCgpIGNvbnN0IHsg
cmV0dXJuIExheW91dFJlY3QobV9sb2NhdGlvbi50cmFuc3Bvc2VkUG9pbnQoKSwgbV9zaXplLnRy
YW5zcG9zZWRTaXplKCkpOyB9CiAKLSAgICBzdGF0aWMgRnJhY3Rpb25hbExheW91dFJlY3QgaW5m
aW5pdGVSZWN0KCkKKyAgICBzdGF0aWMgTGF5b3V0UmVjdCBpbmZpbml0ZVJlY3QoKQogICAgIHsK
ICAgICAgICAgLy8gUmV0dXJuIGEgcmVjdCB0aGF0IGlzIHNsaWdodGx5IHNtYWxsZXIgdGhhbiB0
aGUgdHJ1ZSBtYXggcmVjdCB0byBhbGxvdyBwaXhlbFNuYXBwaW5nIHRvIHJvdW5kIHVwIHRvIHRo
ZSBuZWFyZXN0IEludFJlY3Qgd2l0aG91dCBvdmVyZmxvd2luZy4KLSAgICAgICAgcmV0dXJuIEZy
YWN0aW9uYWxMYXlvdXRSZWN0KEZyYWN0aW9uYWxMYXlvdXRVbml0OjpuZWFybHlNaW4oKSAvIDIs
IEZyYWN0aW9uYWxMYXlvdXRVbml0OjpuZWFybHlNaW4oKSAvIDIsIEZyYWN0aW9uYWxMYXlvdXRV
bml0OjpuZWFybHlNYXgoKSwgRnJhY3Rpb25hbExheW91dFVuaXQ6Om5lYXJseU1heCgpKTsKKyAg
ICAgICAgcmV0dXJuIExheW91dFJlY3QoTGF5b3V0VW5pdDo6bmVhcmx5TWluKCkgLyAyLCBMYXlv
dXRVbml0OjpuZWFybHlNaW4oKSAvIDIsIExheW91dFVuaXQ6Om5lYXJseU1heCgpLCBMYXlvdXRV
bml0OjpuZWFybHlNYXgoKSk7CiAgICAgfQogCiAjaWYgUExBVEZPUk0oUVQpCi0gICAgZXhwbGlj
aXQgRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgUVJlY3QmKTsKLSAgICBleHBsaWNpdCBGcmFj
dGlvbmFsTGF5b3V0UmVjdChjb25zdCBRUmVjdEYmKTsKKyAgICBleHBsaWNpdCBMYXlvdXRSZWN0
KGNvbnN0IFFSZWN0Jik7CisgICAgZXhwbGljaXQgTGF5b3V0UmVjdChjb25zdCBRUmVjdEYmKTsK
ICAgICBvcGVyYXRvciBRUmVjdEYoKSBjb25zdDsKICNlbmRpZgogCiBwcml2YXRlOgotICAgIEZy
YWN0aW9uYWxMYXlvdXRQb2ludCBtX2xvY2F0aW9uOwotICAgIEZyYWN0aW9uYWxMYXlvdXRTaXpl
IG1fc2l6ZTsKKyAgICBMYXlvdXRQb2ludCBtX2xvY2F0aW9uOworICAgIExheW91dFNpemUgbV9z
aXplOwogfTsKIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRSZWN0IGludGVyc2VjdGlvbihjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGIp
CitpbmxpbmUgTGF5b3V0UmVjdCBpbnRlcnNlY3Rpb24oY29uc3QgTGF5b3V0UmVjdCYgYSwgY29u
c3QgTGF5b3V0UmVjdCYgYikKIHsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCBjID0gYTsKKyAg
ICBMYXlvdXRSZWN0IGMgPSBhOwogICAgIGMuaW50ZXJzZWN0KGIpOwogICAgIHJldHVybiBjOwog
fQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFJlY3QgdW5pb25SZWN0KGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRSZWN0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYikKK2lubGluZSBM
YXlvdXRSZWN0IHVuaW9uUmVjdChjb25zdCBMYXlvdXRSZWN0JiBhLCBjb25zdCBMYXlvdXRSZWN0
JiBiKQogewotICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0IGMgPSBhOworICAgIExheW91dFJlY3Qg
YyA9IGE7CiAgICAgYy51bml0ZShiKTsKICAgICByZXR1cm4gYzsKIH0KIAotRnJhY3Rpb25hbExh
eW91dFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxGcmFjdGlvbmFsTGF5b3V0UmVjdD4mKTsK
K0xheW91dFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxMYXlvdXRSZWN0PiYpOwogCi1pbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBhLCBjb25zdCBG
cmFjdGlvbmFsTGF5b3V0UmVjdCYgYikKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgTGF5
b3V0UmVjdCYgYSwgY29uc3QgTGF5b3V0UmVjdCYgYikKIHsKICAgICByZXR1cm4gYS5sb2NhdGlv
bigpID09IGIubG9jYXRpb24oKSAmJiBhLnNpemUoKSA9PSBiLnNpemUoKTsKIH0KIAotaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFJlY3QmIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IExheW91
dFJlY3QmIGEsIGNvbnN0IExheW91dFJlY3QmIGIpCiB7CiAgICAgcmV0dXJuIGEubG9jYXRpb24o
KSAhPSBiLmxvY2F0aW9uKCkgfHwgYS5zaXplKCkgIT0gYi5zaXplKCk7CiB9CiAKLWlubGluZSBJ
bnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIHJl
Y3QpCitpbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0KGNvbnN0IExheW91dFJlY3Qm
IHJlY3QpCiB7CiAjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKICAgICByZXR1cm4gSW50UmVj
dChyb3VuZGVkSW50UG9pbnQocmVjdC5sb2NhdGlvbigpKSwgSW50U2l6ZShzbmFwU2l6ZVRvUGl4
ZWwocmVjdC53aWR0aCgpLCByZWN0LngoKSksCkBAIC0yMTksOSArMjE5LDI1IEBAIGlubGluZSBJ
bnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3QoY29uc3QKICNlbmRpZgogfQogCi1JbnRSZWN0IGVu
Y2xvc2luZ0ludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKTsKLUZyYWN0aW9uYWxM
YXlvdXRSZWN0IGVuY2xvc2luZ0ZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYp
OworSW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IExheW91dFJlY3QmKTsKK0xheW91dFJl
Y3QgZW5jbG9zaW5nTGF5b3V0UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKworaW5saW5lIEludFJl
Y3QgcGl4ZWxTbmFwcGVkSW50UmVjdChMYXlvdXRVbml0IGxlZnQsIExheW91dFVuaXQgdG9wLCBM
YXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IGhlaWdodCkKK3sKKyAgICByZXR1cm4gSW50UmVj
dChsZWZ0LnJvdW5kKCksIHRvcC5yb3VuZCgpLCBzbmFwU2l6ZVRvUGl4ZWwod2lkdGgsIGxlZnQp
LCBzbmFwU2l6ZVRvUGl4ZWwoaGVpZ2h0LCB0b3ApKTsKK30KKworaW5saW5lIEludFJlY3QgcGl4
ZWxTbmFwcGVkSW50UmVjdEZyb21FZGdlcyhMYXlvdXRVbml0IGxlZnQsIExheW91dFVuaXQgdG9w
LCBMYXlvdXRVbml0IHJpZ2h0LCBMYXlvdXRVbml0IGJvdHRvbSkKK3sKKyAgICByZXR1cm4gSW50
UmVjdChsZWZ0LnJvdW5kKCksIHRvcC5yb3VuZCgpLCBzbmFwU2l6ZVRvUGl4ZWwocmlnaHQgLSBs
ZWZ0LCBsZWZ0KSwgc25hcFNpemVUb1BpeGVsKGJvdHRvbSAtIHRvcCwgdG9wKSk7Cit9CisKK2lu
bGluZSBJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3QoTGF5b3V0UG9pbnQgbG9jYXRpb24sIExh
eW91dFNpemUgc2l6ZSkKK3sKKyAgICByZXR1cm4gSW50UmVjdChyb3VuZGVkSW50UG9pbnQobG9j
YXRpb24pLCBwaXhlbFNuYXBwZWRJbnRTaXplKHNpemUsIGxvY2F0aW9uKSk7Cit9CisKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRnJhY3Rpb25hbExheW91dFJlY3RfaAor
I2VuZGlmIC8vIExheW91dFJlY3RfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTGF5b3V0U2l6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0xheW91dFNpemUuaAkocmV2aXNpb24gMTMzNTE3KQkoZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0U2l6ZS5oOjEzMzUxNykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFNpemUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZyYWN0aW9uYWxMYXlvdXRTaXplX2gKKyNk
ZWZpbmUgRnJhY3Rpb25hbExheW91dFNpemVfaAorCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisj
aW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFVuaXQuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisK
KyNpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlIDxxZ2xvYmFsLmg+CitRVF9CRUdJTl9OQU1FU1BB
Q0UKK2NsYXNzIFFTaXplOworY2xhc3MgUVNpemVGOworUVRfRU5EX05BTUVTUEFDRQorI2VuZGlm
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRnJhY3Rpb25hbExheW91dFBvaW50Owor
CitjbGFzcyBGcmFjdGlvbmFsTGF5b3V0U2l6ZSB7CitwdWJsaWM6CisgICAgRnJhY3Rpb25hbExh
eW91dFNpemUoKSA6IG1fd2lkdGgoMCksIG1faGVpZ2h0KDApIHsgfQorICAgIEZyYWN0aW9uYWxM
YXlvdXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpIDogbV93aWR0aChzaXplLndpZHRoKCkpLCBt
X2hlaWdodChzaXplLmhlaWdodCgpKSB7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0U2l6ZShGcmFj
dGlvbmFsTGF5b3V0VW5pdCB3aWR0aCwgRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KSA6IG1f
d2lkdGgod2lkdGgpLCBtX2hlaWdodChoZWlnaHQpIHsgfQorCisgICAgZXhwbGljaXQgRnJhY3Rp
b25hbExheW91dFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKSA6IG1fd2lkdGgoc2l6ZS53aWR0
aCgpKSwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkgeyB9CisgICAgCisgICAgRnJhY3Rpb25hbExh
eW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CisgICAgRnJhY3Rpb25h
bExheW91dFVuaXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KKworICAgIHZv
aWQgc2V0V2lkdGgoRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgpIHsgbV93aWR0aCA9IHdpZHRo
OyB9CisgICAgdm9pZCBzZXRIZWlnaHQoRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KSB7IG1f
aGVpZ2h0ID0gaGVpZ2h0OyB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBt
X3dpZHRoIDw9IDAgfHwgbV9oZWlnaHQgPD0gMDsgfQorICAgIGJvb2wgaXNaZXJvKCkgY29uc3Qg
eyByZXR1cm4gIW1fd2lkdGggJiYgIW1faGVpZ2h0OyB9CisKKyAgICBmbG9hdCBhc3BlY3RSYXRp
bygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX3dpZHRoKSAvIHN0YXRpY19j
YXN0PGZsb2F0PihtX2hlaWdodCk7IH0KKyAgICAKKyAgICB2b2lkIGV4cGFuZChGcmFjdGlvbmFs
TGF5b3V0VW5pdCB3aWR0aCwgRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KQorICAgIHsKKyAg
ICAgICAgbV93aWR0aCArPSB3aWR0aDsKKyAgICAgICAgbV9oZWlnaHQgKz0gaGVpZ2h0OworICAg
IH0KKyAgICAKKyAgICB2b2lkIHNjYWxlKGZsb2F0IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV93
aWR0aCAqPSBzY2FsZTsKKyAgICAgICAgbV9oZWlnaHQgKj0gc2NhbGU7CisgICAgfQorCisgICAg
dm9pZCBzY2FsZShmbG9hdCB3aWR0aFNjYWxlLCBmbG9hdCBoZWlnaHRTY2FsZSkKKyAgICB7Cisg
ICAgICAgIG1fd2lkdGggKj0gd2lkdGhTY2FsZTsKKyAgICAgICAgbV9oZWlnaHQgKj0gaGVpZ2h0
U2NhbGU7CisgICAgfQorICAgIAorICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplIGV4cGFuZGVkVG8o
Y29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKG1fd2lkdGggPiBvdGhlci5tX3dpZHRoID8gbV93
aWR0aCA6IG90aGVyLm1fd2lkdGgsCisgICAgICAgICAgICBtX2hlaWdodCA+IG90aGVyLm1faGVp
Z2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdodCk7CisgICAgfQorCisgICAgRnJhY3Rpb25h
bExheW91dFNpemUgc2hydW5rVG8oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKG1fd2lkdGgg
PCBvdGhlci5tX3dpZHRoID8gbV93aWR0aCA6IG90aGVyLm1fd2lkdGgsCisgICAgICAgICAgICBt
X2hlaWdodCA8IG90aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdodCk7Cisg
ICAgfQorCisgICAgdm9pZCBjbGFtcE5lZ2F0aXZlVG9aZXJvKCkKKyAgICB7CisgICAgICAgICp0
aGlzID0gZXhwYW5kZWRUbyhGcmFjdGlvbmFsTGF5b3V0U2l6ZSgpKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBjbGFtcFRvTWluaW11bVNpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIG1p
bmltdW1TaXplKQorICAgIHsKKyAgICAgICAgaWYgKG1fd2lkdGggPCBtaW5pbXVtU2l6ZS53aWR0
aCgpKQorICAgICAgICAgICAgbV93aWR0aCA9IG1pbmltdW1TaXplLndpZHRoKCk7CisgICAgICAg
IGlmIChtX2hlaWdodCA8IG1pbmltdW1TaXplLmhlaWdodCgpKQorICAgICAgICAgICAgbV9oZWln
aHQgPSBtaW5pbXVtU2l6ZS5oZWlnaHQoKTsKKyAgICB9CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0
U2l6ZSB0cmFuc3Bvc2VkU2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gRnJhY3Rp
b25hbExheW91dFNpemUobV9oZWlnaHQsIG1fd2lkdGgpOworICAgIH0KKworI2lmIFBMQVRGT1JN
KFFUKQorICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0IFFTaXplJik7Cisg
ICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFNpemUoY29uc3QgUVNpemVGJik7CisgICAgb3Bl
cmF0b3IgUVNpemVGKCkgY29uc3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBtX3dpZHRoLCBtX2hlaWdodDsKK307CisKK2lubGluZSBGcmFjdGlvbmFsTGF5
b3V0U2l6ZSYgb3BlcmF0b3IrPShGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYSwgY29uc3QgRnJhY3Rp
b25hbExheW91dFNpemUmIGIpCit7CisgICAgYS5zZXRXaWR0aChhLndpZHRoKCkgKyBiLndpZHRo
KCkpOworICAgIGEuc2V0SGVpZ2h0KGEuaGVpZ2h0KCkgKyBiLmhlaWdodCgpKTsKKyAgICByZXR1
cm4gYTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplJiBvcGVyYXRvci09KEZyYWN0
aW9uYWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK3sKKyAg
ICBhLnNldFdpZHRoKGEud2lkdGgoKSAtIGIud2lkdGgoKSk7CisgICAgYS5zZXRIZWlnaHQoYS5o
ZWlnaHQoKSAtIGIuaGVpZ2h0KCkpOworICAgIHJldHVybiBhOworfQorCitpbmxpbmUgRnJhY3Rp
b25hbExheW91dFNpemUgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBhLCBj
b25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExh
eW91dFNpemUoYS53aWR0aCgpICsgYi53aWR0aCgpLCBhLmhlaWdodCgpICsgYi5oZWlnaHQoKSk7
Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSBvcGVyYXRvci0oY29uc3QgRnJhY3Rp
b25hbExheW91dFNpemUmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQoreworICAg
IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShhLndpZHRoKCkgLSBiLndpZHRoKCksIGEuaGVp
Z2h0KCkgLSBiLmhlaWdodCgpKTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplIG9w
ZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkKK3sKKyAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFNpemUoLXNpemUud2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkpOworfQor
CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBhLCBj
b25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK3sKKyAgICByZXR1cm4gYS53aWR0aCgpID09
IGIud2lkdGgoKSAmJiBhLmhlaWdodCgpID09IGIuaGVpZ2h0KCk7Cit9CisKK2lubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRTaXplJiBiKQoreworICAgIHJldHVybiBhLndpZHRoKCkgIT0gYi53aWR0aCgpIHx8
IGEuaGVpZ2h0KCkgIT0gYi5oZWlnaHQoKTsKK30KKworaW5saW5lIEludFNpemUgZmxvb3JlZElu
dFNpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHMpCit7CisgICAgcmV0dXJuIEludFNp
emUocy53aWR0aCgpLmZsb29yKCksIHMuaGVpZ2h0KCkuZmxvb3IoKSk7Cit9CisKK2lubGluZSBJ
bnRTaXplIHJvdW5kZWRJbnRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzKQorewor
ICAgIHJldHVybiBJbnRTaXplKHMud2lkdGgoKS5yb3VuZCgpLCBzLmhlaWdodCgpLnJvdW5kKCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBGcmFjdGlvbmFsTGF5
b3V0U2l6ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRT
aXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5
b3V0U2l6ZS5oCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9MYXlvdXRTaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEyICsyOCwxMiBAQAog
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEZyYWN0aW9uYWxMYXlvdXRTaXplX2gKLSNk
ZWZpbmUgRnJhY3Rpb25hbExheW91dFNpemVfaAorI2lmbmRlZiBMYXlvdXRTaXplX2gKKyNkZWZp
bmUgTGF5b3V0U2l6ZV9oCiAKICNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlICJGcmFj
dGlvbmFsTGF5b3V0VW5pdC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJMYXlv
dXRVbml0LmgiCiAKICNpZiBQTEFURk9STShRVCkKICNpbmNsdWRlIDxxZ2xvYmFsLmg+CkBAIC00
NSwyOCArNDUsMjggQEAgUVRfRU5EX05BTUVTUEFDRQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRQb2ludDsKK2NsYXNzIExheW91dFBvaW50OwogCi1jbGFz
cyBGcmFjdGlvbmFsTGF5b3V0U2l6ZSB7CitjbGFzcyBMYXlvdXRTaXplIHsKIHB1YmxpYzoKLSAg
ICBGcmFjdGlvbmFsTGF5b3V0U2l6ZSgpIDogbV93aWR0aCgwKSwgbV9oZWlnaHQoMCkgeyB9Ci0g
ICAgRnJhY3Rpb25hbExheW91dFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgOiBtX3dpZHRoKHNp
emUud2lkdGgoKSksIG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkpIHsgfQotICAgIEZyYWN0aW9uYWxM
YXlvdXRTaXplKEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoLCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBoZWlnaHQpIDogbV93aWR0aCh3aWR0aCksIG1faGVpZ2h0KGhlaWdodCkgeyB9CisgICAgTGF5
b3V0U2l6ZSgpIDogbV93aWR0aCgwKSwgbV9oZWlnaHQoMCkgeyB9CisgICAgTGF5b3V0U2l6ZShj
b25zdCBJbnRTaXplJiBzaXplKSA6IG1fd2lkdGgoc2l6ZS53aWR0aCgpKSwgbV9oZWlnaHQoc2l6
ZS5oZWlnaHQoKSkgeyB9CisgICAgTGF5b3V0U2l6ZShMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRV
bml0IGhlaWdodCkgOiBtX3dpZHRoKHdpZHRoKSwgbV9oZWlnaHQoaGVpZ2h0KSB7IH0KIAotICAg
IGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgOiBt
X3dpZHRoKHNpemUud2lkdGgoKSksIG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkpIHsgfQorICAgIGV4
cGxpY2l0IExheW91dFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKSA6IG1fd2lkdGgoc2l6ZS53
aWR0aCgpKSwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkgeyB9CiAgICAgCi0gICAgRnJhY3Rpb25h
bExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9Ci0gICAgRnJhY3Rp
b25hbExheW91dFVuaXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KKyAgICBM
YXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQorICAgIExheW91dFVu
aXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KIAotICAgIHZvaWQgc2V0V2lk
dGgoRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgpIHsgbV93aWR0aCA9IHdpZHRoOyB9Ci0gICAg
dm9pZCBzZXRIZWlnaHQoRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KSB7IG1faGVpZ2h0ID0g
aGVpZ2h0OyB9CisgICAgdm9pZCBzZXRXaWR0aChMYXlvdXRVbml0IHdpZHRoKSB7IG1fd2lkdGgg
PSB3aWR0aDsgfQorICAgIHZvaWQgc2V0SGVpZ2h0KExheW91dFVuaXQgaGVpZ2h0KSB7IG1faGVp
Z2h0ID0gaGVpZ2h0OyB9CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3dp
ZHRoIDw9IDAgfHwgbV9oZWlnaHQgPD0gMDsgfQogICAgIGJvb2wgaXNaZXJvKCkgY29uc3QgeyBy
ZXR1cm4gIW1fd2lkdGggJiYgIW1faGVpZ2h0OyB9CiAKICAgICBmbG9hdCBhc3BlY3RSYXRpbygp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX3dpZHRoKSAvIHN0YXRpY19jYXN0
PGZsb2F0PihtX2hlaWdodCk7IH0KICAgICAKLSAgICB2b2lkIGV4cGFuZChGcmFjdGlvbmFsTGF5
b3V0VW5pdCB3aWR0aCwgRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KQorICAgIHZvaWQgZXhw
YW5kKExheW91dFVuaXQgd2lkdGgsIExheW91dFVuaXQgaGVpZ2h0KQogICAgIHsKICAgICAgICAg
bV93aWR0aCArPSB3aWR0aDsKICAgICAgICAgbV9oZWlnaHQgKz0gaGVpZ2h0OwpAQCAtODQsMjQg
Kzg0LDI0IEBAIHB1YmxpYzoKICAgICAgICAgbV9oZWlnaHQgKj0gaGVpZ2h0U2NhbGU7CiAgICAg
fQogICAgIAotICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplIGV4cGFuZGVkVG8oY29uc3QgRnJhY3Rp
b25hbExheW91dFNpemUmIG90aGVyKSBjb25zdAorICAgIExheW91dFNpemUgZXhwYW5kZWRUbyhj
b25zdCBMYXlvdXRTaXplJiBvdGhlcikgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBGcmFj
dGlvbmFsTGF5b3V0U2l6ZShtX3dpZHRoID4gb3RoZXIubV93aWR0aCA/IG1fd2lkdGggOiBvdGhl
ci5tX3dpZHRoLAorICAgICAgICByZXR1cm4gTGF5b3V0U2l6ZShtX3dpZHRoID4gb3RoZXIubV93
aWR0aCA/IG1fd2lkdGggOiBvdGhlci5tX3dpZHRoLAogICAgICAgICAgICAgbV9oZWlnaHQgPiBv
dGhlci5tX2hlaWdodCA/IG1faGVpZ2h0IDogb3RoZXIubV9oZWlnaHQpOwogICAgIH0KIAotICAg
IEZyYWN0aW9uYWxMYXlvdXRTaXplIHNocnVua1RvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXpl
JiBvdGhlcikgY29uc3QKKyAgICBMYXlvdXRTaXplIHNocnVua1RvKGNvbnN0IExheW91dFNpemUm
IG90aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXpl
KG1fd2lkdGggPCBvdGhlci5tX3dpZHRoID8gbV93aWR0aCA6IG90aGVyLm1fd2lkdGgsCisgICAg
ICAgIHJldHVybiBMYXlvdXRTaXplKG1fd2lkdGggPCBvdGhlci5tX3dpZHRoID8gbV93aWR0aCA6
IG90aGVyLm1fd2lkdGgsCiAgICAgICAgICAgICBtX2hlaWdodCA8IG90aGVyLm1faGVpZ2h0ID8g
bV9oZWlnaHQgOiBvdGhlci5tX2hlaWdodCk7CiAgICAgfQogCiAgICAgdm9pZCBjbGFtcE5lZ2F0
aXZlVG9aZXJvKCkKICAgICB7Ci0gICAgICAgICp0aGlzID0gZXhwYW5kZWRUbyhGcmFjdGlvbmFs
TGF5b3V0U2l6ZSgpKTsKKyAgICAgICAgKnRoaXMgPSBleHBhbmRlZFRvKExheW91dFNpemUoKSk7
CiAgICAgfQogICAgIAotICAgIHZvaWQgY2xhbXBUb01pbmltdW1TaXplKGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRTaXplJiBtaW5pbXVtU2l6ZSkKKyAgICB2b2lkIGNsYW1wVG9NaW5pbXVtU2l6ZShj
b25zdCBMYXlvdXRTaXplJiBtaW5pbXVtU2l6ZSkKICAgICB7CiAgICAgICAgIGlmIChtX3dpZHRo
IDwgbWluaW11bVNpemUud2lkdGgoKSkKICAgICAgICAgICAgIG1fd2lkdGggPSBtaW5pbXVtU2l6
ZS53aWR0aCgpOwpAQCAtMTA5LDcwICsxMDksNzkgQEAgcHVibGljOgogICAgICAgICAgICAgbV9o
ZWlnaHQgPSBtaW5pbXVtU2l6ZS5oZWlnaHQoKTsKICAgICB9CiAKLSAgICBGcmFjdGlvbmFsTGF5
b3V0U2l6ZSB0cmFuc3Bvc2VkU2l6ZSgpIGNvbnN0CisgICAgTGF5b3V0U2l6ZSB0cmFuc3Bvc2Vk
U2l6ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUo
bV9oZWlnaHQsIG1fd2lkdGgpOworICAgICAgICByZXR1cm4gTGF5b3V0U2l6ZShtX2hlaWdodCwg
bV93aWR0aCk7CiAgICAgfQogCiAjaWYgUExBVEZPUk0oUVQpCi0gICAgZXhwbGljaXQgRnJhY3Rp
b25hbExheW91dFNpemUoY29uc3QgUVNpemUmKTsKLSAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5
b3V0U2l6ZShjb25zdCBRU2l6ZUYmKTsKKyAgICBleHBsaWNpdCBMYXlvdXRTaXplKGNvbnN0IFFT
aXplJik7CisgICAgZXhwbGljaXQgTGF5b3V0U2l6ZShjb25zdCBRU2l6ZUYmKTsKICAgICBvcGVy
YXRvciBRU2l6ZUYoKSBjb25zdDsKICNlbmRpZgogCiBwcml2YXRlOgotICAgIEZyYWN0aW9uYWxM
YXlvdXRVbml0IG1fd2lkdGgsIG1faGVpZ2h0OworICAgIExheW91dFVuaXQgbV93aWR0aCwgbV9o
ZWlnaHQ7CiB9OwogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFNpemUmIG9wZXJhdG9yKz0oRnJh
Y3Rpb25hbExheW91dFNpemUmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQoraW5s
aW5lIExheW91dFNpemUmIG9wZXJhdG9yKz0oTGF5b3V0U2l6ZSYgYSwgY29uc3QgTGF5b3V0U2l6
ZSYgYikKIHsKICAgICBhLnNldFdpZHRoKGEud2lkdGgoKSArIGIud2lkdGgoKSk7CiAgICAgYS5z
ZXRIZWlnaHQoYS5oZWlnaHQoKSArIGIuaGVpZ2h0KCkpOwogICAgIHJldHVybiBhOwogfQogCi1p
bmxpbmUgRnJhY3Rpb25hbExheW91dFNpemUmIG9wZXJhdG9yLT0oRnJhY3Rpb25hbExheW91dFNp
emUmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQoraW5saW5lIExheW91dFNpemUm
IG9wZXJhdG9yLT0oTGF5b3V0U2l6ZSYgYSwgY29uc3QgTGF5b3V0U2l6ZSYgYikKIHsKICAgICBh
LnNldFdpZHRoKGEud2lkdGgoKSAtIGIud2lkdGgoKSk7CiAgICAgYS5zZXRIZWlnaHQoYS5oZWln
aHQoKSAtIGIuaGVpZ2h0KCkpOwogICAgIHJldHVybiBhOwogfQogCi1pbmxpbmUgRnJhY3Rpb25h
bExheW91dFNpemUgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBhLCBjb25z
dCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK2lubGluZSBMYXlvdXRTaXplIG9wZXJhdG9yKyhj
b25zdCBMYXlvdXRTaXplJiBhLCBjb25zdCBMYXlvdXRTaXplJiBiKQogewotICAgIHJldHVybiBG
cmFjdGlvbmFsTGF5b3V0U2l6ZShhLndpZHRoKCkgKyBiLndpZHRoKCksIGEuaGVpZ2h0KCkgKyBi
LmhlaWdodCgpKTsKKyAgICByZXR1cm4gTGF5b3V0U2l6ZShhLndpZHRoKCkgKyBiLndpZHRoKCks
IGEuaGVpZ2h0KCkgKyBiLmhlaWdodCgpKTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRT
aXplIG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYSwgY29uc3QgRnJhY3Rp
b25hbExheW91dFNpemUmIGIpCitpbmxpbmUgTGF5b3V0U2l6ZSBvcGVyYXRvci0oY29uc3QgTGF5
b3V0U2l6ZSYgYSwgY29uc3QgTGF5b3V0U2l6ZSYgYikKIHsKLSAgICByZXR1cm4gRnJhY3Rpb25h
bExheW91dFNpemUoYS53aWR0aCgpIC0gYi53aWR0aCgpLCBhLmhlaWdodCgpIC0gYi5oZWlnaHQo
KSk7CisgICAgcmV0dXJuIExheW91dFNpemUoYS53aWR0aCgpIC0gYi53aWR0aCgpLCBhLmhlaWdo
dCgpIC0gYi5oZWlnaHQoKSk7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSBvcGVy
YXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpCitpbmxpbmUgTGF5b3V0U2l6
ZSBvcGVyYXRvci0oY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkKIHsKLSAgICByZXR1cm4gRnJhY3Rp
b25hbExheW91dFNpemUoLXNpemUud2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkpOworICAgIHJldHVy
biBMYXlvdXRTaXplKC1zaXplLndpZHRoKCksIC1zaXplLmhlaWdodCgpKTsKIH0KIAotaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFNpemUmIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExheW91
dFNpemUmIGEsIGNvbnN0IExheW91dFNpemUmIGIpCiB7CiAgICAgcmV0dXJuIGEud2lkdGgoKSA9
PSBiLndpZHRoKCkgJiYgYS5oZWlnaHQoKSA9PSBiLmhlaWdodCgpOwogfQogCi1pbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlv
bmFsTGF5b3V0U2l6ZSYgYikKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgTGF5b3V0U2l6
ZSYgYSwgY29uc3QgTGF5b3V0U2l6ZSYgYikKIHsKICAgICByZXR1cm4gYS53aWR0aCgpICE9IGIu
d2lkdGgoKSB8fCBhLmhlaWdodCgpICE9IGIuaGVpZ2h0KCk7CiB9CiAKLWlubGluZSBJbnRTaXpl
IGZsb29yZWRJbnRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzKQoraW5saW5lIElu
dFNpemUgZmxvb3JlZEludFNpemUoY29uc3QgTGF5b3V0U2l6ZSYgcykKIHsKICAgICByZXR1cm4g
SW50U2l6ZShzLndpZHRoKCkuZmxvb3IoKSwgcy5oZWlnaHQoKS5mbG9vcigpKTsKIH0KIAotaW5s
aW5lIEludFNpemUgcm91bmRlZEludFNpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHMp
CitpbmxpbmUgSW50U2l6ZSByb3VuZGVkSW50U2l6ZShjb25zdCBMYXlvdXRTaXplJiBzKQogewog
ICAgIHJldHVybiBJbnRTaXplKHMud2lkdGgoKS5yb3VuZCgpLCBzLmhlaWdodCgpLnJvdW5kKCkp
OwogfQogCitpbmxpbmUgTGF5b3V0U2l6ZSByb3VuZGVkTGF5b3V0U2l6ZShjb25zdCBGbG9hdFNp
emUmIHMpCit7CisjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKKyAgICByZXR1cm4gTGF5b3V0
U2l6ZShzKTsKKyNlbHNlCisgICAgcmV0dXJuIHJvdW5kZWRJbnRTaXplKHMpOworI2VuZGlmCit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEZyYWN0aW9uYWxMYXlvdXRT
aXplX2gKKyNlbmRpZiAvLyBMYXlvdXRTaXplX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAkocmV2aXNpb24gMTMzNTM5KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNyArMzQsNyBAQAogCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIktV
UkwuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJM
YXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlck9wZXJhdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uLmgJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0LmgiCiAj
aW5jbHVkZSAiQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oIgogI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlv
bi5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUGFy
YW1ldGVyTGlzdC5oCShyZXZpc2lvbiAxMzM1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2RlZmluZSBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0
X2gKIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgor
I2luY2x1ZGUgIkxheW91dFNpemUuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyT3BlcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uaAkocmV2aXNpb24gMTMzNTM5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVy
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2lmIEVOQUJMRShDU1Nf
RklMVEVSUykKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIK
KyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCiAjaW5jbHVkZSAiTGVuZ3RoLmgiCiAjaW5jbHVkZSA8
d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ck9wZXJhdGlvbnMuaAkocmV2aXNpb24gMTMzNTM5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDcgKzI5LDYgQEAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAKICNpbmNsdWRlICJGaWx0
ZXJPcGVyYXRpb24uaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgogI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1ZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5jcHAJKHJldmlzaW9uIDEzMzUzOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvVmFsaWRhdGVkQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAog
CiAjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUGFyYW1ldGVyLmgiCiAjaW5jbHVkZSAiQ3VzdG9tRmls
dGVyVmFsaWRhdGVkUHJvZ3JhbS5oIgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRTaXplLmgi
CisjaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1ZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvVmFsaWRhdGVkQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uLmgJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJDdXN0b21GaWx0
ZXJDb25zdGFudHMuaCIKICNpbmNsdWRlICJDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0LmgiCiAj
aW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNp
bmNsdWRlICJMYXlvdXRTaXplLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFBvaW50UXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0Zy
YWN0aW9uYWxMYXlvdXRQb2ludFF0LmNwcAkocmV2aXNpb24gMTMzNTM5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFBvaW50UXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDEy
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCIKLQotI2lu
Y2x1ZGUgPFFQb2ludD4KLSNpbmNsdWRlIDxRUG9pbnRGPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLUZyYWN0aW9uYWxMYXlvdXRQb2ludDo6RnJhY3Rpb25hbExheW91dFBvaW50KGNvbnN0IFFQ
b2ludCYgcG9pbnQpCi0gICAgOiBtX3gocG9pbnQueCgpKQotICAgICwgbV95KHBvaW50LnkoKSkK
LXsKLX0KLQotRnJhY3Rpb25hbExheW91dFBvaW50OjpGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29u
c3QgUVBvaW50RiYgcG9pbnQpCi0gICAgOiBtX3gocG9pbnQueCgpKQotICAgICwgbV95KHBvaW50
LnkoKSkKLXsKLX0KLQotRnJhY3Rpb25hbExheW91dFBvaW50OjpvcGVyYXRvciBRUG9pbnRGKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gUVBvaW50RihtX3gsIG1feSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9GcmFjdGlvbmFs
TGF5b3V0UmVjdFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9GcmFjdGlvbmFsTGF5b3V0UmVjdFF0LmNwcAkocmV2aXNpb24gMTMzNTM5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFJl
Y3RRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAgICBDb3B5cmln
aHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRSZWN0
LmgiCi0KLSNpbmNsdWRlIDxRUmVjdD4KLSNpbmNsdWRlIDxRUmVjdEY+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotRnJhY3Rpb25hbExheW91dFJlY3Q6OkZyYWN0aW9uYWxMYXlvdXRSZWN0KGNv
bnN0IFFSZWN0JiByKQotICAgIDogbV9sb2NhdGlvbihyLnRvcExlZnQoKSkKLSAgICAsIG1fc2l6
ZShyLndpZHRoKCksIHIuaGVpZ2h0KCkpCi17Ci19Ci0KLUZyYWN0aW9uYWxMYXlvdXRSZWN0OjpG
cmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBRUmVjdEYmIHIpCi0gICAgOiBtX2xvY2F0aW9uKHIu
dG9wTGVmdCgpKQotICAgICwgbV9zaXplKHIud2lkdGgoKSwgci5oZWlnaHQoKSkKLXsKLX0KLQot
RnJhY3Rpb25hbExheW91dFJlY3Q6Om9wZXJhdG9yIFFSZWN0RigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIFFSZWN0Rih4KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOwotfQotCi19IC8vIG5hbWVz
cGFjZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25h
bExheW91dFNpemVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFNpemVRdC5jcHAJKHJldmlzaW9uIDEzMzUzOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxMYXlvdXRT
aXplUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gICAgQ29weXJp
Z2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRT
aXplLmgiCi0KLSNpbmNsdWRlIDxRU2l6ZT4KLSNpbmNsdWRlIDxRU2l6ZUY+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotRnJhY3Rpb25hbExheW91dFNpemU6OkZyYWN0aW9uYWxMYXlvdXRTaXpl
KGNvbnN0IFFTaXplJiBzaXplKQotICAgIDogbV93aWR0aChzaXplLndpZHRoKCkpCi0gICAgLCBt
X2hlaWdodChzaXplLmhlaWdodCgpKQotewotfQotCi1GcmFjdGlvbmFsTGF5b3V0U2l6ZTo6RnJh
Y3Rpb25hbExheW91dFNpemUoY29uc3QgUVNpemVGJiBzaXplKQotICAgIDogbV93aWR0aChzaXpl
LndpZHRoKCkpCi0gICAgLCBtX2hlaWdodChzaXplLmhlaWdodCgpKQotewotfQotCi1GcmFjdGlv
bmFsTGF5b3V0U2l6ZTo6b3BlcmF0b3IgUVNpemVGKCkgY29uc3QKLXsKLSAgICByZXR1cm4gUVNp
emVGKHdpZHRoKCksIGhlaWdodCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0xheW91dFBvaW50UXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0xheW91dFBvaW50UXQu
Y3BwCShyZXZpc2lvbiAxMzM1MTcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0ZyYWN0aW9uYWxMYXlvdXRQb2ludFF0LmNwcDoxMzM1MTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9MYXlvdXRQb2ludFF0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFBvaW50LmgiCisKKyNpbmNsdWRlIDxRUG9p
bnQ+CisjaW5jbHVkZSA8UVBvaW50Rj4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGcmFjdGlv
bmFsTGF5b3V0UG9pbnQ6OkZyYWN0aW9uYWxMYXlvdXRQb2ludChjb25zdCBRUG9pbnQmIHBvaW50
KQorICAgIDogbV94KHBvaW50LngoKSkKKyAgICAsIG1feShwb2ludC55KCkpCit7Cit9CisKK0Zy
YWN0aW9uYWxMYXlvdXRQb2ludDo6RnJhY3Rpb25hbExheW91dFBvaW50KGNvbnN0IFFQb2ludEYm
IHBvaW50KQorICAgIDogbV94KHBvaW50LngoKSkKKyAgICAsIG1feShwb2ludC55KCkpCit7Cit9
CisKK0ZyYWN0aW9uYWxMYXlvdXRQb2ludDo6b3BlcmF0b3IgUVBvaW50RigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFFQb2ludEYobV94LCBtX3kpOworfQorCit9IC8vIG5hbWVzcGFjZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTGF5b3V0UG9pbnRRdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTGF5b3V0UG9p
bnRRdC5jcHAJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0xheW91dFBvaW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOCwyNiArMTgs
MjYgQEAKICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5
b3V0UG9pbnQuaCIKKyNpbmNsdWRlICJMYXlvdXRQb2ludC5oIgogCiAjaW5jbHVkZSA8UVBvaW50
PgogI2luY2x1ZGUgPFFQb2ludEY+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRnJhY3Rpb25h
bExheW91dFBvaW50OjpGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgUVBvaW50JiBwb2ludCkK
K0xheW91dFBvaW50OjpMYXlvdXRQb2ludChjb25zdCBRUG9pbnQmIHBvaW50KQogICAgIDogbV94
KHBvaW50LngoKSkKICAgICAsIG1feShwb2ludC55KCkpCiB7CiB9CiAKLUZyYWN0aW9uYWxMYXlv
dXRQb2ludDo6RnJhY3Rpb25hbExheW91dFBvaW50KGNvbnN0IFFQb2ludEYmIHBvaW50KQorTGF5
b3V0UG9pbnQ6OkxheW91dFBvaW50KGNvbnN0IFFQb2ludEYmIHBvaW50KQogICAgIDogbV94KHBv
aW50LngoKSkKICAgICAsIG1feShwb2ludC55KCkpCiB7CiB9CiAKLUZyYWN0aW9uYWxMYXlvdXRQ
b2ludDo6b3BlcmF0b3IgUVBvaW50RigpIGNvbnN0CitMYXlvdXRQb2ludDo6b3BlcmF0b3IgUVBv
aW50RigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFFQb2ludEYobV94LCBtX3kpOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTGF5b3V0UmVjdFF0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9MYXlvdXRSZWN0
UXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvTGF5b3V0UmVjdFF0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3Qu
aCIKKworI2luY2x1ZGUgPFFSZWN0PgorI2luY2x1ZGUgPFFSZWN0Rj4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitMYXlvdXRSZWN0OjpMYXlvdXRSZWN0KGNvbnN0IFFSZWN0JiByKQorICAgIDog
bV9sb2NhdGlvbihyLnRvcExlZnQoKSkKKyAgICAsIG1fc2l6ZShyLndpZHRoKCksIHIuaGVpZ2h0
KCkpCit7Cit9CisKK0xheW91dFJlY3Q6OkxheW91dFJlY3QoY29uc3QgUVJlY3RGJiByKQorICAg
IDogbV9sb2NhdGlvbihyLnRvcExlZnQoKSkKKyAgICAsIG1fc2l6ZShyLndpZHRoKCksIHIuaGVp
Z2h0KCkpCit7Cit9CisKK0xheW91dFJlY3Q6Om9wZXJhdG9yIFFSZWN0RigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFFSZWN0Rih4KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOworfQorCit9IC8v
IG5hbWVzcGFjZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTGF5
b3V0U2l6ZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9MYXlvdXRTaXplUXQuY3BwCShyZXZpc2lvbiAxMzM1MTcpCShmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxMYXlvdXRTaXplUXQuY3BwOjEz
MzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0xheW91dFNpemVR
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFNpemUu
aCIKKworI2luY2x1ZGUgPFFTaXplPgorI2luY2x1ZGUgPFFTaXplRj4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitGcmFjdGlvbmFsTGF5b3V0U2l6ZTo6RnJhY3Rpb25hbExheW91dFNpemUoY29u
c3QgUVNpemUmIHNpemUpCisgICAgOiBtX3dpZHRoKHNpemUud2lkdGgoKSkKKyAgICAsIG1faGVp
Z2h0KHNpemUuaGVpZ2h0KCkpCit7Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRTaXplOjpGcmFjdGlv
bmFsTGF5b3V0U2l6ZShjb25zdCBRU2l6ZUYmIHNpemUpCisgICAgOiBtX3dpZHRoKHNpemUud2lk
dGgoKSkKKyAgICAsIG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkpCit7Cit9CisKK0ZyYWN0aW9uYWxM
YXlvdXRTaXplOjpvcGVyYXRvciBRU2l6ZUYoKSBjb25zdAoreworICAgIHJldHVybiBRU2l6ZUYo
d2lkdGgoKSwgaGVpZ2h0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTGF5b3V0U2l6ZVF0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9MYXlvdXRTaXplUXQuY3BwCShy
ZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9M
YXlvdXRTaXplUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOSwyNiArMTksMjYgQEAKIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFNpemUuaCIKKyNp
bmNsdWRlICJMYXlvdXRTaXplLmgiCiAKICNpbmNsdWRlIDxRU2l6ZT4KICNpbmNsdWRlIDxRU2l6
ZUY+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRnJhY3Rpb25hbExheW91dFNpemU6OkZyYWN0
aW9uYWxMYXlvdXRTaXplKGNvbnN0IFFTaXplJiBzaXplKQorTGF5b3V0U2l6ZTo6TGF5b3V0U2l6
ZShjb25zdCBRU2l6ZSYgc2l6ZSkKICAgICA6IG1fd2lkdGgoc2l6ZS53aWR0aCgpKQogICAgICwg
bV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkKIHsKIH0KIAotRnJhY3Rpb25hbExheW91dFNpemU6OkZy
YWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0IFFTaXplRiYgc2l6ZSkKK0xheW91dFNpemU6OkxheW91
dFNpemUoY29uc3QgUVNpemVGJiBzaXplKQogICAgIDogbV93aWR0aChzaXplLndpZHRoKCkpCiAg
ICAgLCBtX2hlaWdodChzaXplLmhlaWdodCgpKQogewogfQogCi1GcmFjdGlvbmFsTGF5b3V0U2l6
ZTo6b3BlcmF0b3IgUVNpemVGKCkgY29uc3QKK0xheW91dFNpemU6Om9wZXJhdG9yIFFTaXplRigp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIFFTaXplRih3aWR0aCgpLCBoZWlnaHQoKSk7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9w
ZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbnMuaAkocmV2aXNpb24gMTMzNTM5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVy
YXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICNpZm5kZWYgVHJhbnNm
b3JtT3BlcmF0aW9uc19oCiAjZGVmaW5lIFRyYW5zZm9ybU9wZXJhdGlvbnNfaAogCi0jaW5jbHVk
ZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCiAjaW5jbHVkZSAiVHJh
bnNmb3JtT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5z
Zm9ybXMvVHJhbnNmb3JtU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybVN0YXRlLmgJKHJldmlzaW9uIDEzMzUz
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNm
b3JtU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIkZs
b2F0UG9pbnQuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJJbnRTaXplLmgi
Ci0jaW5jbHVkZSAiTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTGF5b3V0
U2l6ZS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFu
c2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNw
cAkocmV2aXNpb24gMTMzNTM5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDggKzMxLDggQEAKICNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKICNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0
UmVjdC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAK
ICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CkBAIC02MTcsMTAgKzYxNywxMCBAQCBGbG9hdFF1YWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnBy
b2plY3RRCiBzdGF0aWMgZmxvYXQgY2xhbXBFZGdlVmFsdWUoZmxvYXQgZikKIHsKICAgICBBU1NF
UlQoIWlzbmFuKGYpKTsKLSAgICByZXR1cm4gbWluPGZsb2F0PihtYXg8ZmxvYXQ+KGYsIC1GcmFj
dGlvbmFsTGF5b3V0VW5pdDo6bWF4KCkgLyAyKSwgRnJhY3Rpb25hbExheW91dFVuaXQ6Om1heCgp
IC8gMik7CisgICAgcmV0dXJuIG1pbjxmbG9hdD4obWF4PGZsb2F0PihmLCAtTGF5b3V0VW5pdDo6
bWF4KCkgLyAyKSwgTGF5b3V0VW5pdDo6bWF4KCkgLyAyKTsKIH0KIAotRnJhY3Rpb25hbExheW91
dFJlY3QgVHJhbnNmb3JtYXRpb25NYXRyaXg6OmNsYW1wZWRCb3VuZHNPZlByb2plY3RlZFF1YWQo
Y29uc3QgRmxvYXRRdWFkJiBxKSBjb25zdAorTGF5b3V0UmVjdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6Y2xhbXBlZEJvdW5kc09mUHJvamVjdGVkUXVhZChjb25zdCBGbG9hdFF1YWQmIHEpIGNvbnN0
CiB7CiAgICAgRmxvYXRSZWN0IG1hcHBlZFF1YWRCb3VuZHMgPSBwcm9qZWN0UXVhZChxKS5ib3Vu
ZGluZ0JveCgpOwogCkBAIC02MjksMTggKzYyOSwxNyBAQCBGcmFjdGlvbmFsTGF5b3V0UmVjdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpCiAKICAgICBmbG9hdCByaWdodDsKICAgICBpZiAoaXNpbmYobWFw
cGVkUXVhZEJvdW5kcy54KCkpICYmIGlzaW5mKG1hcHBlZFF1YWRCb3VuZHMud2lkdGgoKSkpCi0g
ICAgICAgIHJpZ2h0ID0gRnJhY3Rpb25hbExheW91dFVuaXQ6Om1heCgpIC8gMjsKKyAgICAgICAg
cmlnaHQgPSBMYXlvdXRVbml0OjptYXgoKSAvIDI7CiAgICAgZWxzZQogICAgICAgICByaWdodCA9
IGNsYW1wRWRnZVZhbHVlKGNlaWxmKG1hcHBlZFF1YWRCb3VuZHMubWF4WCgpKSk7CiAKICAgICBm
bG9hdCBib3R0b207CiAgICAgaWYgKGlzaW5mKG1hcHBlZFF1YWRCb3VuZHMueSgpKSAmJiBpc2lu
ZihtYXBwZWRRdWFkQm91bmRzLmhlaWdodCgpKSkKLSAgICAgICAgYm90dG9tID0gRnJhY3Rpb25h
bExheW91dFVuaXQ6Om1heCgpIC8gMjsKKyAgICAgICAgYm90dG9tID0gTGF5b3V0VW5pdDo6bWF4
KCkgLyAyOwogICAgIGVsc2UKICAgICAgICAgYm90dG9tID0gY2xhbXBFZGdlVmFsdWUoY2VpbGYo
bWFwcGVkUXVhZEJvdW5kcy5tYXhZKCkpKTsKIAotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0
UmVjdChGcmFjdGlvbmFsTGF5b3V0VW5pdDo6Y2xhbXAobGVmdCksIEZyYWN0aW9uYWxMYXlvdXRV
bml0OjpjbGFtcCh0b3ApLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJhY3Rp
b25hbExheW91dFVuaXQ6OmNsYW1wKHJpZ2h0IC0gbGVmdCksIEZyYWN0aW9uYWxMYXlvdXRVbml0
OjpjbGFtcChib3R0b20gLSB0b3ApKTsKKyAgICByZXR1cm4gTGF5b3V0UmVjdChMYXlvdXRVbml0
OjpjbGFtcChsZWZ0KSwgTGF5b3V0VW5pdDo6Y2xhbXAodG9wKSwgIExheW91dFVuaXQ6OmNsYW1w
KHJpZ2h0IC0gbGVmdCksIExheW91dFVuaXQ6OmNsYW1wKGJvdHRvbSAtIHRvcCkpOwogfQogCiBG
bG9hdFBvaW50IFRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBQb2ludChjb25zdCBGbG9hdFBvaW50
JiBwKSBjb25zdApAQCAtNjcwLDkgKzY2OSw5IEBAIEludFJlY3QgVHJhbnNmb3JtYXRpb25NYXRy
aXg6Om1hcFJlY3QoY28KICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChtYXBSZWN0KEZsb2F0
UmVjdChyZWN0KSkpOwogfQogCi1GcmFjdGlvbmFsTGF5b3V0UmVjdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6bWFwUmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgcikgY29uc3QKK0xheW91
dFJlY3QgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcikg
Y29uc3QKIHsKLSAgICByZXR1cm4gZW5jbG9zaW5nRnJhY3Rpb25hbExheW91dFJlY3QobWFwUmVj
dChGbG9hdFJlY3QocikpKTsKKyAgICByZXR1cm4gZW5jbG9zaW5nTGF5b3V0UmVjdChtYXBSZWN0
KEZsb2F0UmVjdChyKSkpOwogfQogCiBGbG9hdFJlY3QgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1h
cFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNm
b3JtYXRpb25NYXRyaXguaAkocmV2aXNpb24gMTMzNTM5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5oCSh3b3JraW5n
IGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZm
aW5lVHJhbnNmb3JtOwogY2xhc3MgSW50UmVjdDsKLWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRSZWN0
OworY2xhc3MgTGF5b3V0UmVjdDsKIGNsYXNzIEZsb2F0UG9pbnQzRDsKIGNsYXNzIEZsb2F0UmVj
dDsKIGNsYXNzIEZsb2F0UXVhZDsKQEAgLTE1Myw3ICsxNTMsNyBAQCBwdWJsaWM6CiAgICAgLy8g
Um91bmRzIHRoZSByZXN1bHRpbmcgbWFwcGVkIHJlY3RhbmdsZSBvdXQuIFRoaXMgaXMgaGVscGZ1
bCBmb3IgYm91bmRpbmcKICAgICAvLyBib3ggY29tcHV0YXRpb25zIGJ1dCBtYXkgbm90IGJlIHdo
YXQgaXMgd2FudGVkIGluIG90aGVyIGNvbnRleHRzLgogICAgIEludFJlY3QgbWFwUmVjdChjb25z
dCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgRnJhY3Rpb25hbExheW91dFJlY3QgbWFwUmVjdChjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpIGNvbnN0OworICAgIExheW91dFJlY3QgbWFwUmVjdChj
b25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKICAgICAvLyBJZiB0aGUgbWF0cml4IGhhcyAzRCBj
b21wb25lbnRzLCB0aGUgeiBjb21wb25lbnQgb2YgdGhlIHJlc3VsdCBpcwogICAgIC8vIGRyb3Bw
ZWQsIGVmZmVjdGl2ZWx5IHByb2plY3RpbmcgdGhlIHF1YWQgaW50byB0aGUgej0wIHBsYW5lCkBA
IC0xNjksNyArMTY5LDcgQEAgcHVibGljOgogICAgIEZsb2F0UXVhZCBwcm9qZWN0UXVhZChjb25z
dCBGbG9hdFF1YWQmLCAgYm9vbCogY2xhbXBlZCA9IDApIGNvbnN0OwogICAgIC8vIFByb2plY3Rz
IHRoZSBmb3VyIGNvcm5lcnMgb2YgdGhlIHF1YWQgYW5kIHRha2VzIGEgYm91bmRpbmcgYm94LAog
ICAgIC8vIHdoaWxlIHNhbml0aXppbmcgdmFsdWVzIGNyZWF0ZWQgd2hlbiB0aGUgdyBjb21wb25l
bnQgaXMgbmVnYXRpdmUuCi0gICAgRnJhY3Rpb25hbExheW91dFJlY3QgY2xhbXBlZEJvdW5kc09m
UHJvamVjdGVkUXVhZChjb25zdCBGbG9hdFF1YWQmKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IGNs
YW1wZWRCb3VuZHNPZlByb2plY3RlZFF1YWQoY29uc3QgRmxvYXRRdWFkJikgY29uc3Q7CiAKICAg
ICBkb3VibGUgbTExKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXhbMF1bMF07IH0KICAgICB2b2lk
IHNldE0xMShkb3VibGUgZikgeyBtX21hdHJpeFswXVswXSA9IGY7IH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmgJKHJldmlzaW9uIDEzMzUzOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjEsNyArMjEsNyBAQAogI2lmbmRlZiBBdXRvVGFibGVMYXlvdXRfaAogI2RlZmluZSBB
dXRvVGFibGVMYXlvdXRfaAogCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJM
YXlvdXRVbml0LmgiCiAjaW5jbHVkZSAiTGVuZ3RoLmgiCiAjaW5jbHVkZSAiVGFibGVMYXlvdXQu
aCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvQ29sdW1uSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9D
b2x1bW5JbmZvLmgJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9Db2x1bW5JbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYg
Q29sdW1uSW5mb19oCiAjZGVmaW5lIENvbHVtbkluZm9faAogCi0jaW5jbHVkZSAiTGF5b3V0VHlw
ZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaAkocmV2aXNpb24g
MTMzNTM5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAKICNpbmNsdWRlICJFeGNs
dXNpb25TaGFwZS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkxheW91dFR5
cGVzSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKICNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CkBAIC03OCwxNCArNzgsMTQgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEFT
U0VSVChtX3NoYXBlKTsKICAgICAgICAgLy8gVXNlIGZyb21GbG9hdENlaWwoKSB0byBlbnN1cmUg
dGhhdCB0aGUgcmV0dXJuZWQgTGF5b3V0VW5pdCB2YWx1ZSBpcyB3aXRoaW4gdGhlIHNoYXBlJ3Mg
Ym91bmRzLgotICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQ6OmZyb21GbG9hdENl
aWwobV9zaGFwZS0+c2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS55KCkpOworICAgICAgICByZXR1
cm4gTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChtX3NoYXBlLT5zaGFwZUxvZ2ljYWxCb3VuZGlu
Z0JveCgpLnkoKSk7CiAgICAgfQogCiAgICAgaW5saW5lIExheW91dFVuaXQgc2hhcGVMb2dpY2Fs
Qm91bmRzTWF4WSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV9zaGFwZSk7CiAgICAg
ICAgIC8vIFVzZSBmcm9tRmxvYXRGbG9vcigpIHRvIGVuc3VyZSB0aGF0IHRoZSByZXR1cm5lZCBM
YXlvdXRVbml0IHZhbHVlIGlzIHdpdGhpbiB0aGUgc2hhcGUncyBib3VuZHMuCi0gICAgICAgIHJl
dHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Rmxvb3IobV9zaGFwZS0+c2hhcGVM
b2dpY2FsQm91bmRpbmdCb3goKS5tYXhZKCkpOworICAgICAgICByZXR1cm4gTGF5b3V0VW5pdDo6
ZnJvbUZsb2F0Rmxvb3IobV9zaGFwZS0+c2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS5tYXhZKCkp
OwogICAgIH0KIAogICAgIFJlbmRlckJsb2NrKiBtX2Jsb2NrOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgJKHJldmlzaW9uIDEzMzUz
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiwxMCArMzIsOSBAQAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5o
IgogI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
LSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXNJ
bmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlNWR0Zp
bHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuaAkocmV2aXNpb24gMTMzNTM5
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjEsNyArMjEsNyBAQAogI2lmbmRlZiBGaXhlZFRhYmxlTGF5b3V0X2gKICNk
ZWZpbmUgRml4ZWRUYWJsZUxheW91dF9oCiAKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2lu
Y2x1ZGUgIkxheW91dFVuaXQuaCIKICNpbmNsdWRlICJMZW5ndGguaCIKICNpbmNsdWRlICJUYWJs
ZUxheW91dC5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9HYXBSZWN0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9HYXBSZWN0cy5oCShyZXZpc2lvbiAxMzM1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvR2FwUmVjdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNyBAQAogI2lmbmRl
ZiBHYXBSZWN0c19oCiAjZGVmaW5lIEdhcFJlY3RzX2gKIAotI2luY2x1ZGUgIkxheW91dFR5cGVz
LmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAkocmV2aXNpb24gMTMz
NTM5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCi0jaW5jbHVkZSAi
TGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2lu
Y2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1
ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hp
dFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0hpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZS5jcHAJKHJldmlzaW9uIDEzMzUzOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlLmgiCiAKLSNpbmNsdWRlICJGcmFjdGlv
bmFsTGF5b3V0UmVjdC5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04MCw3ICs4MCw3IEBAIEZs
b2F0UXVhZCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU6Om1hcHAKICAgICByZXR1cm4gbV9hY2N1
bXVsYXRlZFRyYW5zZm9ybS5pbnZlcnNlKCkucHJvamVjdFF1YWQobV9sYXN0UGxhbmFyQXJlYSk7
CiB9CiAKLUZyYWN0aW9uYWxMYXlvdXRSZWN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZTo6Ym91
bmRzT2ZNYXBwZWRBcmVhKCkgY29uc3QKK0xheW91dFJlY3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0
YXRlOjpib3VuZHNPZk1hcHBlZEFyZWEoKSBjb25zdAogewogICAgIHJldHVybiBtX2FjY3VtdWxh
dGVkVHJhbnNmb3JtLmludmVyc2UoKS5jbGFtcGVkQm91bmRzT2ZQcm9qZWN0ZWRRdWFkKG1fbGFz
dFBsYW5hckFyZWEpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3Rp
bmdUcmFuc2Zvcm1TdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9IaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUuaAkocmV2aXNpb24gMTMzNTM5KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICBGbG9hdFBvaW50IG1hcHBlZFBvaW50
KCkgY29uc3Q7CiAgICAgRmxvYXRRdWFkIG1hcHBlZFF1YWQoKSBjb25zdDsKICAgICBGbG9hdFF1
YWQgbWFwcGVkQXJlYSgpIGNvbnN0OwotICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0IGJvdW5kc09m
TWFwcGVkQXJlYSgpIGNvbnN0OworICAgIExheW91dFJlY3QgYm91bmRzT2ZNYXBwZWRBcmVhKCkg
Y29uc3Q7CiAgICAgdm9pZCBmbGF0dGVuKCk7CiAKICAgICBGbG9hdFBvaW50IG1fbGFzdFBsYW5h
clBvaW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNw
cAkocmV2aXNpb24gMTMzNTM5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZs
b3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzcsOCArNjc3LDggQEAgdm9pZCBJbmxpbmVG
bG93Qm94OjpwbGFjZUJveGVzSW5CbG9ja0RpcgogCiAgICAgICAgICAgICAgICAgUmVuZGVyUnVi
eVJ1biogcnVieVJ1biA9IHRvUmVuZGVyUnVieVJ1bihjdXJyLT5yZW5kZXJlcigpKTsKICAgICAg
ICAgICAgICAgICBpZiAoUmVuZGVyUnVieUJhc2UqIHJ1YnlCYXNlID0gcnVieVJ1bi0+cnVieUJh
c2UoKSkgewotICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGJvdHRvbVJ1YnlCYXNlTGVh
ZGluZyA9IChjdXJyLT5sb2dpY2FsSGVpZ2h0KCkgLSBydWJ5QmFzZS0+bG9naWNhbEJvdHRvbSgp
KSArIHJ1YnlCYXNlLT5sb2dpY2FsSGVpZ2h0KCkgLSAocnVieUJhc2UtPmxhc3RSb290Qm94KCkg
PyBydWJ5QmFzZS0+bGFzdFJvb3RCb3goKS0+bGluZUJvdHRvbSgpIDogWkVST19MQVlPVVRfVU5J
VCk7Ci0gICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgdG9wUnVieUJhc2VMZWFkaW5nID0g
cnVieUJhc2UtPmxvZ2ljYWxUb3AoKSArIChydWJ5QmFzZS0+Zmlyc3RSb290Qm94KCkgPyBydWJ5
QmFzZS0+Zmlyc3RSb290Qm94KCktPmxpbmVUb3AoKSA6IFpFUk9fTEFZT1VUX1VOSVQpOworICAg
ICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGJvdHRvbVJ1YnlCYXNlTGVhZGluZyA9IChjdXJy
LT5sb2dpY2FsSGVpZ2h0KCkgLSBydWJ5QmFzZS0+bG9naWNhbEJvdHRvbSgpKSArIHJ1YnlCYXNl
LT5sb2dpY2FsSGVpZ2h0KCkgLSAocnVieUJhc2UtPmxhc3RSb290Qm94KCkgPyBydWJ5QmFzZS0+
bGFzdFJvb3RCb3goKS0+bGluZUJvdHRvbSgpIDogTGF5b3V0VW5pdCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgTGF5b3V0VW5pdCB0b3BSdWJ5QmFzZUxlYWRpbmcgPSBydWJ5QmFzZS0+bG9naWNh
bFRvcCgpICsgKHJ1YnlCYXNlLT5maXJzdFJvb3RCb3goKSA/IHJ1YnlCYXNlLT5maXJzdFJvb3RC
b3goKS0+bGluZVRvcCgpIDogTGF5b3V0VW5pdCgpKTsKICAgICAgICAgICAgICAgICAgICAgbmV3
TG9naWNhbFRvcCArPSAhcmVuZGVyZXIoKS0+c3R5bGUoKS0+aXNGbGlwcGVkTGluZXNXcml0aW5n
TW9kZSgpID8gdG9wUnVieUJhc2VMZWFkaW5nIDogYm90dG9tUnVieUJhc2VMZWFkaW5nOwogICAg
ICAgICAgICAgICAgICAgICBib3hIZWlnaHQgLT0gKHRvcFJ1YnlCYXNlTGVhZGluZyArIGJvdHRv
bVJ1YnlCYXNlTGVhZGluZyk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNzkxLDcgKzc5MSw3IEBA
IGlubGluZSB2b2lkIElubGluZUZsb3dCb3g6OmFkZEJvcmRlck91dHMKICAgICBpZiAoIXN0eWxl
LT5oYXNCb3JkZXJJbWFnZU91dHNldHMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRnJhY3Rp
b25hbExheW91dEJveEV4dGVudCBib3JkZXJPdXRzZXRzID0gc3R5bGUtPmJvcmRlckltYWdlT3V0
c2V0cygpOworICAgIExheW91dEJveEV4dGVudCBib3JkZXJPdXRzZXRzID0gc3R5bGUtPmJvcmRl
ckltYWdlT3V0c2V0cygpOwogCiAgICAgTGF5b3V0VW5pdCBib3JkZXJPdXRzZXRMb2dpY2FsVG9w
ID0gYm9yZGVyT3V0c2V0cy5sb2dpY2FsVG9wKHN0eWxlLT53cml0aW5nTW9kZSgpKTsKICAgICBM
YXlvdXRVbml0IGJvcmRlck91dHNldExvZ2ljYWxCb3R0b20gPSBib3JkZXJPdXRzZXRzLmxvZ2lj
YWxCb3R0b20oc3R5bGUtPndyaXRpbmdNb2RlKCkpOwpAQCAtODA2LDggKzgwNiw4IEBAIGlubGlu
ZSB2b2lkIElubGluZUZsb3dCb3g6OmFkZEJvcmRlck91dHMKICAgICBMYXlvdXRVbml0IGxvZ2lj
YWxUb3BWaXN1YWxPdmVyZmxvdyA9IG1pbihwaXhlbFNuYXBwZWRMb2dpY2FsVG9wKCkgLSBvdXRz
ZXRMb2dpY2FsVG9wLCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cueSgpKTsKICAgICBMYXlvdXRVbml0
IGxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdyA9IG1heChwaXhlbFNuYXBwZWRMb2dpY2FsQm90
dG9tKCkgKyBvdXRzZXRMb2dpY2FsQm90dG9tLCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cubWF4WSgp
KTsKIAotICAgIExheW91dFVuaXQgb3V0c2V0TG9naWNhbExlZnQgPSBpbmNsdWRlTG9naWNhbExl
ZnRFZGdlKCkgPyBib3JkZXJPdXRzZXRMb2dpY2FsTGVmdCA6IFpFUk9fTEFZT1VUX1VOSVQ7Ci0g
ICAgTGF5b3V0VW5pdCBvdXRzZXRMb2dpY2FsUmlnaHQgPSBpbmNsdWRlTG9naWNhbFJpZ2h0RWRn
ZSgpID8gYm9yZGVyT3V0c2V0TG9naWNhbFJpZ2h0IDogWkVST19MQVlPVVRfVU5JVDsKKyAgICBM
YXlvdXRVbml0IG91dHNldExvZ2ljYWxMZWZ0ID0gaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSgpID8g
Ym9yZGVyT3V0c2V0TG9naWNhbExlZnQgOiBMYXlvdXRVbml0KCk7CisgICAgTGF5b3V0VW5pdCBv
dXRzZXRMb2dpY2FsUmlnaHQgPSBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSgpID8gYm9yZGVyT3V0
c2V0TG9naWNhbFJpZ2h0IDogTGF5b3V0VW5pdCgpOwogCiAgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
TGVmdFZpc3VhbE92ZXJmbG93ID0gbWluKHBpeGVsU25hcHBlZExvZ2ljYWxMZWZ0KCkgLSBvdXRz
ZXRMb2dpY2FsTGVmdCwgbG9naWNhbFZpc3VhbE92ZXJmbG93LngoKSk7CiAgICAgTGF5b3V0VW5p
dCBsb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdyA9IG1heChwaXhlbFNuYXBwZWRMb2dpY2FsUmln
aHQoKSArIG91dHNldExvZ2ljYWxSaWdodCwgbG9naWNhbFZpc3VhbE92ZXJmbG93Lm1heFgoKSk7
CkBAIC0xMTQyLDggKzExNDIsOCBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50RmlsbExheWVy
KGNvbnN0CiAgICAgICAgICAgICBmb3IgKElubGluZUZsb3dCb3gqIGN1cnIgPSB0aGlzOyBjdXJy
OyBjdXJyID0gY3Vyci0+cHJldkxpbmVCb3goKSkKICAgICAgICAgICAgICAgICB0b3RhbExvZ2lj
YWxXaWR0aCArPSBjdXJyLT5sb2dpY2FsV2lkdGgoKTsKICAgICAgICAgfQotICAgICAgICBMYXlv
dXRVbml0IHN0cmlwWCA9IHJlY3QueCgpIC0gKGlzSG9yaXpvbnRhbCgpID8gbG9naWNhbE9mZnNl
dE9uTGluZSA6IFpFUk9fTEFZT1VUX1VOSVQpOwotICAgICAgICBMYXlvdXRVbml0IHN0cmlwWSA9
IHJlY3QueSgpIC0gKGlzSG9yaXpvbnRhbCgpID8gWkVST19MQVlPVVRfVU5JVCA6IGxvZ2ljYWxP
ZmZzZXRPbkxpbmUpOworICAgICAgICBMYXlvdXRVbml0IHN0cmlwWCA9IHJlY3QueCgpIC0gKGlz
SG9yaXpvbnRhbCgpID8gbG9naWNhbE9mZnNldE9uTGluZSA6IExheW91dFVuaXQoKSk7CisgICAg
ICAgIExheW91dFVuaXQgc3RyaXBZID0gcmVjdC55KCkgLSAoaXNIb3Jpem9udGFsKCkgPyBMYXlv
dXRVbml0KCkgOiBsb2dpY2FsT2Zmc2V0T25MaW5lKTsKICAgICAgICAgTGF5b3V0VW5pdCBzdHJp
cFdpZHRoID0gaXNIb3Jpem9udGFsKCkgPyB0b3RhbExvZ2ljYWxXaWR0aCA6IHN0YXRpY19jYXN0
PExheW91dFVuaXQ+KHdpZHRoKCkpOwogICAgICAgICBMYXlvdXRVbml0IHN0cmlwSGVpZ2h0ID0g
aXNIb3Jpem9udGFsKCkgPyBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PihoZWlnaHQoKSkgOiB0b3Rh
bExvZ2ljYWxXaWR0aDsKIApAQCAtMTI2OSw4ICsxMjY5LDggQEAgdm9pZCBJbmxpbmVGbG93Qm94
OjpwYWludEJveERlY29yYXRpb25zKAogICAgICAgICAgICAgICAgIExheW91dFVuaXQgdG90YWxM
b2dpY2FsV2lkdGggPSBsb2dpY2FsT2Zmc2V0T25MaW5lOwogICAgICAgICAgICAgICAgIGZvciAo
SW5saW5lRmxvd0JveCogY3VyciA9IHRoaXM7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0TGluZUJv
eCgpKQogICAgICAgICAgICAgICAgICAgICB0b3RhbExvZ2ljYWxXaWR0aCArPSBjdXJyLT5sb2dp
Y2FsV2lkdGgoKTsKLSAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHN0cmlwWCA9IGFkanVzdGVk
UGFpbnRvZmZzZXQueCgpIC0gKGlzSG9yaXpvbnRhbCgpID8gbG9naWNhbE9mZnNldE9uTGluZSA6
IFpFUk9fTEFZT1VUX1VOSVQpOwotICAgICAgICAgICAgICAgIExheW91dFVuaXQgc3RyaXBZID0g
YWRqdXN0ZWRQYWludG9mZnNldC55KCkgLSAoaXNIb3Jpem9udGFsKCkgPyBaRVJPX0xBWU9VVF9V
TklUIDogbG9naWNhbE9mZnNldE9uTGluZSk7CisgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBz
dHJpcFggPSBhZGp1c3RlZFBhaW50b2Zmc2V0LngoKSAtIChpc0hvcml6b250YWwoKSA/IGxvZ2lj
YWxPZmZzZXRPbkxpbmUgOiBMYXlvdXRVbml0KCkpOworICAgICAgICAgICAgICAgIExheW91dFVu
aXQgc3RyaXBZID0gYWRqdXN0ZWRQYWludG9mZnNldC55KCkgLSAoaXNIb3Jpem9udGFsKCkgPyBM
YXlvdXRVbml0KCkgOiBsb2dpY2FsT2Zmc2V0T25MaW5lKTsKICAgICAgICAgICAgICAgICBMYXlv
dXRVbml0IHN0cmlwV2lkdGggPSBpc0hvcml6b250YWwoKSA/IHRvdGFsTG9naWNhbFdpZHRoIDog
ZnJhbWVSZWN0LndpZHRoKCk7CiAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBzdHJpcEhlaWdo
dCA9IGlzSG9yaXpvbnRhbCgpID8gZnJhbWVSZWN0LmhlaWdodCgpIDogdG90YWxMb2dpY2FsV2lk
dGg7CiAKQEAgLTEzNDEsOCArMTM0MSw4IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGFpbnRNYXNr
KFBhaW50SW5mbyYKICAgICAgICAgTGF5b3V0VW5pdCB0b3RhbExvZ2ljYWxXaWR0aCA9IGxvZ2lj
YWxPZmZzZXRPbkxpbmU7CiAgICAgICAgIGZvciAoSW5saW5lRmxvd0JveCogY3VyciA9IHRoaXM7
IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0TGluZUJveCgpKQogICAgICAgICAgICAgdG90YWxMb2dp
Y2FsV2lkdGggKz0gY3Vyci0+bG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIExheW91dFVuaXQgc3Ry
aXBYID0gYWRqdXN0ZWRQYWludE9mZnNldC54KCkgLSAoaXNIb3Jpem9udGFsKCkgPyBsb2dpY2Fs
T2Zmc2V0T25MaW5lIDogWkVST19MQVlPVVRfVU5JVCk7Ci0gICAgICAgIExheW91dFVuaXQgc3Ry
aXBZID0gYWRqdXN0ZWRQYWludE9mZnNldC55KCkgLSAoaXNIb3Jpem9udGFsKCkgPyBaRVJPX0xB
WU9VVF9VTklUIDogbG9naWNhbE9mZnNldE9uTGluZSk7CisgICAgICAgIExheW91dFVuaXQgc3Ry
aXBYID0gYWRqdXN0ZWRQYWludE9mZnNldC54KCkgLSAoaXNIb3Jpem9udGFsKCkgPyBsb2dpY2Fs
T2Zmc2V0T25MaW5lIDogTGF5b3V0VW5pdCgpKTsKKyAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFkg
PSBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSAtIChpc0hvcml6b250YWwoKSA/IExheW91dFVuaXQo
KSA6IGxvZ2ljYWxPZmZzZXRPbkxpbmUpOwogICAgICAgICBMYXlvdXRVbml0IHN0cmlwV2lkdGgg
PSBpc0hvcml6b250YWwoKSA/IHRvdGFsTG9naWNhbFdpZHRoIDogZnJhbWVSZWN0LndpZHRoKCk7
CiAgICAgICAgIExheW91dFVuaXQgc3RyaXBIZWlnaHQgPSBpc0hvcml6b250YWwoKSA/IGZyYW1l
UmVjdC5oZWlnaHQoKSA6IHRvdGFsTG9naWNhbFdpZHRoOwogCkBAIC0xNDM5LDcgKzE0MzksNyBA
QCBMYXlvdXRVbml0IElubGluZUZsb3dCb3g6OmNvbXB1dGVPdmVyQW5uCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghcnVieVJ1bi0+c3R5
bGUoKS0+aXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgTGF5
b3V0VW5pdCB0b3BPZkZpcnN0UnVieVRleHRMaW5lID0gcnVieVRleHQtPmxvZ2ljYWxUb3AoKSAr
IChydWJ5VGV4dC0+Zmlyc3RSb290Qm94KCkgPyBydWJ5VGV4dC0+Zmlyc3RSb290Qm94KCktPmxp
bmVUb3AoKSA6IFpFUk9fTEFZT1VUX1VOSVQpOworICAgICAgICAgICAgICAgIExheW91dFVuaXQg
dG9wT2ZGaXJzdFJ1YnlUZXh0TGluZSA9IHJ1YnlUZXh0LT5sb2dpY2FsVG9wKCkgKyAocnVieVRl
eHQtPmZpcnN0Um9vdEJveCgpID8gcnVieVRleHQtPmZpcnN0Um9vdEJveCgpLT5saW5lVG9wKCkg
OiBMYXlvdXRVbml0KCkpOwogICAgICAgICAgICAgICAgIGlmICh0b3BPZkZpcnN0UnVieVRleHRM
aW5lID49IDApCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
IHRvcE9mRmlyc3RSdWJ5VGV4dExpbmUgKz0gY3Vyci0+bG9naWNhbFRvcCgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFJlcGFpbnRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFJlcGFpbnRlci5jcHAJKHJldmlzaW9uIDEz
MzUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRSZXBhaW50ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiTGF5b3V0UmVwYWludGVyLmgiCiAKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5j
bHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRSZXBhaW50ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0UmVwYWludGVyLmgJKHJldmlzaW9uIDEzMzUzOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRSZXBhaW50ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBMYXlvdXRSZXBhaW50ZXJfaAogI2RlZmlu
ZSBMYXlvdXRSZXBhaW50ZXJfaAogCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXNJbmxpbmVNZXRob2Rz
LmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5oCShyZXZpc2lvbiAxMzM1Mzkp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBMYXlvdXRTdGF0ZV9oCiAKICNpbmNsdWRlICJD
b2x1bW5JbmZvLmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRS
ZWN0LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFR5cGVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFR5cGVzLmgJKHJldmlz
aW9uIDEzMzUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBUaGVzZSB0eXBlZGVmcyBhcmUgYmVpbmcg
dXNlZCB0byBhYnN0cmFjdCBsYXlvdXQgYW5kIGhpdCB0ZXN0aW5nIG9mZgotLy8gb2YgaW50ZWdl
cnMgYW5kIGV2ZW50dWFsbHkgcmVwbGFjZSB0aGVtIHdpdGggZmxvYXRzLiBPbmNlIHRoaXMgdHJh
bnNpdGlvbgotLy8gaXMgY29tcGxldGUsIHRoZXNlIHR5cGVzIHdpbGwgYmUgcmVtb3ZlZC4gUHJv
Z3Jlc3MgY2FuIGJlIHRyYWNrZWQgYXQKLS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02MDMxOAotCi0jaWZuZGVmIExheW91dFR5cGVzX2gKLSNkZWZpbmUgTGF5b3V0
VHlwZXNfaAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRC
b3hFeHRlbnQ7Ci1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0UG9pbnQ7Ci1jbGFzcyBGcmFjdGlvbmFs
TGF5b3V0UmVjdDsKLWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRTaXplOwotY2xhc3MgRnJhY3Rpb25h
bExheW91dFVuaXQ7Ci0KLXR5cGVkZWYgRnJhY3Rpb25hbExheW91dEJveEV4dGVudCBMYXlvdXRC
b3hFeHRlbnQ7Ci10eXBlZGVmIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBMYXlvdXRQb2ludDsKLXR5
cGVkZWYgRnJhY3Rpb25hbExheW91dFJlY3QgTGF5b3V0UmVjdDsKLXR5cGVkZWYgRnJhY3Rpb25h
bExheW91dFNpemUgTGF5b3V0U2l6ZTsKLXR5cGVkZWYgRnJhY3Rpb25hbExheW91dFVuaXQgTGF5
b3V0VW5pdDsKLQotI2RlZmluZSBNQVhfTEFZT1VUX1VOSVQgTGF5b3V0VW5pdDo6bWF4KCkKLSNk
ZWZpbmUgTUlOX0xBWU9VVF9VTklUIExheW91dFVuaXQ6Om1pbigpCi0jZGVmaW5lIFpFUk9fTEFZ
T1VUX1VOSVQgTGF5b3V0VW5pdCgwKQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBMYXlvdXRUeXBlc19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0
VHlwZXNJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0xheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzM1MzkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIExheW91dFR5cGVzSW5saW5lTWV0aG9kc19o
Ci0jZGVmaW5lIExheW91dFR5cGVzSW5saW5lTWV0aG9kc19oCi0KLSNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmgiCi0jaW5jbHVkZSAi
RnJhY3Rpb25hbExheW91dFJlY3QuaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0VW5pdC5o
IgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgotCi0jaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1pbmxpbmUg
RnJhY3Rpb25hbExheW91dFJlY3QgZW5jbG9zaW5nTGF5b3V0UmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi17Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QocmVjdCk7Ci19Ci0KLWlubGlu
ZSBMYXlvdXRTaXplIHJvdW5kZWRMYXlvdXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgcykKLXsKLSNp
ZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6
ZShzKTsKLSNlbHNlCi0gICAgcmV0dXJuIHJvdW5kZWRJbnRTaXplKHMpOwotI2VuZGlmCi19Ci0K
LWlubGluZSBJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3QoTGF5b3V0VW5pdCBsZWZ0LCBMYXlv
dXRVbml0IHRvcCwgTGF5b3V0VW5pdCB3aWR0aCwgTGF5b3V0VW5pdCBoZWlnaHQpCi17Ci0gICAg
cmV0dXJuIEludFJlY3QobGVmdC5yb3VuZCgpLCB0b3Aucm91bmQoKSwgc25hcFNpemVUb1BpeGVs
KHdpZHRoLCBsZWZ0KSwgc25hcFNpemVUb1BpeGVsKGhlaWdodCwgdG9wKSk7Ci19Ci0KLWlubGlu
ZSBJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3RGcm9tRWRnZXMoTGF5b3V0VW5pdCBsZWZ0LCBM
YXlvdXRVbml0IHRvcCwgTGF5b3V0VW5pdCByaWdodCwgTGF5b3V0VW5pdCBib3R0b20pCi17Ci0g
ICAgcmV0dXJuIEludFJlY3QobGVmdC5yb3VuZCgpLCB0b3Aucm91bmQoKSwgc25hcFNpemVUb1Bp
eGVsKHJpZ2h0IC0gbGVmdCwgbGVmdCksIHNuYXBTaXplVG9QaXhlbChib3R0b20gLSB0b3AsIHRv
cCkpOwotfQotCi1pbmxpbmUgTGF5b3V0UG9pbnQgcm91bmRlZExheW91dFBvaW50KGNvbnN0IEZs
b2F0UG9pbnQmIHApCi17Ci0jaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFBvaW50KHApOwotI2Vsc2UKLSAgICByZXR1cm4gcm91bmRlZEludFBv
aW50KHApOwotI2VuZGlmCi19Ci0KLWlubGluZSBMYXlvdXRQb2ludCBmbG9vcmVkTGF5b3V0UG9p
bnQoY29uc3QgRmxvYXRQb2ludCYgcCkKLXsKLSAgICByZXR1cm4gZmxvb3JlZEZyYWN0aW9uYWxM
YXlvdXRQb2ludChwKTsKLX0KLQotaW5saW5lIExheW91dFBvaW50IGZsb29yZWRMYXlvdXRQb2lu
dChjb25zdCBGbG9hdFNpemUmIHMpCi17Ci0gICAgcmV0dXJuIGZsb29yZWRMYXlvdXRQb2ludChG
bG9hdFBvaW50KHMpKTsKLX0KLQotaW5saW5lIGludCByb3VuZFRvSW50KExheW91dFVuaXQgdmFs
dWUpCi17Ci0gICAgcmV0dXJuIHZhbHVlLnJvdW5kKCk7Ci19Ci0KLWlubGluZSBpbnQgZmxvb3JU
b0ludChMYXlvdXRVbml0IHZhbHVlKQotewotICAgIHJldHVybiB2YWx1ZS5mbG9vcigpOwotfQot
Ci1pbmxpbmUgTGF5b3V0VW5pdCByb3VuZGVkTGF5b3V0VW5pdChmbG9hdCB2YWx1ZSkKLXsKLSNp
ZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5p
dDo6ZnJvbUZsb2F0Um91bmQodmFsdWUpOwotI2Vsc2UKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50Pihscm91bmRmKHZhbHVlKSk7Ci0jZW5kaWYKLX0KLQotaW5saW5lIExheW91dFVuaXQgY2Vp
bGVkTGF5b3V0VW5pdChmbG9hdCB2YWx1ZSkKLXsKLSNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VU
KQotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbCh2YWx1ZSk7
Ci0jZWxzZQotICAgIHJldHVybiBjZWlsZih2YWx1ZSk7Ci0jZW5kaWYKLX0KLQotaW5saW5lIExh
eW91dFVuaXQgYWJzb2x1dGVWYWx1ZShjb25zdCBMYXlvdXRVbml0JiB2YWx1ZSkKLXsKLSAgICBy
ZXR1cm4gdmFsdWUuYWJzKCk7Ci19Ci0KLWlubGluZSBMYXlvdXRTaXplIHRvTGF5b3V0U2l6ZShj
b25zdCBMYXlvdXRQb2ludCYgcCkKLXsKLSAgICByZXR1cm4gTGF5b3V0U2l6ZShwLngoKSwgcC55
KCkpOwotfQotCi1pbmxpbmUgTGF5b3V0UG9pbnQgdG9MYXlvdXRQb2ludChjb25zdCBMYXlvdXRT
aXplJiBwKQotewotICAgIHJldHVybiBMYXlvdXRQb2ludChwLndpZHRoKCksIHAuaGVpZ2h0KCkp
OwotfQotCi1pbmxpbmUgTGF5b3V0VW5pdCBsYXlvdXRNb2QoY29uc3QgTGF5b3V0VW5pdCYgbnVt
ZXJhdG9yLCBjb25zdCBMYXlvdXRVbml0JiBkZW5vbWluYXRvcikKLXsKLSAgICByZXR1cm4gbnVt
ZXJhdG9yICUgZGVub21pbmF0b3I7Ci19Ci0KLWlubGluZSBJbnRTaXplIHBpeGVsU25hcHBlZElu
dFNpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHMsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRQb2ludCYgcCkKLXsKLSAgICByZXR1cm4gSW50U2l6ZShzbmFwU2l6ZVRvUGl4ZWwocy53aWR0
aCgpLCBwLngoKSksIHNuYXBTaXplVG9QaXhlbChzLmhlaWdodCgpLCBwLnkoKSkpOwotfQotCi1p
bmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0KExheW91dFBvaW50IGxvY2F0aW9uLCBM
YXlvdXRTaXplIHNpemUpCi17Ci0gICAgcmV0dXJuIEludFJlY3Qocm91bmRlZEludFBvaW50KGxv
Y2F0aW9uKSwgcGl4ZWxTbmFwcGVkSW50U2l6ZShzaXplLCBsb2NhdGlvbikpOwotfQotCi1pbmxp
bmUgYm9vbCBpc0ludGVnZXJWYWx1ZShjb25zdCBMYXlvdXRVbml0IHZhbHVlKQotewotICAgIHJl
dHVybiB2YWx1ZS50b0ludCgpID09IHZhbHVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBMYXlvdXRUeXBlc0lubGluZU1ldGhvZHNfaApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1BhaW50SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9QYWludEluZm8uaAkocmV2aXNpb24gMTMzNTM5KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1BhaW50SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBA
CiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0j
aW5jbHVkZSAiTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVj
dC5oIgogI2luY2x1ZGUgIlBhaW50UGhhc2UuaCIKICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcAkocmV2aXNpb24gMTMzNTM5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDggKzE4MSw4IEBAIFJlbmRlckJs
b2NrOjpNYXJnaW5JbmZvOjpNYXJnaW5JbmZvKFJlbmQKICAgICBtX3F1aXJrQ29udGFpbmVyID0g
YmxvY2stPmlzVGFibGVDZWxsKCkgfHwgYmxvY2stPmlzQm9keSgpIHx8IGJsb2NrU3R5bGUtPm1h
cmdpbkJlZm9yZUNvbGxhcHNlKCkgPT0gTURJU0NBUkQKICAgICAgICAgfHwgYmxvY2tTdHlsZS0+
bWFyZ2luQWZ0ZXJDb2xsYXBzZSgpID09IE1ESVNDQVJEOwogCi0gICAgbV9wb3NpdGl2ZU1hcmdp
biA9IG1fY2FuQ29sbGFwc2VNYXJnaW5CZWZvcmVXaXRoQ2hpbGRyZW4gPyBibG9jay0+bWF4UG9z
aXRpdmVNYXJnaW5CZWZvcmUoKSA6IFpFUk9fTEFZT1VUX1VOSVQ7Ci0gICAgbV9uZWdhdGl2ZU1h
cmdpbiA9IG1fY2FuQ29sbGFwc2VNYXJnaW5CZWZvcmVXaXRoQ2hpbGRyZW4gPyBibG9jay0+bWF4
TmVnYXRpdmVNYXJnaW5CZWZvcmUoKSA6IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgbV9wb3NpdGl2
ZU1hcmdpbiA9IG1fY2FuQ29sbGFwc2VNYXJnaW5CZWZvcmVXaXRoQ2hpbGRyZW4gPyBibG9jay0+
bWF4UG9zaXRpdmVNYXJnaW5CZWZvcmUoKSA6IExheW91dFVuaXQoKTsKKyAgICBtX25lZ2F0aXZl
TWFyZ2luID0gbV9jYW5Db2xsYXBzZU1hcmdpbkJlZm9yZVdpdGhDaGlsZHJlbiA/IGJsb2NrLT5t
YXhOZWdhdGl2ZU1hcmdpbkJlZm9yZSgpIDogTGF5b3V0VW5pdCgpOwogfQogCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMjkxLDcgKzEyOTEs
NyBAQCBib29sIFJlbmRlckJsb2NrOjppc1NlbGZDb2xsYXBzaW5nQmxvY2soCiAgICAgLy8gKGMp
IGhhdmUgYm9yZGVyL3BhZGRpbmcsCiAgICAgLy8gKGQpIGhhdmUgYSBtaW4taGVpZ2h0CiAgICAg
Ly8gKGUpIGhhdmUgc3BlY2lmaWVkIHRoYXQgb25lIG9mIG91ciBtYXJnaW5zIGNhbid0IGNvbGxh
cHNlIHVzaW5nIGEgQ1NTIGV4dGVuc2lvbgotICAgIGlmIChsb2dpY2FsSGVpZ2h0KCkgPiBaRVJP
X0xBWU9VVF9VTklUCisgICAgaWYgKGxvZ2ljYWxIZWlnaHQoKSA+IExheW91dFVuaXQoKQogICAg
ICAgICB8fCBpc1RhYmxlKCkgfHwgYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKQogICAg
ICAgICB8fCBzdHlsZSgpLT5sb2dpY2FsTWluSGVpZ2h0KCkuaXNQb3NpdGl2ZSgpCiAgICAgICAg
IHx8IHN0eWxlKCktPm1hcmdpbkJlZm9yZUNvbGxhcHNlKCkgPT0gTVNFUEFSQVRFIHx8IHN0eWxl
KCktPm1hcmdpbkFmdGVyQ29sbGFwc2UoKSA9PSBNU0VQQVJBVEUpCkBAIC0xNDIzLDcgKzE0MjMs
NyBAQCB2b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVSZWdpb25zQW5kRXhjbHVzCiAKICAgICAvLyBD
b21wdXRlIHRoZSBtYXhpbXVtIGxvZ2ljYWwgaGVpZ2h0IGNvbnRlbnQgbWF5IGNhdXNlIHRoaXMg
YmxvY2sgdG8gZXhwYW5kIHRvCiAgICAgLy8gRklYTUU6IFRoZXNlIHNob3VsZCBldmVudHVhbGx5
IHVzZSB0aGUgY29uc3QgY29tcHV0ZUxvZ2ljYWxIZWlnaHQgcmF0aGVyIHRoYW4gdXBkYXRlTG9n
aWNhbEhlaWdodAotICAgIHNldExvZ2ljYWxIZWlnaHQoTUFYX0xBWU9VVF9VTklUIC8gMik7Cisg
ICAgc2V0TG9naWNhbEhlaWdodChMYXlvdXRVbml0OjptYXgoKSAvIDIpOwogICAgIHVwZGF0ZUxv
Z2ljYWxIZWlnaHQoKTsKIAogI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykKQEAgLTE0NDQsNyAr
MTQ0NCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVFeGNsdXNpb25TaGFwZVMKICAgICBF
eGNsdXNpb25TaGFwZUluc2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyA9IHRoaXMt
PmV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOwogICAgIGlmIChleGNsdXNpb25TaGFwZUluc2lk
ZUluZm8pIHsKICAgICAgICAgYm9vbCBwZXJjZW50YWdlTG9naWNhbEhlaWdodFJlc29sdmFibGUg
PSBwZXJjZW50YWdlTG9naWNhbEhlaWdodElzUmVzb2x2YWJsZUZyb21CbG9jayh0aGlzLCBmYWxz
ZSk7Ci0gICAgICAgIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+Y29tcHV0ZVNoYXBlU2l6ZShs
b2dpY2FsV2lkdGgoKSwgcGVyY2VudGFnZUxvZ2ljYWxIZWlnaHRSZXNvbHZhYmxlID8gbG9naWNh
bEhlaWdodCgpIDogWkVST19MQVlPVVRfVU5JVCk7CisgICAgICAgIGV4Y2x1c2lvblNoYXBlSW5z
aWRlSW5mby0+Y29tcHV0ZVNoYXBlU2l6ZShsb2dpY2FsV2lkdGgoKSwgcGVyY2VudGFnZUxvZ2lj
YWxIZWlnaHRSZXNvbHZhYmxlID8gbG9naWNhbEhlaWdodCgpIDogTGF5b3V0VW5pdCgpKTsKICAg
ICB9CiB9CiAjZW5kaWYKQEAgLTE0NzUsMTEgKzE0NzUsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6
Y2hlY2tGb3JQYWdpbmF0aW9uTG9naQogICAgICAgICAgICAgLy8gYXZvaWQgZG9pbmcgdHdvIGxh
eW91dCBwYXNzZXMuCiAgICAgICAgICAgICB1cGRhdGVMb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAg
ICAgICBMYXlvdXRVbml0IGNvbHVtbkhlaWdodCA9IGNvbnRlbnRMb2dpY2FsSGVpZ2h0KCk7Ci0g
ICAgICAgICAgICBpZiAoY29sdW1uSGVpZ2h0ID4gWkVST19MQVlPVVRfVU5JVCkgeworICAgICAg
ICAgICAgaWYgKGNvbHVtbkhlaWdodCA+IExheW91dFVuaXQoKSkgewogICAgICAgICAgICAgICAg
IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gY29sdW1uSGVpZ2h0OwogICAgICAgICAgICAgICAgIGhhc1Nw
ZWNpZmllZFBhZ2VMb2dpY2FsSGVpZ2h0ID0gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHNldExvZ2ljYWxIZWlnaHQoWkVST19MQVlPVVRfVU5JVCk7CisgICAgICAgICAgICBzZXRM
b2dpY2FsSGVpZ2h0KExheW91dFVuaXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGNvbElu
Zm8tPmNvbHVtbkhlaWdodCgpICE9IHBhZ2VMb2dpY2FsSGVpZ2h0ICYmIGV2ZXJIYWRMYXlvdXQo
KSkgewogICAgICAgICAgICAgY29sSW5mby0+c2V0Q29sdW1uSGVpZ2h0KHBhZ2VMb2dpY2FsSGVp
Z2h0KTsKQEAgLTE1MTYsNyArMTUxNiw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2Nr
KGJvb2wgcmVsYXkKICAgICBjbGVhckZsb2F0cygpOwogCiAgICAgTGF5b3V0VW5pdCBwcmV2aW91
c0hlaWdodCA9IGxvZ2ljYWxIZWlnaHQoKTsKLSAgICBzZXRMb2dpY2FsSGVpZ2h0KFpFUk9fTEFZ
T1VUX1VOSVQpOworICAgIHNldExvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCgpKTsKIAogICAgIGJv
b2wgcGFnZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkID0gZmFsc2U7CiAgICAgYm9vbCBoYXNTcGVjaWZp
ZWRQYWdlTG9naWNhbEhlaWdodCA9IGZhbHNlOwpAQCAtMTU1Miw5ICsxNTUyLDkgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxheQogICAgICAgICBzZXRQYWdpbmF0aW9u
U3RydXQoMCk7CiAgICAgfQogCi0gICAgTGF5b3V0VW5pdCByZXBhaW50TG9naWNhbFRvcCA9IFpF
Uk9fTEFZT1VUX1VOSVQ7Ci0gICAgTGF5b3V0VW5pdCByZXBhaW50TG9naWNhbEJvdHRvbSA9IFpF
Uk9fTEFZT1VUX1VOSVQ7Ci0gICAgTGF5b3V0VW5pdCBtYXhGbG9hdExvZ2ljYWxCb3R0b20gPSBa
RVJPX0xBWU9VVF9VTklUOworICAgIExheW91dFVuaXQgcmVwYWludExvZ2ljYWxUb3AgPSBMYXlv
dXRVbml0KCk7CisgICAgTGF5b3V0VW5pdCByZXBhaW50TG9naWNhbEJvdHRvbSA9IExheW91dFVu
aXQoKTsKKyAgICBMYXlvdXRVbml0IG1heEZsb2F0TG9naWNhbEJvdHRvbSA9IExheW91dFVuaXQo
KTsKICAgICBpZiAoIWZpcnN0Q2hpbGQoKSAmJiAhaXNBbm9ueW1vdXNCbG9jaygpKQogICAgICAg
ICBzZXRDaGlsZHJlbklubGluZSh0cnVlKTsKICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkKQEAg
LTE2OTEsOSArMTY5MSw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVPdmVyZmxvdyhMYXlv
dXQKICAgICAgICAgTGF5b3V0UmVjdCBjbGllbnRSZWN0KGNsaWVudEJveFJlY3QoKSk7CiAgICAg
ICAgIExheW91dFJlY3QgcmVjdFRvQXBwbHk7CiAgICAgICAgIGlmIChpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpKQotICAgICAgICAgICAgcmVjdFRvQXBwbHkgPSBMYXlvdXRSZWN0KGNsaWVudFJl
Y3QueCgpLCBjbGllbnRSZWN0LnkoKSwgMSwgbWF4KFpFUk9fTEFZT1VUX1VOSVQsIG9sZENsaWVu
dEFmdGVyRWRnZSAtIGNsaWVudFJlY3QueSgpKSk7CisgICAgICAgICAgICByZWN0VG9BcHBseSA9
IExheW91dFJlY3QoY2xpZW50UmVjdC54KCksIGNsaWVudFJlY3QueSgpLCAxLCBtYXgoTGF5b3V0
VW5pdCgpLCBvbGRDbGllbnRBZnRlckVkZ2UgLSBjbGllbnRSZWN0LnkoKSkpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICByZWN0VG9BcHBseSA9IExheW91dFJlY3QoY2xpZW50UmVjdC54KCks
IGNsaWVudFJlY3QueSgpLCBtYXgoWkVST19MQVlPVVRfVU5JVCwgb2xkQ2xpZW50QWZ0ZXJFZGdl
IC0gY2xpZW50UmVjdC54KCkpLCAxKTsKKyAgICAgICAgICAgIHJlY3RUb0FwcGx5ID0gTGF5b3V0
UmVjdChjbGllbnRSZWN0LngoKSwgY2xpZW50UmVjdC55KCksIG1heChMYXlvdXRVbml0KCksIG9s
ZENsaWVudEFmdGVyRWRnZSAtIGNsaWVudFJlY3QueCgpKSwgMSk7CiAgICAgICAgIGFkZExheW91
dE92ZXJmbG93KHJlY3RUb0FwcGx5KTsKICAgICB9CiAgICAgICAgIApAQCAtMTgwNiw3ICsxODA2
LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0RmxvYXRpbmdCbG9jayhjbwogICAgIC8vIGZv
ciBieSBzaW1wbHkgY2FsbGluZyBjYW5Db2xsYXBzZVdpdGhNYXJnaW5CZWZvcmUuICBTZWUKICAg
ICAvLyBodHRwOi8vd3d3LmhpeGllLmNoL3Rlc3RzL2FkaG9jL2Nzcy9ib3gvYmxvY2svbWFyZ2lu
LWNvbGxhcHNlLzA0Ni5odG1sIGZvcgogICAgIC8vIGFuIGV4YW1wbGUgb2YgdGhpcyBzY2VuYXJp
by4KLSAgICBMYXlvdXRVbml0IG1hcmdpbk9mZnNldCA9IG1hcmdpbkluZm8uY2FuQ29sbGFwc2VX
aXRoTWFyZ2luQmVmb3JlKCkgPyBaRVJPX0xBWU9VVF9VTklUIDogbWFyZ2luSW5mby5tYXJnaW4o
KTsKKyAgICBMYXlvdXRVbml0IG1hcmdpbk9mZnNldCA9IG1hcmdpbkluZm8uY2FuQ29sbGFwc2VX
aXRoTWFyZ2luQmVmb3JlKCkgPyBMYXlvdXRVbml0KCkgOiBtYXJnaW5JbmZvLm1hcmdpbigpOwog
ICAgIHNldExvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCgpICsgbWFyZ2luT2Zmc2V0KTsKICAg
ICBwb3NpdGlvbk5ld0Zsb2F0cygpOwogICAgIHNldExvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdo
dCgpIC0gbWFyZ2luT2Zmc2V0KTsKQEAgLTIyMDYsOCArMjIwNiw4IEBAIExheW91dFVuaXQgUmVu
ZGVyQmxvY2s6OmVzdGltYXRlTG9naWNhbFQKICAgICAvLyByZWxheW91dCBpZiB0aGVyZSBhcmUg
aW50cnVkaW5nIGZsb2F0cy4KICAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3BFc3RpbWF0ZSA9IGxv
Z2ljYWxIZWlnaHQoKTsKICAgICBpZiAoIW1hcmdpbkluZm8uY2FuQ29sbGFwc2VXaXRoTWFyZ2lu
QmVmb3JlKCkpIHsKLSAgICAgICAgTGF5b3V0VW5pdCBwb3NpdGl2ZU1hcmdpbkJlZm9yZSA9IFpF
Uk9fTEFZT1VUX1VOSVQ7Ci0gICAgICAgIExheW91dFVuaXQgbmVnYXRpdmVNYXJnaW5CZWZvcmUg
PSBaRVJPX0xBWU9VVF9VTklUOworICAgICAgICBMYXlvdXRVbml0IHBvc2l0aXZlTWFyZ2luQmVm
b3JlID0gTGF5b3V0VW5pdCgpOworICAgICAgICBMYXlvdXRVbml0IG5lZ2F0aXZlTWFyZ2luQmVm
b3JlID0gTGF5b3V0VW5pdCgpOwogICAgICAgICBpZiAoY2hpbGQtPnNlbGZOZWVkc0xheW91dCgp
KSB7CiAgICAgICAgICAgICAvLyBUcnkgdG8gZG8gYSBiYXNpYyBlc3RpbWF0aW9uIG9mIGhvdyB0
aGUgY29sbGFwc2UgaXMgZ29pbmcgdG8gZ28uCiAgICAgICAgICAgICBtYXJnaW5CZWZvcmVFc3Rp
bWF0ZUZvckNoaWxkKGNoaWxkLCBwb3NpdGl2ZU1hcmdpbkJlZm9yZSwgbmVnYXRpdmVNYXJnaW5C
ZWZvcmUpOwpAQCAtMjc5Niw5ICsyNzk2LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb2x1
bW5SdWxlcyhQYWludAogCiAgICAgaWYgKGNvbEluZm8tPnByb2dyZXNzaW9uQXhpcygpID09IENv
bHVtbkluZm86OklubGluZUF4aXMpIHsKICAgICAgICAgYm9vbCBsZWZ0VG9SaWdodCA9IHN0eWxl
KCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSBeIGNvbEluZm8tPnByb2dyZXNzaW9uSXNSZXZl
cnNlZCgpOwotICAgICAgICBMYXlvdXRVbml0IGN1cnJMb2dpY2FsTGVmdE9mZnNldCA9IGxlZnRU
b1JpZ2h0ID8gWkVST19MQVlPVVRfVU5JVCA6IGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICAg
ICAgTGF5b3V0VW5pdCBjdXJyTG9naWNhbExlZnRPZmZzZXQgPSBsZWZ0VG9SaWdodCA/IExheW91
dFVuaXQoKSA6IGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKICAgICAgICAgTGF5b3V0VW5pdCBydWxl
QWRkID0gbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KCk7Ci0gICAgICAgIExheW91dFVuaXQg
cnVsZUxvZ2ljYWxMZWZ0ID0gbGVmdFRvUmlnaHQgPyBaRVJPX0xBWU9VVF9VTklUIDogY29udGVu
dExvZ2ljYWxXaWR0aCgpOworICAgICAgICBMYXlvdXRVbml0IHJ1bGVMb2dpY2FsTGVmdCA9IGxl
ZnRUb1JpZ2h0ID8gTGF5b3V0VW5pdCgpIDogY29udGVudExvZ2ljYWxXaWR0aCgpOwogICAgICAg
ICBMYXlvdXRVbml0IGlubGluZURpcmVjdGlvblNpemUgPSBjb2xJbmZvLT5kZXNpcmVkQ29sdW1u
V2lkdGgoKTsKICAgICAgICAgQm94U2lkZSBib3hTaWRlID0gaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKQogICAgICAgICAgICAgPyBsZWZ0VG9SaWdodCA/IEJTTGVmdCA6IEJTUmlnaHQKQEAgLTI5
ODgsNyArMjk4OCw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBhaW50Q2hpbGQoUmVuZGVyQm94Kgog
ICAgIGlmIChjaGVja0FmdGVyQWx3YXlzCiAgICAgICAgICYmIChhYnNvbHV0ZUNoaWxkWSArIGNo
aWxkLT5oZWlnaHQoKSkgPiBwYWludEluZm8ucmVjdC55KCkKICAgICAgICAgJiYgKGFic29sdXRl
Q2hpbGRZICsgY2hpbGQtPmhlaWdodCgpKSA8IHBhaW50SW5mby5yZWN0Lm1heFkoKSkgewotICAg
ICAgICB2aWV3KCktPnNldEJlc3RUcnVuY2F0ZWRBdChhYnNvbHV0ZUNoaWxkWSArIGNoaWxkLT5o
ZWlnaHQoKSArIG1heChaRVJPX0xBWU9VVF9VTklULCBjaGlsZC0+Y29sbGFwc2VkTWFyZ2luQWZ0
ZXIoKSksIHRoaXMsIHRydWUpOworICAgICAgICB2aWV3KCktPnNldEJlc3RUcnVuY2F0ZWRBdChh
YnNvbHV0ZUNoaWxkWSArIGNoaWxkLT5oZWlnaHQoKSArIG1heChMYXlvdXRVbml0KCksIGNoaWxk
LT5jb2xsYXBzZWRNYXJnaW5BZnRlcigpKSwgdGhpcywgdHJ1ZSk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNTE0LDE0ICszNTE0LDE0IEBAIExh
eW91dFJlY3QgUmVuZGVyQmxvY2s6OmJsb2NrU2VsZWN0aW9uR2EKIHsKICAgICBMYXlvdXRVbml0
IGxvZ2ljYWxUb3AgPSBsYXN0TG9naWNhbFRvcDsKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWln
aHQgPSBibG9ja0RpcmVjdGlvbk9mZnNldChyb290QmxvY2ssIG9mZnNldEZyb21Sb290QmxvY2sp
ICsgbG9naWNhbEJvdHRvbSAtIGxvZ2ljYWxUb3A7Ci0gICAgaWYgKGxvZ2ljYWxIZWlnaHQgPD0g
WkVST19MQVlPVVRfVU5JVCkKKyAgICBpZiAobG9naWNhbEhlaWdodCA8PSBMYXlvdXRVbml0KCkp
CiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKICAgICAvLyBHZXQgdGhlIHNlbGVjdGlv
biBvZmZzZXRzIGZvciB0aGUgYm90dG9tIG9mIHRoZSBnYXAKICAgICBMYXlvdXRVbml0IGxvZ2lj
YWxMZWZ0ID0gbWF4KGxhc3RMb2dpY2FsTGVmdCwgbG9naWNhbExlZnRTZWxlY3Rpb25PZmZzZXQo
cm9vdEJsb2NrLCBsb2dpY2FsQm90dG9tKSk7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQg
PSBtaW4obGFzdExvZ2ljYWxSaWdodCwgbG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RC
bG9jaywgbG9naWNhbEJvdHRvbSkpOwogICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRoID0gbG9n
aWNhbFJpZ2h0IC0gbG9naWNhbExlZnQ7Ci0gICAgaWYgKGxvZ2ljYWxXaWR0aCA8PSBaRVJPX0xB
WU9VVF9VTklUKQorICAgIGlmIChsb2dpY2FsV2lkdGggPD0gTGF5b3V0VW5pdCgpKQogICAgICAg
ICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCiAgICAgTGF5b3V0UmVjdCBnYXBSZWN0ID0gcm9vdEJs
b2NrLT5sb2dpY2FsUmVjdFRvUGh5c2ljYWxSZWN0KHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24s
IExheW91dFJlY3QobG9naWNhbExlZnQsIGxvZ2ljYWxUb3AsIGxvZ2ljYWxXaWR0aCwgbG9naWNh
bEhlaWdodCkpOwpAQCAtMzUzNyw3ICszNTM3LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJCbG9jazo6
bG9naWNhbExlZnRTZWxlYwogICAgIExheW91dFVuaXQgcm9vdEJsb2NrTG9naWNhbExlZnQgPSBt
YXgobG9naWNhbExlZnRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBsb2dpY2FsVG9wKSwgbG9n
aWNhbExlZnRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBsb2dpY2FsVG9wICsgbG9naWNhbEhl
aWdodCkpOwogICAgIExheW91dFVuaXQgcm9vdEJsb2NrTG9naWNhbFJpZ2h0ID0gbWluKGlubGlu
ZURpcmVjdGlvbk9mZnNldChyb290QmxvY2ssIG9mZnNldEZyb21Sb290QmxvY2spICsgZmxvb3JU
b0ludChsb2dpY2FsTGVmdCksIG1pbihsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQocm9vdEJs
b2NrLCBsb2dpY2FsVG9wKSwgbG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywg
bG9naWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQpKSk7CiAgICAgTGF5b3V0VW5pdCByb290QmxvY2tM
b2dpY2FsV2lkdGggPSByb290QmxvY2tMb2dpY2FsUmlnaHQgLSByb290QmxvY2tMb2dpY2FsTGVm
dDsKLSAgICBpZiAocm9vdEJsb2NrTG9naWNhbFdpZHRoIDw9IFpFUk9fTEFZT1VUX1VOSVQpCisg
ICAgaWYgKHJvb3RCbG9ja0xvZ2ljYWxXaWR0aCA8PSBMYXlvdXRVbml0KCkpCiAgICAgICAgIHJl
dHVybiBMYXlvdXRSZWN0KCk7CiAKICAgICBMYXlvdXRSZWN0IGdhcFJlY3QgPSByb290QmxvY2st
PmxvZ2ljYWxSZWN0VG9QaHlzaWNhbFJlY3Qocm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgTGF5
b3V0UmVjdChyb290QmxvY2tMb2dpY2FsTGVmdCwgcm9vdEJsb2NrTG9naWNhbFRvcCwgcm9vdEJs
b2NrTG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSk7CkBAIC0zNTUzLDcgKzM1NTMsNyBAQCBM
YXlvdXRSZWN0IFJlbmRlckJsb2NrOjpsb2dpY2FsUmlnaHRTZWxlCiAgICAgTGF5b3V0VW5pdCBy
b290QmxvY2tMb2dpY2FsTGVmdCA9IG1heChpbmxpbmVEaXJlY3Rpb25PZmZzZXQocm9vdEJsb2Nr
LCBvZmZzZXRGcm9tUm9vdEJsb2NrKSArIGZsb29yVG9JbnQobG9naWNhbFJpZ2h0KSwgbWF4KGxv
Z2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbFRvcCksIGxvZ2ljYWxM
ZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQp
KSk7CiAgICAgTGF5b3V0VW5pdCByb290QmxvY2tMb2dpY2FsUmlnaHQgPSBtaW4obG9naWNhbFJp
Z2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbFRvcCksIGxvZ2ljYWxSaWdodFNl
bGVjdGlvbk9mZnNldChyb290QmxvY2ssIGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0KSk7CiAg
ICAgTGF5b3V0VW5pdCByb290QmxvY2tMb2dpY2FsV2lkdGggPSByb290QmxvY2tMb2dpY2FsUmln
aHQgLSByb290QmxvY2tMb2dpY2FsTGVmdDsKLSAgICBpZiAocm9vdEJsb2NrTG9naWNhbFdpZHRo
IDw9IFpFUk9fTEFZT1VUX1VOSVQpCisgICAgaWYgKHJvb3RCbG9ja0xvZ2ljYWxXaWR0aCA8PSBM
YXlvdXRVbml0KCkpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKICAgICBMYXlvdXRS
ZWN0IGdhcFJlY3QgPSByb290QmxvY2stPmxvZ2ljYWxSZWN0VG9QaHlzaWNhbFJlY3Qocm9vdEJs
b2NrUGh5c2ljYWxQb3NpdGlvbiwgTGF5b3V0UmVjdChyb290QmxvY2tMb2dpY2FsTGVmdCwgcm9v
dEJsb2NrTG9naWNhbFRvcCwgcm9vdEJsb2NrTG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSk7
CkBAIC0zODEzLDggKzM4MTMsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09i
amVjdChSCiAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tID0gbG9naWNh
bEJvdHRvbUZvckZsb2F0KHIpOwogCiAgICAgICAgICAgICAgICAgLy8gRml4IGZvciBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ5OTUuCi0gICAgICAgICAgICAgICAg
aWYgKGxvZ2ljYWxCb3R0b20gPCAwIHx8IGxvZ2ljYWxCb3R0b20gPCBsb2dpY2FsVG9wIHx8IGxv
Z2ljYWxUb3AgPT0gTUFYX0xBWU9VVF9VTklUKQotICAgICAgICAgICAgICAgICAgICBsb2dpY2Fs
Qm90dG9tID0gTUFYX0xBWU9VVF9VTklUOworICAgICAgICAgICAgICAgIGlmIChsb2dpY2FsQm90
dG9tIDwgMCB8fCBsb2dpY2FsQm90dG9tIDwgbG9naWNhbFRvcCB8fCBsb2dpY2FsVG9wID09IExh
eW91dFVuaXQ6Om1heCgpKQorICAgICAgICAgICAgICAgICAgICBsb2dpY2FsQm90dG9tID0gTGF5
b3V0VW5pdDo6bWF4KCk7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgIC8vIFNwZWNpYWwtY2FzZSB6ZXJvLSBhbmQgbGVzcy10aGFuLXplcm8taGVpZ2h0IGZsb2F0
czogdGhvc2UgZG9uJ3QgdG91Y2gKICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGxpbmUgdGhh
dCB0aGV5J3JlIG9uLCBidXQgaXQgc3RpbGwgbmVlZHMgdG8gYmUgZGlydGllZC4gVGhpcyBpcwpA
QCAtNDI2Nyw3ICs0MjY3LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bmV4dEZsb2F0TG9n
aWNhbAogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCiAgICAgICAgIHJldHVybiBsb2dpY2Fs
SGVpZ2h0OwogCi0gICAgTGF5b3V0VW5pdCBib3R0b20gPSBNQVhfTEFZT1VUX1VOSVQ7CisgICAg
TGF5b3V0VW5pdCBib3R0b20gPSBMYXlvdXRVbml0OjptYXgoKTsKICAgICBjb25zdCBGbG9hdGlu
Z09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7
CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5l
bmQoKTsKICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09i
amVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKQEAgLTQyNzcsMTQgKzQyNzcsMTQg
QEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bmV4dEZsb2F0TG9naWNhbAogICAgICAgICAgICAg
Ym90dG9tID0gbWluKGZsb2F0Qm90dG9tLCBib3R0b20pOwogICAgIH0KIAotICAgIHJldHVybiBi
b3R0b20gPT0gTUFYX0xBWU9VVF9VTklUID8gWkVST19MQVlPVVRfVU5JVCA6IGJvdHRvbTsKKyAg
ICByZXR1cm4gYm90dG9tID09IExheW91dFVuaXQ6Om1heCgpID8gTGF5b3V0VW5pdCgpIDogYm90
dG9tOwogfQogCiBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpsb3dlc3RGbG9hdExvZ2ljYWxCb3R0
b20oRmxvYXRpbmdPYmplY3Q6OlR5cGUgZmxvYXRUeXBlKSBjb25zdAogewogICAgIGlmICghbV9m
bG9hdGluZ09iamVjdHMpCi0gICAgICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOwotICAgIExh
eW91dFVuaXQgbG93ZXN0RmxvYXRCb3R0b20gPSBaRVJPX0xBWU9VVF9VTklUOworICAgICAgICBy
ZXR1cm4gTGF5b3V0VW5pdCgpOworICAgIExheW91dFVuaXQgbG93ZXN0RmxvYXRCb3R0b20gPSBM
YXlvdXRVbml0KCk7CiAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0
U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRl
cmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgZm9yIChGbG9hdGluZ09i
amVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CkBAIC00MzAyLDcgKzQzMDIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjptYXJrTGlu
ZXNEaXJ0eUluQmxvY2tSCiAKICAgICBSb290SW5saW5lQm94KiBsb3dlc3REaXJ0eUxpbmUgPSBs
YXN0Um9vdEJveCgpOwogICAgIFJvb3RJbmxpbmVCb3gqIGFmdGVyTG93ZXN0ID0gbG93ZXN0RGly
dHlMaW5lOwotICAgIHdoaWxlIChsb3dlc3REaXJ0eUxpbmUgJiYgbG93ZXN0RGlydHlMaW5lLT5s
aW5lQm90dG9tV2l0aExlYWRpbmcoKSA+PSBsb2dpY2FsQm90dG9tICYmIGxvZ2ljYWxCb3R0b20g
PCBNQVhfTEFZT1VUX1VOSVQpIHsKKyAgICB3aGlsZSAobG93ZXN0RGlydHlMaW5lICYmIGxvd2Vz
dERpcnR5TGluZS0+bGluZUJvdHRvbVdpdGhMZWFkaW5nKCkgPj0gbG9naWNhbEJvdHRvbSAmJiBs
b2dpY2FsQm90dG9tIDwgTGF5b3V0VW5pdDo6bWF4KCkpIHsKICAgICAgICAgYWZ0ZXJMb3dlc3Qg
PSBsb3dlc3REaXJ0eUxpbmU7CiAgICAgICAgIGxvd2VzdERpcnR5TGluZSA9IGxvd2VzdERpcnR5
TGluZS0+cHJldlJvb3RCb3goKTsKICAgICB9CkBAIC00MzkzLDggKzQzOTMsOCBAQCB2b2lkIFJl
bmRlckJsb2NrOjpjbGVhckZsb2F0cygpCiAgICAgICAgIGFkZEludHJ1ZGluZ0Zsb2F0cyhibG9j
aywgbG9naWNhbExlZnRPZmZzZXQsIGxvZ2ljYWxUb3BPZmZzZXQpOwogCiAgICAgaWYgKGNoaWxk
cmVuSW5saW5lKCkpIHsKLSAgICAgICAgTGF5b3V0VW5pdCBjaGFuZ2VMb2dpY2FsVG9wID0gTUFY
X0xBWU9VVF9VTklUOwotICAgICAgICBMYXlvdXRVbml0IGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBN
SU5fTEFZT1VUX1VOSVQ7CisgICAgICAgIExheW91dFVuaXQgY2hhbmdlTG9naWNhbFRvcCA9IExh
eW91dFVuaXQ6Om1heCgpOworICAgICAgICBMYXlvdXRVbml0IGNoYW5nZUxvZ2ljYWxCb3R0b20g
PSBMYXlvdXRVbml0OjptaW4oKTsKICAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7CiAg
ICAgICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBt
X2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0
ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwpAQCAtNDQ3NSw3ICs0NDc1LDcg
QEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbAogICAgIEZsb2F0aW5n
T2JqZWN0U2V0SXRlcmF0b3IgY2hpbGRFbmQgPSBjaGlsZC0+bV9mbG9hdGluZ09iamVjdHMtPnNl
dCgpLmVuZCgpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBjaGlsZEl0ID0g
Y2hpbGQtPm1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5iZWdpbigpOyBjaGlsZEl0ICE9IGNoaWxk
RW5kOyArK2NoaWxkSXQpIHsKICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqY2hpbGRJdDsK
LSAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tRm9yRmxvYXQgPSBtaW4odGhpcy0+bG9n
aWNhbEJvdHRvbUZvckZsb2F0KHIpLCBNQVhfTEFZT1VUX1VOSVQgLSBjaGlsZExvZ2ljYWxUb3Ap
OworICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b21Gb3JGbG9hdCA9IG1pbih0aGlzLT5s
b2dpY2FsQm90dG9tRm9yRmxvYXQociksIExheW91dFVuaXQ6Om1heCgpIC0gY2hpbGRMb2dpY2Fs
VG9wKTsKICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tID0gY2hpbGRMb2dpY2FsVG9w
ICsgbG9naWNhbEJvdHRvbUZvckZsb2F0OwogICAgICAgICBsb3dlc3RGbG9hdExvZ2ljYWxCb3R0
b20gPSBtYXgobG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tLCBsb2dpY2FsQm90dG9tKTsKIApAQCAt
NDY2MCw3ICs0NjYwLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6Z2V0Q2xlYXJEZWx0YShS
ZQogICAgIH0KIAogICAgIC8vIFdlIGFsc28gY2xlYXIgZmxvYXRzIGlmIHdlIGFyZSB0b28gYmln
IHRvIHNpdCBvbiB0aGUgc2FtZSBsaW5lIGFzIGEgZmxvYXQgKGFuZCB3aXNoIHRvIGF2b2lkIGZs
b2F0cyBieSBkZWZhdWx0KS4KLSAgICBMYXlvdXRVbml0IHJlc3VsdCA9IGNsZWFyU2V0ID8gbWF4
KFpFUk9fTEFZT1VUX1VOSVQsIGxvZ2ljYWxCb3R0b20gLSBsb2dpY2FsVG9wKSA6IFpFUk9fTEFZ
T1VUX1VOSVQ7CisgICAgTGF5b3V0VW5pdCByZXN1bHQgPSBjbGVhclNldCA/IG1heChMYXlvdXRV
bml0KCksIGxvZ2ljYWxCb3R0b20gLSBsb2dpY2FsVG9wKSA6IExheW91dFVuaXQoKTsKICAgICBp
ZiAoIXJlc3VsdCAmJiBjaGlsZC0+YXZvaWRzRmxvYXRzKCkpIHsKICAgICAgICAgTGF5b3V0VW5p
dCBuZXdMb2dpY2FsVG9wID0gbG9naWNhbFRvcDsKICAgICAgICAgd2hpbGUgKHRydWUpIHsKQEAg
LTU3ODAsNyArNTc4MCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVJbmxpbmVQcmVmZXJy
ZWQKIAogICAgIFJlbmRlclN0eWxlKiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKICAgICBSZW5kZXJC
bG9jayogY29udGFpbmluZ0Jsb2NrID0gdGhpcy0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgTGF5
b3V0VW5pdCBjdyA9IGNvbnRhaW5pbmdCbG9jayA/IGNvbnRhaW5pbmdCbG9jay0+Y29udGVudExv
Z2ljYWxXaWR0aCgpIDogWkVST19MQVlPVVRfVU5JVDsKKyAgICBMYXlvdXRVbml0IGN3ID0gY29u
dGFpbmluZ0Jsb2NrID8gY29udGFpbmluZ0Jsb2NrLT5jb250ZW50TG9naWNhbFdpZHRoKCkgOiBM
YXlvdXRVbml0KCk7CiAKICAgICAvLyBJZiB3ZSBhcmUgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZSwg
d2Ugd2FudCB0byBpZ25vcmUgYWxsIHdoaXRlLXNwYWNlLgogICAgIC8vIEFsc28gc3RyaXAgc3Bh
Y2VzIGlmIHdlIHByZXZpb3VzbHkgaGFkIHRleHQgdGhhdCBlbmRlZCBpbiBhIHRyYWlsaW5nIHNw
YWNlLgpAQCAtNjE1Nyw4ICs2MTU3LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUJsb2Nr
UHJlZmVycmVkTAogICAgIH0KIAogICAgIC8vIEFsd2F5cyBtYWtlIHN1cmUgdGhlc2UgdmFsdWVz
IGFyZSBub24tbmVnYXRpdmUuCi0gICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtYXgo
WkVST19MQVlPVVRfVU5JVCwgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgpOwotICAgIG1fbWF4
UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4KFpFUk9fTEFZT1VUX1VOSVQsIG1fbWF4UHJlZmVy
cmVkTG9naWNhbFdpZHRoKTsKKyAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1heChM
YXlvdXRVbml0KCksIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoKTsKKyAgICBtX21heFByZWZl
cnJlZExvZ2ljYWxXaWR0aCA9IG1heChMYXlvdXRVbml0KCksIG1fbWF4UHJlZmVycmVkTG9naWNh
bFdpZHRoKTsKIAogICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4KGZsb2F0TGVm
dFdpZHRoICsgZmxvYXRSaWdodFdpZHRoLCBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCk7CiB9
CkBAIC02NTg5LDcgKzY1ODksNyBAQCBzdGF0aWMgaW50IGdldEhlaWdodEZvckxpbmVDb3VudChS
ZW5kZXJCCiAgICAgICAgIGlmIChibG9jay0+Y2hpbGRyZW5JbmxpbmUoKSkgewogICAgICAgICAg
ICAgZm9yIChSb290SW5saW5lQm94KiBib3ggPSBibG9jay0+Zmlyc3RSb290Qm94KCk7IGJveDsg
Ym94ID0gYm94LT5uZXh0Um9vdEJveCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCsrY291bnQg
PT0gbCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJveC0+bGluZUJvdHRvbSgpICsgKGlu
Y2x1ZGVCb3R0b20gPyAoYmxvY2stPmJvcmRlckJvdHRvbSgpICsgYmxvY2stPnBhZGRpbmdCb3R0
b20oKSkgOiBaRVJPX0xBWU9VVF9VTklUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJv
eC0+bGluZUJvdHRvbSgpICsgKGluY2x1ZGVCb3R0b20gPyAoYmxvY2stPmJvcmRlckJvdHRvbSgp
ICsgYmxvY2stPnBhZGRpbmdCb3R0b20oKSkgOiBMYXlvdXRVbml0KCkpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgICAgIGVsc2UgewpAQCAtNjU5OCw3ICs2NTk4LDcgQEAgc3RhdGlj
IGludCBnZXRIZWlnaHRGb3JMaW5lQ291bnQoUmVuZGVyQgogICAgICAgICAgICAgICAgIGlmIChz
aG91bGRDaGVja0xpbmVzKG9iaikpIHsKICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9
IGdldEhlaWdodEZvckxpbmVDb3VudCh0b1JlbmRlckJsb2NrKG9iaiksIGwsIGZhbHNlLCBjb3Vu
dCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gLTEpCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgb2JqLT55KCkgKyAoaW5jbHVkZUJvdHRvbSA/IChi
bG9jay0+Ym9yZGVyQm90dG9tKCkgKyBibG9jay0+cGFkZGluZ0JvdHRvbSgpKSA6IFpFUk9fTEFZ
T1VUX1VOSVQpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIG9iai0+
eSgpICsgKGluY2x1ZGVCb3R0b20gPyAoYmxvY2stPmJvcmRlckJvdHRvbSgpICsgYmxvY2stPnBh
ZGRpbmdCb3R0b20oKSkgOiBMYXlvdXRVbml0KCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIW9iai0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmICFvYmotPmlzUnVu
SW4oKSkKICAgICAgICAgICAgICAgICAgICAgbm9ybWFsRmxvd0NoaWxkV2l0aG91dExpbmVzID0g
b2JqOwogICAgICAgICAgICAgfQpAQCAtNjY4NywxMSArNjY4NywxMSBAQCB2b2lkIFJlbmRlckJs
b2NrOjpib3JkZXJGaXRBZGp1c3QoTGF5b3V0CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdh
bGsgYW55IG5vcm1hbCBmbG93IGxpbmVzIHRvIHNudWdseSBmaXQuCi0gICAgTGF5b3V0VW5pdCBs
ZWZ0ID0gTUFYX0xBWU9VVF9VTklUOwotICAgIExheW91dFVuaXQgcmlnaHQgPSBNSU5fTEFZT1VU
X1VOSVQ7CisgICAgTGF5b3V0VW5pdCBsZWZ0ID0gTGF5b3V0VW5pdDo6bWF4KCk7CisgICAgTGF5
b3V0VW5pdCByaWdodCA9IExheW91dFVuaXQ6Om1pbigpOwogICAgIExheW91dFVuaXQgb2xkV2lk
dGggPSByZWN0LndpZHRoKCk7CiAgICAgYWRqdXN0Rm9yQm9yZGVyRml0KDAsIGxlZnQsIHJpZ2h0
KTsKLSAgICBpZiAobGVmdCAhPSBNQVhfTEFZT1VUX1VOSVQpIHsKKyAgICBpZiAobGVmdCAhPSBM
YXlvdXRVbml0OjptYXgoKSkgewogICAgICAgICBsZWZ0ID0gbWluKGxlZnQsIG9sZFdpZHRoIC0g
KGJvcmRlclJpZ2h0KCkgKyBwYWRkaW5nUmlnaHQoKSkpOwogCiAgICAgICAgIGxlZnQgLT0gKGJv
cmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkpOwpAQCAtNjcwMCw3ICs2NzAwLDcgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6Ym9yZGVyRml0QWRqdXN0KExheW91dAogICAgICAgICAgICAgcmVjdC5leHBh
bmQoLWxlZnQsIDApOwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChyaWdodCAhPSBNSU5fTEFZ
T1VUX1VOSVQpIHsKKyAgICBpZiAocmlnaHQgIT0gTGF5b3V0VW5pdDo6bWluKCkpIHsKICAgICAg
ICAgcmlnaHQgPSBtYXgocmlnaHQsIGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkpOwogCiAg
ICAgICAgIHJpZ2h0ICs9IChib3JkZXJSaWdodCgpICsgcGFkZGluZ1JpZ2h0KCkpOwpAQCAtNjg4
Nyw4ICs2ODg3LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdAog
ICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyB3cm9uZyBmb3IgYmxvY2stZmxvd3MgdGhhdCBhcmUg
aG9yaXpvbnRhbC4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ2NzgxCiAgICAgICAgIGJvb2wgcHJldklubGluZUhhc0xpbmVCb3ggPSB0b1JlbmRl
cklubGluZShpbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCktPm5vZGUoKS0+cmVuZGVyZXIoKSkt
PmZpcnN0TGluZUJveCgpOyAKLSAgICAgICAgZmxvYXQgdG9wTWFyZ2luID0gcHJldklubGluZUhh
c0xpbmVCb3ggPyBjb2xsYXBzZWRNYXJnaW5CZWZvcmUoKSA6IFpFUk9fTEFZT1VUX1VOSVQ7Ci0g
ICAgICAgIGZsb2F0IGJvdHRvbU1hcmdpbiA9IG5leHRJbmxpbmVIYXNMaW5lQm94ID8gY29sbGFw
c2VkTWFyZ2luQWZ0ZXIoKSA6IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAgIGZsb2F0IHRvcE1h
cmdpbiA9IHByZXZJbmxpbmVIYXNMaW5lQm94ID8gY29sbGFwc2VkTWFyZ2luQmVmb3JlKCkgOiBM
YXlvdXRVbml0KCk7CisgICAgICAgIGZsb2F0IGJvdHRvbU1hcmdpbiA9IG5leHRJbmxpbmVIYXNM
aW5lQm94ID8gY29sbGFwc2VkTWFyZ2luQWZ0ZXIoKSA6IExheW91dFVuaXQoKTsKICAgICAgICAg
TGF5b3V0UmVjdCByZWN0KGFkZGl0aW9uYWxPZmZzZXQueCgpLCBhZGRpdGlvbmFsT2Zmc2V0Lnko
KSAtIHRvcE1hcmdpbiwgd2lkdGgoKSwgaGVpZ2h0KCkgKyB0b3BNYXJnaW4gKyBib3R0b21NYXJn
aW4pOwogICAgICAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmVjdHMuYXBw
ZW5kKHBpeGVsU25hcHBlZEludFJlY3QocmVjdCkpOwpAQCAtNjk5Myw3ICs2OTkzLDcgQEAgTGF5
b3V0VW5pdCBSZW5kZXJCbG9jazo6YXBwbHlCZWZvcmVCcmVhawogICAgICAgICBpZiAoY2hlY2tD
b2x1bW5CcmVha3MpCiAgICAgICAgICAgICB2aWV3KCktPmxheW91dFN0YXRlKCktPmFkZEZvcmNl
ZENvbHVtbkJyZWFrKGNoaWxkLCBsb2dpY2FsT2Zmc2V0KTsKICAgICAgICAgaWYgKGNoZWNrUmVn
aW9uQnJlYWtzKSB7Ci0gICAgICAgICAgICBMYXlvdXRVbml0IG9mZnNldEJyZWFrQWRqdXN0bWVu
dCA9IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAgICAgICBMYXlvdXRVbml0IG9mZnNldEJyZWFr
QWRqdXN0bWVudCA9IExheW91dFVuaXQoKTsKICAgICAgICAgICAgIGlmIChlbmNsb3NpbmdSZW5k
ZXJGbG93VGhyZWFkKCktPmFkZEZvcmNlZFJlZ2lvbkJyZWFrKG9mZnNldEZyb21Mb2dpY2FsVG9w
T2ZGaXJzdFBhZ2UoKSArIGxvZ2ljYWxPZmZzZXQsIGNoaWxkLCB0cnVlLCAmb2Zmc2V0QnJlYWtB
ZGp1c3RtZW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4gbG9naWNhbE9mZnNldCArIG9mZnNl
dEJyZWFrQWRqdXN0bWVudDsKICAgICAgICAgfQpAQCAtNzAxNSw4ICs3MDE1LDggQEAgTGF5b3V0
VW5pdCBSZW5kZXJCbG9jazo6YXBwbHlBZnRlckJyZWFrKAogICAgICAgICBpZiAoY2hlY2tDb2x1
bW5CcmVha3MpCiAgICAgICAgICAgICB2aWV3KCktPmxheW91dFN0YXRlKCktPmFkZEZvcmNlZENv
bHVtbkJyZWFrKGNoaWxkLCBsb2dpY2FsT2Zmc2V0KTsKICAgICAgICAgaWYgKGNoZWNrUmVnaW9u
QnJlYWtzKSB7Ci0gICAgICAgICAgICBMYXlvdXRVbml0IG1hcmdpbk9mZnNldCA9IG1hcmdpbklu
Zm8uY2FuQ29sbGFwc2VXaXRoTWFyZ2luQmVmb3JlKCkgPyBaRVJPX0xBWU9VVF9VTklUIDogbWFy
Z2luSW5mby5tYXJnaW4oKTsKLSAgICAgICAgICAgIExheW91dFVuaXQgb2Zmc2V0QnJlYWtBZGp1
c3RtZW50ID0gWkVST19MQVlPVVRfVU5JVDsKKyAgICAgICAgICAgIExheW91dFVuaXQgbWFyZ2lu
T2Zmc2V0ID0gbWFyZ2luSW5mby5jYW5Db2xsYXBzZVdpdGhNYXJnaW5CZWZvcmUoKSA/IExheW91
dFVuaXQoKSA6IG1hcmdpbkluZm8ubWFyZ2luKCk7CisgICAgICAgICAgICBMYXlvdXRVbml0IG9m
ZnNldEJyZWFrQWRqdXN0bWVudCA9IExheW91dFVuaXQoKTsKICAgICAgICAgICAgIGlmIChlbmNs
b3NpbmdSZW5kZXJGbG93VGhyZWFkKCktPmFkZEZvcmNlZFJlZ2lvbkJyZWFrKG9mZnNldEZyb21M
b2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSArIGxvZ2ljYWxPZmZzZXQgKyBtYXJnaW5PZmZzZXQsIGNo
aWxkLCBmYWxzZSwgJm9mZnNldEJyZWFrQWRqdXN0bWVudCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGxvZ2ljYWxPZmZzZXQgKyBvZmZzZXRCcmVha0FkanVzdG1lbnQ7CiAgICAgICAgIH0KQEAg
LTcwNzgsNyArNzA3OCw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmFkanVzdEZvclVuc3Bs
aXQKICAgICAgICAgfHwgKGNoZWNrUmVnaW9uQnJlYWtzICYmIGNoaWxkLT5zdHlsZSgpLT5yZWdp
b25CcmVha0luc2lkZSgpID09IFBCQVZPSUQpOwogICAgIGlmICghaXNVbnNwbGl0dGFibGUpCiAg
ICAgICAgIHJldHVybiBsb2dpY2FsT2Zmc2V0OwotICAgIExheW91dFVuaXQgY2hpbGRMb2dpY2Fs
SGVpZ2h0ID0gbG9naWNhbEhlaWdodEZvckNoaWxkKGNoaWxkKSArIChpbmNsdWRlTWFyZ2lucyA/
IG1hcmdpbkJlZm9yZUZvckNoaWxkKGNoaWxkKSArIG1hcmdpbkFmdGVyRm9yQ2hpbGQoY2hpbGQp
IDogWkVST19MQVlPVVRfVU5JVCk7CisgICAgTGF5b3V0VW5pdCBjaGlsZExvZ2ljYWxIZWlnaHQg
PSBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoY2hpbGQpICsgKGluY2x1ZGVNYXJnaW5zID8gbWFyZ2lu
QmVmb3JlRm9yQ2hpbGQoY2hpbGQpICsgbWFyZ2luQWZ0ZXJGb3JDaGlsZChjaGlsZCkgOiBMYXlv
dXRVbml0KCkpOwogICAgIExheW91dFN0YXRlKiBsYXlvdXRTdGF0ZSA9IHZpZXcoKS0+bGF5b3V0
U3RhdGUoKTsKICAgICBpZiAobGF5b3V0U3RhdGUtPm1fY29sdW1uSW5mbykKICAgICAgICAgbGF5
b3V0U3RhdGUtPm1fY29sdW1uSW5mby0+dXBkYXRlTWluaW11bUNvbHVtbkhlaWdodChjaGlsZExv
Z2ljYWxIZWlnaHQpOwpAQCAtNzE1NiwxMiArNzE1NiwxMiBAQCB2b2lkIFJlbmRlckJsb2NrOjph
ZGp1c3RMaW5lUG9zaXRpb25Gb3JQCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChs
aW5lSGVpZ2h0ID4gcGFnZUxvZ2ljYWxIZWlnaHQpIHsKICAgICAgICAgICAgIC8vIFNwbGl0IHRo
ZSB0b3AgbWFyZ2luIGluIG9yZGVyIHRvIGF2b2lkIHNwbGl0dGluZyB0aGUgdmlzaWJsZSBwYXJ0
IG9mIHRoZSBsaW5lLgotICAgICAgICAgICAgcmVtYWluaW5nTG9naWNhbEhlaWdodCAtPSBtaW4o
bGluZUhlaWdodCAtIHBhZ2VMb2dpY2FsSGVpZ2h0LCBtYXgoWkVST19MQVlPVVRfVU5JVCwgbG9n
aWNhbFZpc3VhbE92ZXJmbG93LnkoKSAtIGxpbmVCb3gtPmxpbmVUb3BXaXRoTGVhZGluZygpKSk7
CisgICAgICAgICAgICByZW1haW5pbmdMb2dpY2FsSGVpZ2h0IC09IG1pbihsaW5lSGVpZ2h0IC0g
cGFnZUxvZ2ljYWxIZWlnaHQsIG1heChMYXlvdXRVbml0KCksIGxvZ2ljYWxWaXN1YWxPdmVyZmxv
dy55KCkgLSBsaW5lQm94LT5saW5lVG9wV2l0aExlYWRpbmcoKSkpOwogICAgICAgICB9Ci0gICAg
ICAgIExheW91dFVuaXQgdG90YWxMb2dpY2FsSGVpZ2h0ID0gbGluZUhlaWdodCArIG1heChaRVJP
X0xBWU9VVF9VTklULCBsb2dpY2FsT2Zmc2V0KTsKKyAgICAgICAgTGF5b3V0VW5pdCB0b3RhbExv
Z2ljYWxIZWlnaHQgPSBsaW5lSGVpZ2h0ICsgbWF4KExheW91dFVuaXQoKSwgbG9naWNhbE9mZnNl
dCk7CiAgICAgICAgIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHRBdE5ld09mZnNldCA9IGhh
c1VuaWZvcm1QYWdlTG9naWNhbEhlaWdodCA/IHBhZ2VMb2dpY2FsSGVpZ2h0IDogcGFnZUxvZ2lj
YWxIZWlnaHRGb3JPZmZzZXQobG9naWNhbE9mZnNldCArIHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQp
OwogICAgICAgICBpZiAobGluZUJveCA9PSBmaXJzdFJvb3RCb3goKSAmJiB0b3RhbExvZ2ljYWxI
ZWlnaHQgPCBwYWdlTG9naWNhbEhlaWdodEF0TmV3T2Zmc2V0ICYmICFpc091dE9mRmxvd1Bvc2l0
aW9uZWQoKSAmJiAhaXNUYWJsZUNlbGwoKSkKLSAgICAgICAgICAgIHNldFBhZ2luYXRpb25TdHJ1
dChyZW1haW5pbmdMb2dpY2FsSGVpZ2h0ICsgbWF4KFpFUk9fTEFZT1VUX1VOSVQsIGxvZ2ljYWxP
ZmZzZXQpKTsKKyAgICAgICAgICAgIHNldFBhZ2luYXRpb25TdHJ1dChyZW1haW5pbmdMb2dpY2Fs
SGVpZ2h0ICsgbWF4KExheW91dFVuaXQoKSwgbG9naWNhbE9mZnNldCkpOwogICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgIGRlbHRhICs9IHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQ7CiAgICAgICAg
ICAgICBsaW5lQm94LT5zZXRQYWdpbmF0aW9uU3RydXQocmVtYWluaW5nTG9naWNhbEhlaWdodCk7
CkBAIC03MjQ5LDcgKzcyNDksNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpvZmZzZXRGcm9t
TG9naWNhCiB7CiAgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdmlldygpLT5sYXlvdXRT
dGF0ZSgpOwogICAgIGlmIChsYXlvdXRTdGF0ZSAmJiAhbGF5b3V0U3RhdGUtPmlzUGFnaW5hdGVk
KCkpCi0gICAgICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOworICAgICAgICByZXR1cm4gTGF5
b3V0VW5pdCgpOwogICAgIGlmIChsYXlvdXRTdGF0ZSkgewogICAgICAgICAvLyBGSVhNRTogU2Fu
aXR5IGNoZWNrIHRoYXQgdGhlIHJlbmRlcmVyIGluIHRoZSBsYXlvdXQgc3RhdGUgaXMgb3Vycywg
c2luY2Ugb3RoZXJ3aXNlIHRoZSBjb21wdXRhdGlvbiB3aWxsIGJlIG9mZi4KICAgICAgICAgLy8g
UmlnaHQgbm93IHRoaXMgYXNzZXJ0IGdldHMgaGl0IGluc2lkZSBjb21wdXRlTG9naWNhbEhlaWdo
dCBmb3IgcGVyY2VudGFnZSBtYXJnaW5zLCBzaW5jZSB0aGV5J3JlIGNvbXB1dGVkIHVzaW5nCkBA
IC03MjY1LDcgKzcyNjUsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpvZmZzZXRGcm9tTG9n
aWNhCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgYSBzbG93ZXIgcGF0aCB0aGF0IGRvZXNuJ3QgdXNl
IGxheW91dCBzdGF0ZSBhbmQgcmVsaWVzIG9uIGdldHRpbmcgeW91ciBsb2dpY2FsIHRvcCBpbnNp
ZGUgdGhlIGVuY2xvc2luZyBmbG93IHRocmVhZC4gSXQgZG9lc24ndAogICAgIC8vIHdvcmsgd2l0
aCBjb2x1bW5zIG9yIHBhZ2VzIGN1cnJlbnRseSwgYnV0IGl0IHNob3VsZCBvbmNlIHRoZXkgaGF2
ZSBiZWVuIHN3aXRjaGVkIG92ZXIgdG8gdXNpbmcgZmxvdyB0aHJlYWRzLgogICAgIGlmICghaW5S
ZW5kZXJGbG93VGhyZWFkKCkpCi0gICAgICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOworICAg
ICAgICByZXR1cm4gTGF5b3V0VW5pdCgpOwogCiAgICAgY29uc3QgUmVuZGVyQmxvY2sqIGN1cnJl
bnRCbG9jayA9IHRoaXM7CiAgICAgTGF5b3V0UmVjdCBibG9ja1JlY3QoMCwgMCwgd2lkdGgoKSwg
aGVpZ2h0KCkpOwpAQCAtNzI3NCw3ICs3Mjc0LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6
b2Zmc2V0RnJvbUxvZ2ljYQogICAgICAgICBSZW5kZXJCbG9jayogY29udGFpbmVyQmxvY2sgPSBj
dXJyZW50QmxvY2stPmNvbnRhaW5pbmdCbG9jaygpOwogICAgICAgICBBU1NFUlQoY29udGFpbmVy
QmxvY2spOwogICAgICAgICBpZiAoIWNvbnRhaW5lckJsb2NrKQotICAgICAgICAgICAgcmV0dXJu
IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCgpOwogICAg
ICAgICBMYXlvdXRQb2ludCBjdXJyZW50QmxvY2tMb2NhdGlvbiA9IGN1cnJlbnRCbG9jay0+bG9j
YXRpb24oKTsKIAogICAgICAgICBpZiAoY29udGFpbmVyQmxvY2stPnN0eWxlKCktPndyaXRpbmdN
b2RlKCkgIT0gY3VycmVudEJsb2NrLT5zdHlsZSgpLT53cml0aW5nTW9kZSgpKSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gMTMzNTM5KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE0OSw3ICsxNDksNyBAQCBwdWJsaWM6CiAgICAgLy8gY29tcHV0ZSB0aGUgcmVnaW9uIGFsbCBv
dmVyIGFnYWluIHdoZW4geW91IGFscmVhZHkga25vdyBpdC4KICAgICBMYXlvdXRVbml0IGF2YWls
YWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUoTGF5b3V0VW5pdCBwb3NpdGlvbiwgYm9vbCBmaXJzdExp
bmUsIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9w
T2ZGaXJzdFBhZ2UsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IDApIGNvbnN0CiAgICAgewot
ICAgICAgICByZXR1cm4gbWF4KFpFUk9fTEFZT1VUX1VOSVQsIGxvZ2ljYWxSaWdodE9mZnNldEZv
ckxpbmUocG9zaXRpb24sIGZpcnN0TGluZSwgcmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9m
Rmlyc3RQYWdlLCBsb2dpY2FsSGVpZ2h0KQorICAgICAgICByZXR1cm4gbWF4KExheW91dFVuaXQo
KSwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgZmlyc3RMaW5lLCByZWdpb24s
IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UsIGxvZ2ljYWxIZWlnaHQpCiAgICAgICAg
ICAgICAtIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgZmlyc3RMaW5lLCByZWdp
b24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UsIGxvZ2ljYWxIZWlnaHQpKTsKICAg
ICB9CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQg
cG9zaXRpb24sIGJvb2wgZmlyc3RMaW5lLCBSZW5kZXJSZWdpb24qIHJlZ2lvbiwgTGF5b3V0VW5p
dCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWln
aHQgPSAwKSBjb25zdCAKQEAgLTI5NywxMiArMjk3LDEyIEBAIHB1YmxpYzoKICAgICB1bnNpZ25l
ZCBjb2x1bW5Db3VudChDb2x1bW5JbmZvKikgY29uc3Q7CiAgICAgTGF5b3V0UmVjdCBjb2x1bW5S
ZWN0QXQoQ29sdW1uSW5mbyosIHVuc2lnbmVkKSBjb25zdDsKIAotICAgIExheW91dFVuaXQgcGFn
aW5hdGlvblN0cnV0KCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1f
cGFnaW5hdGlvblN0cnV0IDogWkVST19MQVlPVVRfVU5JVDsgfQorICAgIExheW91dFVuaXQgcGFn
aW5hdGlvblN0cnV0KCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1f
cGFnaW5hdGlvblN0cnV0IDogTGF5b3V0VW5pdCgpOyB9CiAgICAgdm9pZCBzZXRQYWdpbmF0aW9u
U3RydXQoTGF5b3V0VW5pdCk7CiAgICAgCiAgICAgLy8gVGhlIHBhZ2UgbG9naWNhbCBvZmZzZXQg
aXMgdGhlIG9iamVjdCdzIG9mZnNldCBmcm9tIHRoZSB0b3Agb2YgdGhlIHBhZ2UgaW4gdGhlIHBh
Z2UgcHJvZ3Jlc3Npb24KICAgICAvLyBkaXJlY3Rpb24gKHNvIGFuIHgtb2Zmc2V0IGluIHZlcnRp
Y2FsIHRleHQgYW5kIGEgeS1vZmZzZXQgZm9yIGhvcml6b250YWwgdGV4dCkuCi0gICAgTGF5b3V0
VW5pdCBwYWdlTG9naWNhbE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3Jh
cmVEYXRhLT5tX3BhZ2VMb2dpY2FsT2Zmc2V0IDogWkVST19MQVlPVVRfVU5JVDsgfQorICAgIExh
eW91dFVuaXQgcGFnZUxvZ2ljYWxPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8g
bV9yYXJlRGF0YS0+bV9wYWdlTG9naWNhbE9mZnNldCA6IExheW91dFVuaXQoKTsgfQogICAgIHZv
aWQgc2V0UGFnZUxvZ2ljYWxPZmZzZXQoTGF5b3V0VW5pdCk7CiAKICAgICBSb290SW5saW5lQm94
KiBsaW5lR3JpZEJveCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5t
X2xpbmVHcmlkQm94IDogMDsgfQpAQCAtMzcxLDcgKzM3MSw3IEBAIHB1YmxpYzoKICAgICBMYXlv
dXRVbml0IGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiwgTGF5b3V0
VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSBjb25zdDsKICAgICBMYXlvdXRV
bml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiByZWdpb24s
IExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgY29uc3QKICAgICB7
IAotICAgICAgICByZXR1cm4gbWF4KFpFUk9fTEFZT1VUX1VOSVQsIGxvZ2ljYWxSaWdodE9mZnNl
dEZvckNvbnRlbnQocmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSAtCisg
ICAgICAgIHJldHVybiBtYXgoTGF5b3V0VW5pdCgpLCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250
ZW50KHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgLQogICAgICAgICAg
ICAgbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxU
b3BPZkZpcnN0UGFnZSkpOyB9CiAgICAgTGF5b3V0VW5pdCBzdGFydE9mZnNldEZvckNvbnRlbnQo
UmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZp
cnN0UGFnZSkgY29uc3QKICAgICB7CkBAIC0xMTQ0LDIwICsxMTQ0LDIwIEBAIHByb3RlY3RlZDoK
IAogICAgICAgICBzdGF0aWMgTGF5b3V0VW5pdCBwb3NpdGl2ZU1hcmdpbkJlZm9yZURlZmF1bHQo
Y29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrKQogICAgICAgICB7IAotICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bWF4KGJsb2NrLT5tYXJnaW5CZWZvcmUoKSwgWkVST19MQVlPVVRfVU5JVCk7CisgICAg
ICAgICAgICByZXR1cm4gc3RkOjptYXg8TGF5b3V0VW5pdD4oYmxvY2stPm1hcmdpbkJlZm9yZSgp
LCAwKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIExheW91dFVuaXQgbmVn
YXRpdmVNYXJnaW5CZWZvcmVEZWZhdWx0KGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaykKICAgICAg
ICAgeyAKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1heCgtYmxvY2stPm1hcmdpbkJlZm9yZSgp
LCBaRVJPX0xBWU9VVF9VTklUKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1heDxMYXlvdXRV
bml0PigtYmxvY2stPm1hcmdpbkJlZm9yZSgpLCAwKTsKICAgICAgICAgfQogICAgICAgICBzdGF0
aWMgTGF5b3V0VW5pdCBwb3NpdGl2ZU1hcmdpbkFmdGVyRGVmYXVsdChjb25zdCBSZW5kZXJCbG9j
ayogYmxvY2spCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1heChibG9jay0+
bWFyZ2luQWZ0ZXIoKSwgWkVST19MQVlPVVRfVU5JVCk7CisgICAgICAgICAgICByZXR1cm4gc3Rk
OjptYXg8TGF5b3V0VW5pdD4oYmxvY2stPm1hcmdpbkFmdGVyKCksIDApOwogICAgICAgICB9CiAg
ICAgICAgIHN0YXRpYyBMYXlvdXRVbml0IG5lZ2F0aXZlTWFyZ2luQWZ0ZXJEZWZhdWx0KGNvbnN0
IFJlbmRlckJsb2NrKiBibG9jaykKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bWF4KC1ibG9jay0+bWFyZ2luQWZ0ZXIoKSwgWkVST19MQVlPVVRfVU5JVCk7CisgICAgICAgICAg
ICByZXR1cm4gc3RkOjptYXg8TGF5b3V0VW5pdD4oLWJsb2NrLT5tYXJnaW5BZnRlcigpLCAwKTsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgTWFyZ2luVmFsdWVzIG1fbWFyZ2luczsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlv
dXQuY3BwCShyZXZpc2lvbiAxMzM1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0OCw4ICsxMjQ4LDgg
QEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlUmVwYWludFJhbmdlRnJvbUJveChSb290SW5saW5l
Qm94KiBib3gsIExheW91dFVuaXQgcGFnaW5hdGlvbkRlbHRhID0gMCkKICAgICB7CiAgICAgICAg
IG1fdXNlc1JlcGFpbnRCb3VuZHMgPSB0cnVlOwotICAgICAgICBtX3JlcGFpbnRMb2dpY2FsVG9w
ID0gbWluKG1fcmVwYWludExvZ2ljYWxUb3AsIGJveC0+bG9naWNhbFRvcFZpc3VhbE92ZXJmbG93
KCkgKyBtaW4ocGFnaW5hdGlvbkRlbHRhLCBaRVJPX0xBWU9VVF9VTklUKSk7Ci0gICAgICAgIG1f
cmVwYWludExvZ2ljYWxCb3R0b20gPSBtYXgobV9yZXBhaW50TG9naWNhbEJvdHRvbSwgYm94LT5s
b2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3coKSArIG1heChwYWdpbmF0aW9uRGVsdGEsIFpFUk9f
TEFZT1VUX1VOSVQpKTsKKyAgICAgICAgbV9yZXBhaW50TG9naWNhbFRvcCA9IG1pbihtX3JlcGFp
bnRMb2dpY2FsVG9wLCBib3gtPmxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdygpICsgbWluPExheW91
dFVuaXQ+KHBhZ2luYXRpb25EZWx0YSwgMCkpOworICAgICAgICBtX3JlcGFpbnRMb2dpY2FsQm90
dG9tID0gbWF4KG1fcmVwYWludExvZ2ljYWxCb3R0b20sIGJveC0+bG9naWNhbEJvdHRvbVZpc3Vh
bE92ZXJmbG93KCkgKyBtYXg8TGF5b3V0VW5pdD4ocGFnaW5hdGlvbkRlbHRhLCAwKSk7CiAgICAg
fQogICAgIAogICAgIGJvb2wgZW5kTGluZU1hdGNoZWQoKSBjb25zdCB7IHJldHVybiBtX2VuZExp
bmVNYXRjaGVkOyB9CkBAIC0xNzUzLDcgKzE3NTMsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjaGVj
a0Zsb2F0c0luQ2xlYW5MaW5lCiAgICAgICAgICAgICBMYXlvdXRVbml0IGZsb2F0VG9wID0gaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGZsb2F0c1tmbG9hdEluZGV4XS5yZWN0LnkoKSA6IGZs
b2F0c1tmbG9hdEluZGV4XS5yZWN0LngoKTsKICAgICAgICAgICAgIExheW91dFVuaXQgZmxvYXRI
ZWlnaHQgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbWF4KGZsb2F0c1tmbG9hdEluZGV4
XS5yZWN0LmhlaWdodCgpLCBuZXdTaXplLmhlaWdodCgpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1heChmbG9hdHNb
ZmxvYXRJbmRleF0ucmVjdC53aWR0aCgpLCBuZXdTaXplLndpZHRoKCkpOwotICAgICAgICAgICAg
ZmxvYXRIZWlnaHQgPSBtaW4oZmxvYXRIZWlnaHQsIE1BWF9MQVlPVVRfVU5JVCAtIGZsb2F0VG9w
KTsKKyAgICAgICAgICAgIGZsb2F0SGVpZ2h0ID0gbWluKGZsb2F0SGVpZ2h0LCBMYXlvdXRVbml0
OjptYXgoKSAtIGZsb2F0VG9wKTsKICAgICAgICAgICAgIGxpbmUtPm1hcmtEaXJ0eSgpOwogICAg
ICAgICAgICAgbWFya0xpbmVzRGlydHlJbkJsb2NrUmFuZ2UobGluZS0+bGluZUJvdHRvbVdpdGhM
ZWFkaW5nKCksIGZsb2F0VG9wICsgZmxvYXRIZWlnaHQsIGxpbmUpOwogICAgICAgICAgICAgZmxv
YXRzW2Zsb2F0SW5kZXhdLnJlY3Quc2V0U2l6ZShuZXdTaXplKTsKQEAgLTE5NTQsNyArMTk1NCw3
IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmNoZWNrUGFnaW5hdGlvbkFuZEZsb2EKICAgICB3aGlsZSAo
Um9vdElubGluZUJveCogbmV4dExpbmUgPSBsYXN0TGluZS0+bmV4dFJvb3RCb3goKSkKICAgICAg
ICAgbGFzdExpbmUgPSBuZXh0TGluZTsKIAotICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSA9
IGxhc3RMaW5lLT5saW5lQm90dG9tV2l0aExlYWRpbmcoKSArIGFic29sdXRlVmFsdWUobGluZURl
bHRhKTsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20gPSBsYXN0TGluZS0+bGluZUJvdHRv
bVdpdGhMZWFkaW5nKCkgKyBsaW5lRGVsdGEuYWJzKCk7CiAKICAgICBjb25zdCBGbG9hdGluZ09i
amVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAg
ICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQo
KTsKQEAgLTI5MjAsNyArMjkyMCw3IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpMaW5l
QnJlYWtlcjoKIAogdm9pZCBSZW5kZXJCbG9jazo6YWRkT3ZlcmZsb3dGcm9tSW5saW5lQ2hpbGRy
ZW4oKQogewotICAgIExheW91dFVuaXQgZW5kUGFkZGluZyA9IGhhc092ZXJmbG93Q2xpcCgpID8g
cGFkZGluZ0VuZCgpIDogWkVST19MQVlPVVRfVU5JVDsKKyAgICBMYXlvdXRVbml0IGVuZFBhZGRp
bmcgPSBoYXNPdmVyZmxvd0NsaXAoKSA/IHBhZGRpbmdFbmQoKSA6IExheW91dFVuaXQoKTsKICAg
ICAvLyBGSVhNRTogTmVlZCB0byBmaW5kIGFub3RoZXIgd2F5IHRvIGRvIHRoaXMsIHNpbmNlIHNj
cm9sbGJhcnMgY291bGQgc2hvdyB3aGVuIHdlIGRvbid0IHdhbnQgdGhlbSB0by4KICAgICBpZiAo
aGFzT3ZlcmZsb3dDbGlwKCkgJiYgIWVuZFBhZGRpbmcgJiYgbm9kZSgpICYmIG5vZGUoKS0+aXNS
b290RWRpdGFibGVFbGVtZW50KCkgJiYgc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
KQogICAgICAgICBlbmRQYWRkaW5nID0gMTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwCShyZXZpc2lvbiAxMzM1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYzLDcgKzM2Myw3IEBAIGludCBS
ZW5kZXJCb3g6OnNjcm9sbFdpZHRoKCkgY29uc3QKICAgICAvLyBGSVhNRTogTmVlZCB0byB3b3Jr
IHJpZ2h0IHdpdGggd3JpdGluZyBtb2Rlcy4KICAgICBpZiAoc3R5bGUoKS0+aXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpKQogICAgICAgICByZXR1cm4gc25hcFNpemVUb1BpeGVsKG1heChjbGllbnRX
aWR0aCgpLCBsYXlvdXRPdmVyZmxvd1JlY3QoKS5tYXhYKCkgLSBib3JkZXJMZWZ0KCkpLCB4KCkg
KyBjbGllbnRMZWZ0KCkpOwotICAgIHJldHVybiBjbGllbnRXaWR0aCgpIC0gbWluKFpFUk9fTEFZ
T1VUX1VOSVQsIGxheW91dE92ZXJmbG93UmVjdCgpLngoKSAtIGJvcmRlckxlZnQoKSk7CisgICAg
cmV0dXJuIGNsaWVudFdpZHRoKCkgLSBtaW4oTGF5b3V0VW5pdCgpLCBsYXlvdXRPdmVyZmxvd1Jl
Y3QoKS54KCkgLSBib3JkZXJMZWZ0KCkpOwogfQogCiBpbnQgUmVuZGVyQm94OjpzY3JvbGxIZWln
aHQoKSBjb25zdApAQCAtMTE3OSw3ICsxMTc5LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OnNo
cmlua0xvZ2ljYWxXaWR0aAogICAgIExheW91dFVuaXQgbG9naWNhbFRvcFBvc2l0aW9uID0gbG9n
aWNhbFRvcCgpOwogICAgIExheW91dFVuaXQgYWRqdXN0ZWRQYWdlT2Zmc2V0Rm9yQ29udGFpbmlu
Z0Jsb2NrID0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSAtIGxvZ2ljYWxUb3AoKTsK
ICAgICBpZiAocmVnaW9uKSB7Ci0gICAgICAgIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxU
b3BPZlJlZ2lvbiA9IHJlZ2lvbiA/IHJlZ2lvbi0+bG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250
ZW50KCkgLSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlIDogWkVST19MQVlPVVRfVU5J
VDsKKyAgICAgICAgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mUmVnaW9uID0gcmVn
aW9uID8gcmVnaW9uLT5sb2dpY2FsVG9wRm9yRmxvd1RocmVhZENvbnRlbnQoKSAtIG9mZnNldEZy
b21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UgOiBMYXlvdXRVbml0KCk7CiAgICAgICAgIGxvZ2ljYWxU
b3BQb3NpdGlvbiA9IG1heChsb2dpY2FsVG9wUG9zaXRpb24sIGxvZ2ljYWxUb3BQb3NpdGlvbiAr
IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZSZWdpb24pOwogICAgICAgICBjb250YWluaW5nQmxvY2tS
ZWdpb24gPSBjYi0+Y2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhyZWdpb24pOwogICAgIH0KQEAg
LTEyNDEsNyArMTI0MSw3IEBAIExheW91dFVuaXQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tB
dmEKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3BQb3NpdGlvbiA9IGxvZ2ljYWxUb3AoKTsKICAg
ICBMYXlvdXRVbml0IGFkanVzdGVkUGFnZU9mZnNldEZvckNvbnRhaW5pbmdCbG9jayA9IG9mZnNl
dEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UgLSBsb2dpY2FsVG9wKCk7CiAgICAgaWYgKHJlZ2lv
bikgewotICAgICAgICBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZSZWdpb24gPSBy
ZWdpb24gPyByZWdpb24tPmxvZ2ljYWxUb3BGb3JGbG93VGhyZWFkQ29udGVudCgpIC0gb2Zmc2V0
RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSA6IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAgIExh
eW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZlJlZ2lvbiA9IHJlZ2lvbiA/IHJlZ2lvbi0+
bG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCkgLSBvZmZzZXRGcm9tTG9naWNhbFRvcE9m
Rmlyc3RQYWdlIDogTGF5b3V0VW5pdCgpOwogICAgICAgICBsb2dpY2FsVG9wUG9zaXRpb24gPSBt
YXgobG9naWNhbFRvcFBvc2l0aW9uLCBsb2dpY2FsVG9wUG9zaXRpb24gKyBvZmZzZXRGcm9tTG9n
aWNhbFRvcE9mUmVnaW9uKTsKICAgICAgICAgY29udGFpbmluZ0Jsb2NrUmVnaW9uID0gY2ItPmNs
YW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMocmVnaW9uKTsKICAgICB9CkBAIC0zNTMzLDcgKzM1MzMs
NyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQm94Ojpwb3NpdGlvbkZvclBvCiAgICAgfQogCiAg
ICAgLy8gUGFzcyBvZmYgdG8gdGhlIGNsb3Nlc3QgY2hpbGQuCi0gICAgTGF5b3V0VW5pdCBtaW5E
aXN0ID0gTUFYX0xBWU9VVF9VTklUOworICAgIExheW91dFVuaXQgbWluRGlzdCA9IExheW91dFVu
aXQ6Om1heCgpOwogICAgIFJlbmRlckJveCogY2xvc2VzdFJlbmRlcmVyID0gMDsKICAgICBMYXlv
dXRQb2ludCBhZGp1c3RlZFBvaW50ID0gcG9pbnQ7CiAgICAgaWYgKGlzVGFibGVSb3coKSkKQEAg
LTM1NDksOSArMzU0OSw5IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJCb3g6OnBvc2l0aW9uRm9y
UG8KICAgICAgICAgCiAgICAgICAgIFJlbmRlckJveCogcmVuZGVyZXIgPSB0b1JlbmRlckJveChy
ZW5kZXJPYmplY3QpOwogCi0gICAgICAgIExheW91dFVuaXQgdG9wID0gcmVuZGVyZXItPmJvcmRl
clRvcCgpICsgcmVuZGVyZXItPnBhZGRpbmdUb3AoKSArIChpc1RhYmxlUm93KCkgPyBaRVJPX0xB
WU9VVF9VTklUIDogcmVuZGVyZXItPnkoKSk7CisgICAgICAgIExheW91dFVuaXQgdG9wID0gcmVu
ZGVyZXItPmJvcmRlclRvcCgpICsgcmVuZGVyZXItPnBhZGRpbmdUb3AoKSArIChpc1RhYmxlUm93
KCkgPyBMYXlvdXRVbml0KCkgOiByZW5kZXJlci0+eSgpKTsKICAgICAgICAgTGF5b3V0VW5pdCBi
b3R0b20gPSB0b3AgKyByZW5kZXJlci0+Y29udGVudEhlaWdodCgpOwotICAgICAgICBMYXlvdXRV
bml0IGxlZnQgPSByZW5kZXJlci0+Ym9yZGVyTGVmdCgpICsgcmVuZGVyZXItPnBhZGRpbmdMZWZ0
KCkgKyAoaXNUYWJsZVJvdygpID8gWkVST19MQVlPVVRfVU5JVCA6IHJlbmRlcmVyLT54KCkpOwor
ICAgICAgICBMYXlvdXRVbml0IGxlZnQgPSByZW5kZXJlci0+Ym9yZGVyTGVmdCgpICsgcmVuZGVy
ZXItPnBhZGRpbmdMZWZ0KCkgKyAoaXNUYWJsZVJvdygpID8gTGF5b3V0VW5pdCgpIDogcmVuZGVy
ZXItPngoKSk7CiAgICAgICAgIExheW91dFVuaXQgcmlnaHQgPSBsZWZ0ICsgcmVuZGVyZXItPmNv
bnRlbnRXaWR0aCgpOwogICAgICAgICAKICAgICAgICAgaWYgKHBvaW50LngoKSA8PSByaWdodCAm
JiBwb2ludC54KCkgPj0gbGVmdCAmJiBwb2ludC55KCkgPD0gdG9wICYmIHBvaW50LnkoKSA+PSBi
b3R0b20pIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlzaW9u
IDEzMzUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBwdWJsaWM6CiAgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
V2lkdGgoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
ID8gd2lkdGgoKSA6IGhlaWdodCgpOyB9CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGhlaWdo
dCgpIDogd2lkdGgoKTsgfQogCi0gICAgTGF5b3V0VW5pdCBjb25zdHJhaW5Mb2dpY2FsV2lkdGhJ
blJlZ2lvbkJ5TWluTWF4KExheW91dFVuaXQsIExheW91dFVuaXQsIFJlbmRlckJsb2NrKiwgUmVu
ZGVyUmVnaW9uKiA9IDAsIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFn
ZSA9IFpFUk9fTEFZT1VUX1VOSVQpIGNvbnN0OworICAgIExheW91dFVuaXQgY29uc3RyYWluTG9n
aWNhbFdpZHRoSW5SZWdpb25CeU1pbk1heChMYXlvdXRVbml0LCBMYXlvdXRVbml0LCBSZW5kZXJC
bG9jayosIFJlbmRlclJlZ2lvbiogPSAwLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9w
T2ZGaXJzdFBhZ2UgPSBMYXlvdXRVbml0KCkpIGNvbnN0OwogICAgIExheW91dFVuaXQgY29uc3Ry
YWluTG9naWNhbEhlaWdodEJ5TWluTWF4KExheW91dFVuaXQpIGNvbnN0OwogCiAgICAgaW50IHBp
eGVsU25hcHBlZExvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpID8gcGl4ZWxTbmFwcGVkSGVpZ2h0KCkgOiBwaXhlbFNuYXBwZWRX
aWR0aCgpOyB9CkBAIC0zNzUsNyArMzc1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBj
b21wdXRlTG9naWNhbEhlaWdodChMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIExheW91dFVuaXQg
bG9naWNhbFRvcCwgTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJikgY29uc3Q7CiAKICAgICBS
ZW5kZXJCb3hSZWdpb25JbmZvKiByZW5kZXJCb3hSZWdpb25JbmZvKFJlbmRlclJlZ2lvbiosIExh
eW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSwgUmVuZGVyQm94UmVnaW9u
SW5mb0ZsYWdzID0gQ2FjaGVSZW5kZXJCb3hSZWdpb25JbmZvKSBjb25zdDsKLSAgICB2b2lkIGNv
bXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvbihMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmLCBS
ZW5kZXJSZWdpb24qID0gMCwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQ
YWdlID0gWkVST19MQVlPVVRfVU5JVCkgY29uc3Q7CisgICAgdm9pZCBjb21wdXRlTG9naWNhbFdp
ZHRoSW5SZWdpb24oTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJiwgUmVuZGVyUmVnaW9uKiA9
IDAsIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSA9IExheW91dFVu
aXQoKSkgY29uc3Q7CiAKICAgICBib29sIHN0cmV0Y2hlc1RvVmlld3BvcnQoKSBjb25zdAogICAg
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcAkocmV2aXNpb24gMTMzNTM5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUyLDcgKzU1Miw3
IEBAIGludCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGl4ZWxTbmFwcGVkT2YKIAogTGF5b3V0VW5p
dCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0ZWRDU1NQYWRkaW5nVG9wKCkgY29uc3QKIHsK
LSAgICBMYXlvdXRVbml0IHcgPSBaRVJPX0xBWU9VVF9VTklUOworICAgIExheW91dFVuaXQgdyA9
IExheW91dFVuaXQoKTsKICAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gMDsKICAgICBMZW5n
dGggcGFkZGluZyA9IHN0eWxlKCktPnBhZGRpbmdUb3AoKTsKICAgICBpZiAocGFkZGluZy5pc1Bl
cmNlbnQoKSkKQEAgLTU2NCw3ICs1NjQsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJveE1vZGVsT2Jq
ZWN0Ojpjb21wdXRlCiAKIExheW91dFVuaXQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVk
Q1NTUGFkZGluZ0JvdHRvbSgpIGNvbnN0CiB7Ci0gICAgTGF5b3V0VW5pdCB3ID0gWkVST19MQVlP
VVRfVU5JVDsKKyAgICBMYXlvdXRVbml0IHcgPSBMYXlvdXRVbml0KCk7CiAgICAgUmVuZGVyVmll
dyogcmVuZGVyVmlldyA9IDA7CiAgICAgTGVuZ3RoIHBhZGRpbmcgPSBzdHlsZSgpLT5wYWRkaW5n
Qm90dG9tKCk7CiAgICAgaWYgKHBhZGRpbmcuaXNQZXJjZW50KCkpCkBAIC01NzYsNyArNTc2LDcg
QEAgTGF5b3V0VW5pdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0ZQogCiBMYXlvdXRVbml0
IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlZENTU1BhZGRpbmdMZWZ0KCkgY29uc3QKIHsK
LSAgICBMYXlvdXRVbml0IHcgPSBaRVJPX0xBWU9VVF9VTklUOworICAgIExheW91dFVuaXQgdyA9
IExheW91dFVuaXQoKTsKICAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gMDsKICAgICBMZW5n
dGggcGFkZGluZyA9IHN0eWxlKCktPnBhZGRpbmdMZWZ0KCk7CiAgICAgaWYgKHBhZGRpbmcuaXNQ
ZXJjZW50KCkpCkBAIC01ODgsNyArNTg4LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3hNb2RlbE9i
amVjdDo6Y29tcHV0ZQogCiBMYXlvdXRVbml0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRl
ZENTU1BhZGRpbmdSaWdodCgpIGNvbnN0CiB7Ci0gICAgTGF5b3V0VW5pdCB3ID0gWkVST19MQVlP
VVRfVU5JVDsKKyAgICBMYXlvdXRVbml0IHcgPSBMYXlvdXRVbml0KCk7CiAgICAgUmVuZGVyVmll
dyogcmVuZGVyVmlldyA9IDA7CiAgICAgTGVuZ3RoIHBhZGRpbmcgPSBzdHlsZSgpLT5wYWRkaW5n
UmlnaHQoKTsKICAgICBpZiAocGFkZGluZy5pc1BlcmNlbnQoKSkKQEAgLTYwMCw3ICs2MDAsNyBA
QCBMYXlvdXRVbml0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlCiAKIExheW91dFVuaXQg
UmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVkQ1NTUGFkZGluZ0JlZm9yZSgpIGNvbnN0CiB7
Ci0gICAgTGF5b3V0VW5pdCB3ID0gWkVST19MQVlPVVRfVU5JVDsKKyAgICBMYXlvdXRVbml0IHcg
PSBMYXlvdXRVbml0KCk7CiAgICAgUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IDA7CiAgICAgTGVu
Z3RoIHBhZGRpbmcgPSBzdHlsZSgpLT5wYWRkaW5nQmVmb3JlKCk7CiAgICAgaWYgKHBhZGRpbmcu
aXNQZXJjZW50KCkpCkBAIC02MTIsNyArNjEyLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6Y29tcHV0ZQogCiBMYXlvdXRVbml0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21w
dXRlZENTU1BhZGRpbmdBZnRlcigpIGNvbnN0CiB7Ci0gICAgTGF5b3V0VW5pdCB3ID0gWkVST19M
QVlPVVRfVU5JVDsKKyAgICBMYXlvdXRVbml0IHcgPSBMYXlvdXRVbml0KCk7CiAgICAgUmVuZGVy
VmlldyogcmVuZGVyVmlldyA9IDA7CiAgICAgTGVuZ3RoIHBhZGRpbmcgPSBzdHlsZSgpLT5wYWRk
aW5nQWZ0ZXIoKTsKICAgICBpZiAocGFkZGluZy5pc1BlcmNlbnQoKSkKQEAgLTYyNCw3ICs2MjQs
NyBAQCBMYXlvdXRVbml0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlCiAKIExheW91dFVu
aXQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVkQ1NTUGFkZGluZ1N0YXJ0KCkgY29uc3QK
IHsKLSAgICBMYXlvdXRVbml0IHcgPSBaRVJPX0xBWU9VVF9VTklUOworICAgIExheW91dFVuaXQg
dyA9IExheW91dFVuaXQoKTsKICAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gMDsKICAgICBM
ZW5ndGggcGFkZGluZyA9IHN0eWxlKCktPnBhZGRpbmdTdGFydCgpOwogICAgIGlmIChwYWRkaW5n
LmlzUGVyY2VudCgpKQpAQCAtNjM2LDcgKzYzNiw3IEBAIExheW91dFVuaXQgUmVuZGVyQm94TW9k
ZWxPYmplY3Q6OmNvbXB1dGUKIAogTGF5b3V0VW5pdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29t
cHV0ZWRDU1NQYWRkaW5nRW5kKCkgY29uc3QKIHsKLSAgICBMYXlvdXRVbml0IHcgPSBaRVJPX0xB
WU9VVF9VTklUOworICAgIExheW91dFVuaXQgdyA9IExheW91dFVuaXQoKTsKICAgICBSZW5kZXJW
aWV3KiByZW5kZXJWaWV3ID0gMDsKICAgICBMZW5ndGggcGFkZGluZyA9IHN0eWxlKCktPnBhZGRp
bmdFbmQoKTsKICAgICBpZiAocGFkZGluZy5pc1BlcmNlbnQoKSkKQEAgLTgwMCw4ICs4MDAsOCBA
QCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllCiAgICAgCiAgICAgaW50
IGJMZWZ0ID0gaW5jbHVkZUxlZnRFZGdlID8gYm9yZGVyTGVmdCgpIDogMDsKICAgICBpbnQgYlJp
Z2h0ID0gaW5jbHVkZVJpZ2h0RWRnZSA/IGJvcmRlclJpZ2h0KCkgOiAwOwotICAgIExheW91dFVu
aXQgcExlZnQgPSBpbmNsdWRlTGVmdEVkZ2UgPyBwYWRkaW5nTGVmdCgpIDogWkVST19MQVlPVVRf
VU5JVDsKLSAgICBMYXlvdXRVbml0IHBSaWdodCA9IGluY2x1ZGVSaWdodEVkZ2UgPyBwYWRkaW5n
UmlnaHQoKSA6IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgTGF5b3V0VW5pdCBwTGVmdCA9IGluY2x1
ZGVMZWZ0RWRnZSA/IHBhZGRpbmdMZWZ0KCkgOiBMYXlvdXRVbml0KCk7CisgICAgTGF5b3V0VW5p
dCBwUmlnaHQgPSBpbmNsdWRlUmlnaHRFZGdlID8gcGFkZGluZ1JpZ2h0KCkgOiBMYXlvdXRVbml0
KCk7CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIGNsaXBXaXRoU2Nyb2xsaW5nU3Rh
dGVTYXZlcigqY29udGV4dCwgY2xpcHBlZFdpdGhMb2NhbFNjcm9sbGluZyk7CiAgICAgTGF5b3V0
UmVjdCBzY3JvbGxlZFBhaW50UmVjdCA9IHJlY3Q7CkBAIC04MjUsMTAgKzgyNSwxMCBAQCB2b2lk
IFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllCiAgICAgICAgIC8vIENsaXAgdG8g
dGhlIHBhZGRpbmcgb3IgY29udGVudCBib3hlcyBhcyBuZWNlc3NhcnkuCiAgICAgICAgIGlmICgh
Y2xpcFRvQm9yZGVyUmFkaXVzKSB7CiAgICAgICAgICAgICBib29sIGluY2x1ZGVQYWRkaW5nID0g
YmdMYXllci0+Y2xpcCgpID09IENvbnRlbnRGaWxsQm94OwotICAgICAgICAgICAgTGF5b3V0UmVj
dCBjbGlwUmVjdCA9IExheW91dFJlY3Qoc2Nyb2xsZWRQYWludFJlY3QueCgpICsgYkxlZnQgKyAo
aW5jbHVkZVBhZGRpbmcgPyBwTGVmdCA6IFpFUk9fTEFZT1VUX1VOSVQpLAotICAgICAgICAgICAg
ICAgIHNjcm9sbGVkUGFpbnRSZWN0LnkoKSArIGJvcmRlclRvcCgpICsgKGluY2x1ZGVQYWRkaW5n
ID8gcGFkZGluZ1RvcCgpIDogWkVST19MQVlPVVRfVU5JVCksCi0gICAgICAgICAgICAgICAgc2Ny
b2xsZWRQYWludFJlY3Qud2lkdGgoKSAtIGJMZWZ0IC0gYlJpZ2h0IC0gKGluY2x1ZGVQYWRkaW5n
ID8gcExlZnQgKyBwUmlnaHQgOiBaRVJPX0xBWU9VVF9VTklUKSwKLSAgICAgICAgICAgICAgICBz
Y3JvbGxlZFBhaW50UmVjdC5oZWlnaHQoKSAtIGJvcmRlclRvcCgpIC0gYm9yZGVyQm90dG9tKCkg
LSAoaW5jbHVkZVBhZGRpbmcgPyBwYWRkaW5nVG9wKCkgKyBwYWRkaW5nQm90dG9tKCkgOiBaRVJP
X0xBWU9VVF9VTklUKSk7CisgICAgICAgICAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0gTGF5b3V0
UmVjdChzY3JvbGxlZFBhaW50UmVjdC54KCkgKyBiTGVmdCArIChpbmNsdWRlUGFkZGluZyA/IHBM
ZWZ0IDogTGF5b3V0VW5pdCgpKSwKKyAgICAgICAgICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC55
KCkgKyBib3JkZXJUb3AoKSArIChpbmNsdWRlUGFkZGluZyA/IHBhZGRpbmdUb3AoKSA6IExheW91
dFVuaXQoKSksCisgICAgICAgICAgICAgICAgc2Nyb2xsZWRQYWludFJlY3Qud2lkdGgoKSAtIGJM
ZWZ0IC0gYlJpZ2h0IC0gKGluY2x1ZGVQYWRkaW5nID8gcExlZnQgKyBwUmlnaHQgOiBMYXlvdXRV
bml0KCkpLAorICAgICAgICAgICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LmhlaWdodCgpIC0gYm9y
ZGVyVG9wKCkgLSBib3JkZXJCb3R0b20oKSAtIChpbmNsdWRlUGFkZGluZyA/IHBhZGRpbmdUb3Ao
KSArIHBhZGRpbmdCb3R0b20oKSA6IExheW91dFVuaXQoKSkpOwogICAgICAgICAgICAgYmFja2dy
b3VuZENsaXBTdGF0ZVNhdmVyLnNhdmUoKTsKICAgICAgICAgICAgIGNvbnRleHQtPmNsaXAoY2xp
cFJlY3QpOwogICAgICAgICB9CkBAIC0yNzI5LDcgKzI3MjksNyBAQCBMYXlvdXRSZWN0IFJlbmRl
ckJveE1vZGVsT2JqZWN0Ojpsb2NhbENhCiAgICAgICAgICAgICB4IC09IHRleHRJbmRlbnRPZmZz
ZXQ7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICB4ID0gbWluKHgsIG1heChtYXhYIC0gY2Fy
ZXRXaWR0aCwgWkVST19MQVlPVVRfVU5JVCkpOworICAgIHggPSBtaW4oeCwgbWF4KG1heFggLSBj
YXJldFdpZHRoLCBMYXlvdXRVbml0KCkpKTsKIAogICAgIExheW91dFVuaXQgeSA9IHBhZGRpbmdU
b3AoKSArIGJvcmRlclRvcCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAkocmV2aXNpb24gMTMzNTM5KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI0LDcgKzI0LDcgQEAKICNpZm5kZWYgUmVuZGVyQm94TW9kZWxPYmplY3RfaAogI2RlZmluZSBS
ZW5kZXJCb3hNb2RlbE9iamVjdF9oCiAKLSNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZU1ldGhv
ZHMuaCIKKyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdC5oIgogI2luY2x1ZGUgIlNoYWRvd0RhdGEuaCIKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5j
cHAJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJE
ZXByZWNhdGVkRmxleGlibGVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzIsNyArNTMyLDcg
QEAgdm9pZCBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6OmxheW91dAogICAgICAgICAgICAg
ICAgICAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBpdGVyYXRvci5maXJzdCgpOyBjaGlsZDsg
Y2hpbGQgPSBpdGVyYXRvci5uZXh0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIExheW91
dFVuaXQgYWxsb3dlZEZsZXggPSBhbGxvd2VkQ2hpbGRGbGV4KGNoaWxkLCBleHBhbmRpbmcsIGkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG93ZWRGbGV4KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBwcm9qZWN0ZWRGbGV4ID0gKGFsbG93ZWRGbGV4
ID09IE1BWF9MQVlPVVRfVU5JVCkgPyBhbGxvd2VkRmxleCA6IExheW91dFVuaXQoYWxsb3dlZEZs
ZXggKiAodG90YWxGbGV4IC8gY2hpbGQtPnN0eWxlKCktPmJveEZsZXgoKSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgcHJvamVjdGVkRmxleCA9IChhbGxvd2VkRmxl
eCA9PSBMYXlvdXRVbml0OjptYXgoKSkgPyBhbGxvd2VkRmxleCA6IExheW91dFVuaXQoYWxsb3dl
ZEZsZXggKiAodG90YWxGbGV4IC8gY2hpbGQtPnN0eWxlKCktPmJveEZsZXgoKSkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNwYWNlQXZhaWxhYmxlVGhpc1Bhc3MgPSBleHBhbmRpbmcg
PyBtaW4oc3BhY2VBdmFpbGFibGVUaGlzUGFzcywgcHJvamVjdGVkRmxleCkgOiBtYXgoc3BhY2VB
dmFpbGFibGVUaGlzUGFzcywgcHJvamVjdGVkRmxleCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTU3Nyw3ICs1NzcsNyBAQCB2b2lkIFJlbmRl
ckRlcHJlY2F0ZWRGbGV4aWJsZUJveDo6bGF5b3V0CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfSB3aGlsZSAoYWJzb2x1dGVWYWx1ZShncm91cFJlbWFpbmluZ1NwYWNl
KSA+PSAxKTsKKyAgICAgICAgICAgICAgICB9IHdoaWxlIChncm91cFJlbWFpbmluZ1NwYWNlLmFi
cygpID49IDEpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBXZSBkaWRuJ3QgZmlu
ZCBhbnkgY2hpbGRyZW4gdGhhdCBjb3VsZCBncm93LgpAQCAtNzg2LDcgKzc4Niw3IEBAIHZvaWQg
UmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjpsYXlvdXQKICAgICAgICAgICAgICAgICAgICAg
Zm9yIChSZW5kZXJCb3gqIGNoaWxkID0gaXRlcmF0b3IuZmlyc3QoKTsgY2hpbGQ7IGNoaWxkID0g
aXRlcmF0b3IubmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGFs
bG93ZWRGbGV4ID0gYWxsb3dlZENoaWxkRmxleChjaGlsZCwgZXhwYW5kaW5nLCBpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChhbGxvd2VkRmxleCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIExheW91dFVuaXQgcHJvamVjdGVkRmxleCA9IChhbGxvd2VkRmxleCA9PSBNQVhf
TEFZT1VUX1VOSVQpID8gYWxsb3dlZEZsZXggOiBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PihhbGxv
d2VkRmxleCAqICh0b3RhbEZsZXggLyBjaGlsZC0+c3R5bGUoKS0+Ym94RmxleCgpKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBwcm9qZWN0ZWRGbGV4ID0gKGFsbG93
ZWRGbGV4ID09IExheW91dFVuaXQ6Om1heCgpKSA/IGFsbG93ZWRGbGV4IDogc3RhdGljX2Nhc3Q8
TGF5b3V0VW5pdD4oYWxsb3dlZEZsZXggKiAodG90YWxGbGV4IC8gY2hpbGQtPnN0eWxlKCktPmJv
eEZsZXgoKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlQXZhaWxhYmxlVGhp
c1Bhc3MgPSBleHBhbmRpbmcgPyBtaW4oc3BhY2VBdmFpbGFibGVUaGlzUGFzcywgcHJvamVjdGVk
RmxleCkgOiBtYXgoc3BhY2VBdmFpbGFibGVUaGlzUGFzcywgcHJvamVjdGVkRmxleCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTgyOCw3ICs4
MjgsNyBAQCB2b2lkIFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveDo6bGF5b3V0CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAoYWJzb2x1dGVWYWx1ZShn
cm91cFJlbWFpbmluZ1NwYWNlKSA+PSAxKTsKKyAgICAgICAgICAgICAgICB9IHdoaWxlIChncm91
cFJlbWFpbmluZ1NwYWNlLmFicygpID49IDEpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICAvLyBXZSBkaWRuJ3QgZmluZCBhbnkgY2hpbGRyZW4gdGhhdCBjb3VsZCBncm93LgpAQCAtMTAz
Miw3ICsxMDMyLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6Ogog
ICAgIGlmIChleHBhbmRpbmcpIHsKICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCgpKSB7CiAgICAg
ICAgICAgICAvLyBGSVhNRTogRm9yIG5vdyBqdXN0IGhhbmRsZSBmaXhlZCB2YWx1ZXMuCi0gICAg
ICAgICAgICBMYXlvdXRVbml0IG1heFdpZHRoID0gTUFYX0xBWU9VVF9VTklUOworICAgICAgICAg
ICAgTGF5b3V0VW5pdCBtYXhXaWR0aCA9IExheW91dFVuaXQ6Om1heCgpOwogICAgICAgICAgICAg
TGF5b3V0VW5pdCB3aWR0aCA9IGNvbnRlbnRXaWR0aEZvckNoaWxkKGNoaWxkKTsKICAgICAgICAg
ICAgIGlmICghY2hpbGQtPnN0eWxlKCktPm1heFdpZHRoKCkuaXNVbmRlZmluZWQoKSAmJiBjaGls
ZC0+c3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkpCiAgICAgICAgICAgICAgICAgbWF4V2lk
dGggPSBjaGlsZC0+c3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpOwpAQCAtMTA0MCwxNiArMTA0
MCwxNiBAQCBMYXlvdXRVbml0IFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveDo6CiAgICAgICAg
ICAgICAgICAgbWF4V2lkdGggPSBjaGlsZC0+bWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCk7CiAg
ICAgICAgICAgICBlbHNlIGlmIChjaGlsZC0+c3R5bGUoKS0+bWF4V2lkdGgoKS50eXBlKCkgPT0g
TWluSW50cmluc2ljKQogICAgICAgICAgICAgICAgIG1heFdpZHRoID0gY2hpbGQtPm1pblByZWZl
cnJlZExvZ2ljYWxXaWR0aCgpOwotICAgICAgICAgICAgaWYgKG1heFdpZHRoID09IE1BWF9MQVlP
VVRfVU5JVCkKKyAgICAgICAgICAgIGlmIChtYXhXaWR0aCA9PSBMYXlvdXRVbml0OjptYXgoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gbWF4V2lkdGg7CiAgICAgICAgICAgICByZXR1cm4gbWF4
PExheW91dFVuaXQ+KDAsIG1heFdpZHRoIC0gd2lkdGgpOwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgLy8gRklYTUU6IEZvciBub3cganVzdCBoYW5kbGUgZml4ZWQgdmFsdWVzLgotICAg
ICAgICAgICAgTGF5b3V0VW5pdCBtYXhIZWlnaHQgPSBNQVhfTEFZT1VUX1VOSVQ7CisgICAgICAg
ICAgICBMYXlvdXRVbml0IG1heEhlaWdodCA9IExheW91dFVuaXQ6Om1heCgpOwogICAgICAgICAg
ICAgTGF5b3V0VW5pdCBoZWlnaHQgPSBjb250ZW50SGVpZ2h0Rm9yQ2hpbGQoY2hpbGQpOwogICAg
ICAgICAgICAgaWYgKCFjaGlsZC0+c3R5bGUoKS0+bWF4SGVpZ2h0KCkuaXNVbmRlZmluZWQoKSAm
JiBjaGlsZC0+c3R5bGUoKS0+bWF4SGVpZ2h0KCkuaXNGaXhlZCgpKQogICAgICAgICAgICAgICAg
IG1heEhlaWdodCA9IGNoaWxkLT5zdHlsZSgpLT5tYXhIZWlnaHQoKS52YWx1ZSgpOwotICAgICAg
ICAgICAgaWYgKG1heEhlaWdodCA9PSBNQVhfTEFZT1VUX1VOSVQpCisgICAgICAgICAgICBpZiAo
bWF4SGVpZ2h0ID09IExheW91dFVuaXQ6Om1heCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBt
YXhIZWlnaHQ7CiAgICAgICAgICAgICByZXR1cm4gbWF4PExheW91dFVuaXQ+KDAsIG1heEhlaWdo
dCAtIGhlaWdodCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGaWVsZHNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZpZWxkc2V0LmNwcAkocmV2aXNpb24gMTMzNTM5KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDExICsx
NDksMTEgQEAgdm9pZCBSZW5kZXJGaWVsZHNldDo6cGFpbnRCb3hEZWNvcmF0aW9ucwogICAgIC8v
IGNhc2VzIHRoZSBsZWdlbmQgaXMgZW1iZWRkZWQgaW4gdGhlIHJpZ2h0IGFuZCBib3R0b20gYm9y
ZGVycyByZXNwZWN0aXZlbHkuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ3MjM2CiAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkpIHsKLSAgICAgICAgTGF5b3V0VW5pdCB5T2ZmID0gKGxlZ2VuZC0+eSgpID4gMCkgPyBaRVJP
X0xBWU9VVF9VTklUIDogKGxlZ2VuZC0+aGVpZ2h0KCkgLSBib3JkZXJUb3AoKSkgLyAyOworICAg
ICAgICBMYXlvdXRVbml0IHlPZmYgPSAobGVnZW5kLT55KCkgPiAwKSA/IExheW91dFVuaXQoKSA6
IChsZWdlbmQtPmhlaWdodCgpIC0gYm9yZGVyVG9wKCkpIC8gMjsKICAgICAgICAgcGFpbnRSZWN0
LnNldEhlaWdodChwYWludFJlY3QuaGVpZ2h0KCkgLSB5T2ZmKTsKICAgICAgICAgcGFpbnRSZWN0
LnNldFkocGFpbnRSZWN0LnkoKSArIHlPZmYpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIExheW91
dFVuaXQgeE9mZiA9IChsZWdlbmQtPngoKSA+IDApID8gWkVST19MQVlPVVRfVU5JVCA6IChsZWdl
bmQtPndpZHRoKCkgLSBib3JkZXJMZWZ0KCkpIC8gMjsKKyAgICAgICAgTGF5b3V0VW5pdCB4T2Zm
ID0gKGxlZ2VuZC0+eCgpID4gMCkgPyBMYXlvdXRVbml0KCkgOiAobGVnZW5kLT53aWR0aCgpIC0g
Ym9yZGVyTGVmdCgpKSAvIDI7CiAgICAgICAgIHBhaW50UmVjdC5zZXRXaWR0aChwYWludFJlY3Qu
d2lkdGgoKSAtIHhPZmYpOwogICAgICAgICBwYWludFJlY3Quc2V0WChwYWludFJlY3QueCgpICsg
eE9mZik7CiAgICAgfQpAQCAtMjAwLDExICsyMDAsMTEgQEAgdm9pZCBSZW5kZXJGaWVsZHNldDo6
cGFpbnRNYXNrKFBhaW50SW5mbwogICAgIC8vIGNhc2VzIHRoZSBsZWdlbmQgaXMgZW1iZWRkZWQg
aW4gdGhlIHJpZ2h0IGFuZCBib3R0b20gYm9yZGVycyByZXNwZWN0aXZlbHkuCiAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3MjM2CiAgICAgaWYgKHN0eWxl
KCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgTGF5b3V0VW5pdCB5T2Zm
ID0gKGxlZ2VuZC0+eSgpID4gMCkgPyBaRVJPX0xBWU9VVF9VTklUIDogKGxlZ2VuZC0+aGVpZ2h0
KCkgLSBib3JkZXJUb3AoKSkgLyAyOworICAgICAgICBMYXlvdXRVbml0IHlPZmYgPSAobGVnZW5k
LT55KCkgPiAwKSA/IExheW91dFVuaXQoKSA6IChsZWdlbmQtPmhlaWdodCgpIC0gYm9yZGVyVG9w
KCkpIC8gMjsKICAgICAgICAgcGFpbnRSZWN0LmV4cGFuZCgwLCAteU9mZik7CiAgICAgICAgIHBh
aW50UmVjdC5tb3ZlKDAsIHlPZmYpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIExheW91dFVuaXQg
eE9mZiA9IChsZWdlbmQtPngoKSA+IDApID8gWkVST19MQVlPVVRfVU5JVCA6IChsZWdlbmQtPndp
ZHRoKCkgLSBib3JkZXJMZWZ0KCkpIC8gMjsKKyAgICAgICAgTGF5b3V0VW5pdCB4T2ZmID0gKGxl
Z2VuZC0+eCgpID4gMCkgPyBMYXlvdXRVbml0KCkgOiAobGVnZW5kLT53aWR0aCgpIC0gYm9yZGVy
TGVmdCgpKSAvIDI7CiAgICAgICAgIHBhaW50UmVjdC5leHBhbmQoLXhPZmYsIDApOwogICAgICAg
ICBwYWludFJlY3QubW92ZSh4T2ZmLCAwKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAJKHJldmlzaW9uIDEzMzUzOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM3MSw3ICszNzEsNyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpwYWludENo
aWxkcmVuKFBhCiAKIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OnJlcG9zaXRpb25Mb2dpY2FsSGVp
Z2h0RGVwZW5kZW50RmxleEl0ZW1zKE9yZGVySXRlcmF0b3ImIGl0ZXJhdG9yLCBXVEY6OlZlY3Rv
cjxMaW5lQ29udGV4dD4mIGxpbmVDb250ZXh0cywgTGF5b3V0VW5pdCYgb2xkQ2xpZW50QWZ0ZXJF
ZGdlKQogewotICAgIExheW91dFVuaXQgY3Jvc3NBeGlzU3RhcnRFZGdlID0gbGluZUNvbnRleHRz
LmlzRW1wdHkoKSA/IFpFUk9fTEFZT1VUX1VOSVQgOiBsaW5lQ29udGV4dHNbMF0uY3Jvc3NBeGlz
T2Zmc2V0OworICAgIExheW91dFVuaXQgY3Jvc3NBeGlzU3RhcnRFZGdlID0gbGluZUNvbnRleHRz
LmlzRW1wdHkoKSA/IExheW91dFVuaXQoMCkgOiBsaW5lQ29udGV4dHNbMF0uY3Jvc3NBeGlzT2Zm
c2V0OwogICAgIGFsaWduRmxleExpbmVzKGl0ZXJhdG9yLCBsaW5lQ29udGV4dHMpOwogCiAgICAg
Ly8gSWYgd2UgaGF2ZSBhIHNpbmdsZSBsaW5lIGZsZXhib3gsIHRoZSBsaW5lIGhlaWdodCBpcyBh
bGwgdGhlIGF2YWlsYWJsZSBzcGFjZS4KQEAgLTg5NCw3ICs4OTQsNyBAQCBib29sIFJlbmRlckZs
ZXhpYmxlQm94Ojpjb21wdXRlTmV4dEZsZXhMCiAgICAgaWYgKCFpdGVyYXRvci5jdXJyZW50Q2hp
bGQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTGF5b3V0VW5pdCBsaW5lQnJlYWtM
ZW5ndGggPSBtYWluQXhpc0NvbnRlbnRFeHRlbnQoTUFYX0xBWU9VVF9VTklUKTsKKyAgICBMYXlv
dXRVbml0IGxpbmVCcmVha0xlbmd0aCA9IG1haW5BeGlzQ29udGVudEV4dGVudChMYXlvdXRVbml0
OjptYXgoKSk7CiAKICAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBpdGVyYXRvci5jdXJyZW50
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gaXRlcmF0b3IubmV4dCgpKSB7CiAgICAgICAgIGlmIChj
aGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKQEAgLTEyMzQsNyArMTIzNCw3IEBAIHZv
aWQgUmVuZGVyRmxleGlibGVCb3g6OmFsaWduQ2hpbGRyZW4oT3IKIAogICAgIFJlbmRlckJveCog
Y2hpbGQgPSBpdGVyYXRvci5maXJzdCgpOwogICAgIGZvciAoc2l6ZV90IGxpbmVOdW1iZXIgPSAw
OyBsaW5lTnVtYmVyIDwgbGluZUNvbnRleHRzLnNpemUoKTsgKytsaW5lTnVtYmVyKSB7Ci0gICAg
ICAgIExheW91dFVuaXQgbWluTWFyZ2luQWZ0ZXJCYXNlbGluZSA9IE1BWF9MQVlPVVRfVU5JVDsK
KyAgICAgICAgTGF5b3V0VW5pdCBtaW5NYXJnaW5BZnRlckJhc2VsaW5lID0gTGF5b3V0VW5pdDo6
bWF4KCk7CiAgICAgICAgIExheW91dFVuaXQgbGluZUNyb3NzQXhpc0V4dGVudCA9IGxpbmVDb250
ZXh0c1tsaW5lTnVtYmVyXS5jcm9zc0F4aXNFeHRlbnQ7CiAgICAgICAgIExheW91dFVuaXQgbWF4
QXNjZW50ID0gbGluZUNvbnRleHRzW2xpbmVOdW1iZXJdLm1heEFzY2VudDsKIApAQCAtMTMxOSw3
ICsxMzE5LDcgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6YXBwbHlTdHJldGNoQWxpZwogICAg
IH0gZWxzZSBpZiAoaXNDb2x1bW5GbG93KCkgJiYgY2hpbGQtPnN0eWxlKCktPmxvZ2ljYWxXaWR0
aCgpLmlzQXV0bygpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgY2hpbGQgZG9lc24ndCBo
YXZlIG9ydGhvZ29uYWwgZmxvdywgdGhlbiBpdCBhbHJlYWR5IGhhcyBhbiBvdmVycmlkZSB3aWR0
aCBzZXQsIHNvIHVzZSBpdC4KICAgICAgICAgaWYgKGhhc09ydGhvZ29uYWxGbG93KGNoaWxkKSkg
ewotICAgICAgICAgICAgTGF5b3V0VW5pdCBjaGlsZFdpZHRoID0gc3RkOjptYXgoWkVST19MQVlP
VVRfVU5JVCwgbGluZUNyb3NzQXhpc0V4dGVudCAtIGNyb3NzQXhpc01hcmdpbkV4dGVudEZvckNo
aWxkKGNoaWxkKSk7CisgICAgICAgICAgICBMYXlvdXRVbml0IGNoaWxkV2lkdGggPSBzdGQ6Om1h
eChMYXlvdXRVbml0KCksIGxpbmVDcm9zc0F4aXNFeHRlbnQgLSBjcm9zc0F4aXNNYXJnaW5FeHRl
bnRGb3JDaGlsZChjaGlsZCkpOwogICAgICAgICAgICAgY2hpbGRXaWR0aCA9IGNoaWxkLT5jb25z
dHJhaW5Mb2dpY2FsV2lkdGhJblJlZ2lvbkJ5TWluTWF4KGNoaWxkV2lkdGgsIGNoaWxkV2lkdGgs
IHRoaXMpOwogCiAgICAgICAgICAgICBpZiAoY2hpbGRXaWR0aCAhPSBjaGlsZC0+bG9naWNhbFdp
ZHRoKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFk
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1Ro
cmVhZC5jcHAJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGbG93VGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDcgKzIwMCw3IEBAIHZv
aWQgUmVuZGVyRmxvd1RocmVhZDo6dXBkYXRlTG9naWNhbFdpZHQKICAgICAgICAgUmVuZGVyUmVn
aW9uKiByZWdpb24gPSAqaXRlcjsKICAgICAgICAgTGF5b3V0VW5pdCByZWdpb25Mb2dpY2FsV2lk
dGggPSByZWdpb24tPnBhZ2VMb2dpY2FsV2lkdGgoKTsKICAgICAgICAgaWYgKHJlZ2lvbkxvZ2lj
YWxXaWR0aCAhPSBsb2dpY2FsV2lkdGgpIHsKLSAgICAgICAgICAgIExheW91dFVuaXQgbG9naWNh
bExlZnQgPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBaRVJPX0xBWU9VVF9VTklUIDog
bG9naWNhbFdpZHRoIC0gcmVnaW9uTG9naWNhbFdpZHRoOworICAgICAgICAgICAgTGF5b3V0VW5p
dCBsb2dpY2FsTGVmdCA9IHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IExheW91dFVuaXQo
KSA6IGxvZ2ljYWxXaWR0aCAtIHJlZ2lvbkxvZ2ljYWxXaWR0aDsKICAgICAgICAgICAgIHJlZ2lv
bi0+c2V0UmVuZGVyQm94UmVnaW9uSW5mbyh0aGlzLCBsb2dpY2FsTGVmdCwgcmVnaW9uTG9naWNh
bFdpZHRoLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMjYsNyArMzI2LDcgQEAgUmVu
ZGVyUmVnaW9uKiBSZW5kZXJGbG93VGhyZWFkOjpyZWdpb25BdAogICAgIC8vIHRoZSBsYXN0IHZh
bGlkIHJlZ2lvbi4gSXQgaXMgc2ltaWxhciB0byBhdXRvIGV4dGVuZGluZyB0aGUgc2l6ZSBvZiB0
aGUgbGFzdCByZWdpb24uIAogICAgIFJlbmRlclJlZ2lvbiogbGFzdFZhbGlkUmVnaW9uID0gMDsK
IAotICAgIExheW91dFVuaXQgYWNjdW11bGF0ZWRMb2dpY2FsSGVpZ2h0ID0gWkVST19MQVlPVVRf
VU5JVDsKKyAgICBMYXlvdXRVbml0IGFjY3VtdWxhdGVkTG9naWNhbEhlaWdodDsKICAgICAKICAg
ICAvLyBGSVhNRTogVGhlIHJlZ2lvbnMgYXJlIGFsd2F5cyBpbiBvcmRlciwgb3B0aW1pemUgdGhp
cyBzZWFyY2guCiAgICAgZm9yIChSZW5kZXJSZWdpb25MaXN0Ojpjb25zdF9pdGVyYXRvciBpdGVy
ID0gbV9yZWdpb25MaXN0LmJlZ2luKCk7IGl0ZXIgIT0gbV9yZWdpb25MaXN0LmVuZCgpOyArK2l0
ZXIpIHsKQEAgLTM2Miw3ICszNjIsNyBAQCBSZW5kZXJSZWdpb24qIFJlbmRlckZsb3dUaHJlYWQ6
OnJlZ2lvbkF0CiBMYXlvdXRVbml0IFJlbmRlckZsb3dUaHJlYWQ6OnBhZ2VMb2dpY2FsVG9wRm9y
T2Zmc2V0KExheW91dFVuaXQgb2Zmc2V0KSBjb25zdAogewogICAgIFJlbmRlclJlZ2lvbiogcmVn
aW9uID0gcmVnaW9uQXRCbG9ja09mZnNldChvZmZzZXQpOwotICAgIHJldHVybiByZWdpb24gPyBy
ZWdpb24tPnBhZ2VMb2dpY2FsVG9wRm9yT2Zmc2V0KG9mZnNldCkgOiBaRVJPX0xBWU9VVF9VTklU
OworICAgIHJldHVybiByZWdpb24gPyByZWdpb24tPnBhZ2VMb2dpY2FsVG9wRm9yT2Zmc2V0KG9m
ZnNldCkgOiBMYXlvdXRVbml0KCk7CiB9CiAKIExheW91dFVuaXQgUmVuZGVyRmxvd1RocmVhZDo6
cGFnZUxvZ2ljYWxXaWR0aEZvck9mZnNldChMYXlvdXRVbml0IG9mZnNldCkgY29uc3QKQEAgLTM3
NSw5ICszNzUsOSBAQCBMYXlvdXRVbml0IFJlbmRlckZsb3dUaHJlYWQ6OnBhZ2VMb2dpY2FsCiB7
CiAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KG9mZnNldCk7
CiAgICAgaWYgKCFyZWdpb24pCi0gICAgICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOworICAg
ICAgICByZXR1cm4gTGF5b3V0VW5pdCgpOwogICAgIGlmIChyZWdpb24tPm5lZWRzT3ZlcnJpZGVM
b2dpY2FsQ29udGVudEhlaWdodENvbXB1dGF0aW9uKCkpCi0gICAgICAgIHJldHVybiBNQVhfTEFZ
T1VUX1VOSVQgLyAyOworICAgICAgICByZXR1cm4gTGF5b3V0VW5pdDo6bWF4KCkgLyAyOwogICAg
IHJldHVybiByZWdpb24tPnBhZ2VMb2dpY2FsSGVpZ2h0KCk7CiB9CiAKQEAgLTM4NSw5ICszODUs
OSBAQCBMYXlvdXRVbml0IFJlbmRlckZsb3dUaHJlYWQ6OnBhZ2VSZW1haW5pCiB7CiAgICAgUmVu
ZGVyUmVnaW9uKiByZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KG9mZnNldCk7CiAgICAgaWYg
KCFyZWdpb24pCi0gICAgICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOworICAgICAgICByZXR1
cm4gTGF5b3V0VW5pdCgpOwogICAgIGlmIChyZWdpb24tPm5lZWRzT3ZlcnJpZGVMb2dpY2FsQ29u
dGVudEhlaWdodENvbXB1dGF0aW9uKCkpCi0gICAgICAgIHJldHVybiBNQVhfTEFZT1VUX1VOSVQg
LyAyOworICAgICAgICByZXR1cm4gTGF5b3V0VW5pdDo6bWF4KCkgLyAyOwogCiAgICAgTGF5b3V0
VW5pdCBwYWdlTG9naWNhbFRvcCA9IHJlZ2lvbi0+cGFnZUxvZ2ljYWxUb3BGb3JPZmZzZXQob2Zm
c2V0KTsKICAgICBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gcmVnaW9uLT5wYWdlTG9n
aWNhbEhlaWdodCgpOwpAQCAtNDg2LDcgKzQ4Niw3IEBAIExheW91dFVuaXQgUmVuZGVyRmxvd1Ro
cmVhZDo6Y29udGVudExvZ2kKIHsKICAgICBSZW5kZXJSZWdpb24qIGZpcnN0VmFsaWRSZWdpb25J
bkZsb3cgPSBmaXJzdFJlZ2lvbigpOwogICAgIGlmICghZmlyc3RWYWxpZFJlZ2lvbkluRmxvdykK
LSAgICAgICAgcmV0dXJuIFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAgIHJldHVybiBMYXlvdXRV
bml0KCk7CiAgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmaXJzdFZhbGlk
UmVnaW9uSW5GbG93LT5jb250ZW50V2lkdGgoKSA6IGZpcnN0VmFsaWRSZWdpb25JbkZsb3ctPmNv
bnRlbnRIZWlnaHQoKTsKIH0KIApAQCAtNDk0LDcgKzQ5NCw3IEBAIExheW91dFVuaXQgUmVuZGVy
Rmxvd1RocmVhZDo6Y29udGVudExvZ2kKIHsKICAgICBSZW5kZXJSZWdpb24qIGZpcnN0VmFsaWRS
ZWdpb25JbkZsb3cgPSBmaXJzdFJlZ2lvbigpOwogICAgIGlmICghZmlyc3RWYWxpZFJlZ2lvbklu
RmxvdykKLSAgICAgICAgcmV0dXJuIFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAgIHJldHVybiBM
YXlvdXRVbml0KCk7CiAgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmaXJz
dFZhbGlkUmVnaW9uSW5GbG93LT5jb250ZW50SGVpZ2h0KCkgOiBmaXJzdFZhbGlkUmVnaW9uSW5G
bG93LT5jb250ZW50V2lkdGgoKTsKIH0KIApAQCAtNTAyLDcgKzUwMiw3IEBAIExheW91dFVuaXQg
UmVuZGVyRmxvd1RocmVhZDo6Y29udGVudExvZ2kKIHsKICAgICBSZW5kZXJSZWdpb24qIGZpcnN0
VmFsaWRSZWdpb25JbkZsb3cgPSBmaXJzdFJlZ2lvbigpOwogICAgIGlmICghZmlyc3RWYWxpZFJl
Z2lvbkluRmxvdykKLSAgICAgICAgcmV0dXJuIFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAgIHJl
dHVybiBMYXlvdXRVbml0KCk7CiAgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBmaXJzdFZhbGlkUmVnaW9uSW5GbG93LT5mbG93VGhyZWFkUG9ydGlvblJlY3QoKS54KCkgOiBm
aXJzdFZhbGlkUmVnaW9uSW5GbG93LT5mbG93VGhyZWFkUG9ydGlvblJlY3QoKS55KCk7CiB9CiAK
QEAgLTc4Niw3ICs3ODYsNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnVwZGF0ZVJlZ2lvbnNG
bG93CiAgICAgICAgIExheW91dFVuaXQgcmVnaW9uTG9naWNhbFdpZHRoID0gcmVnaW9uLT5wYWdl
TG9naWNhbFdpZHRoKCk7CiAgICAgICAgIExheW91dFVuaXQgcmVnaW9uTG9naWNhbEhlaWdodCA9
IHJlZ2lvbi0+bG9naWNhbEhlaWdodE9mQWxsRmxvd1RocmVhZENvbnRlbnQoKTsKIAotICAgICAg
ICBMYXlvdXRSZWN0IHJlZ2lvblJlY3Qoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gWkVS
T19MQVlPVVRfVU5JVCA6IGxvZ2ljYWxXaWR0aCgpIC0gcmVnaW9uTG9naWNhbFdpZHRoLCBsb2dp
Y2FsSGVpZ2h0LCByZWdpb25Mb2dpY2FsV2lkdGgsIHJlZ2lvbkxvZ2ljYWxIZWlnaHQpOworICAg
ICAgICBMYXlvdXRSZWN0IHJlZ2lvblJlY3Qoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8g
TGF5b3V0VW5pdCgpIDogbG9naWNhbFdpZHRoKCkgLSByZWdpb25Mb2dpY2FsV2lkdGgsIGxvZ2lj
YWxIZWlnaHQsIHJlZ2lvbkxvZ2ljYWxXaWR0aCwgcmVnaW9uTG9naWNhbEhlaWdodCk7CiAKICAg
ICAgICAgLy8gV2hlbiBhIGZsb3cgdGhyZWFkIGhhcyBtb3JlIHRoYW4gb25lIGF1dG8gbG9naWNh
bCBoZWlnaHQgcmVnaW9uLAogICAgICAgICAvLyB3ZSBoYXZlIHRvIHRha2UgaW50byBhY2NvdW50
IHRoZSBvdmVycmlkZSBsb2dpY2FsIGNvbnRlbnQgaGVpZ2h0IHZhbHVlLApAQCAtODgyLDcgKzg4
Miw3IEBAIGJvb2wgUmVuZGVyRmxvd1RocmVhZDo6YWRkRm9yY2VkUmVnaW9uQnIKICAgICAgICAg
dXBkYXRlUmVnaW9uc0Zsb3dUaHJlYWRQb3J0aW9uUmVjdCgpOwogCiAgICAgaWYgKG9mZnNldEJy
ZWFrQWRqdXN0bWVudCkKLSAgICAgICAgKm9mZnNldEJyZWFrQWRqdXN0bWVudCA9IG1heDxMYXlv
dXRVbml0PihaRVJPX0xBWU9VVF9VTklULCBjdXJyZW50UmVnaW9uT2Zmc2V0SW5GbG93VGhyZWFk
IC0gb2Zmc2V0QnJlYWtJbkZsb3dUaHJlYWQpOworICAgICAgICAqb2Zmc2V0QnJlYWtBZGp1c3Rt
ZW50ID0gbWF4PExheW91dFVuaXQ+KDAsIGN1cnJlbnRSZWdpb25PZmZzZXRJbkZsb3dUaHJlYWQg
LSBvZmZzZXRCcmVha0luRmxvd1RocmVhZCk7CiAKICAgICByZXR1cm4gb3ZlcnJpZGVMb2dpY2Fs
Q29udGVudEhlaWdodENvbXB1dGVkOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckdlb21ldHJ5TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckdlb21ldHJ5TWFwLmgJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJHZW9tZXRyeU1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3
ICsyOSw3IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5o
IgogI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZU1ldGhv
ZHMuaCIKKyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25N
YXRyaXguaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlUmVzb3VyY2UuaAkocmV2aXNpb24gMTMzNTM5KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlUmVzb3VyY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5j
bHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1
ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dFNpemUuaCIK
ICNpbmNsdWRlICJTdHlsZUltYWdlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiAxMzM1Mzkp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCisjaW5j
bHVkZSAiTGF5b3V0UG9pbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
QXJlbmEuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgpAQCAtOTQ5LDggKzk1MCw4IEBAIExh
eW91dFJlY3QgUmVuZGVySW5saW5lOjpsaW5lc1Zpc3VhbE92ZXIKICAgICAgICAgcmV0dXJuIExh
eW91dFJlY3QoKTsKIAogICAgIC8vIFJldHVybiB0aGUgd2lkdGggb2YgdGhlIG1pbmltYWwgbGVm
dCBzaWRlIGFuZCB0aGUgbWF4aW1hbCByaWdodCBzaWRlLgotICAgIExheW91dFVuaXQgbG9naWNh
bExlZnRTaWRlID0gTUFYX0xBWU9VVF9VTklUOwotICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0
U2lkZSA9IE1JTl9MQVlPVVRfVU5JVDsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0U2lkZSA9
IExheW91dFVuaXQ6Om1heCgpOworICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0U2lkZSA9IExh
eW91dFVuaXQ6Om1pbigpOwogICAgIGZvciAoSW5saW5lRmxvd0JveCogY3VyciA9IGZpcnN0TGlu
ZUJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkgewogICAgICAgICBsb2dp
Y2FsTGVmdFNpZGUgPSBtaW4obG9naWNhbExlZnRTaWRlLCBjdXJyLT5sb2dpY2FsTGVmdFZpc3Vh
bE92ZXJmbG93KCkpOwogICAgICAgICBsb2dpY2FsUmlnaHRTaWRlID0gbWF4KGxvZ2ljYWxSaWdo
dFNpZGUsIGN1cnItPmxvZ2ljYWxSaWdodFZpc3VhbE92ZXJmbG93KCkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiAxMzM1MzkpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDQwLDcgKzIwNDAsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXNpemUoY29uc3QgUGxhdGZv
cm1NCiAgICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENT
U1Byb3BlcnR5TWFyZ2luTGVmdCwgU3RyaW5nOjpudW1iZXIocmVuZGVyZXItPm1hcmdpbkxlZnQo
KSAvIHpvb21GYWN0b3IpICsgInB4IiwgZmFsc2UpOwogICAgICAgICAgICAgc3R5bGVkRWxlbWVu
dC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCBTdHJpbmc6
Om51bWJlcihyZW5kZXJlci0+bWFyZ2luUmlnaHQoKSAvIHpvb21GYWN0b3IpICsgInB4IiwgZmFs
c2UpOwogICAgICAgICB9Ci0gICAgICAgIExheW91dFVuaXQgYmFzZVdpZHRoID0gcmVuZGVyZXIt
PndpZHRoKCkgLSAoaXNCb3hTaXppbmdCb3JkZXIgPyBaRVJPX0xBWU9VVF9VTklUIDogcmVuZGVy
ZXItPmJvcmRlckFuZFBhZGRpbmdXaWR0aCgpKTsKKyAgICAgICAgTGF5b3V0VW5pdCBiYXNlV2lk
dGggPSByZW5kZXJlci0+d2lkdGgoKSAtIChpc0JveFNpemluZ0JvcmRlciA/IExheW91dFVuaXQo
KSA6IHJlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nV2lkdGgoKSk7CiAgICAgICAgIGJhc2VXaWR0
aCA9IGJhc2VXaWR0aCAvIHpvb21GYWN0b3I7CiAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgU3RyaW5nOjpudW1iZXIocm91bmRU
b0ludChiYXNlV2lkdGggKyBkaWZmZXJlbmNlLndpZHRoKCkpKSArICJweCIsIGZhbHNlKTsKICAg
ICB9CkBAIC0yMDUxLDcgKzIwNTEsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXNpemUoY29uc3Qg
UGxhdGZvcm1NCiAgICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3Bl
cnR5KENTU1Byb3BlcnR5TWFyZ2luVG9wLCBTdHJpbmc6Om51bWJlcihyZW5kZXJlci0+bWFyZ2lu
VG9wKCkgLyB6b29tRmFjdG9yKSArICJweCIsIGZhbHNlKTsKICAgICAgICAgICAgIHN0eWxlZEVs
ZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b20sIFN0
cmluZzo6bnVtYmVyKHJlbmRlcmVyLT5tYXJnaW5Cb3R0b20oKSAvIHpvb21GYWN0b3IpICsgInB4
IiwgZmFsc2UpOwogICAgICAgICB9Ci0gICAgICAgIExheW91dFVuaXQgYmFzZUhlaWdodCA9IHJl
bmRlcmVyLT5oZWlnaHQoKSAtIChpc0JveFNpemluZ0JvcmRlciA/IFpFUk9fTEFZT1VUX1VOSVQg
OiByZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ0hlaWdodCgpKTsKKyAgICAgICAgTGF5b3V0VW5p
dCBiYXNlSGVpZ2h0ID0gcmVuZGVyZXItPmhlaWdodCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8g
TGF5b3V0VW5pdCgpIDogcmVuZGVyZXItPmJvcmRlckFuZFBhZGRpbmdIZWlnaHQoKSk7CiAgICAg
ICAgIGJhc2VIZWlnaHQgPSBiYXNlSGVpZ2h0IC8gem9vbUZhY3RvcjsKICAgICAgICAgc3R5bGVk
RWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgU3RyaW5n
OjpudW1iZXIocm91bmRUb0ludChiYXNlSGVpZ2h0ICsgZGlmZmVyZW5jZS5oZWlnaHQoKSkpICsg
InB4IiwgZmFsc2UpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckZpbHRlckluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmgJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlckluZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtMzYsOCArMzYsNyBAQAogI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50LmgiCiAjZW5kaWYK
ICNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb24uaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0
UmVjdC5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5o
IgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGluZUJveExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1NSw3ICsxNTUsNyBAQCBib29sIFJlbmRlckxpbmVCb3hMaXN0OjpyYW5nZUludGVyc2VjdHNS
CiAgICAgICAgIGJsb2NrID0gcmVuZGVyZXItPmNvbnRhaW5pbmdCbG9jaygpOwogICAgIExheW91
dFVuaXQgcGh5c2ljYWxTdGFydCA9IGJsb2NrLT5mbGlwRm9yV3JpdGluZ01vZGUobG9naWNhbFRv
cCk7CiAgICAgTGF5b3V0VW5pdCBwaHlzaWNhbEVuZCA9IGJsb2NrLT5mbGlwRm9yV3JpdGluZ01v
ZGUobG9naWNhbEJvdHRvbSk7Ci0gICAgTGF5b3V0VW5pdCBwaHlzaWNhbEV4dGVudCA9IGFic29s
dXRlVmFsdWUocGh5c2ljYWxFbmQgLSBwaHlzaWNhbFN0YXJ0KTsKKyAgICBMYXlvdXRVbml0IHBo
eXNpY2FsRXh0ZW50ID0gKHBoeXNpY2FsRW5kIC0gcGh5c2ljYWxTdGFydCkuYWJzKCk7CiAgICAg
cGh5c2ljYWxTdGFydCA9IG1pbihwaHlzaWNhbFN0YXJ0LCBwaHlzaWNhbEVuZCk7CiAgICAgCiAg
ICAgaWYgKHJlbmRlcmVyLT5zdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCShy
ZXZpc2lvbiAxMzM1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1h
cmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MDUsNyArMTUwNSw3IEBAIHZvaWQgUmVuZGVy
TGlzdE1hcmtlcjo6dXBkYXRlTWFyZ2lucygpCiAgICAgICAgICAgICAgICAgICAgIGNhc2UgTm9u
ZUxpc3RTdHlsZToKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luU3RhcnQgPSBt
X3RleHQuaXNFbXB0eSgpID8gWkVST19MQVlPVVRfVU5JVCA6IC1taW5QcmVmZXJyZWRMb2dpY2Fs
V2lkdGgoKSAtIG9mZnNldCAvIDI7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5TdGFy
dCA9IG1fdGV4dC5pc0VtcHR5KCkgPyBMYXlvdXRVbml0KDApIDogLW1pblByZWZlcnJlZExvZ2lj
YWxXaWR0aCgpIC0gb2Zmc2V0IC8gMjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBtYXJnaW5FbmQgPSAtbWFyZ2luU3RhcnQgLSBtaW5QcmVmZXJyZWRMb2dp
Y2FsV2lkdGgoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVl
ZS5jcHAJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNYXJxdWVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDEzICsxMjUsMTMgQEAgaW50IFJl
bmRlck1hcnF1ZWU6OmNvbXB1dGVQb3NpdGlvbihFTWFycQogICAgICAgICB9CiAgICAgICAgIGlm
IChkaXIgPT0gTVJJR0hUKSB7CiAgICAgICAgICAgICBpZiAoc3RvcEF0Q29udGVudEVkZ2UpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIG1heChaRVJPX0xBWU9VVF9VTklULCBsdHIgPyAoY29udGVu
dFdpZHRoIC0gY2xpZW50V2lkdGgpIDogKGNsaWVudFdpZHRoIC0gY29udGVudFdpZHRoKSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1heChMYXlvdXRVbml0KDApLCBsdHIgPyAoY29udGVudFdp
ZHRoIC0gY2xpZW50V2lkdGgpIDogKGNsaWVudFdpZHRoIC0gY29udGVudFdpZHRoKSk7CiAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuIGx0ciA/IGNvbnRlbnRXaWR0aCA6
IGNsaWVudFdpZHRoOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYg
KHN0b3BBdENvbnRlbnRFZGdlKQotICAgICAgICAgICAgICAgIHJldHVybiBtaW4oWkVST19MQVlP
VVRfVU5JVCwgbHRyID8gKGNvbnRlbnRXaWR0aCAtIGNsaWVudFdpZHRoKSA6IChjbGllbnRXaWR0
aCAtIGNvbnRlbnRXaWR0aCkpOworICAgICAgICAgICAgICAgIHJldHVybiBtaW4oTGF5b3V0VW5p
dCgwKSwgbHRyID8gKGNvbnRlbnRXaWR0aCAtIGNsaWVudFdpZHRoKSA6IChjbGllbnRXaWR0aCAt
IGNvbnRlbnRXaWR0aCkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVy
biBsdHIgPyAtY2xpZW50V2lkdGggOiAtY29udGVudFdpZHRoOwogICAgICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaAkocmV2aXNpb24gMTMzNTM5
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICNpZm5kZWYgUmVuZGVyTWVudUxpc3RfaAogI2RlZmlu
ZSBSZW5kZXJNZW51TGlzdF9oCiAKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUg
IkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJQb3B1cE1lbnUuaCIKICNpbmNsdWRlICJQb3B1cE1l
bnVDbGllbnQuaCIKICNpbmNsdWRlICJSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guaCIKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5C
bG9jay5jcHAJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsOCBA
QCBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjpSZW5kZXJNdWx0aUNvbHVtCiAgICAgOiBSZW5kZXJC
bG9jayhub2RlKQogICAgICwgbV9mbG93VGhyZWFkKDApCiAgICAgLCBtX2NvbHVtbkNvdW50KDEp
Ci0gICAgLCBtX2NvbHVtbldpZHRoKFpFUk9fTEFZT1VUX1VOSVQpCi0gICAgLCBtX2NvbHVtbkhl
aWdodChaRVJPX0xBWU9VVF9VTklUKQorICAgICwgbV9jb2x1bW5XaWR0aCgwKQorICAgICwgbV9j
b2x1bW5IZWlnaHQoMCkKIHsKIH0KIApAQCAtODMsMTMgKzgzLDEzIEBAIHZvaWQgUmVuZGVyTXVs
dGlDb2x1bW5CbG9jazo6Y2hlY2tGb3JQYWcKICAgICAvLyBXZSBkb24ndCBhY3R1YWxseSB1cGRh
dGUgYW55IG9mIHRoZSB2YXJpYWJsZXMuIFdlIGp1c3Qgc3ViY2xhc3NlZCB0byBhZGp1c3Qgb3Vy
IGNvbHVtbiBoZWlnaHQuCiAgICAgdXBkYXRlTG9naWNhbEhlaWdodCgpOwogICAgIExheW91dFVu
aXQgbmV3Q29udGVudExvZ2ljYWxIZWlnaHQgPSBjb250ZW50TG9naWNhbEhlaWdodCgpOwotICAg
IGlmIChuZXdDb250ZW50TG9naWNhbEhlaWdodCA+IFpFUk9fTEFZT1VUX1VOSVQpIHsKKyAgICBp
ZiAobmV3Q29udGVudExvZ2ljYWxIZWlnaHQgPiBMYXlvdXRVbml0KCkpIHsKICAgICAgICAgLy8g
VGhlIHJlZ2lvbnMgd2lsbCBiZSBpbnZhbGlkYXRlZCB3aGVuIHdlIGxheSB0aGVtIG91dCBhbmQg
dGhleSBjaGFuZ2Ugc2l6ZSB0bwogICAgICAgICAvLyB0aGUgbmV3IGNvbHVtbiBoZWlnaHQuCiAg
ICAgICAgIGlmIChjb2x1bW5IZWlnaHQoKSAhPSBuZXdDb250ZW50TG9naWNhbEhlaWdodCkKICAg
ICAgICAgICAgIHNldENvbHVtbkhlaWdodChuZXdDb250ZW50TG9naWNhbEhlaWdodCk7CiAgICAg
fQotICAgIHNldExvZ2ljYWxIZWlnaHQoWkVST19MQVlPVVRfVU5JVCk7CisgICAgc2V0TG9naWNh
bEhlaWdodChMYXlvdXRVbml0KCkpOwogCiAgICAgLy8gU2V0IHVwIG91ciBjb2x1bW4gc2V0cy4K
ICAgICBlbnN1cmVDb2x1bW5TZXRzKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHAJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDggKzM5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogUmVuZGVyTXVsdGlD
b2x1bW5TZXQ6OlJlbmRlck11bHRpQ29sdW1uU2V0KE5vZGUqIG5vZGUsIFJlbmRlckZsb3dUaHJl
YWQqIGZsb3dUaHJlYWQpCiAgICAgOiBSZW5kZXJSZWdpb25TZXQobm9kZSwgZmxvd1RocmVhZCkK
ICAgICAsIG1fY29tcHV0ZWRDb2x1bW5Db3VudCgxKQotICAgICwgbV9jb21wdXRlZENvbHVtbldp
ZHRoKFpFUk9fTEFZT1VUX1VOSVQpCi0gICAgLCBtX2NvbXB1dGVkQ29sdW1uSGVpZ2h0KFpFUk9f
TEFZT1VUX1VOSVQpCisgICAgLCBtX2NvbXB1dGVkQ29sdW1uV2lkdGgoTGF5b3V0VW5pdCgpKQor
ICAgICwgbV9jb21wdXRlZENvbHVtbkhlaWdodChMYXlvdXRVbml0KCkpCiB7CiB9CiAKQEAgLTIy
OCw5ICsyMjgsOSBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0OjpwYWludENvbHVtblJ1CiAg
ICAgYm9vbCBhbnRpYWxpYXMgPSBzaG91bGRBbnRpYWxpYXNMaW5lcyhwYWludEluZm8uY29udGV4
dCk7CiAKICAgICBib29sIGxlZnRUb1JpZ2h0ID0gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpOwotICAgIExheW91dFVuaXQgY3VyckxvZ2ljYWxMZWZ0T2Zmc2V0ID0gbGVmdFRvUmln
aHQgPyBaRVJPX0xBWU9VVF9VTklUIDogY29udGVudExvZ2ljYWxXaWR0aCgpOworICAgIExheW91
dFVuaXQgY3VyckxvZ2ljYWxMZWZ0T2Zmc2V0ID0gbGVmdFRvUmlnaHQgPyBMYXlvdXRVbml0KCkg
OiBjb250ZW50TG9naWNhbFdpZHRoKCk7CiAgICAgTGF5b3V0VW5pdCBydWxlQWRkID0gYm9yZGVy
QW5kUGFkZGluZ0xvZ2ljYWxMZWZ0KCk7Ci0gICAgTGF5b3V0VW5pdCBydWxlTG9naWNhbExlZnQg
PSBsZWZ0VG9SaWdodCA/IFpFUk9fTEFZT1VUX1VOSVQgOiBjb250ZW50TG9naWNhbFdpZHRoKCk7
CisgICAgTGF5b3V0VW5pdCBydWxlTG9naWNhbExlZnQgPSBsZWZ0VG9SaWdodCA/IExheW91dFVu
aXQoKSA6IGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKICAgICBMYXlvdXRVbml0IGlubGluZURpcmVj
dGlvblNpemUgPSBjb21wdXRlZENvbHVtbldpZHRoKCk7CiAgICAgQm94U2lkZSBib3hTaWRlID0g
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKQogICAgICAgICA/IGxlZnRUb1JpZ2h0ID8gQlNMZWZ0
IDogQlNSaWdodApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxv
d1RocmVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck5hbWVkRmxvd1RocmVhZC5jcHAJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MzQsNyArNDM0LDcgQEAgc3RhdGljIGJvb2wgaXNDb250YWluZWRJbk5vZGVzKFZlY3RvcjxObwog
CiBzdGF0aWMgYm9vbCBib3hJbnRlcnNlY3RzUmVnaW9uKExheW91dFVuaXQgbG9naWNhbFRvcEZv
ckJveCwgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tRm9yQm94LCBMYXlvdXRVbml0IGxvZ2ljYWxU
b3BGb3JSZWdpb24sIExheW91dFVuaXQgbG9naWNhbEJvdHRvbUZvclJlZ2lvbikKIHsKLSAgICBi
b29sIHJlZ2lvbklzRW1wdHkgPSBsb2dpY2FsQm90dG9tRm9yUmVnaW9uICE9IE1BWF9MQVlPVVRf
VU5JVCAmJiBsb2dpY2FsVG9wRm9yUmVnaW9uICE9IE1JTl9MQVlPVVRfVU5JVAorICAgIGJvb2wg
cmVnaW9uSXNFbXB0eSA9IGxvZ2ljYWxCb3R0b21Gb3JSZWdpb24gIT0gTGF5b3V0VW5pdDo6bWF4
KCkgJiYgbG9naWNhbFRvcEZvclJlZ2lvbiAhPSBMYXlvdXRVbml0OjptaW4oKQogICAgICAgICAm
JiAobG9naWNhbEJvdHRvbUZvclJlZ2lvbiAtIGxvZ2ljYWxUb3BGb3JSZWdpb24pIDw9IDA7CiAg
ICAgcmV0dXJuICAobG9naWNhbEJvdHRvbUZvckJveCAtIGxvZ2ljYWxUb3BGb3JCb3gpID4gMAog
ICAgICAgICAmJiAhcmVnaW9uSXNFbXB0eQpAQCAtNDQ4LDEzICs0NDgsMTMgQEAgdm9pZCBSZW5k
ZXJOYW1lZEZsb3dUaHJlYWQ6OmdldFJhbmdlcyhWZQogCiAgICAgLy8gZXh0ZW5kIHRoZSBmaXJz
dCByZWdpb24gdG9wIHRvIGNvbnRhaW4gZXZlcnl0aGluZyB1cCB0byBpdHMgbG9naWNhbCBoZWln
aHQKICAgICBpZiAocmVnaW9uLT5pc0ZpcnN0UmVnaW9uKCkpCi0gICAgICAgIGxvZ2ljYWxUb3BG
b3JSZWdpb24gPSBNSU5fTEFZT1VUX1VOSVQ7CisgICAgICAgIGxvZ2ljYWxUb3BGb3JSZWdpb24g
PSBMYXlvdXRVbml0OjptaW4oKTsKICAgICBlbHNlCiAgICAgICAgIGxvZ2ljYWxUb3BGb3JSZWdp
b24gPSAgcmVnaW9uLT5sb2dpY2FsVG9wRm9yRmxvd1RocmVhZENvbnRlbnQoKTsKIAogICAgIC8v
IGV4dGVuZCB0aGUgbGFzdCByZWdpb24gdG8gY29udGFpbiBldmVyeXRoaW5nIGFib3ZlIGl0cyB5
KCkKICAgICBpZiAocmVnaW9uLT5pc0xhc3RSZWdpb24oKSkKLSAgICAgICAgbG9naWNhbEJvdHRv
bUZvclJlZ2lvbiA9IE1BWF9MQVlPVVRfVU5JVDsKKyAgICAgICAgbG9naWNhbEJvdHRvbUZvclJl
Z2lvbiA9IExheW91dFVuaXQ6Om1heCgpOwogICAgIGVsc2UKICAgICAgICAgbG9naWNhbEJvdHRv
bUZvclJlZ2lvbiA9IHJlZ2lvbi0+bG9naWNhbEJvdHRvbUZvckZsb3dUaHJlYWRDb250ZW50KCk7
CiAKQEAgLTQ5Niw4ICs0OTYsOCBAQCB2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6Z2V0UmFu
Z2VzKFZlCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIExheW91dFVuaXQgb2Zmc2V0VG9w
ID0gcmVuZGVyZXItPmNvbnRhaW5pbmdCbG9jaygpLT5vZmZzZXRGcm9tTG9naWNhbFRvcE9mRmly
c3RQYWdlKCk7Ci0gICAgICAgICAgICBjb25zdCBMYXlvdXRQb2ludCBsb2dpY2FsT2Zmc2V0RnJv
bVRvcChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gWkVST19MQVlPVVRfVU5JVCA6ICBvZmZz
ZXRUb3AsCi0gICAgICAgICAgICAgICAgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG9mZnNl
dFRvcCA6IFpFUk9fTEFZT1VUX1VOSVQpOworICAgICAgICAgICAgY29uc3QgTGF5b3V0UG9pbnQg
bG9naWNhbE9mZnNldEZyb21Ub3AoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IExheW91dFVu
aXQoKSA6ICBvZmZzZXRUb3AsCisgICAgICAgICAgICAgICAgaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSA/IG9mZnNldFRvcCA6IExheW91dFVuaXQoKSk7CiAKICAgICAgICAgICAgIGJvdW5kaW5n
Qm94Lm1vdmVCeShsb2dpY2FsT2Zmc2V0RnJvbVRvcCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAxMzM1MzkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0
NCwxMyArMTQ0NCwxMyBAQCBib29sIFJlbmRlck9iamVjdDo6cmVwYWludEFmdGVyTGF5b3V0SWZO
CiAgICAgUmVuZGVyU3R5bGUqIG91dGxpbmVTdHlsZSA9IG91dGxpbmVTdHlsZUZvclJlcGFpbnQo
KTsKICAgICBMYXlvdXRVbml0IG91dGxpbmVXaWR0aCA9IG91dGxpbmVTdHlsZS0+b3V0bGluZVNp
emUoKTsKICAgICBMYXlvdXRCb3hFeHRlbnQgaW5zZXRTaGFkb3dFeHRlbnQgPSBzdHlsZSgpLT5n
ZXRCb3hTaGFkb3dJbnNldEV4dGVudCgpOwotICAgIExheW91dFVuaXQgd2lkdGggPSBhYnNvbHV0
ZVZhbHVlKG5ld091dGxpbmVCb3gud2lkdGgoKSAtIG9sZE91dGxpbmVCb3gud2lkdGgoKSk7Cisg
ICAgTGF5b3V0VW5pdCB3aWR0aCA9IChuZXdPdXRsaW5lQm94LndpZHRoKCkgLSBvbGRPdXRsaW5l
Qm94LndpZHRoKCkpLmFicygpOwogICAgIGlmICh3aWR0aCkgewogICAgICAgICBMYXlvdXRVbml0
IHNoYWRvd0xlZnQ7CiAgICAgICAgIExheW91dFVuaXQgc2hhZG93UmlnaHQ7CiAgICAgICAgIHN0
eWxlKCktPmdldEJveFNoYWRvd0hvcml6b250YWxFeHRlbnQoc2hhZG93TGVmdCwgc2hhZG93Umln
aHQpOwogICAgICAgICBpbnQgYm9yZGVyUmlnaHQgPSBpc0JveCgpID8gdG9SZW5kZXJCb3godGhp
cyktPmJvcmRlclJpZ2h0KCkgOiAwOwotICAgICAgICBMYXlvdXRVbml0IGJveFdpZHRoID0gaXNC
b3goKSA/IHRvUmVuZGVyQm94KHRoaXMpLT53aWR0aCgpIDogWkVST19MQVlPVVRfVU5JVDsKKyAg
ICAgICAgTGF5b3V0VW5pdCBib3hXaWR0aCA9IGlzQm94KCkgPyB0b1JlbmRlckJveCh0aGlzKS0+
d2lkdGgoKSA6IExheW91dFVuaXQoMCk7CiAgICAgICAgIExheW91dFVuaXQgbWluSW5zZXRSaWdo
dFNoYWRvd0V4dGVudCA9IG1pbjxMYXlvdXRVbml0PigtaW5zZXRTaGFkb3dFeHRlbnQucmlnaHQo
KSwgbWluPExheW91dFVuaXQ+KG5ld0JvdW5kcy53aWR0aCgpLCBvbGRCb3VuZHMud2lkdGgoKSkp
OwogICAgICAgICBMYXlvdXRVbml0IGJvcmRlcldpZHRoID0gbWF4PExheW91dFVuaXQ+KGJvcmRl
clJpZ2h0LCBtYXg8TGF5b3V0VW5pdD4odmFsdWVGb3JMZW5ndGgoc3R5bGUoKS0+Ym9yZGVyVG9w
UmlnaHRSYWRpdXMoKS53aWR0aCgpLCBib3hXaWR0aCwgdiksIHZhbHVlRm9yTGVuZ3RoKHN0eWxl
KCktPmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCkud2lkdGgoKSwgYm94V2lkdGgsIHYpKSk7CiAg
ICAgICAgIExheW91dFVuaXQgZGVjb3JhdGlvbnNXaWR0aCA9IG1heDxMYXlvdXRVbml0Pigtb3V0
bGluZVN0eWxlLT5vdXRsaW5lT2Zmc2V0KCksIGJvcmRlcldpZHRoICsgbWluSW5zZXRSaWdodFNo
YWRvd0V4dGVudCkgKyBtYXg8TGF5b3V0VW5pdD4ob3V0bGluZVdpZHRoLCBzaGFkb3dSaWdodCk7
CkBAIC0xNDY0LDEzICsxNDY0LDEzIEBAIGJvb2wgUmVuZGVyT2JqZWN0OjpyZXBhaW50QWZ0ZXJM
YXlvdXRJZk4KICAgICAgICAgICAgIHJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFp
bmVyLCBwaXhlbFNuYXBwZWRJbnRSZWN0KHJpZ2h0UmVjdCkpOwogICAgICAgICB9CiAgICAgfQot
ICAgIExheW91dFVuaXQgaGVpZ2h0ID0gYWJzb2x1dGVWYWx1ZShuZXdPdXRsaW5lQm94LmhlaWdo
dCgpIC0gb2xkT3V0bGluZUJveC5oZWlnaHQoKSk7CisgICAgTGF5b3V0VW5pdCBoZWlnaHQgPSAo
bmV3T3V0bGluZUJveC5oZWlnaHQoKSAtIG9sZE91dGxpbmVCb3guaGVpZ2h0KCkpLmFicygpOwog
ICAgIGlmIChoZWlnaHQpIHsKICAgICAgICAgTGF5b3V0VW5pdCBzaGFkb3dUb3A7CiAgICAgICAg
IExheW91dFVuaXQgc2hhZG93Qm90dG9tOwogICAgICAgICBzdHlsZSgpLT5nZXRCb3hTaGFkb3dW
ZXJ0aWNhbEV4dGVudChzaGFkb3dUb3AsIHNoYWRvd0JvdHRvbSk7CiAgICAgICAgIGludCBib3Jk
ZXJCb3R0b20gPSBpc0JveCgpID8gdG9SZW5kZXJCb3godGhpcyktPmJvcmRlckJvdHRvbSgpIDog
MDsKLSAgICAgICAgTGF5b3V0VW5pdCBib3hIZWlnaHQgPSBpc0JveCgpID8gdG9SZW5kZXJCb3go
dGhpcyktPmhlaWdodCgpIDogWkVST19MQVlPVVRfVU5JVDsKKyAgICAgICAgTGF5b3V0VW5pdCBi
b3hIZWlnaHQgPSBpc0JveCgpID8gdG9SZW5kZXJCb3godGhpcyktPmhlaWdodCgpIDogTGF5b3V0
VW5pdCgwKTsKICAgICAgICAgTGF5b3V0VW5pdCBtaW5JbnNldEJvdHRvbVNoYWRvd0V4dGVudCA9
IG1pbjxMYXlvdXRVbml0PigtaW5zZXRTaGFkb3dFeHRlbnQuYm90dG9tKCksIG1pbjxMYXlvdXRV
bml0PihuZXdCb3VuZHMuaGVpZ2h0KCksIG9sZEJvdW5kcy5oZWlnaHQoKSkpOwogICAgICAgICBM
YXlvdXRVbml0IGJvcmRlckhlaWdodCA9IG1heDxMYXlvdXRVbml0Pihib3JkZXJCb3R0b20sIG1h
eDxMYXlvdXRVbml0Pih2YWx1ZUZvckxlbmd0aChzdHlsZSgpLT5ib3JkZXJCb3R0b21MZWZ0UmFk
aXVzKCkuaGVpZ2h0KCksIGJveEhlaWdodCwgdiksIHZhbHVlRm9yTGVuZ3RoKHN0eWxlKCktPmJv
cmRlckJvdHRvbVJpZ2h0UmFkaXVzKCkuaGVpZ2h0KCksIGJveEhlaWdodCwgdikpKTsKICAgICAg
ICAgTGF5b3V0VW5pdCBkZWNvcmF0aW9uc0hlaWdodCA9IG1heDxMYXlvdXRVbml0Pigtb3V0bGlu
ZVN0eWxlLT5vdXRsaW5lT2Zmc2V0KCksIGJvcmRlckhlaWdodCArIG1pbkluc2V0Qm90dG9tU2hh
ZG93RXh0ZW50KSArIG1heDxMYXlvdXRVbml0PihvdXRsaW5lV2lkdGgsIHNoYWRvd0JvdHRvbSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiAx
MzM1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDggKzMwLDcgQEAKICNpbmNsdWRlICJEb2N1bWVudFN0eWxlU2hlZXRD
b2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5o
IgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRVbml0LmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlw
ZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiUGFpbnRQaGFzZS5oIgog
I2luY2x1ZGUgIlJlbmRlck9iamVjdENoaWxkTGlzdC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxl
LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT3ZlcmZsb3cuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT3ZlcmZsb3cuaAkocmV2
aXNpb24gMTMzNTM5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck92ZXJmbG93
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICNpZm5kZWYgUmVuZGVyT3ZlcmZs
b3dfaAogI2RlZmluZSBSZW5kZXJPdmVyZmxvd19oCiAKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5o
IgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCShyZXZpc2lvbiAxMzM1
MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcwLDE0ICszNzAsMTQgQEAgdm9pZCBSZW5kZXJSZWdpb246OmRlbGV0ZUFs
bFJlbmRlckJveFJlZwogTGF5b3V0VW5pdCBSZW5kZXJSZWdpb246OmxvZ2ljYWxUb3BPZkZsb3dU
aHJlYWRDb250ZW50UmVjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0KSBjb25zdAogewogICAgIGlm
ICghbV9pc1ZhbGlkIHx8ICFmbG93VGhyZWFkKCkpCi0gICAgICAgIHJldHVybiBaRVJPX0xBWU9V
VF9VTklUOworICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCgpOwogICAgIHJldHVybiBmbG93VGhy
ZWFkKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyByZWN0LnkoKSA6IHJlY3QueCgpOwog
fQogCiBMYXlvdXRVbml0IFJlbmRlclJlZ2lvbjo6bG9naWNhbEJvdHRvbU9mRmxvd1RocmVhZENv
bnRlbnRSZWN0KGNvbnN0IExheW91dFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2lz
VmFsaWQgfHwgIWZsb3dUaHJlYWQoKSkKLSAgICAgICAgcmV0dXJuIFpFUk9fTEFZT1VUX1VOSVQ7
CisgICAgICAgIHJldHVybiBMYXlvdXRVbml0KCk7CiAgICAgcmV0dXJuIGZsb3dUaHJlYWQoKS0+
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHJlY3QubWF4WSgpIDogcmVjdC5tYXhYKCk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAko
cmV2aXNpb24gMTMzNTM5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxh
Y2VkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgyLDcgKzM4Miw3IEBAIExheW91dFVuaXQgUmVu
ZGVyUmVwbGFjZWQ6OmNvbXB1dGVSZXBsYWMKICAgICAgICAgICAgICAgICAvLyBUaGlzIHNvbHZl
cyBhYm92ZSBlcXVhdGlvbiBmb3IgJ3dpZHRoJyAoPT0gbG9naWNhbFdpZHRoKS4KICAgICAgICAg
ICAgICAgICBMYXlvdXRVbml0IG1hcmdpblN0YXJ0ID0gbWluaW11bVZhbHVlRm9yTGVuZ3RoKHN0
eWxlKCktPm1hcmdpblN0YXJ0KCksIGxvZ2ljYWxXaWR0aCk7CiAgICAgICAgICAgICAgICAgTGF5
b3V0VW5pdCBtYXJnaW5FbmQgPSBtaW5pbXVtVmFsdWVGb3JMZW5ndGgoc3R5bGUoKS0+bWFyZ2lu
RW5kKCksIGxvZ2ljYWxXaWR0aCk7Ci0gICAgICAgICAgICAgICAgbG9naWNhbFdpZHRoID0gbWF4
KFpFUk9fTEFZT1VUX1VOSVQsIGxvZ2ljYWxXaWR0aCAtIChtYXJnaW5TdGFydCArIG1hcmdpbkVu
ZCArICh3aWR0aCgpIC0gY2xpZW50V2lkdGgoKSkpKTsKKyAgICAgICAgICAgICAgICBsb2dpY2Fs
V2lkdGggPSBtYXgoTGF5b3V0VW5pdCgpLCBsb2dpY2FsV2lkdGggLSAobWFyZ2luU3RhcnQgKyBt
YXJnaW5FbmQgKyAod2lkdGgoKSAtIGNsaWVudFdpZHRoKCkpKSk7CiAgICAgICAgICAgICAgICAg
aWYgKGlzUGVyY2VudGFnZUludHJpbnNpY1NpemUpCiAgICAgICAgICAgICAgICAgICAgIGxvZ2lj
YWxXaWR0aCA9IGxvZ2ljYWxXaWR0aCAqIGNvbnN0cmFpbmVkU2l6ZS53aWR0aCgpIC8gMTAwOwog
ICAgICAgICAgICAgICAgIHJldHVybiBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGhSZXNwZWN0
aW5nTWluTWF4V2lkdGgobG9naWNhbFdpZHRoLCBpbmNsdWRlTWF4V2lkdGgpOwpAQCAtNDYwLDcg
KzQ2MCw3IEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6OmNvbXB1dGVQcmVmZXJyZWRMb2cKICAgICBt
X21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IGNvbXB1dGVNYXhQcmVmZXJyZWRMb2dpY2FsV2lk
dGgoKSArIGJvcmRlckFuZFBhZGRpbmc7CiAKICAgICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5p
c0ZpeGVkKCkpCi0gICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWluPExheW91
dFVuaXQ+KG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoLCBzdHlsZSgpLT5tYXhXaWR0aCgpLnZh
bHVlKCkgKyAoc3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1ggPyBib3JkZXJBbmRQ
YWRkaW5nIDogWkVST19MQVlPVVRfVU5JVCkpOworICAgICAgICBtX21heFByZWZlcnJlZExvZ2lj
YWxXaWR0aCA9IG1pbjxMYXlvdXRVbml0PihtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCwgc3R5
bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpICsgKHN0eWxlKCktPmJveFNpemluZygpID09IENPTlRF
TlRfQk9YID8gYm9yZGVyQW5kUGFkZGluZyA6IExheW91dFVuaXQoKSkpOwogCiAgICAgaWYgKGhh
c1JlbGF0aXZlRGltZW5zaW9ucygpKQogICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0
aCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHJl
dmlzaW9uIDEzMzUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMSw3ICszMjEsNyBAQCBMYXlvdXRVbml0IFJlbmRlclRh
YmxlOjpjb252ZXJ0U3R5bGVMb2dpCiAgICAgaWYgKGlzQ1NTVGFibGUgJiYgc3R5bGVMb2dpY2Fs
V2lkdGguaXNGaXhlZCgpICYmIHN0eWxlTG9naWNhbFdpZHRoLmlzUG9zaXRpdmUoKSkgewogICAg
ICAgICByZWNhbGNCb3JkZXJzSW5Sb3dEaXJlY3Rpb24oKTsKICAgICAgICAgaWYgKHN0eWxlKCkt
PmJveFNpemluZygpID09IENPTlRFTlRfQk9YKQotICAgICAgICAgICAgYm9yZGVycyA9IGJvcmRl
clN0YXJ0KCkgKyBib3JkZXJFbmQoKSArIChjb2xsYXBzZUJvcmRlcnMoKSA/IFpFUk9fTEFZT1VU
X1VOSVQgOiBwYWRkaW5nU3RhcnQoKSArIHBhZGRpbmdFbmQoKSk7CisgICAgICAgICAgICBib3Jk
ZXJzID0gYm9yZGVyU3RhcnQoKSArIGJvcmRlckVuZCgpICsgKGNvbGxhcHNlQm9yZGVycygpID8g
TGF5b3V0VW5pdCgpIDogcGFkZGluZ1N0YXJ0KCkgKyBwYWRkaW5nRW5kKCkpOwogICAgIH0KICAg
ICByZXR1cm4gbWluaW11bVZhbHVlRm9yTGVuZ3RoKHN0eWxlTG9naWNhbFdpZHRoLCBhdmFpbGFi
bGVXaWR0aCwgdmlldygpKSArIGJvcmRlcnM7CiB9CkBAIC00MzQsOCArNDM0LDggQEAgdm9pZCBS
ZW5kZXJUYWJsZTo6bGF5b3V0KCkKICAgICAgICAgfQogICAgIH0KIAotICAgIExheW91dFVuaXQg
Ym9yZGVyQW5kUGFkZGluZ0JlZm9yZSA9IGJvcmRlckJlZm9yZSgpICsgKGNvbGxhcHNpbmcgPyBa
RVJPX0xBWU9VVF9VTklUIDogcGFkZGluZ0JlZm9yZSgpKTsKLSAgICBMYXlvdXRVbml0IGJvcmRl
ckFuZFBhZGRpbmdBZnRlciA9IGJvcmRlckFmdGVyKCkgKyAoY29sbGFwc2luZyA/IFpFUk9fTEFZ
T1VUX1VOSVQgOiBwYWRkaW5nQWZ0ZXIoKSk7CisgICAgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRk
aW5nQmVmb3JlID0gYm9yZGVyQmVmb3JlKCkgKyAoY29sbGFwc2luZyA/IExheW91dFVuaXQoKSA6
IHBhZGRpbmdCZWZvcmUoKSk7CisgICAgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nQWZ0ZXIg
PSBib3JkZXJBZnRlcigpICsgKGNvbGxhcHNpbmcgPyBMYXlvdXRVbml0KCkgOiBwYWRkaW5nQWZ0
ZXIoKSk7CiAKICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQoKSArIGJvcmRlckFu
ZFBhZGRpbmdCZWZvcmUpOwogCkBAIC00NDYsNyArNDQ2LDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6
bGF5b3V0KCkKICAgICBMYXlvdXRVbml0IGNvbXB1dGVkTG9naWNhbEhlaWdodCA9IDA7CiAgICAg
aWYgKGxvZ2ljYWxIZWlnaHRMZW5ndGguaXNGaXhlZCgpKSB7CiAgICAgICAgIC8vIEhUTUwgdGFi
bGVzIHNpemUgYXMgdGhvdWdoIENTUyBoZWlnaHQgaW5jbHVkZXMgYm9yZGVyL3BhZGRpbmcsIENT
UyB0YWJsZXMgZG8gbm90LgotICAgICAgICBMYXlvdXRVbml0IGJvcmRlcnMgPSBaRVJPX0xBWU9V
VF9VTklUOworICAgICAgICBMYXlvdXRVbml0IGJvcmRlcnMgPSBMYXlvdXRVbml0KCk7CiAgICAg
ICAgIC8vIEZJWE1FOiBXZSBjYW5ub3QgYXBwbHkgYm94LXNpemluZzogY29udGVudC1ib3ggb24g
PHRhYmxlPiB3aGljaCBvdGhlciBicm93c2VycyBhbGxvdy4KICAgICAgICAgaWYgKChub2RlKCkg
JiYgbm9kZSgpLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSkgfHwgc3R5bGUoKS0+Ym94U2l6aW5nKCkg
PT0gQk9SREVSX0JPWCkKICAgICAgICAgICAgIGJvcmRlcnMgPSBib3JkZXJBbmRQYWRkaW5nQmVm
b3JlICsgYm9yZGVyQW5kUGFkZGluZ0FmdGVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlLmgJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsMTQgKzE5MSwxMyBAQCBw
dWJsaWM6CiAgICAgICAgIGlmICh1bnNpZ25lZCBlZmZlY3RpdmVDb2x1bW5Db3VudCA9IG51bUVm
ZkNvbHMoKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PihlZmZl
Y3RpdmVDb2x1bW5Db3VudCArIDEpICogaEJvcmRlclNwYWNpbmcoKTsKIAotICAgICAgICByZXR1
cm4gWkVST19MQVlPVVRfVU5JVDsKKyAgICAgICAgcmV0dXJuIExheW91dFVuaXQoKTsKICAgICB9
CiAKICAgICBMYXlvdXRVbml0IGJvcmRlcnNQYWRkaW5nQW5kU3BhY2luZ0luUm93RGlyZWN0aW9u
KCkgY29uc3QKICAgICB7CiAgICAgICAgIC8vICdib3JkZXItc3BhY2luZycgb25seSBhcHBsaWVz
IHRvIHNlcGFyYXRlIGJvcmRlcnMgKHNlZSAxNy42LjEgVGhlIHNlcGFyYXRlZCBib3JkZXJzIG1v
ZGVsKS4KLSAgICAgICAgcmV0dXJuIGJvcmRlclN0YXJ0KCkgKyBib3JkZXJFbmQoKSArCi0gICAg
ICAgICAgICAgICAoY29sbGFwc2VCb3JkZXJzKCkgPyBaRVJPX0xBWU9VVF9VTklUIDogKHBhZGRp
bmdTdGFydCgpICsgcGFkZGluZ0VuZCgpICsgYm9yZGVyU3BhY2luZ0luUm93RGlyZWN0aW9uKCkp
KTsKKyAgICAgICAgcmV0dXJuIGJvcmRlclN0YXJ0KCkgKyBib3JkZXJFbmQoKSArIChjb2xsYXBz
ZUJvcmRlcnMoKSA/IExheW91dFVuaXQoKSA6IChwYWRkaW5nU3RhcnQoKSArIHBhZGRpbmdFbmQo
KSArIGJvcmRlclNwYWNpbmdJblJvd0RpcmVjdGlvbigpKSk7CiAgICAgfQogCiAgICAgLy8gUmV0
dXJuIHRoZSBmaXJzdCBjb2x1bW4gb3IgY29sdW1uLWdyb3VwLgpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkocmV2aXNpb24gMTMzNTM5KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMyLDgg
KzE2MzIsOCBAQCBMYXlvdXRSZWN0IFJlbmRlclRleHQ6OmxpbmVzVmlzdWFsT3ZlcmZsCiAgICAg
ICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKICAgICAvLyBSZXR1cm4gdGhlIHdpZHRoIG9mIHRo
ZSBtaW5pbWFsIGxlZnQgc2lkZSBhbmQgdGhlIG1heGltYWwgcmlnaHQgc2lkZS4KLSAgICBMYXlv
dXRVbml0IGxvZ2ljYWxMZWZ0U2lkZSA9IE1BWF9MQVlPVVRfVU5JVDsKLSAgICBMYXlvdXRVbml0
IGxvZ2ljYWxSaWdodFNpZGUgPSBNSU5fTEFZT1VUX1VOSVQ7CisgICAgTGF5b3V0VW5pdCBsb2dp
Y2FsTGVmdFNpZGUgPSBMYXlvdXRVbml0OjptYXgoKTsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxS
aWdodFNpZGUgPSBMYXlvdXRVbml0OjptaW4oKTsKICAgICBmb3IgKElubGluZVRleHRCb3gqIGN1
cnIgPSBmaXJzdFRleHRCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRUZXh0Qm94KCkpIHsK
ICAgICAgICAgbG9naWNhbExlZnRTaWRlID0gbWluKGxvZ2ljYWxMZWZ0U2lkZSwgY3Vyci0+bG9n
aWNhbExlZnRWaXN1YWxPdmVyZmxvdygpKTsKICAgICAgICAgbG9naWNhbFJpZ2h0U2lkZSA9IG1h
eChsb2dpY2FsUmlnaHRTaWRlLCBjdXJyLT5sb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdygpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtQ29tbW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVD
aHJvbWl1bUNvbW1vbi5jcHAJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjYsOCArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1l
Q2hyb21pdW1Db21tb24uaCIKIAotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRVbml0LmgiCiAj
aW5jbHVkZSAiSW5wdXRUeXBlTmFtZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRVbml0LmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ2hyb21pdW1Db21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUNvbW1vbi5oCShyZXZpc2lvbiAxMzM1MzkpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUNvbW1vbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaWZuZGVmIFJlbmRlclRoZW1lQ2hyb21pdW1D
b21tb25faAogI2RlZmluZSBSZW5kZXJUaGVtZUNocm9taXVtQ29tbW9uX2gKIAotI2luY2x1ZGUg
IkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0F0b21pY1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiAxMzM1
MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgYwogICAgIHJldHVybiB0cyA8PCAiKCIgPDwgcC54KCkgPDwgIiwiIDw8IHAu
eSgpIDw8ICIpIjsKIH0KIAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBwKQorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgTGF5b3V0UG9pbnQmIHApCiB7CiAgICAgLy8gRklYTUU6IFRo
ZXNlIHNob3VsZCBiZSBwcmludGVkIGFzIGZsb2F0cy4gS2VlcGluZyB0aGVtIGludHMgZm9yIGNv
bnNpc3RlbmN5IHdpdGggcGVydmlvdXMgdGVzdCBleHBlY3RhdGlvbnMuCiAgICAgcmV0dXJuIHRz
IDw8ICIoIiA8PCBwLngoKS50b0ludCgpIDw8ICIsIiA8PCBwLnkoKS50b0ludCgpIDw8ICIpIjsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuaAkocmV2
aXNpb24gMTMzNTM5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1Rl
eHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBFbGVtZW50OwotY2xhc3MgRnJhY3Rpb25hbExheW91dFBvaW50OworY2xhc3Mg
TGF5b3V0UG9pbnQ7CiBjbGFzcyBGbG9hdFBvaW50OwogY2xhc3MgRmxvYXRTaXplOwogY2xhc3Mg
RnJhbWU7CkBAIC03MCw3ICs3MCw3IEBAIHN0YXRpYyB2b2lkIHdyaXRlUmVuZGVyT2JqZWN0KFRl
eHRTdHJlYW0KIAogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgSW50
UG9pbnQmKTsKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEludFJl
Y3QmKTsKLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRQb2ludCYpOworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29u
c3QgTGF5b3V0UG9pbnQmKTsKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNv
bnN0IEZsb2F0UG9pbnQmKTsKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNv
bnN0IEZsb2F0U2l6ZSYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3
LmgJKHJldmlzaW9uIDEzMzUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw4ICsxMjcsOCBAQCBwdWJsaWM6CiAgICAgICAg
IGlmIChtX2xheW91dFN0YXRlKSB7CiAgICAgICAgICAgICBtX2xheW91dFN0YXRlLT5tX2xheW91
dERlbHRhICs9IGRlbHRhOwogI2lmICFBU1NFUlRfRElTQUJMRUQgJiYgRU5BQkxFKFNBVFVSQVRF
RF9MQVlPVVRfQVJJVEhNRVRJQykKLSAgICAgICAgICAgIG1fbGF5b3V0U3RhdGUtPm1fbGF5b3V0
RGVsdGFYU2F0dXJhdGVkIHw9IG1fbGF5b3V0U3RhdGUtPm1fbGF5b3V0RGVsdGEud2lkdGgoKSA9
PSBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWF4KCkgfHwgbV9sYXlvdXRTdGF0ZS0+bV9sYXlvdXRE
ZWx0YS53aWR0aCgpID09IEZyYWN0aW9uYWxMYXlvdXRVbml0OjptaW4oKTsKLSAgICAgICAgICAg
IG1fbGF5b3V0U3RhdGUtPm1fbGF5b3V0RGVsdGFZU2F0dXJhdGVkIHw9IG1fbGF5b3V0U3RhdGUt
Pm1fbGF5b3V0RGVsdGEuaGVpZ2h0KCkgPT0gRnJhY3Rpb25hbExheW91dFVuaXQ6Om1heCgpIHx8
IG1fbGF5b3V0U3RhdGUtPm1fbGF5b3V0RGVsdGEuaGVpZ2h0KCkgPT0gRnJhY3Rpb25hbExheW91
dFVuaXQ6Om1pbigpOworICAgICAgICAgICAgbV9sYXlvdXRTdGF0ZS0+bV9sYXlvdXREZWx0YVhT
YXR1cmF0ZWQgfD0gbV9sYXlvdXRTdGF0ZS0+bV9sYXlvdXREZWx0YS53aWR0aCgpID09IExheW91
dFVuaXQ6Om1heCgpIHx8IG1fbGF5b3V0U3RhdGUtPm1fbGF5b3V0RGVsdGEud2lkdGgoKSA9PSBM
YXlvdXRVbml0OjptaW4oKTsKKyAgICAgICAgICAgIG1fbGF5b3V0U3RhdGUtPm1fbGF5b3V0RGVs
dGFZU2F0dXJhdGVkIHw9IG1fbGF5b3V0U3RhdGUtPm1fbGF5b3V0RGVsdGEuaGVpZ2h0KCkgPT0g
TGF5b3V0VW5pdDo6bWF4KCkgfHwgbV9sYXlvdXRTdGF0ZS0+bV9sYXlvdXREZWx0YS5oZWlnaHQo
KSA9PSBMYXlvdXRVbml0OjptaW4oKTsKICNlbmRpZgogICAgICAgICB9CiAgICAgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVjZUltYWdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVjZUltYWdlLmgJKHJl
dmlzaW9uIDEzMzUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9OaW5lUGll
Y2VJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAjaWZuZGVmIE5pbmVQ
aWVjZUltYWdlX2gKICNkZWZpbmUgTmluZVBpZWNlSW1hZ2VfaAogCi0jaW5jbHVkZSAiTGF5b3V0
VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRVbml0LmgiCiAjaW5jbHVkZSAiTGVuZ3RoQm94Lmgi
CiAjaW5jbHVkZSAiU3R5bGVJbWFnZS5oIgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gMTMzNTM5KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDcgKzM3LDcgQEAKICNpbmNsdWRlICJGb250QmFzZWxpbmUuaCIKICNpbmNsdWRlICJGb250RGVz
Y3JpcHRpb24uaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCi0jaW5jbHVkZSAiTGF5b3V0
VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94RXh0ZW50LmgiCiAjaW5j
bHVkZSAiTGVuZ3RoLmgiCiAjaW5jbHVkZSAiTGVuZ3RoQm94LmgiCiAjaW5jbHVkZSAiTGVuZ3Ro
RnVuY3Rpb25zLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hhZG93
RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1No
YWRvd0RhdGEuY3BwCShyZXZpc2lvbiAxMzM1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvU2hhZG93RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTaGFkb3dEYXRhLmgiCiAKLSNpbmNsdWRl
ICJMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAK
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9TaGFkb3dEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1NoYWRvd0RhdGEuaAkocmV2aXNpb24gMTMzNTM5KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcs
NyBAQAogCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNs
dWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2VTZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZVNldC5o
CShyZXZpc2lvbiAxMzM1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5
bGVDYWNoZWRJbWFnZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNp
bmNsdWRlICJDYWNoZWRJbWFnZUNsaWVudC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFu
ZGxlLmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRTaXplLmgi
CiAjaW5jbHVkZSAiU3R5bGVJbWFnZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlLmgJKHJldmlzaW9uIDEz
MzUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJDU1NWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIkxheW91dFR5
cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBv
cnQuaAkocmV2aXNpb24gMTMzNTM5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJTdXBwb3J0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICNkZWZp
bmUgU1ZHUmVuZGVyU3VwcG9ydF9oCiAKICNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkxheW91
dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwko
cmV2aXNpb24gMTMzNTM5KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0xMS0wNSAgRW1pbCBBIEVrbHVuZCAg
PGVhZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmVtb3ZlIExheW91dFR5cGVzIGFic3RyYWN0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MzA1
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92
ZSBMYXlvdXRUeXBlcyBhYnN0cmFjdGlvbiBhbmQgcmVuYW1lIEZyYWN0aW9uYWxMYXlvdXQqIHRv
CisgICAgICAgIExheW91dCogbm93IHRoYXQgYWxsIHBsYXRmb3JtcyB1c2UgdGhlIEZyYWN0aW9u
YWxMYXlvdXQgdmVyc2lvbgorICAgICAgICAoYWxiZWl0IHdpdGggZGlmZmVyZW50IGZyYWN0aW9u
cykuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eS4K
KworICAgICAgICAqIHNyYy9MaW5rSGlnaGxpZ2h0LmNwcDoKKwogMjAxMi0xMS0wNSAgQWRhbSBC
YXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFtWOF0gSW50cnVzaXZlRE9NV3Jh
cHBlck1hcCBzaG91bGQgYmUgdXNhYmxlIGZvciBtb3JlIHRoYW4ganVzdCBOb2RlcwpJbmRleDog
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTGlua0hpZ2hsaWdodC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTGlua0hpZ2hsaWdodC5jcHAJKHJldmlzaW9u
IDEzMzUzOSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xpbmtIaWdobGlnaHQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiQ29sb3IuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkxheW91
dFR5cGVzLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIk5vbkNvbXBvc2l0ZWRDb250
ZW50SG9zdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172641</attachid>
            <date>2012-11-06 13:42:43 -0800</date>
            <delta_ts>2012-11-06 15:13:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93050-20121106134056.patch</filename>
            <type>text/plain</type>
            <size>390693</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MyBAQAorMjAxMi0xMS0wNSAgRW1pbCBB
IEVrbHVuZCAgPGVhZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmVtb3ZlIExheW91dFR5cGVz
IGFic3RyYWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05MzA1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFJlbW92ZSBMYXlvdXRUeXBlcyBhYnN0cmFjdGlvbiBhbmQgcmVuYW1lIEZyYWN0aW9uYWxM
YXlvdXQqIHRvCisgICAgICAgIExheW91dCogbm93IHRoYXQgYWxsIHBsYXRmb3JtcyB1c2UgdGhl
IEZyYWN0aW9uYWxMYXlvdXQgdmVyc2lvbgorICAgICAgICAoYWxiZWl0IHdpdGggZGlmZmVyZW50
IGZyYWN0aW9ucykuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBjaGFuZ2UgaW4gZnVuY3Rp
b25hbGl0eS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2Vm
aWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJDb3JlLmV4
cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3Bw
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaDoKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiBjc3Mv
TGVuZ3RoRnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKiBjc3MvTGVuZ3RoRnVuY3Rpb25zLmg6Cisg
ICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogZG9tL0RvY3VtZW50TWFya2VyQ29u
dHJvbGxlci5oOgorICAgICAgICAqIGRvbS9FbGVtZW50UmFyZURhdGEuaDoKKyAgICAgICAgKiBk
b20vTW91c2VSZWxhdGVkRXZlbnQuaDoKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAq
IGRvbS9Ub3VjaC5oOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAg
ICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaDoKKyAgICAgICAgKiBlZGl0aW5nL1JlbmRl
cmVkUG9zaXRpb24uaDoKKyAgICAgICAgKiBodG1sL0hUTUxBcmVhRWxlbWVudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvclRpbWVsaW5lQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvVGltZWxpbmVSZWNv
cmRGYWN0b3J5LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5
Lmg6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmg6CisgICAgICAgICogcGFn
ZS9Gb2N1c0NvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorICAgICAg
ICAqIHBhZ2UvUGFnZS5oOgorICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwOgor
ICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9G
cmFjdGlvbmFsTGF5b3V0VW5pdC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL0xheW91
dFVuaXQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRnJhY3Rpb25hbExh
eW91dFVuaXQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9MZW5ndGguaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9Qb3B1cE1lbnVDbGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hbmltYXRpb24vQW5p
bWF0aW9uVXRpbGl0aWVzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2lu
dC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRSZWN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRT
aXplLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94RXh0
ZW50Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExh
eW91dFBvaW50Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rp
b25hbExheW91dFJlY3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ZyYWN0aW9uYWxMYXlvdXRSZWN0Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRnJhY3Rpb25hbExheW91dFNpemUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbnRSZWN0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50LmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dEJveEV4
dGVudC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50Lmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxM
YXlvdXRCb3hFeHRlbnQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRQb2lu
dC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlv
bmFsTGF5b3V0UG9pbnQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rp
b25hbExheW91dFJlY3QuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJl
Y3QuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rp
b25hbExheW91dFJlY3QuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRTaXpl
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9u
YWxMYXlvdXRTaXplLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlck9wZXJh
dGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVy
UGFyYW1ldGVyTGlzdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyT3BlcmF0aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJPcGVyYXRpb25zLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9WYWxp
ZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFBvaW50UXQuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxMYXlvdXRSZWN0UXQu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxM
YXlvdXRTaXplUXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0
L0xheW91dFBvaW50UXQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9GcmFjdGlvbmFsTGF5b3V0UG9pbnRRdC5jcHAuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvTGF5b3V0UmVjdFF0LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvTGF5b3V0U2l6ZVF0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFNpemVRdC5jcHAuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25zLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25N
YXRyaXguY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNm
b3JtYXRpb25NYXRyaXguaDoKKyAgICAgICAgKiByZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0Lmg6
CisgICAgICAgICogcmVuZGVyaW5nL0NvbHVtbkluZm8uaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmg6CisgICAgICAgICogcmVuZGVyaW5nL0ZpbHRlckVm
ZmVjdFJlbmRlcmVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvR2FwUmVjdHMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0
VGVzdFJlc3VsdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0aW5nVHJhbnNmb3JtU3Rh
dGUuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgICogcmVuZGVy
aW5nL0xheW91dFJlcGFpbnRlci5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL0xheW91dFJlcGFp
bnRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRTdGF0ZS5oOgorICAgICAgICAqIHJl
bmRlcmluZy9MYXlvdXRUeXBlcy5oOgorICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRUeXBlc0lu
bGluZU1ldGhvZHMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUGFpbnRJbmZvLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
QmxvY2suaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNw
cDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJG
bGV4aWJsZUJveC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3Bw
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJHZW9tZXRyeU1hcC5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNlLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
cklubGluZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmg6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlz
dE1hcmtlci5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVs
dGlDb2x1bW5TZXQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJl
YWQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT3Zl
cmZsb3cuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUYWJsZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
aGVtZUNocm9taXVtQ29tbW9uLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVD
aHJvbWl1bUNvbW1vbi5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJWaWV3Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVj
ZUltYWdlLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuY3BwOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdHlsZS9TaGFkb3dEYXRhLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2Fj
aGVkSW1hZ2VTZXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZS5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oOgorCiAyMDEyLTExLTA2
ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFNvbWUgY29v
a2llIGNvZGUgY2xlYW51cApJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDEzMzY2
NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
ODc2LDggKzE4NzYsOCBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udEZhbWlseS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZlYXR1cmVTZXR0aW5ncy5jcHAKLSAgICBwbGF0
Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmNwcAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0xheW91dEJveEV4dGVudC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0LmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0dlbmVyYXRvckdlbmVyYXRlZEltYWdlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCShyZXZpc2lvbiAxMzM2NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCSh3b3JraW5nIGNvcHkpCkBAIC00Mjc4LDcgKzQyNzgsNyBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0Zsb2F0Q29udmVyc2lvbi5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GcmFjdGlvbmFs
TGF5b3V0VW5pdC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYXlvdXRVbml0LmggXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dhbWVwYWRzLmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0hhc2hUb29scy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9IaXN0b2dyYW1T
dXBwb3J0LmNwcCBcCkBAIC00NDQyLDEyICs0NDQyLDEyIEBAIHdlYmNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNtb290aGluZ01vZGUuaCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFRyYWl0c01hc2suaCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFdpZHRoVmFyaWFudC5oIFwKLQlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50
LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91
dEJveEV4dGVudC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlv
bmFsTGF5b3V0UG9pbnQuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJh
Y3Rpb25hbExheW91dFJlY3QuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GcmFjdGlvbmFsTGF5b3V0U2l6ZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9MYXlvdXRCb3hFeHRlbnQuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9MYXlvdXRCb3hFeHRlbnQuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTGF5b3V0UG9pbnQuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TGF5b3V0UmVjdC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91
dFJlY3QuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0U2l6ZS5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmggXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRvci5oIFwKQEAgLTQ5OTAs
OCArNDk5MCw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0
YXRlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmggXAotCVNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlcy5oIFwKLQlTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmggXAogCVNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9MYXlvdXRSZXBhaW50ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xh
eW91dFJlcGFpbnRlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9PdmVybGFwVGVz
dFJlcXVlc3RDbGllbnQuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDEzMzY2NCkKKysr
IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTk2OSw4ICs5Njks
OCBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBcCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udEZhc3RQYXRoLmNwcCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91
dEJveEV4dGVudC5jcHAgXAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRS
ZWN0LmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50LmNwcCBcCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UmVjdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0dlbmVyYXRlZEltYWdlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdG9y
R2VuZXJhdGVkSW1hZ2UuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVl
Tm9kZS5jcHAgXApAQCAtMjMzNSw3ICsyMzM1LDYgQEAgSEVBREVSUyArPSBcCiAgICAgcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guaCBcCiAgICAgcmVuZGVyaW5nL0lubGluZVRleHRCb3guaCBcCiAg
ICAgcmVuZGVyaW5nL0xheW91dFN0YXRlLmggXAotICAgIHJlbmRlcmluZy9MYXlvdXRUeXBlcy5o
IFwKICAgICByZW5kZXJpbmcvTGF5b3V0UmVwYWludGVyLmggXAogICAgIHJlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MQmxvY2suaCBcCiAgICAgcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxGZW5jZWQuaCBcCkBAIC0yNzgyLDkgKzI3ODEsOSBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9GbG9hdFBvaW50UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9xdC9GbG9hdFJlY3RRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0Zsb2F0U2l6
ZVF0LmNwcCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFBvaW50
UXQuY3BwIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9GcmFjdGlvbmFsTGF5b3V0UmVjdFF0
LmNwcCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFNpemVRdC5j
cHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0xheW91dFBvaW50UXQuY3BwIFwKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9xdC9MYXlvdXRSZWN0UXQuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9MYXlvdXRTaXplUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFk
aWVudFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQu
Y3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9JY29uUXQuY3BwIFwKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluCShyZXZpc2lvbiAxMzM2NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDcgKzE0Nyw2IEBAIF9fWk43V2ViQ29yZTEx
TWVtb3J5Q2FjaGUxM3NldENhcGFjaXRpZXMKIF9fWk43V2ViQ29yZTExTWVtb3J5Q2FjaGUxNGV2
aWN0UmVzb3VyY2VzRXYKIF9fWk43V2ViQ29yZTExTWVtb3J5Q2FjaGUxOWdldE9yaWdpbnNXaXRo
Q2FjaGVFUk4zV1RGN0hhc2hTZXRJTlMxXzZSZWZQdHJJTlNfMTRTZWN1cml0eU9yaWdpbkVFRU5T
XzE4U2VjdXJpdHlPcmlnaW5IYXNoRU5TMV8xMEhhc2hUcmFpdHNJUzVfRUVFRQogX19aTjdXZWJD
b3JlMTFNZW1vcnlDYWNoZTI1cmVtb3ZlUmVzb3VyY2VzV2l0aE9yaWdpbkVQTlNfMTRTZWN1cml0
eU9yaWdpbkUKLV9fWk43V2ViQ29yZTExUmVuZGVyTGF5ZXIxOXNjcm9sbFJlY3RUb1Zpc2libGVF
UktOU18yMEZyYWN0aW9uYWxMYXlvdXRSZWN0RVJLTlNfMTVTY3JvbGxBbGlnbm1lbnRFUzZfCiBf
X1pON1dlYkNvcmUxMVVSTFdpdGhEYXRhRVA2TlNEYXRhUDVOU1VSTAogX19aTjdXZWJDb3JlMTFt
ZW1vcnlDYWNoZUV2CiBfX1pON1dlYkNvcmUxMXN0YXJ0T2ZXb3JkRVJLTlNfMTVWaXNpYmxlUG9z
aXRpb25FTlNfOUVXb3JkU2lkZUUKQEAgLTE1OSw3ICsxNTgsNyBAQCBfX1pON1dlYkNvcmUxMkV2
ZW50SGFuZGxlcjE0c2Nyb2xsT3ZlcmZsCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE1aGFu
ZGxlQWNjZXNzS2V5RVJLTlNfMjFQbGF0Zm9ybUtleWJvYXJkRXZlbnRFCiBfX1pON1dlYkNvcmUx
MkV2ZW50SGFuZGxlcjE2aGFuZGxlV2hlZWxFdmVudEVSS05TXzE4UGxhdGZvcm1XaGVlbEV2ZW50
RQogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxN3Njcm9sbFJlY3Vyc2l2ZWx5RU5TXzE1U2Ny
b2xsRGlyZWN0aW9uRU5TXzE3U2Nyb2xsR3JhbnVsYXJpdHlFUE5TXzROb2RlRQotX19aTjdXZWJD
b3JlMTJFdmVudEhhbmRsZXIyMGhpdFRlc3RSZXN1bHRBdFBvaW50RVJLTlNfMjFGcmFjdGlvbmFs
TGF5b3V0UG9pbnRFYmJOU18xN0hpdFRlc3RTY3JvbGxiYXJzRWpSS05TXzIwRnJhY3Rpb25hbExh
eW91dFNpemVFCitfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjIwaGl0VGVzdFJlc3VsdEF0UG9p
bnRFUktOU18xMUxheW91dFBvaW50RWJiTlNfMTdIaXRUZXN0U2Nyb2xsYmFyc0VqUktOU18xMExh
eW91dFNpemVFCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjIxaGFuZGxlTW91c2VQcmVzc0V2
ZW50RVJLTlNfMThQbGF0Zm9ybU1vdXNlRXZlbnRFCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxl
cjIzaGFuZGxlTW91c2VSZWxlYXNlRXZlbnRFUktOU18xOFBsYXRmb3JtTW91c2VFdmVudEUKIF9f
Wk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjRsb2dpY2FsU2Nyb2xsUmVjdXJzaXZlbHlFTlNfMjJT
Y3JvbGxMb2dpY2FsRGlyZWN0aW9uRU5TXzE3U2Nyb2xsR3JhbnVsYXJpdHlFUE5TXzROb2RlRQpA
QCAtMTg1LDggKzE4NCw3IEBAIF9fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0OXNwb29sUGFnZUVS
TlMKIF9fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0OXNwb29sUmVjdEVSTlNfMTVHcmFwaGljc0Nv
bnRleHRFUktOU183SW50UmVjdEUKIF9fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0QzFFUE5TXzVG
cmFtZUUKIF9fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0RDFFdgotX19aTks3V2ViQ29yZTEyUmVu
ZGVyT2JqZWN0MTZyZXBhaW50UmVjdGFuZ2xlRVJLTlNfMjBGcmFjdGlvbmFsTGF5b3V0UmVjdEVi
Ci1fX1pON1dlYkNvcmUxMlJlbmRlck9iamVjdDE5c2Nyb2xsUmVjdFRvVmlzaWJsZUVSS05TXzIw
RnJhY3Rpb25hbExheW91dFJlY3RFUktOU18xNVNjcm9sbEFsaWdubWVudEVTNl8KK19fWk43V2Vi
Q29yZTEyUmVuZGVyT2JqZWN0MTlzY3JvbGxSZWN0VG9WaXNpYmxlRVJLTlNfMTBMYXlvdXRSZWN0
RVJLTlNfMTVTY3JvbGxBbGlnbm1lbnRFUzZfCiBfX1pON1dlYkNvcmUxMlNoYXJlZEJ1ZmZlcjEw
d3JhcENGRGF0YUVQSzhfX0NGRGF0YQogX19aTjdXZWJDb3JlMTJTaGFyZWRCdWZmZXIxMHdyYXBO
U0RhdGFFUDZOU0RhdGEKIF9fWk43V2ViQ29yZTEyU2hhcmVkQnVmZmVyMTJjcmVhdGVOU0RhdGFF
dgpAQCAtNDY2LDcgKzQ2NCw2IEBAIF9fWk43V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbkMxRVJL
TlNfMTUKIF9fWk43V2ViQ29yZTE2Y3JlYXRlRnVsbE1hcmt1cEVQS05TXzROb2RlRQogX19aTjdX
ZWJDb3JlMTZjcmVhdGVGdWxsTWFya3VwRVBLTlNfNVJhbmdlRQogX19aTjdXZWJDb3JlMTZkZWxl
dGVBbGxDb29raWVzRXYKLV9fWk43V2ViQ29yZTE2ZW5jbG9zaW5nSW50UmVjdEVSS05TXzIwRnJh
Y3Rpb25hbExheW91dFJlY3RFCiBfX1pON1dlYkNvcmUxNmVuY2xvc2luZ0ludFJlY3RFUktOU185
RmxvYXRSZWN0RQogX19aTjdXZWJDb3JlMTZpc0VuZE9mUGFyYWdyYXBoRVJLTlNfMTVWaXNpYmxl
UG9zaXRpb25FTlNfMjdFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGVFCiBfX1pON1dlYkNvcmUx
NmlzVXNlclZpc2libGVVUkxFUDhOU1N0cmluZwpAQCAtODYyLDcgKzg1OSw2IEBAIF9fWk43V2Vi
Q29yZTdFbGVtZW50OWlubmVyVGV4dEV2CiBfX1pON1dlYkNvcmU3SW50UmVjdDVzY2FsZUVmCiBf
X1pON1dlYkNvcmU3SW50UmVjdDV1bml0ZUVSS1MwXwogX19aTjdXZWJDb3JlN0ludFJlY3Q5aW50
ZXJzZWN0RVJLUzBfCi1fX1pON1dlYkNvcmU3SW50UmVjdEMxRVJLTlNfMjBGcmFjdGlvbmFsTGF5
b3V0UmVjdEUKIF9fWk43V2ViQ29yZTdJbnRSZWN0QzFFUktOU185RmxvYXRSZWN0RQogX19aTjdX
ZWJDb3JlN0ludFNpemVDMUVSSzZDR1NpemUKIF9fWk43V2ViQ29yZTdSdW5Mb29wMTRydW5Gb3JE
dXJhdGlvbkVkCkBAIC0xMDAyLDkgKzk5OCw3IEBAIF9fWk43V2ViQ29yZTh0b1N0cmluZ0VSS04z
V1RGNlZlY3RvcklOU18KIF9fWk43V2ViQ29yZTlET01XaW5kb3czMGRpc3BhdGNoQWxsUGVuZGlu
Z1VubG9hZEV2ZW50c0V2CiBfX1pON1dlYkNvcmU5RE9NV2luZG93MzZkaXNwYXRjaEFsbFBlbmRp
bmdCZWZvcmVVbmxvYWRFdmVudHNFdgogX19aTjdXZWJDb3JlOUZsb2F0UmVjdEMxRVJLNkNHUmVj
dAotX19aTjdXZWJDb3JlOUZsb2F0UmVjdEMxRVJLTlNfMjBGcmFjdGlvbmFsTGF5b3V0UmVjdEUK
IF9fWk43V2ViQ29yZTlGbG9hdFJlY3RDMUVSS05TXzdJbnRSZWN0RQotX19aTjdXZWJDb3JlOUZs
b2F0U2l6ZUMxRVJLTlNfMjBGcmFjdGlvbmFsTGF5b3V0U2l6ZUUKIF9fWk43V2ViQ29yZTlGbG9h
dFNpemVDMUVSS05TXzdJbnRTaXplRQogX19aTjdXZWJDb3JlOUZvbnRDYWNoZTEzZm9udERhdGFD
b3VudEV2CiBfX1pON1dlYkNvcmU5Rm9udENhY2hlMjFpbmFjdGl2ZUZvbnREYXRhQ291bnRFdgpA
QCAtMTE4Niw2ICsxMTgwLDcgQEAgX19aTks3V2ViQ29yZTExUmVuZGVyU3R5bGU0Zm9udEV2CiBf
X1pOSzdXZWJDb3JlMTFTY3JpcHRWYWx1ZTlnZXRTdHJpbmdFUE4zSlNDOUV4ZWNTdGF0ZUVSTjNX
VEY2U3RyaW5nRQogX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTRlbmNsb3NpbmdMYXllckV2
CiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QxNWxvY2FsVG9BYnNvbHV0ZUVSS05TXzEwRmxv
YXRQb2ludEVqCitfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QxNnJlcGFpbnRSZWN0YW5nbGVF
UktOU18xMExheW91dFJlY3RFYgogX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MjBsb2NhbFRv
Q29udGFpbmVyUXVhZEVSS05TXzlGbG9hdFF1YWRFUE5TXzIyUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dEVqUGIKIF9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVjdDIzYWJzb2x1dGVCb3VuZGluZ0JveFJl
Y3RFYgogX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MzlwaXhlbFNuYXBwZWRBYnNvbHV0ZUNs
aXBwZWRPdmVyZmxvd1JlY3RFdgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gMTMzNjY0
KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0zNzQs
OCArMzc0LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9Gb250U21vb3RoaW5n
TW9kZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9Gb250VHJhaXRzTWFzay5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9Gb250V2lkdGhWYXJpYW50LmgnLAot
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmgnLAot
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRTaXplLmgnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJlY3QuaCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0U2l6ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9HZW5lcmF0b3IuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
R2x5cGguaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCdWZmZXIuaCcs
CkBAIC01NTgsOCArNTU4LDYgQEAKICAgICAgICAgICAgICdyZW5kZXJpbmcvSW5saW5lRmxvd0Jv
eC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oJywKICAgICAgICAg
ICAgICdyZW5kZXJpbmcvTGF5b3V0U3RhdGUuaCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL0xh
eW91dFR5cGVzLmgnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9MYXlvdXRUeXBlc0lubGluZU1l
dGhvZHMuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL0xheW91dFJlcGFpbnRlci5oJywKICAg
ICAgICAgICAgICdyZW5kZXJpbmcvT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmgnLAogICAgICAg
ICAgICAgJ3JlbmRlcmluZy9QYWdpbmF0aW9uLmgnLApAQCAtNDc4NCw3ICs0NzgyLDcgQEAKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oJywKLSAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmNwcCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50LmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2UuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmgnLApAQCAtNTkwMyw3ICs1OTAx
LDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9MYXlvdXRSZWN0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvUmVnaW9uLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jt
cy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMTMzNjY0KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTI4Mzk5LDcgKzI4Mzk5LDcgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQot
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cRnJhY3Rpb25hbExheW91dFVuaXQuaCIKKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXExheW91dFVuaXQuaCIKIAkJCQk+CiAJCQk8L0Zp
bGU+CiAJCQk8RmlsZQpAQCAtMjk0ODYsMjcgKzI5NDg2LDI3IEBACiAJCQkJCT4KIAkJCQk8L0Zp
bGU+CiAJCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xG
cmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmgiCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cZ3JhcGhpY3NcTGF5b3V0Qm94RXh0ZW50LmgiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJ
PEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGcmFjdGlvbmFs
TGF5b3V0Qm94RXh0ZW50LmNwcCIKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1xMYXlvdXRCb3hFeHRlbnQuY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxl
Ci0JCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRnJhY3Rpb25hbExheW91
dFBvaW50LmgiCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcTGF5b3V0
UG9pbnQuaCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcCIKKwkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xMYXlvdXRSZWN0LmNwcCIKIAkJCQkJ
PgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3Jt
XGdyYXBoaWNzXEZyYWN0aW9uYWxMYXlvdXRSZWN0LmgiCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcTGF5b3V0UmVjdC5oIgogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJ
CTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRnJhY3Rpb25h
bExheW91dFNpemUuaCIKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xM
YXlvdXRTaXplLmgiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKQEAgLTM4OTYzLDEw
ICszODk2Myw2IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHJlbmRlcmluZ1xMYXlvdXRUeXBlcy5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxG
aWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUGFpbnRJbmZvLmgiCiAJCQkJPgog
CQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQsNiAr
MzA0LDEzIEBACiAJCTE0MTE1QjcyMDlGODRDRDYwMENBNEZDMSAvKiBKU05vZGVGaWx0ZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxMTVCNzAw
OUY4NENENjAwQ0E0RkMxIC8qIEpTTm9kZUZpbHRlci5jcHAgKi87IH07CiAJCTE0MTE1QjczMDlG
ODRDRDYwMENBNEZDMSAvKiBKU05vZGVGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTE1QjcxMDlGODRDRDYwMENBNEZDMSAvKiBKU05vZGVG
aWx0ZXIuaCAqLzsgfTsKIAkJMTQxOUQyQzUwQ0VBNkY2MTAwRkY1MDdBIC8qIFRyZWVTaGFyZWQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTlEMkM0
MENFQTZGNjEwMEZGNTA3QSAvKiBUcmVlU2hhcmVkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTQxREMwNDgxNjQ4MzQ4RjAwMzcxRTVBIC8qIExh
eW91dFVuaXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0MURDMDQ3MTY0ODM0OEYwMDM3MUU1QSAvKiBMYXlvdXRVbml0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTQxREMwNEYxNjQ4MzRCOTAwMzcx
RTVBIC8qIExheW91dEJveEV4dGVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxNDFEQzA0OTE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0Qm94RXh0
ZW50LmNwcCAqLzsgfTsKKwkJMTQxREMwNTAxNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dEJveEV4
dGVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQx
REMwNEExNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dEJveEV4dGVudC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0MURDMDUxMTY0ODM0QjkwMDM3
MUU1QSAvKiBMYXlvdXRQb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTQxREMwNEIxNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dFBvaW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTQxREMwNTIx
NjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dFJlY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxREMwNEMxNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91
dFJlY3QuY3BwICovOyB9OworCQkxNDFEQzA1MzE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0UmVj
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxREMw
NEQxNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dFJlY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNDFEQzA1NDE2NDgzNEI5MDAzNzFFNUEgLyog
TGF5b3V0U2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQxREMwNEUxNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dFNpemUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDIwMTFCNjBBMDAzMTMzMDA4
MzAzRjkgLyogSlNDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MjAxMUI0MEEwMDMxMzMwMDgzMDNGOSAvKiBKU0NT
U1N0eWxlRGVjbGFyYXRpb24uY3BwICovOyB9OwogCQkxNDIwMTFCNzBBMDAzMTMzMDA4MzAzRjkg
LyogSlNDU1NTdHlsZURlY2xhcmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxNDIwMTFCNTBBMDAzMTMzMDA4MzAzRjkgLyogSlNDU1NTdHlsZURl
Y2xhcmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMTQyQjk3QzkxMzEzODk0MzAwOEJFRjRCIC8qIFRleHRDb250cm9sSW5uZXJFbGVtZW50
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDJC
OTdDNzEzMTM4OTQzMDA4QkVGNEIgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCAqLzsg
fTsKQEAgLTMxMywxMCArMzIwLDYgQEAKIAkJMTQ0NzZBQTgxNURDNEJCMTAwMzA1REIyIC8qIFdy
aXRpbmdNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDQ3NkFBNzE1REM0QkIxMDAzMDVEQjIgLyogV3JpdGluZ01vZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDQ5RTI0QzEwN0Q0QTg0MDBC
NTc5M0YgLyogSlNDYWxsYmFja0RhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE0NDlFMjRBMTA3RDRBODQwMEI1NzkzRiAvKiBKU0NhbGxiYWNrRGF0
YS5oICovOyB9OwogCQkxNDQ5RTI4NzEwN0Q0REI0MDBCNTc5M0YgLyogSlNDYWxsYmFja0RhdGEu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0OUUy
ODYxMDdENERCNDAwQjU3OTNGIC8qIEpTQ2FsbGJhY2tEYXRhLmNwcCAqLzsgfTsKLQkJMTQ0RkNF
NTIxNEVDNzlCQzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRVbml0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDRGQ0U1MTE0RUM3OUJDMDAwRDE3
QTMgLyogRnJhY3Rpb25hbExheW91dFVuaXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQkxNDRGQ0U1RDE0RUM3OUU3MDAwRDE3QTMgLyogRnJhY3Rp
b25hbExheW91dFNpemUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0NEZDRTU4MTRFQzc5RTcwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0U2l6ZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTE0NEZD
RkUwMTRFRjI1MDkwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDRGQ0ZERTE0RUYyNTA5MDAw
RDE3QTMgLyogRnJhY3Rpb25hbExheW91dFJlY3QuY3BwICovOyB9OwotCQkxNDRGQ0ZFMTE0RUYy
NTA5MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFJlY3QuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NEZDRkRGMTRFRjI1MDkwMDBEMTdBMyAvKiBG
cmFjdGlvbmFsTGF5b3V0UmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTE0NjRFMDZDMTM1RUMxMDYwMEZEQjAwQSAvKiBKU01lZGlhTGlzdEN1
c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDY0RTA2QjEzNUVDMTA2MDBGREIwMEEgLyogSlNNZWRpYUxpc3RDdXN0b20uY3BwICovOyB9Owog
CQkxNDZDQzExNTE1Njk4OEU0MDAxMDlFMzcgLyogTGVuZ3RoQm94LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NkNDMTEzMTU2OTg4QkQwMDEwOUUz
NyAvKiBMZW5ndGhCb3guY3BwICovOyB9OwogCQkxNDc3RTc3NjBCRjQxMzRBMDAxNTI4NzIgLyog
UGFnZUNhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0NzdFNzc0MEJGNDEzNEEwMDE1Mjg3MiAvKiBQYWdlQ2FjaGUuY3BwICovOyB9OwpAQCAt
MzI5LDggKzMzMiw2IEBACiAJCTE0NzlGQUYyMTA5QUUzNzUwMERFRDY1NSAvKiBSZW5kZXJSdWJ5
UnVuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDc5
RkFFQTEwOUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieVJ1bi5oICovOyB9OwogCQkxNDc5RkFG
MzEwOUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieVRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3OUZBRUIxMDlBRTM3NTAwREVENjU1IC8q
IFJlbmRlclJ1YnlUZXh0LmNwcCAqLzsgfTsKIAkJMTQ3OUZBRjQxMDlBRTM3NTAwREVENjU1IC8q
IFJlbmRlclJ1YnlUZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNDc5RkFFQzEwOUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieVRleHQuaCAqLzsg
fTsKLQkJMTQ4MkUwQzYxNTZDMzZERTAwOTY1MDY1IC8qIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRl
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4
MkUwQzQxNTZDMzZERTAwOTY1MDY1IC8qIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuY3BwICov
OyB9OwotCQkxNDgyRTBDNzE1NkMzNkRFMDA5NjUwNjUgLyogRnJhY3Rpb25hbExheW91dEJveEV4
dGVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4
MkUwQzUxNTZDMzZERTAwOTY1MDY1IC8qIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDhBRkRBNTBB
RjU4MzYwMDA4Q0M3MDAgLyogRXhjZXB0aW9uSGFuZGxlcnMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0OEFGREEzMEFGNTgzNjAwMDhDQzcwMCAvKiBF
eGNlcHRpb25IYW5kbGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTE0OEFGREE2MEFGNTgzNjAwMDhDQzcwMCAvKiBFeGNlcHRpb25IYW5kbGVy
cy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0OEFG
REE0MEFGNTgzNjAwMDhDQzcwMCAvKiBFeGNlcHRpb25IYW5kbGVycy5tbSAqLzsgfTsKIAkJMTQ5
NDdGRkQxMkY4MENEMjAwQTBGNjMxIC8qIERvY3VtZW50T3JkZXJlZE1hcC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDk0N0ZGQjEyRjgwQ0QyMDBB
MEY2MzEgLyogRG9jdW1lbnRPcmRlcmVkTWFwLmNwcCAqLzsgfTsKQEAgLTkyMyw3ICs5MjQsNiBA
QAogCQkzMTlFNjlCNTEzMjk5QkJEMDA0QUM5MUEgLyogV2ViS2l0QW5pbWF0aW9uTGlzdC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTlFNjlBRjEz
Mjk5QkJEMDA0QUM5MUEgLyogV2ViS2l0QW5pbWF0aW9uTGlzdC5jcHAgKi87IH07CiAJCTMxOUU2
OUI2MTMyOTlCQkQwMDRBQzkxQSAvKiBXZWJLaXRBbmltYXRpb25MaXN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTlFNjlCMDEzMjk5QkJEMDA0QUM5
MUEgLyogV2ViS2l0QW5pbWF0aW9uTGlzdC5oICovOyB9OwogCQkzMTlGQkQ1RjE1RDJGNDY0MDA5
NjQwQTYgLyogQ2FjaGVkSW1hZ2VDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMxOUZCRDVEMTVEMkY0NDQwMDk2NDBBNiAvKiBDYWNoZWRJbWFn
ZUNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCTMxQjgwMUJCMTVFQzU4QzcwMENFNjQzRCAvKiBMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0ODk0Q0E4
MTVFQzQ4OTcwMEE0MDQ4MSAvKiBMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzMUMwRkYyMTBFNENFQjZF
MDA3RDZGRTUgLyogV2ViS2l0QW5pbWF0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFDMEZGMUIwRTRDRUI2RTAwN0Q2RkU1IC8qIFdl
YktpdEFuaW1hdGlvbkV2ZW50LmNwcCAqLzsgfTsKIAkJMzFDMEZGMjIwRTRDRUI2RTAwN0Q2RkU1
IC8qIFdlYktpdEFuaW1hdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzMUMwRkYxQzBFNENFQjZFMDA3RDZGRTUgLyogV2ViS2l0QW5pbWF0
aW9uRXZlbnQuaCAqLzsgfTsKIAkJMzFDMEZGMjQwRTRDRUI2RTAwN0Q2RkU1IC8qIFdlYktpdFRy
YW5zaXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzMUMwRkYxRTBFNENFQjZFMDA3RDZGRTUgLyogV2ViS2l0VHJhbnNpdGlvbkV2ZW50
LmNwcCAqLzsgfTsKQEAgLTUyODgsOCArNTI4OCw2IEBACiAJCUI4REJEQjRDMTMwQjBGOEEwMEY1
Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCOERCREI0ODEzMEIwRjhBMDBGNUNEQjEgLyogU2V0U2VsZWN0
aW9uQ29tbWFuZC5oICovOyB9OwogCQlCOERCREI0RDEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxp
bmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCOERCREI0OTEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3JyZWN0
aW9uQ29tbWFuZC5jcHAgKi87IH07CiAJCUI4REJEQjRFMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVs
bGluZ0NvcnJlY3Rpb25Db21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCOERCREI0QTEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3JyZWN0
aW9uQ29tbWFuZC5oICovOyB9OwotCQlCQUIxQzA2QTE0RkMzNjc5MDA0MjMzRkMgLyogRnJhY3Rp
b25hbExheW91dFBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNDRGQ0U1NDE0RUM3OUU3MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFBvaW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQkFD
RjI5MDExM0IyQTBENTAwNzgxRjkwIC8qIExheW91dFR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQUNGMjkwMDEzQjJBMEQ1MDA3ODFGOTAgLyog
TGF5b3V0VHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlCQzAwRjAwNDBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMEVGRkUwRTBBMTg1NTAwRkQw
NEUzIC8qIERPTUZpbGUuaCAqLzsgfTsKIAkJQkMwMEYwMDUwRTBBMTg1NTAwRkQwNEUzIC8qIERP
TUZpbGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
QzAwRUZGRjBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5tbSAqLzsgfTsKIAkJQkMwMEYwMDYw
RTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMEYwMDAwRTBBMTg1NTAwRkQwNEUzIC8qIERP
TUZpbGVJbnRlcm5hbC5oICovOyB9OwpAQCAtNzM4OCw2ICs3Mzg2LDEzIEBACiAJCTE0MTlEMkM0
MENFQTZGNjEwMEZGNTA3QSAvKiBUcmVlU2hhcmVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRyZWVTaGFyZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQx
Qjk0RTUwOUVDNDIyMzAwMEU5NDEzIC8qIE1vdXNlRXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBNb3VzZUV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQx
Qjk0RUUwOUVDNDI1QTAwMEU5NDEzIC8qIFVJRXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBVSUV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQxREMwNDcx
NjQ4MzQ4RjAwMzcxRTVBIC8qIExheW91dFVuaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTGF5b3V0VW5pdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDFE
QzA0OTE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0Qm94RXh0ZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dEJveEV4dGVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTE0MURDMDRBMTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRCb3hF
eHRlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0Qm94RXh0ZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0MURDMDRCMTY0ODM0QjkwMDM3MUU1
QSAvKiBMYXlvdXRQb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlv
dXRQb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDFEQzA0QzE2NDgzNEI5
MDAzNzFFNUEgLyogTGF5b3V0UmVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBMYXlvdXRSZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQx
REMwNEQxNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dFJlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTGF5b3V0UmVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkxNDFEQzA0RTE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0U2l6ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRTaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTE0MjAxMUFFMEEwMDMxMTcwMDgzMDNGOSAvKiBDU1NTdHlsZURlY2xhcmF0aW9uLmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQ1NTU3R5bGVEZWNsYXJhdGlvbi5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MjAxMUI0MEEwMDMxMzMwMDgzMDNGOSAvKiBKU0NT
U1N0eWxlRGVjbGFyYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE0MjAxMUI1MEEwMDMxMzMwMDgzMDNGOSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzM5OCwxMSArNzQwMyw2IEBACiAJCTE0
NDc2QUE3MTVEQzRCQjEwMDMwNURCMiAvKiBXcml0aW5nTW9kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXcml0aW5nTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxNDQ5RTI0QTEwN0Q0QTg0MDBCNTc5M0YgLyogSlNDYWxsYmFja0RhdGEuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYWxsYmFja0RhdGEuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0OUUyODYxMDdENERCNDAwQjU3OTNGIC8qIEpTQ2FsbGJhY2tE
YXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FsbGJhY2tE
YXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTQ0RkNFNTExNEVDNzlCQzAw
MEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRVbml0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEZyYWN0aW9uYWxMYXlvdXRVbml0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTE0NEZDRTU0MTRFQzc5RTcwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnJhY3Rpb25hbExheW91dFBvaW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0NEZDRTU4MTRFQzc5RTcwMDBEMTdB
MyAvKiBGcmFjdGlvbmFsTGF5b3V0U2l6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGcmFjdGlvbmFsTGF5b3V0U2l6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkxNDRGQ0ZERTE0RUYyNTA5MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFJlY3QuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRnJhY3Rpb25hbExheW91dFJlY3Qu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxNDRGQ0ZERjE0RUYyNTA5MDAwRDE3
QTMgLyogRnJhY3Rpb25hbExheW91dFJlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRnJhY3Rpb25hbExheW91dFJlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMTQ2NEUwNkIxMzVFQzEwNjAwRkRCMDBBIC8qIEpTTWVkaWFMaXN0Q3VzdG9tLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWVkaWFMaXN0Q3VzdG9tLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ2Q0MxMTMxNTY5ODhCRDAwMTA5RTM3IC8q
IExlbmd0aEJveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZW5n
dGhCb3guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDc3RTc3NDBCRjQxMzRB
MDAxNTI4NzIgLyogUGFnZUNhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQYWdlQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzQx
Niw4ICs3NDE2LDYgQEAKIAkJMTQ3OUZBRUIxMDlBRTM3NTAwREVENjU1IC8qIFJlbmRlclJ1YnlU
ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclJ1YnlU
ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ3OUZBRUMxMDlBRTM3NTAw
REVENjU1IC8qIFJlbmRlclJ1YnlUZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlbmRlclJ1YnlUZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0ODEz
QkYzMDlFREY4OEUwMEY3NTdFMSAvKiBJRExQYXJzZXIucG0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3Jp
cHQucGVybDsgbmFtZSA9IElETFBhcnNlci5wbTsgcGF0aCA9IHNjcmlwdHMvSURMUGFyc2VyLnBt
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxNDgyRTBDNDE1NkMzNkRFMDA5NjUwNjUg
LyogRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMTQ4MkUwQzUxNTZDMzZERTAwOTY1MDY1IC8qIEZyYWN0aW9uYWxM
YXlvdXRCb3hFeHRlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnJhY3Rp
b25hbExheW91dEJveEV4dGVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDhB
RkRBMzBBRjU4MzYwMDA4Q0M3MDAgLyogRXhjZXB0aW9uSGFuZGxlcnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2VwdGlvbkhhbmRsZXJzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0OEFGREE0MEFGNTgzNjAwMDhDQzcwMCAvKiBFeGNlcHRpb25IYW5k
bGVycy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBFeGNlcHRp
b25IYW5kbGVycy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ5NDdGRkIxMkY4
MENEMjAwQTBGNjMxIC8qIERvY3VtZW50T3JkZXJlZE1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEb2N1bWVudE9yZGVyZWRNYXAuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtOTM4NSw3ICs5MzgzLDYgQEAKIAkJODQ4NTIyODcxMTkwMTczQzAw
NkVEQzdGIC8qIFNWR1ZLZXJuRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTVkdWS2VybkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4NDg1MjI4ODExOTAxNzNDMDA2RURDN0YgLyogU1ZHVktlcm5FbGVtZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ZLZXJuRWxlbWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4NDg1MjI4OTExOTAxNzNDMDA2RURDN0YgLyogU1ZHVktlcm5F
bGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTVkdWS2VybkVsZW1lbnQuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NDg5NENBODE1RUM0ODk3MDBBNDA0ODEgLyog
TGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IExheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4NDlGNzc3NTBFRkVDNjIwMDA5MDg0OUQgLyogU3Ryb2tlU3R5bGVBcHBsaWVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cm9rZVN0eWxlQXBwbGllci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NEE4MUYzQjBGQzdERkYwMDA5NTUzMDAgLyogU291
cmNlQWxwaGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU291cmNl
QWxwaGEuY3BwOyBwYXRoID0gZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTg0QTgxRjNDMEZDN0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VBbHBoYS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTb3VyY2VBbHBoYS5oOyBwYXRoID0g
ZmlsdGVycy9Tb3VyY2VBbHBoYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI2
MjIsNyArMTI2MTksNiBAQAogCQlCOERCREI0ODEzMEIwRjhBMDBGNUNEQjEgLyogU2V0U2VsZWN0
aW9uQ29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZXRTZWxlY3Rp
b25Db21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI4REJEQjQ5MTMwQjBG
OEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCOERCREI0QTEzMEIwRjhBMDBGNUNEQjEgLyog
U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUJBQ0YyOTAwMTNCMkEwRDUwMDc4MUY5MCAvKiBMYXlvdXRUeXBlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCQzAwRUZGRTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01GaWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJDMDBFRkZGMEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NRmlsZS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMEYwMDAwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGVJ
bnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01GaWxlSW50ZXJu
YWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5OTg1LDEyICsxOTk4MSwxMiBA
QAogCQkJCTM3MjAyMTk4MTA2MjEzQzYwMEYyNUM0QiAvKiBGb250U21vb3RoaW5nTW9kZS5oICov
LAogCQkJCTM3ODRDMzRBMEUxMUFBMzQwMDdEOEQ0OCAvKiBGb250VHJhaXRzTWFzay5oICovLAog
CQkJCUJDRTQ0MTM1MTJGNzQ5MEIwMDlCODRCOCAvKiBGb250V2lkdGhWYXJpYW50LmggKi8sCi0J
CQkJMTQ4MkUwQzQxNTZDMzZERTAwOTY1MDY1IC8qIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQu
Y3BwICovLAotCQkJCTE0ODJFMEM1MTU2QzM2REUwMDk2NTA2NSAvKiBGcmFjdGlvbmFsTGF5b3V0
Qm94RXh0ZW50LmggKi8sCi0JCQkJMTQ0RkNFNTQxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9u
YWxMYXlvdXRQb2ludC5oICovLAotCQkJCTE0NEZDRkRFMTRFRjI1MDkwMDBEMTdBMyAvKiBGcmFj
dGlvbmFsTGF5b3V0UmVjdC5jcHAgKi8sCi0JCQkJMTQ0RkNGREYxNEVGMjUwOTAwMEQxN0EzIC8q
IEZyYWN0aW9uYWxMYXlvdXRSZWN0LmggKi8sCi0JCQkJMTQ0RkNFNTgxNEVDNzlFNzAwMEQxN0Ez
IC8qIEZyYWN0aW9uYWxMYXlvdXRTaXplLmggKi8sCisJCQkJMTQxREMwNDkxNjQ4MzRCOTAwMzcx
RTVBIC8qIExheW91dEJveEV4dGVudC5jcHAgKi8sCisJCQkJMTQxREMwNEExNjQ4MzRCOTAwMzcx
RTVBIC8qIExheW91dEJveEV4dGVudC5oICovLAorCQkJCTE0MURDMDRCMTY0ODM0QjkwMDM3MUU1
QSAvKiBMYXlvdXRQb2ludC5oICovLAorCQkJCTE0MURDMDRDMTY0ODM0QjkwMDM3MUU1QSAvKiBM
YXlvdXRSZWN0LmNwcCAqLywKKwkJCQkxNDFEQzA0RDE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0
UmVjdC5oICovLAorCQkJCTE0MURDMDRFMTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRTaXplLmgg
Ki8sCiAJCQkJNEZCMzkwQUMxNUVGNjFGMzAwN0FENTFGIC8qIEdlbmVyYXRlZEltYWdlLmNwcCAq
LywKIAkJCQlCQzIzRjBEQTBEQUZGNEE0MDA5RkRDOTEgLyogR2VuZXJhdGVkSW1hZ2UuaCAqLywK
IAkJCQlCQ0UwNEM4OTBEQUZGN0EwMDA3QTBGNDEgLyogR2VuZXJhdG9yLmggKi8sCkBAIC0yMDg4
OCw3ICsyMDg4NCw3IEBACiAJCQkJQzU3RkVERTAxMjEyRUU5QzAwOTdCRTY1IC8qIEZpbGVTeXN0
ZW0uY3BwICovLAogCQkJCTUxNEIzRjcyMEM3MjIwNDcwMDA1MzBERiAvKiBGaWxlU3lzdGVtLmgg
Ki8sCiAJCQkJQkMwNzNCQTkwQzM5OUIxRjAwMEY1OTc5IC8qIEZsb2F0Q29udmVyc2lvbi5oICov
LAotCQkJCTE0NEZDRTUxMTRFQzc5QkMwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0VW5pdC5o
ICovLAorCQkJCTE0MURDMDQ3MTY0ODM0OEYwMDM3MUU1QSAvKiBMYXlvdXRVbml0LmggKi8sCiAJ
CQkJQTg3NDhCREYxMkNCRjJEQzAwMUZCQTQxIC8qIEhhc2hUb29scy5oICovLAogCQkJCUQ2RkRB
RUYyMTQ5QzA2MTkwMDM3QjFFMSAvKiBIaXN0b2dyYW1TdXBwb3J0LmNwcCAqLywKIAkJCQlENjMw
RTJBQjE0OUJGMzQ0MDA1QjJGOTMgLyogSGlzdG9ncmFtU3VwcG9ydC5oICovLApAQCAtMjE0NzAs
OCArMjE0NjYsNiBAQAogCQkJCUExMjBBQ0EwMTNGOTk4MzcwMEZFNEFDNyAvKiBMYXlvdXRSZXBh
aW50ZXIuaCAqLywKIAkJCQkyRDkwNjYwNDBCRTE0MUQ0MDA5NTY5OTggLyogTGF5b3V0U3RhdGUu
Y3BwICovLAogCQkJCTJEOTA2NjA1MEJFMTQxRDQwMDk1Njk5OCAvKiBMYXlvdXRTdGF0ZS5oICov
LAotCQkJCUJBQ0YyOTAwMTNCMkEwRDUwMDc4MUY5MCAvKiBMYXlvdXRUeXBlcy5oICovLAotCQkJ
CTg0ODk0Q0E4MTVFQzQ4OTcwMEE0MDQ4MSAvKiBMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCAq
LywKIAkJCQkzNzc0QUJBMzBGQTIxRUI0MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xp
ZW50LmggKi8sCiAJCQkJOTM3N0FCOUYxNURFRkVFRjAwMzFGRDA0IC8qIFBhZ2luYXRpb24uaCAq
LywKIAkJCQkwODg1MDY3RDExREEwNDVCMDAxODJCOTggLyogUGFpbnRJbmZvLmggKi8sCkBAIC0y
MzYwOCwxMSArMjM2MDIsNiBAQAogCQkJCTY1NkQzNzNBMEFEQkE1REUwMEE0NTU0RCAvKiBGb3Jt
U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxODg1QjkzMTFCNkZEQTYwMDMzODNCQiAvKiBG
b3JtU3VibWlzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1QzQ3NkQwOUFDNEQ2MzAwQTZB
QUI0IC8qIEZvdW5kYXRpb25FeHRyYXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTE0ODJFMEM3MTU2
QzM2REUwMDk2NTA2NSAvKiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmggaW4gSGVhZGVycyAq
LywKLQkJCQlCQUIxQzA2QTE0RkMzNjc5MDA0MjMzRkMgLyogRnJhY3Rpb25hbExheW91dFBvaW50
LmggaW4gSGVhZGVycyAqLywKLQkJCQkxNDRGQ0ZFMTE0RUYyNTA5MDAwRDE3QTMgLyogRnJhY3Rp
b25hbExheW91dFJlY3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTE0NEZDRTVEMTRFQzc5RTcwMDBE
MTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0U2l6ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTQ0RkNF
NTIxNEVDNzlCQzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRVbml0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlBODUzMTIzRDExRDA0NzFCMDBENEQwNzcgLyogRnJhZ21lbnRTY3JpcHRpbmdQZXJt
aXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NUJGMDIyRjA5NzQ4MTYzMDBDNDMxOTYgLyog
RnJhbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QjA3MEQzMTMwQTQwOUMwMEEzNzYzQyAvKiBG
cmFtZUFjdGlvblNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDQ5MCw4ICsyNDQ3OSwx
MSBAQAogCQkJCUExMjUzOEQ0MTNGOUI2MEEwMDAyNDc1NCAvKiBMYXlvdXRSZXBhaW50ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTJEOTA2NjA3MEJFMTQxRDQwMDk1Njk5OCAvKiBMYXlvdXRTdGF0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRDYzMEUyQUMxNDlCRjM0NDAwNUIyRjkzIC8qIExheW91
dFRlc3RTdXBwb3J0LmggaW4gSGVhZGVycyAqLywKLQkJCQlCQUNGMjkwMTEzQjJBMEQ1MDA3ODFG
OTAgLyogTGF5b3V0VHlwZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTMxQjgwMUJCMTVFQzU4Qzcw
MENFNjQzRCAvKiBMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTE0MURDMDQ4MTY0ODM0OEYwMDM3MUU1QSAvKiBMYXlvdXRVbml0LmggaW4gSGVhZGVycyAqLywK
KwkJCQkxNDFEQzA1MDE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0Qm94RXh0ZW50LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkxNDFEQzA1MTE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0UG9pbnQuaCBp
biBIZWFkZXJzICovLAorCQkJCTE0MURDMDUzMTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRSZWN0
LmggaW4gSGVhZGVycyAqLywKKwkJCQkxNDFEQzA1NDE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0
U2l6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEyREQ4RjUwRDkxRTZBRjAwMEY4OUVFIC8qIExl
Z2FjeVdlYkFyY2hpdmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTY1QkVCMEVBQ0RGMTYwMDdF
NDUzMyAvKiBMZW5ndGguaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRkY2NDkxMEVBRDE1QzIwMEMx
RDZGNyAvKiBMZW5ndGhCb3guaCBpbiBIZWFkZXJzICovLApAQCAtMjY4MzQsOCArMjY4MjYsNiBA
QAogCQkJCTUxNEM3NjRGMENFOTIzNEUwMDdFRjNDRCAvKiBGb3JtRGF0YVN0cmVhbU1hYy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTY1NkQzNzNCMEFEQkE1REUwMEE0NTU0RCAvKiBGb3JtU3RhdGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE4ODVCOTQxMUI2RkRBNjAwMzM4M0JCIC8qIEZvcm1T
dWJtaXNzaW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTE0ODJFMEM2MTU2QzM2REUwMDk2NTA2
NSAvKiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTE0
NEZDRkUwMTRFRjI1MDkwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk2NUJGMDIyRTA5NzQ4MTYzMDBDNDMxOTYgLyogRnJhbWUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTdCMDcwRDIxMzBBNDA5QzAwQTM3NjNDIC8qIEZyYW1lQWN0aW9uU2No
ZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3NEE4NjIyMTRCN0FEQkIwMDNGREM3NiAv
KiBGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzc5Niw2
ICsyNzc4Niw4IEBACiAJCQkJOTM1MjA4NDUwOUJENDNCOTAwRjIwMzhEIC8qIExhbmd1YWdlLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJMjkxN0I1NjExNDczNDk2QzAwNTJDOUQwIC8qIExheWVyRmx1
c2hTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjkxN0I1NjYxNDczNDk5NTAwNTJD
OUQwIC8qIExheWVyRmx1c2hTY2hlZHVsZXJNYWMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTQx
REMwNEYxNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dEJveEV4dGVudC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkxNDFEQzA1MjE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0UmVjdC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBMTIwQUNBNDEzRjk5OENBMDBGRTRBQzcgLyogTGF5b3V0UmVwYWludGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEOTA2NjA2MEJFMTQxRDQwMDk1Njk5OCAvKiBMYXlv
dXRTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlENkZEQUVGMzE0OUMwNjE5MDAzN0IxRTUg
LyogTGF5b3V0VGVzdFN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
LmNwcAkocmV2aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw3ICsyMzQs
NyBAQCBMYXlvdXRSZWN0IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojpib3VuCiAgICAgZm9yIChB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBwb3NpdGlvblByb3ZpZGVyID0gcGFyZW50T2JqZWN0KCk7IHBv
c2l0aW9uUHJvdmlkZXI7IHBvc2l0aW9uUHJvdmlkZXIgPSBwb3NpdGlvblByb3ZpZGVyLT5wYXJl
bnRPYmplY3QoKSkgewogICAgICAgICBpZiAocG9zaXRpb25Qcm92aWRlci0+aXNBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0KCkpIHsKICAgICAgICAgICAgIExheW91dFJlY3QgcGFyZW50UmVjdCA9
IHBvc2l0aW9uUHJvdmlkZXItPmVsZW1lbnRSZWN0KCk7Ci0gICAgICAgICAgICBib3VuZGluZ0Jv
eC5zZXRTaXplKExheW91dFNpemUocGFyZW50UmVjdC53aWR0aCgpLCBGcmFjdGlvbmFsTGF5b3V0
VW5pdChzdGQ6Om1pbigxMC4wZiwgcGFyZW50UmVjdC5oZWlnaHQoKS50b0Zsb2F0KCkpKSkpOwor
ICAgICAgICAgICAgYm91bmRpbmdCb3guc2V0U2l6ZShMYXlvdXRTaXplKHBhcmVudFJlY3Qud2lk
dGgoKSwgTGF5b3V0VW5pdChzdGQ6Om1pbigxMC4wZiwgcGFyZW50UmVjdC5oZWlnaHQoKS50b0Zs
b2F0KCkpKSkpOwogICAgICAgICAgICAgYm91bmRpbmdCb3guc2V0TG9jYXRpb24ocGFyZW50UmVj
dC5sb2NhdGlvbigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdC5oCShyZXZpc2lvbiAxMzM2NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcg
QEAKICNkZWZpbmUgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3RfaAogCiAjaW5jbHVkZSAiQWNjZXNz
aWJpbGl0eU9iamVjdC5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5
b3V0UmVjdC5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5oCShyZXZpc2lvbiAxMzM2NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEs
NyBAQAogI2RlZmluZSBBY2Nlc3NpYmlsaXR5T2JqZWN0X2gKIAogI2luY2x1ZGUgIkZsb2F0UXVh
ZC5oIgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRSZWN0LmgiCi0jaW5jbHVkZSAiTGF5b3V0
VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVNlbGVj
dGlvbi5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDEzMzY2NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjZGVmaW5lIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3RfaAogCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaCIKLSNpbmNsdWRl
ICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvTGVuZ3RoRnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
TGVuZ3RoRnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL0xlbmd0aEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKIAotI2lu
Y2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgogI2luY2x1ZGUg
Ikxlbmd0aC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKIApAQCAtNTUsMjAgKzU1LDIwIEBA
IExheW91dFVuaXQgbWluaW11bVZhbHVlRm9yTGVuZ3RoKGNvbnN0IEwKICAgICBjYXNlIFZpZXdw
b3J0UGVyY2VudGFnZVdpZHRoOgogICAgICAgICBpZiAocmVuZGVyVmlldykKICAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PihyZW5kZXJWaWV3LT52aWV3cG9ydFNpemUo
KS53aWR0aCgpICogbGVuZ3RoLnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpIC8gMTAwLjBmKTsK
LSAgICAgICAgcmV0dXJuIFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAgIHJldHVybiAwOwogICAg
IGNhc2UgVmlld3BvcnRQZXJjZW50YWdlSGVpZ2h0OgogICAgICAgICBpZiAocmVuZGVyVmlldykK
ICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PihyZW5kZXJWaWV3LT52
aWV3cG9ydFNpemUoKS5oZWlnaHQoKSAqIGxlbmd0aC52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgo
KSAvIDEwMC4wZik7Ci0gICAgICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOworICAgICAgICBy
ZXR1cm4gMDsKICAgICBjYXNlIFZpZXdwb3J0UGVyY2VudGFnZU1pbjoKICAgICAgICAgaWYgKHJl
bmRlclZpZXcpIHsKICAgICAgICAgICAgIEludFNpemUgdmlld3BvcnRTaXplID0gcmVuZGVyVmll
dy0+dmlld3BvcnRTaXplKCk7CiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TGF5b3V0
VW5pdD4oc3RkOjptaW4odmlld3BvcnRTaXplLndpZHRoKCksIHZpZXdwb3J0U2l6ZS5oZWlnaHQo
KSkgKiBsZW5ndGgudmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkgLyAxMDAuMGYpOwogICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOworICAgICAgICByZXR1cm4gMDsK
ICAgICBjYXNlIEZpbGxBdmFpbGFibGU6CiAgICAgY2FzZSBBdXRvOgotICAgICAgICByZXR1cm4g
WkVST19MQVlPVVRfVU5JVDsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgY2FzZSBSZWxhdGl2ZToK
ICAgICBjYXNlIEludHJpbnNpYzoKICAgICBjYXNlIE1pbkludHJpbnNpYzoKQEAgLTc3LDEwICs3
NywxMCBAQCBMYXlvdXRVbml0IG1pbmltdW1WYWx1ZUZvckxlbmd0aChjb25zdCBMCiAgICAgY2Fz
ZSBGaXRDb250ZW50OgogICAgIGNhc2UgVW5kZWZpbmVkOgogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAgIHJldHVy
biAwOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gWkVST19M
QVlPVVRfVU5JVDsKKyAgICByZXR1cm4gMDsKIH0KIAogTGF5b3V0VW5pdCB2YWx1ZUZvckxlbmd0
aChjb25zdCBMZW5ndGgmIGxlbmd0aCwgTGF5b3V0VW5pdCBtYXhpbXVtVmFsdWUsIFJlbmRlclZp
ZXcqIHJlbmRlclZpZXcsIGJvb2wgcm91bmRQZXJjZW50YWdlcykKQEAgLTEwNCwxMCArMTA0LDEw
IEBAIExheW91dFVuaXQgdmFsdWVGb3JMZW5ndGgoY29uc3QgTGVuZ3RoJgogICAgIGNhc2UgRml0
Q29udGVudDoKICAgICBjYXNlIFVuZGVmaW5lZDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOworICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFpFUk9fTEFZT1VU
X1VOSVQ7CisgICAgcmV0dXJuIDA7CiB9CiAKIC8vIEZJWE1FOiB3aGVuIHN1YnBpeGVsIGxheW91
dCBpcyBzdXBwb3J0ZWQgdGhpcyBjb3B5IG9mIGZsb2F0VmFsdWVGb3JMZW5ndGgoKSBjYW4gYmUg
cmVtb3ZlZC4gU2VlIGJ1ZyA3MTE0My4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9MZW5ndGhG
dW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvTGVuZ3RoRnVuY3Rp
b25zLmgJKHJldmlzaW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9MZW5ndGhGdW5j
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTAgKzI0LDkgQEAKICNpZm5kZWYgTGVuZ3Ro
RnVuY3Rpb25zX2gKICNkZWZpbmUgTGVuZ3RoRnVuY3Rpb25zX2gKIAotI2luY2x1ZGUgIkxheW91
dFR5cGVzLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgTGF5b3V0VW5pdDsKIGNs
YXNzIFJlbmRlclZpZXc7CiBzdHJ1Y3QgTGVuZ3RoOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
aAkocmV2aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJJY29uVVJMLmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9yQ291bnRlcnMuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVk
ZSAiTGF5b3V0VHlwZXMuaCIKICNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVyLmgiCiAjaW5jbHVk
ZSAiUGFnZVZpc2liaWxpdHlTdGF0ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCkBA
IC0xMDYsNiArMTA1LDggQEAgY2xhc3MgSFRNTE5hbWVDb2xsZWN0aW9uOwogY2xhc3MgSGl0VGVz
dFJlcXVlc3Q7CiBjbGFzcyBIaXRUZXN0UmVzdWx0OwogY2xhc3MgSW50UG9pbnQ7CitjbGFzcyBM
YXlvdXRQb2ludDsKK2NsYXNzIExheW91dFJlY3Q7CiBjbGFzcyBET01XcmFwcGVyV29ybGQ7CiBj
bGFzcyBKU05vZGU7CiBjbGFzcyBMb2NhbGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oCShyZXZpc2lvbiAxMzM2NjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDEyICsyOSwxMyBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXIuaCIKICNpbmNsdWRl
ICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitjbGFzcyBMYXlvdXRQb2ludDsKK2NsYXNzIExheW91dFJlY3Q7CiBjbGFzcyBOb2RlOwogY2xh
c3MgUmFuZ2U7CiBjbGFzcyBSZW5kZXJlZERvY3VtZW50TWFya2VyOwpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50UmFyZURhdGEuaAkocmV2aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1LDcg
QEAgcHVibGljOgogCiBpbmxpbmUgSW50U2l6ZSBkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemlu
ZygpCiB7Ci0gICAgcmV0dXJuIEludFNpemUoTUFYX0xBWU9VVF9VTklULCBNQVhfTEFZT1VUX1VO
SVQpOworICAgIHJldHVybiBJbnRTaXplKExheW91dFVuaXQ6Om1heCgpLCBMYXlvdXRVbml0Ojpt
YXgoKSk7CiB9CiAKIGlubGluZSBFbGVtZW50UmFyZURhdGE6OkVsZW1lbnRSYXJlRGF0YSgpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTW91c2VSZWxhdGVkRXZlbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vTW91c2VSZWxhdGVkRXZlbnQuaAkocmV2aXNpb24gMTMzNjY0
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL01vdXNlUmVsYXRlZEV2ZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDcgKzI0LDcgQEAKICNpZm5kZWYgTW91c2VSZWxhdGVkRXZlbnRfaAogI2RlZmlu
ZSBNb3VzZVJlbGF0ZWRFdmVudF9oCiAKLSNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZU1ldGhv
ZHMuaCIKKyNpbmNsdWRlICJMYXlvdXRQb2ludC5oIgogI2luY2x1ZGUgIlVJRXZlbnRXaXRoS2V5
U3RhdGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lv
biAxMzM2NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw5ICsyNyw4IEBACiAKICNpbmNsdWRlICJFZGl0aW5nQm91bmRhcnkuaCIKICNpbmNsdWRl
ICJFdmVudFRhcmdldC5oIgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRSZWN0LmgiCiAjaW5j
bHVkZSAiS1VSTEhhc2guaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxh
eW91dFJlY3QuaCIKICNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVyLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU3R5bGVDb25zdGFudHMuaCIKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ub3VjaC5oCShyZXZpc2lvbiAxMzM2NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVG91
Y2guaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2lmIEVOQUJMRShUT1VDSF9F
VkVOVFMpCiAKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVz
SW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dFBvaW50LmgiCiAjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
Y3BwCShyZXZpc2lvbiAxMzM2NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCB1c2luZyBuYW1lc3Bh
Y2UgSFRNTE5hbWVzOwogCiBzdGF0aWMgaW5saW5lIExheW91dFVuaXQgTm9YUG9zRm9yVmVydGlj
YWxBcnJvd05hdmlnYXRpb24oKQogewotICAgIHJldHVybiBNSU5fTEFZT1VUX1VOSVQ7CisgICAg
cmV0dXJuIExheW91dFVuaXQ6Om1pbigpOwogfQogCiBDYXJldEJhc2U6OkNhcmV0QmFzZShDYXJl
dFZpc2liaWxpdHkgdmlzaWJpbGl0eSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1l
U2VsZWN0aW9uLmgJKHJldmlzaW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiAjaW5j
bHVkZSAiRWRpdGluZ1N0eWxlLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkxh
eW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlJhbmdlLmgi
CiAjaW5jbHVkZSAiU2Nyb2xsQmVoYXZpb3IuaCIKICNpbmNsdWRlICJUaW1lci5oIgpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9uLmgJKHJldmlzaW9uIDEzMzY2
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVuZGVyZWRQb3NpdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiwxMSArMzIsMTEgQEAKICNkZWZpbmUgUmVuZGVyZWRQb3NpdGlvbl9oCiAK
ICNpbmNsdWRlICJJbmxpbmVCb3guaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgogI2luY2x1
ZGUgIlRleHRBZmZpbml0eS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIExheW91
dFVuaXQ7CiBjbGFzcyBQb3NpdGlvbjsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFZpc2li
bGVQb3NpdGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuaAkocmV2
aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2RlZmluZSBIVE1MQXJlYUVsZW1lbnRf
aAogCiAjaW5jbHVkZSAiSFRNTEFuY2hvckVsZW1lbnQuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBl
cy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvck92ZXJsYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yT3ZlcmxheS5oCShyZXZpc2lvbiAxMzM2NjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICsz
MSw3IEBACiAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgotI2lu
Y2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogCiAjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmgJKHJl
dmlzaW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1l
bGluZUFnZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlICJJ
bnNwZWN0b3JCYXNlQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgogI2lu
Y2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5j
bHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtSW5zdHJ1bWVudGF0aW9uLmgi
CiAjaW5jbHVkZSAiU2NyaXB0R0NFdmVudC5oIgogI2luY2x1ZGUgIlNjcmlwdEdDRXZlbnRMaXN0
ZW5lci5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFj
dG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5l
UmVjb3JkRmFjdG9yeS5jcHAJKHJldmlzaW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3
ICszNyw3IEBACiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMu
aCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXNJbmxpbmVNZXRo
b2RzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVz
dC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKICNpbmNsdWRlICJTY3JpcHRDYWxs
U3RhY2suaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZh
Y3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVS
ZWNvcmRGYWN0b3J5LmgJKHJldmlzaW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEs
NyBAQAogI2lmbmRlZiBUaW1lbGluZVJlY29yZEZhY3RvcnlfaAogI2RlZmluZSBUaW1lbGluZVJl
Y29yZEZhY3RvcnlfaAogCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlv
dXRSZWN0LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgJKHJldmlz
aW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3Vy
Y2UuaCIKICNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgot
I2luY2x1ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dFNp
emUuaCIKICNpbmNsdWRlICJTVkdJbWFnZUNhY2hlLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmgJKHJldmlzaW9uIDEz
MzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgRm9jdXNDb250cm9sbGVyX2gKIAogI2lu
Y2x1ZGUgIkZvY3VzRGlyZWN0aW9uLmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNs
dWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmgJKHJldmlzaW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJB
ZGp1c3RWaWV3U2l6ZU9yTm90LmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgog
I2luY2x1ZGUgIlBhZ2luYXRpb24uaCIKICNpbmNsdWRlICJQYWludFBoYXNlLmgiCiAjaW5jbHVk
ZSAiU2Nyb2xsVmlldy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgJKHJldmlzaW9uIDEzMzY2NCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3
IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgogI2luY2x1ZGUgIkZpbmRPcHRpb25z
LmgiCiAjaW5jbHVkZSAiTGF5b3V0TWlsZXN0b25lcy5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVz
LmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlBhZ2VWaXNpYmlsaXR5U3Rh
dGUuaCIKICNpbmNsdWRlICJQYWdpbmF0aW9uLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4u
aCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmgJKHJldmlzaW9u
IDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNyBAQAogCiAjaW5jbHVkZSAiRm9jdXNEaXJlY3Rpb24u
aCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKLSNpbmNsdWRlICJMYXlvdXRU
eXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAKICNp
bmNsdWRlIDxsaW1pdHM+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdDb29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDEzMzY2NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgU2Nyb2xsaW5nQ29vcmRpbmF0b3JfaAog
CiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVk
ZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogI2luY2x1
ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0ZyYWN0aW9uYWxMYXlvdXRVbml0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vRnJhY3Rpb25hbExheW91dFVuaXQuaAkocmV2aXNpb24gMTMzNjY0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRnJhY3Rpb25hbExheW91dFVuaXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw4MjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMiwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEZyYWN0aW9uYWxMYXlvdXRVbml0
X2gKLSNkZWZpbmUgRnJhY3Rpb25hbExheW91dFVuaXRfaAotCi0jaW5jbHVkZSA8bGltaXRzLmg+
Ci0jaW5jbHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxzdGRsaWIu
aD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TYXR1cmF0ZWRB
cml0aG1ldGljLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmZGVmIE5ERUJVRwotCi0j
ZGVmaW5lIFJFUE9SVF9PVkVSRkxPVyhkb2VzT3ZlcmZsb3cpICgodm9pZCkwKQotCi0jZWxzZQot
Ci0jZGVmaW5lIFJFUE9SVF9PVkVSRkxPVyhkb2VzT3ZlcmZsb3cpIGRvIFwKLSAgICBpZiAoIShk
b2VzT3ZlcmZsb3cpKSB7IFwKLSAgICAgICAgV1RGUmVwb3J0RXJyb3IoX19GSUxFX18sIF9fTElO
RV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAiISglcykiLCAjZG9lc092ZXJmbG93KTsgXAotICAg
IH0gXAotd2hpbGUgKDApCi0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkK
LXN0YXRpYyBjb25zdCBpbnQga0ZpeGVkUG9pbnREZW5vbWluYXRvciA9IDY0OwotI2Vsc2UKLXN0
YXRpYyBjb25zdCBpbnQga0ZpeGVkUG9pbnREZW5vbWluYXRvciA9IDE7Ci0jZW5kaWYKLWNvbnN0
IGludCBpbnRNYXhGb3JMYXlvdXRVbml0ID0gSU5UX01BWCAvIGtGaXhlZFBvaW50RGVub21pbmF0
b3I7Ci1jb25zdCBpbnQgaW50TWluRm9yTGF5b3V0VW5pdCA9IElOVF9NSU4gLyBrRml4ZWRQb2lu
dERlbm9taW5hdG9yOwotCi1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0VW5pdCB7Ci1wdWJsaWM6Ci0g
ICAgLy8gRklYTUU6IElkZWFsbHkgd2Ugd291bGQgaGF2ZSBzaXplX3QgdmVyc2lvbnMgb2YgdGhl
IGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRvcnMuCi0gICAgLy8gSG93ZXZlciBkdWUgdG8gY29tcGls
ZXIgYW5kIHBsYXRmb3JtIGRpZmZlcmVuY2VzIGFkZGluZyB0aG9zZSBhcmUgbm9uLXRyaXZpYWwu
Ci0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mzg0
OCBmb3IgZGV0YWlscy4KLSAgICAKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCgpIDogbV92YWx1
ZSgwKSB7IH0KLSNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAgIEZyYWN0aW9uYWxMYXlv
dXRVbml0KGludCB2YWx1ZSkgeyBzZXRWYWx1ZSh2YWx1ZSk7IH0KLSAgICBGcmFjdGlvbmFsTGF5
b3V0VW5pdCh1bnNpZ25lZCBzaG9ydCB2YWx1ZSkgeyBzZXRWYWx1ZSh2YWx1ZSk7IH0KLSAgICBG
cmFjdGlvbmFsTGF5b3V0VW5pdCh1bnNpZ25lZCBpbnQgdmFsdWUpIHsgc2V0VmFsdWUodmFsdWUp
OyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQoZmxvYXQgdmFsdWUpCi0gICAgewotI2lmIEVO
QUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCi0gICAgICAgIG1fdmFsdWUgPSBjbGFt
cFRvPGZsb2F0Pih2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3IsIHN0YXRpY19jYXN0PGZs
b2F0PihJTlRfTUlOKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KElOVF9NQVgpKTsKLSNlbHNlCi0gICAg
ICAgIFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7Ci0gICAgICAgIG1fdmFsdWUg
PSB2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0jZW5kaWYKLSAgICB9Ci0gICAgRnJh
Y3Rpb25hbExheW91dFVuaXQoZG91YmxlIHZhbHVlKQotICAgIHsKLSNpZiBFTkFCTEUoU0FUVVJB
VEVEX0xBWU9VVF9BUklUSE1FVElDKQotICAgICAgICBtX3ZhbHVlID0gY2xhbXBUbzxkb3VibGU+
KHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvciwgc3RhdGljX2Nhc3Q8ZG91YmxlPihJTlRf
TUlOKSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihJTlRfTUFYKSk7Ci0jZWxzZQotICAgICAgICBSRVBP
UlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOwotICAgICAgICBtX3ZhbHVlID0gdmFsdWUg
KiBrRml4ZWRQb2ludERlbm9taW5hdG9yOwotI2VuZGlmCi0gICAgfQotI2Vsc2UKLSAgICBGcmFj
dGlvbmFsTGF5b3V0VW5pdChpbnQgdmFsdWUpIHsgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHMo
dmFsdWUpKTsgbV92YWx1ZSA9IHZhbHVlOyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQodW5z
aWduZWQgc2hvcnQgdmFsdWUpIHsgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsg
bV92YWx1ZSA9IHZhbHVlOyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQodW5zaWduZWQgaW50
IHZhbHVlKSB7IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7IG1fdmFsdWUgPSB2
YWx1ZTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KGZsb2F0IHZhbHVlKSB7IFJFUE9SVF9P
VkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7IG1fdmFsdWUgPSB2YWx1ZTsgfQotICAgIEZyYWN0
aW9uYWxMYXlvdXRVbml0KGRvdWJsZSB2YWx1ZSkgeyBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5k
cyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFsdWU7IH0KLSNlbmRpZgotICAgIEZyYWN0aW9uYWxMYXlv
dXRVbml0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiB2YWx1ZSkgeyBtX3ZhbHVlID0gdmFs
dWUucmF3VmFsdWUoKTsgfQotCi0gICAgc3RhdGljIEZyYWN0aW9uYWxMYXlvdXRVbml0IGZyb21G
bG9hdENlaWwoZmxvYXQgdmFsdWUpCi0gICAgewotICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dCB2OwotI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCi0gICAgICAgIHYu
bV92YWx1ZSA9IGNsYW1wVG9JbnRlZ2VyKGNlaWxmKHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWlu
YXRvcikpOwotI2Vsc2UKLSAgICAgICAgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUp
KTsKLSAgICAgICAgdi5tX3ZhbHVlID0gY2VpbGYodmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5h
dG9yKTsKLSNlbmRpZgotICAgICAgICByZXR1cm4gdjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgRnJh
Y3Rpb25hbExheW91dFVuaXQgZnJvbUZsb2F0Rmxvb3IoZmxvYXQgdmFsdWUpCi0gICAgewotICAg
ICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB2OwotI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VU
X0FSSVRITUVUSUMpCi0gICAgICAgIHYubV92YWx1ZSA9IGNsYW1wVG9JbnRlZ2VyKGZsb29yZih2
YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3IpKTsKLSNlbHNlCi0gICAgICAgIFJFUE9SVF9P
VkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7Ci0gICAgICAgIHYubV92YWx1ZSA9IGZsb29yZih2
YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3IpOwotI2VuZGlmCi0gICAgICAgIHJldHVybiB2
OwotICAgIH0KLQotICAgIHN0YXRpYyBGcmFjdGlvbmFsTGF5b3V0VW5pdCBmcm9tRmxvYXRSb3Vu
ZChmbG9hdCB2YWx1ZSkKLSAgICB7Ci0jaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhN
RVRJQykKLSAgICAgICAgaWYgKHZhbHVlID49IDApCi0gICAgICAgICAgICByZXR1cm4gY2xhbXAo
dmFsdWUgKyBlcHNpbG9uKCkgLyAyLjBmKTsKLSAgICAgICAgcmV0dXJuIGNsYW1wKHZhbHVlIC0g
ZXBzaWxvbigpIC8gMi4wZik7Ci0jZWxzZQotICAgICAgICBpZiAodmFsdWUgPj0gMCkgewotICAg
ICAgICAgICAgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUgKyBlcHNpbG9uKCkgLyAy
LjBmKSk7Ci0gICAgICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQodmFsdWUgKyBl
cHNpbG9uKCkgLyAyLjBmKTsKLSAgICAgICAgfQotICAgICAgICBSRVBPUlRfT1ZFUkZMT1coaXNJ
bkJvdW5kcyh2YWx1ZSAtIGVwc2lsb24oKSAvIDIuMGYpKTsKLSAgICAgICAgcmV0dXJuIEZyYWN0
aW9uYWxMYXlvdXRVbml0KHZhbHVlIC0gZXBzaWxvbigpIC8gMi4wZik7Ci0jZW5kaWYKLSAgICB9
Ci0KLSNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAgIGludCB0b0ludCgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWUgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOyB9Ci0gICAgZmxvYXQgdG9G
bG9hdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX3ZhbHVlKSAvIGtGaXhl
ZFBvaW50RGVub21pbmF0b3I7IH0KLSAgICBkb3VibGUgdG9Eb3VibGUoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdmFsdWUpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsg
fQotICAgIGZsb2F0IGNlaWxUb0Zsb2F0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGZsb2F0IGZs
b2F0VmFsdWUgPSB0b0Zsb2F0KCk7Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0
VmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yKSA9PSBtX3ZhbHVlKQotICAgICAgICAgICAg
cmV0dXJuIGZsb2F0VmFsdWU7Ci0gICAgICAgIGlmIChmbG9hdFZhbHVlID4gMCkKLSAgICAgICAg
ICAgIHJldHVybiBuZXh0YWZ0ZXJmKGZsb2F0VmFsdWUsIHN0ZDo6bnVtZXJpY19saW1pdHM8Zmxv
YXQ+OjptYXgoKSk7Ci0gICAgICAgIHJldHVybiBuZXh0YWZ0ZXJmKGZsb2F0VmFsdWUsIHN0ZDo6
bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptaW4oKSk7Ci0gICAgfQotI2Vsc2UKLSAgICBpbnQgdG9J
bnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0gICAgZmxvYXQgdG9GbG9hdCgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX3ZhbHVlKTsgfQotICAgIGRvdWJsZSB0b0Rv
dWJsZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV92YWx1ZSk7IH0KLSAg
ICBmbG9hdCBjZWlsVG9GbG9hdCgpIGNvbnN0IHsgcmV0dXJuIHRvRmxvYXQoKTsgfQotI2VuZGlm
Ci0gICAgdW5zaWduZWQgdG9VbnNpZ25lZCgpIGNvbnN0IHsgUkVQT1JUX09WRVJGTE9XKG1fdmFs
dWUgPj0gMCk7IHJldHVybiB0b0ludCgpOyB9Ci0KLSAgICBvcGVyYXRvciBpbnQoKSBjb25zdCB7
IHJldHVybiB0b0ludCgpOyB9Ci0gICAgb3BlcmF0b3IgdW5zaWduZWQoKSBjb25zdCB7IHJldHVy
biB0b1Vuc2lnbmVkKCk7IH0KLSAgICBvcGVyYXRvciBmbG9hdCgpIGNvbnN0IHsgcmV0dXJuIHRv
RmxvYXQoKTsgfQotICAgIG9wZXJhdG9yIGRvdWJsZSgpIGNvbnN0IHsgcmV0dXJuIHRvRG91Ymxl
KCk7IH0KLSAgICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQotCi0g
ICAgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IrKyhpbnQpCi0gICAgewotICAgICAgICBt
X3ZhbHVlICs9IGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0gICAgICAgIHJldHVybiAqdGhpczsK
LSAgICB9Ci0KLSAgICBpbmxpbmUgaW50IHJhd1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZTsgfQotICAgIGlubGluZSB2b2lkIHNldFJhd1ZhbHVlKGludCB2YWx1ZSkgeyBtX3ZhbHVlID0g
dmFsdWU7IH0KLSAgICB2b2lkIHNldFJhd1ZhbHVlKGxvbmcgbG9uZyB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIFJFUE9SVF9PVkVSRkxPVyh2YWx1ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6
bWluKCkgJiYgdmFsdWUgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKTsKLSAgICAg
ICAgbV92YWx1ZSA9IHN0YXRpY19jYXN0PGludD4odmFsdWUpOwotICAgIH0KLQotICAgIEZyYWN0
aW9uYWxMYXlvdXRVbml0IGFicygpIGNvbnN0Ci0gICAgewotICAgICAgICBGcmFjdGlvbmFsTGF5
b3V0VW5pdCByZXR1cm5WYWx1ZTsKLSAgICAgICAgcmV0dXJuVmFsdWUuc2V0UmF3VmFsdWUoOjph
YnMobV92YWx1ZSkpOwotICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci0gICAgfQotI2lmIE9T
KERBUldJTikKLSAgICBpbnQgd3RmX2NlaWwoKSBjb25zdAotI2Vsc2UKLSAgICBpbnQgY2VpbCgp
IGNvbnN0Ci0jZW5kaWYKLSAgICB7Ci0jaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICAg
ICAgaWYgKG1fdmFsdWUgPj0gMCkKLSAgICAgICAgICAgIHJldHVybiAobV92YWx1ZSArIGtGaXhl
ZFBvaW50RGVub21pbmF0b3IgLSAxKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0gICAgICAg
IHJldHVybiB0b0ludCgpOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIG1fdmFsdWU7Ci0jZW5kaWYK
LSAgICB9Ci0gICAgaW50IHJvdW5kKCkgY29uc3QKLSAgICB7Ci0jaWYgRU5BQkxFKFNVQlBJWEVM
X0xBWU9VVCkgJiYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKLSAgICAgICAg
aWYgKG1fdmFsdWUgPiAwKQotICAgICAgICAgICAgcmV0dXJuIHNhdHVyYXRlZEFkZGl0aW9uKHJh
d1ZhbHVlKCksIGtGaXhlZFBvaW50RGVub21pbmF0b3IgLyAyKSAvIGtGaXhlZFBvaW50RGVub21p
bmF0b3I7Ci0gICAgICAgIHJldHVybiBzYXR1cmF0ZWRTdWJ0cmFjdGlvbihyYXdWYWx1ZSgpLCBr
Rml4ZWRQb2ludERlbm9taW5hdG9yIC8gMikgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOwotI2Vs
aWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICAgICAgaWYgKG1fdmFsdWUgPiAwKQotICAg
ICAgICAgICAgcmV0dXJuIChtX3ZhbHVlICsgKGtGaXhlZFBvaW50RGVub21pbmF0b3IgLyAyKSkg
LyBrRml4ZWRQb2ludERlbm9taW5hdG9yOwotICAgICAgICByZXR1cm4gKG1fdmFsdWUgLSAoa0Zp
eGVkUG9pbnREZW5vbWluYXRvciAvIDIpKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0jZWxz
ZQotICAgICAgICByZXR1cm4gbV92YWx1ZTsKLSNlbmRpZgotICAgIH0KLQotICAgIGludCBmbG9v
cigpIGNvbnN0Ci0gICAgewotI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCi0gICAgICAgIGlm
IChtX3ZhbHVlID49IDApCi0gICAgICAgICAgICByZXR1cm4gdG9JbnQoKTsKLSAgICAgICAgcmV0
dXJuIChtX3ZhbHVlIC0ga0ZpeGVkUG9pbnREZW5vbWluYXRvciArIDEpIC8ga0ZpeGVkUG9pbnRE
ZW5vbWluYXRvcjsKLSNlbHNlCi0gICAgICAgIHJldHVybiBtX3ZhbHVlOwotI2VuZGlmCi0gICAg
fQotCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgZnJhY3Rpb24oKSBjb25zdAotICAgIHsgICAK
LSAgICAgICAgLy8gQWRkIHRoZSBmcmFjdGlvbiB0byB0aGUgc2l6ZSAoYXMgb3Bwb3NlZCB0byB0
aGUgZnVsbCBsb2NhdGlvbikgdG8gYXZvaWQgb3ZlcmZsb3dzLgotICAgICAgICAvLyBDb21wdXRl
IGZyYWN0aW9uIHVzaW5nIHRoZSBtb2Qgb3BlcmF0b3IgdG8gcHJlc2VydmUgdGhlIHNpZ24gb2Yg
dGhlIHZhbHVlIGFzIGl0IG1heSBhZmZlY3Qgcm91bmRpbmcuCi0gICAgICAgIEZyYWN0aW9uYWxM
YXlvdXRVbml0IGZyYWN0aW9uOwotICAgICAgICBmcmFjdGlvbi5zZXRSYXdWYWx1ZShyYXdWYWx1
ZSgpICUga0ZpeGVkUG9pbnREZW5vbWluYXRvcik7Ci0gICAgICAgIHJldHVybiBmcmFjdGlvbjsK
LSAgICB9Ci0KLSNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAgIHN0YXRpYyBmbG9hdCBl
cHNpbG9uKCkgeyByZXR1cm4gMS4wZiAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7IH0KLSNlbHNl
Ci0gICAgc3RhdGljIGludCBlcHNpbG9uKCkgeyByZXR1cm4gMDsgfQotI2VuZGlmCi0gICAgc3Rh
dGljIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0IG1heCgpCi0gICAgewotICAgICAgICBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBtOwotICAgICAgICBtLm1fdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludD46Om1heCgpOwotICAgICAgICByZXR1cm4gbTsKLSAgICB9Ci0gICAgc3RhdGljIGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0IG1pbigpCi0gICAgewotICAgICAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBtOwotICAgICAgICBtLm1fdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1pbigpOwotICAgICAgICByZXR1cm4gbTsKLSAgICB9Ci0KLSAgICAvLyBWZXJzaW9ucyBv
ZiBtYXgvbWluIHRoYXQgYXJlIHNsaWdodGx5IHNtYWxsZXIvbGFyZ2VyIHRoYW4gbWF4L21pbigp
IHRvIGFsbG93IGZvciByb2luZGluZyB3aXRob3V0IG92ZXJmbG93aW5nLgotICAgIHN0YXRpYyBj
b25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBuZWFybHlNYXgoKQotICAgIHsKLSAgICAgICAgRnJh
Y3Rpb25hbExheW91dFVuaXQgbTsKLSAgICAgICAgbS5tX3ZhbHVlID0gc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKSAtIGtGaXhlZFBvaW50RGVub21pbmF0b3IgLyAyOwotICAgICAgICBy
ZXR1cm4gbTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0IG5l
YXJseU1pbigpCi0gICAgewotICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtOwotICAgICAg
ICBtLm1fdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpICsga0ZpeGVkUG9p
bnREZW5vbWluYXRvciAvIDI7Ci0gICAgICAgIHJldHVybiBtOwotICAgIH0KLSAgICAKLSAgICBz
dGF0aWMgRnJhY3Rpb25hbExheW91dFVuaXQgY2xhbXAoZG91YmxlIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGNsYW1wVG88RnJhY3Rpb25hbExheW91dFVuaXQ+KHZhbHVlLCBGcmFjdGlv
bmFsTGF5b3V0VW5pdDo6bWluKCksIEZyYWN0aW9uYWxMYXlvdXRVbml0OjptYXgoKSk7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBib29sIGlzSW5Cb3VuZHMoaW50IHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIDo6YWJzKHZhbHVlKSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1heCgpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKLSAgICB9Ci0gICAgc3RhdGljIGJv
b2wgaXNJbkJvdW5kcyh1bnNpZ25lZCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1
ZSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KSkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOwotICAgIH0KLSAgICBzdGF0aWMgYm9vbCBpc0lu
Qm91bmRzKGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiA6OmZhYnModmFsdWUp
IDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkgLyBrRml4ZWRQb2ludERlbm9taW5h
dG9yOwotICAgIH0KLSAgICAKLSAgICBpbmxpbmUgdm9pZCBzZXRWYWx1ZShpbnQgdmFsdWUpCi0g
ICAgewotI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCi0gICAgICAgIGlm
ICh2YWx1ZSA+IGludE1heEZvckxheW91dFVuaXQpCi0gICAgICAgICAgICBtX3ZhbHVlID0gc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWUgPCBp
bnRNaW5Gb3JMYXlvdXRVbml0KQotICAgICAgICAgICAgbV92YWx1ZSA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50Pjo6bWluKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fdmFsdWUgPSB2
YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0jZWxzZQotICAgICAgICBSRVBPUlRfT1ZF
UkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOwotICAgICAgICBtX3ZhbHVlID0gdmFsdWUgKiBrRml4
ZWRQb2ludERlbm9taW5hdG9yOwotI2VuZGlmCi0gICAgfQotICAgIGlubGluZSB2b2lkIHNldFZh
bHVlKHVuc2lnbmVkIHZhbHVlKQotICAgIHsKLSNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9B
UklUSE1FVElDKQotICAgICAgICBpZiAodmFsdWUgPj0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlu
dE1heEZvckxheW91dFVuaXQpKQotICAgICAgICAgICAgbV92YWx1ZSA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50Pjo6bWF4KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fdmFsdWUgPSB2
YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0jZWxzZQotICAgICAgICBSRVBPUlRfT1ZF
UkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOwotICAgICAgICBtX3ZhbHVlID0gdmFsdWUgKiBrRml4
ZWRQb2ludERlbm9taW5hdG9yOwotI2VuZGlmCi0gICAgfQotCi0gICAgaW50IG1fdmFsdWU7Ci19
OwotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gYS5yYXdWYWx1
ZSgpIDw9IGIucmF3VmFsdWUoKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKLXsKLSAgICByZXR1cm4gYS50b0Zsb2F0
KCkgPD0gYjsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgYSwgaW50IGIpCi17Ci0gICAgcmV0dXJuIGEgPD0gRnJhY3Rpb25hbExheW91dFVu
aXQoYik7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgZmxvYXQgYSwgY29uc3Qg
RnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJuIGEgPD0gYi50b0Zsb2F0KCk7
Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgaW50IGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSA8
PSBiOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gYS5y
YXdWYWx1ZSgpID49IGIucmF3VmFsdWUoKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I+PShj
b25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCi17Ci0gICAgcmV0dXJuIGEgPj0g
RnJhY3Rpb25hbExheW91dFVuaXQoYik7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPj0oY29u
c3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJu
IGEgPj0gYi50b0Zsb2F0KCk7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCi17Ci0gICAgcmV0dXJuIGEudG9GbG9hdCgp
ID49IGI7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgaW50IGEsIGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5p
dChhKSA+PSBiOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVy
biBhLnJhd1ZhbHVlKCkgPCBiLnJhd1ZhbHVlKCk7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9y
PChjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCi17Ci0gICAgcmV0dXJuIGEg
PCBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQotewotICAgIHJldHVybiBhLnRv
RmxvYXQoKSA8IGI7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYSwgZG91YmxlIGIpCi17Ci0gICAgcmV0dXJuIGEudG9Eb3VibGUoKSA8IGI7
Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25h
bExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpIDwg
YjsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBhIDwgYi50b0Zsb2F0KCk7Ci19Ci0K
LWlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29u
c3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJuIGEucmF3VmFsdWUoKSA+
IGIucmF3VmFsdWUoKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBhLCBkb3VibGUgYikKLXsKLSAgICByZXR1cm4gYS50b0RvdWJsZSgpID4g
YjsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBhLCBmbG9hdCBiKQotewotICAgIHJldHVybiBhLnRvRmxvYXQoKSA+IGI7Ci19Ci0KLWlubGlu
ZSBib29sIG9wZXJhdG9yPihjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCi17
Ci0gICAgcmV0dXJuIGEgPiBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKLX0KLQotaW5saW5lIGJv
b2wgb3BlcmF0b3I+KGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikK
LXsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgPiBiOwotfQotCi1pbmxpbmUg
Ym9vbCBvcGVyYXRvcj4oY29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGIpCi17Ci0gICAgcmV0dXJuIGEgPiBiLnRvRmxvYXQoKTsKLX0KLQotaW5saW5lIGJvb2wgb3Bl
cmF0b3I+KGNvbnN0IGRvdWJsZSBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsK
LSAgICByZXR1cm4gYSA+IGIudG9Eb3VibGUoKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVu
aXQmIGIpCi17Ci0gICAgcmV0dXJuIGEucmF3VmFsdWUoKSAhPSBiLnJhd1ZhbHVlKCk7Ci19Ci0K
LWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZs
b2F0IGIpCi17Ci0gICAgcmV0dXJuIGEgIT0gRnJhY3Rpb25hbExheW91dFVuaXQoYik7Ci19Ci0K
LWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBiKQotewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSAhPSBiOwot
fQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBh
LCBpbnQgYikKLXsKLSAgICByZXR1cm4gYSAhPSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKLX0K
LQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwg
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJuIGEucmF3VmFsdWUo
KSA9PSBiLnJhd1ZhbHVlKCk7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQotewotICAgIHJldHVybiBhID09IEZyYWN0aW9u
YWxMYXlvdXRVbml0KGIpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGludCBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gRnJhY3Rpb25h
bExheW91dFVuaXQoYSkgPT0gYjsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKLXsKLSAgICByZXR1cm4gYS50b0Zsb2F0
KCkgPT0gYjsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBmbG9hdCBhLCBjb25z
dCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gYSA9PSBiLnRvRmxvYXQo
KTsKLX0KLQotLy8gRm9yIG11bHRpcGxpY2F0aW9uIHRoYXQncyBwcm9uZSB0byBvdmVyZmxvdywg
dGhpcyBib3VuZHMgaXQgdG8gRnJhY3Rpb25hbExheW91dFVuaXQ6Om1heCgpIGFuZCA6Om1pbigp
Ci1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgYm91bmRlZE11bHRpcGx5KGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSNp
ZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJldHVy
blZhbDsKLSAgICBsb25nIGxvbmcgcmF3VmFsID0gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihhLnJh
d1ZhbHVlKCkpICogYi5yYXdWYWx1ZSgpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKLSAgICBp
ZiAocmF3VmFsID4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKLSAgICAgICAgcmV0
dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0OjptYXgoKTsKLSAgICBpZiAocmF3VmFsIDwgc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSkKLSAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlv
dXRVbml0OjptaW4oKTsKLSAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUocmF3VmFsKTsKLSAgICBy
ZXR1cm4gcmV0dXJuVmFsOwotI2Vsc2UKLSAgICByZXR1cm4gYS5yYXdWYWx1ZSgpICogYi5yYXdW
YWx1ZSgpOwotI2VuZGlmCi19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRv
ciooY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBiKQotewotI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpICYmIEVOQUJMRShTQVRVUkFU
RURfTEFZT1VUX0FSSVRITUVUSUMpCi0gICAgcmV0dXJuIGJvdW5kZWRNdWx0aXBseShhLCBiKTsK
LSNlbGlmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQg
cmV0dXJuVmFsOwotICAgIGxvbmcgbG9uZyByYXdWYWwgPSBzdGF0aWNfY2FzdDxsb25nIGxvbmc+
KGEucmF3VmFsdWUoKSkgKiBiLnJhd1ZhbHVlKCkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOwot
ICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShyYXdWYWwpOwotICAgIHJldHVybiByZXR1cm5WYWw7
Ci0jZWxzZQotICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgKiBiLnJhd1ZhbHVlKCk7Ci0jZW5kaWYK
LX0gICAgCi0KLWlubGluZSBkb3VibGUgb3BlcmF0b3IqKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBhLCBkb3VibGUgYikKLXsKLSAgICByZXR1cm4gYS50b0RvdWJsZSgpICogYjsKLX0KLQot
aW5saW5lIGZsb2F0IG9wZXJhdG9yKihjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxv
YXQgYikKLXsKLSAgICByZXR1cm4gYS50b0Zsb2F0KCkgKiBiOwotfQotCi1pbmxpbmUgRnJhY3Rp
b25hbExheW91dFVuaXQgb3BlcmF0b3IqKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBp
bnQgYikKLXsKLSAgICByZXR1cm4gYSAqIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOwotfQotCi1p
bmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IqKGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBhLCB1bnNpZ25lZCBiKQotewotICAgIHJldHVybiBhICogRnJhY3Rpb25hbExheW91
dFVuaXQoYik7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvcioodW5z
aWduZWQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJuIEZy
YWN0aW9uYWxMYXlvdXRVbml0KGEpICogYjsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRV
bml0IG9wZXJhdG9yKihjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIp
Ci17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpICogYjsKLX0KLQotaW5saW5l
IGZsb2F0IG9wZXJhdG9yKihjb25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYikKLXsKLSAgICByZXR1cm4gYSAqIGIudG9GbG9hdCgpOwotfQotCi1pbmxpbmUgZG91Ymxl
IG9wZXJhdG9yKihjb25zdCBkb3VibGUgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIp
Ci17Ci0gICAgcmV0dXJuIGEgKiBiLnRvRG91YmxlKCk7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBvcGVyYXRvci8oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQp
Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOwotICAgIGxvbmcgbG9uZyByYXdW
YWwgPSBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGtGaXhlZFBvaW50RGVub21pbmF0b3IpICogYS5y
YXdWYWx1ZSgpIC8gYi5yYXdWYWx1ZSgpOwotICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShyYXdW
YWwpOwotICAgIHJldHVybiByZXR1cm5WYWw7Ci0jZWxzZQotICAgIHJldHVybiBhLnJhd1ZhbHVl
KCkgLyBiLnJhd1ZhbHVlKCk7Ci0jZW5kaWYKLX0gICAgCi0KLWlubGluZSBmbG9hdCBvcGVyYXRv
ci8oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCi17Ci0gICAgcmV0dXJu
IGEudG9GbG9hdCgpIC8gYjsKLX0KLQotaW5saW5lIGRvdWJsZSBvcGVyYXRvci8oY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGEsIGRvdWJsZSBiKQotewotICAgIHJldHVybiBhLnRvRG91Ymxl
KCkgLyBiOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IvKGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKLXsKLSAgICByZXR1cm4gYSAvIEZyYWN0
aW9uYWxMYXlvdXRVbml0KGIpOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3Bl
cmF0b3IvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCB1bnNpZ25lZCBpbnQgYikKLXsK
LSAgICByZXR1cm4gYSAvIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOwotfQotCi1pbmxpbmUgZmxv
YXQgb3BlcmF0b3IvKGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBi
KQotewotICAgIHJldHVybiBhIC8gYi50b0Zsb2F0KCk7Ci19Ci0KLWlubGluZSBkb3VibGUgb3Bl
cmF0b3IvKGNvbnN0IGRvdWJsZSBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsK
LSAgICByZXR1cm4gYSAvIGIudG9Eb3VibGUoKTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlv
dXRVbml0IG9wZXJhdG9yLyhjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGIpCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpIC8gYjsKLX0KLQotaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLyh1bnNpZ25lZCBpbnQgYSwgY29uc3Qg
RnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRV
bml0KGEpIC8gYjsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKyhj
b25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGIpCi17Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOwotI2lmIEVOQUJMRShT
QVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCi0gICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKHNh
dHVyYXRlZEFkZGl0aW9uKGEucmF3VmFsdWUoKSwgYi5yYXdWYWx1ZSgpKSk7Ci0jZWxzZQotICAg
IHJldHVyblZhbC5zZXRSYXdWYWx1ZShhLnJhd1ZhbHVlKCkgKyBiLnJhd1ZhbHVlKCkpOwotI2Vu
ZGlmCi0gICAgcmV0dXJuIHJldHVyblZhbDsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRV
bml0IG9wZXJhdG9yKyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCi17Ci0g
ICAgcmV0dXJuIGEgKyBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKLX0KLQotaW5saW5lIGZsb2F0
IG9wZXJhdG9yKyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKLXsKLSAg
ICByZXR1cm4gYS50b0Zsb2F0KCkgKyBiOwotfQotCi1pbmxpbmUgZG91YmxlIG9wZXJhdG9yKyhj
b25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZG91YmxlIGIpCi17Ci0gICAgcmV0dXJuIGEu
dG9Eb3VibGUoKSArIGI7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRv
cisoY29uc3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJl
dHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSArIGI7Ci19Ci0KLWlubGluZSBmbG9hdCBvcGVy
YXRvcisoY29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0g
ICAgcmV0dXJuIGEgKyBiLnRvRmxvYXQoKTsKLX0KLQotaW5saW5lIGRvdWJsZSBvcGVyYXRvciso
Y29uc3QgZG91YmxlIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJl
dHVybiBhICsgYi50b0RvdWJsZSgpOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQg
b3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYikKLXsKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7Ci0j
aWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKLSAgICByZXR1cm5WYWwuc2V0
UmF3VmFsdWUoc2F0dXJhdGVkU3VidHJhY3Rpb24oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkp
KTsKLSNlbHNlCi0gICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKGEucmF3VmFsdWUoKSAtIGIucmF3
VmFsdWUoKSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gcmV0dXJuVmFsOwotfQotCi1pbmxpbmUgRnJh
Y3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBh
LCBpbnQgYikKLXsKLSAgICByZXR1cm4gYSAtIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOwotfQot
Ci1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRVbml0JiBhLCB1bnNpZ25lZCBiKQotewotICAgIHJldHVybiBhIC0gRnJhY3Rpb25hbExh
eW91dFVuaXQoYik7Ci19Ci0KLWlubGluZSBmbG9hdCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25h
bExheW91dFVuaXQmIGEsIGZsb2F0IGIpCi17Ci0gICAgcmV0dXJuIGEudG9GbG9hdCgpIC0gYjsK
LX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLShjb25zdCBpbnQgYSwg
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxM
YXlvdXRVbml0KGEpIC0gYjsKLX0KLQotaW5saW5lIGZsb2F0IG9wZXJhdG9yLShjb25zdCBmbG9h
dCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gYSAtIGIu
dG9GbG9hdCgpOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3ItKGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhKQotewotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
IHJldHVyblZhbDsKLSAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUoLWEucmF3VmFsdWUoKSk7Ci0g
ICAgcmV0dXJuIHJldHVyblZhbDsKLX0KLQotLy8gRm9yIHJldHVybmluZyB0aGUgcmVtYWluZGVy
IGFmdGVyIGEgZGl2aXNpb24gd2l0aCBpbnRlZ2VyIHJlc3VsdHMuCi1pbmxpbmUgRnJhY3Rpb25h
bExheW91dFVuaXQgaW50TW9kKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQot
ICAgIC8vIFRoaXMgY2FsY3VsYXRlcyB0aGUgbW9kdWxvIHNvIHRoYXQ6IGEgPSBzdGF0aWNfY2Fz
dDxpbnQ+KGEgLyBiKSAqIGIgKyBpbnRNb2QoYSwgYikuCi0gICAgRnJhY3Rpb25hbExheW91dFVu
aXQgcmV0dXJuVmFsOwotICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShhLnJhd1ZhbHVlKCkgJSBi
LnJhd1ZhbHVlKCkpOwotICAgIHJldHVybiByZXR1cm5WYWw7Ci0jZWxzZQotICAgIHJldHVybiBh
LnJhd1ZhbHVlKCkgJSBiLnJhd1ZhbHVlKCk7Ci0jZW5kaWYKLX0KLQotaW5saW5lIEZyYWN0aW9u
YWxMYXlvdXRVbml0IG9wZXJhdG9yJShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29u
c3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0jaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9V
VCkKLSAgICAvLyBUaGlzIGNhbGN1bGF0ZXMgdGhlIG1vZHVsbyBzbyB0aGF0OiBhID0gKGEgLyBi
KSAqIGIgKyBhICUgYi4KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7Ci0gICAg
bG9uZyBsb25nIHJhd1ZhbCA9IChzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGtGaXhlZFBvaW50RGVu
b21pbmF0b3IpICogYS5yYXdWYWx1ZSgpKSAlIGIucmF3VmFsdWUoKTsKLSAgICByZXR1cm5WYWwu
c2V0UmF3VmFsdWUocmF3VmFsIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcik7Ci0gICAgcmV0dXJu
IHJldHVyblZhbDsKLSNlbHNlCi0gICAgcmV0dXJuIGEucmF3VmFsdWUoKSAlIGIucmF3VmFsdWUo
KTsKLSNlbmRpZgotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IlKGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKLXsKLSAgICByZXR1cm4gYSAlIEZy
YWN0aW9uYWxMYXlvdXRVbml0KGIpOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQg
b3BlcmF0b3IlKGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICBy
ZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgJSBiOwotfQotCi1pbmxpbmUgRnJhY3Rpb25h
bExheW91dFVuaXQmIG9wZXJhdG9yKz0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FS
SVRITUVUSUMpCi0gICAgYS5zZXRSYXdWYWx1ZShzYXR1cmF0ZWRBZGRpdGlvbihhLnJhd1ZhbHVl
KCksIGIucmF3VmFsdWUoKSkpOwotI2Vsc2UKLSAgICBhID0gYSArIGI7Ci0jZW5kaWYKLSAgICBy
ZXR1cm4gYTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvcis9KEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKLXsKLSAgICBhID0gYSArIGI7Ci0gICAgcmV0
dXJuIGE7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3IrPShGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKLXsKLSAgICBhID0gYSArIGI7Ci0gICAgcmV0
dXJuIGE7Ci19Ci0KLWlubGluZSBmbG9hdCYgb3BlcmF0b3IrPShmbG9hdCYgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgYSA9IGEgKyBiOwotICAgIHJldHVybiBhOwot
fQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yLT0oRnJhY3Rpb25hbExh
eW91dFVuaXQmIGEsIGludCBiKQotewotICAgIGEgPSBhIC0gYjsKLSAgICByZXR1cm4gYTsKLX0K
LQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvci09KEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSNpZiBFTkFCTEUo
U0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQotICAgIGEuc2V0UmF3VmFsdWUoc2F0dXJhdGVk
U3VidHJhY3Rpb24oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKLSNlbHNlCi0gICAgYSA9
IGEgLSBiOwotI2VuZGlmCi0gICAgcmV0dXJuIGE7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgb3BlcmF0b3ItPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKLXsK
LSAgICBhID0gYSAtIGI7Ci0gICAgcmV0dXJuIGE7Ci19Ci0KLWlubGluZSBmbG9hdCYgb3BlcmF0
b3ItPShmbG9hdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgYSA9
IGEgLSBiOwotICAgIHJldHVybiBhOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQm
IG9wZXJhdG9yKj0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBiKQotewotICAgIGEgPSBhICogYjsKLSAgICByZXR1cm4gYTsKLX0KLS8vIG9wZXJh
dG9yKj0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKSBpcyBzdXBwb3J0ZWQgYnkgdGhl
IG9wZXJhdG9yIGFib3ZlIHBsdXMgRnJhY3Rpb25hbExheW91dFVuaXQoaW50KS4KLQotaW5saW5l
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvcio9KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBh
LCBmbG9hdCBiKQotewotICAgIGEgPSBhICogYjsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5l
IGZsb2F0JiBvcGVyYXRvcio9KGZsb2F0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
YikKLXsKLSAgICBhID0gYSAqIGI7Ci0gICAgcmV0dXJuIGE7Ci19Ci0KLWlubGluZSBGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgb3BlcmF0b3IvPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3Qg
RnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgYSA9IGEgLyBiOwotICAgIHJldHVybiBh
OwotfQotLy8gb3BlcmF0b3IvPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpIGlzIHN1
cHBvcnRlZCBieSB0aGUgb3BlcmF0b3IgYWJvdmUgcGx1cyBGcmFjdGlvbmFsTGF5b3V0VW5pdChp
bnQpLgotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yLz0oRnJhY3Rpb25h
bExheW91dFVuaXQmIGEsIGZsb2F0IGIpCi17Ci0gICAgYSA9IGEgLyBiOwotICAgIHJldHVybiBh
OwotfQotCi1pbmxpbmUgZmxvYXQmIG9wZXJhdG9yLz0oZmxvYXQmIGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBiKQotewotICAgIGEgPSBhIC8gYjsKLSAgICByZXR1cm4gYTsKLX0KLQot
aW5saW5lIGludCBzbmFwU2l6ZVRvUGl4ZWwoRnJhY3Rpb25hbExheW91dFVuaXQgc2l6ZSwgRnJh
Y3Rpb25hbExheW91dFVuaXQgbG9jYXRpb24pIAotewotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
IGZyYWN0aW9uID0gbG9jYXRpb24uZnJhY3Rpb24oKTsKLSAgICByZXR1cm4gKGZyYWN0aW9uICsg
c2l6ZSkucm91bmQoKSAtIGZyYWN0aW9uLnJvdW5kKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEZyYWN0aW9uYWxMYXlvdXRVbml0X2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0xheW91dFVuaXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9MYXlvdXRVbml0LmgJKHJldmlzaW9uIDEzMzUxNykJKGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vRnJhY3Rpb25hbExheW91dFVuaXQuaDoxMzM1MTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9MYXlvdXRVbml0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4
MjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBGcmFjdGlvbmFsTGF5b3V0VW5pdF9oCisjZGVmaW5lIEZyYWN0aW9uYWxM
YXlvdXRVbml0X2gKKworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPGxpbWl0cz4KKyNp
bmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvU2F0dXJhdGVkQXJpdGhtZXRpYy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKyNpZmRlZiBOREVCVUcKKworI2RlZmluZSBSRVBPUlRfT1ZFUkZMT1co
ZG9lc092ZXJmbG93KSAoKHZvaWQpMCkKKworI2Vsc2UKKworI2RlZmluZSBSRVBPUlRfT1ZFUkZM
T1coZG9lc092ZXJmbG93KSBkbyBcCisgICAgaWYgKCEoZG9lc092ZXJmbG93KSkgeyBcCisgICAg
ICAgIFdURlJlcG9ydEVycm9yKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElP
TiwgIiEoJXMpIiwgI2RvZXNPdmVyZmxvdyk7IFwKKyAgICB9IFwKK3doaWxlICgwKQorCisjZW5k
aWYKKworI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCitzdGF0aWMgY29uc3QgaW50IGtGaXhl
ZFBvaW50RGVub21pbmF0b3IgPSA2NDsKKyNlbHNlCitzdGF0aWMgY29uc3QgaW50IGtGaXhlZFBv
aW50RGVub21pbmF0b3IgPSAxOworI2VuZGlmCitjb25zdCBpbnQgaW50TWF4Rm9yTGF5b3V0VW5p
dCA9IElOVF9NQVggLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOworY29uc3QgaW50IGludE1pbkZv
ckxheW91dFVuaXQgPSBJTlRfTUlOIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKKworY2xhc3Mg
RnJhY3Rpb25hbExheW91dFVuaXQgeworcHVibGljOgorICAgIC8vIEZJWE1FOiBJZGVhbGx5IHdl
IHdvdWxkIGhhdmUgc2l6ZV90IHZlcnNpb25zIG9mIHRoZSBjb25zdHJ1Y3RvciBhbmQgb3BlcmF0
b3JzLgorICAgIC8vIEhvd2V2ZXIgZHVlIHRvIGNvbXBpbGVyIGFuZCBwbGF0Zm9ybSBkaWZmZXJl
bmNlcyBhZGRpbmcgdGhvc2UgYXJlIG5vbi10cml2aWFsLgorICAgIC8vIFNlZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODM4NDggZm9yIGRldGFpbHMuCisgICAgCisg
ICAgRnJhY3Rpb25hbExheW91dFVuaXQoKSA6IG1fdmFsdWUoMCkgeyB9CisjaWYgRU5BQkxFKFNV
QlBJWEVMX0xBWU9VVCkKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdChpbnQgdmFsdWUpIHsgc2V0
VmFsdWUodmFsdWUpOyB9CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQodW5zaWduZWQgc2hvcnQg
dmFsdWUpIHsgc2V0VmFsdWUodmFsdWUpOyB9CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQodW5z
aWduZWQgaW50IHZhbHVlKSB7IHNldFZhbHVlKHZhbHVlKTsgfQorICAgIEZyYWN0aW9uYWxMYXlv
dXRVbml0KGZsb2F0IHZhbHVlKQorICAgIHsKKyNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9B
UklUSE1FVElDKQorICAgICAgICBtX3ZhbHVlID0gY2xhbXBUbzxmbG9hdD4odmFsdWUgKiBrRml4
ZWRQb2ludERlbm9taW5hdG9yLCBzdGF0aWNfY2FzdDxmbG9hdD4oSU5UX01JTiksIHN0YXRpY19j
YXN0PGZsb2F0PihJTlRfTUFYKSk7CisjZWxzZQorICAgICAgICBSRVBPUlRfT1ZFUkZMT1coaXNJ
bkJvdW5kcyh2YWx1ZSkpOworICAgICAgICBtX3ZhbHVlID0gdmFsdWUgKiBrRml4ZWRQb2ludERl
bm9taW5hdG9yOworI2VuZGlmCisgICAgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KGRvdWJs
ZSB2YWx1ZSkKKyAgICB7CisjaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykK
KyAgICAgICAgbV92YWx1ZSA9IGNsYW1wVG88ZG91YmxlPih2YWx1ZSAqIGtGaXhlZFBvaW50RGVu
b21pbmF0b3IsIHN0YXRpY19jYXN0PGRvdWJsZT4oSU5UX01JTiksIHN0YXRpY19jYXN0PGRvdWJs
ZT4oSU5UX01BWCkpOworI2Vsc2UKKyAgICAgICAgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHMo
dmFsdWUpKTsKKyAgICAgICAgbV92YWx1ZSA9IHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRv
cjsKKyNlbmRpZgorICAgIH0KKyNlbHNlCisgICAgRnJhY3Rpb25hbExheW91dFVuaXQoaW50IHZh
bHVlKSB7IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7IG1fdmFsdWUgPSB2YWx1
ZTsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KHVuc2lnbmVkIHNob3J0IHZhbHVlKSB7IFJF
UE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7IG1fdmFsdWUgPSB2YWx1ZTsgfQorICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0KHVuc2lnbmVkIGludCB2YWx1ZSkgeyBSRVBPUlRfT1ZFUkZM
T1coaXNJbkJvdW5kcyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFsdWU7IH0KKyAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdChmbG9hdCB2YWx1ZSkgeyBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1
ZSkpOyBtX3ZhbHVlID0gdmFsdWU7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdChkb3VibGUg
dmFsdWUpIHsgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsgbV92YWx1ZSA9IHZh
bHVlOyB9CisjZW5kaWYKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdChjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgdmFsdWUpIHsgbV92YWx1ZSA9IHZhbHVlLnJhd1ZhbHVlKCk7IH0KKworICAg
IHN0YXRpYyBGcmFjdGlvbmFsTGF5b3V0VW5pdCBmcm9tRmxvYXRDZWlsKGZsb2F0IHZhbHVlKQor
ICAgIHsKKyAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgdjsKKyNpZiBFTkFCTEUoU0FUVVJB
VEVEX0xBWU9VVF9BUklUSE1FVElDKQorICAgICAgICB2Lm1fdmFsdWUgPSBjbGFtcFRvSW50ZWdl
cihjZWlsZih2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3IpKTsKKyNlbHNlCisgICAgICAg
IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7CisgICAgICAgIHYubV92YWx1ZSA9
IGNlaWxmKHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvcik7CisjZW5kaWYKKyAgICAgICAg
cmV0dXJuIHY7CisgICAgfQorCisgICAgc3RhdGljIEZyYWN0aW9uYWxMYXlvdXRVbml0IGZyb21G
bG9hdEZsb29yKGZsb2F0IHZhbHVlKQorICAgIHsKKyAgICAgICAgRnJhY3Rpb25hbExheW91dFVu
aXQgdjsKKyNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQorICAgICAgICB2
Lm1fdmFsdWUgPSBjbGFtcFRvSW50ZWdlcihmbG9vcmYodmFsdWUgKiBrRml4ZWRQb2ludERlbm9t
aW5hdG9yKSk7CisjZWxzZQorICAgICAgICBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1
ZSkpOworICAgICAgICB2Lm1fdmFsdWUgPSBmbG9vcmYodmFsdWUgKiBrRml4ZWRQb2ludERlbm9t
aW5hdG9yKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gdjsKKyAgICB9CisKKyAgICBzdGF0aWMg
RnJhY3Rpb25hbExheW91dFVuaXQgZnJvbUZsb2F0Um91bmQoZmxvYXQgdmFsdWUpCisgICAgewor
I2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCisgICAgICAgIGlmICh2YWx1
ZSA+PSAwKQorICAgICAgICAgICAgcmV0dXJuIGNsYW1wKHZhbHVlICsgZXBzaWxvbigpIC8gMi4w
Zik7CisgICAgICAgIHJldHVybiBjbGFtcCh2YWx1ZSAtIGVwc2lsb24oKSAvIDIuMGYpOworI2Vs
c2UKKyAgICAgICAgaWYgKHZhbHVlID49IDApIHsKKyAgICAgICAgICAgIFJFUE9SVF9PVkVSRkxP
Vyhpc0luQm91bmRzKHZhbHVlICsgZXBzaWxvbigpIC8gMi4wZikpOworICAgICAgICAgICAgcmV0
dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KHZhbHVlICsgZXBzaWxvbigpIC8gMi4wZik7CisgICAg
ICAgIH0KKyAgICAgICAgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUgLSBlcHNpbG9u
KCkgLyAyLjBmKSk7CisgICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdCh2YWx1ZSAt
IGVwc2lsb24oKSAvIDIuMGYpOworI2VuZGlmCisgICAgfQorCisjaWYgRU5BQkxFKFNVQlBJWEVM
X0xBWU9VVCkKKyAgICBpbnQgdG9JbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlIC8ga0ZpeGVk
UG9pbnREZW5vbWluYXRvcjsgfQorICAgIGZsb2F0IHRvRmxvYXQoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxmbG9hdD4obV92YWx1ZSkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOyB9Cisg
ICAgZG91YmxlIHRvRG91YmxlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPiht
X3ZhbHVlKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7IH0KKyAgICBmbG9hdCBjZWlsVG9GbG9h
dCgpIGNvbnN0CisgICAgeworICAgICAgICBmbG9hdCBmbG9hdFZhbHVlID0gdG9GbG9hdCgpOwor
ICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihmbG9hdFZhbHVlICoga0ZpeGVkUG9pbnREZW5v
bWluYXRvcikgPT0gbV92YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBmbG9hdFZhbHVlOworICAg
ICAgICBpZiAoZmxvYXRWYWx1ZSA+IDApCisgICAgICAgICAgICByZXR1cm4gbmV4dGFmdGVyZihm
bG9hdFZhbHVlLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpOworICAgICAgICBy
ZXR1cm4gbmV4dGFmdGVyZihmbG9hdFZhbHVlLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6
bWluKCkpOworICAgIH0KKyNlbHNlCisgICAgaW50IHRvSW50KCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZTsgfQorICAgIGZsb2F0IHRvRmxvYXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxm
bG9hdD4obV92YWx1ZSk7IH0KKyAgICBkb3VibGUgdG9Eb3VibGUoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxkb3VibGU+KG1fdmFsdWUpOyB9CisgICAgZmxvYXQgY2VpbFRvRmxvYXQoKSBj
b25zdCB7IHJldHVybiB0b0Zsb2F0KCk7IH0KKyNlbmRpZgorICAgIHVuc2lnbmVkIHRvVW5zaWdu
ZWQoKSBjb25zdCB7IFJFUE9SVF9PVkVSRkxPVyhtX3ZhbHVlID49IDApOyByZXR1cm4gdG9JbnQo
KTsgfQorCisgICAgb3BlcmF0b3IgaW50KCkgY29uc3QgeyByZXR1cm4gdG9JbnQoKTsgfQorICAg
IG9wZXJhdG9yIHVuc2lnbmVkKCkgY29uc3QgeyByZXR1cm4gdG9VbnNpZ25lZCgpOyB9CisgICAg
b3BlcmF0b3IgZmxvYXQoKSBjb25zdCB7IHJldHVybiB0b0Zsb2F0KCk7IH0KKyAgICBvcGVyYXRv
ciBkb3VibGUoKSBjb25zdCB7IHJldHVybiB0b0RvdWJsZSgpOyB9CisgICAgb3BlcmF0b3IgYm9v
bCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
IG9wZXJhdG9yKysoaW50KQorICAgIHsKKyAgICAgICAgbV92YWx1ZSArPSBrRml4ZWRQb2ludERl
bm9taW5hdG9yOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgaW5saW5lIGlu
dCByYXdWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBpbmxpbmUgdm9pZCBz
ZXRSYXdWYWx1ZShpbnQgdmFsdWUpIHsgbV92YWx1ZSA9IHZhbHVlOyB9CisgICAgdm9pZCBzZXRS
YXdWYWx1ZShsb25nIGxvbmcgdmFsdWUpCisgICAgeworICAgICAgICBSRVBPUlRfT1ZFUkZMT1co
dmFsdWUgPiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpICYmIHZhbHVlIDwgc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSk7CisgICAgICAgIG1fdmFsdWUgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHZhbHVlKTsKKyAgICB9CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBhYnMoKSBj
b25zdAorICAgIHsKKyAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsdWU7Cisg
ICAgICAgIHJldHVyblZhbHVlLnNldFJhd1ZhbHVlKDo6YWJzKG1fdmFsdWUpKTsKKyAgICAgICAg
cmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KKyNpZiBPUyhEQVJXSU4pCisgICAgaW50IHd0Zl9j
ZWlsKCkgY29uc3QKKyNlbHNlCisgICAgaW50IGNlaWwoKSBjb25zdAorI2VuZGlmCisgICAgewor
I2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisgICAgICAgIGlmIChtX3ZhbHVlID49IDApCisg
ICAgICAgICAgICByZXR1cm4gKG1fdmFsdWUgKyBrRml4ZWRQb2ludERlbm9taW5hdG9yIC0gMSkg
LyBrRml4ZWRQb2ludERlbm9taW5hdG9yOworICAgICAgICByZXR1cm4gdG9JbnQoKTsKKyNlbHNl
CisgICAgICAgIHJldHVybiBtX3ZhbHVlOworI2VuZGlmCisgICAgfQorICAgIGludCByb3VuZCgp
IGNvbnN0CisgICAgeworI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpICYmIEVOQUJMRShTQVRV
UkFURURfTEFZT1VUX0FSSVRITUVUSUMpCisgICAgICAgIGlmIChtX3ZhbHVlID4gMCkKKyAgICAg
ICAgICAgIHJldHVybiBzYXR1cmF0ZWRBZGRpdGlvbihyYXdWYWx1ZSgpLCBrRml4ZWRQb2ludERl
bm9taW5hdG9yIC8gMikgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOworICAgICAgICByZXR1cm4g
c2F0dXJhdGVkU3VidHJhY3Rpb24ocmF3VmFsdWUoKSwga0ZpeGVkUG9pbnREZW5vbWluYXRvciAv
IDIpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKKyNlbGlmIEVOQUJMRShTVUJQSVhFTF9MQVlP
VVQpCisgICAgICAgIGlmIChtX3ZhbHVlID4gMCkKKyAgICAgICAgICAgIHJldHVybiAobV92YWx1
ZSArIChrRml4ZWRQb2ludERlbm9taW5hdG9yIC8gMikpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRv
cjsKKyAgICAgICAgcmV0dXJuIChtX3ZhbHVlIC0gKGtGaXhlZFBvaW50RGVub21pbmF0b3IgLyAy
KSkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fdmFs
dWU7CisjZW5kaWYKKyAgICB9CisKKyAgICBpbnQgZmxvb3IoKSBjb25zdAorICAgIHsKKyNpZiBF
TkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgICAgICBpZiAobV92YWx1ZSA+PSAwKQorICAgICAg
ICAgICAgcmV0dXJuIHRvSW50KCk7CisgICAgICAgIHJldHVybiAobV92YWx1ZSAtIGtGaXhlZFBv
aW50RGVub21pbmF0b3IgKyAxKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7CisjZWxzZQorICAg
ICAgICByZXR1cm4gbV92YWx1ZTsKKyNlbmRpZgorICAgIH0KKworICAgIEZyYWN0aW9uYWxMYXlv
dXRVbml0IGZyYWN0aW9uKCkgY29uc3QKKyAgICB7ICAgCisgICAgICAgIC8vIEFkZCB0aGUgZnJh
Y3Rpb24gdG8gdGhlIHNpemUgKGFzIG9wcG9zZWQgdG8gdGhlIGZ1bGwgbG9jYXRpb24pIHRvIGF2
b2lkIG92ZXJmbG93cy4KKyAgICAgICAgLy8gQ29tcHV0ZSBmcmFjdGlvbiB1c2luZyB0aGUgbW9k
IG9wZXJhdG9yIHRvIHByZXNlcnZlIHRoZSBzaWduIG9mIHRoZSB2YWx1ZSBhcyBpdCBtYXkgYWZm
ZWN0IHJvdW5kaW5nLgorICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBmcmFjdGlvbjsKKyAg
ICAgICAgZnJhY3Rpb24uc2V0UmF3VmFsdWUocmF3VmFsdWUoKSAlIGtGaXhlZFBvaW50RGVub21p
bmF0b3IpOworICAgICAgICByZXR1cm4gZnJhY3Rpb247CisgICAgfQorCisjaWYgRU5BQkxFKFNV
QlBJWEVMX0xBWU9VVCkKKyAgICBzdGF0aWMgZmxvYXQgZXBzaWxvbigpIHsgcmV0dXJuIDEuMGYg
LyBrRml4ZWRQb2ludERlbm9taW5hdG9yOyB9CisjZWxzZQorICAgIHN0YXRpYyBpbnQgZXBzaWxv
bigpIHsgcmV0dXJuIDA7IH0KKyNlbmRpZgorICAgIHN0YXRpYyBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCBtYXgoKQorICAgIHsKKyAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbTsKKyAg
ICAgICAgbS5tX3ZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKKyAgICAg
ICAgcmV0dXJuIG07CisgICAgfQorICAgIHN0YXRpYyBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBtaW4oKQorICAgIHsKKyAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbTsKKyAgICAgICAg
bS5tX3ZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKTsKKyAgICAgICAgcmV0
dXJuIG07CisgICAgfQorCisgICAgLy8gVmVyc2lvbnMgb2YgbWF4L21pbiB0aGF0IGFyZSBzbGln
aHRseSBzbWFsbGVyL2xhcmdlciB0aGFuIG1heC9taW4oKSB0byBhbGxvdyBmb3Igcm9pbmRpbmcg
d2l0aG91dCBvdmVyZmxvd2luZy4KKyAgICBzdGF0aWMgY29uc3QgRnJhY3Rpb25hbExheW91dFVu
aXQgbmVhcmx5TWF4KCkKKyAgICB7CisgICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG07Cisg
ICAgICAgIG0ubV92YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkgLSBrRml4
ZWRQb2ludERlbm9taW5hdG9yIC8gMjsKKyAgICAgICAgcmV0dXJuIG07CisgICAgfQorICAgIHN0
YXRpYyBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBuZWFybHlNaW4oKQorICAgIHsKKyAgICAg
ICAgRnJhY3Rpb25hbExheW91dFVuaXQgbTsKKyAgICAgICAgbS5tX3ZhbHVlID0gc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ+OjptaW4oKSArIGtGaXhlZFBvaW50RGVub21pbmF0b3IgLyAyOworICAg
ICAgICByZXR1cm4gbTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEZyYWN0aW9uYWxMYXlvdXRV
bml0IGNsYW1wKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjbGFtcFRvPEZy
YWN0aW9uYWxMYXlvdXRVbml0Pih2YWx1ZSwgRnJhY3Rpb25hbExheW91dFVuaXQ6Om1pbigpLCBG
cmFjdGlvbmFsTGF5b3V0VW5pdDo6bWF4KCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0
aWMgYm9vbCBpc0luQm91bmRzKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiA6OmFi
cyh2YWx1ZSkgPD0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSAvIGtGaXhlZFBvaW50
RGVub21pbmF0b3I7CisgICAgfQorICAgIHN0YXRpYyBib29sIGlzSW5Cb3VuZHModW5zaWduZWQg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPD0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpIC8ga0ZpeGVkUG9pbnREZW5vbWlu
YXRvcjsKKyAgICB9CisgICAgc3RhdGljIGJvb2wgaXNJbkJvdW5kcyhkb3VibGUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gOjpmYWJzKHZhbHVlKSA8PSBzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1heCgpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKKyAgICB9CisgICAgCisgICAg
aW5saW5lIHZvaWQgc2V0VmFsdWUoaW50IHZhbHVlKQorICAgIHsKKyNpZiBFTkFCTEUoU0FUVVJB
VEVEX0xBWU9VVF9BUklUSE1FVElDKQorICAgICAgICBpZiAodmFsdWUgPiBpbnRNYXhGb3JMYXlv
dXRVbml0KQorICAgICAgICAgICAgbV92YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6
bWF4KCk7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlIDwgaW50TWluRm9yTGF5b3V0VW5pdCkKKyAg
ICAgICAgICAgIG1fdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX3ZhbHVlID0gdmFsdWUgKiBrRml4ZWRQb2ludERlbm9t
aW5hdG9yOworI2Vsc2UKKyAgICAgICAgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUp
KTsKKyAgICAgICAgbV92YWx1ZSA9IHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKKyNl
bmRpZgorICAgIH0KKyAgICBpbmxpbmUgdm9pZCBzZXRWYWx1ZSh1bnNpZ25lZCB2YWx1ZSkKKyAg
ICB7CisjaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKKyAgICAgICAgaWYg
KHZhbHVlID49IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbnRNYXhGb3JMYXlvdXRVbml0KSkKKyAg
ICAgICAgICAgIG1fdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX3ZhbHVlID0gdmFsdWUgKiBrRml4ZWRQb2ludERlbm9t
aW5hdG9yOworI2Vsc2UKKyAgICAgICAgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUp
KTsKKyAgICAgICAgbV92YWx1ZSA9IHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKKyNl
bmRpZgorICAgIH0KKworICAgIGludCBtX3ZhbHVlOworfTsKKworaW5saW5lIGJvb2wgb3BlcmF0
b3I8PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEucmF3VmFsdWUoKSA8PSBiLnJhd1ZhbHVlKCk7Cit9
CisKK2lubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEs
IGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEudG9GbG9hdCgpIDw9IGI7Cit9CisKK2lubGluZSBi
b29sIG9wZXJhdG9yPD0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQorewor
ICAgIHJldHVybiBhIDw9IEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworfQorCitpbmxpbmUgYm9v
bCBvcGVyYXRvcjw9KGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBi
KQoreworICAgIHJldHVybiBhIDw9IGIudG9GbG9hdCgpOworfQorCitpbmxpbmUgYm9vbCBvcGVy
YXRvcjw9KGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAg
ICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgPD0gYjsKK30KKworaW5saW5lIGJvb2wg
b3BlcmF0b3I+PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25h
bExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEucmF3VmFsdWUoKSA+PSBiLnJhd1ZhbHVl
KCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgRnJhY3Rpb25hbExheW91dFVu
aXQmIGEsIGludCBiKQoreworICAgIHJldHVybiBhID49IEZyYWN0aW9uYWxMYXlvdXRVbml0KGIp
OworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBhID49IGIudG9GbG9hdCgpOworfQor
CitpbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBm
bG9hdCBiKQoreworICAgIHJldHVybiBhLnRvRmxvYXQoKSA+PSBiOworfQorCitpbmxpbmUgYm9v
bCBvcGVyYXRvcj49KGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikK
K3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgPj0gYjsKK30KKworaW5saW5l
IGJvb2wgb3BlcmF0b3I8KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4gYS5yYXdWYWx1ZSgpIDwgYi5yYXdW
YWx1ZSgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGEsIGludCBiKQoreworICAgIHJldHVybiBhIDwgRnJhY3Rpb25hbExheW91dFVuaXQo
Yik7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYSwgZmxvYXQgYikKK3sKKyAgICByZXR1cm4gYS50b0Zsb2F0KCkgPCBiOworfQorCitpbmxp
bmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGRvdWJsZSBi
KQoreworICAgIHJldHVybiBhLnRvRG91YmxlKCkgPCBiOworfQorCitpbmxpbmUgYm9vbCBvcGVy
YXRvcjwoY29uc3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAg
IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSA8IGI7Cit9CisKK2lubGluZSBib29sIG9w
ZXJhdG9yPChjb25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sK
KyAgICByZXR1cm4gYSA8IGIudG9GbG9hdCgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj4o
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBiKQoreworICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgPiBiLnJhd1ZhbHVlKCk7Cit9CisKK2lu
bGluZSBib29sIG9wZXJhdG9yPihjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZG91Ymxl
IGIpCit7CisgICAgcmV0dXJuIGEudG9Eb3VibGUoKSA+IGI7Cit9CisKK2lubGluZSBib29sIG9w
ZXJhdG9yPihjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK3sKKyAgICBy
ZXR1cm4gYS50b0Zsb2F0KCkgPiBiOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3Qg
RnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQoreworICAgIHJldHVybiBhID4gRnJhY3Rp
b25hbExheW91dFVuaXQoYik7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBpbnQg
YSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEZyYWN0aW9u
YWxMYXlvdXRVbml0KGEpID4gYjsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IGZs
b2F0IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBhID4g
Yi50b0Zsb2F0KCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBkb3VibGUgYSwg
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEgPiBiLnRvRG91
YmxlKCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBh
LnJhd1ZhbHVlKCkgIT0gYi5yYXdWYWx1ZSgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQoreworICAgIHJldHVybiBh
ICE9IEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1
cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgIT0gYjsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCit7CisgICAgcmV0dXJu
IGEgIT0gRnJhY3Rpb25hbExheW91dFVuaXQoYik7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9y
PT0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBiKQoreworICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgPT0gYi5yYXdWYWx1ZSgpOworfQor
CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBp
bnQgYikKK3sKKyAgICByZXR1cm4gYSA9PSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKK30KKwor
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpID09IGI7Cit9
CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEs
IGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEudG9GbG9hdCgpID09IGI7Cit9CisKK2lubGluZSBi
b29sIG9wZXJhdG9yPT0oY29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGIpCit7CisgICAgcmV0dXJuIGEgPT0gYi50b0Zsb2F0KCk7Cit9CisKKy8vIEZvciBtdWx0aXBs
aWNhdGlvbiB0aGF0J3MgcHJvbmUgdG8gb3ZlcmZsb3csIHRoaXMgYm91bmRzIGl0IHRvIEZyYWN0
aW9uYWxMYXlvdXRVbml0OjptYXgoKSBhbmQgOjptaW4oKQoraW5saW5lIEZyYWN0aW9uYWxMYXlv
dXRVbml0IGJvdW5kZWRNdWx0aXBseShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29u
c3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9V
VCkKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7CisgICAgbG9uZyBsb25nIHJh
d1ZhbCA9IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oYS5yYXdWYWx1ZSgpKSAqIGIucmF3VmFsdWUo
KSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7CisgICAgaWYgKHJhd1ZhbCA+IHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50Pjo6bWF4KCkpCisgICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5p
dDo6bWF4KCk7CisgICAgaWYgKHJhd1ZhbCA8IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWlu
KCkpCisgICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWluKCk7CisgICAgcmV0
dXJuVmFsLnNldFJhd1ZhbHVlKHJhd1ZhbCk7CisgICAgcmV0dXJuIHJldHVyblZhbDsKKyNlbHNl
CisgICAgcmV0dXJuIGEucmF3VmFsdWUoKSAqIGIucmF3VmFsdWUoKTsKKyNlbmRpZgorfQorCitp
bmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IqKGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyNpZiBFTkFCTEUo
U1VCUElYRUxfTEFZT1VUKSAmJiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQor
ICAgIHJldHVybiBib3VuZGVkTXVsdGlwbHkoYSwgYik7CisjZWxpZiBFTkFCTEUoU1VCUElYRUxf
TEFZT1VUKQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJldHVyblZhbDsKKyAgICBsb25nIGxv
bmcgcmF3VmFsID0gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihhLnJhd1ZhbHVlKCkpICogYi5yYXdW
YWx1ZSgpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKKyAgICByZXR1cm5WYWwuc2V0UmF3VmFs
dWUocmF3VmFsKTsKKyAgICByZXR1cm4gcmV0dXJuVmFsOworI2Vsc2UKKyAgICByZXR1cm4gYS5y
YXdWYWx1ZSgpICogYi5yYXdWYWx1ZSgpOworI2VuZGlmCit9ICAgIAorCitpbmxpbmUgZG91Ymxl
IG9wZXJhdG9yKihjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZG91YmxlIGIpCit7Cisg
ICAgcmV0dXJuIGEudG9Eb3VibGUoKSAqIGI7Cit9CisKK2lubGluZSBmbG9hdCBvcGVyYXRvcioo
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEu
dG9GbG9hdCgpICogYjsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9y
Kihjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCit7CisgICAgcmV0dXJuIGEg
KiBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRV
bml0IG9wZXJhdG9yKihjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgdW5zaWduZWQgYikK
K3sKKyAgICByZXR1cm4gYSAqIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworfQorCitpbmxpbmUg
RnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IqKHVuc2lnbmVkIGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSAq
IGI7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvciooY29uc3QgaW50
IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBGcmFjdGlv
bmFsTGF5b3V0VW5pdChhKSAqIGI7Cit9CisKK2lubGluZSBmbG9hdCBvcGVyYXRvciooY29uc3Qg
ZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEg
KiBiLnRvRmxvYXQoKTsKK30KKworaW5saW5lIGRvdWJsZSBvcGVyYXRvciooY29uc3QgZG91Ymxl
IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBhICogYi50
b0RvdWJsZSgpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IvKGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
YikKK3sKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIEZyYWN0aW9uYWxMYXlvdXRV
bml0IHJldHVyblZhbDsKKyAgICBsb25nIGxvbmcgcmF3VmFsID0gc3RhdGljX2Nhc3Q8bG9uZyBs
b25nPihrRml4ZWRQb2ludERlbm9taW5hdG9yKSAqIGEucmF3VmFsdWUoKSAvIGIucmF3VmFsdWUo
KTsKKyAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUocmF3VmFsKTsKKyAgICByZXR1cm4gcmV0dXJu
VmFsOworI2Vsc2UKKyAgICByZXR1cm4gYS5yYXdWYWx1ZSgpIC8gYi5yYXdWYWx1ZSgpOworI2Vu
ZGlmCit9ICAgIAorCitpbmxpbmUgZmxvYXQgb3BlcmF0b3IvKGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBhLCBmbG9hdCBiKQoreworICAgIHJldHVybiBhLnRvRmxvYXQoKSAvIGI7Cit9CisK
K2lubGluZSBkb3VibGUgb3BlcmF0b3IvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBk
b3VibGUgYikKK3sKKyAgICByZXR1cm4gYS50b0RvdWJsZSgpIC8gYjsKK30KKworaW5saW5lIEZy
YWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
YSwgaW50IGIpCit7CisgICAgcmV0dXJuIGEgLyBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKK30K
KworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLyhjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYSwgdW5zaWduZWQgaW50IGIpCit7CisgICAgcmV0dXJuIGEgLyBGcmFjdGlv
bmFsTGF5b3V0VW5pdChiKTsKK30KKworaW5saW5lIGZsb2F0IG9wZXJhdG9yLyhjb25zdCBmbG9h
dCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4gYSAvIGIu
dG9GbG9hdCgpOworfQorCitpbmxpbmUgZG91YmxlIG9wZXJhdG9yLyhjb25zdCBkb3VibGUgYSwg
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEgLyBiLnRvRG91
YmxlKCk7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci8oY29uc3Qg
aW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBGcmFj
dGlvbmFsTGF5b3V0VW5pdChhKSAvIGI7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBvcGVyYXRvci8odW5zaWduZWQgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBi
KQoreworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSAvIGI7Cit9CisKK2lubGlu
ZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvcisoY29uc3QgRnJhY3Rpb25hbExheW91dFVu
aXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIEZyYWN0aW9uYWxM
YXlvdXRVbml0IHJldHVyblZhbDsKKyNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1F
VElDKQorICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShzYXR1cmF0ZWRBZGRpdGlvbihhLnJhd1Zh
bHVlKCksIGIucmF3VmFsdWUoKSkpOworI2Vsc2UKKyAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUo
YS5yYXdWYWx1ZSgpICsgYi5yYXdWYWx1ZSgpKTsKKyNlbmRpZgorICAgIHJldHVybiByZXR1cm5W
YWw7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvcisoY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQoreworICAgIHJldHVybiBhICsgRnJhY3Rpb25h
bExheW91dFVuaXQoYik7Cit9CisKK2lubGluZSBmbG9hdCBvcGVyYXRvcisoY29uc3QgRnJhY3Rp
b25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEudG9GbG9hdCgpICsg
YjsKK30KKworaW5saW5lIGRvdWJsZSBvcGVyYXRvcisoY29uc3QgRnJhY3Rpb25hbExheW91dFVu
aXQmIGEsIGRvdWJsZSBiKQoreworICAgIHJldHVybiBhLnRvRG91YmxlKCkgKyBiOworfQorCitp
bmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IrKGNvbnN0IGludCBhLCBjb25zdCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVu
aXQoYSkgKyBiOworfQorCitpbmxpbmUgZmxvYXQgb3BlcmF0b3IrKGNvbnN0IGZsb2F0IGEsIGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBhICsgYi50b0Zsb2F0
KCk7Cit9CisKK2lubGluZSBkb3VibGUgb3BlcmF0b3IrKGNvbnN0IGRvdWJsZSBhLCBjb25zdCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4gYSArIGIudG9Eb3VibGUoKTsK
K30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLShjb25zdCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAg
RnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOworI2lmIEVOQUJMRShTQVRVUkFURURfTEFZ
T1VUX0FSSVRITUVUSUMpCisgICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKHNhdHVyYXRlZFN1YnRy
YWN0aW9uKGEucmF3VmFsdWUoKSwgYi5yYXdWYWx1ZSgpKSk7CisjZWxzZQorICAgIHJldHVyblZh
bC5zZXRSYXdWYWx1ZShhLnJhd1ZhbHVlKCkgLSBiLnJhd1ZhbHVlKCkpOworI2VuZGlmCisgICAg
cmV0dXJuIHJldHVyblZhbDsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJh
dG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCit7CisgICAgcmV0dXJu
IGEgLSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlv
dXRVbml0IG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgdW5zaWduZWQg
YikKK3sKKyAgICByZXR1cm4gYSAtIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworfQorCitpbmxp
bmUgZmxvYXQgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBi
KQoreworICAgIHJldHVybiBhLnRvRmxvYXQoKSAtIGI7Cit9CisKK2lubGluZSBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBvcGVyYXRvci0oY29uc3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBiKQoreworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSAtIGI7Cit9CisK
K2lubGluZSBmbG9hdCBvcGVyYXRvci0oY29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEgLSBiLnRvRmxvYXQoKTsKK30KKworaW5saW5l
IEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYSkKK3sKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7CisgICAgcmV0dXJu
VmFsLnNldFJhd1ZhbHVlKC1hLnJhd1ZhbHVlKCkpOworICAgIHJldHVybiByZXR1cm5WYWw7Cit9
CisKKy8vIEZvciByZXR1cm5pbmcgdGhlIHJlbWFpbmRlciBhZnRlciBhIGRpdmlzaW9uIHdpdGgg
aW50ZWdlciByZXN1bHRzLgoraW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IGludE1vZChjb25z
dCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIp
Cit7CisjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKKyAgICAvLyBUaGlzIGNhbGN1bGF0ZXMg
dGhlIG1vZHVsbyBzbyB0aGF0OiBhID0gc3RhdGljX2Nhc3Q8aW50PihhIC8gYikgKiBiICsgaW50
TW9kKGEsIGIpLgorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJldHVyblZhbDsKKyAgICByZXR1
cm5WYWwuc2V0UmF3VmFsdWUoYS5yYXdWYWx1ZSgpICUgYi5yYXdWYWx1ZSgpKTsKKyAgICByZXR1
cm4gcmV0dXJuVmFsOworI2Vsc2UKKyAgICByZXR1cm4gYS5yYXdWYWx1ZSgpICUgYi5yYXdWYWx1
ZSgpOworI2VuZGlmCit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvciUo
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBiKQoreworI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisgICAgLy8gVGhpcyBjYWxjdWxh
dGVzIHRoZSBtb2R1bG8gc28gdGhhdDogYSA9IChhIC8gYikgKiBiICsgYSAlIGIuCisgICAgRnJh
Y3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOworICAgIGxvbmcgbG9uZyByYXdWYWwgPSAoc3Rh
dGljX2Nhc3Q8bG9uZyBsb25nPihrRml4ZWRQb2ludERlbm9taW5hdG9yKSAqIGEucmF3VmFsdWUo
KSkgJSBiLnJhd1ZhbHVlKCk7CisgICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKHJhd1ZhbCAvIGtG
aXhlZFBvaW50RGVub21pbmF0b3IpOworICAgIHJldHVybiByZXR1cm5WYWw7CisjZWxzZQorICAg
IHJldHVybiBhLnJhd1ZhbHVlKCkgJSBiLnJhd1ZhbHVlKCk7CisjZW5kaWYKK30KKworaW5saW5l
IEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yJShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYSwgaW50IGIpCit7CisgICAgcmV0dXJuIGEgJSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsK
K30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yJShpbnQgYSwgY29uc3Qg
RnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRV
bml0KGEpICUgYjsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvcis9
KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikK
K3sKKyNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQorICAgIGEuc2V0UmF3
VmFsdWUoc2F0dXJhdGVkQWRkaXRpb24oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKKyNl
bHNlCisgICAgYSA9IGEgKyBiOworI2VuZGlmCisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3IrPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwg
aW50IGIpCit7CisgICAgYSA9IGEgKyBiOworICAgIHJldHVybiBhOworfQorCitpbmxpbmUgRnJh
Y3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yKz0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZs
b2F0IGIpCit7CisgICAgYSA9IGEgKyBiOworICAgIHJldHVybiBhOworfQorCitpbmxpbmUgZmxv
YXQmIG9wZXJhdG9yKz0oZmxvYXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQor
eworICAgIGEgPSBhICsgYjsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxM
YXlvdXRVbml0JiBvcGVyYXRvci09KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK3sK
KyAgICBhID0gYSAtIGI7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgb3BlcmF0b3ItPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rp
b25hbExheW91dFVuaXQmIGIpCit7CisjaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhN
RVRJQykKKyAgICBhLnNldFJhd1ZhbHVlKHNhdHVyYXRlZFN1YnRyYWN0aW9uKGEucmF3VmFsdWUo
KSwgYi5yYXdWYWx1ZSgpKSk7CisjZWxzZQorICAgIGEgPSBhIC0gYjsKKyNlbmRpZgorICAgIHJl
dHVybiBhOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yLT0oRnJh
Y3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCit7CisgICAgYSA9IGEgLSBiOworICAgIHJl
dHVybiBhOworfQorCitpbmxpbmUgZmxvYXQmIG9wZXJhdG9yLT0oZmxvYXQmIGEsIGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIGEgPSBhIC0gYjsKKyAgICByZXR1cm4gYTsK
K30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvcio9KEZyYWN0aW9uYWxM
YXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICBhID0g
YSAqIGI7CisgICAgcmV0dXJuIGE7Cit9CisvLyBvcGVyYXRvcio9KEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBhLCBpbnQgYikgaXMgc3VwcG9ydGVkIGJ5IHRoZSBvcGVyYXRvciBhYm92ZSBwbHVzIEZy
YWN0aW9uYWxMYXlvdXRVbml0KGludCkuCisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
b3BlcmF0b3IqPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK3sKKyAgICBhID0g
YSAqIGI7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBmbG9hdCYgb3BlcmF0b3IqPShmbG9h
dCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgYSA9IGEgKiBiOwor
ICAgIHJldHVybiBhOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9y
Lz0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBi
KQoreworICAgIGEgPSBhIC8gYjsKKyAgICByZXR1cm4gYTsKK30KKy8vIG9wZXJhdG9yLz0oRnJh
Y3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKSBpcyBzdXBwb3J0ZWQgYnkgdGhlIG9wZXJhdG9y
IGFib3ZlIHBsdXMgRnJhY3Rpb25hbExheW91dFVuaXQoaW50KS4KKworaW5saW5lIEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBvcGVyYXRvci89KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBi
KQoreworICAgIGEgPSBhIC8gYjsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIGZsb2F0JiBv
cGVyYXRvci89KGZsb2F0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAg
ICBhID0gYSAvIGI7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBpbnQgc25hcFNpemVUb1Bp
eGVsKEZyYWN0aW9uYWxMYXlvdXRVbml0IHNpemUsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGxvY2F0
aW9uKSAKK3sKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBmcmFjdGlvbiA9IGxvY2F0aW9uLmZy
YWN0aW9uKCk7CisgICAgcmV0dXJuIChmcmFjdGlvbiArIHNpemUpLnJvdW5kKCkgLSBmcmFjdGlv
bi5yb3VuZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBGcmFj
dGlvbmFsTGF5b3V0VW5pdF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYXlvdXRV
bml0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGF5b3V0VW5pdC5o
CShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYXlvdXRVbml0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAotI2lmbmRlZiBGcmFjdGlvbmFsTGF5b3V0VW5pdF9oCi0jZGVmaW5lIEZyYWN0aW9uYWxMYXlv
dXRVbml0X2gKKyNpZm5kZWYgTGF5b3V0VW5pdF9oCisjZGVmaW5lIExheW91dFVuaXRfaAogCiAj
aW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8bGltaXRzPgpAQCAtNjIsMTggKzYyLDE4IEBA
IHN0YXRpYyBjb25zdCBpbnQga0ZpeGVkUG9pbnREZW5vbWluYXRvcgogY29uc3QgaW50IGludE1h
eEZvckxheW91dFVuaXQgPSBJTlRfTUFYIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKIGNvbnN0
IGludCBpbnRNaW5Gb3JMYXlvdXRVbml0ID0gSU5UX01JTiAvIGtGaXhlZFBvaW50RGVub21pbmF0
b3I7CiAKLWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRVbml0IHsKK2NsYXNzIExheW91dFVuaXQgewog
cHVibGljOgogICAgIC8vIEZJWE1FOiBJZGVhbGx5IHdlIHdvdWxkIGhhdmUgc2l6ZV90IHZlcnNp
b25zIG9mIHRoZSBjb25zdHJ1Y3RvciBhbmQgb3BlcmF0b3JzLgogICAgIC8vIEhvd2V2ZXIgZHVl
IHRvIGNvbXBpbGVyIGFuZCBwbGF0Zm9ybSBkaWZmZXJlbmNlcyBhZGRpbmcgdGhvc2UgYXJlIG5v
bi10cml2aWFsLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODM4NDggZm9yIGRldGFpbHMuCiAgICAgCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQo
KSA6IG1fdmFsdWUoMCkgeyB9CisgICAgTGF5b3V0VW5pdCgpIDogbV92YWx1ZSgwKSB7IH0KICNp
ZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KGludCB2
YWx1ZSkgeyBzZXRWYWx1ZSh2YWx1ZSk7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCh1bnNp
Z25lZCBzaG9ydCB2YWx1ZSkgeyBzZXRWYWx1ZSh2YWx1ZSk7IH0KLSAgICBGcmFjdGlvbmFsTGF5
b3V0VW5pdCh1bnNpZ25lZCBpbnQgdmFsdWUpIHsgc2V0VmFsdWUodmFsdWUpOyB9Ci0gICAgRnJh
Y3Rpb25hbExheW91dFVuaXQoZmxvYXQgdmFsdWUpCisgICAgTGF5b3V0VW5pdChpbnQgdmFsdWUp
IHsgc2V0VmFsdWUodmFsdWUpOyB9CisgICAgTGF5b3V0VW5pdCh1bnNpZ25lZCBzaG9ydCB2YWx1
ZSkgeyBzZXRWYWx1ZSh2YWx1ZSk7IH0KKyAgICBMYXlvdXRVbml0KHVuc2lnbmVkIHZhbHVlKSB7
IHNldFZhbHVlKHZhbHVlKTsgfQorICAgIExheW91dFVuaXQoZmxvYXQgdmFsdWUpCiAgICAgewog
I2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCiAgICAgICAgIG1fdmFsdWUg
PSBjbGFtcFRvPGZsb2F0Pih2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3IsIHN0YXRpY19j
YXN0PGZsb2F0PihJTlRfTUlOKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KElOVF9NQVgpKTsKQEAgLTgy
LDcgKzgyLDcgQEAgcHVibGljOgogICAgICAgICBtX3ZhbHVlID0gdmFsdWUgKiBrRml4ZWRQb2lu
dERlbm9taW5hdG9yOwogI2VuZGlmCiAgICAgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KGRv
dWJsZSB2YWx1ZSkKKyAgICBMYXlvdXRVbml0KGRvdWJsZSB2YWx1ZSkKICAgICB7CiAjaWYgRU5B
QkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKICAgICAgICAgbV92YWx1ZSA9IGNsYW1w
VG88ZG91YmxlPih2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3IsIHN0YXRpY19jYXN0PGRv
dWJsZT4oSU5UX01JTiksIHN0YXRpY19jYXN0PGRvdWJsZT4oSU5UX01BWCkpOwpAQCAtOTIsMTcg
KzkyLDE3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KICNlbHNlCi0gICAgRnJhY3Rpb25hbExh
eW91dFVuaXQoaW50IHZhbHVlKSB7IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7
IG1fdmFsdWUgPSB2YWx1ZTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KHVuc2lnbmVkIHNo
b3J0IHZhbHVlKSB7IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7IG1fdmFsdWUg
PSB2YWx1ZTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KHVuc2lnbmVkIGludCB2YWx1ZSkg
eyBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFsdWU7IH0K
LSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdChmbG9hdCB2YWx1ZSkgeyBSRVBPUlRfT1ZFUkZMT1co
aXNJbkJvdW5kcyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFsdWU7IH0KLSAgICBGcmFjdGlvbmFsTGF5
b3V0VW5pdChkb3VibGUgdmFsdWUpIHsgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUp
KTsgbV92YWx1ZSA9IHZhbHVlOyB9CisgICAgTGF5b3V0VW5pdChpbnQgdmFsdWUpIHsgUkVQT1JU
X09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsgbV92YWx1ZSA9IHZhbHVlOyB9CisgICAgTGF5
b3V0VW5pdCh1bnNpZ25lZCBzaG9ydCB2YWx1ZSkgeyBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5k
cyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFsdWU7IH0KKyAgICBMYXlvdXRVbml0KHVuc2lnbmVkIHZh
bHVlKSB7IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7IG1fdmFsdWUgPSB2YWx1
ZTsgfQorICAgIExheW91dFVuaXQoZmxvYXQgdmFsdWUpIHsgUkVQT1JUX09WRVJGTE9XKGlzSW5C
b3VuZHModmFsdWUpKTsgbV92YWx1ZSA9IHZhbHVlOyB9CisgICAgTGF5b3V0VW5pdChkb3VibGUg
dmFsdWUpIHsgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsgbV92YWx1ZSA9IHZh
bHVlOyB9CiAjZW5kaWYKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdChjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgdmFsdWUpIHsgbV92YWx1ZSA9IHZhbHVlLnJhd1ZhbHVlKCk7IH0KKyAgICBM
YXlvdXRVbml0KGNvbnN0IExheW91dFVuaXQmIHZhbHVlKSB7IG1fdmFsdWUgPSB2YWx1ZS5yYXdW
YWx1ZSgpOyB9CiAKLSAgICBzdGF0aWMgRnJhY3Rpb25hbExheW91dFVuaXQgZnJvbUZsb2F0Q2Vp
bChmbG9hdCB2YWx1ZSkKKyAgICBzdGF0aWMgTGF5b3V0VW5pdCBmcm9tRmxvYXRDZWlsKGZsb2F0
IHZhbHVlKQogICAgIHsKLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgdjsKKyAgICAgICAg
TGF5b3V0VW5pdCB2OwogI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCiAg
ICAgICAgIHYubV92YWx1ZSA9IGNsYW1wVG9JbnRlZ2VyKGNlaWxmKHZhbHVlICoga0ZpeGVkUG9p
bnREZW5vbWluYXRvcikpOwogI2Vsc2UKQEAgLTExMiw5ICsxMTIsOSBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiB2OwogICAgIH0KIAotICAgIHN0YXRpYyBGcmFjdGlvbmFsTGF5b3V0VW5pdCBm
cm9tRmxvYXRGbG9vcihmbG9hdCB2YWx1ZSkKKyAgICBzdGF0aWMgTGF5b3V0VW5pdCBmcm9tRmxv
YXRGbG9vcihmbG9hdCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
IHY7CisgICAgICAgIExheW91dFVuaXQgdjsKICNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9B
UklUSE1FVElDKQogICAgICAgICB2Lm1fdmFsdWUgPSBjbGFtcFRvSW50ZWdlcihmbG9vcmYodmFs
dWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yKSk7CiAjZWxzZQpAQCAtMTI0LDcgKzEyNCw3IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHY7CiAgICAgfQogCi0gICAgc3RhdGljIEZyYWN0aW9u
YWxMYXlvdXRVbml0IGZyb21GbG9hdFJvdW5kKGZsb2F0IHZhbHVlKQorICAgIHN0YXRpYyBMYXlv
dXRVbml0IGZyb21GbG9hdFJvdW5kKGZsb2F0IHZhbHVlKQogICAgIHsKICNpZiBFTkFCTEUoU0FU
VVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQogICAgICAgICBpZiAodmFsdWUgPj0gMCkKQEAgLTEz
MywxMCArMTMzLDEwIEBAIHB1YmxpYzoKICNlbHNlCiAgICAgICAgIGlmICh2YWx1ZSA+PSAwKSB7
CiAgICAgICAgICAgICBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSArIGVwc2lsb24o
KSAvIDIuMGYpKTsKLSAgICAgICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdCh2YWx1
ZSArIGVwc2lsb24oKSAvIDIuMGYpOworICAgICAgICAgICAgcmV0dXJuIExheW91dFVuaXQodmFs
dWUgKyBlcHNpbG9uKCkgLyAyLjBmKTsKICAgICAgICAgfQogICAgICAgICBSRVBPUlRfT1ZFUkZM
T1coaXNJbkJvdW5kcyh2YWx1ZSAtIGVwc2lsb24oKSAvIDIuMGYpKTsKLSAgICAgICAgcmV0dXJu
IEZyYWN0aW9uYWxMYXlvdXRVbml0KHZhbHVlIC0gZXBzaWxvbigpIC8gMi4wZik7CisgICAgICAg
IHJldHVybiBMYXlvdXRVbml0KHZhbHVlIC0gZXBzaWxvbigpIC8gMi4wZik7CiAjZW5kaWYKICAg
ICB9CiAKQEAgLTE2Nyw3ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgZG91YmxlKCkg
Y29uc3QgeyByZXR1cm4gdG9Eb3VibGUoKTsgfQogICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlOyB9CiAKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvcisr
KGludCkKKyAgICBMYXlvdXRVbml0IG9wZXJhdG9yKysoaW50KQogICAgIHsKICAgICAgICAgbV92
YWx1ZSArPSBrRml4ZWRQb2ludERlbm9taW5hdG9yOwogICAgICAgICByZXR1cm4gKnRoaXM7CkBA
IC0xODEsOSArMTgxLDkgQEAgcHVibGljOgogICAgICAgICBtX3ZhbHVlID0gc3RhdGljX2Nhc3Q8
aW50Pih2YWx1ZSk7CiAgICAgfQogCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgYWJzKCkgY29u
c3QKKyAgICBMYXlvdXRVbml0IGFicygpIGNvbnN0CiAgICAgewotICAgICAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCByZXR1cm5WYWx1ZTsKKyAgICAgICAgTGF5b3V0VW5pdCByZXR1cm5WYWx1ZTsK
ICAgICAgICAgcmV0dXJuVmFsdWUuc2V0UmF3VmFsdWUoOjphYnMobV92YWx1ZSkpOwogICAgICAg
ICByZXR1cm4gcmV0dXJuVmFsdWU7CiAgICAgfQpAQCAtMjI3LDExICsyMjcsMTEgQEAgcHVibGlj
OgogI2VuZGlmCiAgICAgfQogCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgZnJhY3Rpb24oKSBj
b25zdAorICAgIExheW91dFVuaXQgZnJhY3Rpb24oKSBjb25zdAogICAgIHsgICAKICAgICAgICAg
Ly8gQWRkIHRoZSBmcmFjdGlvbiB0byB0aGUgc2l6ZSAoYXMgb3Bwb3NlZCB0byB0aGUgZnVsbCBs
b2NhdGlvbikgdG8gYXZvaWQgb3ZlcmZsb3dzLgogICAgICAgICAvLyBDb21wdXRlIGZyYWN0aW9u
IHVzaW5nIHRoZSBtb2Qgb3BlcmF0b3IgdG8gcHJlc2VydmUgdGhlIHNpZ24gb2YgdGhlIHZhbHVl
IGFzIGl0IG1heSBhZmZlY3Qgcm91bmRpbmcuCi0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
IGZyYWN0aW9uOworICAgICAgICBMYXlvdXRVbml0IGZyYWN0aW9uOwogICAgICAgICBmcmFjdGlv
bi5zZXRSYXdWYWx1ZShyYXdWYWx1ZSgpICUga0ZpeGVkUG9pbnREZW5vbWluYXRvcik7CiAgICAg
ICAgIHJldHVybiBmcmFjdGlvbjsKICAgICB9CkBAIC0yNDEsMzYgKzI0MSwzNiBAQCBwdWJsaWM6
CiAjZWxzZQogICAgIHN0YXRpYyBpbnQgZXBzaWxvbigpIHsgcmV0dXJuIDA7IH0KICNlbmRpZgot
ICAgIHN0YXRpYyBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtYXgoKQorICAgIHN0YXRpYyBj
b25zdCBMYXlvdXRVbml0IG1heCgpCiAgICAgewotICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBtOworICAgICAgICBMYXlvdXRVbml0IG07CiAgICAgICAgIG0ubV92YWx1ZSA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7CiAgICAgICAgIHJldHVybiBtOwogICAgIH0KLSAgICBz
dGF0aWMgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQgbWluKCkKKyAgICBzdGF0aWMgY29uc3Qg
TGF5b3V0VW5pdCBtaW4oKQogICAgIHsKLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbTsK
KyAgICAgICAgTGF5b3V0VW5pdCBtOwogICAgICAgICBtLm1fdmFsdWUgPSBzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1pbigpOwogICAgICAgICByZXR1cm4gbTsKICAgICB9CiAKICAgICAvLyBW
ZXJzaW9ucyBvZiBtYXgvbWluIHRoYXQgYXJlIHNsaWdodGx5IHNtYWxsZXIvbGFyZ2VyIHRoYW4g
bWF4L21pbigpIHRvIGFsbG93IGZvciByb2luZGluZyB3aXRob3V0IG92ZXJmbG93aW5nLgotICAg
IHN0YXRpYyBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBuZWFybHlNYXgoKQorICAgIHN0YXRp
YyBjb25zdCBMYXlvdXRVbml0IG5lYXJseU1heCgpCiAgICAgewotICAgICAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBtOworICAgICAgICBMYXlvdXRVbml0IG07CiAgICAgICAgIG0ubV92YWx1ZSA9
IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkgLSBrRml4ZWRQb2ludERlbm9taW5hdG9y
IC8gMjsKICAgICAgICAgcmV0dXJuIG07CiAgICAgfQotICAgIHN0YXRpYyBjb25zdCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCBuZWFybHlNaW4oKQorICAgIHN0YXRpYyBjb25zdCBMYXlvdXRVbml0IG5l
YXJseU1pbigpCiAgICAgewotICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtOworICAgICAg
ICBMYXlvdXRVbml0IG07CiAgICAgICAgIG0ubV92YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50Pjo6bWluKCkgKyBrRml4ZWRQb2ludERlbm9taW5hdG9yIC8gMjsKICAgICAgICAgcmV0dXJu
IG07CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBGcmFjdGlvbmFsTGF5b3V0VW5pdCBjbGFtcChk
b3VibGUgdmFsdWUpCisgICAgc3RhdGljIExheW91dFVuaXQgY2xhbXAoZG91YmxlIHZhbHVlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGNsYW1wVG88RnJhY3Rpb25hbExheW91dFVuaXQ+KHZhbHVl
LCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWluKCksIEZyYWN0aW9uYWxMYXlvdXRVbml0OjptYXgo
KSk7CisgICAgICAgIHJldHVybiBjbGFtcFRvPExheW91dFVuaXQ+KHZhbHVlLCBMYXlvdXRVbml0
OjptaW4oKSwgTGF5b3V0VW5pdDo6bWF4KCkpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTMxNywx
NzYgKzMxNywxNzYgQEAgcHJpdmF0ZToKICAgICBpbnQgbV92YWx1ZTsKIH07CiAKLWlubGluZSBi
b29sIG9wZXJhdG9yPD0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBMYXlvdXRV
bml0JiBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewogICAgIHJldHVybiBhLnJhd1ZhbHVlKCkg
PD0gYi5yYXdWYWx1ZSgpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25z
dCBMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQogewogICAgIHJldHVybiBhLnRvRmxvYXQoKSA8PSBi
OwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBhLCBpbnQgYikKK2lubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgTGF5b3V0VW5pdCYgYSwg
aW50IGIpCiB7Ci0gICAgcmV0dXJuIGEgPD0gRnJhY3Rpb25hbExheW91dFVuaXQoYik7CisgICAg
cmV0dXJuIGEgPD0gTGF5b3V0VW5pdChiKTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3I8PShj
b25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBib29s
IG9wZXJhdG9yPD0oY29uc3QgZmxvYXQgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICBy
ZXR1cm4gYSA8PSBiLnRvRmxvYXQoKTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25z
dCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgYm9vbCBvcGVy
YXRvcjw9KGNvbnN0IGludCBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewotICAgIHJldHVybiBG
cmFjdGlvbmFsTGF5b3V0VW5pdChhKSA8PSBiOworICAgIHJldHVybiBMYXlvdXRVbml0KGEpIDw9
IGI7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgRnJhY3Rpb25hbExheW91dFVu
aXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIGJvb2wgb3BlcmF0
b3I+PShjb25zdCBMYXlvdXRVbml0JiBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewogICAgIHJl
dHVybiBhLnJhd1ZhbHVlKCkgPj0gYi5yYXdWYWx1ZSgpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVy
YXRvcj49KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK2lubGluZSBib29s
IG9wZXJhdG9yPj0oY29uc3QgTGF5b3V0VW5pdCYgYSwgaW50IGIpCiB7Ci0gICAgcmV0dXJuIGEg
Pj0gRnJhY3Rpb25hbExheW91dFVuaXQoYik7CisgICAgcmV0dXJuIGEgPj0gTGF5b3V0VW5pdChi
KTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBmbG9hdCBhLCBjb25zdCBGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgZmxvYXQg
YSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1cm4gYSA+PSBiLnRvRmxvYXQoKTsK
IH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
YSwgZmxvYXQgYikKK2lubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgTGF5b3V0VW5pdCYgYSwg
ZmxvYXQgYikKIHsKICAgICByZXR1cm4gYS50b0Zsb2F0KCkgPj0gYjsKIH0KIAotaW5saW5lIGJv
b2wgb3BlcmF0b3I+PShjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIp
CitpbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IGludCBhLCBjb25zdCBMYXlvdXRVbml0JiBi
KQogewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSA+PSBiOworICAgIHJldHVy
biBMYXlvdXRVbml0KGEpID49IGI7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitp
bmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgTGF5b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5p
dCYgYikKIHsKICAgICByZXR1cm4gYS5yYXdWYWx1ZSgpIDwgYi5yYXdWYWx1ZSgpOwogfQogCi1p
bmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBi
KQoraW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IExheW91dFVuaXQmIGEsIGludCBiKQogewot
ICAgIHJldHVybiBhIDwgRnJhY3Rpb25hbExheW91dFVuaXQoYik7CisgICAgcmV0dXJuIGEgPCBM
YXlvdXRVbml0KGIpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgRnJhY3Rpb25h
bExheW91dFVuaXQmIGEsIGZsb2F0IGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgTGF5
b3V0VW5pdCYgYSwgZmxvYXQgYikKIHsKICAgICByZXR1cm4gYS50b0Zsb2F0KCkgPCBiOwogfQog
Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGRv
dWJsZSBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IExheW91dFVuaXQmIGEsIGRvdWJs
ZSBiKQogewogICAgIHJldHVybiBhLnRvRG91YmxlKCkgPCBiOwogfQogCi1pbmxpbmUgYm9vbCBv
cGVyYXRvcjwoY29uc3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5s
aW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IGludCBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewot
ICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSA8IGI7CisgICAgcmV0dXJuIExheW91
dFVuaXQoYSkgPCBiOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgZmxvYXQgYSwg
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29u
c3QgZmxvYXQgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1cm4gYSA8IGIudG9G
bG9hdCgpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIGJvb2wgb3Bl
cmF0b3I+KGNvbnN0IExheW91dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAgICAg
cmV0dXJuIGEucmF3VmFsdWUoKSA+IGIucmF3VmFsdWUoKTsKIH0KIAotaW5saW5lIGJvb2wgb3Bl
cmF0b3I+KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBkb3VibGUgYikKK2lubGluZSBi
b29sIG9wZXJhdG9yPihjb25zdCBMYXlvdXRVbml0JiBhLCBkb3VibGUgYikKIHsKICAgICByZXR1
cm4gYS50b0RvdWJsZSgpID4gYjsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I+KGNv
bnN0IExheW91dFVuaXQmIGEsIGZsb2F0IGIpCiB7CiAgICAgcmV0dXJuIGEudG9GbG9hdCgpID4g
YjsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBhLCBpbnQgYikKK2lubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBMYXlvdXRVbml0JiBhLCBp
bnQgYikKIHsKLSAgICByZXR1cm4gYSA+IEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworICAgIHJl
dHVybiBhID4gTGF5b3V0VW5pdChiKTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0
IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBib29sIG9wZXJh
dG9yPihjb25zdCBpbnQgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKLSAgICByZXR1cm4gRnJh
Y3Rpb25hbExheW91dFVuaXQoYSkgPiBiOworICAgIHJldHVybiBMYXlvdXRVbml0KGEpID4gYjsK
IH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IGZsb2F0IGEsIGNv
bnN0IExheW91dFVuaXQmIGIpCiB7CiAgICAgcmV0dXJuIGEgPiBiLnRvRmxvYXQoKTsKIH0KIAot
aW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IGRvdWJsZSBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgYikKK2lubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBkb3VibGUgYSwgY29uc3Qg
TGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1cm4gYSA+IGIudG9Eb3VibGUoKTsKIH0KIAotaW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3Qg
RnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IExh
eW91dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAgICAgcmV0dXJuIGEucmF3VmFs
dWUoKSAhPSBiLnJhd1ZhbHVlKCk7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3Qg
RnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IExheW91dFVuaXQmIGEsIGZsb2F0IGIpCiB7Ci0gICAgcmV0dXJuIGEgIT0gRnJhY3Rp
b25hbExheW91dFVuaXQoYik7CisgICAgcmV0dXJuIGEgIT0gTGF5b3V0VW5pdChiKTsKIH0KIAot
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGludCBhLCBjb25zdCBMYXlv
dXRVbml0JiBiKQogewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSAhPSBiOwor
ICAgIHJldHVybiBMYXlvdXRVbml0KGEpICE9IGI7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9y
IT0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQoraW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBMYXlvdXRVbml0JiBhLCBpbnQgYikKIHsKLSAgICByZXR1cm4gYSAhPSBG
cmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKKyAgICByZXR1cm4gYSAhPSBMYXlvdXRVbml0KGIpOwog
fQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgTGF5b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1cm4g
YS5yYXdWYWx1ZSgpID09IGIucmF3VmFsdWUoKTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCitpbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IExheW91dFVuaXQmIGEsIGludCBiKQogewotICAgIHJldHVybiBhID09IEZy
YWN0aW9uYWxMYXlvdXRVbml0KGIpOworICAgIHJldHVybiBhID09IExheW91dFVuaXQoYik7CiB9
CiAKLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRVbml0JiBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpbnQgYSwgY29uc3Qg
TGF5b3V0VW5pdCYgYikKIHsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgPT0g
YjsKKyAgICByZXR1cm4gTGF5b3V0VW5pdChhKSA9PSBiOwogfQogCi1pbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQoraW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQogewogICAgIHJldHVy
biBhLnRvRmxvYXQoKSA9PSBiOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGZs
b2F0IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBmbG9hdCBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewogICAgIHJldHVybiBh
ID09IGIudG9GbG9hdCgpOwogfQogCi0vLyBGb3IgbXVsdGlwbGljYXRpb24gdGhhdCdzIHByb25l
IHRvIG92ZXJmbG93LCB0aGlzIGJvdW5kcyBpdCB0byBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWF4
KCkgYW5kIDo6bWluKCkKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBib3VuZGVkTXVsdGlw
bHkoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBiKQorLy8gRm9yIG11bHRpcGxpY2F0aW9uIHRoYXQncyBwcm9uZSB0byBvdmVyZmxvdywg
dGhpcyBib3VuZHMgaXQgdG8gTGF5b3V0VW5pdDo6bWF4KCkgYW5kIDo6bWluKCkKK2lubGluZSBM
YXlvdXRVbml0IGJvdW5kZWRNdWx0aXBseShjb25zdCBMYXlvdXRVbml0JiBhLCBjb25zdCBMYXlv
dXRVbml0JiBiKQogewogI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCi0gICAgRnJhY3Rpb25h
bExheW91dFVuaXQgcmV0dXJuVmFsOworICAgIExheW91dFVuaXQgcmV0dXJuVmFsOwogICAgIGxv
bmcgbG9uZyByYXdWYWwgPSBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGEucmF3VmFsdWUoKSkgKiBi
LnJhd1ZhbHVlKCkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOwogICAgIGlmIChyYXdWYWwgPiBz
dGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQotICAgICAgICByZXR1cm4gRnJhY3Rpb25h
bExheW91dFVuaXQ6Om1heCgpOworICAgICAgICByZXR1cm4gTGF5b3V0VW5pdDo6bWF4KCk7CiAg
ICAgaWYgKHJhd1ZhbCA8IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkpCi0gICAgICAg
IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWluKCk7CisgICAgICAgIHJldHVybiBMYXlv
dXRVbml0OjptaW4oKTsKICAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUocmF3VmFsKTsKICAgICBy
ZXR1cm4gcmV0dXJuVmFsOwogI2Vsc2UKQEAgLTQ5NCwxMiArNDk0LDEyIEBAIGlubGluZSBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBib3VuZGVkTXVsdGkKICNlbmRpZgogfQogCi1pbmxpbmUgRnJhY3Rp
b25hbExheW91dFVuaXQgb3BlcmF0b3IqKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBj
b25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBMYXlvdXRVbml0IG9wZXJhdG9y
Kihjb25zdCBMYXlvdXRVbml0JiBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewogI2lmIEVOQUJM
RShTVUJQSVhFTF9MQVlPVVQpICYmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMp
CiAgICAgcmV0dXJuIGJvdW5kZWRNdWx0aXBseShhLCBiKTsKICNlbGlmIEVOQUJMRShTVUJQSVhF
TF9MQVlPVVQpCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOworICAgIExheW91
dFVuaXQgcmV0dXJuVmFsOwogICAgIGxvbmcgbG9uZyByYXdWYWwgPSBzdGF0aWNfY2FzdDxsb25n
IGxvbmc+KGEucmF3VmFsdWUoKSkgKiBiLnJhd1ZhbHVlKCkgLyBrRml4ZWRQb2ludERlbm9taW5h
dG9yOwogICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShyYXdWYWwpOwogICAgIHJldHVybiByZXR1
cm5WYWw7CkBAIC01MDgsNTAgKzUwOCw1MCBAQCBpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQg
b3BlcmF0b3IqKGNvCiAjZW5kaWYKIH0gICAgCiAKLWlubGluZSBkb3VibGUgb3BlcmF0b3IqKGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBkb3VibGUgYikKK2lubGluZSBkb3VibGUgb3Bl
cmF0b3IqKGNvbnN0IExheW91dFVuaXQmIGEsIGRvdWJsZSBiKQogewogICAgIHJldHVybiBhLnRv
RG91YmxlKCkgKiBiOwogfQogCi1pbmxpbmUgZmxvYXQgb3BlcmF0b3IqKGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQoraW5saW5lIGZsb2F0IG9wZXJhdG9yKihjb25zdCBM
YXlvdXRVbml0JiBhLCBmbG9hdCBiKQogewogICAgIHJldHVybiBhLnRvRmxvYXQoKSAqIGI7CiB9
CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvciooY29uc3QgRnJhY3Rpb25h
bExheW91dFVuaXQmIGEsIGludCBiKQoraW5saW5lIExheW91dFVuaXQgb3BlcmF0b3IqKGNvbnN0
IExheW91dFVuaXQmIGEsIGludCBiKQogewotICAgIHJldHVybiBhICogRnJhY3Rpb25hbExheW91
dFVuaXQoYik7CisgICAgcmV0dXJuIGEgKiBMYXlvdXRVbml0KGIpOwogfQogCi1pbmxpbmUgRnJh
Y3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IqKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBh
LCB1bnNpZ25lZCBiKQoraW5saW5lIExheW91dFVuaXQgb3BlcmF0b3IqKGNvbnN0IExheW91dFVu
aXQmIGEsIHVuc2lnbmVkIGIpCiB7Ci0gICAgcmV0dXJuIGEgKiBGcmFjdGlvbmFsTGF5b3V0VW5p
dChiKTsKKyAgICByZXR1cm4gYSAqIExheW91dFVuaXQoYik7CiB9CiAKLWlubGluZSBGcmFjdGlv
bmFsTGF5b3V0VW5pdCBvcGVyYXRvcioodW5zaWduZWQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGIpCitpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvcioodW5zaWduZWQgYSwgY29uc3Qg
TGF5b3V0VW5pdCYgYikKIHsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgKiBi
OworICAgIHJldHVybiBMYXlvdXRVbml0KGEpICogYjsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxM
YXlvdXRVbml0IG9wZXJhdG9yKihjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVu
aXQmIGIpCitpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvciooY29uc3QgaW50IGEsIGNvbnN0IExh
eW91dFVuaXQmIGIpCiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpICogYjsK
KyAgICByZXR1cm4gTGF5b3V0VW5pdChhKSAqIGI7CiB9CiAKLWlubGluZSBmbG9hdCBvcGVyYXRv
ciooY29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUg
ZmxvYXQgb3BlcmF0b3IqKGNvbnN0IGZsb2F0IGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAg
ICAgcmV0dXJuIGEgKiBiLnRvRmxvYXQoKTsKIH0KIAotaW5saW5lIGRvdWJsZSBvcGVyYXRvcioo
Y29uc3QgZG91YmxlIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIGRv
dWJsZSBvcGVyYXRvciooY29uc3QgZG91YmxlIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAg
ICAgcmV0dXJuIGEgKiBiLnRvRG91YmxlKCk7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBvcGVyYXRvci8oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIExheW91dFVuaXQgb3BlcmF0b3IvKGNvbnN0IExh
eW91dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAjaWYgRU5BQkxFKFNVQlBJWEVM
X0xBWU9VVCkKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7CisgICAgTGF5b3V0
VW5pdCByZXR1cm5WYWw7CiAgICAgbG9uZyBsb25nIHJhd1ZhbCA9IHN0YXRpY19jYXN0PGxvbmcg
bG9uZz4oa0ZpeGVkUG9pbnREZW5vbWluYXRvcikgKiBhLnJhd1ZhbHVlKCkgLyBiLnJhd1ZhbHVl
KCk7CiAgICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKHJhd1ZhbCk7CiAgICAgcmV0dXJuIHJldHVy
blZhbDsKQEAgLTU2MCw0OSArNTYwLDQ5IEBAIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBv
cGVyYXRvci8oY28KICNlbmRpZgogfSAgICAKIAotaW5saW5lIGZsb2F0IG9wZXJhdG9yLyhjb25z
dCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK2lubGluZSBmbG9hdCBvcGVyYXRv
ci8oY29uc3QgTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKIHsKICAgICByZXR1cm4gYS50b0Zsb2F0
KCkgLyBiOwogfQogCi1pbmxpbmUgZG91YmxlIG9wZXJhdG9yLyhjb25zdCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgYSwgZG91YmxlIGIpCitpbmxpbmUgZG91YmxlIG9wZXJhdG9yLyhjb25zdCBMYXlv
dXRVbml0JiBhLCBkb3VibGUgYikKIHsKICAgICByZXR1cm4gYS50b0RvdWJsZSgpIC8gYjsKIH0K
IAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLyhjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYSwgaW50IGIpCitpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvci8oY29uc3Qg
TGF5b3V0VW5pdCYgYSwgaW50IGIpCiB7Ci0gICAgcmV0dXJuIGEgLyBGcmFjdGlvbmFsTGF5b3V0
VW5pdChiKTsKKyAgICByZXR1cm4gYSAvIExheW91dFVuaXQoYik7CiB9CiAKLWlubGluZSBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci8oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEs
IHVuc2lnbmVkIGludCBiKQoraW5saW5lIExheW91dFVuaXQgb3BlcmF0b3IvKGNvbnN0IExheW91
dFVuaXQmIGEsIHVuc2lnbmVkIGIpCiB7Ci0gICAgcmV0dXJuIGEgLyBGcmFjdGlvbmFsTGF5b3V0
VW5pdChiKTsKKyAgICByZXR1cm4gYSAvIExheW91dFVuaXQoYik7CiB9CiAKLWlubGluZSBmbG9h
dCBvcGVyYXRvci8oY29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIp
CitpbmxpbmUgZmxvYXQgb3BlcmF0b3IvKGNvbnN0IGZsb2F0IGEsIGNvbnN0IExheW91dFVuaXQm
IGIpCiB7CiAgICAgcmV0dXJuIGEgLyBiLnRvRmxvYXQoKTsKIH0KIAotaW5saW5lIGRvdWJsZSBv
cGVyYXRvci8oY29uc3QgZG91YmxlIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQor
aW5saW5lIGRvdWJsZSBvcGVyYXRvci8oY29uc3QgZG91YmxlIGEsIGNvbnN0IExheW91dFVuaXQm
IGIpCiB7CiAgICAgcmV0dXJuIGEgLyBiLnRvRG91YmxlKCk7CiB9CiAKLWlubGluZSBGcmFjdGlv
bmFsTGF5b3V0VW5pdCBvcGVyYXRvci8oY29uc3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBiKQoraW5saW5lIExheW91dFVuaXQgb3BlcmF0b3IvKGNvbnN0IGludCBhLCBjb25z
dCBMYXlvdXRVbml0JiBiKQogewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSAv
IGI7CisgICAgcmV0dXJuIExheW91dFVuaXQoYSkgLyBiOwogfQogCi1pbmxpbmUgRnJhY3Rpb25h
bExheW91dFVuaXQgb3BlcmF0b3IvKHVuc2lnbmVkIGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgYikKK2lubGluZSBMYXlvdXRVbml0IG9wZXJhdG9yLyh1bnNpZ25lZCBhLCBjb25z
dCBMYXlvdXRVbml0JiBiKQogewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSAv
IGI7CisgICAgcmV0dXJuIExheW91dFVuaXQoYSkgLyBiOwogfQogCi1pbmxpbmUgRnJhY3Rpb25h
bExheW91dFVuaXQgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25z
dCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBMYXlvdXRVbml0IG9wZXJhdG9yKyhj
b25zdCBMYXlvdXRVbml0JiBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewotICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IHJldHVyblZhbDsKKyAgICBMYXlvdXRVbml0IHJldHVyblZhbDsKICNpZiBF
TkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQogICAgIHJldHVyblZhbC5zZXRSYXdW
YWx1ZShzYXR1cmF0ZWRBZGRpdGlvbihhLnJhd1ZhbHVlKCksIGIucmF3VmFsdWUoKSkpOwogI2Vs
c2UKQEAgLTYxMSwzOSArNjExLDM5IEBAIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVy
YXRvcisoY28KICAgICByZXR1cm4gcmV0dXJuVmFsOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExh
eW91dFVuaXQgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikK
K2lubGluZSBMYXlvdXRVbml0IG9wZXJhdG9yKyhjb25zdCBMYXlvdXRVbml0JiBhLCBpbnQgYikK
IHsKLSAgICByZXR1cm4gYSArIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworICAgIHJldHVybiBh
ICsgTGF5b3V0VW5pdChiKTsKIH0KIAotaW5saW5lIGZsb2F0IG9wZXJhdG9yKyhjb25zdCBGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK2lubGluZSBmbG9hdCBvcGVyYXRvcisoY29u
c3QgTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKIHsKICAgICByZXR1cm4gYS50b0Zsb2F0KCkgKyBi
OwogfQogCi1pbmxpbmUgZG91YmxlIG9wZXJhdG9yKyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYSwgZG91YmxlIGIpCitpbmxpbmUgZG91YmxlIG9wZXJhdG9yKyhjb25zdCBMYXlvdXRVbml0
JiBhLCBkb3VibGUgYikKIHsKICAgICByZXR1cm4gYS50b0RvdWJsZSgpICsgYjsKIH0KIAotaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKyhjb25zdCBpbnQgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvcisoY29uc3Qg
aW50IGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlv
dXRVbml0KGEpICsgYjsKKyAgICByZXR1cm4gTGF5b3V0VW5pdChhKSArIGI7CiB9CiAKLWlubGlu
ZSBmbG9hdCBvcGVyYXRvcisoY29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVu
aXQmIGIpCitpbmxpbmUgZmxvYXQgb3BlcmF0b3IrKGNvbnN0IGZsb2F0IGEsIGNvbnN0IExheW91
dFVuaXQmIGIpCiB7CiAgICAgcmV0dXJuIGEgKyBiLnRvRmxvYXQoKTsKIH0KIAotaW5saW5lIGRv
dWJsZSBvcGVyYXRvcisoY29uc3QgZG91YmxlIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBiKQoraW5saW5lIGRvdWJsZSBvcGVyYXRvcisoY29uc3QgZG91YmxlIGEsIGNvbnN0IExheW91
dFVuaXQmIGIpCiB7CiAgICAgcmV0dXJuIGEgKyBiLnRvRG91YmxlKCk7CiB9CiAKLWlubGluZSBG
cmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIExheW91dFVuaXQgb3Bl
cmF0b3ItKGNvbnN0IExheW91dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7Ci0gICAg
RnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOworICAgIExheW91dFVuaXQgcmV0dXJuVmFs
OwogI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCiAgICAgcmV0dXJuVmFs
LnNldFJhd1ZhbHVlKHNhdHVyYXRlZFN1YnRyYWN0aW9uKGEucmF3VmFsdWUoKSwgYi5yYXdWYWx1
ZSgpKSk7CiAjZWxzZQpAQCAtNjUyLDQ0ICs2NTIsNDQgQEAgaW5saW5lIEZyYWN0aW9uYWxMYXlv
dXRVbml0IG9wZXJhdG9yLShjbwogICAgIHJldHVybiByZXR1cm5WYWw7CiB9CiAKLWlubGluZSBG
cmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGEsIGludCBiKQoraW5saW5lIExheW91dFVuaXQgb3BlcmF0b3ItKGNvbnN0IExheW91dFVuaXQm
IGEsIGludCBiKQogewotICAgIHJldHVybiBhIC0gRnJhY3Rpb25hbExheW91dFVuaXQoYik7Cisg
ICAgcmV0dXJuIGEgLSBMYXlvdXRVbml0KGIpOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91
dFVuaXQgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCB1bnNpZ25lZCBi
KQoraW5saW5lIExheW91dFVuaXQgb3BlcmF0b3ItKGNvbnN0IExheW91dFVuaXQmIGEsIHVuc2ln
bmVkIGIpCiB7Ci0gICAgcmV0dXJuIGEgLSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKKyAgICBy
ZXR1cm4gYSAtIExheW91dFVuaXQoYik7CiB9CiAKLWlubGluZSBmbG9hdCBvcGVyYXRvci0oY29u
c3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCitpbmxpbmUgZmxvYXQgb3BlcmF0
b3ItKGNvbnN0IExheW91dFVuaXQmIGEsIGZsb2F0IGIpCiB7CiAgICAgcmV0dXJuIGEudG9GbG9h
dCgpIC0gYjsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLShjb25z
dCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgTGF5b3V0VW5p
dCBvcGVyYXRvci0oY29uc3QgaW50IGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7Ci0gICAgcmV0
dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpIC0gYjsKKyAgICByZXR1cm4gTGF5b3V0VW5pdChh
KSAtIGI7CiB9CiAKLWlubGluZSBmbG9hdCBvcGVyYXRvci0oY29uc3QgZmxvYXQgYSwgY29uc3Qg
RnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgZmxvYXQgb3BlcmF0b3ItKGNvbnN0IGZs
b2F0IGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAgICAgcmV0dXJuIGEgLSBiLnRvRmxvYXQo
KTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLShjb25zdCBGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgYSkKK2lubGluZSBMYXlvdXRVbml0IG9wZXJhdG9yLShjb25zdCBM
YXlvdXRVbml0JiBhKQogewotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJldHVyblZhbDsKKyAg
ICBMYXlvdXRVbml0IHJldHVyblZhbDsKICAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUoLWEucmF3
VmFsdWUoKSk7CiAgICAgcmV0dXJuIHJldHVyblZhbDsKIH0KIAogLy8gRm9yIHJldHVybmluZyB0
aGUgcmVtYWluZGVyIGFmdGVyIGEgZGl2aXNpb24gd2l0aCBpbnRlZ2VyIHJlc3VsdHMuCi1pbmxp
bmUgRnJhY3Rpb25hbExheW91dFVuaXQgaW50TW9kKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBMYXlvdXRVbml0IGlu
dE1vZChjb25zdCBMYXlvdXRVbml0JiBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewogI2lmIEVO
QUJMRShTVUJQSVhFTF9MQVlPVVQpCiAgICAgLy8gVGhpcyBjYWxjdWxhdGVzIHRoZSBtb2R1bG8g
c28gdGhhdDogYSA9IHN0YXRpY19jYXN0PGludD4oYSAvIGIpICogYiArIGludE1vZChhLCBiKS4K
LSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7CisgICAgTGF5b3V0VW5pdCByZXR1
cm5WYWw7CiAgICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKGEucmF3VmFsdWUoKSAlIGIucmF3VmFs
dWUoKSk7CiAgICAgcmV0dXJuIHJldHVyblZhbDsKICNlbHNlCkBAIC02OTcsMTEgKzY5NywxMSBA
QCBpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgaW50TW9kKGNvbnN0CiAjZW5kaWYKIH0KIAot
aW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yJShjb25zdCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgTGF5b3V0
VW5pdCBvcGVyYXRvciUoY29uc3QgTGF5b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikK
IHsKICNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQogICAgIC8vIFRoaXMgY2FsY3VsYXRlcyB0
aGUgbW9kdWxvIHNvIHRoYXQ6IGEgPSAoYSAvIGIpICogYiArIGEgJSBiLgotICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IHJldHVyblZhbDsKKyAgICBMYXlvdXRVbml0IHJldHVyblZhbDsKICAgICBs
b25nIGxvbmcgcmF3VmFsID0gKHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oa0ZpeGVkUG9pbnREZW5v
bWluYXRvcikgKiBhLnJhd1ZhbHVlKCkpICUgYi5yYXdWYWx1ZSgpOwogICAgIHJldHVyblZhbC5z
ZXRSYXdWYWx1ZShyYXdWYWwgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yKTsKICAgICByZXR1cm4g
cmV0dXJuVmFsOwpAQCAtNzEwLDE3ICs3MTAsMTcgQEAgaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRV
bml0IG9wZXJhdG9yJShjbwogI2VuZGlmCiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBvcGVyYXRvciUoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQoraW5saW5l
IExheW91dFVuaXQgb3BlcmF0b3IlKGNvbnN0IExheW91dFVuaXQmIGEsIGludCBiKQogewotICAg
IHJldHVybiBhICUgRnJhY3Rpb25hbExheW91dFVuaXQoYik7CisgICAgcmV0dXJuIGEgJSBMYXlv
dXRVbml0KGIpOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IlKGlu
dCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBMYXlvdXRVbml0IG9w
ZXJhdG9yJShpbnQgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKLSAgICByZXR1cm4gRnJhY3Rp
b25hbExheW91dFVuaXQoYSkgJSBiOworICAgIHJldHVybiBMYXlvdXRVbml0KGEpICUgYjsKIH0K
IAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvcis9KEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBMYXlvdXRV
bml0JiBvcGVyYXRvcis9KExheW91dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAj
aWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKICAgICBhLnNldFJhd1ZhbHVl
KHNhdHVyYXRlZEFkZGl0aW9uKGEucmF3VmFsdWUoKSwgYi5yYXdWYWx1ZSgpKSk7CkBAIC03MzAs
MzEgKzczMCwzMSBAQCBpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yKz0oCiAg
ICAgcmV0dXJuIGE7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3Ir
PShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCitpbmxpbmUgTGF5b3V0VW5pdCYgb3Bl
cmF0b3IrPShMYXlvdXRVbml0JiBhLCBpbnQgYikKIHsKICAgICBhID0gYSArIGI7CiAgICAgcmV0
dXJuIGE7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3IrPShGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK2lubGluZSBMYXlvdXRVbml0JiBvcGVyYXRv
cis9KExheW91dFVuaXQmIGEsIGZsb2F0IGIpCiB7CiAgICAgYSA9IGEgKyBiOwogICAgIHJldHVy
biBhOwogfQogCi1pbmxpbmUgZmxvYXQmIG9wZXJhdG9yKz0oZmxvYXQmIGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIGZsb2F0JiBvcGVyYXRvcis9KGZsb2F0JiBhLCBj
b25zdCBMYXlvdXRVbml0JiBiKQogewogICAgIGEgPSBhICsgYjsKICAgICByZXR1cm4gYTsKIH0K
IAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvci09KEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBhLCBpbnQgYikKK2lubGluZSBMYXlvdXRVbml0JiBvcGVyYXRvci09KExheW91dFVu
aXQmIGEsIGludCBiKQogewogICAgIGEgPSBhIC0gYjsKICAgICByZXR1cm4gYTsKIH0KIAotaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvci09KEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBMYXlvdXRVbml0JiBv
cGVyYXRvci09KExheW91dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAjaWYgRU5B
QkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKICAgICBhLnNldFJhd1ZhbHVlKHNhdHVy
YXRlZFN1YnRyYWN0aW9uKGEucmF3VmFsdWUoKSwgYi5yYXdWYWx1ZSgpKSk7CkBAIC03NjQsNjIg
Kzc2NCwxMDUgQEAgaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvci09KAogICAg
IHJldHVybiBhOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yLT0o
RnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCitpbmxpbmUgTGF5b3V0VW5pdCYgb3Bl
cmF0b3ItPShMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQogewogICAgIGEgPSBhIC0gYjsKICAgICBy
ZXR1cm4gYTsKIH0KIAotaW5saW5lIGZsb2F0JiBvcGVyYXRvci09KGZsb2F0JiBhLCBjb25zdCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBmbG9hdCYgb3BlcmF0b3ItPShmbG9hdCYg
YSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICBhID0gYSAtIGI7CiAgICAgcmV0dXJuIGE7
CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3IqPShGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgTGF5
b3V0VW5pdCYgb3BlcmF0b3IqPShMYXlvdXRVbml0JiBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQog
ewogICAgIGEgPSBhICogYjsKICAgICByZXR1cm4gYTsKIH0KLS8vIG9wZXJhdG9yKj0oRnJhY3Rp
b25hbExheW91dFVuaXQmIGEsIGludCBiKSBpcyBzdXBwb3J0ZWQgYnkgdGhlIG9wZXJhdG9yIGFi
b3ZlIHBsdXMgRnJhY3Rpb25hbExheW91dFVuaXQoaW50KS4KKy8vIG9wZXJhdG9yKj0oTGF5b3V0
VW5pdCYgYSwgaW50IGIpIGlzIHN1cHBvcnRlZCBieSB0aGUgb3BlcmF0b3IgYWJvdmUgcGx1cyBM
YXlvdXRVbml0KGludCkuCiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3Iq
PShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK2lubGluZSBMYXlvdXRVbml0JiBv
cGVyYXRvcio9KExheW91dFVuaXQmIGEsIGZsb2F0IGIpCiB7CiAgICAgYSA9IGEgKiBiOwogICAg
IHJldHVybiBhOwogfQogCi1pbmxpbmUgZmxvYXQmIG9wZXJhdG9yKj0oZmxvYXQmIGEsIGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIGZsb2F0JiBvcGVyYXRvcio9KGZsb2F0
JiBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewogICAgIGEgPSBhICogYjsKICAgICByZXR1cm4g
YTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvci89KEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBM
YXlvdXRVbml0JiBvcGVyYXRvci89KExheW91dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIp
CiB7CiAgICAgYSA9IGEgLyBiOwogICAgIHJldHVybiBhOwogfQotLy8gb3BlcmF0b3IvPShGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpIGlzIHN1cHBvcnRlZCBieSB0aGUgb3BlcmF0b3Ig
YWJvdmUgcGx1cyBGcmFjdGlvbmFsTGF5b3V0VW5pdChpbnQpLgorLy8gb3BlcmF0b3IvPShMYXlv
dXRVbml0JiBhLCBpbnQgYikgaXMgc3VwcG9ydGVkIGJ5IHRoZSBvcGVyYXRvciBhYm92ZSBwbHVz
IExheW91dFVuaXQoaW50KS4KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRv
ci89KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQoraW5saW5lIExheW91dFVuaXQm
IG9wZXJhdG9yLz0oTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKIHsKICAgICBhID0gYSAvIGI7CiAg
ICAgcmV0dXJuIGE7CiB9CiAKLWlubGluZSBmbG9hdCYgb3BlcmF0b3IvPShmbG9hdCYgYSwgY29u
c3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgZmxvYXQmIG9wZXJhdG9yLz0oZmxv
YXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAgICAgYSA9IGEgLyBiOwogICAgIHJldHVy
biBhOwogfQogCi1pbmxpbmUgaW50IHNuYXBTaXplVG9QaXhlbChGcmFjdGlvbmFsTGF5b3V0VW5p
dCBzaXplLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBsb2NhdGlvbikgCitpbmxpbmUgaW50IHNuYXBT
aXplVG9QaXhlbChMYXlvdXRVbml0IHNpemUsIExheW91dFVuaXQgbG9jYXRpb24pIAogewotICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0IGZyYWN0aW9uID0gbG9jYXRpb24uZnJhY3Rpb24oKTsKKyAg
ICBMYXlvdXRVbml0IGZyYWN0aW9uID0gbG9jYXRpb24uZnJhY3Rpb24oKTsKICAgICByZXR1cm4g
KGZyYWN0aW9uICsgc2l6ZSkucm91bmQoKSAtIGZyYWN0aW9uLnJvdW5kKCk7CiB9CiAKK2lubGlu
ZSBpbnQgcm91bmRUb0ludChMYXlvdXRVbml0IHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZS5y
b3VuZCgpOworfQorCitpbmxpbmUgaW50IGZsb29yVG9JbnQoTGF5b3V0VW5pdCB2YWx1ZSkKK3sK
KyAgICByZXR1cm4gdmFsdWUuZmxvb3IoKTsKK30KKworaW5saW5lIExheW91dFVuaXQgcm91bmRl
ZExheW91dFVuaXQoZmxvYXQgdmFsdWUpCit7CisjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkK
KyAgICByZXR1cm4gTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Um91bmQodmFsdWUpOworI2Vsc2UKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKHZhbHVlKSk7CisjZW5kaWYKK30KKwor
aW5saW5lIExheW91dFVuaXQgY2VpbGVkTGF5b3V0VW5pdChmbG9hdCB2YWx1ZSkKK3sKKyNpZiBF
TkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIHJldHVybiBMYXlvdXRVbml0Ojpmcm9tRmxvYXRD
ZWlsKHZhbHVlKTsKKyNlbHNlCisgICAgcmV0dXJuIGNlaWxmKHZhbHVlKTsKKyNlbmRpZgorfQor
CitpbmxpbmUgTGF5b3V0VW5pdCBhYnNvbHV0ZVZhbHVlKGNvbnN0IExheW91dFVuaXQmIHZhbHVl
KQoreworICAgIHJldHVybiB2YWx1ZS5hYnMoKTsKK30KKworaW5saW5lIExheW91dFVuaXQgbGF5
b3V0TW9kKGNvbnN0IExheW91dFVuaXQmIG51bWVyYXRvciwgY29uc3QgTGF5b3V0VW5pdCYgZGVu
b21pbmF0b3IpCit7CisgICAgcmV0dXJuIG51bWVyYXRvciAlIGRlbm9taW5hdG9yOworfQorCitp
bmxpbmUgYm9vbCBpc0ludGVnZXJWYWx1ZShjb25zdCBMYXlvdXRVbml0IHZhbHVlKQoreworICAg
IHJldHVybiB2YWx1ZS50b0ludCgpID09IHZhbHVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKLSNlbmRpZiAvLyBGcmFjdGlvbmFsTGF5b3V0VW5pdF9oCisjZW5kaWYgLy8gTGF5b3V0
VW5pdF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguaAkocmV2aXNpb24gMTMzNjY0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0
LDcgKzY0LDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQodCAhPSBDYWxjdWxhdGVkKTsKICAg
ICB9CiAgICAgCi0gICAgTGVuZ3RoKEZyYWN0aW9uYWxMYXlvdXRVbml0IHYsIExlbmd0aFR5cGUg
dCwgYm9vbCBxID0gZmFsc2UpCisgICAgTGVuZ3RoKExheW91dFVuaXQgdiwgTGVuZ3RoVHlwZSB0
LCBib29sIHEgPSBmYWxzZSkKICAgICAgICAgOiBtX2Zsb2F0VmFsdWUodi50b0Zsb2F0KCkpLCBt
X3F1aXJrKHEpLCBtX3R5cGUodCksIG1faXNGbG9hdCh0cnVlKQogICAgIHsKICAgICAgICAgQVNT
RVJUKHQgIT0gQ2FsY3VsYXRlZCk7CkBAIC0xNzIsNyArMTcyLDcgQEAgcHVibGljOgogICAgICAg
ICBtX2lzRmxvYXQgPSB0cnVlOyAgICAKICAgICB9CiAKLSAgICB2b2lkIHNldFZhbHVlKExlbmd0
aFR5cGUgdCwgRnJhY3Rpb25hbExheW91dFVuaXQgdmFsdWUpCisgICAgdm9pZCBzZXRWYWx1ZShM
ZW5ndGhUeXBlIHQsIExheW91dFVuaXQgdmFsdWUpCiAgICAgewogICAgICAgICBtX3R5cGUgPSB0
OwogICAgICAgICBtX2Zsb2F0VmFsdWUgPSB2YWx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1BvcHVwTWVudUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1BvcHVwTWVudUNsaWVudC5oCShyZXZpc2lvbiAxMzM2NjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyAr
MjIsNyBAQAogI2lmbmRlZiBQb3B1cE1lbnVDbGllbnRfaAogI2RlZmluZSBQb3B1cE1lbnVDbGll
bnRfaAogCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRVbml0Lmgi
CiAjaW5jbHVkZSAiUG9wdXBNZW51U3R5bGUuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
bmltYXRpb24vQW5pbWF0aW9uVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvblV0aWxpdGllcy5oCShyZXZpc2lvbiAxMzM2
NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uVXRpbGl0
aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDggQEAKICNpZm5kZWYgQW5pbWF0aW9u
VXRpbGl0aWVzX2gKICNkZWZpbmUgQW5pbWF0aW9uVXRpbGl0aWVzX2gKIAotI2luY2x1ZGUgIkZy
YWN0aW9uYWxMYXlvdXRVbml0LmgiCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJM
YXlvdXRVbml0LmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNTIsNyArNTIsNyBAQCBpbmxpbmUgZmxvYXQgYmxlbmQoZmxvYXQgZnJvbSwg
ZmxvYXQgdG8sCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pihmcm9tICsgKHRvIC0gZnJv
bSkgKiBwcm9ncmVzcyk7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBibGVuZChG
cmFjdGlvbmFsTGF5b3V0VW5pdCBmcm9tLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCB0bywgZG91Ymxl
IHByb2dyZXNzKQoraW5saW5lIExheW91dFVuaXQgYmxlbmQoTGF5b3V0VW5pdCBmcm9tLCBMYXlv
dXRVbml0IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCiB7ICAKICAgICByZXR1cm4gZnJvbSArICh0byAt
IGZyb20pICogcHJvZ3Jlc3M7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcAkocmV2aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDEwICsyOCwxMCBAQAogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKIAogI2luY2x1ZGUgIkFm
ZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRQb2ludC5oIgogI2lu
Y2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRTaXpl
LmgiCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJMYXlvdXRQb2ludC5oIgorI2lu
Y2x1ZGUgIkxheW91dFNpemUuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgog
I2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDxtYXRoLmg+CkBAIC00Miw3ICs0Miw3IEBAIEZs
b2F0UG9pbnQ6OkZsb2F0UG9pbnQoY29uc3QgSW50UG9pbnQmIHAKIHsKIH0KIAotRmxvYXRQb2lu
dDo6RmxvYXRQb2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHApIDogbV94KHAueCgp
KSwgbV95KHAueSgpKQorRmxvYXRQb2ludDo6RmxvYXRQb2ludChjb25zdCBMYXlvdXRQb2ludCYg
cCkgOiBtX3gocC54KCkpLCBtX3kocC55KCkpCiB7CiB9CiAKQEAgLTYxLDEzICs2MSwxMyBAQCBm
bG9hdCBGbG9hdFBvaW50OjpsZW5ndGgoKSBjb25zdAogICAgIHJldHVybiBzcXJ0ZihsZW5ndGhT
cXVhcmVkKCkpOwogfQogCi12b2lkIEZsb2F0UG9pbnQ6Om1vdmUoY29uc3QgRnJhY3Rpb25hbExh
eW91dFNpemUmIHNpemUpCit2b2lkIEZsb2F0UG9pbnQ6Om1vdmUoY29uc3QgTGF5b3V0U2l6ZSYg
c2l6ZSkKIHsKICAgICBtX3ggKz0gc2l6ZS53aWR0aCgpOwogICAgIG1feSArPSBzaXplLmhlaWdo
dCgpOwogfQogCi12b2lkIEZsb2F0UG9pbnQ6Om1vdmVCeShjb25zdCBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQmIHBvaW50KQordm9pZCBGbG9hdFBvaW50Ojptb3ZlQnkoY29uc3QgTGF5b3V0UG9pbnQm
IHBvaW50KQogewogICAgIG1feCArPSBwb2ludC54KCk7CiAgICAgbV95ICs9IHBvaW50LnkoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgJ
KHJldmlzaW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTUgKzY4LDE1IEBAIGNsYXNzIEFmZmlu
ZVRyYW5zZm9ybTsKIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OwogY2xhc3MgSW50UG9pbnQ7
CiBjbGFzcyBJbnRTaXplOwotY2xhc3MgRnJhY3Rpb25hbExheW91dFBvaW50OwotY2xhc3MgRnJh
Y3Rpb25hbExheW91dFNpemU7CitjbGFzcyBMYXlvdXRQb2ludDsKK2NsYXNzIExheW91dFNpemU7
CiAKIGNsYXNzIEZsb2F0UG9pbnQgewogcHVibGljOgogICAgIEZsb2F0UG9pbnQoKSA6IG1feCgw
KSwgbV95KDApIHsgfQogICAgIEZsb2F0UG9pbnQoZmxvYXQgeCwgZmxvYXQgeSkgOiBtX3goeCks
IG1feSh5KSB7IH0KICAgICBGbG9hdFBvaW50KGNvbnN0IEludFBvaW50Jik7Ci0gICAgRmxvYXRQ
b2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmKTsKKyAgICBGbG9hdFBvaW50KGNvbnN0
IExheW91dFBvaW50Jik7CiAgICAgZXhwbGljaXQgRmxvYXRQb2ludChjb25zdCBGbG9hdFNpemUm
IHNpemUpIDogbV94KHNpemUud2lkdGgoKSksIG1feShzaXplLmhlaWdodCgpKSB7IH0KIAogICAg
IHN0YXRpYyBGbG9hdFBvaW50IHplcm8oKSB7IHJldHVybiBGbG9hdFBvaW50KCk7IH0KQEAgLTEw
Myw3ICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1feCArPSBhLndpZHRoKCk7CiAgICAgICAg
IG1feSArPSBhLmhlaWdodCgpOwogICAgIH0KLSAgICB2b2lkIG1vdmUoY29uc3QgRnJhY3Rpb25h
bExheW91dFNpemUmKTsKKyAgICB2b2lkIG1vdmUoY29uc3QgTGF5b3V0U2l6ZSYpOwogICAgIHZv
aWQgbW92ZShjb25zdCBGbG9hdFNpemUmIGEpCiAgICAgewogICAgICAgICBtX3ggKz0gYS53aWR0
aCgpOwpAQCAtMTE0LDcgKzExNCw3IEBAIHB1YmxpYzoKICAgICAgICAgbV94ICs9IGEueCgpOwog
ICAgICAgICBtX3kgKz0gYS55KCk7CiAgICAgfQotICAgIHZvaWQgbW92ZUJ5KGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRQb2ludCYpOworICAgIHZvaWQgbW92ZUJ5KGNvbnN0IExheW91dFBvaW50Jik7
CiAgICAgdm9pZCBtb3ZlQnkoY29uc3QgRmxvYXRQb2ludCYgYSkKICAgICB7CiAgICAgICAgIG1f
eCArPSBhLngoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRSZWN0LmNwcAkocmV2aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBA
QAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgi
Ci0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFJlY3QuaCIKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRl
IDxtYXRoLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTQzLDcgKzQzLDcgQEAg
RmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3QgSW50UmVjdCYgcikgOgogewogfQogCi1GbG9hdFJl
Y3Q6OkZsb2F0UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgcikgOiBtX2xvY2F0aW9u
KHIubG9jYXRpb24oKSksIG1fc2l6ZShyLnNpemUoKSkKK0Zsb2F0UmVjdDo6RmxvYXRSZWN0KGNv
bnN0IExheW91dFJlY3QmIHIpIDogbV9sb2NhdGlvbihyLmxvY2F0aW9uKCkpLCBtX3NpemUoci5z
aXplKCkpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UmVjdC5oCShyZXZpc2lvbiAxMzM2NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFJlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBWR1JlY3Q7CiAjZW5kaWYKIAotY2xhc3MgRnJhY3Rp
b25hbExheW91dFJlY3Q7CitjbGFzcyBMYXlvdXRSZWN0OwogY2xhc3MgSW50UmVjdDsKIGNsYXNz
IEludFBvaW50OwogCkBAIC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICBGbG9hdFJlY3QoZmxv
YXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKICAgICAgICAgOiBtX2xv
Y2F0aW9uKEZsb2F0UG9pbnQoeCwgeSkpLCBtX3NpemUoRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQp
KSB7IH0KICAgICBGbG9hdFJlY3QoY29uc3QgSW50UmVjdCYpOwotICAgIEZsb2F0UmVjdChjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpOworICAgIEZsb2F0UmVjdChjb25zdCBMYXlvdXRSZWN0
Jik7CiAKICAgICBzdGF0aWMgRmxvYXRSZWN0IG5hcnJvd1ByZWNpc2lvbihkb3VibGUgeCwgZG91
YmxlIHksIGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNwcAkocmV2aXNpb24gMTMzNjY0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjcsOSArMjcsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkZsb2F0U2l6ZS5oIgogCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFNpemUuaCIKICNp
bmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVk
ZSAiTGF5b3V0U2l6ZS5oIgogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDxtYXRoLmg+CiAK
QEAgLTQxLDcgKzQxLDcgQEAgRmxvYXRTaXplOjpGbG9hdFNpemUoY29uc3QgSW50U2l6ZSYgc2l6
ZQogewogfQogCi1GbG9hdFNpemU6OkZsb2F0U2l6ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6
ZSYgc2l6ZSkgOiBtX3dpZHRoKHNpemUud2lkdGgoKSksIG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkp
CitGbG9hdFNpemU6OkZsb2F0U2l6ZShjb25zdCBMYXlvdXRTaXplJiBzaXplKSA6IG1fd2lkdGgo
c2l6ZS53aWR0aCgpKSwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkKIHsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgJKHJldmlzaW9uIDEz
MzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC02MCwxNCArNjAsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgX05TU2l6ZSBO
U1NpemU7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEludFNpemU7Ci1jbGFzcyBGcmFj
dGlvbmFsTGF5b3V0U2l6ZTsKK2NsYXNzIExheW91dFNpemU7CiAKIGNsYXNzIEZsb2F0U2l6ZSB7
CiBwdWJsaWM6CiAgICAgRmxvYXRTaXplKCkgOiBtX3dpZHRoKDApLCBtX2hlaWdodCgwKSB7IH0K
ICAgICBGbG9hdFNpemUoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkgOiBtX3dpZHRoKHdpZHRo
KSwgbV9oZWlnaHQoaGVpZ2h0KSB7IH0KICAgICBGbG9hdFNpemUoY29uc3QgSW50U2l6ZSYpOwot
ICAgIEZsb2F0U2l6ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYpOworICAgIEZsb2F0U2l6
ZShjb25zdCBMYXlvdXRTaXplJik7CiAKICAgICBzdGF0aWMgRmxvYXRTaXplIG5hcnJvd1ByZWNp
c2lvbihkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0
Qm94RXh0ZW50LmNwcAkocmV2aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZyYWN0aW9u
YWxMYXlvdXRCb3hFeHRlbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1GcmFjdGlvbmFs
TGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Ojpsb2dpY2FsVG9wKFdyaXRpbmdN
b2RlIHdyaXRpbmdNb2RlKSBjb25zdAotewotICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5n
TW9kZSh3cml0aW5nTW9kZSkgPyBtX3RvcCA6IG1fbGVmdDsKLX0KLQotRnJhY3Rpb25hbExheW91
dFVuaXQgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6bG9naWNhbEJvdHRvbShXcml0aW5nTW9k
ZSB3cml0aW5nTW9kZSkgY29uc3QKLXsKLSAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUod3JpdGluZ01vZGUpID8gbV9ib3R0b20gOiBtX3JpZ2h0OwotfQotCi1GcmFjdGlvbmFsTGF5
b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Ojpsb2dpY2FsTGVmdChXcml0aW5nTW9k
ZSB3cml0aW5nTW9kZSkgY29uc3QKLXsKLSAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUod3JpdGluZ01vZGUpID8gbV9sZWZ0IDogbV90b3A7Ci19Ci0KLUZyYWN0aW9uYWxMYXlvdXRV
bml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmxvZ2ljYWxSaWdodChXcml0aW5nTW9kZSB3
cml0aW5nTW9kZSkgY29uc3QKLXsKLSAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
d3JpdGluZ01vZGUpID8gbV9yaWdodCA6IG1fYm90dG9tOwotfQotCi1GcmFjdGlvbmFsTGF5b3V0
VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpiZWZvcmUoV3JpdGluZ01vZGUgd3JpdGlu
Z01vZGUpIGNvbnN0Ci17Ci0gICAgc3dpdGNoICh3cml0aW5nTW9kZSkgewotICAgIGNhc2UgVG9w
VG9Cb3R0b21Xcml0aW5nTW9kZToKLSAgICAgICAgcmV0dXJuIG1fdG9wOwotICAgIGNhc2UgQm90
dG9tVG9Ub3BXcml0aW5nTW9kZToKLSAgICAgICAgcmV0dXJuIG1fYm90dG9tOwotICAgIGNhc2Ug
TGVmdFRvUmlnaHRXcml0aW5nTW9kZToKLSAgICAgICAgcmV0dXJuIG1fbGVmdDsKLSAgICBjYXNl
IFJpZ2h0VG9MZWZ0V3JpdGluZ01vZGU6Ci0gICAgICAgIHJldHVybiBtX3JpZ2h0OwotICAgIH0K
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbV90b3A7Ci19Ci0KLUZyYWN0
aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmFmdGVyKFdyaXRpbmdN
b2RlIHdyaXRpbmdNb2RlKSBjb25zdAotewotICAgIHN3aXRjaCAod3JpdGluZ01vZGUpIHsKLSAg
ICBjYXNlIFRvcFRvQm90dG9tV3JpdGluZ01vZGU6Ci0gICAgICAgIHJldHVybiBtX2JvdHRvbTsK
LSAgICBjYXNlIEJvdHRvbVRvVG9wV3JpdGluZ01vZGU6Ci0gICAgICAgIHJldHVybiBtX3RvcDsK
LSAgICBjYXNlIExlZnRUb1JpZ2h0V3JpdGluZ01vZGU6Ci0gICAgICAgIHJldHVybiBtX3JpZ2h0
OwotICAgIGNhc2UgUmlnaHRUb0xlZnRXcml0aW5nTW9kZToKLSAgICAgICAgcmV0dXJuIG1fbGVm
dDsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG1fYm90dG9t
OwotfQotCi1GcmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Ojpz
dGFydChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pIGNv
bnN0Ci17Ci0gICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkKLSAg
ICAgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSA/IG1fbGVmdCA6
IG1fcmlnaHQ7Ci0gICAgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSA/
IG1fdG9wIDogbV9ib3R0b207Ci19Ci0KLUZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxM
YXlvdXRCb3hFeHRlbnQ6OmVuZChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlv
biBkaXJlY3Rpb24pIGNvbnN0Ci17Ci0gICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdy
aXRpbmdNb2RlKSkKLSAgICAgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0
aW9uKSA/IG1fcmlnaHQgOiBtX2xlZnQ7Ci0gICAgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oZGlyZWN0aW9uKSA/IG1fYm90dG9tIDogbV90b3A7Ci19Ci0KLXZvaWQgRnJhY3Rpb25hbExh
eW91dEJveEV4dGVudDo6c2V0QmVmb3JlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCB2YWx1ZSkKLXsKLSAgICBzd2l0Y2ggKHdyaXRpbmdNb2RlKSB7Ci0gICAg
Y2FzZSBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlOgotICAgICAgICBtX3RvcCA9IHZhbHVlOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEJvdHRvbVRvVG9wV3JpdGluZ01vZGU6Ci0gICAgICAgIG1f
Ym90dG9tID0gdmFsdWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGVmdFRvUmlnaHRXcml0
aW5nTW9kZToKLSAgICAgICAgbV9sZWZ0ID0gdmFsdWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgUmlnaHRUb0xlZnRXcml0aW5nTW9kZToKLSAgICAgICAgbV9yaWdodCA9IHZhbHVlOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgbV90b3AgPSB2YWx1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgRnJhY3Rpb25hbExheW91
dEJveEV4dGVudDo6c2V0QWZ0ZXIoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIEZyYWN0aW9uYWxM
YXlvdXRVbml0IHZhbHVlKQotewotICAgIHN3aXRjaCAod3JpdGluZ01vZGUpIHsKLSAgICBjYXNl
IFRvcFRvQm90dG9tV3JpdGluZ01vZGU6Ci0gICAgICAgIG1fYm90dG9tID0gdmFsdWU7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQm90dG9tVG9Ub3BXcml0aW5nTW9kZToKLSAgICAgICAgbV90
b3AgPSB2YWx1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMZWZ0VG9SaWdodFdyaXRpbmdN
b2RlOgotICAgICAgICBtX3JpZ2h0ID0gdmFsdWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
UmlnaHRUb0xlZnRXcml0aW5nTW9kZToKLSAgICAgICAgbV9sZWZ0ID0gdmFsdWU7Ci0gICAgICAg
IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICBtX2JvdHRvbSA9IHZhbHVlOwotICAgIH0KLX0KLQotdm9pZCBGcmFjdGlvbmFsTGF5b3V0
Qm94RXh0ZW50OjpzZXRTdGFydChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlv
biBkaXJlY3Rpb24sIEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKQotewotICAgIGlmIChpc0hv
cml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpIHsKLSAgICAgICAgaWYgKGlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSkKLSAgICAgICAgICAgIG1fbGVmdCA9IHZhbHVlOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3JpZ2h0ID0gdmFsdWU7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSkKLSAgICAgICAg
ICAgIG1fdG9wID0gdmFsdWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fYm90dG9tID0g
dmFsdWU7Ci0gICAgfQotfQotCi12b2lkIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OnNldEVu
ZChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIEZyYWN0
aW9uYWxMYXlvdXRVbml0IHZhbHVlKQotewotICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9k
ZSh3cml0aW5nTW9kZSkpIHsKLSAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGly
ZWN0aW9uKSkKLSAgICAgICAgICAgIG1fcmlnaHQgPSB2YWx1ZTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbV9sZWZ0ID0gdmFsdWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSkKLSAgICAgICAgICAgIG1fYm90dG9tID0gdmFs
dWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fdG9wID0gdmFsdWU7Ci0gICAgfQotfQot
Ci1GcmFjdGlvbmFsTGF5b3V0VW5pdCYgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6bXV0YWJs
ZUxvZ2ljYWxMZWZ0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQotewotICAgIHJldHVybiBpc0hv
cml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX2xlZnQgOiBtX3RvcDsKLX0KLQot
RnJhY3Rpb25hbExheW91dFVuaXQmIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6Om11dGFibGVM
b2dpY2FsUmlnaHQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCi17Ci0gICAgcmV0dXJuIGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fcmlnaHQgOiBtX2JvdHRvbTsKLX0K
LQotRnJhY3Rpb25hbExheW91dFVuaXQmIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6Om11dGFi
bGVCZWZvcmUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCi17Ci0gICAgcmV0dXJuIGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IChpc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9k
ZSh3cml0aW5nTW9kZSkgPyBtX2JvdHRvbSA6IG1fdG9wKSA6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9k
ZSh3cml0aW5nTW9kZSkgPyBtX3JpZ2h0OiBtX2xlZnQpOwotfQotCi1GcmFjdGlvbmFsTGF5b3V0
VW5pdCYgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6bXV0YWJsZUFmdGVyKFdyaXRpbmdNb2Rl
IHdyaXRpbmdNb2RlKQotewotICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0
aW5nTW9kZSkgPyAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV90
b3AgOiBtX2JvdHRvbSkgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9s
ZWZ0OiBtX3JpZ2h0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxM
YXlvdXRCb3hFeHRlbnQuaAkocmV2aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50X2gKLSNk
ZWZpbmUgRnJhY3Rpb25hbExheW91dEJveEV4dGVudF9oCi0KLSNpbmNsdWRlICJGcmFjdGlvbmFs
TGF5b3V0VW5pdC5oIgotI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKLSNpbmNsdWRlICJXcml0
aW5nTW9kZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZyYWN0aW9uYWxMYXlv
dXRCb3hFeHRlbnQgewotcHVibGljOgotICAgIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQoKSA6
IG1fdG9wKDApLCBtX3JpZ2h0KDApLCBtX2JvdHRvbSgwKSwgbV9sZWZ0KDApIHsgfQotICAgIEZy
YWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQoRnJhY3Rpb25hbExheW91dFVuaXQgdG9wLCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCByaWdodCwgRnJhY3Rpb25hbExheW91dFVuaXQgYm90dG9tLCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCBsZWZ0KQotICAgICAgICA6IG1fdG9wKHRvcCksIG1fcmlnaHQocmlnaHQp
LCBtX2JvdHRvbShib3R0b20pLCBtX2xlZnQobGVmdCkgeyB9Ci0KLSAgICBpbmxpbmUgRnJhY3Rp
b25hbExheW91dFVuaXQgdG9wKCkgY29uc3QgeyByZXR1cm4gbV90b3A7IH0KLSAgICBpbmxpbmUg
RnJhY3Rpb25hbExheW91dFVuaXQgcmlnaHQoKSBjb25zdCB7IHJldHVybiBtX3JpZ2h0OyB9Ci0g
ICAgaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IGJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1f
Ym90dG9tOyB9Ci0gICAgaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IGxlZnQoKSBjb25zdCB7
IHJldHVybiBtX2xlZnQ7IH0KLQotICAgIGlubGluZSB2b2lkIHNldFRvcChGcmFjdGlvbmFsTGF5
b3V0VW5pdCB2YWx1ZSkgeyBtX3RvcCA9IHZhbHVlOyB9Ci0gICAgaW5saW5lIHZvaWQgc2V0Umln
aHQoRnJhY3Rpb25hbExheW91dFVuaXQgdmFsdWUpIHsgbV9yaWdodCA9IHZhbHVlOyB9Ci0gICAg
aW5saW5lIHZvaWQgc2V0Qm90dG9tKEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKSB7IG1fYm90
dG9tID0gdmFsdWU7IH0KLSAgICBpbmxpbmUgdm9pZCBzZXRMZWZ0KEZyYWN0aW9uYWxMYXlvdXRV
bml0IHZhbHVlKSB7IG1fbGVmdCA9IHZhbHVlOyB9Ci0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBsb2dpY2FsVG9wKFdyaXRpbmdNb2RlKSBjb25zdDsKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBsb2dpY2FsQm90dG9tKFdyaXRpbmdNb2RlKSBjb25zdDsKLSAgICBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBsb2dpY2FsTGVmdChXcml0aW5nTW9kZSkgY29uc3Q7Ci0gICAgRnJhY3Rpb25hbExheW91
dFVuaXQgbG9naWNhbFJpZ2h0KFdyaXRpbmdNb2RlKSBjb25zdDsKLQotICAgIEZyYWN0aW9uYWxM
YXlvdXRVbml0IGJlZm9yZShXcml0aW5nTW9kZSkgY29uc3Q7Ci0gICAgRnJhY3Rpb25hbExheW91
dFVuaXQgYWZ0ZXIoV3JpdGluZ01vZGUpIGNvbnN0OwotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
IHN0YXJ0KFdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uKSBjb25zdDsKLSAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBlbmQoV3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24pIGNvbnN0OwotCi0gICAg
dm9pZCBzZXRCZWZvcmUoV3JpdGluZ01vZGUsIEZyYWN0aW9uYWxMYXlvdXRVbml0KTsKLSAgICB2
b2lkIHNldEFmdGVyKFdyaXRpbmdNb2RlLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCk7Ci0gICAgdm9p
ZCBzZXRTdGFydChXcml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiwgRnJhY3Rpb25hbExheW91dFVu
aXQpOwotICAgIHZvaWQgc2V0RW5kKFdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uLCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCk7Ci0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgbXV0YWJsZUxvZ2lj
YWxMZWZ0KFdyaXRpbmdNb2RlKTsKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgbXV0YWJsZUxv
Z2ljYWxSaWdodChXcml0aW5nTW9kZSk7Ci0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgbXV0
YWJsZUJlZm9yZShXcml0aW5nTW9kZSk7Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQmIG11dGFi
bGVBZnRlcihXcml0aW5nTW9kZSk7Ci0KLXByaXZhdGU6Ci0gICAgRnJhY3Rpb25hbExheW91dFVu
aXQgbV90b3A7Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgbV9yaWdodDsKLSAgICBGcmFjdGlv
bmFsTGF5b3V0VW5pdCBtX2JvdHRvbTsKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtX2xlZnQ7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBGcmFjdGlvbmFsTGF5
b3V0Qm94RXh0ZW50X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zy
YWN0aW9uYWxMYXlvdXRQb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRQb2ludC5oCShyZXZpc2lvbiAxMzM2NjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UG9pbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMSwxOTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykg
MjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEZyYWN0aW9uYWxMYXlv
dXRQb2ludF9oCi0jZGVmaW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludF9oCi0KLSNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFNpemUuaCIKLSNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgotCi0jaWYgUExBVEZPUk0oUVQpCi0jaW5jbHVkZSA8cWdsb2Jh
bC5oPgotUVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBRUG9pbnQ7Ci1jbGFzcyBRUG9pbnRGOwot
UVRfRU5EX05BTUVTUEFDRQotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
RnJhY3Rpb25hbExheW91dFBvaW50IHsKLXB1YmxpYzoKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9p
bnQoKSA6IG1feCgwKSwgbV95KDApIHsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludChGcmFj
dGlvbmFsTGF5b3V0VW5pdCB4LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCB5KSA6IG1feCh4KSwgbV95
KHkpIHsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQp
IDogbV94KHBvaW50LngoKSksIG1feShwb2ludC55KCkpIHsgfQotICAgIGV4cGxpY2l0IEZyYWN0
aW9uYWxMYXlvdXRQb2ludChjb25zdCBGbG9hdFBvaW50JiBzaXplKSA6IG1feChzaXplLngoKSks
IG1feShzaXplLnkoKSkgeyB9Ci0gICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFBvaW50KGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSA6IG1feChzaXplLndpZHRoKCkpLCBtX3ko
c2l6ZS5oZWlnaHQoKSkgeyB9Ci0KLSAgICBzdGF0aWMgRnJhY3Rpb25hbExheW91dFBvaW50IHpl
cm8oKSB7IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoKTsgfQotCi0gICAgRnJhY3Rpb25h
bExheW91dFVuaXQgeCgpIGNvbnN0IHsgcmV0dXJuIG1feDsgfQotICAgIEZyYWN0aW9uYWxMYXlv
dXRVbml0IHkoKSBjb25zdCB7IHJldHVybiBtX3k7IH0KLQotICAgIHZvaWQgc2V0WChGcmFjdGlv
bmFsTGF5b3V0VW5pdCB4KSB7IG1feCA9IHg7IH0KLSAgICB2b2lkIHNldFkoRnJhY3Rpb25hbExh
eW91dFVuaXQgeSkgeyBtX3kgPSB5OyB9Ci0KLSAgICB2b2lkIG1vdmUoY29uc3QgRnJhY3Rpb25h
bExheW91dFNpemUmIHMpIHsgbW92ZShzLndpZHRoKCksIHMuaGVpZ2h0KCkpOyB9IAotICAgIHZv
aWQgbW92ZUJ5KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgb2Zmc2V0KSB7IG1vdmUob2Zm
c2V0LngoKSwgb2Zmc2V0LnkoKSk7IH0KLSAgICB2b2lkIG1vdmUoRnJhY3Rpb25hbExheW91dFVu
aXQgZHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGR5KSB7IG1feCArPSBkeDsgbV95ICs9IGR5OyB9
Ci0gICAgdm9pZCBzY2FsZShmbG9hdCBzeCwgZmxvYXQgc3kpCi0gICAgewotICAgICAgICBtX3gg
Kj0gc3g7Ci0gICAgICAgIG1feSAqPSBzeTsKLSAgICB9Ci0gICAgCi0gICAgRnJhY3Rpb25hbExh
eW91dFBvaW50IGV4cGFuZGVkVG8oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBvdGhlcikg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoc3RkOjpt
YXgobV94LCBvdGhlci5tX3gpLCBzdGQ6Om1heChtX3ksIG90aGVyLm1feSkpOwotICAgIH0KLQot
ICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBzaHJ1bmtUbyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlv
dXRQb2ludChzdGQ6Om1pbihtX3gsIG90aGVyLm1feCksIHN0ZDo6bWluKG1feSwgb3RoZXIubV95
KSk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGFtcE5lZ2F0aXZlVG9aZXJvKCkKLSAgICB7Ci0gICAg
ICAgICp0aGlzID0gZXhwYW5kZWRUbyh6ZXJvKCkpOwotICAgIH0KLQotICAgIEZyYWN0aW9uYWxM
YXlvdXRQb2ludCB0cmFuc3Bvc2VkUG9pbnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IEZyYWN0aW9uYWxMYXlvdXRQb2ludChtX3ksIG1feCk7Ci0gICAgfQotCi0jaWYgUExBVEZPUk0o
UVQpCi0gICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFBvaW50KGNvbnN0IFFQb2ludCYpOwot
ICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRQb2ludChjb25zdCBRUG9pbnRGJik7Ci0gICAg
b3BlcmF0b3IgUVBvaW50RigpIGNvbnN0OwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgRnJhY3Rp
b25hbExheW91dFVuaXQgbV94LCBtX3k7Ci19OwotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFBv
aW50JiBvcGVyYXRvcis9KEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25h
bExheW91dFNpemUmIGIpCi17Ci0gICAgYS5tb3ZlKGIud2lkdGgoKSwgYi5oZWlnaHQoKSk7Ci0g
ICAgcmV0dXJuIGE7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIG9wZXJhdG9y
LT0oRnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYg
YikKLXsKLSAgICBhLm1vdmUoLWIud2lkdGgoKSwgLWIuaGVpZ2h0KCkpOwotICAgIHJldHVybiBh
OwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50IG9wZXJhdG9yKyhjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQotewot
ICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoYS54KCkgKyBiLndpZHRoKCksIGEueSgp
ICsgYi5oZWlnaHQoKSk7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgb3BlcmF0
b3IrKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91
dFBvaW50JiBiKQotewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoYS54KCkgKyBi
LngoKSwgYS55KCkgKyBiLnkoKSk7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSBv
cGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQmIGIpCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKGEueCgp
IC0gYi54KCksIGEueSgpIC0gYi55KCkpOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFBv
aW50IG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRTaXplJiBiKQotewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQo
YS54KCkgLSBiLndpZHRoKCksIGEueSgpIC0gYi5oZWlnaHQoKSk7Ci19Ci0KLWlubGluZSBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYg
cG9pbnQpCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludCgtcG9pbnQueCgpLCAt
cG9pbnQueSgpKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYikKLXsKLSAgICBy
ZXR1cm4gYS54KCkgPT0gYi54KCkgJiYgYS55KCkgPT0gYi55KCk7Ci19Ci0KLWlubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQmIGIpCi17Ci0gICAgcmV0dXJuIGEueCgpICE9IGIueCgpIHx8IGEueSgp
ICE9IGIueSgpOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50IHRvUG9pbnQoY29u
c3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxM
YXlvdXRQb2ludChzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotfQotCi1pbmxpbmUgRnJh
Y3Rpb25hbExheW91dFNpemUgdG9TaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSkK
LXsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUoYS54KCksIGEueSgpKTsKLX0KLQot
aW5saW5lIEludFBvaW50IGZsb29yZWRJbnRQb2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9p
bnQmIHBvaW50KQotewotICAgIHJldHVybiBJbnRQb2ludChwb2ludC54KCkuZmxvb3IoKSwgcG9p
bnQueSgpLmZsb29yKCkpOwotfQotCi1pbmxpbmUgSW50UG9pbnQgcm91bmRlZEludFBvaW50KGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcG9pbnQpCi17Ci0gICAgcmV0dXJuIEludFBvaW50
KHBvaW50LngoKS5yb3VuZCgpLCBwb2ludC55KCkucm91bmQoKSk7Ci19Ci0KLWlubGluZSBJbnRQ
b2ludCByb3VuZGVkSW50UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpCi17
Ci0gICAgcmV0dXJuIEludFBvaW50KHNpemUud2lkdGgoKS5yb3VuZCgpLCBzaXplLmhlaWdodCgp
LnJvdW5kKCkpOwotfQotCi1pbmxpbmUgSW50UG9pbnQgY2VpbGVkSW50UG9pbnQoY29uc3QgRnJh
Y3Rpb25hbExheW91dFBvaW50JiBwb2ludCkKLXsKLSAgICByZXR1cm4gSW50UG9pbnQocG9pbnQu
eCgpLmNlaWwoKSwgcG9pbnQueSgpLmNlaWwoKSk7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQgZmxvb3JlZEZyYWN0aW9uYWxMYXlvdXRQb2ludChjb25zdCBGbG9hdFBvaW50JiBw
KQotewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoRnJhY3Rpb25hbExheW91dFVu
aXQ6OmZyb21GbG9hdEZsb29yKHAueCgpKSwgRnJhY3Rpb25hbExheW91dFVuaXQ6OmZyb21GbG9h
dEZsb29yKHAueSgpKSk7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgY2VpbGVk
RnJhY3Rpb25hbExheW91dFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApCi17Ci0gICAgcmV0dXJu
IEZyYWN0aW9uYWxMYXlvdXRQb2ludChGcmFjdGlvbmFsTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2Vp
bChwLngoKSksIEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKHAueSgpKSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEZyYWN0aW9uYWxMYXlvdXRQ
b2ludF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFs
TGF5b3V0UmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuY3BwCShyZXZpc2lvbiAxMzM2NjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTIs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkZyYWN0aW9uYWxMYXlvdXRSZWN0LmgiCi0KLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNp
bmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0VW5pdC5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQot
dXNpbmcgc3RkOjptYXg7Ci11c2luZyBzdGQ6Om1pbjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1GcmFjdGlvbmFsTGF5b3V0UmVjdDo6RnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByKQotICAgIDogbV9sb2NhdGlvbihGcmFjdGlvbmFsTGF5b3V0UG9pbnQoci5sb2NhdGlv
bigpKSkKLSAgICAsIG1fc2l6ZShGcmFjdGlvbmFsTGF5b3V0U2l6ZShyLnNpemUoKSkpCi17Ci19
Ci0KLWJvb2wgRnJhY3Rpb25hbExheW91dFJlY3Q6OmludGVyc2VjdHMoY29uc3QgRnJhY3Rpb25h
bExheW91dFJlY3QmIG90aGVyKSBjb25zdAotewotICAgIC8vIENoZWNraW5nIGVtcHRpbmVzcyBo
YW5kbGVzIG5lZ2F0aXZlIHdpZHRocyBhcyB3ZWxsIGFzIHplcm8uCi0gICAgcmV0dXJuICFpc0Vt
cHR5KCkgJiYgIW90aGVyLmlzRW1wdHkoKQotICAgICAgICAmJiB4KCkgPCBvdGhlci5tYXhYKCkg
JiYgb3RoZXIueCgpIDwgbWF4WCgpCi0gICAgICAgICYmIHkoKSA8IG90aGVyLm1heFkoKSAmJiBv
dGhlci55KCkgPCBtYXhZKCk7Ci19Ci0KLWJvb2wgRnJhY3Rpb25hbExheW91dFJlY3Q6OmNvbnRh
aW5zKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1
cm4geCgpIDw9IG90aGVyLngoKSAmJiBtYXhYKCkgPj0gb3RoZXIubWF4WCgpCi0gICAgICAgICYm
IHkoKSA8PSBvdGhlci55KCkgJiYgbWF4WSgpID49IG90aGVyLm1heFkoKTsKLX0KLQotdm9pZCBG
cmFjdGlvbmFsTGF5b3V0UmVjdDo6aW50ZXJzZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0
JiBvdGhlcikKLXsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbmV3TG9jYXRpb24obWF4KHgo
KSwgb3RoZXIueCgpKSwgbWF4KHkoKSwgb3RoZXIueSgpKSk7Ci0gICAgRnJhY3Rpb25hbExheW91
dFBvaW50IG5ld01heFBvaW50KG1pbihtYXhYKCksIG90aGVyLm1heFgoKSksIG1pbihtYXhZKCks
IG90aGVyLm1heFkoKSkpOwotCi0gICAgLy8gUmV0dXJuIGEgY2xlYW4gZW1wdHkgcmVjdGFuZ2xl
IGZvciBub24taW50ZXJzZWN0aW5nIGNhc2VzLgotICAgIGlmIChuZXdMb2NhdGlvbi54KCkgPj0g
bmV3TWF4UG9pbnQueCgpIHx8IG5ld0xvY2F0aW9uLnkoKSA+PSBuZXdNYXhQb2ludC55KCkpIHsK
LSAgICAgICAgbmV3TG9jYXRpb24gPSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoMCwgMCk7Ci0gICAg
ICAgIG5ld01heFBvaW50ID0gRnJhY3Rpb25hbExheW91dFBvaW50KDAsIDApOwotICAgIH0KLQot
ICAgIG1fbG9jYXRpb24gPSBuZXdMb2NhdGlvbjsKLSAgICBtX3NpemUgPSBuZXdNYXhQb2ludCAt
IG5ld0xvY2F0aW9uOwotfQotCi12b2lkIEZyYWN0aW9uYWxMYXlvdXRSZWN0Ojp1bml0ZShjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgb3RoZXIpCi17Ci0gICAgLy8gSGFuZGxlIGVtcHR5IHNw
ZWNpYWwgY2FzZXMgZmlyc3QuCi0gICAgaWYgKG90aGVyLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGlmIChpc0VtcHR5KCkpIHsKLSAgICAgICAgKnRoaXMgPSBvdGhlcjsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdMb2NhdGlv
bihtaW4oeCgpLCBvdGhlci54KCkpLCBtaW4oeSgpLCBvdGhlci55KCkpKTsKLSAgICBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQgbmV3TWF4UG9pbnQobWF4KG1heFgoKSwgb3RoZXIubWF4WCgpKSwgbWF4
KG1heFkoKSwgb3RoZXIubWF4WSgpKSk7Ci0KLSAgICBtX2xvY2F0aW9uID0gbmV3TG9jYXRpb247
Ci0gICAgbV9zaXplID0gbmV3TWF4UG9pbnQgLSBuZXdMb2NhdGlvbjsKLX0KLQotdm9pZCBGcmFj
dGlvbmFsTGF5b3V0UmVjdDo6dW5pdGVJZk5vblplcm8oY29uc3QgRnJhY3Rpb25hbExheW91dFJl
Y3QmIG90aGVyKQotewotICAgIC8vIEhhbmRsZSBlbXB0eSBzcGVjaWFsIGNhc2VzIGZpcnN0Lgot
ICAgIGlmICghb3RoZXIud2lkdGgoKSAmJiAhb3RoZXIuaGVpZ2h0KCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBpZiAoIXdpZHRoKCkgJiYgIWhlaWdodCgpKSB7Ci0gICAgICAgICp0aGlzID0gb3Ro
ZXI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQg
bmV3TG9jYXRpb24obWluKHgoKSwgb3RoZXIueCgpKSwgbWluKHkoKSwgb3RoZXIueSgpKSk7Ci0g
ICAgRnJhY3Rpb25hbExheW91dFBvaW50IG5ld01heFBvaW50KG1heChtYXhYKCksIG90aGVyLm1h
eFgoKSksIG1heChtYXhZKCksIG90aGVyLm1heFkoKSkpOwotCi0gICAgbV9sb2NhdGlvbiA9IG5l
d0xvY2F0aW9uOwotICAgIG1fc2l6ZSA9IG5ld01heFBvaW50IC0gbmV3TG9jYXRpb247Ci19Ci0K
LXZvaWQgRnJhY3Rpb25hbExheW91dFJlY3Q6OnNjYWxlKGZsb2F0IHMpCi17Ci0gICAgbV9sb2Nh
dGlvbi5zY2FsZShzLCBzKTsKLSAgICBtX3NpemUuc2NhbGUocyk7Ci19Ci0KLUZyYWN0aW9uYWxM
YXlvdXRSZWN0IHVuaW9uUmVjdChjb25zdCBWZWN0b3I8RnJhY3Rpb25hbExheW91dFJlY3Q+JiBy
ZWN0cykKLXsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCByZXN1bHQ7Ci0KLSAgICBzaXplX3Qg
Y291bnQgPSByZWN0cy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsg
KytpKQotICAgICAgICByZXN1bHQudW5pdGUocmVjdHNbaV0pOwotCi0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotSW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRS
ZWN0JiByZWN0KQotewotICAgIEludFBvaW50IGxvY2F0aW9uID0gZmxvb3JlZEludFBvaW50KHJl
Y3QubWluWE1pbllDb3JuZXIoKSk7Ci0gICAgSW50UG9pbnQgbWF4UG9pbnQgPSBjZWlsZWRJbnRQ
b2ludChyZWN0Lm1heFhNYXhZQ29ybmVyKCkpOwotCi0gICAgcmV0dXJuIEludFJlY3QobG9jYXRp
b24sIG1heFBvaW50IC0gbG9jYXRpb24pOwotfQotCi1GcmFjdGlvbmFsTGF5b3V0UmVjdCBlbmNs
b3NpbmdGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0jaWYg
RU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbG9jYXRp
b24gPSBmbG9vcmVkRnJhY3Rpb25hbExheW91dFBvaW50KHJlY3QubWluWE1pbllDb3JuZXIoKSk7
Ci0gICAgRnJhY3Rpb25hbExheW91dFBvaW50IG1heFBvaW50ID0gY2VpbGVkRnJhY3Rpb25hbExh
eW91dFBvaW50KHJlY3QubWF4WE1heFlDb3JuZXIoKSk7Ci0KLSAgICByZXR1cm4gRnJhY3Rpb25h
bExheW91dFJlY3QobG9jYXRpb24sIG1heFBvaW50IC0gbG9jYXRpb24pOwotI2Vsc2UKLSAgICBy
ZXR1cm4gZW5jbG9zaW5nSW50UmVjdChyZWN0KTsKLSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlv
bmFsTGF5b3V0UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmgJKHJldmlzaW9uIDEzMzY2NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMjI3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBGcmFjdGlvbmFsTGF5b3V0UmVjdF9o
Ci0jZGVmaW5lIEZyYWN0aW9uYWxMYXlvdXRSZWN0X2gKLQotI2luY2x1ZGUgIkZyYWN0aW9uYWxM
YXlvdXRCb3hFeHRlbnQuaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCIKLSNp
bmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0jaWYgUExBVEZP
Uk0oUVQpCi0jaW5jbHVkZSA8cWdsb2JhbC5oPgotUVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBR
UmVjdDsKLWNsYXNzIFFSZWN0RjsKLVFUX0VORF9OQU1FU1BBQ0UKLSNlbmRpZgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZsb2F0UmVjdDsKLQotY2xhc3MgRnJhY3Rpb25hbExheW91
dFJlY3QgewotcHVibGljOgotICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0KCkgeyB9Ci0gICAgRnJh
Y3Rpb25hbExheW91dFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBsb2NhdGlvbiwg
Y29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpCi0gICAgICAgIDogbV9sb2NhdGlvbihs
b2NhdGlvbiksIG1fc2l6ZShzaXplKSB7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdChGcmFj
dGlvbmFsTGF5b3V0VW5pdCB4LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCB5LCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCB3aWR0aCwgRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KQotICAgICAgICA6IG1f
bG9jYXRpb24oRnJhY3Rpb25hbExheW91dFBvaW50KHgsIHkpKSwgbV9zaXplKEZyYWN0aW9uYWxM
YXlvdXRTaXplKHdpZHRoLCBoZWlnaHQpKSB7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdChj
b25zdCBGbG9hdFBvaW50JiBsb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBzaXplKQotICAgICAg
ICA6IG1fbG9jYXRpb24obG9jYXRpb24pLCBtX3NpemUoc2l6ZSkgeyB9Ci0gICAgRnJhY3Rpb25h
bExheW91dFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgOiBtX2xvY2F0aW9uKHJlY3QubG9jYXRp
b24oKSksIG1fc2l6ZShyZWN0LnNpemUoKSkgeyB9Ci0KLSAgICBleHBsaWNpdCBGcmFjdGlvbmFs
TGF5b3V0UmVjdChjb25zdCBGbG9hdFJlY3QmKTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5
IHNpbmNlIGl0J3MgbG9zc3kKLSAgICAgICAgCi0gICAgRnJhY3Rpb25hbExheW91dFBvaW50IGxv
Y2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfQotICAgIEZyYWN0aW9uYWxMYXlv
dXRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLQotICAgIEludFBvaW50IHBp
eGVsU25hcHBlZExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gcm91bmRlZEludFBvaW50KG1fbG9j
YXRpb24pOyB9Ci0gICAgSW50U2l6ZSBwaXhlbFNuYXBwZWRTaXplKCkgY29uc3QgeyByZXR1cm4g
SW50U2l6ZShzbmFwU2l6ZVRvUGl4ZWwobV9zaXplLndpZHRoKCksIG1fbG9jYXRpb24ueCgpKSwg
c25hcFNpemVUb1BpeGVsKG1fc2l6ZS5oZWlnaHQoKSwgbV9sb2NhdGlvbi55KCkpKTsgfQotCi0g
ICAgdm9pZCBzZXRMb2NhdGlvbihjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGxvY2F0aW9u
KSB7IG1fbG9jYXRpb24gPSBsb2NhdGlvbjsgfQotICAgIHZvaWQgc2V0U2l6ZShjb25zdCBGcmFj
dGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9Ci0KLSAgICBGcmFjdGlv
bmFsTGF5b3V0VW5pdCB4KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi54KCk7IH0KLSAgICBG
cmFjdGlvbmFsTGF5b3V0VW5pdCB5KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi55KCk7IH0K
LSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtYXhYKCkgY29uc3QgeyByZXR1cm4geCgpICsgd2lk
dGgoKTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1heFkoKSBjb25zdCB7IHJldHVybiB5
KCkgKyBoZWlnaHQoKTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplLndpZHRoKCk7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBoZWln
aHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaGVpZ2h0KCk7IH0KLQotICAgIGludCBwaXhlbFNu
YXBwZWRYKCkgY29uc3QgeyByZXR1cm4geCgpLnJvdW5kKCk7IH0KLSAgICBpbnQgcGl4ZWxTbmFw
cGVkWSgpIGNvbnN0IHsgcmV0dXJuIHkoKS5yb3VuZCgpOyB9Ci0gICAgaW50IHBpeGVsU25hcHBl
ZFdpZHRoKCkgY29uc3QgeyByZXR1cm4gc25hcFNpemVUb1BpeGVsKHdpZHRoKCksIHgoKSk7IH0K
LSAgICBpbnQgcGl4ZWxTbmFwcGVkSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gc25hcFNpemVUb1Bp
eGVsKGhlaWdodCgpLCB5KCkpOyB9Ci0gICAgaW50IHBpeGVsU25hcHBlZE1heFgoKSBjb25zdCB7
IHJldHVybiAobV9sb2NhdGlvbi54KCkgKyBtX3NpemUud2lkdGgoKSkucm91bmQoKTsgfQotICAg
IGludCBwaXhlbFNuYXBwZWRNYXhZKCkgY29uc3QgeyByZXR1cm4gKG1fbG9jYXRpb24ueSgpICsg
bV9zaXplLmhlaWdodCgpKS5yb3VuZCgpOyB9Ci0KLSAgICB2b2lkIHNldFgoRnJhY3Rpb25hbExh
eW91dFVuaXQgeCkgeyBtX2xvY2F0aW9uLnNldFgoeCk7IH0KLSAgICB2b2lkIHNldFkoRnJhY3Rp
b25hbExheW91dFVuaXQgeSkgeyBtX2xvY2F0aW9uLnNldFkoeSk7IH0KLSAgICB2b2lkIHNldFdp
ZHRoKEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKSB7IG1fc2l6ZS5zZXRXaWR0aCh3aWR0aCk7
IH0KLSAgICB2b2lkIHNldEhlaWdodChGcmFjdGlvbmFsTGF5b3V0VW5pdCBoZWlnaHQpIHsgbV9z
aXplLnNldEhlaWdodChoZWlnaHQpOyB9Ci0KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiBtX3NpemUuaXNFbXB0eSgpOyB9Ci0KLSAgICAvLyBOT1RFOiBUaGUgcmVzdWx0IGlzIHJv
dW5kZWQgdG8gaW50ZWdlciB2YWx1ZXMsIGFuZCB0aHVzIG1heSBiZSBub3QgdGhlIGV4YWN0Ci0g
ICAgLy8gY2VudGVyIHBvaW50LgotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBjZW50ZXIoKSBj
b25zdCB7IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoeCgpICsgd2lkdGgoKSAvIDIsIHko
KSArIGhlaWdodCgpIC8gMik7IH0KLQotICAgIHZvaWQgbW92ZShjb25zdCBGcmFjdGlvbmFsTGF5
b3V0U2l6ZSYgc2l6ZSkgeyBtX2xvY2F0aW9uICs9IHNpemU7IH0gCi0gICAgdm9pZCBtb3ZlQnko
Y29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBvZmZzZXQpIHsgbV9sb2NhdGlvbi5tb3ZlKG9m
ZnNldC54KCksIG9mZnNldC55KCkpOyB9Ci0gICAgdm9pZCBtb3ZlKEZyYWN0aW9uYWxMYXlvdXRV
bml0IGR4LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeSkgeyBtX2xvY2F0aW9uLm1vdmUoZHgsIGR5
KTsgfSAKLQotICAgIHZvaWQgZXhwYW5kKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXpl
KSB7IG1fc2l6ZSArPSBzaXplOyB9Ci0gICAgdm9pZCBleHBhbmQoY29uc3QgRnJhY3Rpb25hbExh
eW91dEJveEV4dGVudCYgYm94KQotICAgIHsKLSAgICAgICAgbV9sb2NhdGlvbi5tb3ZlKC1ib3gu
bGVmdCgpLCAtYm94LnRvcCgpKTsKLSAgICAgICAgbV9zaXplLmV4cGFuZChib3gubGVmdCgpICsg
Ym94LnJpZ2h0KCksIGJveC50b3AoKSArIGJveC5ib3R0b20oKSk7Ci0gICAgfQotICAgIHZvaWQg
ZXhwYW5kKEZyYWN0aW9uYWxMYXlvdXRVbml0IGR3LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkaCkg
eyBtX3NpemUuZXhwYW5kKGR3LCBkaCk7IH0KLSAgICB2b2lkIGNvbnRyYWN0KGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1fc2l6ZSAtPSBzaXplOyB9Ci0gICAgdm9pZCBjb250
cmFjdChGcmFjdGlvbmFsTGF5b3V0VW5pdCBkdywgRnJhY3Rpb25hbExheW91dFVuaXQgZGgpIHsg
bV9zaXplLmV4cGFuZCgtZHcsIC1kaCk7IH0KLQotICAgIHZvaWQgc2hpZnRYRWRnZVRvKEZyYWN0
aW9uYWxMYXlvdXRVbml0IGVkZ2UpCi0gICAgewotICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBkZWx0YSA9IGVkZ2UgLSB4KCk7Ci0gICAgICAgIHNldFgoZWRnZSk7Ci0gICAgICAgIHNldFdp
ZHRoKHN0ZDo6bWF4PEZyYWN0aW9uYWxMYXlvdXRVbml0PigwLCB3aWR0aCgpIC0gZGVsdGEpKTsK
LSAgICB9Ci0gICAgdm9pZCBzaGlmdE1heFhFZGdlVG8oRnJhY3Rpb25hbExheW91dFVuaXQgZWRn
ZSkKLSAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRlbHRhID0gZWRnZSAtIG1h
eFgoKTsKLSAgICAgICAgc2V0V2lkdGgoc3RkOjptYXg8RnJhY3Rpb25hbExheW91dFVuaXQ+KDAs
IHdpZHRoKCkgKyBkZWx0YSkpOwotICAgIH0KLSAgICB2b2lkIHNoaWZ0WUVkZ2VUbyhGcmFjdGlv
bmFsTGF5b3V0VW5pdCBlZGdlKQotICAgIHsKLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQg
ZGVsdGEgPSBlZGdlIC0geSgpOwotICAgICAgICBzZXRZKGVkZ2UpOwotICAgICAgICBzZXRIZWln
aHQoc3RkOjptYXg8RnJhY3Rpb25hbExheW91dFVuaXQ+KDAsIGhlaWdodCgpIC0gZGVsdGEpKTsK
LSAgICB9Ci0gICAgdm9pZCBzaGlmdE1heFlFZGdlVG8oRnJhY3Rpb25hbExheW91dFVuaXQgZWRn
ZSkKLSAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRlbHRhID0gZWRnZSAtIG1h
eFkoKTsKLSAgICAgICAgc2V0SGVpZ2h0KHN0ZDo6bWF4PEZyYWN0aW9uYWxMYXlvdXRVbml0Pigw
LCBoZWlnaHQoKSArIGRlbHRhKSk7Ci0gICAgfQotCi0gICAgRnJhY3Rpb25hbExheW91dFBvaW50
IG1pblhNaW5ZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfSAvLyB0eXBpY2Fs
bHkgdG9wTGVmdAotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBtYXhYTWluWUNvcm5lcigpIGNv
bnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChtX2xvY2F0aW9uLngoKSArIG1fc2l6
ZS53aWR0aCgpLCBtX2xvY2F0aW9uLnkoKSk7IH0gLy8gdHlwaWNhbGx5IHRvcFJpZ2h0Ci0gICAg
RnJhY3Rpb25hbExheW91dFBvaW50IG1pblhNYXhZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gRnJh
Y3Rpb25hbExheW91dFBvaW50KG1fbG9jYXRpb24ueCgpLCBtX2xvY2F0aW9uLnkoKSArIG1fc2l6
ZS5oZWlnaHQoKSk7IH0gLy8gdHlwaWNhbGx5IGJvdHRvbUxlZnQKLSAgICBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQgbWF4WE1heFlDb3JuZXIoKSBjb25zdCB7IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQobV9sb2NhdGlvbi54KCkgKyBtX3NpemUud2lkdGgoKSwgbV9sb2NhdGlvbi55KCkgKyBt
X3NpemUuaGVpZ2h0KCkpOyB9IC8vIHR5cGljYWxseSBib3R0b21SaWdodAotICAgIAotICAgIGJv
b2wgaW50ZXJzZWN0cyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpIGNvbnN0OwotICAgIGJv
b2wgY29udGFpbnMoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKSBjb25zdDsKLQotICAgIC8v
IFRoaXMgY2hlY2tzIHRvIHNlZSBpZiB0aGUgcmVjdCBjb250YWlucyB4LHkgaW4gdGhlIHRyYWRp
dGlvbmFsIHNlbnNlLgotICAgIC8vIEVxdWl2YWxlbnQgdG8gY2hlY2tpbmcgaWYgdGhlIHJlY3Qg
Y29udGFpbnMgYSAxeDEgcmVjdCBiZWxvdyBhbmQgdG8gdGhlIHJpZ2h0IG9mIChweCxweSkuCi0g
ICAgYm9vbCBjb250YWlucyhGcmFjdGlvbmFsTGF5b3V0VW5pdCBweCwgRnJhY3Rpb25hbExheW91
dFVuaXQgcHkpIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIHB4ID49IHgoKSAmJiBweCA8IG1heFgo
KSAmJiBweSA+PSB5KCkgJiYgcHkgPCBtYXhZKCk7IH0KLSAgICBib29sIGNvbnRhaW5zKGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5zKHBv
aW50LngoKSwgcG9pbnQueSgpKTsgfQotCi0gICAgdm9pZCBpbnRlcnNlY3QoY29uc3QgRnJhY3Rp
b25hbExheW91dFJlY3QmKTsKLSAgICB2b2lkIHVuaXRlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRS
ZWN0Jik7Ci0gICAgdm9pZCB1bml0ZUlmTm9uWmVybyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVj
dCYpOwotCi0gICAgdm9pZCBpbmZsYXRlWChGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeCkKLSAgICB7
Ci0gICAgICAgIG1fbG9jYXRpb24uc2V0WChtX2xvY2F0aW9uLngoKSAtIGR4KTsKLSAgICAgICAg
bV9zaXplLnNldFdpZHRoKG1fc2l6ZS53aWR0aCgpICsgZHggKyBkeCk7Ci0gICAgfQotICAgIHZv
aWQgaW5mbGF0ZVkoRnJhY3Rpb25hbExheW91dFVuaXQgZHkpCi0gICAgewotICAgICAgICBtX2xv
Y2F0aW9uLnNldFkobV9sb2NhdGlvbi55KCkgLSBkeSk7Ci0gICAgICAgIG1fc2l6ZS5zZXRIZWln
aHQobV9zaXplLmhlaWdodCgpICsgZHkgKyBkeSk7Ci0gICAgfQotICAgIHZvaWQgaW5mbGF0ZShG
cmFjdGlvbmFsTGF5b3V0VW5pdCBkKSB7IGluZmxhdGVYKGQpOyBpbmZsYXRlWShkKTsgfQotICAg
IHZvaWQgc2NhbGUoZmxvYXQgcyk7Ci0KLSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCB0cmFuc3Bv
c2VkUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRSZWN0KG1fbG9jYXRpb24u
dHJhbnNwb3NlZFBvaW50KCksIG1fc2l6ZS50cmFuc3Bvc2VkU2l6ZSgpKTsgfQotCi0gICAgc3Rh
dGljIEZyYWN0aW9uYWxMYXlvdXRSZWN0IGluZmluaXRlUmVjdCgpCi0gICAgewotICAgICAgICAv
LyBSZXR1cm4gYSByZWN0IHRoYXQgaXMgc2xpZ2h0bHkgc21hbGxlciB0aGFuIHRoZSB0cnVlIG1h
eCByZWN0IHRvIGFsbG93IHBpeGVsU25hcHBpbmcgdG8gcm91bmQgdXAgdG8gdGhlIG5lYXJlc3Qg
SW50UmVjdCB3aXRob3V0IG92ZXJmbG93aW5nLgotICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExh
eW91dFJlY3QoRnJhY3Rpb25hbExheW91dFVuaXQ6Om5lYXJseU1pbigpIC8gMiwgRnJhY3Rpb25h
bExheW91dFVuaXQ6Om5lYXJseU1pbigpIC8gMiwgRnJhY3Rpb25hbExheW91dFVuaXQ6Om5lYXJs
eU1heCgpLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bmVhcmx5TWF4KCkpOwotICAgIH0KLQotI2lm
IFBMQVRGT1JNKFFUKQotICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IFFS
ZWN0Jik7Ci0gICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgUVJlY3RGJik7
Ci0gICAgb3BlcmF0b3IgUVJlY3RGKCkgY29uc3Q7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBG
cmFjdGlvbmFsTGF5b3V0UG9pbnQgbV9sb2NhdGlvbjsKLSAgICBGcmFjdGlvbmFsTGF5b3V0U2l6
ZSBtX3NpemU7Ci19OwotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFJlY3QgaW50ZXJzZWN0aW9u
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVj
dCYgYikKLXsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCBjID0gYTsKLSAgICBjLmludGVyc2Vj
dChiKTsKLSAgICByZXR1cm4gYzsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRSZWN0IHVu
aW9uUmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYSwgY29uc3QgRnJhY3Rpb25hbExh
eW91dFJlY3QmIGIpCi17Ci0gICAgRnJhY3Rpb25hbExheW91dFJlY3QgYyA9IGE7Ci0gICAgYy51
bml0ZShiKTsKLSAgICByZXR1cm4gYzsKLX0KLQotRnJhY3Rpb25hbExheW91dFJlY3QgdW5pb25S
ZWN0KGNvbnN0IFZlY3RvcjxGcmFjdGlvbmFsTGF5b3V0UmVjdD4mKTsKLQotaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYSwgY29uc3QgRnJhY3Rpb25h
bExheW91dFJlY3QmIGIpCi17Ci0gICAgcmV0dXJuIGEubG9jYXRpb24oKSA9PSBiLmxvY2F0aW9u
KCkgJiYgYS5zaXplKCkgPT0gYi5zaXplKCk7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0
JiBiKQotewotICAgIHJldHVybiBhLmxvY2F0aW9uKCkgIT0gYi5sb2NhdGlvbigpIHx8IGEuc2l6
ZSgpICE9IGIuc2l6ZSgpOwotfQotCi1pbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiByZWN0KQotewotI2lmIEVOQUJMRShTVUJQSVhF
TF9MQVlPVVQpCi0gICAgcmV0dXJuIEludFJlY3Qocm91bmRlZEludFBvaW50KHJlY3QubG9jYXRp
b24oKSksIEludFNpemUoc25hcFNpemVUb1BpeGVsKHJlY3Qud2lkdGgoKSwgcmVjdC54KCkpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNuYXBTaXplVG9QaXhlbChyZWN0LmhlaWdodCgpLCByZWN0LnkoKSkpKTsKLQotI2Vsc2UK
LSAgICByZXR1cm4gSW50UmVjdChyZWN0KTsKLSNlbmRpZgotfQotCi1JbnRSZWN0IGVuY2xvc2lu
Z0ludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKTsKLUZyYWN0aW9uYWxMYXlvdXRS
ZWN0IGVuY2xvc2luZ0ZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBGcmFjdGlvbmFsTGF5b3V0UmVjdF9o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0
U2l6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zy
YWN0aW9uYWxMYXlvdXRTaXplLmgJKHJldmlzaW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRTaXplLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBGcmFjdGlvbmFsTGF5b3V0U2l6ZV9oCi0jZGVmaW5l
IEZyYWN0aW9uYWxMYXlvdXRTaXplX2gKLQotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotI2luY2x1
ZGUgIkZyYWN0aW9uYWxMYXlvdXRVbml0LmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotCi0jaWYg
UExBVEZPUk0oUVQpCi0jaW5jbHVkZSA8cWdsb2JhbC5oPgotUVRfQkVHSU5fTkFNRVNQQUNFCi1j
bGFzcyBRU2l6ZTsKLWNsYXNzIFFTaXplRjsKLVFUX0VORF9OQU1FU1BBQ0UKLSNlbmRpZgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRQb2ludDsKLQotY2xh
c3MgRnJhY3Rpb25hbExheW91dFNpemUgewotcHVibGljOgotICAgIEZyYWN0aW9uYWxMYXlvdXRT
aXplKCkgOiBtX3dpZHRoKDApLCBtX2hlaWdodCgwKSB7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0
U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKSA6IG1fd2lkdGgoc2l6ZS53aWR0aCgpKSwgbV9oZWln
aHQoc2l6ZS5oZWlnaHQoKSkgeyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFNpemUoRnJhY3Rpb25h
bExheW91dFVuaXQgd2lkdGgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCkgOiBtX3dpZHRo
KHdpZHRoKSwgbV9oZWlnaHQoaGVpZ2h0KSB7IH0KLQotICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxM
YXlvdXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgOiBtX3dpZHRoKHNpemUud2lkdGgoKSks
IG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkpIHsgfQotICAgIAotICAgIEZyYWN0aW9uYWxMYXlvdXRV
bml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQotICAgIEZyYWN0aW9uYWxMYXlv
dXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9Ci0KLSAgICB2b2lkIHNl
dFdpZHRoKEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKSB7IG1fd2lkdGggPSB3aWR0aDsgfQot
ICAgIHZvaWQgc2V0SGVpZ2h0KEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCkgeyBtX2hlaWdo
dCA9IGhlaWdodDsgfQotCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV93aWR0
aCA8PSAwIHx8IG1faGVpZ2h0IDw9IDA7IH0KLSAgICBib29sIGlzWmVybygpIGNvbnN0IHsgcmV0
dXJuICFtX3dpZHRoICYmICFtX2hlaWdodDsgfQotCi0gICAgZmxvYXQgYXNwZWN0UmF0aW8oKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obV93aWR0aCkgLyBzdGF0aWNfY2FzdDxm
bG9hdD4obV9oZWlnaHQpOyB9Ci0gICAgCi0gICAgdm9pZCBleHBhbmQoRnJhY3Rpb25hbExheW91
dFVuaXQgd2lkdGgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCkKLSAgICB7Ci0gICAgICAg
IG1fd2lkdGggKz0gd2lkdGg7Ci0gICAgICAgIG1faGVpZ2h0ICs9IGhlaWdodDsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBzY2FsZShmbG9hdCBzY2FsZSkKLSAgICB7Ci0gICAgICAgIG1fd2lkdGgg
Kj0gc2NhbGU7Ci0gICAgICAgIG1faGVpZ2h0ICo9IHNjYWxlOwotICAgIH0KLQotICAgIHZvaWQg
c2NhbGUoZmxvYXQgd2lkdGhTY2FsZSwgZmxvYXQgaGVpZ2h0U2NhbGUpCi0gICAgewotICAgICAg
ICBtX3dpZHRoICo9IHdpZHRoU2NhbGU7Ci0gICAgICAgIG1faGVpZ2h0ICo9IGhlaWdodFNjYWxl
OwotICAgIH0KLSAgICAKLSAgICBGcmFjdGlvbmFsTGF5b3V0U2l6ZSBleHBhbmRlZFRvKGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBGcmFjdGlvbmFsTGF5b3V0U2l6ZShtX3dpZHRoID4gb3RoZXIubV93aWR0aCA/IG1fd2lkdGgg
OiBvdGhlci5tX3dpZHRoLAotICAgICAgICAgICAgbV9oZWlnaHQgPiBvdGhlci5tX2hlaWdodCA/
IG1faGVpZ2h0IDogb3RoZXIubV9oZWlnaHQpOwotICAgIH0KLQotICAgIEZyYWN0aW9uYWxMYXlv
dXRTaXplIHNocnVua1RvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBvdGhlcikgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShtX3dpZHRoIDwgb3Ro
ZXIubV93aWR0aCA/IG1fd2lkdGggOiBvdGhlci5tX3dpZHRoLAotICAgICAgICAgICAgbV9oZWln
aHQgPCBvdGhlci5tX2hlaWdodCA/IG1faGVpZ2h0IDogb3RoZXIubV9oZWlnaHQpOwotICAgIH0K
LQotICAgIHZvaWQgY2xhbXBOZWdhdGl2ZVRvWmVybygpCi0gICAgewotICAgICAgICAqdGhpcyA9
IGV4cGFuZGVkVG8oRnJhY3Rpb25hbExheW91dFNpemUoKSk7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgY2xhbXBUb01pbmltdW1TaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBtaW5pbXVt
U2l6ZSkKLSAgICB7Ci0gICAgICAgIGlmIChtX3dpZHRoIDwgbWluaW11bVNpemUud2lkdGgoKSkK
LSAgICAgICAgICAgIG1fd2lkdGggPSBtaW5pbXVtU2l6ZS53aWR0aCgpOwotICAgICAgICBpZiAo
bV9oZWlnaHQgPCBtaW5pbXVtU2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgICAgIG1faGVpZ2h0ID0g
bWluaW11bVNpemUuaGVpZ2h0KCk7Ci0gICAgfQotCi0gICAgRnJhY3Rpb25hbExheW91dFNpemUg
dHJhbnNwb3NlZFNpemUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxM
YXlvdXRTaXplKG1faGVpZ2h0LCBtX3dpZHRoKTsKLSAgICB9Ci0KLSNpZiBQTEFURk9STShRVCkK
LSAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZShjb25zdCBRU2l6ZSYpOwotICAgIGV4
cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0IFFTaXplRiYpOwotICAgIG9wZXJhdG9y
IFFTaXplRigpIGNvbnN0OwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgRnJhY3Rpb25hbExheW91
dFVuaXQgbV93aWR0aCwgbV9oZWlnaHQ7Ci19OwotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFNp
emUmIG9wZXJhdG9yKz0oRnJhY3Rpb25hbExheW91dFNpemUmIGEsIGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRTaXplJiBiKQotewotICAgIGEuc2V0V2lkdGgoYS53aWR0aCgpICsgYi53aWR0aCgpKTsK
LSAgICBhLnNldEhlaWdodChhLmhlaWdodCgpICsgYi5oZWlnaHQoKSk7Ci0gICAgcmV0dXJuIGE7
Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgb3BlcmF0b3ItPShGcmFjdGlvbmFs
TGF5b3V0U2l6ZSYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCi17Ci0gICAgYS5z
ZXRXaWR0aChhLndpZHRoKCkgLSBiLndpZHRoKCkpOwotICAgIGEuc2V0SGVpZ2h0KGEuaGVpZ2h0
KCkgLSBiLmhlaWdodCgpKTsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxM
YXlvdXRTaXplIG9wZXJhdG9yKyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYSwgY29uc3Qg
RnJhY3Rpb25hbExheW91dFNpemUmIGIpCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRT
aXplKGEud2lkdGgoKSArIGIud2lkdGgoKSwgYS5oZWlnaHQoKSArIGIuaGVpZ2h0KCkpOwotfQot
Ci1pbmxpbmUgRnJhY3Rpb25hbExheW91dFNpemUgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKLXsKLSAgICByZXR1
cm4gRnJhY3Rpb25hbExheW91dFNpemUoYS53aWR0aCgpIC0gYi53aWR0aCgpLCBhLmhlaWdodCgp
IC0gYi5oZWlnaHQoKSk7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSBvcGVyYXRv
ci0oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpCi17Ci0gICAgcmV0dXJuIEZyYWN0
aW9uYWxMYXlvdXRTaXplKC1zaXplLndpZHRoKCksIC1zaXplLmhlaWdodCgpKTsKLX0KLQotaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYSwgY29uc3Qg
RnJhY3Rpb25hbExheW91dFNpemUmIGIpCi17Ci0gICAgcmV0dXJuIGEud2lkdGgoKSA9PSBiLndp
ZHRoKCkgJiYgYS5oZWlnaHQoKSA9PSBiLmhlaWdodCgpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0U2l6ZSYgYikKLXsKLSAgICByZXR1cm4gYS53aWR0aCgpICE9IGIud2lkdGgoKSB8fCBhLmhl
aWdodCgpICE9IGIuaGVpZ2h0KCk7Ci19Ci0KLWlubGluZSBJbnRTaXplIGZsb29yZWRJbnRTaXpl
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzKQotewotICAgIHJldHVybiBJbnRTaXplKHMu
d2lkdGgoKS5mbG9vcigpLCBzLmhlaWdodCgpLmZsb29yKCkpOwotfQotCi1pbmxpbmUgSW50U2l6
ZSByb3VuZGVkSW50U2l6ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgcykKLXsKLSAgICBy
ZXR1cm4gSW50U2l6ZShzLndpZHRoKCkucm91bmQoKSwgcy5oZWlnaHQoKS5yb3VuZCgpKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRnJhY3Rpb25hbExheW91dFNp
emVfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NMYXllci5jcHAJKHJldmlzaW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICsz
Miw3IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzSW5saW5l
TWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJSb3RhdGVUcmFu
c2Zvcm1PcGVyYXRpb24uaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXJBbmltYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uY3BwCShyZXZpc2lvbiAxMzM2NjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQW5pbWF0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKICNpbmNsdWRlICJHcmFwaGljc0xheWVyQW5pbWF0aW9uLmgiCiAK
LSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0U2l6ZS5oIgorI2luY2x1ZGUgIkxheW91dFNpemUu
aCIKICNpbmNsdWRlICJVbml0QmV6aWVyLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3Bw
CShyZXZpc2lvbiAxMzM2NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bnRSZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKIAotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlv
dXRSZWN0LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5o
IgogI2luY2x1ZGUgPGFsZ29yaXRobT4KIAogdXNpbmcgc3RkOjptYXg7CkBAIC00MSw3ICs0MSw3
IEBAIEludFJlY3Q6OkludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQogewogfQogCi1JbnRSZWN0
OjpJbnRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiByKQorSW50UmVjdDo6SW50UmVj
dChjb25zdCBMYXlvdXRSZWN0JiByKQogICAgIDogbV9sb2NhdGlvbihyLngoKSwgci55KCkpCiAg
ICAgLCBtX3NpemUoci53aWR0aCgpLCByLmhlaWdodCgpKQogewpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAkocmV2aXNpb24gMTMzNjY0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03Nyw3ICs3Nyw3IEBAIHN0cnVjdCBTa0lSZWN0OwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0UmVjdDsKK2NsYXNzIExheW91
dFJlY3Q7CiAKIGNsYXNzIEludFJlY3QgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpA
QCAtODksNyArODksNyBAQCBwdWJsaWM6CiAgICAgICAgIDogbV9sb2NhdGlvbihJbnRQb2ludCh4
LCB5KSksIG1fc2l6ZShJbnRTaXplKHdpZHRoLCBoZWlnaHQpKSB7IH0KIAogICAgIGV4cGxpY2l0
IEludFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBz
aW5jZSBpdCdzIGxvc3N5Ci0gICAgZXhwbGljaXQgSW50UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5
b3V0UmVjdCYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQor
ICAgIGV4cGxpY2l0IEludFJlY3QoY29uc3QgTGF5b3V0UmVjdCYpOyAvLyBkb24ndCBkbyB0aGlz
IGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQogICAgICAgICAKICAgICBJbnRQb2ludCBsb2Nh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb247IH0KICAgICBJbnRTaXplIHNpemUoKSBj
b25zdCB7IHJldHVybiBtX3NpemU7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0xheW91dEJveEV4dGVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50LmNwcAkocmV2aXNpb24gMTMzNTE3KQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94
RXh0ZW50LmNwcDoxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9M
YXlvdXRCb3hFeHRlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTk2IEBACisvKgor
ICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworRnJhY3Rpb25hbExheW91dFVuaXQgRnJhY3Rpb25hbExh
eW91dEJveEV4dGVudDo6bG9naWNhbFRvcChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QK
K3sKKyAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV90
b3AgOiBtX2xlZnQ7Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRC
b3hFeHRlbnQ6OmxvZ2ljYWxCb3R0b20oV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fYm90
dG9tIDogbV9yaWdodDsKK30KKworRnJhY3Rpb25hbExheW91dFVuaXQgRnJhY3Rpb25hbExheW91
dEJveEV4dGVudDo6bG9naWNhbExlZnQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fbGVm
dCA6IG1fdG9wOworfQorCitGcmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94
RXh0ZW50Ojpsb2dpY2FsUmlnaHQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fcmlnaHQg
OiBtX2JvdHRvbTsKK30KKworRnJhY3Rpb25hbExheW91dFVuaXQgRnJhY3Rpb25hbExheW91dEJv
eEV4dGVudDo6YmVmb3JlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAoreworICAgIHN3
aXRjaCAod3JpdGluZ01vZGUpIHsKKyAgICBjYXNlIFRvcFRvQm90dG9tV3JpdGluZ01vZGU6Cisg
ICAgICAgIHJldHVybiBtX3RvcDsKKyAgICBjYXNlIEJvdHRvbVRvVG9wV3JpdGluZ01vZGU6Cisg
ICAgICAgIHJldHVybiBtX2JvdHRvbTsKKyAgICBjYXNlIExlZnRUb1JpZ2h0V3JpdGluZ01vZGU6
CisgICAgICAgIHJldHVybiBtX2xlZnQ7CisgICAgY2FzZSBSaWdodFRvTGVmdFdyaXRpbmdNb2Rl
OgorICAgICAgICByZXR1cm4gbV9yaWdodDsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIG1fdG9wOworfQorCitGcmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlv
bmFsTGF5b3V0Qm94RXh0ZW50OjphZnRlcihXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QK
K3sKKyAgICBzd2l0Y2ggKHdyaXRpbmdNb2RlKSB7CisgICAgY2FzZSBUb3BUb0JvdHRvbVdyaXRp
bmdNb2RlOgorICAgICAgICByZXR1cm4gbV9ib3R0b207CisgICAgY2FzZSBCb3R0b21Ub1RvcFdy
aXRpbmdNb2RlOgorICAgICAgICByZXR1cm4gbV90b3A7CisgICAgY2FzZSBMZWZ0VG9SaWdodFdy
aXRpbmdNb2RlOgorICAgICAgICByZXR1cm4gbV9yaWdodDsKKyAgICBjYXNlIFJpZ2h0VG9MZWZ0
V3JpdGluZ01vZGU6CisgICAgICAgIHJldHVybiBtX2xlZnQ7CisgICAgfQorICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBtX2JvdHRvbTsKK30KKworRnJhY3Rpb25hbExheW91
dFVuaXQgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6c3RhcnQoV3JpdGluZ01vZGUgd3JpdGlu
Z01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdAoreworICAgIGlmIChpc0hvcml6
b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpCisgICAgICAgIHJldHVybiBpc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKGRpcmVjdGlvbikgPyBtX2xlZnQgOiBtX3JpZ2h0OworICAgIHJldHVybiBp
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKGRpcmVjdGlvbikgPyBtX3RvcCA6IG1fYm90dG9tOworfQor
CitGcmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjplbmQoV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdAorewor
ICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpCisgICAgICAgIHJl
dHVybiBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKGRpcmVjdGlvbikgPyBtX3JpZ2h0IDogbV9sZWZ0
OworICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKGRpcmVjdGlvbikgPyBtX2JvdHRv
bSA6IG1fdG9wOworfQorCit2b2lkIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OnNldEJlZm9y
ZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgRnJhY3Rpb25hbExheW91dFVuaXQgdmFsdWUpCit7
CisgICAgc3dpdGNoICh3cml0aW5nTW9kZSkgeworICAgIGNhc2UgVG9wVG9Cb3R0b21Xcml0aW5n
TW9kZToKKyAgICAgICAgbV90b3AgPSB2YWx1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBC
b3R0b21Ub1RvcFdyaXRpbmdNb2RlOgorICAgICAgICBtX2JvdHRvbSA9IHZhbHVlOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIExlZnRUb1JpZ2h0V3JpdGluZ01vZGU6CisgICAgICAgIG1fbGVm
dCA9IHZhbHVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJpZ2h0VG9MZWZ0V3JpdGluZ01v
ZGU6CisgICAgICAgIG1fcmlnaHQgPSB2YWx1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIG1fdG9wID0gdmFsdWU7
CisgICAgfQorfQorCit2b2lkIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OnNldEFmdGVyKFdy
aXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCB2YWx1ZSkKK3sKKyAg
ICBzd2l0Y2ggKHdyaXRpbmdNb2RlKSB7CisgICAgY2FzZSBUb3BUb0JvdHRvbVdyaXRpbmdNb2Rl
OgorICAgICAgICBtX2JvdHRvbSA9IHZhbHVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJv
dHRvbVRvVG9wV3JpdGluZ01vZGU6CisgICAgICAgIG1fdG9wID0gdmFsdWU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgTGVmdFRvUmlnaHRXcml0aW5nTW9kZToKKyAgICAgICAgbV9yaWdodCA9
IHZhbHVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJpZ2h0VG9MZWZ0V3JpdGluZ01vZGU6
CisgICAgICAgIG1fbGVmdCA9IHZhbHVlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgbV9ib3R0b20gPSB2YWx1ZTsK
KyAgICB9Cit9CisKK3ZvaWQgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6c2V0U3RhcnQoV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCB2YWx1ZSkKK3sKKyAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3Jp
dGluZ01vZGUpKSB7CisgICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKGRpcmVjdGlv
bikpCisgICAgICAgICAgICBtX2xlZnQgPSB2YWx1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbV9yaWdodCA9IHZhbHVlOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChpc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKGRpcmVjdGlvbikpCisgICAgICAgICAgICBtX3RvcCA9IHZhbHVlOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX2JvdHRvbSA9IHZhbHVlOworICAgIH0KK30KKwordm9p
ZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzZXRFbmQoV3JpdGluZ01vZGUgd3JpdGluZ01v
ZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCB2YWx1ZSkK
K3sKKyAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKSB7CisgICAg
ICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKGRpcmVjdGlvbikpCisgICAgICAgICAgICBt
X3JpZ2h0ID0gdmFsdWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fbGVmdCA9IHZhbHVl
OworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKGRpcmVj
dGlvbikpCisgICAgICAgICAgICBtX2JvdHRvbSA9IHZhbHVlOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBtX3RvcCA9IHZhbHVlOworICAgIH0KK30KKworRnJhY3Rpb25hbExheW91dFVuaXQm
IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6Om11dGFibGVMb2dpY2FsTGVmdChXcml0aW5nTW9k
ZSB3cml0aW5nTW9kZSkKK3sKKyAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3Jp
dGluZ01vZGUpID8gbV9sZWZ0IDogbV90b3A7Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRVbml0JiBG
cmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjptdXRhYmxlTG9naWNhbFJpZ2h0KFdyaXRpbmdNb2Rl
IHdyaXRpbmdNb2RlKQoreworICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0
aW5nTW9kZSkgPyBtX3JpZ2h0IDogbV9ib3R0b207Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRVbml0
JiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjptdXRhYmxlQmVmb3JlKFdyaXRpbmdNb2RlIHdy
aXRpbmdNb2RlKQoreworICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5n
TW9kZSkgPyAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9ib3R0
b20gOiBtX3RvcCkgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9yaWdo
dDogbV9sZWZ0KTsKK30KKworRnJhY3Rpb25hbExheW91dFVuaXQmIEZyYWN0aW9uYWxMYXlvdXRC
b3hFeHRlbnQ6Om11dGFibGVBZnRlcihXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKK3sKKyAgICBy
ZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gKGlzRmxpcHBlZEJs
b2Nrc1dyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fdG9wIDogbV9ib3R0b20pIDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlzRmxpcHBlZEJs
b2Nrc1dyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fbGVmdDogbV9yaWdodCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0xheW91dEJveEV4dGVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50LmNwcAkocmV2aXNpb24gMTMzNTE3KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjksMzEgKzI5LDMxIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuaCIKKyNpbmNsdWRlICJMYXlv
dXRCb3hFeHRlbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GcmFjdGlvbmFsTGF5b3V0
VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Ojpsb2dpY2FsVG9wKFdyaXRpbmdNb2RlIHdy
aXRpbmdNb2RlKSBjb25zdAorTGF5b3V0VW5pdCBMYXlvdXRCb3hFeHRlbnQ6OmxvZ2ljYWxUb3Ao
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fdG9wIDogbV9sZWZ0OwogfQogCi1GcmFjdGlv
bmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Ojpsb2dpY2FsQm90dG9tKFdy
aXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAorTGF5b3V0VW5pdCBMYXlvdXRCb3hFeHRlbnQ6
OmxvZ2ljYWxCb3R0b20oV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fYm90dG9tIDogbV9y
aWdodDsKIH0KIAotRnJhY3Rpb25hbExheW91dFVuaXQgRnJhY3Rpb25hbExheW91dEJveEV4dGVu
dDo6bG9naWNhbExlZnQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0CitMYXlvdXRVbml0
IExheW91dEJveEV4dGVudDo6bG9naWNhbExlZnQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/
IG1fbGVmdCA6IG1fdG9wOwogfQogCi1GcmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5
b3V0Qm94RXh0ZW50Ojpsb2dpY2FsUmlnaHQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0
CitMYXlvdXRVbml0IExheW91dEJveEV4dGVudDo6bG9naWNhbFJpZ2h0KFdyaXRpbmdNb2RlIHdy
aXRpbmdNb2RlKSBjb25zdAogewogICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3
cml0aW5nTW9kZSkgPyBtX3JpZ2h0IDogbV9ib3R0b207CiB9CiAKLUZyYWN0aW9uYWxMYXlvdXRV
bml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmJlZm9yZShXcml0aW5nTW9kZSB3cml0aW5n
TW9kZSkgY29uc3QKK0xheW91dFVuaXQgTGF5b3V0Qm94RXh0ZW50OjpiZWZvcmUoV3JpdGluZ01v
ZGUgd3JpdGluZ01vZGUpIGNvbnN0CiB7CiAgICAgc3dpdGNoICh3cml0aW5nTW9kZSkgewogICAg
IGNhc2UgVG9wVG9Cb3R0b21Xcml0aW5nTW9kZToKQEAgLTY5LDcgKzY5LDcgQEAgRnJhY3Rpb25h
bExheW91dFVuaXQgRnJhY3Rpb25hbExheW91dEJveAogICAgIHJldHVybiBtX3RvcDsKIH0KIAot
RnJhY3Rpb25hbExheW91dFVuaXQgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6YWZ0ZXIoV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0CitMYXlvdXRVbml0IExheW91dEJveEV4dGVudDo6
YWZ0ZXIoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0CiB7CiAgICAgc3dpdGNoICh3cml0
aW5nTW9kZSkgewogICAgIGNhc2UgVG9wVG9Cb3R0b21Xcml0aW5nTW9kZToKQEAgLTg1LDIxICs4
NSwyMSBAQCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94CiAgICAgcmV0
dXJuIG1fYm90dG9tOwogfQogCi1GcmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0
Qm94RXh0ZW50OjpzdGFydChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBk
aXJlY3Rpb24pIGNvbnN0CitMYXlvdXRVbml0IExheW91dEJveEV4dGVudDo6c3RhcnQoV3JpdGlu
Z01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdAogewogICAg
IGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpCiAgICAgICAgIHJldHVy
biBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKGRpcmVjdGlvbikgPyBtX2xlZnQgOiBtX3JpZ2h0Owog
ICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKGRpcmVjdGlvbikgPyBtX3RvcCA6IG1f
Ym90dG9tOwogfQogCi1GcmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0
ZW50OjplbmQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9u
KSBjb25zdAorTGF5b3V0VW5pdCBMYXlvdXRCb3hFeHRlbnQ6OmVuZChXcml0aW5nTW9kZSB3cml0
aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0CiB7CiAgICAgaWYgKGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkKICAgICAgICAgcmV0dXJuIGlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSA/IG1fcmlnaHQgOiBtX2xlZnQ7CiAgICAgcmV0dXJu
IGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSA/IG1fYm90dG9tIDogbV90b3A7CiB9
CiAKLXZvaWQgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6c2V0QmVmb3JlKFdyaXRpbmdNb2Rl
IHdyaXRpbmdNb2RlLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCB2YWx1ZSkKK3ZvaWQgTGF5b3V0Qm94
RXh0ZW50OjpzZXRCZWZvcmUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIExheW91dFVuaXQgdmFs
dWUpCiB7CiAgICAgc3dpdGNoICh3cml0aW5nTW9kZSkgewogICAgIGNhc2UgVG9wVG9Cb3R0b21X
cml0aW5nTW9kZToKQEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lkIEZyYWN0aW9uYWxMYXlvdXRCb3hF
eHRlbnQ6OnNldEJlZm9yCiAgICAgfQogfQogCi12b2lkIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRl
bnQ6OnNldEFmdGVyKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCB2YWx1ZSkKK3ZvaWQgTGF5b3V0Qm94RXh0ZW50OjpzZXRBZnRlcihXcml0aW5nTW9kZSB3cml0
aW5nTW9kZSwgTGF5b3V0VW5pdCB2YWx1ZSkKIHsKICAgICBzd2l0Y2ggKHdyaXRpbmdNb2RlKSB7
CiAgICAgY2FzZSBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlOgpAQCAtMTQxLDcgKzE0MSw3IEBAIHZv
aWQgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6c2V0QWZ0ZXIKICAgICB9CiB9CiAKLXZvaWQg
RnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6c2V0U3RhcnQoV3JpdGluZ01vZGUgd3JpdGluZ01v
ZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCB2YWx1ZSkK
K3ZvaWQgTGF5b3V0Qm94RXh0ZW50OjpzZXRTdGFydChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwg
VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIExheW91dFVuaXQgdmFsdWUpCiB7CiAgICAgaWYgKGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkgewogICAgICAgICBpZiAoaXNMZWZ0
VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24pKQpAQCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQgRnJh
Y3Rpb25hbExheW91dEJveEV4dGVudDo6c2V0U3RhcnQKICAgICB9CiB9CiAKLXZvaWQgRnJhY3Rp
b25hbExheW91dEJveEV4dGVudDo6c2V0RW5kKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbiwgRnJhY3Rpb25hbExheW91dFVuaXQgdmFsdWUpCit2b2lkIExh
eW91dEJveEV4dGVudDo6c2V0RW5kKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbiwgTGF5b3V0VW5pdCB2YWx1ZSkKIHsKICAgICBpZiAoaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUod3JpdGluZ01vZGUpKSB7CiAgICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKGRpcmVjdGlvbikpCkBAIC0xNzEsMjMgKzE3MSwyMyBAQCB2b2lkIEZyYWN0aW9uYWxM
YXlvdXRCb3hFeHRlbnQ6OnNldEVuZChXCiAgICAgfQogfQogCi1GcmFjdGlvbmFsTGF5b3V0VW5p
dCYgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6bXV0YWJsZUxvZ2ljYWxMZWZ0KFdyaXRpbmdN
b2RlIHdyaXRpbmdNb2RlKQorTGF5b3V0VW5pdCYgTGF5b3V0Qm94RXh0ZW50OjptdXRhYmxlTG9n
aWNhbExlZnQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCiB7CiAgICAgcmV0dXJuIGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fbGVmdCA6IG1fdG9wOwogfQogCi1GcmFj
dGlvbmFsTGF5b3V0VW5pdCYgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6bXV0YWJsZUxvZ2lj
YWxSaWdodChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKK0xheW91dFVuaXQmIExheW91dEJveEV4
dGVudDo6bXV0YWJsZUxvZ2ljYWxSaWdodChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKIHsKICAg
ICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9yaWdodCA6
IG1fYm90dG9tOwogfQogCi1GcmFjdGlvbmFsTGF5b3V0VW5pdCYgRnJhY3Rpb25hbExheW91dEJv
eEV4dGVudDo6bXV0YWJsZUJlZm9yZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKK0xheW91dFVu
aXQmIExheW91dEJveEV4dGVudDo6bXV0YWJsZUJlZm9yZShXcml0aW5nTW9kZSB3cml0aW5nTW9k
ZSkKIHsKICAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8g
KGlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fYm90dG9tIDogbV90
b3ApIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fcmlnaHQ6IG1fbGVm
dCk7CiB9CiAKLUZyYWN0aW9uYWxMYXlvdXRVbml0JiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50
OjptdXRhYmxlQWZ0ZXIoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCitMYXlvdXRVbml0JiBMYXlv
dXRCb3hFeHRlbnQ6Om11dGFibGVBZnRlcihXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKIHsKICAg
ICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gKGlzRmxpcHBl
ZEJsb2Nrc1dyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fdG9wIDogbV9ib3R0b20pIDoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlzRmxpcHBl
ZEJsb2Nrc1dyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fbGVmdDogbV9yaWdodCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRCb3hFeHRlbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRCb3hFeHRl
bnQuaAkocmV2aXNpb24gMTMzNTE3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Lmg6MTMzNTE3KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnRfaAorI2RlZmlu
ZSBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50X2gKKworI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlv
dXRVbml0LmgiCisjaW5jbHVkZSAiVGV4dERpcmVjdGlvbi5oIgorI2luY2x1ZGUgIldyaXRpbmdN
b2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRnJhY3Rpb25hbExheW91dEJv
eEV4dGVudCB7CitwdWJsaWM6CisgICAgRnJhY3Rpb25hbExheW91dEJveEV4dGVudCgpIDogbV90
b3AoMCksIG1fcmlnaHQoMCksIG1fYm90dG9tKDApLCBtX2xlZnQoMCkgeyB9CisgICAgRnJhY3Rp
b25hbExheW91dEJveEV4dGVudChGcmFjdGlvbmFsTGF5b3V0VW5pdCB0b3AsIEZyYWN0aW9uYWxM
YXlvdXRVbml0IHJpZ2h0LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBib3R0b20sIEZyYWN0aW9uYWxM
YXlvdXRVbml0IGxlZnQpCisgICAgICAgIDogbV90b3AodG9wKSwgbV9yaWdodChyaWdodCksIG1f
Ym90dG9tKGJvdHRvbSksIG1fbGVmdChsZWZ0KSB7IH0KKworICAgIGlubGluZSBGcmFjdGlvbmFs
TGF5b3V0VW5pdCB0b3AoKSBjb25zdCB7IHJldHVybiBtX3RvcDsgfQorICAgIGlubGluZSBGcmFj
dGlvbmFsTGF5b3V0VW5pdCByaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fcmlnaHQ7IH0KKyAgICBp
bmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgYm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9ib3R0
b207IH0KKyAgICBpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgbGVmdCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGVmdDsgfQorCisgICAgaW5saW5lIHZvaWQgc2V0VG9wKEZyYWN0aW9uYWxMYXlvdXRV
bml0IHZhbHVlKSB7IG1fdG9wID0gdmFsdWU7IH0KKyAgICBpbmxpbmUgdm9pZCBzZXRSaWdodChG
cmFjdGlvbmFsTGF5b3V0VW5pdCB2YWx1ZSkgeyBtX3JpZ2h0ID0gdmFsdWU7IH0KKyAgICBpbmxp
bmUgdm9pZCBzZXRCb3R0b20oRnJhY3Rpb25hbExheW91dFVuaXQgdmFsdWUpIHsgbV9ib3R0b20g
PSB2YWx1ZTsgfQorICAgIGlubGluZSB2b2lkIHNldExlZnQoRnJhY3Rpb25hbExheW91dFVuaXQg
dmFsdWUpIHsgbV9sZWZ0ID0gdmFsdWU7IH0KKworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGxv
Z2ljYWxUb3AoV3JpdGluZ01vZGUpIGNvbnN0OworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGxv
Z2ljYWxCb3R0b20oV3JpdGluZ01vZGUpIGNvbnN0OworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
IGxvZ2ljYWxMZWZ0KFdyaXRpbmdNb2RlKSBjb25zdDsKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBsb2dpY2FsUmlnaHQoV3JpdGluZ01vZGUpIGNvbnN0OworCisgICAgRnJhY3Rpb25hbExheW91
dFVuaXQgYmVmb3JlKFdyaXRpbmdNb2RlKSBjb25zdDsKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBhZnRlcihXcml0aW5nTW9kZSkgY29uc3Q7CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgc3Rh
cnQoV3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24pIGNvbnN0OworICAgIEZyYWN0aW9uYWxMYXlv
dXRVbml0IGVuZChXcml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbikgY29uc3Q7CisKKyAgICB2b2lk
IHNldEJlZm9yZShXcml0aW5nTW9kZSwgRnJhY3Rpb25hbExheW91dFVuaXQpOworICAgIHZvaWQg
c2V0QWZ0ZXIoV3JpdGluZ01vZGUsIEZyYWN0aW9uYWxMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNl
dFN0YXJ0KFdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCk7
CisgICAgdm9pZCBzZXRFbmQoV3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24sIEZyYWN0aW9uYWxM
YXlvdXRVbml0KTsKKworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBtdXRhYmxlTG9naWNhbExl
ZnQoV3JpdGluZ01vZGUpOworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBtdXRhYmxlTG9naWNh
bFJpZ2h0KFdyaXRpbmdNb2RlKTsKKworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBtdXRhYmxl
QmVmb3JlKFdyaXRpbmdNb2RlKTsKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgbXV0YWJsZUFm
dGVyKFdyaXRpbmdNb2RlKTsKKworcHJpdmF0ZToKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBt
X3RvcDsKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtX3JpZ2h0OworICAgIEZyYWN0aW9uYWxM
YXlvdXRVbml0IG1fYm90dG9tOworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1fbGVmdDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEZyYWN0aW9uYWxMYXlvdXRC
b3hFeHRlbnRfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0
Qm94RXh0ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvTGF5b3V0Qm94RXh0ZW50LmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dEJveEV4dGVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw1OSArMjgsNTkgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBGcmFjdGlvbmFs
TGF5b3V0Qm94RXh0ZW50X2gKLSNkZWZpbmUgRnJhY3Rpb25hbExheW91dEJveEV4dGVudF9oCisj
aWZuZGVmIExheW91dEJveEV4dGVudF9oCisjZGVmaW5lIExheW91dEJveEV4dGVudF9oCiAKLSNp
bmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0VW5pdC5oIgorI2luY2x1ZGUgIkxheW91dFVuaXQuaCIK
ICNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiV3JpdGluZ01vZGUuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50IHsK
K2NsYXNzIExheW91dEJveEV4dGVudCB7CiBwdWJsaWM6Ci0gICAgRnJhY3Rpb25hbExheW91dEJv
eEV4dGVudCgpIDogbV90b3AoMCksIG1fcmlnaHQoMCksIG1fYm90dG9tKDApLCBtX2xlZnQoMCkg
eyB9Ci0gICAgRnJhY3Rpb25hbExheW91dEJveEV4dGVudChGcmFjdGlvbmFsTGF5b3V0VW5pdCB0
b3AsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJpZ2h0LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBib3R0
b20sIEZyYWN0aW9uYWxMYXlvdXRVbml0IGxlZnQpCisgICAgTGF5b3V0Qm94RXh0ZW50KCkgOiBt
X3RvcCgwKSwgbV9yaWdodCgwKSwgbV9ib3R0b20oMCksIG1fbGVmdCgwKSB7IH0KKyAgICBMYXlv
dXRCb3hFeHRlbnQoTGF5b3V0VW5pdCB0b3AsIExheW91dFVuaXQgcmlnaHQsIExheW91dFVuaXQg
Ym90dG9tLCBMYXlvdXRVbml0IGxlZnQpCiAgICAgICAgIDogbV90b3AodG9wKSwgbV9yaWdodChy
aWdodCksIG1fYm90dG9tKGJvdHRvbSksIG1fbGVmdChsZWZ0KSB7IH0KIAotICAgIGlubGluZSBG
cmFjdGlvbmFsTGF5b3V0VW5pdCB0b3AoKSBjb25zdCB7IHJldHVybiBtX3RvcDsgfQotICAgIGlu
bGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCByaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fcmlnaHQ7
IH0KLSAgICBpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgYm90dG9tKCkgY29uc3QgeyByZXR1
cm4gbV9ib3R0b207IH0KLSAgICBpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgbGVmdCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGVmdDsgfQotCi0gICAgaW5saW5lIHZvaWQgc2V0VG9wKEZyYWN0aW9u
YWxMYXlvdXRVbml0IHZhbHVlKSB7IG1fdG9wID0gdmFsdWU7IH0KLSAgICBpbmxpbmUgdm9pZCBz
ZXRSaWdodChGcmFjdGlvbmFsTGF5b3V0VW5pdCB2YWx1ZSkgeyBtX3JpZ2h0ID0gdmFsdWU7IH0K
LSAgICBpbmxpbmUgdm9pZCBzZXRCb3R0b20oRnJhY3Rpb25hbExheW91dFVuaXQgdmFsdWUpIHsg
bV9ib3R0b20gPSB2YWx1ZTsgfQotICAgIGlubGluZSB2b2lkIHNldExlZnQoRnJhY3Rpb25hbExh
eW91dFVuaXQgdmFsdWUpIHsgbV9sZWZ0ID0gdmFsdWU7IH0KLQotICAgIEZyYWN0aW9uYWxMYXlv
dXRVbml0IGxvZ2ljYWxUb3AoV3JpdGluZ01vZGUpIGNvbnN0OwotICAgIEZyYWN0aW9uYWxMYXlv
dXRVbml0IGxvZ2ljYWxCb3R0b20oV3JpdGluZ01vZGUpIGNvbnN0OwotICAgIEZyYWN0aW9uYWxM
YXlvdXRVbml0IGxvZ2ljYWxMZWZ0KFdyaXRpbmdNb2RlKSBjb25zdDsKLSAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQoV3JpdGluZ01vZGUpIGNvbnN0OwotCi0gICAgRnJhY3Rp
b25hbExheW91dFVuaXQgYmVmb3JlKFdyaXRpbmdNb2RlKSBjb25zdDsKLSAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBhZnRlcihXcml0aW5nTW9kZSkgY29uc3Q7Ci0gICAgRnJhY3Rpb25hbExheW91
dFVuaXQgc3RhcnQoV3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24pIGNvbnN0OwotICAgIEZyYWN0
aW9uYWxMYXlvdXRVbml0IGVuZChXcml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbikgY29uc3Q7Ci0K
LSAgICB2b2lkIHNldEJlZm9yZShXcml0aW5nTW9kZSwgRnJhY3Rpb25hbExheW91dFVuaXQpOwot
ICAgIHZvaWQgc2V0QWZ0ZXIoV3JpdGluZ01vZGUsIEZyYWN0aW9uYWxMYXlvdXRVbml0KTsKLSAg
ICB2b2lkIHNldFN0YXJ0KFdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uLCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCk7Ci0gICAgdm9pZCBzZXRFbmQoV3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24sIEZy
YWN0aW9uYWxMYXlvdXRVbml0KTsKKyAgICBpbmxpbmUgTGF5b3V0VW5pdCB0b3AoKSBjb25zdCB7
IHJldHVybiBtX3RvcDsgfQorICAgIGlubGluZSBMYXlvdXRVbml0IHJpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gbV9yaWdodDsgfQorICAgIGlubGluZSBMYXlvdXRVbml0IGJvdHRvbSgpIGNvbnN0IHsg
cmV0dXJuIG1fYm90dG9tOyB9CisgICAgaW5saW5lIExheW91dFVuaXQgbGVmdCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGVmdDsgfQorCisgICAgaW5saW5lIHZvaWQgc2V0VG9wKExheW91dFVuaXQgdmFs
dWUpIHsgbV90b3AgPSB2YWx1ZTsgfQorICAgIGlubGluZSB2b2lkIHNldFJpZ2h0KExheW91dFVu
aXQgdmFsdWUpIHsgbV9yaWdodCA9IHZhbHVlOyB9CisgICAgaW5saW5lIHZvaWQgc2V0Qm90dG9t
KExheW91dFVuaXQgdmFsdWUpIHsgbV9ib3R0b20gPSB2YWx1ZTsgfQorICAgIGlubGluZSB2b2lk
IHNldExlZnQoTGF5b3V0VW5pdCB2YWx1ZSkgeyBtX2xlZnQgPSB2YWx1ZTsgfQorCisgICAgTGF5
b3V0VW5pdCBsb2dpY2FsVG9wKFdyaXRpbmdNb2RlKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGxv
Z2ljYWxCb3R0b20oV3JpdGluZ01vZGUpIGNvbnN0OworICAgIExheW91dFVuaXQgbG9naWNhbExl
ZnQoV3JpdGluZ01vZGUpIGNvbnN0OworICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0KFdyaXRp
bmdNb2RlKSBjb25zdDsKKworICAgIExheW91dFVuaXQgYmVmb3JlKFdyaXRpbmdNb2RlKSBjb25z
dDsKKyAgICBMYXlvdXRVbml0IGFmdGVyKFdyaXRpbmdNb2RlKSBjb25zdDsKKyAgICBMYXlvdXRV
bml0IHN0YXJ0KFdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uKSBjb25zdDsKKyAgICBMYXlvdXRV
bml0IGVuZChXcml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbikgY29uc3Q7CisKKyAgICB2b2lkIHNl
dEJlZm9yZShXcml0aW5nTW9kZSwgTGF5b3V0VW5pdCk7CisgICAgdm9pZCBzZXRBZnRlcihXcml0
aW5nTW9kZSwgTGF5b3V0VW5pdCk7CisgICAgdm9pZCBzZXRTdGFydChXcml0aW5nTW9kZSwgVGV4
dERpcmVjdGlvbiwgTGF5b3V0VW5pdCk7CisgICAgdm9pZCBzZXRFbmQoV3JpdGluZ01vZGUsIFRl
eHREaXJlY3Rpb24sIExheW91dFVuaXQpOwogCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQmIG11
dGFibGVMb2dpY2FsTGVmdChXcml0aW5nTW9kZSk7Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQm
IG11dGFibGVMb2dpY2FsUmlnaHQoV3JpdGluZ01vZGUpOworICAgIExheW91dFVuaXQmIG11dGFi
bGVMb2dpY2FsTGVmdChXcml0aW5nTW9kZSk7CisgICAgTGF5b3V0VW5pdCYgbXV0YWJsZUxvZ2lj
YWxSaWdodChXcml0aW5nTW9kZSk7CiAKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgbXV0YWJs
ZUJlZm9yZShXcml0aW5nTW9kZSk7Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQmIG11dGFibGVB
ZnRlcihXcml0aW5nTW9kZSk7CisgICAgTGF5b3V0VW5pdCYgbXV0YWJsZUJlZm9yZShXcml0aW5n
TW9kZSk7CisgICAgTGF5b3V0VW5pdCYgbXV0YWJsZUFmdGVyKFdyaXRpbmdNb2RlKTsKIAogcHJp
dmF0ZToKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtX3RvcDsKLSAgICBGcmFjdGlvbmFsTGF5
b3V0VW5pdCBtX3JpZ2h0OwotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1fYm90dG9tOwotICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0IG1fbGVmdDsKKyAgICBMYXlvdXRVbml0IG1fdG9wOworICAg
IExheW91dFVuaXQgbV9yaWdodDsKKyAgICBMYXlvdXRVbml0IG1fYm90dG9tOworICAgIExheW91
dFVuaXQgbV9sZWZ0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8g
RnJhY3Rpb25hbExheW91dEJveEV4dGVudF9oCisjZW5kaWYgLy8gTGF5b3V0Qm94RXh0ZW50X2gK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFBvaW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UG9pbnQu
aAkocmV2aXNpb24gMTMzNTE3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GcmFjdGlvbmFsTGF5b3V0UG9pbnQuaDoxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9MYXlvdXRQb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTky
IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgRnJhY3Rpb25hbExheW91dFBvaW50X2gKKyNkZWZpbmUgRnJhY3Rpb25hbExh
eW91dFBvaW50X2gKKworI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGcmFjdGlv
bmFsTGF5b3V0U2l6ZS5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKKyNpZiBQTEFU
Rk9STShRVCkKKyNpbmNsdWRlIDxxZ2xvYmFsLmg+CitRVF9CRUdJTl9OQU1FU1BBQ0UKK2NsYXNz
IFFQb2ludDsKK2NsYXNzIFFQb2ludEY7CitRVF9FTkRfTkFNRVNQQUNFCisjZW5kaWYKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgeworcHVibGlj
OgorICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCgpIDogbV94KDApLCBtX3koMCkgeyB9CisgICAg
RnJhY3Rpb25hbExheW91dFBvaW50KEZyYWN0aW9uYWxMYXlvdXRVbml0IHgsIEZyYWN0aW9uYWxM
YXlvdXRVbml0IHkpIDogbV94KHgpLCBtX3koeSkgeyB9CisgICAgRnJhY3Rpb25hbExheW91dFBv
aW50KGNvbnN0IEludFBvaW50JiBwb2ludCkgOiBtX3gocG9pbnQueCgpKSwgbV95KHBvaW50Lnko
KSkgeyB9CisgICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFBvaW50KGNvbnN0IEZsb2F0UG9p
bnQmIHNpemUpIDogbV94KHNpemUueCgpKSwgbV95KHNpemUueSgpKSB7IH0KKyAgICBleHBsaWNp
dCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUp
IDogbV94KHNpemUud2lkdGgoKSksIG1feShzaXplLmhlaWdodCgpKSB7IH0KKworICAgIHN0YXRp
YyBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgemVybygpIHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCgpOyB9CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB4KCkgY29uc3QgeyByZXR1cm4g
bV94OyB9CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsg
fQorCisgICAgdm9pZCBzZXRYKEZyYWN0aW9uYWxMYXlvdXRVbml0IHgpIHsgbV94ID0geDsgfQor
ICAgIHZvaWQgc2V0WShGcmFjdGlvbmFsTGF5b3V0VW5pdCB5KSB7IG1feSA9IHk7IH0KKworICAg
IHZvaWQgbW92ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgcykgeyBtb3ZlKHMud2lkdGgo
KSwgcy5oZWlnaHQoKSk7IH0gCisgICAgdm9pZCBtb3ZlQnkoY29uc3QgRnJhY3Rpb25hbExheW91
dFBvaW50JiBvZmZzZXQpIHsgbW92ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsgfQorICAgIHZv
aWQgbW92ZShGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeCwgRnJhY3Rpb25hbExheW91dFVuaXQgZHkp
IHsgbV94ICs9IGR4OyBtX3kgKz0gZHk7IH0KKyAgICB2b2lkIHNjYWxlKGZsb2F0IHN4LCBmbG9h
dCBzeSkKKyAgICB7CisgICAgICAgIG1feCAqPSBzeDsKKyAgICAgICAgbV95ICo9IHN5OworICAg
IH0KKyAgICAKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgZXhwYW5kZWRUbyhjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEZy
YWN0aW9uYWxMYXlvdXRQb2ludChzdGQ6Om1heChtX3gsIG90aGVyLm1feCksIHN0ZDo6bWF4KG1f
eSwgb3RoZXIubV95KSk7CisgICAgfQorCisgICAgRnJhY3Rpb25hbExheW91dFBvaW50IHNocnVu
a1RvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KHN0ZDo6bWluKG1feCwgb3RoZXIubV94
KSwgc3RkOjptaW4obV95LCBvdGhlci5tX3kpKTsKKyAgICB9CisKKyAgICB2b2lkIGNsYW1wTmVn
YXRpdmVUb1plcm8oKQorICAgIHsKKyAgICAgICAgKnRoaXMgPSBleHBhbmRlZFRvKHplcm8oKSk7
CisgICAgfQorCisgICAgRnJhY3Rpb25hbExheW91dFBvaW50IHRyYW5zcG9zZWRQb2ludCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KG1feSwgbV94
KTsKKyAgICB9CisKKyNpZiBQTEFURk9STShRVCkKKyAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQoY29uc3QgUVBvaW50Jik7CisgICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFBv
aW50KGNvbnN0IFFQb2ludEYmKTsKKyAgICBvcGVyYXRvciBRUG9pbnRGKCkgY29uc3Q7CisjZW5k
aWYKKworcHJpdmF0ZToKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtX3gsIG1feTsKK307CisK
K2lubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIG9wZXJhdG9yKz0oRnJhY3Rpb25hbExheW91
dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK3sKKyAgICBhLm1vdmUo
Yi53aWR0aCgpLCBiLmhlaWdodCgpKTsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEZyYWN0
aW9uYWxMYXlvdXRQb2ludCYgb3BlcmF0b3ItPShGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQoreworICAgIGEubW92ZSgtYi53aWR0aCgpLCAt
Yi5oZWlnaHQoKSk7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFNpemUmIGIpCit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2lu
dChhLngoKSArIGIud2lkdGgoKSwgYS55KCkgKyBiLmhlaWdodCgpKTsKK30KKworaW5saW5lIEZy
YWN0aW9uYWxMYXlvdXRQb2ludCBvcGVyYXRvcisoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50
JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGIpCit7CisgICAgcmV0dXJuIEZyYWN0
aW9uYWxMYXlvdXRQb2ludChhLngoKSArIGIueCgpLCBhLnkoKSArIGIueSgpKTsKK30KKworaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplIG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYikKK3sKKyAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFNpemUoYS54KCkgLSBiLngoKSwgYS55KCkgLSBiLnkoKSk7Cit9CisK
K2lubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCit7CisgICAgcmV0
dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChhLngoKSAtIGIud2lkdGgoKSwgYS55KCkgLSBiLmhl
aWdodCgpKTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBvcGVyYXRvci0oY29u
c3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBwb2ludCkKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25h
bExheW91dFBvaW50KC1wb2ludC54KCksIC1wb2ludC55KCkpOworfQorCitpbmxpbmUgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25h
bExheW91dFBvaW50JiBiKQoreworICAgIHJldHVybiBhLngoKSA9PSBiLngoKSAmJiBhLnkoKSA9
PSBiLnkoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYikKK3sKKyAgICByZXR1
cm4gYS54KCkgIT0gYi54KCkgfHwgYS55KCkgIT0gYi55KCk7Cit9CisKK2lubGluZSBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQgdG9Qb2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkK
K3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSk7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSB0b1NpemUoY29uc3Qg
RnJhY3Rpb25hbExheW91dFBvaW50JiBhKQoreworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0
U2l6ZShhLngoKSwgYS55KCkpOworfQorCitpbmxpbmUgSW50UG9pbnQgZmxvb3JlZEludFBvaW50
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcG9pbnQpCit7CisgICAgcmV0dXJuIEludFBv
aW50KHBvaW50LngoKS5mbG9vcigpLCBwb2ludC55KCkuZmxvb3IoKSk7Cit9CisKK2lubGluZSBJ
bnRQb2ludCByb3VuZGVkSW50UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBwb2lu
dCkKK3sKKyAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpLnJvdW5kKCksIHBvaW50LnkoKS5y
b3VuZCgpKTsKK30KKworaW5saW5lIEludFBvaW50IHJvdW5kZWRJbnRQb2ludChjb25zdCBGcmFj
dGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkKK3sKKyAgICByZXR1cm4gSW50UG9pbnQoc2l6ZS53aWR0
aCgpLnJvdW5kKCksIHNpemUuaGVpZ2h0KCkucm91bmQoKSk7Cit9CisKK2lubGluZSBJbnRQb2lu
dCBjZWlsZWRJbnRQb2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50KQorewor
ICAgIHJldHVybiBJbnRQb2ludChwb2ludC54KCkuY2VpbCgpLCBwb2ludC55KCkuY2VpbCgpKTsK
K30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBmbG9vcmVkRnJhY3Rpb25hbExheW91
dFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlv
dXRQb2ludChGcmFjdGlvbmFsTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Rmxvb3IocC54KCkpLCBGcmFj
dGlvbmFsTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Rmxvb3IocC55KCkpKTsKK30KKworaW5saW5lIEZy
YWN0aW9uYWxMYXlvdXRQb2ludCBjZWlsZWRGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgRmxv
YXRQb2ludCYgcCkKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KEZyYWN0aW9u
YWxMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKHAueCgpKSwgRnJhY3Rpb25hbExheW91dFVuaXQ6
OmZyb21GbG9hdENlaWwocC55KCkpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRnJhY3Rpb25hbExheW91dFBvaW50X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0xheW91dFBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UG9pbnQuaAkocmV2aXNpb24gMTMzNTE3KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UG9pbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsMTEgKzI4LDExIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYg
RnJhY3Rpb25hbExheW91dFBvaW50X2gKLSNkZWZpbmUgRnJhY3Rpb25hbExheW91dFBvaW50X2gK
KyNpZm5kZWYgTGF5b3V0UG9pbnRfaAorI2RlZmluZSBMYXlvdXRQb2ludF9oCiAKICNpbmNsdWRl
ICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFNpemUuaCIKKyNpbmNs
dWRlICJMYXlvdXRTaXplLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogI2lmIFBM
QVRGT1JNKFFUKQpAQCAtNDUsMzkgKzQ1LDM5IEBAIFFUX0VORF9OQU1FU1BBQ0UKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgeworY2xhc3MgTGF5
b3V0UG9pbnQgewogcHVibGljOgotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCgpIDogbV94KDAp
LCBtX3koMCkgeyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFBvaW50KEZyYWN0aW9uYWxMYXlvdXRV
bml0IHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHkpIDogbV94KHgpLCBtX3koeSkgeyB9Ci0gICAg
RnJhY3Rpb25hbExheW91dFBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkgOiBtX3gocG9pbnQu
eCgpKSwgbV95KHBvaW50LnkoKSkgeyB9Ci0gICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFBv
aW50KGNvbnN0IEZsb2F0UG9pbnQmIHNpemUpIDogbV94KHNpemUueCgpKSwgbV95KHNpemUueSgp
KSB7IH0KLSAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgRnJhY3Rpb25h
bExheW91dFNpemUmIHNpemUpIDogbV94KHNpemUud2lkdGgoKSksIG1feShzaXplLmhlaWdodCgp
KSB7IH0KLQotICAgIHN0YXRpYyBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgemVybygpIHsgcmV0dXJu
IEZyYWN0aW9uYWxMYXlvdXRQb2ludCgpOyB9Ci0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB4
KCkgY29uc3QgeyByZXR1cm4gbV94OyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgeSgpIGNv
bnN0IHsgcmV0dXJuIG1feTsgfQotCi0gICAgdm9pZCBzZXRYKEZyYWN0aW9uYWxMYXlvdXRVbml0
IHgpIHsgbV94ID0geDsgfQotICAgIHZvaWQgc2V0WShGcmFjdGlvbmFsTGF5b3V0VW5pdCB5KSB7
IG1feSA9IHk7IH0KLQotICAgIHZvaWQgbW92ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYg
cykgeyBtb3ZlKHMud2lkdGgoKSwgcy5oZWlnaHQoKSk7IH0gCi0gICAgdm9pZCBtb3ZlQnkoY29u
c3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBvZmZzZXQpIHsgbW92ZShvZmZzZXQueCgpLCBvZmZz
ZXQueSgpKTsgfQotICAgIHZvaWQgbW92ZShGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeCwgRnJhY3Rp
b25hbExheW91dFVuaXQgZHkpIHsgbV94ICs9IGR4OyBtX3kgKz0gZHk7IH0KKyAgICBMYXlvdXRQ
b2ludCgpIDogbV94KDApLCBtX3koMCkgeyB9CisgICAgTGF5b3V0UG9pbnQoTGF5b3V0VW5pdCB4
LCBMYXlvdXRVbml0IHkpIDogbV94KHgpLCBtX3koeSkgeyB9CisgICAgTGF5b3V0UG9pbnQoY29u
c3QgSW50UG9pbnQmIHBvaW50KSA6IG1feChwb2ludC54KCkpLCBtX3kocG9pbnQueSgpKSB7IH0K
KyAgICBleHBsaWNpdCBMYXlvdXRQb2ludChjb25zdCBGbG9hdFBvaW50JiBzaXplKSA6IG1feChz
aXplLngoKSksIG1feShzaXplLnkoKSkgeyB9CisgICAgZXhwbGljaXQgTGF5b3V0UG9pbnQoY29u
c3QgTGF5b3V0U2l6ZSYgc2l6ZSkgOiBtX3goc2l6ZS53aWR0aCgpKSwgbV95KHNpemUuaGVpZ2h0
KCkpIHsgfQorCisgICAgc3RhdGljIExheW91dFBvaW50IHplcm8oKSB7IHJldHVybiBMYXlvdXRQ
b2ludCgpOyB9CisKKyAgICBMYXlvdXRVbml0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KKyAg
ICBMYXlvdXRVbml0IHkoKSBjb25zdCB7IHJldHVybiBtX3k7IH0KKworICAgIHZvaWQgc2V0WChM
YXlvdXRVbml0IHgpIHsgbV94ID0geDsgfQorICAgIHZvaWQgc2V0WShMYXlvdXRVbml0IHkpIHsg
bV95ID0geTsgfQorCisgICAgdm9pZCBtb3ZlKGNvbnN0IExheW91dFNpemUmIHMpIHsgbW92ZShz
LndpZHRoKCksIHMuaGVpZ2h0KCkpOyB9IAorICAgIHZvaWQgbW92ZUJ5KGNvbnN0IExheW91dFBv
aW50JiBvZmZzZXQpIHsgbW92ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsgfQorICAgIHZvaWQg
bW92ZShMYXlvdXRVbml0IGR4LCBMYXlvdXRVbml0IGR5KSB7IG1feCArPSBkeDsgbV95ICs9IGR5
OyB9CiAgICAgdm9pZCBzY2FsZShmbG9hdCBzeCwgZmxvYXQgc3kpCiAgICAgewogICAgICAgICBt
X3ggKj0gc3g7CiAgICAgICAgIG1feSAqPSBzeTsKICAgICB9CiAgICAgCi0gICAgRnJhY3Rpb25h
bExheW91dFBvaW50IGV4cGFuZGVkVG8oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBvdGhl
cikgY29uc3QKKyAgICBMYXlvdXRQb2ludCBleHBhbmRlZFRvKGNvbnN0IExheW91dFBvaW50JiBv
dGhlcikgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQo
c3RkOjptYXgobV94LCBvdGhlci5tX3gpLCBzdGQ6Om1heChtX3ksIG90aGVyLm1feSkpOworICAg
ICAgICByZXR1cm4gTGF5b3V0UG9pbnQoc3RkOjptYXgobV94LCBvdGhlci5tX3gpLCBzdGQ6Om1h
eChtX3ksIG90aGVyLm1feSkpOwogICAgIH0KIAotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBz
aHJ1bmtUbyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIG90aGVyKSBjb25zdAorICAgIExh
eW91dFBvaW50IHNocnVua1RvKGNvbnN0IExheW91dFBvaW50JiBvdGhlcikgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoc3RkOjptaW4obV94LCBvdGhl
ci5tX3gpLCBzdGQ6Om1pbihtX3ksIG90aGVyLm1feSkpOworICAgICAgICByZXR1cm4gTGF5b3V0
UG9pbnQoc3RkOjptaW4obV94LCBvdGhlci5tX3gpLCBzdGQ6Om1pbihtX3ksIG90aGVyLm1feSkp
OwogICAgIH0KIAogICAgIHZvaWQgY2xhbXBOZWdhdGl2ZVRvWmVybygpCkBAIC04NSwxMDggKzg1
LDEzOCBAQCBwdWJsaWM6CiAgICAgICAgICp0aGlzID0gZXhwYW5kZWRUbyh6ZXJvKCkpOwogICAg
IH0KIAotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCB0cmFuc3Bvc2VkUG9pbnQoKSBjb25zdAor
ICAgIExheW91dFBvaW50IHRyYW5zcG9zZWRQb2ludCgpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KG1feSwgbV94KTsKKyAgICAgICAgcmV0dXJuIExh
eW91dFBvaW50KG1feSwgbV94KTsKICAgICB9CiAKICNpZiBQTEFURk9STShRVCkKLSAgICBleHBs
aWNpdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgUVBvaW50Jik7Ci0gICAgZXhwbGljaXQg
RnJhY3Rpb25hbExheW91dFBvaW50KGNvbnN0IFFQb2ludEYmKTsKKyAgICBleHBsaWNpdCBMYXlv
dXRQb2ludChjb25zdCBRUG9pbnQmKTsKKyAgICBleHBsaWNpdCBMYXlvdXRQb2ludChjb25zdCBR
UG9pbnRGJik7CiAgICAgb3BlcmF0b3IgUVBvaW50RigpIGNvbnN0OwogI2VuZGlmCiAKIHByaXZh
dGU6Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgbV94LCBtX3k7CisgICAgTGF5b3V0VW5pdCBt
X3gsIG1feTsKIH07CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIG9wZXJhdG9yKz0o
RnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikK
K2lubGluZSBMYXlvdXRQb2ludCYgb3BlcmF0b3IrPShMYXlvdXRQb2ludCYgYSwgY29uc3QgTGF5
b3V0U2l6ZSYgYikKIHsKICAgICBhLm1vdmUoYi53aWR0aCgpLCBiLmhlaWdodCgpKTsKICAgICBy
ZXR1cm4gYTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgb3BlcmF0b3ItPShG
cmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQor
aW5saW5lIExheW91dFBvaW50JiBvcGVyYXRvci09KExheW91dFBvaW50JiBhLCBjb25zdCBMYXlv
dXRTaXplJiBiKQogewogICAgIGEubW92ZSgtYi53aWR0aCgpLCAtYi5oZWlnaHQoKSk7CiAgICAg
cmV0dXJuIGE7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgb3BlcmF0b3IrKGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUm
IGIpCitpbmxpbmUgTGF5b3V0UG9pbnQgb3BlcmF0b3IrKGNvbnN0IExheW91dFBvaW50JiBhLCBj
b25zdCBMYXlvdXRTaXplJiBiKQogewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQo
YS54KCkgKyBiLndpZHRoKCksIGEueSgpICsgYi5oZWlnaHQoKSk7CisgICAgcmV0dXJuIExheW91
dFBvaW50KGEueCgpICsgYi53aWR0aCgpLCBhLnkoKSArIGIuaGVpZ2h0KCkpOwogfQogCi1pbmxp
bmUgRnJhY3Rpb25hbExheW91dFBvaW50IG9wZXJhdG9yKyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYikKK2lubGluZSBMYXlvdXRQ
b2ludCBvcGVyYXRvcisoY29uc3QgTGF5b3V0UG9pbnQmIGEsIGNvbnN0IExheW91dFBvaW50JiBi
KQogewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoYS54KCkgKyBiLngoKSwgYS55
KCkgKyBiLnkoKSk7CisgICAgcmV0dXJuIExheW91dFBvaW50KGEueCgpICsgYi54KCksIGEueSgp
ICsgYi55KCkpOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFNpemUgb3BlcmF0b3ItKGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50
JiBiKQoraW5saW5lIExheW91dFNpemUgb3BlcmF0b3ItKGNvbnN0IExheW91dFBvaW50JiBhLCBj
b25zdCBMYXlvdXRQb2ludCYgYikKIHsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUo
YS54KCkgLSBiLngoKSwgYS55KCkgLSBiLnkoKSk7CisgICAgcmV0dXJuIExheW91dFNpemUoYS54
KCkgLSBiLngoKSwgYS55KCkgLSBiLnkoKSk7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFNpemUmIGIpCitpbmxpbmUgTGF5b3V0UG9pbnQgb3BlcmF0b3ItKGNvbnN0
IExheW91dFBvaW50JiBhLCBjb25zdCBMYXlvdXRTaXplJiBiKQogewotICAgIHJldHVybiBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQoYS54KCkgLSBiLndpZHRoKCksIGEueSgpIC0gYi5oZWlnaHQoKSk7
CisgICAgcmV0dXJuIExheW91dFBvaW50KGEueCgpIC0gYi53aWR0aCgpLCBhLnkoKSAtIGIuaGVp
Z2h0KCkpOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50IG9wZXJhdG9yLShjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50KQoraW5saW5lIExheW91dFBvaW50IG9wZXJh
dG9yLShjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxM
YXlvdXRQb2ludCgtcG9pbnQueCgpLCAtcG9pbnQueSgpKTsKKyAgICByZXR1cm4gTGF5b3V0UG9p
bnQoLXBvaW50LngoKSwgLXBvaW50LnkoKSk7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9p
bnQmIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExheW91dFBvaW50JiBhLCBjb25z
dCBMYXlvdXRQb2ludCYgYikKIHsKICAgICByZXR1cm4gYS54KCkgPT0gYi54KCkgJiYgYS55KCkg
PT0gYi55KCk7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJhY3Rpb25hbExh
eW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGIpCitpbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IExheW91dFBvaW50JiBhLCBjb25zdCBMYXlvdXRQb2ludCYgYikK
IHsKICAgICByZXR1cm4gYS54KCkgIT0gYi54KCkgfHwgYS55KCkgIT0gYi55KCk7CiB9CiAKLWlu
bGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgdG9Qb2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0
U2l6ZSYgc2l6ZSkKK2lubGluZSBMYXlvdXRQb2ludCB0b1BvaW50KGNvbnN0IExheW91dFNpemUm
IHNpemUpCiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCkpOworICAgIHJldHVybiBMYXlvdXRQb2ludChzaXplLndpZHRoKCksIHNp
emUuaGVpZ2h0KCkpOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFNpemUgdG9TaXplKGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSkKK2lubGluZSBMYXlvdXRQb2ludCB0b0xheW91
dFBvaW50KGNvbnN0IExheW91dFNpemUmIHApCiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlv
dXRTaXplKGEueCgpLCBhLnkoKSk7CisgICAgcmV0dXJuIExheW91dFBvaW50KHAud2lkdGgoKSwg
cC5oZWlnaHQoKSk7CiB9CiAKLWlubGluZSBJbnRQb2ludCBmbG9vcmVkSW50UG9pbnQoY29uc3Qg
RnJhY3Rpb25hbExheW91dFBvaW50JiBwb2ludCkKK2lubGluZSBMYXlvdXRTaXplIHRvU2l6ZShj
b25zdCBMYXlvdXRQb2ludCYgYSkKK3sKKyAgICByZXR1cm4gTGF5b3V0U2l6ZShhLngoKSwgYS55
KCkpOworfQorCitpbmxpbmUgSW50UG9pbnQgZmxvb3JlZEludFBvaW50KGNvbnN0IExheW91dFBv
aW50JiBwb2ludCkKIHsKICAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpLmZsb29yKCksIHBv
aW50LnkoKS5mbG9vcigpKTsKIH0KIAotaW5saW5lIEludFBvaW50IHJvdW5kZWRJbnRQb2ludChj
b25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50KQoraW5saW5lIEludFBvaW50IHJvdW5k
ZWRJbnRQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCiB7CiAgICAgcmV0dXJuIEludFBv
aW50KHBvaW50LngoKS5yb3VuZCgpLCBwb2ludC55KCkucm91bmQoKSk7CiB9CiAKLWlubGluZSBJ
bnRQb2ludCByb3VuZGVkSW50UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUp
CitpbmxpbmUgSW50UG9pbnQgcm91bmRlZEludFBvaW50KGNvbnN0IExheW91dFNpemUmIHNpemUp
CiB7CiAgICAgcmV0dXJuIEludFBvaW50KHNpemUud2lkdGgoKS5yb3VuZCgpLCBzaXplLmhlaWdo
dCgpLnJvdW5kKCkpOwogfQogCi1pbmxpbmUgSW50UG9pbnQgY2VpbGVkSW50UG9pbnQoY29uc3Qg
RnJhY3Rpb25hbExheW91dFBvaW50JiBwb2ludCkKK2lubGluZSBJbnRQb2ludCBjZWlsZWRJbnRQ
b2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCiB7CiAgICAgcmV0dXJuIEludFBvaW50KHBv
aW50LngoKS5jZWlsKCksIHBvaW50LnkoKS5jZWlsKCkpOwogfQogCi1pbmxpbmUgRnJhY3Rpb25h
bExheW91dFBvaW50IGZsb29yZWRGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQb2lu
dCYgcCkKK2lubGluZSBMYXlvdXRQb2ludCBmbG9vcmVkTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQ
b2ludCYgcCkKIHsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KEZyYWN0aW9uYWxM
YXlvdXRVbml0Ojpmcm9tRmxvYXRGbG9vcihwLngoKSksIEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpm
cm9tRmxvYXRGbG9vcihwLnkoKSkpOworICAgIHJldHVybiBMYXlvdXRQb2ludChMYXlvdXRVbml0
Ojpmcm9tRmxvYXRGbG9vcihwLngoKSksIExheW91dFVuaXQ6OmZyb21GbG9hdEZsb29yKHAueSgp
KSk7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgY2VpbGVkRnJhY3Rpb25hbExh
eW91dFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApCitpbmxpbmUgTGF5b3V0UG9pbnQgY2VpbGVk
TGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkKIHsKLSAgICByZXR1cm4gRnJhY3Rpb25h
bExheW91dFBvaW50KEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKHAueCgpKSwg
RnJhY3Rpb25hbExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwocC55KCkpKTsKKyAgICByZXR1cm4g
TGF5b3V0UG9pbnQoTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChwLngoKSksIExheW91dFVuaXQ6
OmZyb21GbG9hdENlaWwocC55KCkpKTsKIH0KIAoraW5saW5lIEludFNpemUgcGl4ZWxTbmFwcGVk
SW50U2l6ZShjb25zdCBMYXlvdXRTaXplJiBzLCBjb25zdCBMYXlvdXRQb2ludCYgcCkKK3sKKyAg
ICByZXR1cm4gSW50U2l6ZShzbmFwU2l6ZVRvUGl4ZWwocy53aWR0aCgpLCBwLngoKSksIHNuYXBT
aXplVG9QaXhlbChzLmhlaWdodCgpLCBwLnkoKSkpOworfQorCitpbmxpbmUgTGF5b3V0UG9pbnQg
cm91bmRlZExheW91dFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisjaWYgRU5BQkxFKFNV
QlBJWEVMX0xBWU9VVCkKKyAgICByZXR1cm4gTGF5b3V0UG9pbnQocCk7CisjZWxzZQorICAgIHJl
dHVybiByb3VuZGVkSW50UG9pbnQocCk7CisjZW5kaWYKK30KKworaW5saW5lIExheW91dFNpemUg
dG9MYXlvdXRTaXplKGNvbnN0IExheW91dFBvaW50JiBwKQoreworICAgIHJldHVybiBMYXlvdXRT
aXplKHAueCgpLCBwLnkoKSk7Cit9CisKK2lubGluZSBMYXlvdXRQb2ludCBmbG9vcmVkTGF5b3V0
UG9pbnQoY29uc3QgRmxvYXRTaXplJiBzKQoreworICAgIHJldHVybiBmbG9vcmVkTGF5b3V0UG9p
bnQoRmxvYXRQb2ludChzKSk7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5k
aWYgLy8gRnJhY3Rpb25hbExheW91dFBvaW50X2gKKyNlbmRpZiAvLyBMYXlvdXRQb2ludF9oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0LmNw
cAkocmV2aXNpb24gMTMzNTE3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHA6MTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTGF5b3V0UmVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRSZWN0
LmgiCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0
VW5pdC5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKwordXNpbmcgc3RkOjptYXg7Cit1c2luZyBz
dGQ6Om1pbjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGcmFjdGlvbmFsTGF5b3V0UmVjdDo6
RnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQorICAgIDogbV9sb2NhdGlv
bihGcmFjdGlvbmFsTGF5b3V0UG9pbnQoci5sb2NhdGlvbigpKSkKKyAgICAsIG1fc2l6ZShGcmFj
dGlvbmFsTGF5b3V0U2l6ZShyLnNpemUoKSkpCit7Cit9CisKK2Jvb2wgRnJhY3Rpb25hbExheW91
dFJlY3Q6OmludGVyc2VjdHMoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90aGVyKSBjb25z
dAoreworICAgIC8vIENoZWNraW5nIGVtcHRpbmVzcyBoYW5kbGVzIG5lZ2F0aXZlIHdpZHRocyBh
cyB3ZWxsIGFzIHplcm8uCisgICAgcmV0dXJuICFpc0VtcHR5KCkgJiYgIW90aGVyLmlzRW1wdHko
KQorICAgICAgICAmJiB4KCkgPCBvdGhlci5tYXhYKCkgJiYgb3RoZXIueCgpIDwgbWF4WCgpCisg
ICAgICAgICYmIHkoKSA8IG90aGVyLm1heFkoKSAmJiBvdGhlci55KCkgPCBtYXhZKCk7Cit9CisK
K2Jvb2wgRnJhY3Rpb25hbExheW91dFJlY3Q6OmNvbnRhaW5zKGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRSZWN0JiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4geCgpIDw9IG90aGVyLngoKSAmJiBt
YXhYKCkgPj0gb3RoZXIubWF4WCgpCisgICAgICAgICYmIHkoKSA8PSBvdGhlci55KCkgJiYgbWF4
WSgpID49IG90aGVyLm1heFkoKTsKK30KKwordm9pZCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6aW50
ZXJzZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBvdGhlcikKK3sKKyAgICBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQgbmV3TG9jYXRpb24obWF4KHgoKSwgb3RoZXIueCgpKSwgbWF4KHkoKSwg
b3RoZXIueSgpKSk7CisgICAgRnJhY3Rpb25hbExheW91dFBvaW50IG5ld01heFBvaW50KG1pbiht
YXhYKCksIG90aGVyLm1heFgoKSksIG1pbihtYXhZKCksIG90aGVyLm1heFkoKSkpOworCisgICAg
Ly8gUmV0dXJuIGEgY2xlYW4gZW1wdHkgcmVjdGFuZ2xlIGZvciBub24taW50ZXJzZWN0aW5nIGNh
c2VzLgorICAgIGlmIChuZXdMb2NhdGlvbi54KCkgPj0gbmV3TWF4UG9pbnQueCgpIHx8IG5ld0xv
Y2F0aW9uLnkoKSA+PSBuZXdNYXhQb2ludC55KCkpIHsKKyAgICAgICAgbmV3TG9jYXRpb24gPSBG
cmFjdGlvbmFsTGF5b3V0UG9pbnQoMCwgMCk7CisgICAgICAgIG5ld01heFBvaW50ID0gRnJhY3Rp
b25hbExheW91dFBvaW50KDAsIDApOworICAgIH0KKworICAgIG1fbG9jYXRpb24gPSBuZXdMb2Nh
dGlvbjsKKyAgICBtX3NpemUgPSBuZXdNYXhQb2ludCAtIG5ld0xvY2F0aW9uOworfQorCit2b2lk
IEZyYWN0aW9uYWxMYXlvdXRSZWN0Ojp1bml0ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYg
b3RoZXIpCit7CisgICAgLy8gSGFuZGxlIGVtcHR5IHNwZWNpYWwgY2FzZXMgZmlyc3QuCisgICAg
aWYgKG90aGVyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChpc0VtcHR5KCkp
IHsKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdMb2NhdGlvbihtaW4oeCgpLCBvdGhlci54KCkpLCBt
aW4oeSgpLCBvdGhlci55KCkpKTsKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbmV3TWF4UG9p
bnQobWF4KG1heFgoKSwgb3RoZXIubWF4WCgpKSwgbWF4KG1heFkoKSwgb3RoZXIubWF4WSgpKSk7
CisKKyAgICBtX2xvY2F0aW9uID0gbmV3TG9jYXRpb247CisgICAgbV9zaXplID0gbmV3TWF4UG9p
bnQgLSBuZXdMb2NhdGlvbjsKK30KKwordm9pZCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6dW5pdGVJ
Zk5vblplcm8oY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90aGVyKQoreworICAgIC8vIEhh
bmRsZSBlbXB0eSBzcGVjaWFsIGNhc2VzIGZpcnN0LgorICAgIGlmICghb3RoZXIud2lkdGgoKSAm
JiAhb3RoZXIuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXdpZHRoKCkgJiYg
IWhlaWdodCgpKSB7CisgICAgICAgICp0aGlzID0gb3RoZXI7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbmV3TG9jYXRpb24obWluKHgoKSwgb3Ro
ZXIueCgpKSwgbWluKHkoKSwgb3RoZXIueSgpKSk7CisgICAgRnJhY3Rpb25hbExheW91dFBvaW50
IG5ld01heFBvaW50KG1heChtYXhYKCksIG90aGVyLm1heFgoKSksIG1heChtYXhZKCksIG90aGVy
Lm1heFkoKSkpOworCisgICAgbV9sb2NhdGlvbiA9IG5ld0xvY2F0aW9uOworICAgIG1fc2l6ZSA9
IG5ld01heFBvaW50IC0gbmV3TG9jYXRpb247Cit9CisKK3ZvaWQgRnJhY3Rpb25hbExheW91dFJl
Y3Q6OnNjYWxlKGZsb2F0IHMpCit7CisgICAgbV9sb2NhdGlvbi5zY2FsZShzLCBzKTsKKyAgICBt
X3NpemUuc2NhbGUocyk7Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRSZWN0IHVuaW9uUmVjdChjb25z
dCBWZWN0b3I8RnJhY3Rpb25hbExheW91dFJlY3Q+JiByZWN0cykKK3sKKyAgICBGcmFjdGlvbmFs
TGF5b3V0UmVjdCByZXN1bHQ7CisKKyAgICBzaXplX3QgY291bnQgPSByZWN0cy5zaXplKCk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICByZXN1bHQudW5p
dGUocmVjdHNbaV0pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSW50UmVjdCBlbmNsb3Np
bmdJbnRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiByZWN0KQoreworICAgIEludFBv
aW50IGxvY2F0aW9uID0gZmxvb3JlZEludFBvaW50KHJlY3QubWluWE1pbllDb3JuZXIoKSk7Cisg
ICAgSW50UG9pbnQgbWF4UG9pbnQgPSBjZWlsZWRJbnRQb2ludChyZWN0Lm1heFhNYXhZQ29ybmVy
KCkpOworCisgICAgcmV0dXJuIEludFJlY3QobG9jYXRpb24sIG1heFBvaW50IC0gbG9jYXRpb24p
OworfQorCitGcmFjdGlvbmFsTGF5b3V0UmVjdCBlbmNsb3NpbmdGcmFjdGlvbmFsTGF5b3V0UmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkK
KyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbG9jYXRpb24gPSBmbG9vcmVkRnJhY3Rpb25hbExh
eW91dFBvaW50KHJlY3QubWluWE1pbllDb3JuZXIoKSk7CisgICAgRnJhY3Rpb25hbExheW91dFBv
aW50IG1heFBvaW50ID0gY2VpbGVkRnJhY3Rpb25hbExheW91dFBvaW50KHJlY3QubWF4WE1heFlD
b3JuZXIoKSk7CisKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFJlY3QobG9jYXRpb24sIG1h
eFBvaW50IC0gbG9jYXRpb24pOworI2Vsc2UKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChy
ZWN0KTsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0LmNwcAkocmV2aXNpb24g
MTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UmVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsyOSwxMCBAQAogICovCiAKICNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIgorI2luY2x1ZGUgIkxh
eW91dFJlY3QuaCIKIAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZyYWN0aW9u
YWxMYXlvdXRVbml0LmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgogI2luY2x1ZGUgPGFsZ29y
aXRobT4KIAogdXNpbmcgc3RkOjptYXg7CkBAIC00MCwxMyArNDAsMTMgQEAgdXNpbmcgc3RkOjpt
aW47CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRnJhY3Rpb25hbExheW91dFJlY3Q6OkZyYWN0
aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKLSAgICA6IG1fbG9jYXRpb24oRnJh
Y3Rpb25hbExheW91dFBvaW50KHIubG9jYXRpb24oKSkpCi0gICAgLCBtX3NpemUoRnJhY3Rpb25h
bExheW91dFNpemUoci5zaXplKCkpKQorTGF5b3V0UmVjdDo6TGF5b3V0UmVjdChjb25zdCBGbG9h
dFJlY3QmIHIpCisgICAgOiBtX2xvY2F0aW9uKExheW91dFBvaW50KHIubG9jYXRpb24oKSkpCisg
ICAgLCBtX3NpemUoTGF5b3V0U2l6ZShyLnNpemUoKSkpCiB7CiB9CiAKLWJvb2wgRnJhY3Rpb25h
bExheW91dFJlY3Q6OmludGVyc2VjdHMoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90aGVy
KSBjb25zdAorYm9vbCBMYXlvdXRSZWN0OjppbnRlcnNlY3RzKGNvbnN0IExheW91dFJlY3QmIG90
aGVyKSBjb25zdAogewogICAgIC8vIENoZWNraW5nIGVtcHRpbmVzcyBoYW5kbGVzIG5lZ2F0aXZl
IHdpZHRocyBhcyB3ZWxsIGFzIHplcm8uCiAgICAgcmV0dXJuICFpc0VtcHR5KCkgJiYgIW90aGVy
LmlzRW1wdHkoKQpAQCAtNTQsMjggKzU0LDI4IEBAIGJvb2wgRnJhY3Rpb25hbExheW91dFJlY3Q6
OmludGVyc2VjdHMoY28KICAgICAgICAgJiYgeSgpIDwgb3RoZXIubWF4WSgpICYmIG90aGVyLnko
KSA8IG1heFkoKTsKIH0KIAotYm9vbCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6Y29udGFpbnMoY29u
c3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90aGVyKSBjb25zdAorYm9vbCBMYXlvdXRSZWN0Ojpj
b250YWlucyhjb25zdCBMYXlvdXRSZWN0JiBvdGhlcikgY29uc3QKIHsKICAgICByZXR1cm4geCgp
IDw9IG90aGVyLngoKSAmJiBtYXhYKCkgPj0gb3RoZXIubWF4WCgpCiAgICAgICAgICYmIHkoKSA8
PSBvdGhlci55KCkgJiYgbWF4WSgpID49IG90aGVyLm1heFkoKTsKIH0KIAotdm9pZCBGcmFjdGlv
bmFsTGF5b3V0UmVjdDo6aW50ZXJzZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBvdGhl
cikKK3ZvaWQgTGF5b3V0UmVjdDo6aW50ZXJzZWN0KGNvbnN0IExheW91dFJlY3QmIG90aGVyKQog
ewotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdMb2NhdGlvbihtYXgoeCgpLCBvdGhlci54
KCkpLCBtYXgoeSgpLCBvdGhlci55KCkpKTsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbmV3
TWF4UG9pbnQobWluKG1heFgoKSwgb3RoZXIubWF4WCgpKSwgbWluKG1heFkoKSwgb3RoZXIubWF4
WSgpKSk7CisgICAgTGF5b3V0UG9pbnQgbmV3TG9jYXRpb24obWF4KHgoKSwgb3RoZXIueCgpKSwg
bWF4KHkoKSwgb3RoZXIueSgpKSk7CisgICAgTGF5b3V0UG9pbnQgbmV3TWF4UG9pbnQobWluKG1h
eFgoKSwgb3RoZXIubWF4WCgpKSwgbWluKG1heFkoKSwgb3RoZXIubWF4WSgpKSk7CiAKICAgICAv
LyBSZXR1cm4gYSBjbGVhbiBlbXB0eSByZWN0YW5nbGUgZm9yIG5vbi1pbnRlcnNlY3RpbmcgY2Fz
ZXMuCiAgICAgaWYgKG5ld0xvY2F0aW9uLngoKSA+PSBuZXdNYXhQb2ludC54KCkgfHwgbmV3TG9j
YXRpb24ueSgpID49IG5ld01heFBvaW50LnkoKSkgewotICAgICAgICBuZXdMb2NhdGlvbiA9IEZy
YWN0aW9uYWxMYXlvdXRQb2ludCgwLCAwKTsKLSAgICAgICAgbmV3TWF4UG9pbnQgPSBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQoMCwgMCk7CisgICAgICAgIG5ld0xvY2F0aW9uID0gTGF5b3V0UG9pbnQo
MCwgMCk7CisgICAgICAgIG5ld01heFBvaW50ID0gTGF5b3V0UG9pbnQoMCwgMCk7CiAgICAgfQog
CiAgICAgbV9sb2NhdGlvbiA9IG5ld0xvY2F0aW9uOwogICAgIG1fc2l6ZSA9IG5ld01heFBvaW50
IC0gbmV3TG9jYXRpb247CiB9CiAKLXZvaWQgRnJhY3Rpb25hbExheW91dFJlY3Q6OnVuaXRlKGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBvdGhlcikKK3ZvaWQgTGF5b3V0UmVjdDo6dW5pdGUo
Y29uc3QgTGF5b3V0UmVjdCYgb3RoZXIpCiB7CiAgICAgLy8gSGFuZGxlIGVtcHR5IHNwZWNpYWwg
Y2FzZXMgZmlyc3QuCiAgICAgaWYgKG90aGVyLmlzRW1wdHkoKSkKQEAgLTg1LDE0ICs4NSwxNCBA
QCB2b2lkIEZyYWN0aW9uYWxMYXlvdXRSZWN0Ojp1bml0ZShjb25zdCBGCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbmV3TG9jYXRpb24obWluKHgo
KSwgb3RoZXIueCgpKSwgbWluKHkoKSwgb3RoZXIueSgpKSk7Ci0gICAgRnJhY3Rpb25hbExheW91
dFBvaW50IG5ld01heFBvaW50KG1heChtYXhYKCksIG90aGVyLm1heFgoKSksIG1heChtYXhZKCks
IG90aGVyLm1heFkoKSkpOworICAgIExheW91dFBvaW50IG5ld0xvY2F0aW9uKG1pbih4KCksIG90
aGVyLngoKSksIG1pbih5KCksIG90aGVyLnkoKSkpOworICAgIExheW91dFBvaW50IG5ld01heFBv
aW50KG1heChtYXhYKCksIG90aGVyLm1heFgoKSksIG1heChtYXhZKCksIG90aGVyLm1heFkoKSkp
OwogCiAgICAgbV9sb2NhdGlvbiA9IG5ld0xvY2F0aW9uOwogICAgIG1fc2l6ZSA9IG5ld01heFBv
aW50IC0gbmV3TG9jYXRpb247CiB9CiAKLXZvaWQgRnJhY3Rpb25hbExheW91dFJlY3Q6OnVuaXRl
SWZOb25aZXJvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBvdGhlcikKK3ZvaWQgTGF5b3V0
UmVjdDo6dW5pdGVJZk5vblplcm8oY29uc3QgTGF5b3V0UmVjdCYgb3RoZXIpCiB7CiAgICAgLy8g
SGFuZGxlIGVtcHR5IHNwZWNpYWwgY2FzZXMgZmlyc3QuCiAgICAgaWYgKCFvdGhlci53aWR0aCgp
ICYmICFvdGhlci5oZWlnaHQoKSkKQEAgLTEwMiwyMiArMTAyLDIyIEBAIHZvaWQgRnJhY3Rpb25h
bExheW91dFJlY3Q6OnVuaXRlSWZOb25aZXIKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdMb2NhdGlvbihtaW4oeCgpLCBvdGhlci54KCkpLCBt
aW4oeSgpLCBvdGhlci55KCkpKTsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbmV3TWF4UG9p
bnQobWF4KG1heFgoKSwgb3RoZXIubWF4WCgpKSwgbWF4KG1heFkoKSwgb3RoZXIubWF4WSgpKSk7
CisgICAgTGF5b3V0UG9pbnQgbmV3TG9jYXRpb24obWluKHgoKSwgb3RoZXIueCgpKSwgbWluKHko
KSwgb3RoZXIueSgpKSk7CisgICAgTGF5b3V0UG9pbnQgbmV3TWF4UG9pbnQobWF4KG1heFgoKSwg
b3RoZXIubWF4WCgpKSwgbWF4KG1heFkoKSwgb3RoZXIubWF4WSgpKSk7CiAKICAgICBtX2xvY2F0
aW9uID0gbmV3TG9jYXRpb247CiAgICAgbV9zaXplID0gbmV3TWF4UG9pbnQgLSBuZXdMb2NhdGlv
bjsKIH0KIAotdm9pZCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6c2NhbGUoZmxvYXQgcykKK3ZvaWQg
TGF5b3V0UmVjdDo6c2NhbGUoZmxvYXQgcykKIHsKICAgICBtX2xvY2F0aW9uLnNjYWxlKHMsIHMp
OwogICAgIG1fc2l6ZS5zY2FsZShzKTsKIH0KIAotRnJhY3Rpb25hbExheW91dFJlY3QgdW5pb25S
ZWN0KGNvbnN0IFZlY3RvcjxGcmFjdGlvbmFsTGF5b3V0UmVjdD4mIHJlY3RzKQorTGF5b3V0UmVj
dCB1bmlvblJlY3QoY29uc3QgVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cykKIHsKLSAgICBGcmFj
dGlvbmFsTGF5b3V0UmVjdCByZXN1bHQ7CisgICAgTGF5b3V0UmVjdCByZXN1bHQ7CiAKICAgICBz
aXplX3QgY291bnQgPSByZWN0cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
b3VudDsgKytpKQpAQCAtMTI2LDcgKzEyNiw3IEBAIEZyYWN0aW9uYWxMYXlvdXRSZWN0IHVuaW9u
UmVjdChjb25zdCBWZWMKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1JbnRSZWN0IGVuY2xvc2lu
Z0ludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIHJlY3QpCitJbnRSZWN0IGVuY2xv
c2luZ0ludFJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkKIHsKICAgICBJbnRQb2ludCBsb2Nh
dGlvbiA9IGZsb29yZWRJbnRQb2ludChyZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwogICAgIEludFBv
aW50IG1heFBvaW50ID0gY2VpbGVkSW50UG9pbnQocmVjdC5tYXhYTWF4WUNvcm5lcigpKTsKQEAg
LTEzNCwxNiArMTM0LDkgQEAgSW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IEZyYWN0aW9u
YQogICAgIHJldHVybiBJbnRSZWN0KGxvY2F0aW9uLCBtYXhQb2ludCAtIGxvY2F0aW9uKTsKIH0K
IAotRnJhY3Rpb25hbExheW91dFJlY3QgZW5jbG9zaW5nRnJhY3Rpb25hbExheW91dFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQorTGF5b3V0UmVjdCBlbmNsb3NpbmdMYXlvdXRSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAgIEZy
YWN0aW9uYWxMYXlvdXRQb2ludCBsb2NhdGlvbiA9IGZsb29yZWRGcmFjdGlvbmFsTGF5b3V0UG9p
bnQocmVjdC5taW5YTWluWUNvcm5lcigpKTsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbWF4
UG9pbnQgPSBjZWlsZWRGcmFjdGlvbmFsTGF5b3V0UG9pbnQocmVjdC5tYXhYTWF4WUNvcm5lcigp
KTsKLQotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UmVjdChsb2NhdGlvbiwgbWF4UG9pbnQg
LSBsb2NhdGlvbik7Ci0jZWxzZQogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHJlY3QpOwot
I2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0LmgJKHJldmlzaW9uIDEzMzUxNykJKGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3Qu
aDoxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGcmFjdGlvbmFsTGF5
b3V0UmVjdF9oCisjZGVmaW5lIEZyYWN0aW9uYWxMYXlvdXRSZWN0X2gKKworI2luY2x1ZGUgIkZy
YWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuaCIKKyNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UG9p
bnQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisj
aWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8cWdsb2JhbC5oPgorUVRfQkVHSU5fTkFNRVNQQUNF
CitjbGFzcyBRUmVjdDsKK2NsYXNzIFFSZWN0RjsKK1FUX0VORF9OQU1FU1BBQ0UKKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZsb2F0UmVjdDsKKworY2xhc3MgRnJhY3Rp
b25hbExheW91dFJlY3QgeworcHVibGljOgorICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0KCkgeyB9
CisgICAgRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBs
b2NhdGlvbiwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpCisgICAgICAgIDogbV9s
b2NhdGlvbihsb2NhdGlvbiksIG1fc2l6ZShzaXplKSB7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0
UmVjdChGcmFjdGlvbmFsTGF5b3V0VW5pdCB4LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCB5LCBGcmFj
dGlvbmFsTGF5b3V0VW5pdCB3aWR0aCwgRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KQorICAg
ICAgICA6IG1fbG9jYXRpb24oRnJhY3Rpb25hbExheW91dFBvaW50KHgsIHkpKSwgbV9zaXplKEZy
YWN0aW9uYWxMYXlvdXRTaXplKHdpZHRoLCBoZWlnaHQpKSB7IH0KKyAgICBGcmFjdGlvbmFsTGF5
b3V0UmVjdChjb25zdCBGbG9hdFBvaW50JiBsb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBzaXpl
KQorICAgICAgICA6IG1fbG9jYXRpb24obG9jYXRpb24pLCBtX3NpemUoc2l6ZSkgeyB9CisgICAg
RnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgOiBtX2xvY2F0aW9uKHJl
Y3QubG9jYXRpb24oKSksIG1fc2l6ZShyZWN0LnNpemUoKSkgeyB9CisKKyAgICBleHBsaWNpdCBG
cmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBGbG9hdFJlY3QmKTsgLy8gZG9uJ3QgZG8gdGhpcyBp
bXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKKyAgICAgICAgCisgICAgRnJhY3Rpb25hbExheW91
dFBvaW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfQorICAgIEZyYWN0
aW9uYWxMYXlvdXRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworICAgIElu
dFBvaW50IHBpeGVsU25hcHBlZExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gcm91bmRlZEludFBv
aW50KG1fbG9jYXRpb24pOyB9CisgICAgSW50U2l6ZSBwaXhlbFNuYXBwZWRTaXplKCkgY29uc3Qg
eyByZXR1cm4gSW50U2l6ZShzbmFwU2l6ZVRvUGl4ZWwobV9zaXplLndpZHRoKCksIG1fbG9jYXRp
b24ueCgpKSwgc25hcFNpemVUb1BpeGVsKG1fc2l6ZS5oZWlnaHQoKSwgbV9sb2NhdGlvbi55KCkp
KTsgfQorCisgICAgdm9pZCBzZXRMb2NhdGlvbihjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQm
IGxvY2F0aW9uKSB7IG1fbG9jYXRpb24gPSBsb2NhdGlvbjsgfQorICAgIHZvaWQgc2V0U2l6ZShj
b25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9CisKKyAg
ICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB4KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi54KCk7
IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB5KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlv
bi55KCk7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtYXhYKCkgY29uc3QgeyByZXR1cm4g
eCgpICsgd2lkdGgoKTsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1heFkoKSBjb25zdCB7
IHJldHVybiB5KCkgKyBoZWlnaHQoKTsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRo
KCkgY29uc3QgeyByZXR1cm4gbV9zaXplLndpZHRoKCk7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaGVpZ2h0KCk7IH0KKworICAgIGlu
dCBwaXhlbFNuYXBwZWRYKCkgY29uc3QgeyByZXR1cm4geCgpLnJvdW5kKCk7IH0KKyAgICBpbnQg
cGl4ZWxTbmFwcGVkWSgpIGNvbnN0IHsgcmV0dXJuIHkoKS5yb3VuZCgpOyB9CisgICAgaW50IHBp
eGVsU25hcHBlZFdpZHRoKCkgY29uc3QgeyByZXR1cm4gc25hcFNpemVUb1BpeGVsKHdpZHRoKCks
IHgoKSk7IH0KKyAgICBpbnQgcGl4ZWxTbmFwcGVkSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gc25h
cFNpemVUb1BpeGVsKGhlaWdodCgpLCB5KCkpOyB9CisgICAgaW50IHBpeGVsU25hcHBlZE1heFgo
KSBjb25zdCB7IHJldHVybiAobV9sb2NhdGlvbi54KCkgKyBtX3NpemUud2lkdGgoKSkucm91bmQo
KTsgfQorICAgIGludCBwaXhlbFNuYXBwZWRNYXhZKCkgY29uc3QgeyByZXR1cm4gKG1fbG9jYXRp
b24ueSgpICsgbV9zaXplLmhlaWdodCgpKS5yb3VuZCgpOyB9CisKKyAgICB2b2lkIHNldFgoRnJh
Y3Rpb25hbExheW91dFVuaXQgeCkgeyBtX2xvY2F0aW9uLnNldFgoeCk7IH0KKyAgICB2b2lkIHNl
dFkoRnJhY3Rpb25hbExheW91dFVuaXQgeSkgeyBtX2xvY2F0aW9uLnNldFkoeSk7IH0KKyAgICB2
b2lkIHNldFdpZHRoKEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKSB7IG1fc2l6ZS5zZXRXaWR0
aCh3aWR0aCk7IH0KKyAgICB2b2lkIHNldEhlaWdodChGcmFjdGlvbmFsTGF5b3V0VW5pdCBoZWln
aHQpIHsgbV9zaXplLnNldEhlaWdodChoZWlnaHQpOyB9CisKKyAgICBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiBtX3NpemUuaXNFbXB0eSgpOyB9CisKKyAgICAvLyBOT1RFOiBUaGUgcmVz
dWx0IGlzIHJvdW5kZWQgdG8gaW50ZWdlciB2YWx1ZXMsIGFuZCB0aHVzIG1heSBiZSBub3QgdGhl
IGV4YWN0CisgICAgLy8gY2VudGVyIHBvaW50LgorICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBj
ZW50ZXIoKSBjb25zdCB7IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoeCgpICsgd2lkdGgo
KSAvIDIsIHkoKSArIGhlaWdodCgpIC8gMik7IH0KKworICAgIHZvaWQgbW92ZShjb25zdCBGcmFj
dGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkgeyBtX2xvY2F0aW9uICs9IHNpemU7IH0gCisgICAgdm9p
ZCBtb3ZlQnkoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBvZmZzZXQpIHsgbV9sb2NhdGlv
bi5tb3ZlKG9mZnNldC54KCksIG9mZnNldC55KCkpOyB9CisgICAgdm9pZCBtb3ZlKEZyYWN0aW9u
YWxMYXlvdXRVbml0IGR4LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeSkgeyBtX2xvY2F0aW9uLm1v
dmUoZHgsIGR5KTsgfSAKKworICAgIHZvaWQgZXhwYW5kKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRT
aXplJiBzaXplKSB7IG1fc2l6ZSArPSBzaXplOyB9CisgICAgdm9pZCBleHBhbmQoY29uc3QgRnJh
Y3Rpb25hbExheW91dEJveEV4dGVudCYgYm94KQorICAgIHsKKyAgICAgICAgbV9sb2NhdGlvbi5t
b3ZlKC1ib3gubGVmdCgpLCAtYm94LnRvcCgpKTsKKyAgICAgICAgbV9zaXplLmV4cGFuZChib3gu
bGVmdCgpICsgYm94LnJpZ2h0KCksIGJveC50b3AoKSArIGJveC5ib3R0b20oKSk7CisgICAgfQor
ICAgIHZvaWQgZXhwYW5kKEZyYWN0aW9uYWxMYXlvdXRVbml0IGR3LCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBkaCkgeyBtX3NpemUuZXhwYW5kKGR3LCBkaCk7IH0KKyAgICB2b2lkIGNvbnRyYWN0KGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1fc2l6ZSAtPSBzaXplOyB9CisgICAg
dm9pZCBjb250cmFjdChGcmFjdGlvbmFsTGF5b3V0VW5pdCBkdywgRnJhY3Rpb25hbExheW91dFVu
aXQgZGgpIHsgbV9zaXplLmV4cGFuZCgtZHcsIC1kaCk7IH0KKworICAgIHZvaWQgc2hpZnRYRWRn
ZVRvKEZyYWN0aW9uYWxMYXlvdXRVbml0IGVkZ2UpCisgICAgeworICAgICAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBkZWx0YSA9IGVkZ2UgLSB4KCk7CisgICAgICAgIHNldFgoZWRnZSk7CisgICAg
ICAgIHNldFdpZHRoKHN0ZDo6bWF4PEZyYWN0aW9uYWxMYXlvdXRVbml0PigwLCB3aWR0aCgpIC0g
ZGVsdGEpKTsKKyAgICB9CisgICAgdm9pZCBzaGlmdE1heFhFZGdlVG8oRnJhY3Rpb25hbExheW91
dFVuaXQgZWRnZSkKKyAgICB7CisgICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRlbHRhID0g
ZWRnZSAtIG1heFgoKTsKKyAgICAgICAgc2V0V2lkdGgoc3RkOjptYXg8RnJhY3Rpb25hbExheW91
dFVuaXQ+KDAsIHdpZHRoKCkgKyBkZWx0YSkpOworICAgIH0KKyAgICB2b2lkIHNoaWZ0WUVkZ2VU
byhGcmFjdGlvbmFsTGF5b3V0VW5pdCBlZGdlKQorICAgIHsKKyAgICAgICAgRnJhY3Rpb25hbExh
eW91dFVuaXQgZGVsdGEgPSBlZGdlIC0geSgpOworICAgICAgICBzZXRZKGVkZ2UpOworICAgICAg
ICBzZXRIZWlnaHQoc3RkOjptYXg8RnJhY3Rpb25hbExheW91dFVuaXQ+KDAsIGhlaWdodCgpIC0g
ZGVsdGEpKTsKKyAgICB9CisgICAgdm9pZCBzaGlmdE1heFlFZGdlVG8oRnJhY3Rpb25hbExheW91
dFVuaXQgZWRnZSkKKyAgICB7CisgICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRlbHRhID0g
ZWRnZSAtIG1heFkoKTsKKyAgICAgICAgc2V0SGVpZ2h0KHN0ZDo6bWF4PEZyYWN0aW9uYWxMYXlv
dXRVbml0PigwLCBoZWlnaHQoKSArIGRlbHRhKSk7CisgICAgfQorCisgICAgRnJhY3Rpb25hbExh
eW91dFBvaW50IG1pblhNaW5ZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfSAv
LyB0eXBpY2FsbHkgdG9wTGVmdAorICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBtYXhYTWluWUNv
cm5lcigpIGNvbnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChtX2xvY2F0aW9uLngo
KSArIG1fc2l6ZS53aWR0aCgpLCBtX2xvY2F0aW9uLnkoKSk7IH0gLy8gdHlwaWNhbGx5IHRvcFJp
Z2h0CisgICAgRnJhY3Rpb25hbExheW91dFBvaW50IG1pblhNYXhZQ29ybmVyKCkgY29uc3QgeyBy
ZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KG1fbG9jYXRpb24ueCgpLCBtX2xvY2F0aW9uLnko
KSArIG1fc2l6ZS5oZWlnaHQoKSk7IH0gLy8gdHlwaWNhbGx5IGJvdHRvbUxlZnQKKyAgICBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQgbWF4WE1heFlDb3JuZXIoKSBjb25zdCB7IHJldHVybiBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQobV9sb2NhdGlvbi54KCkgKyBtX3NpemUud2lkdGgoKSwgbV9sb2NhdGlv
bi55KCkgKyBtX3NpemUuaGVpZ2h0KCkpOyB9IC8vIHR5cGljYWxseSBib3R0b21SaWdodAorICAg
IAorICAgIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpIGNvbnN0
OworICAgIGJvb2wgY29udGFpbnMoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKSBjb25zdDsK
KworICAgIC8vIFRoaXMgY2hlY2tzIHRvIHNlZSBpZiB0aGUgcmVjdCBjb250YWlucyB4LHkgaW4g
dGhlIHRyYWRpdGlvbmFsIHNlbnNlLgorICAgIC8vIEVxdWl2YWxlbnQgdG8gY2hlY2tpbmcgaWYg
dGhlIHJlY3QgY29udGFpbnMgYSAxeDEgcmVjdCBiZWxvdyBhbmQgdG8gdGhlIHJpZ2h0IG9mIChw
eCxweSkuCisgICAgYm9vbCBjb250YWlucyhGcmFjdGlvbmFsTGF5b3V0VW5pdCBweCwgRnJhY3Rp
b25hbExheW91dFVuaXQgcHkpIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIHB4ID49IHgoKSAmJiBw
eCA8IG1heFgoKSAmJiBweSA+PSB5KCkgJiYgcHkgPCBtYXhZKCk7IH0KKyAgICBib29sIGNvbnRh
aW5zKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0dXJuIGNv
bnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsgfQorCisgICAgdm9pZCBpbnRlcnNlY3QoY29u
c3QgRnJhY3Rpb25hbExheW91dFJlY3QmKTsKKyAgICB2b2lkIHVuaXRlKGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRSZWN0Jik7CisgICAgdm9pZCB1bml0ZUlmTm9uWmVybyhjb25zdCBGcmFjdGlvbmFs
TGF5b3V0UmVjdCYpOworCisgICAgdm9pZCBpbmZsYXRlWChGcmFjdGlvbmFsTGF5b3V0VW5pdCBk
eCkKKyAgICB7CisgICAgICAgIG1fbG9jYXRpb24uc2V0WChtX2xvY2F0aW9uLngoKSAtIGR4KTsK
KyAgICAgICAgbV9zaXplLnNldFdpZHRoKG1fc2l6ZS53aWR0aCgpICsgZHggKyBkeCk7CisgICAg
fQorICAgIHZvaWQgaW5mbGF0ZVkoRnJhY3Rpb25hbExheW91dFVuaXQgZHkpCisgICAgeworICAg
ICAgICBtX2xvY2F0aW9uLnNldFkobV9sb2NhdGlvbi55KCkgLSBkeSk7CisgICAgICAgIG1fc2l6
ZS5zZXRIZWlnaHQobV9zaXplLmhlaWdodCgpICsgZHkgKyBkeSk7CisgICAgfQorICAgIHZvaWQg
aW5mbGF0ZShGcmFjdGlvbmFsTGF5b3V0VW5pdCBkKSB7IGluZmxhdGVYKGQpOyBpbmZsYXRlWShk
KTsgfQorICAgIHZvaWQgc2NhbGUoZmxvYXQgcyk7CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0UmVj
dCB0cmFuc3Bvc2VkUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRSZWN0KG1f
bG9jYXRpb24udHJhbnNwb3NlZFBvaW50KCksIG1fc2l6ZS50cmFuc3Bvc2VkU2l6ZSgpKTsgfQor
CisgICAgc3RhdGljIEZyYWN0aW9uYWxMYXlvdXRSZWN0IGluZmluaXRlUmVjdCgpCisgICAgewor
ICAgICAgICAvLyBSZXR1cm4gYSByZWN0IHRoYXQgaXMgc2xpZ2h0bHkgc21hbGxlciB0aGFuIHRo
ZSB0cnVlIG1heCByZWN0IHRvIGFsbG93IHBpeGVsU25hcHBpbmcgdG8gcm91bmQgdXAgdG8gdGhl
IG5lYXJlc3QgSW50UmVjdCB3aXRob3V0IG92ZXJmbG93aW5nLgorICAgICAgICByZXR1cm4gRnJh
Y3Rpb25hbExheW91dFJlY3QoRnJhY3Rpb25hbExheW91dFVuaXQ6Om5lYXJseU1pbigpIC8gMiwg
RnJhY3Rpb25hbExheW91dFVuaXQ6Om5lYXJseU1pbigpIC8gMiwgRnJhY3Rpb25hbExheW91dFVu
aXQ6Om5lYXJseU1heCgpLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bmVhcmx5TWF4KCkpOworICAg
IH0KKworI2lmIFBMQVRGT1JNKFFUKQorICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRSZWN0
KGNvbnN0IFFSZWN0Jik7CisgICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3Qg
UVJlY3RGJik7CisgICAgb3BlcmF0b3IgUVJlY3RGKCkgY29uc3Q7CisjZW5kaWYKKworcHJpdmF0
ZToKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbV9sb2NhdGlvbjsKKyAgICBGcmFjdGlvbmFs
TGF5b3V0U2l6ZSBtX3NpemU7Cit9OworCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFJlY3QgaW50
ZXJzZWN0aW9uKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0UmVjdCYgYikKK3sKKyAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCBjID0gYTsKKyAgICBj
LmludGVyc2VjdChiKTsKKyAgICByZXR1cm4gYzsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlv
dXRSZWN0IHVuaW9uUmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFJlY3QmIGIpCit7CisgICAgRnJhY3Rpb25hbExheW91dFJlY3QgYyA9IGE7
CisgICAgYy51bml0ZShiKTsKKyAgICByZXR1cm4gYzsKK30KKworRnJhY3Rpb25hbExheW91dFJl
Y3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxGcmFjdGlvbmFsTGF5b3V0UmVjdD4mKTsKKworaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYSwgY29uc3Qg
RnJhY3Rpb25hbExheW91dFJlY3QmIGIpCit7CisgICAgcmV0dXJuIGEubG9jYXRpb24oKSA9PSBi
LmxvY2F0aW9uKCkgJiYgYS5zaXplKCkgPT0gYi5zaXplKCk7Cit9CisKK2lubGluZSBib29sIG9w
ZXJhdG9yIT0oY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGEsIGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRSZWN0JiBiKQoreworICAgIHJldHVybiBhLmxvY2F0aW9uKCkgIT0gYi5sb2NhdGlvbigp
IHx8IGEuc2l6ZSgpICE9IGIuc2l6ZSgpOworfQorCitpbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBw
ZWRJbnRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiByZWN0KQoreworI2lmIEVOQUJM
RShTVUJQSVhFTF9MQVlPVVQpCisgICAgcmV0dXJuIEludFJlY3Qocm91bmRlZEludFBvaW50KHJl
Y3QubG9jYXRpb24oKSksIEludFNpemUoc25hcFNpemVUb1BpeGVsKHJlY3Qud2lkdGgoKSwgcmVj
dC54KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNuYXBTaXplVG9QaXhlbChyZWN0LmhlaWdodCgpLCByZWN0LnkoKSkpKTsK
KworI2Vsc2UKKyAgICByZXR1cm4gSW50UmVjdChyZWN0KTsKKyNlbmRpZgorfQorCitJbnRSZWN0
IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKTsKK0ZyYWN0aW9u
YWxMYXlvdXRSZWN0IGVuY2xvc2luZ0ZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBGcmFjdGlvbmFsTGF5
b3V0UmVjdF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRS
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5
b3V0UmVjdC5oCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9MYXlvdXRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEyICsyOCwxMiBAQAog
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEZyYWN0aW9uYWxMYXlvdXRSZWN0X2gKLSNk
ZWZpbmUgRnJhY3Rpb25hbExheW91dFJlY3RfaAorI2lmbmRlZiBMYXlvdXRSZWN0X2gKKyNkZWZp
bmUgTGF5b3V0UmVjdF9oCiAKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Lmgi
Ci0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFBvaW50LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5o
IgorI2luY2x1ZGUgIkxheW91dEJveEV4dGVudC5oIgorI2luY2x1ZGUgIkxheW91dFBvaW50Lmgi
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgUExBVEZPUk0oUVQpCkBAIC00OCwzNCAr
NDgsMzQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGbG9hdFJlY3Q7CiAKLWNsYXNz
IEZyYWN0aW9uYWxMYXlvdXRSZWN0IHsKK2NsYXNzIExheW91dFJlY3QgewogcHVibGljOgotICAg
IEZyYWN0aW9uYWxMYXlvdXRSZWN0KCkgeyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFJlY3QoY29u
c3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBsb2NhdGlvbiwgY29uc3QgRnJhY3Rpb25hbExheW91
dFNpemUmIHNpemUpCisgICAgTGF5b3V0UmVjdCgpIHsgfQorICAgIExheW91dFJlY3QoY29uc3Qg
TGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBjb25zdCBMYXlvdXRTaXplJiBzaXplKQogICAgICAgICA6
IG1fbG9jYXRpb24obG9jYXRpb24pLCBtX3NpemUoc2l6ZSkgeyB9Ci0gICAgRnJhY3Rpb25hbExh
eW91dFJlY3QoRnJhY3Rpb25hbExheW91dFVuaXQgeCwgRnJhY3Rpb25hbExheW91dFVuaXQgeSwg
RnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCkK
LSAgICAgICAgOiBtX2xvY2F0aW9uKEZyYWN0aW9uYWxMYXlvdXRQb2ludCh4LCB5KSksIG1fc2l6
ZShGcmFjdGlvbmFsTGF5b3V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkgeyB9Ci0gICAgRnJhY3Rpb25h
bExheW91dFJlY3QoY29uc3QgRmxvYXRQb2ludCYgbG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSkKKyAgICBMYXlvdXRSZWN0KExheW91dFVuaXQgeCwgTGF5b3V0VW5pdCB5LCBMYXlvdXRV
bml0IHdpZHRoLCBMYXlvdXRVbml0IGhlaWdodCkKKyAgICAgICAgOiBtX2xvY2F0aW9uKExheW91
dFBvaW50KHgsIHkpKSwgbV9zaXplKExheW91dFNpemUod2lkdGgsIGhlaWdodCkpIHsgfQorICAg
IExheW91dFJlY3QoY29uc3QgRmxvYXRQb2ludCYgbG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSkKICAgICAgICAgOiBtX2xvY2F0aW9uKGxvY2F0aW9uKSwgbV9zaXplKHNpemUpIHsgfQot
ICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIDogbV9sb2NhdGlv
bihyZWN0LmxvY2F0aW9uKCkpLCBtX3NpemUocmVjdC5zaXplKCkpIHsgfQorICAgIExheW91dFJl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCkgOiBtX2xvY2F0aW9uKHJlY3QubG9jYXRpb24oKSksIG1f
c2l6ZShyZWN0LnNpemUoKSkgeyB9CiAKLSAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0UmVj
dChjb25zdCBGbG9hdFJlY3QmKTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0
J3MgbG9zc3kKKyAgICBleHBsaWNpdCBMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOyAvLyBk
b24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQogICAgICAgICAKLSAgICBG
cmFjdGlvbmFsTGF5b3V0UG9pbnQgbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9u
OyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZTsgfQorICAgIExheW91dFBvaW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlv
bjsgfQorICAgIExheW91dFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogCiAg
ICAgSW50UG9pbnQgcGl4ZWxTbmFwcGVkTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiByb3VuZGVk
SW50UG9pbnQobV9sb2NhdGlvbik7IH0KICAgICBJbnRTaXplIHBpeGVsU25hcHBlZFNpemUoKSBj
b25zdCB7IHJldHVybiBJbnRTaXplKHNuYXBTaXplVG9QaXhlbChtX3NpemUud2lkdGgoKSwgbV9s
b2NhdGlvbi54KCkpLCBzbmFwU2l6ZVRvUGl4ZWwobV9zaXplLmhlaWdodCgpLCBtX2xvY2F0aW9u
LnkoKSkpOyB9CiAKLSAgICB2b2lkIHNldExvY2F0aW9uKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCYgbG9jYXRpb24pIHsgbV9sb2NhdGlvbiA9IGxvY2F0aW9uOyB9Ci0gICAgdm9pZCBzZXRT
aXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0K
KyAgICB2b2lkIHNldExvY2F0aW9uKGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbikgeyBtX2xv
Y2F0aW9uID0gbG9jYXRpb247IH0KKyAgICB2b2lkIHNldFNpemUoY29uc3QgTGF5b3V0U2l6ZSYg
c2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9CiAKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB4KCkg
Y29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi54KCk7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dCB5KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi55KCk7IH0KLSAgICBGcmFjdGlvbmFsTGF5
b3V0VW5pdCBtYXhYKCkgY29uc3QgeyByZXR1cm4geCgpICsgd2lkdGgoKTsgfQotICAgIEZyYWN0
aW9uYWxMYXlvdXRVbml0IG1heFkoKSBjb25zdCB7IHJldHVybiB5KCkgKyBoZWlnaHQoKTsgfQot
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9zaXplLndp
ZHRoKCk7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBoZWlnaHQoKSBjb25zdCB7IHJldHVy
biBtX3NpemUuaGVpZ2h0KCk7IH0KKyAgICBMYXlvdXRVbml0IHgoKSBjb25zdCB7IHJldHVybiBt
X2xvY2F0aW9uLngoKTsgfQorICAgIExheW91dFVuaXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9j
YXRpb24ueSgpOyB9CisgICAgTGF5b3V0VW5pdCBtYXhYKCkgY29uc3QgeyByZXR1cm4geCgpICsg
d2lkdGgoKTsgfQorICAgIExheW91dFVuaXQgbWF4WSgpIGNvbnN0IHsgcmV0dXJuIHkoKSArIGhl
aWdodCgpOyB9CisgICAgTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53
aWR0aCgpOyB9CisgICAgTGF5b3V0VW5pdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUu
aGVpZ2h0KCk7IH0KIAogICAgIGludCBwaXhlbFNuYXBwZWRYKCkgY29uc3QgeyByZXR1cm4geCgp
LnJvdW5kKCk7IH0KICAgICBpbnQgcGl4ZWxTbmFwcGVkWSgpIGNvbnN0IHsgcmV0dXJuIHkoKS5y
b3VuZCgpOyB9CkBAIC04NCwxMzEgKzg0LDEzMSBAQCBwdWJsaWM6CiAgICAgaW50IHBpeGVsU25h
cHBlZE1heFgoKSBjb25zdCB7IHJldHVybiAobV9sb2NhdGlvbi54KCkgKyBtX3NpemUud2lkdGgo
KSkucm91bmQoKTsgfQogICAgIGludCBwaXhlbFNuYXBwZWRNYXhZKCkgY29uc3QgeyByZXR1cm4g
KG1fbG9jYXRpb24ueSgpICsgbV9zaXplLmhlaWdodCgpKS5yb3VuZCgpOyB9CiAKLSAgICB2b2lk
IHNldFgoRnJhY3Rpb25hbExheW91dFVuaXQgeCkgeyBtX2xvY2F0aW9uLnNldFgoeCk7IH0KLSAg
ICB2b2lkIHNldFkoRnJhY3Rpb25hbExheW91dFVuaXQgeSkgeyBtX2xvY2F0aW9uLnNldFkoeSk7
IH0KLSAgICB2b2lkIHNldFdpZHRoKEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKSB7IG1fc2l6
ZS5zZXRXaWR0aCh3aWR0aCk7IH0KLSAgICB2b2lkIHNldEhlaWdodChGcmFjdGlvbmFsTGF5b3V0
VW5pdCBoZWlnaHQpIHsgbV9zaXplLnNldEhlaWdodChoZWlnaHQpOyB9CisgICAgdm9pZCBzZXRY
KExheW91dFVuaXQgeCkgeyBtX2xvY2F0aW9uLnNldFgoeCk7IH0KKyAgICB2b2lkIHNldFkoTGF5
b3V0VW5pdCB5KSB7IG1fbG9jYXRpb24uc2V0WSh5KTsgfQorICAgIHZvaWQgc2V0V2lkdGgoTGF5
b3V0VW5pdCB3aWR0aCkgeyBtX3NpemUuc2V0V2lkdGgod2lkdGgpOyB9CisgICAgdm9pZCBzZXRI
ZWlnaHQoTGF5b3V0VW5pdCBoZWlnaHQpIHsgbV9zaXplLnNldEhlaWdodChoZWlnaHQpOyB9CiAK
ICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaXNFbXB0eSgpOyB9CiAK
ICAgICAvLyBOT1RFOiBUaGUgcmVzdWx0IGlzIHJvdW5kZWQgdG8gaW50ZWdlciB2YWx1ZXMsIGFu
ZCB0aHVzIG1heSBiZSBub3QgdGhlIGV4YWN0CiAgICAgLy8gY2VudGVyIHBvaW50LgotICAgIEZy
YWN0aW9uYWxMYXlvdXRQb2ludCBjZW50ZXIoKSBjb25zdCB7IHJldHVybiBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQoeCgpICsgd2lkdGgoKSAvIDIsIHkoKSArIGhlaWdodCgpIC8gMik7IH0KKyAgICBM
YXlvdXRQb2ludCBjZW50ZXIoKSBjb25zdCB7IHJldHVybiBMYXlvdXRQb2ludCh4KCkgKyB3aWR0
aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAyKTsgfQogCi0gICAgdm9pZCBtb3ZlKGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1fbG9jYXRpb24gKz0gc2l6ZTsgfSAKLSAgICB2
b2lkIG1vdmVCeShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIG9mZnNldCkgeyBtX2xvY2F0
aW9uLm1vdmUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7IH0KLSAgICB2b2lkIG1vdmUoRnJhY3Rp
b25hbExheW91dFVuaXQgZHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGR5KSB7IG1fbG9jYXRpb24u
bW92ZShkeCwgZHkpOyB9IAorICAgIHZvaWQgbW92ZShjb25zdCBMYXlvdXRTaXplJiBzaXplKSB7
IG1fbG9jYXRpb24gKz0gc2l6ZTsgfSAKKyAgICB2b2lkIG1vdmVCeShjb25zdCBMYXlvdXRQb2lu
dCYgb2Zmc2V0KSB7IG1fbG9jYXRpb24ubW92ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsgfQor
ICAgIHZvaWQgbW92ZShMYXlvdXRVbml0IGR4LCBMYXlvdXRVbml0IGR5KSB7IG1fbG9jYXRpb24u
bW92ZShkeCwgZHkpOyB9IAogCi0gICAgdm9pZCBleHBhbmQoY29uc3QgRnJhY3Rpb25hbExheW91
dFNpemUmIHNpemUpIHsgbV9zaXplICs9IHNpemU7IH0KLSAgICB2b2lkIGV4cGFuZChjb25zdCBG
cmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50JiBib3gpCisgICAgdm9pZCBleHBhbmQoY29uc3QgTGF5
b3V0U2l6ZSYgc2l6ZSkgeyBtX3NpemUgKz0gc2l6ZTsgfQorICAgIHZvaWQgZXhwYW5kKGNvbnN0
IExheW91dEJveEV4dGVudCYgYm94KQogICAgIHsKICAgICAgICAgbV9sb2NhdGlvbi5tb3ZlKC1i
b3gubGVmdCgpLCAtYm94LnRvcCgpKTsKICAgICAgICAgbV9zaXplLmV4cGFuZChib3gubGVmdCgp
ICsgYm94LnJpZ2h0KCksIGJveC50b3AoKSArIGJveC5ib3R0b20oKSk7CiAgICAgfQotICAgIHZv
aWQgZXhwYW5kKEZyYWN0aW9uYWxMYXlvdXRVbml0IGR3LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBk
aCkgeyBtX3NpemUuZXhwYW5kKGR3LCBkaCk7IH0KLSAgICB2b2lkIGNvbnRyYWN0KGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1fc2l6ZSAtPSBzaXplOyB9Ci0gICAgdm9pZCBj
b250cmFjdChGcmFjdGlvbmFsTGF5b3V0VW5pdCBkdywgRnJhY3Rpb25hbExheW91dFVuaXQgZGgp
IHsgbV9zaXplLmV4cGFuZCgtZHcsIC1kaCk7IH0KKyAgICB2b2lkIGV4cGFuZChMYXlvdXRVbml0
IGR3LCBMYXlvdXRVbml0IGRoKSB7IG1fc2l6ZS5leHBhbmQoZHcsIGRoKTsgfQorICAgIHZvaWQg
Y29udHJhY3QoY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkgeyBtX3NpemUgLT0gc2l6ZTsgfQorICAg
IHZvaWQgY29udHJhY3QoTGF5b3V0VW5pdCBkdywgTGF5b3V0VW5pdCBkaCkgeyBtX3NpemUuZXhw
YW5kKC1kdywgLWRoKTsgfQogCi0gICAgdm9pZCBzaGlmdFhFZGdlVG8oRnJhY3Rpb25hbExheW91
dFVuaXQgZWRnZSkKKyAgICB2b2lkIHNoaWZ0WEVkZ2VUbyhMYXlvdXRVbml0IGVkZ2UpCiAgICAg
ewotICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkZWx0YSA9IGVkZ2UgLSB4KCk7CisgICAg
ICAgIExheW91dFVuaXQgZGVsdGEgPSBlZGdlIC0geCgpOwogICAgICAgICBzZXRYKGVkZ2UpOwot
ICAgICAgICBzZXRXaWR0aChzdGQ6Om1heDxGcmFjdGlvbmFsTGF5b3V0VW5pdD4oMCwgd2lkdGgo
KSAtIGRlbHRhKSk7CisgICAgICAgIHNldFdpZHRoKHN0ZDo6bWF4PExheW91dFVuaXQ+KDAsIHdp
ZHRoKCkgLSBkZWx0YSkpOwogICAgIH0KLSAgICB2b2lkIHNoaWZ0TWF4WEVkZ2VUbyhGcmFjdGlv
bmFsTGF5b3V0VW5pdCBlZGdlKQorICAgIHZvaWQgc2hpZnRNYXhYRWRnZVRvKExheW91dFVuaXQg
ZWRnZSkKICAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRlbHRhID0gZWRnZSAt
IG1heFgoKTsKLSAgICAgICAgc2V0V2lkdGgoc3RkOjptYXg8RnJhY3Rpb25hbExheW91dFVuaXQ+
KDAsIHdpZHRoKCkgKyBkZWx0YSkpOworICAgICAgICBMYXlvdXRVbml0IGRlbHRhID0gZWRnZSAt
IG1heFgoKTsKKyAgICAgICAgc2V0V2lkdGgoc3RkOjptYXg8TGF5b3V0VW5pdD4oMCwgd2lkdGgo
KSArIGRlbHRhKSk7CiAgICAgfQotICAgIHZvaWQgc2hpZnRZRWRnZVRvKEZyYWN0aW9uYWxMYXlv
dXRVbml0IGVkZ2UpCisgICAgdm9pZCBzaGlmdFlFZGdlVG8oTGF5b3V0VW5pdCBlZGdlKQogICAg
IHsKLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZGVsdGEgPSBlZGdlIC0geSgpOworICAg
ICAgICBMYXlvdXRVbml0IGRlbHRhID0gZWRnZSAtIHkoKTsKICAgICAgICAgc2V0WShlZGdlKTsK
LSAgICAgICAgc2V0SGVpZ2h0KHN0ZDo6bWF4PEZyYWN0aW9uYWxMYXlvdXRVbml0PigwLCBoZWln
aHQoKSAtIGRlbHRhKSk7CisgICAgICAgIHNldEhlaWdodChzdGQ6Om1heDxMYXlvdXRVbml0Pigw
LCBoZWlnaHQoKSAtIGRlbHRhKSk7CiAgICAgfQotICAgIHZvaWQgc2hpZnRNYXhZRWRnZVRvKEZy
YWN0aW9uYWxMYXlvdXRVbml0IGVkZ2UpCisgICAgdm9pZCBzaGlmdE1heFlFZGdlVG8oTGF5b3V0
VW5pdCBlZGdlKQogICAgIHsKLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZGVsdGEgPSBl
ZGdlIC0gbWF4WSgpOwotICAgICAgICBzZXRIZWlnaHQoc3RkOjptYXg8RnJhY3Rpb25hbExheW91
dFVuaXQ+KDAsIGhlaWdodCgpICsgZGVsdGEpKTsKKyAgICAgICAgTGF5b3V0VW5pdCBkZWx0YSA9
IGVkZ2UgLSBtYXhZKCk7CisgICAgICAgIHNldEhlaWdodChzdGQ6Om1heDxMYXlvdXRVbml0Pigw
LCBoZWlnaHQoKSArIGRlbHRhKSk7CiAgICAgfQogCi0gICAgRnJhY3Rpb25hbExheW91dFBvaW50
IG1pblhNaW5ZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfSAvLyB0eXBpY2Fs
bHkgdG9wTGVmdAotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBtYXhYTWluWUNvcm5lcigpIGNv
bnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChtX2xvY2F0aW9uLngoKSArIG1fc2l6
ZS53aWR0aCgpLCBtX2xvY2F0aW9uLnkoKSk7IH0gLy8gdHlwaWNhbGx5IHRvcFJpZ2h0Ci0gICAg
RnJhY3Rpb25hbExheW91dFBvaW50IG1pblhNYXhZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gRnJh
Y3Rpb25hbExheW91dFBvaW50KG1fbG9jYXRpb24ueCgpLCBtX2xvY2F0aW9uLnkoKSArIG1fc2l6
ZS5oZWlnaHQoKSk7IH0gLy8gdHlwaWNhbGx5IGJvdHRvbUxlZnQKLSAgICBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQgbWF4WE1heFlDb3JuZXIoKSBjb25zdCB7IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQobV9sb2NhdGlvbi54KCkgKyBtX3NpemUud2lkdGgoKSwgbV9sb2NhdGlvbi55KCkgKyBt
X3NpemUuaGVpZ2h0KCkpOyB9IC8vIHR5cGljYWxseSBib3R0b21SaWdodAorICAgIExheW91dFBv
aW50IG1pblhNaW5ZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfSAvLyB0eXBp
Y2FsbHkgdG9wTGVmdAorICAgIExheW91dFBvaW50IG1heFhNaW5ZQ29ybmVyKCkgY29uc3QgeyBy
ZXR1cm4gTGF5b3V0UG9pbnQobV9sb2NhdGlvbi54KCkgKyBtX3NpemUud2lkdGgoKSwgbV9sb2Nh
dGlvbi55KCkpOyB9IC8vIHR5cGljYWxseSB0b3BSaWdodAorICAgIExheW91dFBvaW50IG1pblhN
YXhZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gTGF5b3V0UG9pbnQobV9sb2NhdGlvbi54KCksIG1f
bG9jYXRpb24ueSgpICsgbV9zaXplLmhlaWdodCgpKTsgfSAvLyB0eXBpY2FsbHkgYm90dG9tTGVm
dAorICAgIExheW91dFBvaW50IG1heFhNYXhZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gTGF5b3V0
UG9pbnQobV9sb2NhdGlvbi54KCkgKyBtX3NpemUud2lkdGgoKSwgbV9sb2NhdGlvbi55KCkgKyBt
X3NpemUuaGVpZ2h0KCkpOyB9IC8vIHR5cGljYWxseSBib3R0b21SaWdodAogICAgIAotICAgIGJv
b2wgaW50ZXJzZWN0cyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpIGNvbnN0OwotICAgIGJv
b2wgY29udGFpbnMoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKSBjb25zdDsKKyAgICBib29s
IGludGVyc2VjdHMoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OworICAgIGJvb2wgY29udGFpbnMo
Y29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwogCiAgICAgLy8gVGhpcyBjaGVja3MgdG8gc2VlIGlm
IHRoZSByZWN0IGNvbnRhaW5zIHgseSBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuCiAgICAgLy8g
RXF1aXZhbGVudCB0byBjaGVja2luZyBpZiB0aGUgcmVjdCBjb250YWlucyBhIDF4MSByZWN0IGJl
bG93IGFuZCB0byB0aGUgcmlnaHQgb2YgKHB4LHB5KS4KLSAgICBib29sIGNvbnRhaW5zKEZyYWN0
aW9uYWxMYXlvdXRVbml0IHB4LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBweSkgY29uc3QKKyAgICBi
b29sIGNvbnRhaW5zKExheW91dFVuaXQgcHgsIExheW91dFVuaXQgcHkpIGNvbnN0CiAgICAgICAg
IHsgcmV0dXJuIHB4ID49IHgoKSAmJiBweCA8IG1heFgoKSAmJiBweSA+PSB5KCkgJiYgcHkgPCBt
YXhZKCk7IH0KLSAgICBib29sIGNvbnRhaW5zKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYg
cG9pbnQpIGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsgfQor
ICAgIGJvb2wgY29udGFpbnMoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KSBjb25zdCB7IHJldHVy
biBjb250YWlucyhwb2ludC54KCksIHBvaW50LnkoKSk7IH0KIAotICAgIHZvaWQgaW50ZXJzZWN0
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0Jik7Ci0gICAgdm9pZCB1bml0ZShjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UmVjdCYpOwotICAgIHZvaWQgdW5pdGVJZk5vblplcm8oY29uc3QgRnJhY3Rp
b25hbExheW91dFJlY3QmKTsKKyAgICB2b2lkIGludGVyc2VjdChjb25zdCBMYXlvdXRSZWN0Jik7
CisgICAgdm9pZCB1bml0ZShjb25zdCBMYXlvdXRSZWN0Jik7CisgICAgdm9pZCB1bml0ZUlmTm9u
WmVybyhjb25zdCBMYXlvdXRSZWN0Jik7CiAKLSAgICB2b2lkIGluZmxhdGVYKEZyYWN0aW9uYWxM
YXlvdXRVbml0IGR4KQorICAgIHZvaWQgaW5mbGF0ZVgoTGF5b3V0VW5pdCBkeCkKICAgICB7CiAg
ICAgICAgIG1fbG9jYXRpb24uc2V0WChtX2xvY2F0aW9uLngoKSAtIGR4KTsKICAgICAgICAgbV9z
aXplLnNldFdpZHRoKG1fc2l6ZS53aWR0aCgpICsgZHggKyBkeCk7CiAgICAgfQotICAgIHZvaWQg
aW5mbGF0ZVkoRnJhY3Rpb25hbExheW91dFVuaXQgZHkpCisgICAgdm9pZCBpbmZsYXRlWShMYXlv
dXRVbml0IGR5KQogICAgIHsKICAgICAgICAgbV9sb2NhdGlvbi5zZXRZKG1fbG9jYXRpb24ueSgp
IC0gZHkpOwogICAgICAgICBtX3NpemUuc2V0SGVpZ2h0KG1fc2l6ZS5oZWlnaHQoKSArIGR5ICsg
ZHkpOwogICAgIH0KLSAgICB2b2lkIGluZmxhdGUoRnJhY3Rpb25hbExheW91dFVuaXQgZCkgeyBp
bmZsYXRlWChkKTsgaW5mbGF0ZVkoZCk7IH0KKyAgICB2b2lkIGluZmxhdGUoTGF5b3V0VW5pdCBk
KSB7IGluZmxhdGVYKGQpOyBpbmZsYXRlWShkKTsgfQogICAgIHZvaWQgc2NhbGUoZmxvYXQgcyk7
CiAKLSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCB0cmFuc3Bvc2VkUmVjdCgpIGNvbnN0IHsgcmV0
dXJuIEZyYWN0aW9uYWxMYXlvdXRSZWN0KG1fbG9jYXRpb24udHJhbnNwb3NlZFBvaW50KCksIG1f
c2l6ZS50cmFuc3Bvc2VkU2l6ZSgpKTsgfQorICAgIExheW91dFJlY3QgdHJhbnNwb3NlZFJlY3Qo
KSBjb25zdCB7IHJldHVybiBMYXlvdXRSZWN0KG1fbG9jYXRpb24udHJhbnNwb3NlZFBvaW50KCks
IG1fc2l6ZS50cmFuc3Bvc2VkU2l6ZSgpKTsgfQogCi0gICAgc3RhdGljIEZyYWN0aW9uYWxMYXlv
dXRSZWN0IGluZmluaXRlUmVjdCgpCisgICAgc3RhdGljIExheW91dFJlY3QgaW5maW5pdGVSZWN0
KCkKICAgICB7CiAgICAgICAgIC8vIFJldHVybiBhIHJlY3QgdGhhdCBpcyBzbGlnaHRseSBzbWFs
bGVyIHRoYW4gdGhlIHRydWUgbWF4IHJlY3QgdG8gYWxsb3cgcGl4ZWxTbmFwcGluZyB0byByb3Vu
ZCB1cCB0byB0aGUgbmVhcmVzdCBJbnRSZWN0IHdpdGhvdXQgb3ZlcmZsb3dpbmcuCi0gICAgICAg
IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UmVjdChGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bmVhcmx5
TWluKCkgLyAyLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bmVhcmx5TWluKCkgLyAyLCBGcmFjdGlv
bmFsTGF5b3V0VW5pdDo6bmVhcmx5TWF4KCksIEZyYWN0aW9uYWxMYXlvdXRVbml0OjpuZWFybHlN
YXgoKSk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KExheW91dFVuaXQ6Om5lYXJseU1pbigp
IC8gMiwgTGF5b3V0VW5pdDo6bmVhcmx5TWluKCkgLyAyLCBMYXlvdXRVbml0OjpuZWFybHlNYXgo
KSwgTGF5b3V0VW5pdDo6bmVhcmx5TWF4KCkpOwogICAgIH0KIAogI2lmIFBMQVRGT1JNKFFUKQot
ICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IFFSZWN0Jik7Ci0gICAgZXhw
bGljaXQgRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgUVJlY3RGJik7CisgICAgZXhwbGljaXQg
TGF5b3V0UmVjdChjb25zdCBRUmVjdCYpOworICAgIGV4cGxpY2l0IExheW91dFJlY3QoY29uc3Qg
UVJlY3RGJik7CiAgICAgb3BlcmF0b3IgUVJlY3RGKCkgY29uc3Q7CiAjZW5kaWYKIAogcHJpdmF0
ZToKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbV9sb2NhdGlvbjsKLSAgICBGcmFjdGlvbmFs
TGF5b3V0U2l6ZSBtX3NpemU7CisgICAgTGF5b3V0UG9pbnQgbV9sb2NhdGlvbjsKKyAgICBMYXlv
dXRTaXplIG1fc2l6ZTsKIH07CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UmVjdCBpbnRlcnNl
Y3Rpb24oY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRSZWN0JiBiKQoraW5saW5lIExheW91dFJlY3QgaW50ZXJzZWN0aW9uKGNvbnN0IExheW91dFJl
Y3QmIGEsIGNvbnN0IExheW91dFJlY3QmIGIpCiB7Ci0gICAgRnJhY3Rpb25hbExheW91dFJlY3Qg
YyA9IGE7CisgICAgTGF5b3V0UmVjdCBjID0gYTsKICAgICBjLmludGVyc2VjdChiKTsKICAgICBy
ZXR1cm4gYzsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRSZWN0IHVuaW9uUmVjdChjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGIp
CitpbmxpbmUgTGF5b3V0UmVjdCB1bmlvblJlY3QoY29uc3QgTGF5b3V0UmVjdCYgYSwgY29uc3Qg
TGF5b3V0UmVjdCYgYikKIHsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCBjID0gYTsKKyAgICBM
YXlvdXRSZWN0IGMgPSBhOwogICAgIGMudW5pdGUoYik7CiAgICAgcmV0dXJuIGM7CiB9CiAKLUZy
YWN0aW9uYWxMYXlvdXRSZWN0IHVuaW9uUmVjdChjb25zdCBWZWN0b3I8RnJhY3Rpb25hbExheW91
dFJlY3Q+Jik7CitMYXlvdXRSZWN0IHVuaW9uUmVjdChjb25zdCBWZWN0b3I8TGF5b3V0UmVjdD4m
KTsKIAotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYg
YSwgY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IExheW91dFJlY3QmIGEsIGNvbnN0IExheW91dFJlY3QmIGIpCiB7CiAgICAgcmV0dXJu
IGEubG9jYXRpb24oKSA9PSBiLmxvY2F0aW9uKCkgJiYgYS5zaXplKCkgPT0gYi5zaXplKCk7CiB9
CiAKLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGEs
IGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBMYXlvdXRSZWN0JiBhLCBjb25zdCBMYXlvdXRSZWN0JiBiKQogewogICAgIHJldHVybiBh
LmxvY2F0aW9uKCkgIT0gYi5sb2NhdGlvbigpIHx8IGEuc2l6ZSgpICE9IGIuc2l6ZSgpOwogfQog
Ci1pbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRSZWN0JiByZWN0KQoraW5saW5lIEludFJlY3QgcGl4ZWxTbmFwcGVkSW50UmVjdChjb25zdCBM
YXlvdXRSZWN0JiByZWN0KQogewogI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCiAgICAgcmV0
dXJuIEludFJlY3Qocm91bmRlZEludFBvaW50KHJlY3QubG9jYXRpb24oKSksIEludFNpemUoc25h
cFNpemVUb1BpeGVsKHJlY3Qud2lkdGgoKSwgcmVjdC54KCkpLApAQCAtMjE5LDkgKzIxOSwyNSBA
QCBpbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0KGNvbnN0CiAjZW5kaWYKIH0KIAot
SW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0Jik7Ci1G
cmFjdGlvbmFsTGF5b3V0UmVjdCBlbmNsb3NpbmdGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBG
bG9hdFJlY3QmKTsKK0ludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBMYXlvdXRSZWN0Jik7
CitMYXlvdXRSZWN0IGVuY2xvc2luZ0xheW91dFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisKKwor
aW5saW5lIEludFJlY3QgcGl4ZWxTbmFwcGVkSW50UmVjdChMYXlvdXRVbml0IGxlZnQsIExheW91
dFVuaXQgdG9wLCBMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IGhlaWdodCkKK3sKKyAgICBy
ZXR1cm4gSW50UmVjdChsZWZ0LnJvdW5kKCksIHRvcC5yb3VuZCgpLCBzbmFwU2l6ZVRvUGl4ZWwo
d2lkdGgsIGxlZnQpLCBzbmFwU2l6ZVRvUGl4ZWwoaGVpZ2h0LCB0b3ApKTsKK30KKworaW5saW5l
IEludFJlY3QgcGl4ZWxTbmFwcGVkSW50UmVjdEZyb21FZGdlcyhMYXlvdXRVbml0IGxlZnQsIExh
eW91dFVuaXQgdG9wLCBMYXlvdXRVbml0IHJpZ2h0LCBMYXlvdXRVbml0IGJvdHRvbSkKK3sKKyAg
ICByZXR1cm4gSW50UmVjdChsZWZ0LnJvdW5kKCksIHRvcC5yb3VuZCgpLCBzbmFwU2l6ZVRvUGl4
ZWwocmlnaHQgLSBsZWZ0LCBsZWZ0KSwgc25hcFNpemVUb1BpeGVsKGJvdHRvbSAtIHRvcCwgdG9w
KSk7Cit9CisKK2lubGluZSBJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3QoTGF5b3V0UG9pbnQg
bG9jYXRpb24sIExheW91dFNpemUgc2l6ZSkKK3sKKyAgICByZXR1cm4gSW50UmVjdChyb3VuZGVk
SW50UG9pbnQobG9jYXRpb24pLCBwaXhlbFNuYXBwZWRJbnRTaXplKHNpemUsIGxvY2F0aW9uKSk7
Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEZyYWN0aW9uYWxMYXlv
dXRSZWN0X2gKKyNlbmRpZiAvLyBMYXlvdXRSZWN0X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0xheW91dFNpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRTaXplLmgJKHJldmlzaW9uIDEzMzUxNykJKGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFNpemUuaDox
MzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRTaXplLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw
MTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGcmFjdGlvbmFsTGF5b3V0
U2l6ZV9oCisjZGVmaW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplX2gKKworI2luY2x1ZGUgIkZsb2F0
U2l6ZS5oIgorI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRVbml0LmgiCisjaW5jbHVkZSAiSW50
U2l6ZS5oIgorCisjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8cWdsb2JhbC5oPgorUVRfQkVH
SU5fTkFNRVNQQUNFCitjbGFzcyBRU2l6ZTsKK2NsYXNzIFFTaXplRjsKK1FUX0VORF9OQU1FU1BB
Q0UKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZyYWN0aW9uYWxMYXlv
dXRQb2ludDsKKworY2xhc3MgRnJhY3Rpb25hbExheW91dFNpemUgeworcHVibGljOgorICAgIEZy
YWN0aW9uYWxMYXlvdXRTaXplKCkgOiBtX3dpZHRoKDApLCBtX2hlaWdodCgwKSB7IH0KKyAgICBG
cmFjdGlvbmFsTGF5b3V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKSA6IG1fd2lkdGgoc2l6ZS53
aWR0aCgpKSwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkgeyB9CisgICAgRnJhY3Rpb25hbExheW91
dFNpemUoRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGhl
aWdodCkgOiBtX3dpZHRoKHdpZHRoKSwgbV9oZWlnaHQoaGVpZ2h0KSB7IH0KKworICAgIGV4cGxp
Y2l0IEZyYWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgOiBtX3dpZHRo
KHNpemUud2lkdGgoKSksIG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkpIHsgfQorICAgIAorICAgIEZy
YWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQorICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9
CisKKyAgICB2b2lkIHNldFdpZHRoKEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKSB7IG1fd2lk
dGggPSB3aWR0aDsgfQorICAgIHZvaWQgc2V0SGVpZ2h0KEZyYWN0aW9uYWxMYXlvdXRVbml0IGhl
aWdodCkgeyBtX2hlaWdodCA9IGhlaWdodDsgfQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qg
eyByZXR1cm4gbV93aWR0aCA8PSAwIHx8IG1faGVpZ2h0IDw9IDA7IH0KKyAgICBib29sIGlzWmVy
bygpIGNvbnN0IHsgcmV0dXJuICFtX3dpZHRoICYmICFtX2hlaWdodDsgfQorCisgICAgZmxvYXQg
YXNwZWN0UmF0aW8oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obV93aWR0aCkg
LyBzdGF0aWNfY2FzdDxmbG9hdD4obV9oZWlnaHQpOyB9CisgICAgCisgICAgdm9pZCBleHBhbmQo
RnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCkK
KyAgICB7CisgICAgICAgIG1fd2lkdGggKz0gd2lkdGg7CisgICAgICAgIG1faGVpZ2h0ICs9IGhl
aWdodDsKKyAgICB9CisgICAgCisgICAgdm9pZCBzY2FsZShmbG9hdCBzY2FsZSkKKyAgICB7Cisg
ICAgICAgIG1fd2lkdGggKj0gc2NhbGU7CisgICAgICAgIG1faGVpZ2h0ICo9IHNjYWxlOworICAg
IH0KKworICAgIHZvaWQgc2NhbGUoZmxvYXQgd2lkdGhTY2FsZSwgZmxvYXQgaGVpZ2h0U2NhbGUp
CisgICAgeworICAgICAgICBtX3dpZHRoICo9IHdpZHRoU2NhbGU7CisgICAgICAgIG1faGVpZ2h0
ICo9IGhlaWdodFNjYWxlOworICAgIH0KKyAgICAKKyAgICBGcmFjdGlvbmFsTGF5b3V0U2l6ZSBl
eHBhbmRlZFRvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShtX3dpZHRoID4gb3RoZXIubV93
aWR0aCA/IG1fd2lkdGggOiBvdGhlci5tX3dpZHRoLAorICAgICAgICAgICAgbV9oZWlnaHQgPiBv
dGhlci5tX2hlaWdodCA/IG1faGVpZ2h0IDogb3RoZXIubV9oZWlnaHQpOworICAgIH0KKworICAg
IEZyYWN0aW9uYWxMYXlvdXRTaXplIHNocnVua1RvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXpl
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6
ZShtX3dpZHRoIDwgb3RoZXIubV93aWR0aCA/IG1fd2lkdGggOiBvdGhlci5tX3dpZHRoLAorICAg
ICAgICAgICAgbV9oZWlnaHQgPCBvdGhlci5tX2hlaWdodCA/IG1faGVpZ2h0IDogb3RoZXIubV9o
ZWlnaHQpOworICAgIH0KKworICAgIHZvaWQgY2xhbXBOZWdhdGl2ZVRvWmVybygpCisgICAgewor
ICAgICAgICAqdGhpcyA9IGV4cGFuZGVkVG8oRnJhY3Rpb25hbExheW91dFNpemUoKSk7CisgICAg
fQorICAgIAorICAgIHZvaWQgY2xhbXBUb01pbmltdW1TaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRTaXplJiBtaW5pbXVtU2l6ZSkKKyAgICB7CisgICAgICAgIGlmIChtX3dpZHRoIDwgbWluaW11
bVNpemUud2lkdGgoKSkKKyAgICAgICAgICAgIG1fd2lkdGggPSBtaW5pbXVtU2l6ZS53aWR0aCgp
OworICAgICAgICBpZiAobV9oZWlnaHQgPCBtaW5pbXVtU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAg
ICAgIG1faGVpZ2h0ID0gbWluaW11bVNpemUuaGVpZ2h0KCk7CisgICAgfQorCisgICAgRnJhY3Rp
b25hbExheW91dFNpemUgdHJhbnNwb3NlZFNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKG1faGVpZ2h0LCBtX3dpZHRoKTsKKyAgICB9CisKKyNp
ZiBQTEFURk9STShRVCkKKyAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZShjb25zdCBR
U2l6ZSYpOworICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0IFFTaXplRiYp
OworICAgIG9wZXJhdG9yIFFTaXplRigpIGNvbnN0OworI2VuZGlmCisKK3ByaXZhdGU6CisgICAg
RnJhY3Rpb25hbExheW91dFVuaXQgbV93aWR0aCwgbV9oZWlnaHQ7Cit9OworCitpbmxpbmUgRnJh
Y3Rpb25hbExheW91dFNpemUmIG9wZXJhdG9yKz0oRnJhY3Rpb25hbExheW91dFNpemUmIGEsIGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQoreworICAgIGEuc2V0V2lkdGgoYS53aWR0aCgp
ICsgYi53aWR0aCgpKTsKKyAgICBhLnNldEhlaWdodChhLmhlaWdodCgpICsgYi5oZWlnaHQoKSk7
CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgb3BlcmF0
b3ItPShGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUm
IGIpCit7CisgICAgYS5zZXRXaWR0aChhLndpZHRoKCkgLSBiLndpZHRoKCkpOworICAgIGEuc2V0
SGVpZ2h0KGEuaGVpZ2h0KCkgLSBiLmhlaWdodCgpKTsKKyAgICByZXR1cm4gYTsKK30KKworaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplIG9wZXJhdG9yKyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0
U2l6ZSYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCit7CisgICAgcmV0dXJuIEZy
YWN0aW9uYWxMYXlvdXRTaXplKGEud2lkdGgoKSArIGIud2lkdGgoKSwgYS5oZWlnaHQoKSArIGIu
aGVpZ2h0KCkpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFNpemUgb3BlcmF0b3ItKGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYg
YikKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUoYS53aWR0aCgpIC0gYi53aWR0
aCgpLCBhLmhlaWdodCgpIC0gYi5oZWlnaHQoKSk7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5
b3V0U2l6ZSBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpCit7Cisg
ICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKC1zaXplLndpZHRoKCksIC1zaXplLmhlaWdo
dCgpKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0
U2l6ZSYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCit7CisgICAgcmV0dXJuIGEu
d2lkdGgoKSA9PSBiLndpZHRoKCkgJiYgYS5oZWlnaHQoKSA9PSBiLmhlaWdodCgpOworfQorCitp
bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBhLCBjb25z
dCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK3sKKyAgICByZXR1cm4gYS53aWR0aCgpICE9IGIu
d2lkdGgoKSB8fCBhLmhlaWdodCgpICE9IGIuaGVpZ2h0KCk7Cit9CisKK2lubGluZSBJbnRTaXpl
IGZsb29yZWRJbnRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzKQoreworICAgIHJl
dHVybiBJbnRTaXplKHMud2lkdGgoKS5mbG9vcigpLCBzLmhlaWdodCgpLmZsb29yKCkpOworfQor
CitpbmxpbmUgSW50U2l6ZSByb3VuZGVkSW50U2l6ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6
ZSYgcykKK3sKKyAgICByZXR1cm4gSW50U2l6ZShzLndpZHRoKCkucm91bmQoKSwgcy5oZWlnaHQo
KS5yb3VuZCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRnJh
Y3Rpb25hbExheW91dFNpemVfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvTGF5b3V0U2l6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0xheW91dFNpemUuaAkocmV2aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0U2l6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMiAr
MjgsMTIgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBGcmFjdGlvbmFsTGF5b3V0
U2l6ZV9oCi0jZGVmaW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplX2gKKyNpZm5kZWYgTGF5b3V0U2l6
ZV9oCisjZGVmaW5lIExheW91dFNpemVfaAogCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0jaW5j
bHVkZSAiRnJhY3Rpb25hbExheW91dFVuaXQuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5j
bHVkZSAiTGF5b3V0VW5pdC5oIgogCiAjaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSA8cWdsb2Jh
bC5oPgpAQCAtNDUsMjggKzQ1LDI4IEBAIFFUX0VORF9OQU1FU1BBQ0UKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0UG9pbnQ7CitjbGFzcyBMYXlvdXRQb2lu
dDsKIAotY2xhc3MgRnJhY3Rpb25hbExheW91dFNpemUgeworY2xhc3MgTGF5b3V0U2l6ZSB7CiBw
dWJsaWM6Ci0gICAgRnJhY3Rpb25hbExheW91dFNpemUoKSA6IG1fd2lkdGgoMCksIG1faGVpZ2h0
KDApIHsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpIDog
bV93aWR0aChzaXplLndpZHRoKCkpLCBtX2hlaWdodChzaXplLmhlaWdodCgpKSB7IH0KLSAgICBG
cmFjdGlvbmFsTGF5b3V0U2l6ZShGcmFjdGlvbmFsTGF5b3V0VW5pdCB3aWR0aCwgRnJhY3Rpb25h
bExheW91dFVuaXQgaGVpZ2h0KSA6IG1fd2lkdGgod2lkdGgpLCBtX2hlaWdodChoZWlnaHQpIHsg
fQorICAgIExheW91dFNpemUoKSA6IG1fd2lkdGgoMCksIG1faGVpZ2h0KDApIHsgfQorICAgIExh
eW91dFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgOiBtX3dpZHRoKHNpemUud2lkdGgoKSksIG1f
aGVpZ2h0KHNpemUuaGVpZ2h0KCkpIHsgfQorICAgIExheW91dFNpemUoTGF5b3V0VW5pdCB3aWR0
aCwgTGF5b3V0VW5pdCBoZWlnaHQpIDogbV93aWR0aCh3aWR0aCksIG1faGVpZ2h0KGhlaWdodCkg
eyB9CiAKLSAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZShjb25zdCBGbG9hdFNpemUm
IHNpemUpIDogbV93aWR0aChzaXplLndpZHRoKCkpLCBtX2hlaWdodChzaXplLmhlaWdodCgpKSB7
IH0KKyAgICBleHBsaWNpdCBMYXlvdXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgOiBtX3dp
ZHRoKHNpemUud2lkdGgoKSksIG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkpIHsgfQogICAgIAotICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQot
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0
OyB9CisgICAgTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KKyAg
ICBMYXlvdXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9CiAKLSAgICB2
b2lkIHNldFdpZHRoKEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoKSB7IG1fd2lkdGggPSB3aWR0
aDsgfQotICAgIHZvaWQgc2V0SGVpZ2h0KEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCkgeyBt
X2hlaWdodCA9IGhlaWdodDsgfQorICAgIHZvaWQgc2V0V2lkdGgoTGF5b3V0VW5pdCB3aWR0aCkg
eyBtX3dpZHRoID0gd2lkdGg7IH0KKyAgICB2b2lkIHNldEhlaWdodChMYXlvdXRVbml0IGhlaWdo
dCkgeyBtX2hlaWdodCA9IGhlaWdodDsgfQogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gbV93aWR0aCA8PSAwIHx8IG1faGVpZ2h0IDw9IDA7IH0KICAgICBib29sIGlzWmVybygp
IGNvbnN0IHsgcmV0dXJuICFtX3dpZHRoICYmICFtX2hlaWdodDsgfQogCiAgICAgZmxvYXQgYXNw
ZWN0UmF0aW8oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obV93aWR0aCkgLyBz
dGF0aWNfY2FzdDxmbG9hdD4obV9oZWlnaHQpOyB9CiAgICAgCi0gICAgdm9pZCBleHBhbmQoRnJh
Y3Rpb25hbExheW91dFVuaXQgd2lkdGgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCkKKyAg
ICB2b2lkIGV4cGFuZChMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IGhlaWdodCkKICAgICB7
CiAgICAgICAgIG1fd2lkdGggKz0gd2lkdGg7CiAgICAgICAgIG1faGVpZ2h0ICs9IGhlaWdodDsK
QEAgLTg0LDI0ICs4NCwyNCBAQCBwdWJsaWM6CiAgICAgICAgIG1faGVpZ2h0ICo9IGhlaWdodFNj
YWxlOwogICAgIH0KICAgICAKLSAgICBGcmFjdGlvbmFsTGF5b3V0U2l6ZSBleHBhbmRlZFRvKGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBvdGhlcikgY29uc3QKKyAgICBMYXlvdXRTaXplIGV4
cGFuZGVkVG8oY29uc3QgTGF5b3V0U2l6ZSYgb3RoZXIpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUobV93aWR0aCA+IG90aGVyLm1fd2lkdGggPyBtX3dp
ZHRoIDogb3RoZXIubV93aWR0aCwKKyAgICAgICAgcmV0dXJuIExheW91dFNpemUobV93aWR0aCA+
IG90aGVyLm1fd2lkdGggPyBtX3dpZHRoIDogb3RoZXIubV93aWR0aCwKICAgICAgICAgICAgIG1f
aGVpZ2h0ID4gb3RoZXIubV9oZWlnaHQgPyBtX2hlaWdodCA6IG90aGVyLm1faGVpZ2h0KTsKICAg
ICB9CiAKLSAgICBGcmFjdGlvbmFsTGF5b3V0U2l6ZSBzaHJ1bmtUbyhjb25zdCBGcmFjdGlvbmFs
TGF5b3V0U2l6ZSYgb3RoZXIpIGNvbnN0CisgICAgTGF5b3V0U2l6ZSBzaHJ1bmtUbyhjb25zdCBM
YXlvdXRTaXplJiBvdGhlcikgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBGcmFjdGlvbmFs
TGF5b3V0U2l6ZShtX3dpZHRoIDwgb3RoZXIubV93aWR0aCA/IG1fd2lkdGggOiBvdGhlci5tX3dp
ZHRoLAorICAgICAgICByZXR1cm4gTGF5b3V0U2l6ZShtX3dpZHRoIDwgb3RoZXIubV93aWR0aCA/
IG1fd2lkdGggOiBvdGhlci5tX3dpZHRoLAogICAgICAgICAgICAgbV9oZWlnaHQgPCBvdGhlci5t
X2hlaWdodCA/IG1faGVpZ2h0IDogb3RoZXIubV9oZWlnaHQpOwogICAgIH0KIAogICAgIHZvaWQg
Y2xhbXBOZWdhdGl2ZVRvWmVybygpCiAgICAgewotICAgICAgICAqdGhpcyA9IGV4cGFuZGVkVG8o
RnJhY3Rpb25hbExheW91dFNpemUoKSk7CisgICAgICAgICp0aGlzID0gZXhwYW5kZWRUbyhMYXlv
dXRTaXplKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNsYW1wVG9NaW5pbXVtU2l6ZShjb25z
dCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgbWluaW11bVNpemUpCisgICAgdm9pZCBjbGFtcFRvTWlu
aW11bVNpemUoY29uc3QgTGF5b3V0U2l6ZSYgbWluaW11bVNpemUpCiAgICAgewogICAgICAgICBp
ZiAobV93aWR0aCA8IG1pbmltdW1TaXplLndpZHRoKCkpCiAgICAgICAgICAgICBtX3dpZHRoID0g
bWluaW11bVNpemUud2lkdGgoKTsKQEAgLTEwOSw3MCArMTA5LDc5IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIG1faGVpZ2h0ID0gbWluaW11bVNpemUuaGVpZ2h0KCk7CiAgICAgfQogCi0gICAgRnJh
Y3Rpb25hbExheW91dFNpemUgdHJhbnNwb3NlZFNpemUoKSBjb25zdAorICAgIExheW91dFNpemUg
dHJhbnNwb3NlZFNpemUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxM
YXlvdXRTaXplKG1faGVpZ2h0LCBtX3dpZHRoKTsKKyAgICAgICAgcmV0dXJuIExheW91dFNpemUo
bV9oZWlnaHQsIG1fd2lkdGgpOwogICAgIH0KIAogI2lmIFBMQVRGT1JNKFFUKQotICAgIGV4cGxp
Y2l0IEZyYWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0IFFTaXplJik7Ci0gICAgZXhwbGljaXQgRnJh
Y3Rpb25hbExheW91dFNpemUoY29uc3QgUVNpemVGJik7CisgICAgZXhwbGljaXQgTGF5b3V0U2l6
ZShjb25zdCBRU2l6ZSYpOworICAgIGV4cGxpY2l0IExheW91dFNpemUoY29uc3QgUVNpemVGJik7
CiAgICAgb3BlcmF0b3IgUVNpemVGKCkgY29uc3Q7CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBG
cmFjdGlvbmFsTGF5b3V0VW5pdCBtX3dpZHRoLCBtX2hlaWdodDsKKyAgICBMYXlvdXRVbml0IG1f
d2lkdGgsIG1faGVpZ2h0OwogfTsKIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplJiBvcGVy
YXRvcis9KEZyYWN0aW9uYWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6
ZSYgYikKK2lubGluZSBMYXlvdXRTaXplJiBvcGVyYXRvcis9KExheW91dFNpemUmIGEsIGNvbnN0
IExheW91dFNpemUmIGIpCiB7CiAgICAgYS5zZXRXaWR0aChhLndpZHRoKCkgKyBiLndpZHRoKCkp
OwogICAgIGEuc2V0SGVpZ2h0KGEuaGVpZ2h0KCkgKyBiLmhlaWdodCgpKTsKICAgICByZXR1cm4g
YTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplJiBvcGVyYXRvci09KEZyYWN0aW9u
YWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK2lubGluZSBM
YXlvdXRTaXplJiBvcGVyYXRvci09KExheW91dFNpemUmIGEsIGNvbnN0IExheW91dFNpemUmIGIp
CiB7CiAgICAgYS5zZXRXaWR0aChhLndpZHRoKCkgLSBiLndpZHRoKCkpOwogICAgIGEuc2V0SGVp
Z2h0KGEuaGVpZ2h0KCkgLSBiLmhlaWdodCgpKTsKICAgICByZXR1cm4gYTsKIH0KIAotaW5saW5l
IEZyYWN0aW9uYWxMYXlvdXRTaXplIG9wZXJhdG9yKyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6
ZSYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCitpbmxpbmUgTGF5b3V0U2l6ZSBv
cGVyYXRvcisoY29uc3QgTGF5b3V0U2l6ZSYgYSwgY29uc3QgTGF5b3V0U2l6ZSYgYikKIHsKLSAg
ICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUoYS53aWR0aCgpICsgYi53aWR0aCgpLCBhLmhl
aWdodCgpICsgYi5oZWlnaHQoKSk7CisgICAgcmV0dXJuIExheW91dFNpemUoYS53aWR0aCgpICsg
Yi53aWR0aCgpLCBhLmhlaWdodCgpICsgYi5oZWlnaHQoKSk7CiB9CiAKLWlubGluZSBGcmFjdGlv
bmFsTGF5b3V0U2l6ZSBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGEsIGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQoraW5saW5lIExheW91dFNpemUgb3BlcmF0b3It
KGNvbnN0IExheW91dFNpemUmIGEsIGNvbnN0IExheW91dFNpemUmIGIpCiB7Ci0gICAgcmV0dXJu
IEZyYWN0aW9uYWxMYXlvdXRTaXplKGEud2lkdGgoKSAtIGIud2lkdGgoKSwgYS5oZWlnaHQoKSAt
IGIuaGVpZ2h0KCkpOworICAgIHJldHVybiBMYXlvdXRTaXplKGEud2lkdGgoKSAtIGIud2lkdGgo
KSwgYS5oZWlnaHQoKSAtIGIuaGVpZ2h0KCkpOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91
dFNpemUgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKQoraW5saW5l
IExheW91dFNpemUgb3BlcmF0b3ItKGNvbnN0IExheW91dFNpemUmIHNpemUpCiB7Ci0gICAgcmV0
dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKC1zaXplLndpZHRoKCksIC1zaXplLmhlaWdodCgpKTsK
KyAgICByZXR1cm4gTGF5b3V0U2l6ZSgtc2l6ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQoKSk7CiB9
CiAKLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGEs
IGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBMYXlvdXRTaXplJiBhLCBjb25zdCBMYXlvdXRTaXplJiBiKQogewogICAgIHJldHVybiBh
LndpZHRoKCkgPT0gYi53aWR0aCgpICYmIGEuaGVpZ2h0KCkgPT0gYi5oZWlnaHQoKTsKIH0KIAot
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYSwgY29u
c3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IExheW91dFNpemUmIGEsIGNvbnN0IExheW91dFNpemUmIGIpCiB7CiAgICAgcmV0dXJuIGEud2lk
dGgoKSAhPSBiLndpZHRoKCkgfHwgYS5oZWlnaHQoKSAhPSBiLmhlaWdodCgpOwogfQogCi1pbmxp
bmUgSW50U2l6ZSBmbG9vcmVkSW50U2l6ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgcykK
K2lubGluZSBJbnRTaXplIGZsb29yZWRJbnRTaXplKGNvbnN0IExheW91dFNpemUmIHMpCiB7CiAg
ICAgcmV0dXJuIEludFNpemUocy53aWR0aCgpLmZsb29yKCksIHMuaGVpZ2h0KCkuZmxvb3IoKSk7
CiB9CiAKLWlubGluZSBJbnRTaXplIHJvdW5kZWRJbnRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRTaXplJiBzKQoraW5saW5lIEludFNpemUgcm91bmRlZEludFNpemUoY29uc3QgTGF5b3V0U2l6
ZSYgcykKIHsKICAgICByZXR1cm4gSW50U2l6ZShzLndpZHRoKCkucm91bmQoKSwgcy5oZWlnaHQo
KS5yb3VuZCgpKTsKIH0KIAoraW5saW5lIExheW91dFNpemUgcm91bmRlZExheW91dFNpemUoY29u
c3QgRmxvYXRTaXplJiBzKQoreworI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisgICAgcmV0
dXJuIExheW91dFNpemUocyk7CisjZWxzZQorICAgIHJldHVybiByb3VuZGVkSW50U2l6ZShzKTsK
KyNlbmRpZgorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBGcmFjdGlv
bmFsTGF5b3V0U2l6ZV9oCisjZW5kaWYgLy8gTGF5b3V0U2l6ZV9oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgJKHJldmlzaW9uIDEzMzY2
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNp
bmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgiCisj
aW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJPcGVyYXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3Rv
bUZpbHRlck9wZXJhdGlvbi5oCShyZXZpc2lvbiAxMzM2NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlck9wZXJhdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUGFyYW1ldGVy
TGlzdC5oIgogI2luY2x1ZGUgIkN1c3RvbUZpbHRlclByb2dyYW0uaCIKICNpbmNsdWRlICJGaWx0
ZXJPcGVyYXRpb24uaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91
dFNpemUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3Rv
bUZpbHRlclBhcmFtZXRlckxpc3QuaAkocmV2aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNkZWZpbmUgQ3VzdG9tRmlsdGVyUGFy
YW1ldGVyTGlzdF9oCiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0jaW5jbHVkZSAiTGF5b3V0
VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmgJKHJldmlz
aW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyT3BlcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2lu
Y2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiTGF5
b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCiAjaW5jbHVkZSAiTGVuZ3RoLmgi
CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJh
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuaAkocmV2aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAKICNp
bmNsdWRlICJGaWx0ZXJPcGVyYXRpb24uaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvVmFsaWRhdGVkQ3VzdG9tRmls
dGVyT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1ZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5jcHAJKHJldmlz
aW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
VmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
NyArMzQsNyBAQAogCiAjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUGFyYW1ldGVyLmgiCiAjaW5jbHVk
ZSAiQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5oIgotI2luY2x1ZGUgIkZyYWN0aW9uYWxM
YXlvdXRTaXplLmgiCisjaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgogI2luY2x1ZGUgPHd0Zi9VbnVz
ZWRQYXJhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1ZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
VmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgJKHJldmlzaW9uIDEzMzY2NCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvVmFsaWRhdGVkQ3VzdG9tRmls
dGVyT3BlcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRl
ICJDdXN0b21GaWx0ZXJDb25zdGFudHMuaCIKICNpbmNsdWRlICJDdXN0b21GaWx0ZXJQYXJhbWV0
ZXJMaXN0LmgiCiAjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiTGF5b3V0
VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25hbExh
eW91dFBvaW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0ZyYWN0aW9uYWxMYXlvdXRQb2ludFF0LmNwcAkocmV2aXNpb24gMTMzNjY0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFBv
aW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gICAgQ29weXJp
Z2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UG9p
bnQuaCIKLQotI2luY2x1ZGUgPFFQb2ludD4KLSNpbmNsdWRlIDxRUG9pbnRGPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLUZyYWN0aW9uYWxMYXlvdXRQb2ludDo6RnJhY3Rpb25hbExheW91dFBv
aW50KGNvbnN0IFFQb2ludCYgcG9pbnQpCi0gICAgOiBtX3gocG9pbnQueCgpKQotICAgICwgbV95
KHBvaW50LnkoKSkKLXsKLX0KLQotRnJhY3Rpb25hbExheW91dFBvaW50OjpGcmFjdGlvbmFsTGF5
b3V0UG9pbnQoY29uc3QgUVBvaW50RiYgcG9pbnQpCi0gICAgOiBtX3gocG9pbnQueCgpKQotICAg
ICwgbV95KHBvaW50LnkoKSkKLXsKLX0KLQotRnJhY3Rpb25hbExheW91dFBvaW50OjpvcGVyYXRv
ciBRUG9pbnRGKCkgY29uc3QKLXsKLSAgICByZXR1cm4gUVBvaW50RihtX3gsIG1feSk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9GcmFjdGlvbmFsTGF5b3V0UmVjdFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9GcmFjdGlvbmFsTGF5b3V0UmVjdFF0LmNwcAkocmV2aXNp
b24gMTMzNjY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rp
b25hbExheW91dFJlY3RRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDUgKzAsMCBAQAotLyoK
LSAgICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0K
LSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZyYWN0aW9u
YWxMYXlvdXRSZWN0LmgiCi0KLSNpbmNsdWRlIDxRUmVjdD4KLSNpbmNsdWRlIDxRUmVjdEY+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRnJhY3Rpb25hbExheW91dFJlY3Q6OkZyYWN0aW9uYWxM
YXlvdXRSZWN0KGNvbnN0IFFSZWN0JiByKQotICAgIDogbV9sb2NhdGlvbihyLnRvcExlZnQoKSkK
LSAgICAsIG1fc2l6ZShyLndpZHRoKCksIHIuaGVpZ2h0KCkpCi17Ci19Ci0KLUZyYWN0aW9uYWxM
YXlvdXRSZWN0OjpGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBRUmVjdEYmIHIpCi0gICAgOiBt
X2xvY2F0aW9uKHIudG9wTGVmdCgpKQotICAgICwgbV9zaXplKHIud2lkdGgoKSwgci5oZWlnaHQo
KSkKLXsKLX0KLQotRnJhY3Rpb25hbExheW91dFJlY3Q6Om9wZXJhdG9yIFFSZWN0RigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIFFSZWN0Rih4KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOwotfQot
Ci19IC8vIG5hbWVzcGFjZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRnJhY3Rpb25hbExheW91dFNpemVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFNpemVRdC5jcHAJKHJldmlz
aW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0
aW9uYWxMYXlvdXRTaXplUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ2ICswLDAgQEAKLS8q
Ci0gICAgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
Ci0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkZyYWN0
aW9uYWxMYXlvdXRTaXplLmgiCi0KLSNpbmNsdWRlIDxRU2l6ZT4KLSNpbmNsdWRlIDxRU2l6ZUY+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRnJhY3Rpb25hbExheW91dFNpemU6OkZyYWN0aW9u
YWxMYXlvdXRTaXplKGNvbnN0IFFTaXplJiBzaXplKQotICAgIDogbV93aWR0aChzaXplLndpZHRo
KCkpCi0gICAgLCBtX2hlaWdodChzaXplLmhlaWdodCgpKQotewotfQotCi1GcmFjdGlvbmFsTGF5
b3V0U2l6ZTo6RnJhY3Rpb25hbExheW91dFNpemUoY29uc3QgUVNpemVGJiBzaXplKQotICAgIDog
bV93aWR0aChzaXplLndpZHRoKCkpCi0gICAgLCBtX2hlaWdodChzaXplLmhlaWdodCgpKQotewot
fQotCi1GcmFjdGlvbmFsTGF5b3V0U2l6ZTo6b3BlcmF0b3IgUVNpemVGKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gUVNpemVGKHdpZHRoKCksIGhlaWdodCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0xheW91dFBvaW50UXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0xh
eW91dFBvaW50UXQuY3BwCShyZXZpc2lvbiAxMzM1MTcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxMYXlvdXRQb2ludFF0LmNwcDoxMzM1MTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9MYXlvdXRQb2ludFF0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAx
MiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFBvaW50LmgiCisKKyNp
bmNsdWRlIDxRUG9pbnQ+CisjaW5jbHVkZSA8UVBvaW50Rj4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitGcmFjdGlvbmFsTGF5b3V0UG9pbnQ6OkZyYWN0aW9uYWxMYXlvdXRQb2ludChjb25zdCBR
UG9pbnQmIHBvaW50KQorICAgIDogbV94KHBvaW50LngoKSkKKyAgICAsIG1feShwb2ludC55KCkp
Cit7Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRQb2ludDo6RnJhY3Rpb25hbExheW91dFBvaW50KGNv
bnN0IFFQb2ludEYmIHBvaW50KQorICAgIDogbV94KHBvaW50LngoKSkKKyAgICAsIG1feShwb2lu
dC55KCkpCit7Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRQb2ludDo6b3BlcmF0b3IgUVBvaW50Rigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIFFQb2ludEYobV94LCBtX3kpOworfQorCit9IC8vIG5hbWVz
cGFjZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTGF5b3V0UG9p
bnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvTGF5b3V0UG9pbnRRdC5jcHAJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0xheW91dFBvaW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xOCwyNiArMTgsMjYgQEAKICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJG
cmFjdGlvbmFsTGF5b3V0UG9pbnQuaCIKKyNpbmNsdWRlICJMYXlvdXRQb2ludC5oIgogCiAjaW5j
bHVkZSA8UVBvaW50PgogI2luY2x1ZGUgPFFQb2ludEY+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotRnJhY3Rpb25hbExheW91dFBvaW50OjpGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgUVBv
aW50JiBwb2ludCkKK0xheW91dFBvaW50OjpMYXlvdXRQb2ludChjb25zdCBRUG9pbnQmIHBvaW50
KQogICAgIDogbV94KHBvaW50LngoKSkKICAgICAsIG1feShwb2ludC55KCkpCiB7CiB9CiAKLUZy
YWN0aW9uYWxMYXlvdXRQb2ludDo6RnJhY3Rpb25hbExheW91dFBvaW50KGNvbnN0IFFQb2ludEYm
IHBvaW50KQorTGF5b3V0UG9pbnQ6OkxheW91dFBvaW50KGNvbnN0IFFQb2ludEYmIHBvaW50KQog
ICAgIDogbV94KHBvaW50LngoKSkKICAgICAsIG1feShwb2ludC55KCkpCiB7CiB9CiAKLUZyYWN0
aW9uYWxMYXlvdXRQb2ludDo6b3BlcmF0b3IgUVBvaW50RigpIGNvbnN0CitMYXlvdXRQb2ludDo6
b3BlcmF0b3IgUVBvaW50RigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFFQb2ludEYobV94LCBtX3kp
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTGF5b3V0UmVj
dFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9MYXlvdXRSZWN0UXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvTGF5b3V0UmVjdFF0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0
NSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkxheW91dFJlY3QuaCIKKworI2luY2x1ZGUgPFFSZWN0PgorI2luY2x1ZGUgPFFSZWN0Rj4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitMYXlvdXRSZWN0OjpMYXlvdXRSZWN0KGNvbnN0IFFSZWN0
JiByKQorICAgIDogbV9sb2NhdGlvbihyLnRvcExlZnQoKSkKKyAgICAsIG1fc2l6ZShyLndpZHRo
KCksIHIuaGVpZ2h0KCkpCit7Cit9CisKK0xheW91dFJlY3Q6OkxheW91dFJlY3QoY29uc3QgUVJl
Y3RGJiByKQorICAgIDogbV9sb2NhdGlvbihyLnRvcExlZnQoKSkKKyAgICAsIG1fc2l6ZShyLndp
ZHRoKCksIHIuaGVpZ2h0KCkpCit7Cit9CisKK0xheW91dFJlY3Q6Om9wZXJhdG9yIFFSZWN0Rigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIFFSZWN0Rih4KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkp
OworfQorCit9IC8vIG5hbWVzcGFjZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvTGF5b3V0U2l6ZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9MYXlvdXRTaXplUXQuY3BwCShyZXZpc2lvbiAxMzM1MTcpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxMYXlvdXRT
aXplUXQuY3BwOjEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0xheW91dFNpemVRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiRnJhY3Rpb25h
bExheW91dFNpemUuaCIKKworI2luY2x1ZGUgPFFTaXplPgorI2luY2x1ZGUgPFFTaXplRj4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitGcmFjdGlvbmFsTGF5b3V0U2l6ZTo6RnJhY3Rpb25hbExh
eW91dFNpemUoY29uc3QgUVNpemUmIHNpemUpCisgICAgOiBtX3dpZHRoKHNpemUud2lkdGgoKSkK
KyAgICAsIG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkpCit7Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRT
aXplOjpGcmFjdGlvbmFsTGF5b3V0U2l6ZShjb25zdCBRU2l6ZUYmIHNpemUpCisgICAgOiBtX3dp
ZHRoKHNpemUud2lkdGgoKSkKKyAgICAsIG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkpCit7Cit9CisK
K0ZyYWN0aW9uYWxMYXlvdXRTaXplOjpvcGVyYXRvciBRU2l6ZUYoKSBjb25zdAoreworICAgIHJl
dHVybiBRU2l6ZUYod2lkdGgoKSwgaGVpZ2h0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTGF5b3V0U2l6ZVF0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9MYXlvdXRT
aXplUXQuY3BwCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9MYXlvdXRTaXplUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOSwyNiArMTks
MjYgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91
dFNpemUuaCIKKyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCiAKICNpbmNsdWRlIDxRU2l6ZT4KICNp
bmNsdWRlIDxRU2l6ZUY+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRnJhY3Rpb25hbExheW91
dFNpemU6OkZyYWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0IFFTaXplJiBzaXplKQorTGF5b3V0U2l6
ZTo6TGF5b3V0U2l6ZShjb25zdCBRU2l6ZSYgc2l6ZSkKICAgICA6IG1fd2lkdGgoc2l6ZS53aWR0
aCgpKQogICAgICwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkKIHsKIH0KIAotRnJhY3Rpb25hbExh
eW91dFNpemU6OkZyYWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0IFFTaXplRiYgc2l6ZSkKK0xheW91
dFNpemU6OkxheW91dFNpemUoY29uc3QgUVNpemVGJiBzaXplKQogICAgIDogbV93aWR0aChzaXpl
LndpZHRoKCkpCiAgICAgLCBtX2hlaWdodChzaXplLmhlaWdodCgpKQogewogfQogCi1GcmFjdGlv
bmFsTGF5b3V0U2l6ZTo6b3BlcmF0b3IgUVNpemVGKCkgY29uc3QKK0xheW91dFNpemU6Om9wZXJh
dG9yIFFTaXplRigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFFTaXplRih3aWR0aCgpLCBoZWlnaHQo
KSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1z
L1RyYW5zZm9ybU9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbnMuaAkocmV2aXNpb24g
MTMzNjY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9U
cmFuc2Zvcm1PcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICNp
Zm5kZWYgVHJhbnNmb3JtT3BlcmF0aW9uc19oCiAjZGVmaW5lIFRyYW5zZm9ybU9wZXJhdGlvbnNf
aAogCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCiAj
aW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybVN0YXRlLmgJKHJl
dmlzaW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5z
Zm9ybXMvVHJhbnNmb3JtU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAog
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRl
ICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5j
bHVkZSAiTGF5b3V0U2l6ZS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAj
aW5jbHVkZSA8d3RmL093blB0ci5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0
aW9uTWF0cml4LmNwcAkocmV2aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDggKzMxLDggQEAKICNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKICNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKLSNpbmNsdWRlICJGcmFj
dGlvbmFsTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJMYXlv
dXRSZWN0LmgiCiAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CkBAIC02MTcsMTAgKzYxNywxMCBAQCBGbG9hdFF1YWQgVHJhbnNmb3JtYXRp
b25NYXRyaXg6OnByb2plY3RRCiBzdGF0aWMgZmxvYXQgY2xhbXBFZGdlVmFsdWUoZmxvYXQgZikK
IHsKICAgICBBU1NFUlQoIWlzbmFuKGYpKTsKLSAgICByZXR1cm4gbWluPGZsb2F0PihtYXg8Zmxv
YXQ+KGYsIC1GcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWF4KCkgLyAyKSwgRnJhY3Rpb25hbExheW91
dFVuaXQ6Om1heCgpIC8gMik7CisgICAgcmV0dXJuIG1pbjxmbG9hdD4obWF4PGZsb2F0PihmLCAt
TGF5b3V0VW5pdDo6bWF4KCkgLyAyKSwgTGF5b3V0VW5pdDo6bWF4KCkgLyAyKTsKIH0KIAotRnJh
Y3Rpb25hbExheW91dFJlY3QgVHJhbnNmb3JtYXRpb25NYXRyaXg6OmNsYW1wZWRCb3VuZHNPZlBy
b2plY3RlZFF1YWQoY29uc3QgRmxvYXRRdWFkJiBxKSBjb25zdAorTGF5b3V0UmVjdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeDo6Y2xhbXBlZEJvdW5kc09mUHJvamVjdGVkUXVhZChjb25zdCBGbG9hdFF1
YWQmIHEpIGNvbnN0CiB7CiAgICAgRmxvYXRSZWN0IG1hcHBlZFF1YWRCb3VuZHMgPSBwcm9qZWN0
UXVhZChxKS5ib3VuZGluZ0JveCgpOwogCkBAIC02MjksMTggKzYyOSwxNyBAQCBGcmFjdGlvbmFs
TGF5b3V0UmVjdCBUcmFuc2Zvcm1hdGlvbk1hdHJpCiAKICAgICBmbG9hdCByaWdodDsKICAgICBp
ZiAoaXNpbmYobWFwcGVkUXVhZEJvdW5kcy54KCkpICYmIGlzaW5mKG1hcHBlZFF1YWRCb3VuZHMu
d2lkdGgoKSkpCi0gICAgICAgIHJpZ2h0ID0gRnJhY3Rpb25hbExheW91dFVuaXQ6Om1heCgpIC8g
MjsKKyAgICAgICAgcmlnaHQgPSBMYXlvdXRVbml0OjptYXgoKSAvIDI7CiAgICAgZWxzZQogICAg
ICAgICByaWdodCA9IGNsYW1wRWRnZVZhbHVlKGNlaWxmKG1hcHBlZFF1YWRCb3VuZHMubWF4WCgp
KSk7CiAKICAgICBmbG9hdCBib3R0b207CiAgICAgaWYgKGlzaW5mKG1hcHBlZFF1YWRCb3VuZHMu
eSgpKSAmJiBpc2luZihtYXBwZWRRdWFkQm91bmRzLmhlaWdodCgpKSkKLSAgICAgICAgYm90dG9t
ID0gRnJhY3Rpb25hbExheW91dFVuaXQ6Om1heCgpIC8gMjsKKyAgICAgICAgYm90dG9tID0gTGF5
b3V0VW5pdDo6bWF4KCkgLyAyOwogICAgIGVsc2UKICAgICAgICAgYm90dG9tID0gY2xhbXBFZGdl
VmFsdWUoY2VpbGYobWFwcGVkUXVhZEJvdW5kcy5tYXhZKCkpKTsKIAotICAgIHJldHVybiBGcmFj
dGlvbmFsTGF5b3V0UmVjdChGcmFjdGlvbmFsTGF5b3V0VW5pdDo6Y2xhbXAobGVmdCksIEZyYWN0
aW9uYWxMYXlvdXRVbml0OjpjbGFtcCh0b3ApLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQ6OmNsYW1wKHJpZ2h0IC0gbGVmdCksIEZyYWN0aW9u
YWxMYXlvdXRVbml0OjpjbGFtcChib3R0b20gLSB0b3ApKTsKKyAgICByZXR1cm4gTGF5b3V0UmVj
dChMYXlvdXRVbml0OjpjbGFtcChsZWZ0KSwgTGF5b3V0VW5pdDo6Y2xhbXAodG9wKSwgIExheW91
dFVuaXQ6OmNsYW1wKHJpZ2h0IC0gbGVmdCksIExheW91dFVuaXQ6OmNsYW1wKGJvdHRvbSAtIHRv
cCkpOwogfQogCiBGbG9hdFBvaW50IFRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBQb2ludChjb25z
dCBGbG9hdFBvaW50JiBwKSBjb25zdApAQCAtNjcwLDkgKzY2OSw5IEBAIEludFJlY3QgVHJhbnNm
b3JtYXRpb25NYXRyaXg6Om1hcFJlY3QoY28KICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdCht
YXBSZWN0KEZsb2F0UmVjdChyZWN0KSkpOwogfQogCi1GcmFjdGlvbmFsTGF5b3V0UmVjdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6bWFwUmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgcikg
Y29uc3QKK0xheW91dFJlY3QgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFJlY3QoY29uc3QgTGF5
b3V0UmVjdCYgcikgY29uc3QKIHsKLSAgICByZXR1cm4gZW5jbG9zaW5nRnJhY3Rpb25hbExheW91
dFJlY3QobWFwUmVjdChGbG9hdFJlY3QocikpKTsKKyAgICByZXR1cm4gZW5jbG9zaW5nTGF5b3V0
UmVjdChtYXBSZWN0KEZsb2F0UmVjdChyKSkpOwogfQogCiBGbG9hdFJlY3QgVHJhbnNmb3JtYXRp
b25NYXRyaXg6Om1hcFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKSBjb25zdApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5z
Zm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguaAkocmV2aXNpb24gMTMzNjY0KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgSW50UmVjdDsKLWNsYXNzIEZyYWN0aW9u
YWxMYXlvdXRSZWN0OworY2xhc3MgTGF5b3V0UmVjdDsKIGNsYXNzIEZsb2F0UG9pbnQzRDsKIGNs
YXNzIEZsb2F0UmVjdDsKIGNsYXNzIEZsb2F0UXVhZDsKQEAgLTE1Nyw3ICsxNTcsNyBAQCBwdWJs
aWM6CiAgICAgLy8gUm91bmRzIHRoZSByZXN1bHRpbmcgbWFwcGVkIHJlY3RhbmdsZSBvdXQuIFRo
aXMgaXMgaGVscGZ1bCBmb3IgYm91bmRpbmcKICAgICAvLyBib3ggY29tcHV0YXRpb25zIGJ1dCBt
YXkgbm90IGJlIHdoYXQgaXMgd2FudGVkIGluIG90aGVyIGNvbnRleHRzLgogICAgIEludFJlY3Qg
bWFwUmVjdChjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgRnJhY3Rpb25hbExheW91dFJlY3Qg
bWFwUmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpIGNvbnN0OworICAgIExheW91dFJl
Y3QgbWFwUmVjdChjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKICAgICAvLyBJZiB0aGUgbWF0
cml4IGhhcyAzRCBjb21wb25lbnRzLCB0aGUgeiBjb21wb25lbnQgb2YgdGhlIHJlc3VsdCBpcwog
ICAgIC8vIGRyb3BwZWQsIGVmZmVjdGl2ZWx5IHByb2plY3RpbmcgdGhlIHF1YWQgaW50byB0aGUg
ej0wIHBsYW5lCkBAIC0xNzMsNyArMTczLDcgQEAgcHVibGljOgogICAgIEZsb2F0UXVhZCBwcm9q
ZWN0UXVhZChjb25zdCBGbG9hdFF1YWQmLCAgYm9vbCogY2xhbXBlZCA9IDApIGNvbnN0OwogICAg
IC8vIFByb2plY3RzIHRoZSBmb3VyIGNvcm5lcnMgb2YgdGhlIHF1YWQgYW5kIHRha2VzIGEgYm91
bmRpbmcgYm94LAogICAgIC8vIHdoaWxlIHNhbml0aXppbmcgdmFsdWVzIGNyZWF0ZWQgd2hlbiB0
aGUgdyBjb21wb25lbnQgaXMgbmVnYXRpdmUuCi0gICAgRnJhY3Rpb25hbExheW91dFJlY3QgY2xh
bXBlZEJvdW5kc09mUHJvamVjdGVkUXVhZChjb25zdCBGbG9hdFF1YWQmKSBjb25zdDsKKyAgICBM
YXlvdXRSZWN0IGNsYW1wZWRCb3VuZHNPZlByb2plY3RlZFF1YWQoY29uc3QgRmxvYXRRdWFkJikg
Y29uc3Q7CiAKICAgICBkb3VibGUgbTExKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXhbMF1bMF07
IH0KICAgICB2b2lkIHNldE0xMShkb3VibGUgZikgeyBtX21hdHJpeFswXVswXSA9IGY7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmgJKHJldmlzaW9u
IDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNyBAQAogI2lmbmRlZiBBdXRvVGFibGVMYXlvdXRf
aAogI2RlZmluZSBBdXRvVGFibGVMYXlvdXRfaAogCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIK
KyNpbmNsdWRlICJMYXlvdXRVbml0LmgiCiAjaW5jbHVkZSAiTGVuZ3RoLmgiCiAjaW5jbHVkZSAi
VGFibGVMYXlvdXQuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvQ29sdW1uSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9Db2x1bW5JbmZvLmgJKHJldmlzaW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9Db2x1bW5JbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcg
QEAKICNpZm5kZWYgQ29sdW1uSW5mb19oCiAjZGVmaW5lIENvbHVtbkluZm9faAogCi0jaW5jbHVk
ZSAiTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8u
aAkocmV2aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lv
blNoYXBlSW5zaWRlSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAKICNp
bmNsdWRlICJFeGNsdXNpb25TaGFwZS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1
ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dFVuaXQuaCIK
ICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC03OCwxNCArNzgsMTQgQEAgcHJpdmF0ZToKICAgICB7
CiAgICAgICAgIEFTU0VSVChtX3NoYXBlKTsKICAgICAgICAgLy8gVXNlIGZyb21GbG9hdENlaWwo
KSB0byBlbnN1cmUgdGhhdCB0aGUgcmV0dXJuZWQgTGF5b3V0VW5pdCB2YWx1ZSBpcyB3aXRoaW4g
dGhlIHNoYXBlJ3MgYm91bmRzLgotICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQ6
OmZyb21GbG9hdENlaWwobV9zaGFwZS0+c2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS55KCkpOwor
ICAgICAgICByZXR1cm4gTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChtX3NoYXBlLT5zaGFwZUxv
Z2ljYWxCb3VuZGluZ0JveCgpLnkoKSk7CiAgICAgfQogCiAgICAgaW5saW5lIExheW91dFVuaXQg
c2hhcGVMb2dpY2FsQm91bmRzTWF4WSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV9z
aGFwZSk7CiAgICAgICAgIC8vIFVzZSBmcm9tRmxvYXRGbG9vcigpIHRvIGVuc3VyZSB0aGF0IHRo
ZSByZXR1cm5lZCBMYXlvdXRVbml0IHZhbHVlIGlzIHdpdGhpbiB0aGUgc2hhcGUncyBib3VuZHMu
Ci0gICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Rmxvb3IobV9z
aGFwZS0+c2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS5tYXhZKCkpOworICAgICAgICByZXR1cm4g
TGF5b3V0VW5pdDo6ZnJvbUZsb2F0Rmxvb3IobV9zaGFwZS0+c2hhcGVMb2dpY2FsQm91bmRpbmdC
b3goKS5tYXhZKCkpOwogICAgIH0KIAogICAgIFJlbmRlckJsb2NrKiBtX2Jsb2NrOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgJKHJl
dmlzaW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RS
ZW5kZXJlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMCArMzIsOSBAQAogI2luY2x1ZGUgIkZp
bHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAi
TGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2lu
Y2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuaAkocmV2
aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlv
dXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNyBAQAogI2lmbmRlZiBGaXhlZFRhYmxl
TGF5b3V0X2gKICNkZWZpbmUgRml4ZWRUYWJsZUxheW91dF9oCiAKLSNpbmNsdWRlICJMYXlvdXRU
eXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKICNpbmNsdWRlICJMZW5ndGguaCIKICNp
bmNsdWRlICJUYWJsZUxheW91dC5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HYXBSZWN0cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9HYXBSZWN0cy5oCShyZXZpc2lvbiAxMzM2NjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvR2FwUmVjdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMs
NyBAQAogI2lmbmRlZiBHYXBSZWN0c19oCiAjZGVmaW5lIEdhcFJlY3RzX2gKIAotI2luY2x1ZGUg
IkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAko
cmV2aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1
bHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgIkZsb2F0UXVh
ZC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0Lmgi
Ci0jaW5jbHVkZSAiTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTGF5b3V0
UmVjdC5oIgogI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0hpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZS5jcHAJKHJldmlz
aW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0aW5nVHJhbnNm
b3JtU3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlLmgiCiAKLSNpbmNs
dWRlICJGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04MCw3
ICs4MCw3IEBAIEZsb2F0UXVhZCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU6Om1hcHAKICAgICBy
ZXR1cm4gbV9hY2N1bXVsYXRlZFRyYW5zZm9ybS5pbnZlcnNlKCkucHJvamVjdFF1YWQobV9sYXN0
UGxhbmFyQXJlYSk7CiB9CiAKLUZyYWN0aW9uYWxMYXlvdXRSZWN0IEhpdFRlc3RpbmdUcmFuc2Zv
cm1TdGF0ZTo6Ym91bmRzT2ZNYXBwZWRBcmVhKCkgY29uc3QKK0xheW91dFJlY3QgSGl0VGVzdGlu
Z1RyYW5zZm9ybVN0YXRlOjpib3VuZHNPZk1hcHBlZEFyZWEoKSBjb25zdAogewogICAgIHJldHVy
biBtX2FjY3VtdWxhdGVkVHJhbnNmb3JtLmludmVyc2UoKS5jbGFtcGVkQm91bmRzT2ZQcm9qZWN0
ZWRRdWFkKG1fbGFzdFBsYW5hckFyZWEpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0hpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9IaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUuaAkocmV2aXNpb24gMTMzNjY0
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICBGbG9hdFBvaW50
IG1hcHBlZFBvaW50KCkgY29uc3Q7CiAgICAgRmxvYXRRdWFkIG1hcHBlZFF1YWQoKSBjb25zdDsK
ICAgICBGbG9hdFF1YWQgbWFwcGVkQXJlYSgpIGNvbnN0OwotICAgIEZyYWN0aW9uYWxMYXlvdXRS
ZWN0IGJvdW5kc09mTWFwcGVkQXJlYSgpIGNvbnN0OworICAgIExheW91dFJlY3QgYm91bmRzT2ZN
YXBwZWRBcmVhKCkgY29uc3Q7CiAgICAgdm9pZCBmbGF0dGVuKCk7CiAKICAgICBGbG9hdFBvaW50
IG1fbGFzdFBsYW5hclBvaW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVGbG93Qm94LmNwcAkocmV2aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzcsOCArNjc3LDggQEAg
dm9pZCBJbmxpbmVGbG93Qm94OjpwbGFjZUJveGVzSW5CbG9ja0RpcgogCiAgICAgICAgICAgICAg
ICAgUmVuZGVyUnVieVJ1biogcnVieVJ1biA9IHRvUmVuZGVyUnVieVJ1bihjdXJyLT5yZW5kZXJl
cigpKTsKICAgICAgICAgICAgICAgICBpZiAoUmVuZGVyUnVieUJhc2UqIHJ1YnlCYXNlID0gcnVi
eVJ1bi0+cnVieUJhc2UoKSkgewotICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGJvdHRv
bVJ1YnlCYXNlTGVhZGluZyA9IChjdXJyLT5sb2dpY2FsSGVpZ2h0KCkgLSBydWJ5QmFzZS0+bG9n
aWNhbEJvdHRvbSgpKSArIHJ1YnlCYXNlLT5sb2dpY2FsSGVpZ2h0KCkgLSAocnVieUJhc2UtPmxh
c3RSb290Qm94KCkgPyBydWJ5QmFzZS0+bGFzdFJvb3RCb3goKS0+bGluZUJvdHRvbSgpIDogWkVS
T19MQVlPVVRfVU5JVCk7Ci0gICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgdG9wUnVieUJh
c2VMZWFkaW5nID0gcnVieUJhc2UtPmxvZ2ljYWxUb3AoKSArIChydWJ5QmFzZS0+Zmlyc3RSb290
Qm94KCkgPyBydWJ5QmFzZS0+Zmlyc3RSb290Qm94KCktPmxpbmVUb3AoKSA6IFpFUk9fTEFZT1VU
X1VOSVQpOworICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGJvdHRvbVJ1YnlCYXNlTGVh
ZGluZyA9IChjdXJyLT5sb2dpY2FsSGVpZ2h0KCkgLSBydWJ5QmFzZS0+bG9naWNhbEJvdHRvbSgp
KSArIHJ1YnlCYXNlLT5sb2dpY2FsSGVpZ2h0KCkgLSAocnVieUJhc2UtPmxhc3RSb290Qm94KCkg
PyBydWJ5QmFzZS0+bGFzdFJvb3RCb3goKS0+bGluZUJvdHRvbSgpIDogTGF5b3V0VW5pdCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCB0b3BSdWJ5QmFzZUxlYWRpbmcgPSBydWJ5
QmFzZS0+bG9naWNhbFRvcCgpICsgKHJ1YnlCYXNlLT5maXJzdFJvb3RCb3goKSA/IHJ1YnlCYXNl
LT5maXJzdFJvb3RCb3goKS0+bGluZVRvcCgpIDogTGF5b3V0VW5pdCgpKTsKICAgICAgICAgICAg
ICAgICAgICAgbmV3TG9naWNhbFRvcCArPSAhcmVuZGVyZXIoKS0+c3R5bGUoKS0+aXNGbGlwcGVk
TGluZXNXcml0aW5nTW9kZSgpID8gdG9wUnVieUJhc2VMZWFkaW5nIDogYm90dG9tUnVieUJhc2VM
ZWFkaW5nOwogICAgICAgICAgICAgICAgICAgICBib3hIZWlnaHQgLT0gKHRvcFJ1YnlCYXNlTGVh
ZGluZyArIGJvdHRvbVJ1YnlCYXNlTGVhZGluZyk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNzkx
LDcgKzc5MSw3IEBAIGlubGluZSB2b2lkIElubGluZUZsb3dCb3g6OmFkZEJvcmRlck91dHMKICAg
ICBpZiAoIXN0eWxlLT5oYXNCb3JkZXJJbWFnZU91dHNldHMoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgRnJhY3Rpb25hbExheW91dEJveEV4dGVudCBib3JkZXJPdXRzZXRzID0gc3R5bGUtPmJv
cmRlckltYWdlT3V0c2V0cygpOworICAgIExheW91dEJveEV4dGVudCBib3JkZXJPdXRzZXRzID0g
c3R5bGUtPmJvcmRlckltYWdlT3V0c2V0cygpOwogCiAgICAgTGF5b3V0VW5pdCBib3JkZXJPdXRz
ZXRMb2dpY2FsVG9wID0gYm9yZGVyT3V0c2V0cy5sb2dpY2FsVG9wKHN0eWxlLT53cml0aW5nTW9k
ZSgpKTsKICAgICBMYXlvdXRVbml0IGJvcmRlck91dHNldExvZ2ljYWxCb3R0b20gPSBib3JkZXJP
dXRzZXRzLmxvZ2ljYWxCb3R0b20oc3R5bGUtPndyaXRpbmdNb2RlKCkpOwpAQCAtODA2LDggKzgw
Niw4IEBAIGlubGluZSB2b2lkIElubGluZUZsb3dCb3g6OmFkZEJvcmRlck91dHMKICAgICBMYXlv
dXRVbml0IGxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdyA9IG1pbihwaXhlbFNuYXBwZWRMb2dpY2Fs
VG9wKCkgLSBvdXRzZXRMb2dpY2FsVG9wLCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cueSgpKTsKICAg
ICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdyA9IG1heChwaXhlbFNuYXBw
ZWRMb2dpY2FsQm90dG9tKCkgKyBvdXRzZXRMb2dpY2FsQm90dG9tLCBsb2dpY2FsVmlzdWFsT3Zl
cmZsb3cubWF4WSgpKTsKIAotICAgIExheW91dFVuaXQgb3V0c2V0TG9naWNhbExlZnQgPSBpbmNs
dWRlTG9naWNhbExlZnRFZGdlKCkgPyBib3JkZXJPdXRzZXRMb2dpY2FsTGVmdCA6IFpFUk9fTEFZ
T1VUX1VOSVQ7Ci0gICAgTGF5b3V0VW5pdCBvdXRzZXRMb2dpY2FsUmlnaHQgPSBpbmNsdWRlTG9n
aWNhbFJpZ2h0RWRnZSgpID8gYm9yZGVyT3V0c2V0TG9naWNhbFJpZ2h0IDogWkVST19MQVlPVVRf
VU5JVDsKKyAgICBMYXlvdXRVbml0IG91dHNldExvZ2ljYWxMZWZ0ID0gaW5jbHVkZUxvZ2ljYWxM
ZWZ0RWRnZSgpID8gYm9yZGVyT3V0c2V0TG9naWNhbExlZnQgOiBMYXlvdXRVbml0KCk7CisgICAg
TGF5b3V0VW5pdCBvdXRzZXRMb2dpY2FsUmlnaHQgPSBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSgp
ID8gYm9yZGVyT3V0c2V0TG9naWNhbFJpZ2h0IDogTGF5b3V0VW5pdCgpOwogCiAgICAgTGF5b3V0
VW5pdCBsb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93ID0gbWluKHBpeGVsU25hcHBlZExvZ2ljYWxM
ZWZ0KCkgLSBvdXRzZXRMb2dpY2FsTGVmdCwgbG9naWNhbFZpc3VhbE92ZXJmbG93LngoKSk7CiAg
ICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdyA9IG1heChwaXhlbFNuYXBw
ZWRMb2dpY2FsUmlnaHQoKSArIG91dHNldExvZ2ljYWxSaWdodCwgbG9naWNhbFZpc3VhbE92ZXJm
bG93Lm1heFgoKSk7CkBAIC0xMTQyLDggKzExNDIsOCBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBh
aW50RmlsbExheWVyKGNvbnN0CiAgICAgICAgICAgICBmb3IgKElubGluZUZsb3dCb3gqIGN1cnIg
PSB0aGlzOyBjdXJyOyBjdXJyID0gY3Vyci0+cHJldkxpbmVCb3goKSkKICAgICAgICAgICAgICAg
ICB0b3RhbExvZ2ljYWxXaWR0aCArPSBjdXJyLT5sb2dpY2FsV2lkdGgoKTsKICAgICAgICAgfQot
ICAgICAgICBMYXlvdXRVbml0IHN0cmlwWCA9IHJlY3QueCgpIC0gKGlzSG9yaXpvbnRhbCgpID8g
bG9naWNhbE9mZnNldE9uTGluZSA6IFpFUk9fTEFZT1VUX1VOSVQpOwotICAgICAgICBMYXlvdXRV
bml0IHN0cmlwWSA9IHJlY3QueSgpIC0gKGlzSG9yaXpvbnRhbCgpID8gWkVST19MQVlPVVRfVU5J
VCA6IGxvZ2ljYWxPZmZzZXRPbkxpbmUpOworICAgICAgICBMYXlvdXRVbml0IHN0cmlwWCA9IHJl
Y3QueCgpIC0gKGlzSG9yaXpvbnRhbCgpID8gbG9naWNhbE9mZnNldE9uTGluZSA6IExheW91dFVu
aXQoKSk7CisgICAgICAgIExheW91dFVuaXQgc3RyaXBZID0gcmVjdC55KCkgLSAoaXNIb3Jpem9u
dGFsKCkgPyBMYXlvdXRVbml0KCkgOiBsb2dpY2FsT2Zmc2V0T25MaW5lKTsKICAgICAgICAgTGF5
b3V0VW5pdCBzdHJpcFdpZHRoID0gaXNIb3Jpem9udGFsKCkgPyB0b3RhbExvZ2ljYWxXaWR0aCA6
IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KHdpZHRoKCkpOwogICAgICAgICBMYXlvdXRVbml0IHN0
cmlwSGVpZ2h0ID0gaXNIb3Jpem9udGFsKCkgPyBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PihoZWln
aHQoKSkgOiB0b3RhbExvZ2ljYWxXaWR0aDsKIApAQCAtMTI2OSw4ICsxMjY5LDggQEAgdm9pZCBJ
bmxpbmVGbG93Qm94OjpwYWludEJveERlY29yYXRpb25zKAogICAgICAgICAgICAgICAgIExheW91
dFVuaXQgdG90YWxMb2dpY2FsV2lkdGggPSBsb2dpY2FsT2Zmc2V0T25MaW5lOwogICAgICAgICAg
ICAgICAgIGZvciAoSW5saW5lRmxvd0JveCogY3VyciA9IHRoaXM7IGN1cnI7IGN1cnIgPSBjdXJy
LT5uZXh0TGluZUJveCgpKQogICAgICAgICAgICAgICAgICAgICB0b3RhbExvZ2ljYWxXaWR0aCAr
PSBjdXJyLT5sb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHN0cmlw
WCA9IGFkanVzdGVkUGFpbnRvZmZzZXQueCgpIC0gKGlzSG9yaXpvbnRhbCgpID8gbG9naWNhbE9m
ZnNldE9uTGluZSA6IFpFUk9fTEFZT1VUX1VOSVQpOwotICAgICAgICAgICAgICAgIExheW91dFVu
aXQgc3RyaXBZID0gYWRqdXN0ZWRQYWludG9mZnNldC55KCkgLSAoaXNIb3Jpem9udGFsKCkgPyBa
RVJPX0xBWU9VVF9VTklUIDogbG9naWNhbE9mZnNldE9uTGluZSk7CisgICAgICAgICAgICAgICAg
TGF5b3V0VW5pdCBzdHJpcFggPSBhZGp1c3RlZFBhaW50b2Zmc2V0LngoKSAtIChpc0hvcml6b250
YWwoKSA/IGxvZ2ljYWxPZmZzZXRPbkxpbmUgOiBMYXlvdXRVbml0KCkpOworICAgICAgICAgICAg
ICAgIExheW91dFVuaXQgc3RyaXBZID0gYWRqdXN0ZWRQYWludG9mZnNldC55KCkgLSAoaXNIb3Jp
em9udGFsKCkgPyBMYXlvdXRVbml0KCkgOiBsb2dpY2FsT2Zmc2V0T25MaW5lKTsKICAgICAgICAg
ICAgICAgICBMYXlvdXRVbml0IHN0cmlwV2lkdGggPSBpc0hvcml6b250YWwoKSA/IHRvdGFsTG9n
aWNhbFdpZHRoIDogZnJhbWVSZWN0LndpZHRoKCk7CiAgICAgICAgICAgICAgICAgTGF5b3V0VW5p
dCBzdHJpcEhlaWdodCA9IGlzSG9yaXpvbnRhbCgpID8gZnJhbWVSZWN0LmhlaWdodCgpIDogdG90
YWxMb2dpY2FsV2lkdGg7CiAKQEAgLTEzNDEsOCArMTM0MSw4IEBAIHZvaWQgSW5saW5lRmxvd0Jv
eDo6cGFpbnRNYXNrKFBhaW50SW5mbyYKICAgICAgICAgTGF5b3V0VW5pdCB0b3RhbExvZ2ljYWxX
aWR0aCA9IGxvZ2ljYWxPZmZzZXRPbkxpbmU7CiAgICAgICAgIGZvciAoSW5saW5lRmxvd0JveCog
Y3VyciA9IHRoaXM7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0TGluZUJveCgpKQogICAgICAgICAg
ICAgdG90YWxMb2dpY2FsV2lkdGggKz0gY3Vyci0+bG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIExh
eW91dFVuaXQgc3RyaXBYID0gYWRqdXN0ZWRQYWludE9mZnNldC54KCkgLSAoaXNIb3Jpem9udGFs
KCkgPyBsb2dpY2FsT2Zmc2V0T25MaW5lIDogWkVST19MQVlPVVRfVU5JVCk7Ci0gICAgICAgIExh
eW91dFVuaXQgc3RyaXBZID0gYWRqdXN0ZWRQYWludE9mZnNldC55KCkgLSAoaXNIb3Jpem9udGFs
KCkgPyBaRVJPX0xBWU9VVF9VTklUIDogbG9naWNhbE9mZnNldE9uTGluZSk7CisgICAgICAgIExh
eW91dFVuaXQgc3RyaXBYID0gYWRqdXN0ZWRQYWludE9mZnNldC54KCkgLSAoaXNIb3Jpem9udGFs
KCkgPyBsb2dpY2FsT2Zmc2V0T25MaW5lIDogTGF5b3V0VW5pdCgpKTsKKyAgICAgICAgTGF5b3V0
VW5pdCBzdHJpcFkgPSBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSAtIChpc0hvcml6b250YWwoKSA/
IExheW91dFVuaXQoKSA6IGxvZ2ljYWxPZmZzZXRPbkxpbmUpOwogICAgICAgICBMYXlvdXRVbml0
IHN0cmlwV2lkdGggPSBpc0hvcml6b250YWwoKSA/IHRvdGFsTG9naWNhbFdpZHRoIDogZnJhbWVS
ZWN0LndpZHRoKCk7CiAgICAgICAgIExheW91dFVuaXQgc3RyaXBIZWlnaHQgPSBpc0hvcml6b250
YWwoKSA/IGZyYW1lUmVjdC5oZWlnaHQoKSA6IHRvdGFsTG9naWNhbFdpZHRoOwogCkBAIC0xNDM5
LDcgKzE0MzksNyBAQCBMYXlvdXRVbml0IElubGluZUZsb3dCb3g6OmNvbXB1dGVPdmVyQW5uCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICgh
cnVieVJ1bi0+c3R5bGUoKS0+aXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgTGF5b3V0VW5pdCB0b3BPZkZpcnN0UnVieVRleHRMaW5lID0gcnVieVRleHQtPmxv
Z2ljYWxUb3AoKSArIChydWJ5VGV4dC0+Zmlyc3RSb290Qm94KCkgPyBydWJ5VGV4dC0+Zmlyc3RS
b290Qm94KCktPmxpbmVUb3AoKSA6IFpFUk9fTEFZT1VUX1VOSVQpOworICAgICAgICAgICAgICAg
IExheW91dFVuaXQgdG9wT2ZGaXJzdFJ1YnlUZXh0TGluZSA9IHJ1YnlUZXh0LT5sb2dpY2FsVG9w
KCkgKyAocnVieVRleHQtPmZpcnN0Um9vdEJveCgpID8gcnVieVRleHQtPmZpcnN0Um9vdEJveCgp
LT5saW5lVG9wKCkgOiBMYXlvdXRVbml0KCkpOwogICAgICAgICAgICAgICAgIGlmICh0b3BPZkZp
cnN0UnVieVRleHRMaW5lID49IDApCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgIHRvcE9mRmlyc3RSdWJ5VGV4dExpbmUgKz0gY3Vyci0+bG9naWNhbFRvcCgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFJlcGFpbnRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRSZXBhaW50ZXIuaAkocmV2
aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFJlcGFpbnRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIExheW91dFJlcGFp
bnRlcl9oCiAjZGVmaW5lIExheW91dFJlcGFpbnRlcl9oCiAKLSNpbmNsdWRlICJMYXlvdXRUeXBl
c0lubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgJKHJl
dmlzaW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIExheW91dFN0YXRlX2gK
IAogI2luY2x1ZGUgIkNvbHVtbkluZm8uaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2lu
Y2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5
b3V0VHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0
VHlwZXMuaAkocmV2aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xh
eW91dFR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRp
b24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0g
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIFRoZXNlIHR5cGVk
ZWZzIGFyZSBiZWluZyB1c2VkIHRvIGFic3RyYWN0IGxheW91dCBhbmQgaGl0IHRlc3Rpbmcgb2Zm
Ci0vLyBvZiBpbnRlZ2VycyBhbmQgZXZlbnR1YWxseSByZXBsYWNlIHRoZW0gd2l0aCBmbG9hdHMu
IE9uY2UgdGhpcyB0cmFuc2l0aW9uCi0vLyBpcyBjb21wbGV0ZSwgdGhlc2UgdHlwZXMgd2lsbCBi
ZSByZW1vdmVkLiBQcm9ncmVzcyBjYW4gYmUgdHJhY2tlZCBhdAotLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzE4Ci0KLSNpZm5kZWYgTGF5b3V0VHlwZXNfaAot
I2RlZmluZSBMYXlvdXRUeXBlc19oCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRnJh
Y3Rpb25hbExheW91dEJveEV4dGVudDsKLWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRQb2ludDsKLWNs
YXNzIEZyYWN0aW9uYWxMYXlvdXRSZWN0OwotY2xhc3MgRnJhY3Rpb25hbExheW91dFNpemU7Ci1j
bGFzcyBGcmFjdGlvbmFsTGF5b3V0VW5pdDsKLQotdHlwZWRlZiBGcmFjdGlvbmFsTGF5b3V0Qm94
RXh0ZW50IExheW91dEJveEV4dGVudDsKLXR5cGVkZWYgRnJhY3Rpb25hbExheW91dFBvaW50IExh
eW91dFBvaW50OwotdHlwZWRlZiBGcmFjdGlvbmFsTGF5b3V0UmVjdCBMYXlvdXRSZWN0OwotdHlw
ZWRlZiBGcmFjdGlvbmFsTGF5b3V0U2l6ZSBMYXlvdXRTaXplOwotdHlwZWRlZiBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBMYXlvdXRVbml0OwotCi0jZGVmaW5lIE1BWF9MQVlPVVRfVU5JVCBMYXlvdXRV
bml0OjptYXgoKQotI2RlZmluZSBNSU5fTEFZT1VUX1VOSVQgTGF5b3V0VW5pdDo6bWluKCkKLSNk
ZWZpbmUgWkVST19MQVlPVVRfVU5JVCBMYXlvdXRVbml0KDApCi0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIExheW91dFR5cGVzX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9MYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEz
MzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlc0lubGluZU1ldGhv
ZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0g
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTGF5b3V0VHlwZXNJ
bmxpbmVNZXRob2RzX2gKLSNkZWZpbmUgTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzX2gKLQotI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQu
aCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIgotI2luY2x1ZGUgIkZyYWN0aW9u
YWxMYXlvdXRVbml0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkxheW91dFR5
cGVzLmgiCi0KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UmVjdCBlbmNsb3NpbmdMYXlvdXRSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChyZWN0
KTsKLX0KLQotaW5saW5lIExheW91dFNpemUgcm91bmRlZExheW91dFNpemUoY29uc3QgRmxvYXRT
aXplJiBzKQotewotI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCi0gICAgcmV0dXJuIEZyYWN0
aW9uYWxMYXlvdXRTaXplKHMpOwotI2Vsc2UKLSAgICByZXR1cm4gcm91bmRlZEludFNpemUocyk7
Ci0jZW5kaWYKLX0KLQotaW5saW5lIEludFJlY3QgcGl4ZWxTbmFwcGVkSW50UmVjdChMYXlvdXRV
bml0IGxlZnQsIExheW91dFVuaXQgdG9wLCBMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IGhl
aWdodCkKLXsKLSAgICByZXR1cm4gSW50UmVjdChsZWZ0LnJvdW5kKCksIHRvcC5yb3VuZCgpLCBz
bmFwU2l6ZVRvUGl4ZWwod2lkdGgsIGxlZnQpLCBzbmFwU2l6ZVRvUGl4ZWwoaGVpZ2h0LCB0b3Ap
KTsKLX0KLQotaW5saW5lIEludFJlY3QgcGl4ZWxTbmFwcGVkSW50UmVjdEZyb21FZGdlcyhMYXlv
dXRVbml0IGxlZnQsIExheW91dFVuaXQgdG9wLCBMYXlvdXRVbml0IHJpZ2h0LCBMYXlvdXRVbml0
IGJvdHRvbSkKLXsKLSAgICByZXR1cm4gSW50UmVjdChsZWZ0LnJvdW5kKCksIHRvcC5yb3VuZCgp
LCBzbmFwU2l6ZVRvUGl4ZWwocmlnaHQgLSBsZWZ0LCBsZWZ0KSwgc25hcFNpemVUb1BpeGVsKGJv
dHRvbSAtIHRvcCwgdG9wKSk7Ci19Ci0KLWlubGluZSBMYXlvdXRQb2ludCByb3VuZGVkTGF5b3V0
UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkKLXsKLSNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VU
KQotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQocCk7Ci0jZWxzZQotICAgIHJldHVy
biByb3VuZGVkSW50UG9pbnQocCk7Ci0jZW5kaWYKLX0KLQotaW5saW5lIExheW91dFBvaW50IGZs
b29yZWRMYXlvdXRQb2ludChjb25zdCBGbG9hdFBvaW50JiBwKQotewotICAgIHJldHVybiBmbG9v
cmVkRnJhY3Rpb25hbExheW91dFBvaW50KHApOwotfQotCi1pbmxpbmUgTGF5b3V0UG9pbnQgZmxv
b3JlZExheW91dFBvaW50KGNvbnN0IEZsb2F0U2l6ZSYgcykKLXsKLSAgICByZXR1cm4gZmxvb3Jl
ZExheW91dFBvaW50KEZsb2F0UG9pbnQocykpOwotfQotCi1pbmxpbmUgaW50IHJvdW5kVG9JbnQo
TGF5b3V0VW5pdCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdmFsdWUucm91bmQoKTsKLX0KLQotaW5s
aW5lIGludCBmbG9vclRvSW50KExheW91dFVuaXQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHZhbHVl
LmZsb29yKCk7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IHJvdW5kZWRMYXlvdXRVbml0KGZsb2F0
IHZhbHVlKQotewotI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCi0gICAgcmV0dXJuIEZyYWN0
aW9uYWxMYXlvdXRVbml0Ojpmcm9tRmxvYXRSb3VuZCh2YWx1ZSk7Ci0jZWxzZQotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYodmFsdWUpKTsKLSNlbmRpZgotfQotCi1pbmxpbmUg
TGF5b3V0VW5pdCBjZWlsZWRMYXlvdXRVbml0KGZsb2F0IHZhbHVlKQotewotI2lmIEVOQUJMRShT
VUJQSVhFTF9MQVlPVVQpCi0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpmcm9tRmxv
YXRDZWlsKHZhbHVlKTsKLSNlbHNlCi0gICAgcmV0dXJuIGNlaWxmKHZhbHVlKTsKLSNlbmRpZgot
fQotCi1pbmxpbmUgTGF5b3V0VW5pdCBhYnNvbHV0ZVZhbHVlKGNvbnN0IExheW91dFVuaXQmIHZh
bHVlKQotewotICAgIHJldHVybiB2YWx1ZS5hYnMoKTsKLX0KLQotaW5saW5lIExheW91dFNpemUg
dG9MYXlvdXRTaXplKGNvbnN0IExheW91dFBvaW50JiBwKQotewotICAgIHJldHVybiBMYXlvdXRT
aXplKHAueCgpLCBwLnkoKSk7Ci19Ci0KLWlubGluZSBMYXlvdXRQb2ludCB0b0xheW91dFBvaW50
KGNvbnN0IExheW91dFNpemUmIHApCi17Ci0gICAgcmV0dXJuIExheW91dFBvaW50KHAud2lkdGgo
KSwgcC5oZWlnaHQoKSk7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IGxheW91dE1vZChjb25zdCBM
YXlvdXRVbml0JiBudW1lcmF0b3IsIGNvbnN0IExheW91dFVuaXQmIGRlbm9taW5hdG9yKQotewot
ICAgIHJldHVybiBudW1lcmF0b3IgJSBkZW5vbWluYXRvcjsKLX0KLQotaW5saW5lIEludFNpemUg
cGl4ZWxTbmFwcGVkSW50U2l6ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgcywgY29uc3Qg
RnJhY3Rpb25hbExheW91dFBvaW50JiBwKQotewotICAgIHJldHVybiBJbnRTaXplKHNuYXBTaXpl
VG9QaXhlbChzLndpZHRoKCksIHAueCgpKSwgc25hcFNpemVUb1BpeGVsKHMuaGVpZ2h0KCksIHAu
eSgpKSk7Ci19Ci0KLWlubGluZSBJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3QoTGF5b3V0UG9p
bnQgbG9jYXRpb24sIExheW91dFNpemUgc2l6ZSkKLXsKLSAgICByZXR1cm4gSW50UmVjdChyb3Vu
ZGVkSW50UG9pbnQobG9jYXRpb24pLCBwaXhlbFNuYXBwZWRJbnRTaXplKHNpemUsIGxvY2F0aW9u
KSk7Ci19Ci0KLWlubGluZSBib29sIGlzSW50ZWdlclZhbHVlKGNvbnN0IExheW91dFVuaXQgdmFs
dWUpCi17Ci0gICAgcmV0dXJuIHZhbHVlLnRvSW50KCkgPT0gdmFsdWU7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIExheW91dFR5cGVzSW5saW5lTWV0aG9kc19oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUGFpbnRJbmZvLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1BhaW50SW5mby5oCShyZXZpc2lvbiAxMzM2NjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUGFpbnRJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDcgKzMyLDcgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
IkludFJlY3QuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCIKKyNpbmNs
dWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiUGFpbnRQaGFzZS5oIgogI2luY2x1ZGUgPGxp
bWl0cz4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxMzM2NjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODEsOCArMTgx
LDggQEAgUmVuZGVyQmxvY2s6Ok1hcmdpbkluZm86Ok1hcmdpbkluZm8oUmVuZAogICAgIG1fcXVp
cmtDb250YWluZXIgPSBibG9jay0+aXNUYWJsZUNlbGwoKSB8fCBibG9jay0+aXNCb2R5KCkgfHwg
YmxvY2tTdHlsZS0+bWFyZ2luQmVmb3JlQ29sbGFwc2UoKSA9PSBNRElTQ0FSRAogICAgICAgICB8
fCBibG9ja1N0eWxlLT5tYXJnaW5BZnRlckNvbGxhcHNlKCkgPT0gTURJU0NBUkQ7CiAKLSAgICBt
X3Bvc2l0aXZlTWFyZ2luID0gbV9jYW5Db2xsYXBzZU1hcmdpbkJlZm9yZVdpdGhDaGlsZHJlbiA/
IGJsb2NrLT5tYXhQb3NpdGl2ZU1hcmdpbkJlZm9yZSgpIDogWkVST19MQVlPVVRfVU5JVDsKLSAg
ICBtX25lZ2F0aXZlTWFyZ2luID0gbV9jYW5Db2xsYXBzZU1hcmdpbkJlZm9yZVdpdGhDaGlsZHJl
biA/IGJsb2NrLT5tYXhOZWdhdGl2ZU1hcmdpbkJlZm9yZSgpIDogWkVST19MQVlPVVRfVU5JVDsK
KyAgICBtX3Bvc2l0aXZlTWFyZ2luID0gbV9jYW5Db2xsYXBzZU1hcmdpbkJlZm9yZVdpdGhDaGls
ZHJlbiA/IGJsb2NrLT5tYXhQb3NpdGl2ZU1hcmdpbkJlZm9yZSgpIDogTGF5b3V0VW5pdCgpOwor
ICAgIG1fbmVnYXRpdmVNYXJnaW4gPSBtX2NhbkNvbGxhcHNlTWFyZ2luQmVmb3JlV2l0aENoaWxk
cmVuID8gYmxvY2stPm1heE5lZ2F0aXZlTWFyZ2luQmVmb3JlKCkgOiBMYXlvdXRVbml0KCk7CiB9
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAg
LTEyOTEsNyArMTI5MSw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmlzU2VsZkNvbGxhcHNpbmdCbG9j
aygKICAgICAvLyAoYykgaGF2ZSBib3JkZXIvcGFkZGluZywKICAgICAvLyAoZCkgaGF2ZSBhIG1p
bi1oZWlnaHQKICAgICAvLyAoZSkgaGF2ZSBzcGVjaWZpZWQgdGhhdCBvbmUgb2Ygb3VyIG1hcmdp
bnMgY2FuJ3QgY29sbGFwc2UgdXNpbmcgYSBDU1MgZXh0ZW5zaW9uCi0gICAgaWYgKGxvZ2ljYWxI
ZWlnaHQoKSA+IFpFUk9fTEFZT1VUX1VOSVQKKyAgICBpZiAobG9naWNhbEhlaWdodCgpID4gMAog
ICAgICAgICB8fCBpc1RhYmxlKCkgfHwgYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKQog
ICAgICAgICB8fCBzdHlsZSgpLT5sb2dpY2FsTWluSGVpZ2h0KCkuaXNQb3NpdGl2ZSgpCiAgICAg
ICAgIHx8IHN0eWxlKCktPm1hcmdpbkJlZm9yZUNvbGxhcHNlKCkgPT0gTVNFUEFSQVRFIHx8IHN0
eWxlKCktPm1hcmdpbkFmdGVyQ29sbGFwc2UoKSA9PSBNU0VQQVJBVEUpCkBAIC0xNDIzLDcgKzE0
MjMsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVSZWdpb25zQW5kRXhjbHVzCiAKICAgICAv
LyBDb21wdXRlIHRoZSBtYXhpbXVtIGxvZ2ljYWwgaGVpZ2h0IGNvbnRlbnQgbWF5IGNhdXNlIHRo
aXMgYmxvY2sgdG8gZXhwYW5kIHRvCiAgICAgLy8gRklYTUU6IFRoZXNlIHNob3VsZCBldmVudHVh
bGx5IHVzZSB0aGUgY29uc3QgY29tcHV0ZUxvZ2ljYWxIZWlnaHQgcmF0aGVyIHRoYW4gdXBkYXRl
TG9naWNhbEhlaWdodAotICAgIHNldExvZ2ljYWxIZWlnaHQoTUFYX0xBWU9VVF9VTklUIC8gMik7
CisgICAgc2V0TG9naWNhbEhlaWdodChMYXlvdXRVbml0OjptYXgoKSAvIDIpOwogICAgIHVwZGF0
ZUxvZ2ljYWxIZWlnaHQoKTsKIAogI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykKQEAgLTE0NDQs
NyArMTQ0NCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVFeGNsdXNpb25TaGFwZVMKICAg
ICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyA9IHRo
aXMtPmV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOwogICAgIGlmIChleGNsdXNpb25TaGFwZUlu
c2lkZUluZm8pIHsKICAgICAgICAgYm9vbCBwZXJjZW50YWdlTG9naWNhbEhlaWdodFJlc29sdmFi
bGUgPSBwZXJjZW50YWdlTG9naWNhbEhlaWdodElzUmVzb2x2YWJsZUZyb21CbG9jayh0aGlzLCBm
YWxzZSk7Ci0gICAgICAgIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+Y29tcHV0ZVNoYXBlU2l6
ZShsb2dpY2FsV2lkdGgoKSwgcGVyY2VudGFnZUxvZ2ljYWxIZWlnaHRSZXNvbHZhYmxlID8gbG9n
aWNhbEhlaWdodCgpIDogWkVST19MQVlPVVRfVU5JVCk7CisgICAgICAgIGV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mby0+Y29tcHV0ZVNoYXBlU2l6ZShsb2dpY2FsV2lkdGgoKSwgcGVyY2VudGFnZUxv
Z2ljYWxIZWlnaHRSZXNvbHZhYmxlID8gbG9naWNhbEhlaWdodCgpIDogTGF5b3V0VW5pdCgpKTsK
ICAgICB9CiB9CiAjZW5kaWYKQEAgLTE0NzUsMTEgKzE0NzUsMTEgQEAgdm9pZCBSZW5kZXJCbG9j
azo6Y2hlY2tGb3JQYWdpbmF0aW9uTG9naQogICAgICAgICAgICAgLy8gYXZvaWQgZG9pbmcgdHdv
IGxheW91dCBwYXNzZXMuCiAgICAgICAgICAgICB1cGRhdGVMb2dpY2FsSGVpZ2h0KCk7CiAgICAg
ICAgICAgICBMYXlvdXRVbml0IGNvbHVtbkhlaWdodCA9IGNvbnRlbnRMb2dpY2FsSGVpZ2h0KCk7
Ci0gICAgICAgICAgICBpZiAoY29sdW1uSGVpZ2h0ID4gWkVST19MQVlPVVRfVU5JVCkgeworICAg
ICAgICAgICAgaWYgKGNvbHVtbkhlaWdodCA+IDApIHsKICAgICAgICAgICAgICAgICBwYWdlTG9n
aWNhbEhlaWdodCA9IGNvbHVtbkhlaWdodDsKICAgICAgICAgICAgICAgICBoYXNTcGVjaWZpZWRQ
YWdlTG9naWNhbEhlaWdodCA9IHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXRM
b2dpY2FsSGVpZ2h0KFpFUk9fTEFZT1VUX1VOSVQpOworICAgICAgICAgICAgc2V0TG9naWNhbEhl
aWdodCgwKTsKICAgICAgICAgfQogICAgICAgICBpZiAoY29sSW5mby0+Y29sdW1uSGVpZ2h0KCkg
IT0gcGFnZUxvZ2ljYWxIZWlnaHQgJiYgZXZlckhhZExheW91dCgpKSB7CiAgICAgICAgICAgICBj
b2xJbmZvLT5zZXRDb2x1bW5IZWlnaHQocGFnZUxvZ2ljYWxIZWlnaHQpOwpAQCAtMTUxNiw3ICsx
NTE2LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxheQogICAgIGNs
ZWFyRmxvYXRzKCk7CiAKICAgICBMYXlvdXRVbml0IHByZXZpb3VzSGVpZ2h0ID0gbG9naWNhbEhl
aWdodCgpOwotICAgIHNldExvZ2ljYWxIZWlnaHQoWkVST19MQVlPVVRfVU5JVCk7CisgICAgc2V0
TG9naWNhbEhlaWdodCgwKTsKIAogICAgIGJvb2wgcGFnZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkID0g
ZmFsc2U7CiAgICAgYm9vbCBoYXNTcGVjaWZpZWRQYWdlTG9naWNhbEhlaWdodCA9IGZhbHNlOwpA
QCAtMTU1Miw5ICsxNTUyLDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCBy
ZWxheQogICAgICAgICBzZXRQYWdpbmF0aW9uU3RydXQoMCk7CiAgICAgfQogCi0gICAgTGF5b3V0
VW5pdCByZXBhaW50TG9naWNhbFRvcCA9IFpFUk9fTEFZT1VUX1VOSVQ7Ci0gICAgTGF5b3V0VW5p
dCByZXBhaW50TG9naWNhbEJvdHRvbSA9IFpFUk9fTEFZT1VUX1VOSVQ7Ci0gICAgTGF5b3V0VW5p
dCBtYXhGbG9hdExvZ2ljYWxCb3R0b20gPSBaRVJPX0xBWU9VVF9VTklUOworICAgIExheW91dFVu
aXQgcmVwYWludExvZ2ljYWxUb3AgPSAwOworICAgIExheW91dFVuaXQgcmVwYWludExvZ2ljYWxC
b3R0b20gPSAwOworICAgIExheW91dFVuaXQgbWF4RmxvYXRMb2dpY2FsQm90dG9tID0gMDsKICAg
ICBpZiAoIWZpcnN0Q2hpbGQoKSAmJiAhaXNBbm9ueW1vdXNCbG9jaygpKQogICAgICAgICBzZXRD
aGlsZHJlbklubGluZSh0cnVlKTsKICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkKQEAgLTE2OTEs
OSArMTY5MSw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVPdmVyZmxvdyhMYXlvdXQKICAg
ICAgICAgTGF5b3V0UmVjdCBjbGllbnRSZWN0KGNsaWVudEJveFJlY3QoKSk7CiAgICAgICAgIExh
eW91dFJlY3QgcmVjdFRvQXBwbHk7CiAgICAgICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpKQotICAgICAgICAgICAgcmVjdFRvQXBwbHkgPSBMYXlvdXRSZWN0KGNsaWVudFJlY3QueCgp
LCBjbGllbnRSZWN0LnkoKSwgMSwgbWF4KFpFUk9fTEFZT1VUX1VOSVQsIG9sZENsaWVudEFmdGVy
RWRnZSAtIGNsaWVudFJlY3QueSgpKSk7CisgICAgICAgICAgICByZWN0VG9BcHBseSA9IExheW91
dFJlY3QoY2xpZW50UmVjdC54KCksIGNsaWVudFJlY3QueSgpLCAxLCBtYXg8TGF5b3V0VW5pdD4o
MCwgb2xkQ2xpZW50QWZ0ZXJFZGdlIC0gY2xpZW50UmVjdC55KCkpKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgcmVjdFRvQXBwbHkgPSBMYXlvdXRSZWN0KGNsaWVudFJlY3QueCgpLCBjbGll
bnRSZWN0LnkoKSwgbWF4KFpFUk9fTEFZT1VUX1VOSVQsIG9sZENsaWVudEFmdGVyRWRnZSAtIGNs
aWVudFJlY3QueCgpKSwgMSk7CisgICAgICAgICAgICByZWN0VG9BcHBseSA9IExheW91dFJlY3Qo
Y2xpZW50UmVjdC54KCksIGNsaWVudFJlY3QueSgpLCBtYXg8TGF5b3V0VW5pdD4oMCwgb2xkQ2xp
ZW50QWZ0ZXJFZGdlIC0gY2xpZW50UmVjdC54KCkpLCAxKTsKICAgICAgICAgYWRkTGF5b3V0T3Zl
cmZsb3cocmVjdFRvQXBwbHkpOwogICAgIH0KICAgICAgICAgCkBAIC0xODA2LDcgKzE4MDYsNyBA
QCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RGbG9hdGluZ0Jsb2NrKGNvCiAgICAgLy8gZm9yIGJ5
IHNpbXBseSBjYWxsaW5nIGNhbkNvbGxhcHNlV2l0aE1hcmdpbkJlZm9yZS4gIFNlZQogICAgIC8v
IGh0dHA6Ly93d3cuaGl4aWUuY2gvdGVzdHMvYWRob2MvY3NzL2JveC9ibG9jay9tYXJnaW4tY29s
bGFwc2UvMDQ2Lmh0bWwgZm9yCiAgICAgLy8gYW4gZXhhbXBsZSBvZiB0aGlzIHNjZW5hcmlvLgot
ICAgIExheW91dFVuaXQgbWFyZ2luT2Zmc2V0ID0gbWFyZ2luSW5mby5jYW5Db2xsYXBzZVdpdGhN
YXJnaW5CZWZvcmUoKSA/IFpFUk9fTEFZT1VUX1VOSVQgOiBtYXJnaW5JbmZvLm1hcmdpbigpOwor
ICAgIExheW91dFVuaXQgbWFyZ2luT2Zmc2V0ID0gbWFyZ2luSW5mby5jYW5Db2xsYXBzZVdpdGhN
YXJnaW5CZWZvcmUoKSA/IExheW91dFVuaXQoKSA6IG1hcmdpbkluZm8ubWFyZ2luKCk7CiAgICAg
c2V0TG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0KCkgKyBtYXJnaW5PZmZzZXQpOwogICAgIHBv
c2l0aW9uTmV3RmxvYXRzKCk7CiAgICAgc2V0TG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0KCkg
LSBtYXJnaW5PZmZzZXQpOwpAQCAtMjIwNiw4ICsyMjA2LDggQEAgTGF5b3V0VW5pdCBSZW5kZXJC
bG9jazo6ZXN0aW1hdGVMb2dpY2FsVAogICAgIC8vIHJlbGF5b3V0IGlmIHRoZXJlIGFyZSBpbnRy
dWRpbmcgZmxvYXRzLgogICAgIExheW91dFVuaXQgbG9naWNhbFRvcEVzdGltYXRlID0gbG9naWNh
bEhlaWdodCgpOwogICAgIGlmICghbWFyZ2luSW5mby5jYW5Db2xsYXBzZVdpdGhNYXJnaW5CZWZv
cmUoKSkgewotICAgICAgICBMYXlvdXRVbml0IHBvc2l0aXZlTWFyZ2luQmVmb3JlID0gWkVST19M
QVlPVVRfVU5JVDsKLSAgICAgICAgTGF5b3V0VW5pdCBuZWdhdGl2ZU1hcmdpbkJlZm9yZSA9IFpF
Uk9fTEFZT1VUX1VOSVQ7CisgICAgICAgIExheW91dFVuaXQgcG9zaXRpdmVNYXJnaW5CZWZvcmUg
PSAwOworICAgICAgICBMYXlvdXRVbml0IG5lZ2F0aXZlTWFyZ2luQmVmb3JlID0gMDsKICAgICAg
ICAgaWYgKGNoaWxkLT5zZWxmTmVlZHNMYXlvdXQoKSkgewogICAgICAgICAgICAgLy8gVHJ5IHRv
IGRvIGEgYmFzaWMgZXN0aW1hdGlvbiBvZiBob3cgdGhlIGNvbGxhcHNlIGlzIGdvaW5nIHRvIGdv
LgogICAgICAgICAgICAgbWFyZ2luQmVmb3JlRXN0aW1hdGVGb3JDaGlsZChjaGlsZCwgcG9zaXRp
dmVNYXJnaW5CZWZvcmUsIG5lZ2F0aXZlTWFyZ2luQmVmb3JlKTsKQEAgLTI3OTYsOSArMjc5Niw5
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q29sdW1uUnVsZXMoUGFpbnQKIAogICAgIGlmIChj
b2xJbmZvLT5wcm9ncmVzc2lvbkF4aXMoKSA9PSBDb2x1bW5JbmZvOjpJbmxpbmVBeGlzKSB7CiAg
ICAgICAgIGJvb2wgbGVmdFRvUmlnaHQgPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkgXiBjb2xJbmZvLT5wcm9ncmVzc2lvbklzUmV2ZXJzZWQoKTsKLSAgICAgICAgTGF5b3V0VW5p
dCBjdXJyTG9naWNhbExlZnRPZmZzZXQgPSBsZWZ0VG9SaWdodCA/IFpFUk9fTEFZT1VUX1VOSVQg
OiBjb250ZW50TG9naWNhbFdpZHRoKCk7CisgICAgICAgIExheW91dFVuaXQgY3VyckxvZ2ljYWxM
ZWZ0T2Zmc2V0ID0gbGVmdFRvUmlnaHQgPyBMYXlvdXRVbml0KCkgOiBjb250ZW50TG9naWNhbFdp
ZHRoKCk7CiAgICAgICAgIExheW91dFVuaXQgcnVsZUFkZCA9IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9y
Q29udGVudCgpOwotICAgICAgICBMYXlvdXRVbml0IHJ1bGVMb2dpY2FsTGVmdCA9IGxlZnRUb1Jp
Z2h0ID8gWkVST19MQVlPVVRfVU5JVCA6IGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICAgICAg
TGF5b3V0VW5pdCBydWxlTG9naWNhbExlZnQgPSBsZWZ0VG9SaWdodCA/IExheW91dFVuaXQoKSA6
IGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKICAgICAgICAgTGF5b3V0VW5pdCBpbmxpbmVEaXJlY3Rp
b25TaXplID0gY29sSW5mby0+ZGVzaXJlZENvbHVtbldpZHRoKCk7CiAgICAgICAgIEJveFNpZGUg
Ym94U2lkZSA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkKICAgICAgICAgICAgID8gbGVmdFRv
UmlnaHQgPyBCU0xlZnQgOiBCU1JpZ2h0CkBAIC0yOTg4LDcgKzI5ODgsNyBAQCBib29sIFJlbmRl
ckJsb2NrOjpwYWludENoaWxkKFJlbmRlckJveCoKICAgICBpZiAoY2hlY2tBZnRlckFsd2F5cwog
ICAgICAgICAmJiAoYWJzb2x1dGVDaGlsZFkgKyBjaGlsZC0+aGVpZ2h0KCkpID4gcGFpbnRJbmZv
LnJlY3QueSgpCiAgICAgICAgICYmIChhYnNvbHV0ZUNoaWxkWSArIGNoaWxkLT5oZWlnaHQoKSkg
PCBwYWludEluZm8ucmVjdC5tYXhZKCkpIHsKLSAgICAgICAgdmlldygpLT5zZXRCZXN0VHJ1bmNh
dGVkQXQoYWJzb2x1dGVDaGlsZFkgKyBjaGlsZC0+aGVpZ2h0KCkgKyBtYXgoWkVST19MQVlPVVRf
VU5JVCwgY2hpbGQtPmNvbGxhcHNlZE1hcmdpbkFmdGVyKCkpLCB0aGlzLCB0cnVlKTsKKyAgICAg
ICAgdmlldygpLT5zZXRCZXN0VHJ1bmNhdGVkQXQoYWJzb2x1dGVDaGlsZFkgKyBjaGlsZC0+aGVp
Z2h0KCkgKyBtYXg8TGF5b3V0VW5pdD4oMCwgY2hpbGQtPmNvbGxhcHNlZE1hcmdpbkFmdGVyKCkp
LCB0aGlzLCB0cnVlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTM1MTQsMTQgKzM1MTQsMTQgQEAgTGF5b3V0UmVjdCBSZW5kZXJCbG9jazo6Ymxv
Y2tTZWxlY3Rpb25HYQogewogICAgIExheW91dFVuaXQgbG9naWNhbFRvcCA9IGxhc3RMb2dpY2Fs
VG9wOwogICAgIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IGJsb2NrRGlyZWN0aW9uT2Zmc2V0
KHJvb3RCbG9jaywgb2Zmc2V0RnJvbVJvb3RCbG9jaykgKyBsb2dpY2FsQm90dG9tIC0gbG9naWNh
bFRvcDsKLSAgICBpZiAobG9naWNhbEhlaWdodCA8PSBaRVJPX0xBWU9VVF9VTklUKQorICAgIGlm
IChsb2dpY2FsSGVpZ2h0IDw9IDApCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKICAg
ICAvLyBHZXQgdGhlIHNlbGVjdGlvbiBvZmZzZXRzIGZvciB0aGUgYm90dG9tIG9mIHRoZSBnYXAK
ICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0ID0gbWF4KGxhc3RMb2dpY2FsTGVmdCwgbG9naWNh
bExlZnRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBsb2dpY2FsQm90dG9tKSk7CiAgICAgTGF5
b3V0VW5pdCBsb2dpY2FsUmlnaHQgPSBtaW4obGFzdExvZ2ljYWxSaWdodCwgbG9naWNhbFJpZ2h0
U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbEJvdHRvbSkpOwogICAgIExheW91dFVu
aXQgbG9naWNhbFdpZHRoID0gbG9naWNhbFJpZ2h0IC0gbG9naWNhbExlZnQ7Ci0gICAgaWYgKGxv
Z2ljYWxXaWR0aCA8PSBaRVJPX0xBWU9VVF9VTklUKQorICAgIGlmIChsb2dpY2FsV2lkdGggPD0g
MCkKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKIAogICAgIExheW91dFJlY3QgZ2FwUmVj
dCA9IHJvb3RCbG9jay0+bG9naWNhbFJlY3RUb1BoeXNpY2FsUmVjdChyb290QmxvY2tQaHlzaWNh
bFBvc2l0aW9uLCBMYXlvdXRSZWN0KGxvZ2ljYWxMZWZ0LCBsb2dpY2FsVG9wLCBsb2dpY2FsV2lk
dGgsIGxvZ2ljYWxIZWlnaHQpKTsKQEAgLTM1MzcsNyArMzUzNyw3IEBAIExheW91dFJlY3QgUmVu
ZGVyQmxvY2s6OmxvZ2ljYWxMZWZ0U2VsZWMKICAgICBMYXlvdXRVbml0IHJvb3RCbG9ja0xvZ2lj
YWxMZWZ0ID0gbWF4KGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNh
bFRvcCksIGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbFRvcCAr
IGxvZ2ljYWxIZWlnaHQpKTsKICAgICBMYXlvdXRVbml0IHJvb3RCbG9ja0xvZ2ljYWxSaWdodCA9
IG1pbihpbmxpbmVEaXJlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBvZmZzZXRGcm9tUm9vdEJsb2Nr
KSArIGZsb29yVG9JbnQobG9naWNhbExlZnQpLCBtaW4obG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zm
c2V0KHJvb3RCbG9jaywgbG9naWNhbFRvcCksIGxvZ2ljYWxSaWdodFNlbGVjdGlvbk9mZnNldChy
b290QmxvY2ssIGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0KSkpOwogICAgIExheW91dFVuaXQg
cm9vdEJsb2NrTG9naWNhbFdpZHRoID0gcm9vdEJsb2NrTG9naWNhbFJpZ2h0IC0gcm9vdEJsb2Nr
TG9naWNhbExlZnQ7Ci0gICAgaWYgKHJvb3RCbG9ja0xvZ2ljYWxXaWR0aCA8PSBaRVJPX0xBWU9V
VF9VTklUKQorICAgIGlmIChyb290QmxvY2tMb2dpY2FsV2lkdGggPD0gMCkKICAgICAgICAgcmV0
dXJuIExheW91dFJlY3QoKTsKIAogICAgIExheW91dFJlY3QgZ2FwUmVjdCA9IHJvb3RCbG9jay0+
bG9naWNhbFJlY3RUb1BoeXNpY2FsUmVjdChyb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBMYXlv
dXRSZWN0KHJvb3RCbG9ja0xvZ2ljYWxMZWZ0LCByb290QmxvY2tMb2dpY2FsVG9wLCByb290Qmxv
Y2tMb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpKTsKQEAgLTM1NTMsNyArMzU1Myw3IEBAIExh
eW91dFJlY3QgUmVuZGVyQmxvY2s6OmxvZ2ljYWxSaWdodFNlbGUKICAgICBMYXlvdXRVbml0IHJv
b3RCbG9ja0xvZ2ljYWxMZWZ0ID0gbWF4KGlubGluZURpcmVjdGlvbk9mZnNldChyb290QmxvY2ss
IG9mZnNldEZyb21Sb290QmxvY2spICsgZmxvb3JUb0ludChsb2dpY2FsUmlnaHQpLCBtYXgobG9n
aWNhbExlZnRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBsb2dpY2FsVG9wKSwgbG9naWNhbExl
ZnRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodCkp
KTsKICAgICBMYXlvdXRVbml0IHJvb3RCbG9ja0xvZ2ljYWxSaWdodCA9IG1pbihsb2dpY2FsUmln
aHRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBsb2dpY2FsVG9wKSwgbG9naWNhbFJpZ2h0U2Vs
ZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQpKTsKICAg
ICBMYXlvdXRVbml0IHJvb3RCbG9ja0xvZ2ljYWxXaWR0aCA9IHJvb3RCbG9ja0xvZ2ljYWxSaWdo
dCAtIHJvb3RCbG9ja0xvZ2ljYWxMZWZ0OwotICAgIGlmIChyb290QmxvY2tMb2dpY2FsV2lkdGgg
PD0gWkVST19MQVlPVVRfVU5JVCkKKyAgICBpZiAocm9vdEJsb2NrTG9naWNhbFdpZHRoIDw9IDAp
CiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKICAgICBMYXlvdXRSZWN0IGdhcFJlY3Qg
PSByb290QmxvY2stPmxvZ2ljYWxSZWN0VG9QaHlzaWNhbFJlY3Qocm9vdEJsb2NrUGh5c2ljYWxQ
b3NpdGlvbiwgTGF5b3V0UmVjdChyb290QmxvY2tMb2dpY2FsTGVmdCwgcm9vdEJsb2NrTG9naWNh
bFRvcCwgcm9vdEJsb2NrTG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSk7CkBAIC0zODEzLDgg
KzM4MTMsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdChSCiAgICAg
ICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tID0gbG9naWNhbEJvdHRvbUZvckZs
b2F0KHIpOwogCiAgICAgICAgICAgICAgICAgLy8gRml4IGZvciBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ5OTUuCi0gICAgICAgICAgICAgICAgaWYgKGxvZ2ljYWxC
b3R0b20gPCAwIHx8IGxvZ2ljYWxCb3R0b20gPCBsb2dpY2FsVG9wIHx8IGxvZ2ljYWxUb3AgPT0g
TUFYX0xBWU9VVF9VTklUKQotICAgICAgICAgICAgICAgICAgICBsb2dpY2FsQm90dG9tID0gTUFY
X0xBWU9VVF9VTklUOworICAgICAgICAgICAgICAgIGlmIChsb2dpY2FsQm90dG9tIDwgMCB8fCBs
b2dpY2FsQm90dG9tIDwgbG9naWNhbFRvcCB8fCBsb2dpY2FsVG9wID09IExheW91dFVuaXQ6Om1h
eCgpKQorICAgICAgICAgICAgICAgICAgICBsb2dpY2FsQm90dG9tID0gTGF5b3V0VW5pdDo6bWF4
KCk7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFNwZWNp
YWwtY2FzZSB6ZXJvLSBhbmQgbGVzcy10aGFuLXplcm8taGVpZ2h0IGZsb2F0czogdGhvc2UgZG9u
J3QgdG91Y2gKICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGxpbmUgdGhhdCB0aGV5J3JlIG9u
LCBidXQgaXQgc3RpbGwgbmVlZHMgdG8gYmUgZGlydGllZC4gVGhpcyBpcwpAQCAtNDI2Nyw3ICs0
MjY3LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bmV4dEZsb2F0TG9naWNhbAogICAgIGlm
ICghbV9mbG9hdGluZ09iamVjdHMpCiAgICAgICAgIHJldHVybiBsb2dpY2FsSGVpZ2h0OwogCi0g
ICAgTGF5b3V0VW5pdCBib3R0b20gPSBNQVhfTEFZT1VUX1VOSVQ7CisgICAgTGF5b3V0VW5pdCBi
b3R0b20gPSBMYXlvdXRVbml0OjptYXgoKTsKICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYg
ZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgRmxvYXRp
bmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICBm
b3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKQEAgLTQyNzcsMTQgKzQyNzcsMTQgQEAgTGF5b3V0VW5p
dCBSZW5kZXJCbG9jazo6bmV4dEZsb2F0TG9naWNhbAogICAgICAgICAgICAgYm90dG9tID0gbWlu
KGZsb2F0Qm90dG9tLCBib3R0b20pOwogICAgIH0KIAotICAgIHJldHVybiBib3R0b20gPT0gTUFY
X0xBWU9VVF9VTklUID8gWkVST19MQVlPVVRfVU5JVCA6IGJvdHRvbTsKKyAgICByZXR1cm4gYm90
dG9tID09IExheW91dFVuaXQ6Om1heCgpID8gTGF5b3V0VW5pdCgpIDogYm90dG9tOwogfQogCiBM
YXlvdXRVbml0IFJlbmRlckJsb2NrOjpsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20oRmxvYXRpbmdP
YmplY3Q6OlR5cGUgZmxvYXRUeXBlKSBjb25zdAogewogICAgIGlmICghbV9mbG9hdGluZ09iamVj
dHMpCi0gICAgICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOwotICAgIExheW91dFVuaXQgbG93
ZXN0RmxvYXRCb3R0b20gPSBaRVJPX0xBWU9VVF9VTklUOworICAgICAgICByZXR1cm4gMDsKKyAg
ICBMYXlvdXRVbml0IGxvd2VzdEZsb2F0Qm90dG9tID0gMDsKICAgICBjb25zdCBGbG9hdGluZ09i
amVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAg
ICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQo
KTsKICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVj
dFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKQEAgLTQzMDIsNyArNDMwMiw3IEBAIHZv
aWQgUmVuZGVyQmxvY2s6Om1hcmtMaW5lc0RpcnR5SW5CbG9ja1IKIAogICAgIFJvb3RJbmxpbmVC
b3gqIGxvd2VzdERpcnR5TGluZSA9IGxhc3RSb290Qm94KCk7CiAgICAgUm9vdElubGluZUJveCog
YWZ0ZXJMb3dlc3QgPSBsb3dlc3REaXJ0eUxpbmU7Ci0gICAgd2hpbGUgKGxvd2VzdERpcnR5TGlu
ZSAmJiBsb3dlc3REaXJ0eUxpbmUtPmxpbmVCb3R0b21XaXRoTGVhZGluZygpID49IGxvZ2ljYWxC
b3R0b20gJiYgbG9naWNhbEJvdHRvbSA8IE1BWF9MQVlPVVRfVU5JVCkgeworICAgIHdoaWxlIChs
b3dlc3REaXJ0eUxpbmUgJiYgbG93ZXN0RGlydHlMaW5lLT5saW5lQm90dG9tV2l0aExlYWRpbmco
KSA+PSBsb2dpY2FsQm90dG9tICYmIGxvZ2ljYWxCb3R0b20gPCBMYXlvdXRVbml0OjptYXgoKSkg
ewogICAgICAgICBhZnRlckxvd2VzdCA9IGxvd2VzdERpcnR5TGluZTsKICAgICAgICAgbG93ZXN0
RGlydHlMaW5lID0gbG93ZXN0RGlydHlMaW5lLT5wcmV2Um9vdEJveCgpOwogICAgIH0KQEAgLTQz
OTMsOCArNDM5Myw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKCkKICAgICAgICAg
YWRkSW50cnVkaW5nRmxvYXRzKGJsb2NrLCBsb2dpY2FsTGVmdE9mZnNldCwgbG9naWNhbFRvcE9m
ZnNldCk7CiAKICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkgewotICAgICAgICBMYXlvdXRVbml0
IGNoYW5nZUxvZ2ljYWxUb3AgPSBNQVhfTEFZT1VUX1VOSVQ7Ci0gICAgICAgIExheW91dFVuaXQg
Y2hhbmdlTG9naWNhbEJvdHRvbSA9IE1JTl9MQVlPVVRfVU5JVDsKKyAgICAgICAgTGF5b3V0VW5p
dCBjaGFuZ2VMb2dpY2FsVG9wID0gTGF5b3V0VW5pdDo6bWF4KCk7CisgICAgICAgIExheW91dFVu
aXQgY2hhbmdlTG9naWNhbEJvdHRvbSA9IExheW91dFVuaXQ6Om1pbigpOwogICAgICAgICBpZiAo
bV9mbG9hdGluZ09iamVjdHMpIHsKICAgICAgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0
JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICAgICAg
ICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5k
KCk7CkBAIC00NDc1LDcgKzQ0NzUsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphZGRPdmVy
aGFuZ2luZ0ZsCiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBjaGlsZEVuZCA9IGNoaWxk
LT5tX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuZW5kKCk7CiAgICAgZm9yIChGbG9hdGluZ09iamVj
dFNldEl0ZXJhdG9yIGNoaWxkSXQgPSBjaGlsZC0+bV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmJl
Z2luKCk7IGNoaWxkSXQgIT0gY2hpbGRFbmQ7ICsrY2hpbGRJdCkgewogICAgICAgICBGbG9hdGlu
Z09iamVjdCogciA9ICpjaGlsZEl0OwotICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b21G
b3JGbG9hdCA9IG1pbih0aGlzLT5sb2dpY2FsQm90dG9tRm9yRmxvYXQociksIE1BWF9MQVlPVVRf
VU5JVCAtIGNoaWxkTG9naWNhbFRvcCk7CisgICAgICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRv
bUZvckZsb2F0ID0gbWluKHRoaXMtPmxvZ2ljYWxCb3R0b21Gb3JGbG9hdChyKSwgTGF5b3V0VW5p
dDo6bWF4KCkgLSBjaGlsZExvZ2ljYWxUb3ApOwogICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxC
b3R0b20gPSBjaGlsZExvZ2ljYWxUb3AgKyBsb2dpY2FsQm90dG9tRm9yRmxvYXQ7CiAgICAgICAg
IGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSA9IG1heChsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20s
IGxvZ2ljYWxCb3R0b20pOwogCkBAIC00NjYwLDcgKzQ2NjAsNyBAQCBMYXlvdXRVbml0IFJlbmRl
ckJsb2NrOjpnZXRDbGVhckRlbHRhKFJlCiAgICAgfQogCiAgICAgLy8gV2UgYWxzbyBjbGVhciBm
bG9hdHMgaWYgd2UgYXJlIHRvbyBiaWcgdG8gc2l0IG9uIHRoZSBzYW1lIGxpbmUgYXMgYSBmbG9h
dCAoYW5kIHdpc2ggdG8gYXZvaWQgZmxvYXRzIGJ5IGRlZmF1bHQpLgotICAgIExheW91dFVuaXQg
cmVzdWx0ID0gY2xlYXJTZXQgPyBtYXgoWkVST19MQVlPVVRfVU5JVCwgbG9naWNhbEJvdHRvbSAt
IGxvZ2ljYWxUb3ApIDogWkVST19MQVlPVVRfVU5JVDsKKyAgICBMYXlvdXRVbml0IHJlc3VsdCA9
IGNsZWFyU2V0ID8gbWF4PExheW91dFVuaXQ+KDAsIGxvZ2ljYWxCb3R0b20gLSBsb2dpY2FsVG9w
KSA6IExheW91dFVuaXQoKTsKICAgICBpZiAoIXJlc3VsdCAmJiBjaGlsZC0+YXZvaWRzRmxvYXRz
KCkpIHsKICAgICAgICAgTGF5b3V0VW5pdCBuZXdMb2dpY2FsVG9wID0gbG9naWNhbFRvcDsKICAg
ICAgICAgd2hpbGUgKHRydWUpIHsKQEAgLTU3ODAsNyArNTc4MCw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmNvbXB1dGVJbmxpbmVQcmVmZXJyZWQKIAogICAgIFJlbmRlclN0eWxlKiBzdHlsZVRvVXNl
ID0gc3R5bGUoKTsKICAgICBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrID0gdGhpcy0+Y29u
dGFpbmluZ0Jsb2NrKCk7Ci0gICAgTGF5b3V0VW5pdCBjdyA9IGNvbnRhaW5pbmdCbG9jayA/IGNv
bnRhaW5pbmdCbG9jay0+Y29udGVudExvZ2ljYWxXaWR0aCgpIDogWkVST19MQVlPVVRfVU5JVDsK
KyAgICBMYXlvdXRVbml0IGN3ID0gY29udGFpbmluZ0Jsb2NrID8gY29udGFpbmluZ0Jsb2NrLT5j
b250ZW50TG9naWNhbFdpZHRoKCkgOiBMYXlvdXRVbml0KCk7CiAKICAgICAvLyBJZiB3ZSBhcmUg
YXQgdGhlIHN0YXJ0IG9mIGEgbGluZSwgd2Ugd2FudCB0byBpZ25vcmUgYWxsIHdoaXRlLXNwYWNl
LgogICAgIC8vIEFsc28gc3RyaXAgc3BhY2VzIGlmIHdlIHByZXZpb3VzbHkgaGFkIHRleHQgdGhh
dCBlbmRlZCBpbiBhIHRyYWlsaW5nIHNwYWNlLgpAQCAtNjE1Nyw4ICs2MTU3LDggQEAgdm9pZCBS
ZW5kZXJCbG9jazo6Y29tcHV0ZUJsb2NrUHJlZmVycmVkTAogICAgIH0KIAogICAgIC8vIEFsd2F5
cyBtYWtlIHN1cmUgdGhlc2UgdmFsdWVzIGFyZSBub24tbmVnYXRpdmUuCi0gICAgbV9taW5QcmVm
ZXJyZWRMb2dpY2FsV2lkdGggPSBtYXgoWkVST19MQVlPVVRfVU5JVCwgbV9taW5QcmVmZXJyZWRM
b2dpY2FsV2lkdGgpOwotICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4KFpFUk9f
TEFZT1VUX1VOSVQsIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKTsKKyAgICBtX21pblByZWZl
cnJlZExvZ2ljYWxXaWR0aCA9IG1heDxMYXlvdXRVbml0PigwLCBtX21pblByZWZlcnJlZExvZ2lj
YWxXaWR0aCk7CisgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtYXg8TGF5b3V0VW5p
dD4oMCwgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgpOwogCiAgICAgbV9tYXhQcmVmZXJyZWRM
b2dpY2FsV2lkdGggPSBtYXgoZmxvYXRMZWZ0V2lkdGggKyBmbG9hdFJpZ2h0V2lkdGgsIG1fbWF4
UHJlZmVycmVkTG9naWNhbFdpZHRoKTsKIH0KQEAgLTY1ODksNyArNjU4OSw3IEBAIHN0YXRpYyBp
bnQgZ2V0SGVpZ2h0Rm9yTGluZUNvdW50KFJlbmRlckIKICAgICAgICAgaWYgKGJsb2NrLT5jaGls
ZHJlbklubGluZSgpKSB7CiAgICAgICAgICAgICBmb3IgKFJvb3RJbmxpbmVCb3gqIGJveCA9IGJs
b2NrLT5maXJzdFJvb3RCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRSb290Qm94KCkpIHsKICAg
ICAgICAgICAgICAgICBpZiAoKytjb3VudCA9PSBsKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gYm94LT5saW5lQm90dG9tKCkgKyAoaW5jbHVkZUJvdHRvbSA/IChibG9jay0+Ym9yZGVyQm90
dG9tKCkgKyBibG9jay0+cGFkZGluZ0JvdHRvbSgpKSA6IFpFUk9fTEFZT1VUX1VOSVQpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gYm94LT5saW5lQm90dG9tKCkgKyAoaW5jbHVkZUJvdHRv
bSA/IChibG9jay0+Ym9yZGVyQm90dG9tKCkgKyBibG9jay0+cGFkZGluZ0JvdHRvbSgpKSA6IExh
eW91dFVuaXQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CkBA
IC02NTk4LDcgKzY1OTgsNyBAQCBzdGF0aWMgaW50IGdldEhlaWdodEZvckxpbmVDb3VudChSZW5k
ZXJCCiAgICAgICAgICAgICAgICAgaWYgKHNob3VsZENoZWNrTGluZXMob2JqKSkgewogICAgICAg
ICAgICAgICAgICAgICBpbnQgcmVzdWx0ID0gZ2V0SGVpZ2h0Rm9yTGluZUNvdW50KHRvUmVuZGVy
QmxvY2sob2JqKSwgbCwgZmFsc2UsIGNvdW50KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHJl
c3VsdCAhPSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyBvYmot
PnkoKSArIChpbmNsdWRlQm90dG9tID8gKGJsb2NrLT5ib3JkZXJCb3R0b20oKSArIGJsb2NrLT5w
YWRkaW5nQm90dG9tKCkpIDogWkVST19MQVlPVVRfVU5JVCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0ICsgb2JqLT55KCkgKyAoaW5jbHVkZUJvdHRvbSA/IChibG9jay0+
Ym9yZGVyQm90dG9tKCkgKyBibG9jay0+cGFkZGluZ0JvdHRvbSgpKSA6IExheW91dFVuaXQoKSk7
CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghb2JqLT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkgJiYgIW9iai0+aXNSdW5JbigpKQogICAgICAgICAgICAgICAgICAgICBub3Jt
YWxGbG93Q2hpbGRXaXRob3V0TGluZXMgPSBvYmo7CiAgICAgICAgICAgICB9CkBAIC02Njg3LDEx
ICs2Njg3LDExIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmJvcmRlckZpdEFkanVzdChMYXlvdXQKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2FsayBhbnkgbm9ybWFsIGZsb3cgbGluZXMgdG8gc251
Z2x5IGZpdC4KLSAgICBMYXlvdXRVbml0IGxlZnQgPSBNQVhfTEFZT1VUX1VOSVQ7Ci0gICAgTGF5
b3V0VW5pdCByaWdodCA9IE1JTl9MQVlPVVRfVU5JVDsKKyAgICBMYXlvdXRVbml0IGxlZnQgPSBM
YXlvdXRVbml0OjptYXgoKTsKKyAgICBMYXlvdXRVbml0IHJpZ2h0ID0gTGF5b3V0VW5pdDo6bWlu
KCk7CiAgICAgTGF5b3V0VW5pdCBvbGRXaWR0aCA9IHJlY3Qud2lkdGgoKTsKICAgICBhZGp1c3RG
b3JCb3JkZXJGaXQoMCwgbGVmdCwgcmlnaHQpOwotICAgIGlmIChsZWZ0ICE9IE1BWF9MQVlPVVRf
VU5JVCkgeworICAgIGlmIChsZWZ0ICE9IExheW91dFVuaXQ6Om1heCgpKSB7CiAgICAgICAgIGxl
ZnQgPSBtaW4obGVmdCwgb2xkV2lkdGggLSAoYm9yZGVyUmlnaHQoKSArIHBhZGRpbmdSaWdodCgp
KSk7CiAKICAgICAgICAgbGVmdCAtPSAoYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSk7CkBA
IC02NzAwLDcgKzY3MDAsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpib3JkZXJGaXRBZGp1c3QoTGF5
b3V0CiAgICAgICAgICAgICByZWN0LmV4cGFuZCgtbGVmdCwgMCk7CiAgICAgICAgIH0KICAgICB9
Ci0gICAgaWYgKHJpZ2h0ICE9IE1JTl9MQVlPVVRfVU5JVCkgeworICAgIGlmIChyaWdodCAhPSBM
YXlvdXRVbml0OjptaW4oKSkgewogICAgICAgICByaWdodCA9IG1heChyaWdodCwgYm9yZGVyTGVm
dCgpICsgcGFkZGluZ0xlZnQoKSk7CiAKICAgICAgICAgcmlnaHQgKz0gKGJvcmRlclJpZ2h0KCkg
KyBwYWRkaW5nUmlnaHQoKSk7CkBAIC02ODg3LDggKzY4ODcsOCBAQCB2b2lkIFJlbmRlckJsb2Nr
OjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25n
IGZvciBibG9jay1mbG93cyB0aGF0IGFyZSBob3Jpem9udGFsLgogICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY3ODEKICAgICAgICAgYm9vbCBwcmV2
SW5saW5lSGFzTGluZUJveCA9IHRvUmVuZGVySW5saW5lKGlubGluZUVsZW1lbnRDb250aW51YXRp
b24oKS0+bm9kZSgpLT5yZW5kZXJlcigpKS0+Zmlyc3RMaW5lQm94KCk7IAotICAgICAgICBmbG9h
dCB0b3BNYXJnaW4gPSBwcmV2SW5saW5lSGFzTGluZUJveCA/IGNvbGxhcHNlZE1hcmdpbkJlZm9y
ZSgpIDogWkVST19MQVlPVVRfVU5JVDsKLSAgICAgICAgZmxvYXQgYm90dG9tTWFyZ2luID0gbmV4
dElubGluZUhhc0xpbmVCb3ggPyBjb2xsYXBzZWRNYXJnaW5BZnRlcigpIDogWkVST19MQVlPVVRf
VU5JVDsKKyAgICAgICAgZmxvYXQgdG9wTWFyZ2luID0gcHJldklubGluZUhhc0xpbmVCb3ggPyBj
b2xsYXBzZWRNYXJnaW5CZWZvcmUoKSA6IExheW91dFVuaXQoKTsKKyAgICAgICAgZmxvYXQgYm90
dG9tTWFyZ2luID0gbmV4dElubGluZUhhc0xpbmVCb3ggPyBjb2xsYXBzZWRNYXJnaW5BZnRlcigp
IDogTGF5b3V0VW5pdCgpOwogICAgICAgICBMYXlvdXRSZWN0IHJlY3QoYWRkaXRpb25hbE9mZnNl
dC54KCksIGFkZGl0aW9uYWxPZmZzZXQueSgpIC0gdG9wTWFyZ2luLCB3aWR0aCgpLCBoZWlnaHQo
KSArIHRvcE1hcmdpbiArIGJvdHRvbU1hcmdpbik7CiAgICAgICAgIGlmICghcmVjdC5pc0VtcHR5
KCkpCiAgICAgICAgICAgICByZWN0cy5hcHBlbmQocGl4ZWxTbmFwcGVkSW50UmVjdChyZWN0KSk7
CkBAIC02OTkzLDcgKzY5OTMsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphcHBseUJlZm9y
ZUJyZWFrCiAgICAgICAgIGlmIChjaGVja0NvbHVtbkJyZWFrcykKICAgICAgICAgICAgIHZpZXco
KS0+bGF5b3V0U3RhdGUoKS0+YWRkRm9yY2VkQ29sdW1uQnJlYWsoY2hpbGQsIGxvZ2ljYWxPZmZz
ZXQpOwogICAgICAgICBpZiAoY2hlY2tSZWdpb25CcmVha3MpIHsKLSAgICAgICAgICAgIExheW91
dFVuaXQgb2Zmc2V0QnJlYWtBZGp1c3RtZW50ID0gWkVST19MQVlPVVRfVU5JVDsKKyAgICAgICAg
ICAgIExheW91dFVuaXQgb2Zmc2V0QnJlYWtBZGp1c3RtZW50ID0gMDsKICAgICAgICAgICAgIGlm
IChlbmNsb3NpbmdSZW5kZXJGbG93VGhyZWFkKCktPmFkZEZvcmNlZFJlZ2lvbkJyZWFrKG9mZnNl
dEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSArIGxvZ2ljYWxPZmZzZXQsIGNoaWxkLCB0cnVl
LCAmb2Zmc2V0QnJlYWtBZGp1c3RtZW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4gbG9naWNh
bE9mZnNldCArIG9mZnNldEJyZWFrQWRqdXN0bWVudDsKICAgICAgICAgfQpAQCAtNzAxNSw4ICs3
MDE1LDggQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6YXBwbHlBZnRlckJyZWFrKAogICAgICAg
ICBpZiAoY2hlY2tDb2x1bW5CcmVha3MpCiAgICAgICAgICAgICB2aWV3KCktPmxheW91dFN0YXRl
KCktPmFkZEZvcmNlZENvbHVtbkJyZWFrKGNoaWxkLCBsb2dpY2FsT2Zmc2V0KTsKICAgICAgICAg
aWYgKGNoZWNrUmVnaW9uQnJlYWtzKSB7Ci0gICAgICAgICAgICBMYXlvdXRVbml0IG1hcmdpbk9m
ZnNldCA9IG1hcmdpbkluZm8uY2FuQ29sbGFwc2VXaXRoTWFyZ2luQmVmb3JlKCkgPyBaRVJPX0xB
WU9VVF9VTklUIDogbWFyZ2luSW5mby5tYXJnaW4oKTsKLSAgICAgICAgICAgIExheW91dFVuaXQg
b2Zmc2V0QnJlYWtBZGp1c3RtZW50ID0gWkVST19MQVlPVVRfVU5JVDsKKyAgICAgICAgICAgIExh
eW91dFVuaXQgbWFyZ2luT2Zmc2V0ID0gbWFyZ2luSW5mby5jYW5Db2xsYXBzZVdpdGhNYXJnaW5C
ZWZvcmUoKSA/IExheW91dFVuaXQoKSA6IG1hcmdpbkluZm8ubWFyZ2luKCk7CisgICAgICAgICAg
ICBMYXlvdXRVbml0IG9mZnNldEJyZWFrQWRqdXN0bWVudCA9IDA7CiAgICAgICAgICAgICBpZiAo
ZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVhZCgpLT5hZGRGb3JjZWRSZWdpb25CcmVhayhvZmZzZXRG
cm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgKyBsb2dpY2FsT2Zmc2V0ICsgbWFyZ2luT2Zmc2V0
LCBjaGlsZCwgZmFsc2UsICZvZmZzZXRCcmVha0FkanVzdG1lbnQpKQogICAgICAgICAgICAgICAg
IHJldHVybiBsb2dpY2FsT2Zmc2V0ICsgb2Zmc2V0QnJlYWtBZGp1c3RtZW50OwogICAgICAgICB9
CkBAIC03MDc4LDcgKzcwNzgsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphZGp1c3RGb3JV
bnNwbGl0CiAgICAgICAgIHx8IChjaGVja1JlZ2lvbkJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+
cmVnaW9uQnJlYWtJbnNpZGUoKSA9PSBQQkFWT0lEKTsKICAgICBpZiAoIWlzVW5zcGxpdHRhYmxl
KQogICAgICAgICByZXR1cm4gbG9naWNhbE9mZnNldDsKLSAgICBMYXlvdXRVbml0IGNoaWxkTG9n
aWNhbEhlaWdodCA9IGxvZ2ljYWxIZWlnaHRGb3JDaGlsZChjaGlsZCkgKyAoaW5jbHVkZU1hcmdp
bnMgPyBtYXJnaW5CZWZvcmVGb3JDaGlsZChjaGlsZCkgKyBtYXJnaW5BZnRlckZvckNoaWxkKGNo
aWxkKSA6IFpFUk9fTEFZT1VUX1VOSVQpOworICAgIExheW91dFVuaXQgY2hpbGRMb2dpY2FsSGVp
Z2h0ID0gbG9naWNhbEhlaWdodEZvckNoaWxkKGNoaWxkKSArIChpbmNsdWRlTWFyZ2lucyA/IG1h
cmdpbkJlZm9yZUZvckNoaWxkKGNoaWxkKSArIG1hcmdpbkFmdGVyRm9yQ2hpbGQoY2hpbGQpIDog
TGF5b3V0VW5pdCgpKTsKICAgICBMYXlvdXRTdGF0ZSogbGF5b3V0U3RhdGUgPSB2aWV3KCktPmxh
eW91dFN0YXRlKCk7CiAgICAgaWYgKGxheW91dFN0YXRlLT5tX2NvbHVtbkluZm8pCiAgICAgICAg
IGxheW91dFN0YXRlLT5tX2NvbHVtbkluZm8tPnVwZGF0ZU1pbmltdW1Db2x1bW5IZWlnaHQoY2hp
bGRMb2dpY2FsSGVpZ2h0KTsKQEAgLTcxNTYsMTIgKzcxNTYsMTIgQEAgdm9pZCBSZW5kZXJCbG9j
azo6YWRqdXN0TGluZVBvc2l0aW9uRm9yUAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBp
ZiAobGluZUhlaWdodCA+IHBhZ2VMb2dpY2FsSGVpZ2h0KSB7CiAgICAgICAgICAgICAvLyBTcGxp
dCB0aGUgdG9wIG1hcmdpbiBpbiBvcmRlciB0byBhdm9pZCBzcGxpdHRpbmcgdGhlIHZpc2libGUg
cGFydCBvZiB0aGUgbGluZS4KLSAgICAgICAgICAgIHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQgLT0g
bWluKGxpbmVIZWlnaHQgLSBwYWdlTG9naWNhbEhlaWdodCwgbWF4KFpFUk9fTEFZT1VUX1VOSVQs
IGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy55KCkgLSBsaW5lQm94LT5saW5lVG9wV2l0aExlYWRpbmco
KSkpOworICAgICAgICAgICAgcmVtYWluaW5nTG9naWNhbEhlaWdodCAtPSBtaW4obGluZUhlaWdo
dCAtIHBhZ2VMb2dpY2FsSGVpZ2h0LCBtYXg8TGF5b3V0VW5pdD4oMCwgbG9naWNhbFZpc3VhbE92
ZXJmbG93LnkoKSAtIGxpbmVCb3gtPmxpbmVUb3BXaXRoTGVhZGluZygpKSk7CiAgICAgICAgIH0K
LSAgICAgICAgTGF5b3V0VW5pdCB0b3RhbExvZ2ljYWxIZWlnaHQgPSBsaW5lSGVpZ2h0ICsgbWF4
KFpFUk9fTEFZT1VUX1VOSVQsIGxvZ2ljYWxPZmZzZXQpOworICAgICAgICBMYXlvdXRVbml0IHRv
dGFsTG9naWNhbEhlaWdodCA9IGxpbmVIZWlnaHQgKyBtYXg8TGF5b3V0VW5pdD4oMCwgbG9naWNh
bE9mZnNldCk7CiAgICAgICAgIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHRBdE5ld09mZnNl
dCA9IGhhc1VuaWZvcm1QYWdlTG9naWNhbEhlaWdodCA/IHBhZ2VMb2dpY2FsSGVpZ2h0IDogcGFn
ZUxvZ2ljYWxIZWlnaHRGb3JPZmZzZXQobG9naWNhbE9mZnNldCArIHJlbWFpbmluZ0xvZ2ljYWxI
ZWlnaHQpOwogICAgICAgICBpZiAobGluZUJveCA9PSBmaXJzdFJvb3RCb3goKSAmJiB0b3RhbExv
Z2ljYWxIZWlnaHQgPCBwYWdlTG9naWNhbEhlaWdodEF0TmV3T2Zmc2V0ICYmICFpc091dE9mRmxv
d1Bvc2l0aW9uZWQoKSAmJiAhaXNUYWJsZUNlbGwoKSkKLSAgICAgICAgICAgIHNldFBhZ2luYXRp
b25TdHJ1dChyZW1haW5pbmdMb2dpY2FsSGVpZ2h0ICsgbWF4KFpFUk9fTEFZT1VUX1VOSVQsIGxv
Z2ljYWxPZmZzZXQpKTsKKyAgICAgICAgICAgIHNldFBhZ2luYXRpb25TdHJ1dChyZW1haW5pbmdM
b2dpY2FsSGVpZ2h0ICsgbWF4PExheW91dFVuaXQ+KDAsIGxvZ2ljYWxPZmZzZXQpKTsKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICBkZWx0YSArPSByZW1haW5pbmdMb2dpY2FsSGVpZ2h0Owog
ICAgICAgICAgICAgbGluZUJveC0+c2V0UGFnaW5hdGlvblN0cnV0KHJlbWFpbmluZ0xvZ2ljYWxI
ZWlnaHQpOwpAQCAtNzI0OSw3ICs3MjQ5LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6b2Zm
c2V0RnJvbUxvZ2ljYQogewogICAgIExheW91dFN0YXRlKiBsYXlvdXRTdGF0ZSA9IHZpZXcoKS0+
bGF5b3V0U3RhdGUoKTsKICAgICBpZiAobGF5b3V0U3RhdGUgJiYgIWxheW91dFN0YXRlLT5pc1Bh
Z2luYXRlZCgpKQotICAgICAgICByZXR1cm4gWkVST19MQVlPVVRfVU5JVDsKKyAgICAgICAgcmV0
dXJuIDA7CiAgICAgaWYgKGxheW91dFN0YXRlKSB7CiAgICAgICAgIC8vIEZJWE1FOiBTYW5pdHkg
Y2hlY2sgdGhhdCB0aGUgcmVuZGVyZXIgaW4gdGhlIGxheW91dCBzdGF0ZSBpcyBvdXJzLCBzaW5j
ZSBvdGhlcndpc2UgdGhlIGNvbXB1dGF0aW9uIHdpbGwgYmUgb2ZmLgogICAgICAgICAvLyBSaWdo
dCBub3cgdGhpcyBhc3NlcnQgZ2V0cyBoaXQgaW5zaWRlIGNvbXB1dGVMb2dpY2FsSGVpZ2h0IGZv
ciBwZXJjZW50YWdlIG1hcmdpbnMsIHNpbmNlIHRoZXkncmUgY29tcHV0ZWQgdXNpbmcKQEAgLTcy
NjUsNyArNzI2NSw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6Om9mZnNldEZyb21Mb2dpY2EK
ICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHNsb3dlciBwYXRoIHRoYXQgZG9lc24ndCB1c2UgbGF5
b3V0IHN0YXRlIGFuZCByZWxpZXMgb24gZ2V0dGluZyB5b3VyIGxvZ2ljYWwgdG9wIGluc2lkZSB0
aGUgZW5jbG9zaW5nIGZsb3cgdGhyZWFkLiBJdCBkb2Vzbid0CiAgICAgLy8gd29yayB3aXRoIGNv
bHVtbnMgb3IgcGFnZXMgY3VycmVudGx5LCBidXQgaXQgc2hvdWxkIG9uY2UgdGhleSBoYXZlIGJl
ZW4gc3dpdGNoZWQgb3ZlciB0byB1c2luZyBmbG93IHRocmVhZHMuCiAgICAgaWYgKCFpblJlbmRl
ckZsb3dUaHJlYWQoKSkKLSAgICAgICAgcmV0dXJuIFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAg
IHJldHVybiAwOwogCiAgICAgY29uc3QgUmVuZGVyQmxvY2sqIGN1cnJlbnRCbG9jayA9IHRoaXM7
CiAgICAgTGF5b3V0UmVjdCBibG9ja1JlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkpOwpAQCAt
NzI3NCw3ICs3Mjc0LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6b2Zmc2V0RnJvbUxvZ2lj
YQogICAgICAgICBSZW5kZXJCbG9jayogY29udGFpbmVyQmxvY2sgPSBjdXJyZW50QmxvY2stPmNv
bnRhaW5pbmdCbG9jaygpOwogICAgICAgICBBU1NFUlQoY29udGFpbmVyQmxvY2spOwogICAgICAg
ICBpZiAoIWNvbnRhaW5lckJsb2NrKQotICAgICAgICAgICAgcmV0dXJuIFpFUk9fTEFZT1VUX1VO
SVQ7CisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgTGF5b3V0UG9pbnQgY3VycmVudEJs
b2NrTG9jYXRpb24gPSBjdXJyZW50QmxvY2stPmxvY2F0aW9uKCk7CiAKICAgICAgICAgaWYgKGNv
bnRhaW5lckJsb2NrLT5zdHlsZSgpLT53cml0aW5nTW9kZSgpICE9IGN1cnJlbnRCbG9jay0+c3R5
bGUoKS0+d3JpdGluZ01vZGUoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmgJKHJldmlzaW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksNyArMTQ5LDcgQEAgcHVibGljOgog
ICAgIC8vIGNvbXB1dGUgdGhlIHJlZ2lvbiBhbGwgb3ZlciBhZ2FpbiB3aGVuIHlvdSBhbHJlYWR5
IGtub3cgaXQuCiAgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JMaW5lKExh
eW91dFVuaXQgcG9zaXRpb24sIGJvb2wgZmlyc3RMaW5lLCBSZW5kZXJSZWdpb24qIHJlZ2lvbiwg
TGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlLCBMYXlvdXRVbml0IGxv
Z2ljYWxIZWlnaHQgPSAwKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1heChaRVJPX0xB
WU9VVF9VTklULCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBmaXJzdExpbmUs
IHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSwgbG9naWNhbEhlaWdodCkK
KyAgICAgICAgcmV0dXJuIG1heDxMYXlvdXRVbml0PigwLCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JM
aW5lKHBvc2l0aW9uLCBmaXJzdExpbmUsIHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZp
cnN0UGFnZSwgbG9naWNhbEhlaWdodCkKICAgICAgICAgICAgIC0gbG9naWNhbExlZnRPZmZzZXRG
b3JMaW5lKHBvc2l0aW9uLCBmaXJzdExpbmUsIHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BP
ZkZpcnN0UGFnZSwgbG9naWNhbEhlaWdodCkpOwogICAgIH0KICAgICBMYXlvdXRVbml0IGxvZ2lj
YWxSaWdodE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBwb3NpdGlvbiwgYm9vbCBmaXJzdExpbmUs
IFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZG
aXJzdFBhZ2UsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IDApIGNvbnN0IApAQCAtMjk3LDEy
ICsyOTcsMTIgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGNvbHVtbkNvdW50KENvbHVtbkluZm8q
KSBjb25zdDsKICAgICBMYXlvdXRSZWN0IGNvbHVtblJlY3RBdChDb2x1bW5JbmZvKiwgdW5zaWdu
ZWQpIGNvbnN0OwogCi0gICAgTGF5b3V0VW5pdCBwYWdpbmF0aW9uU3RydXQoKSBjb25zdCB7IHJl
dHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9wYWdpbmF0aW9uU3RydXQgOiBaRVJPX0xB
WU9VVF9VTklUOyB9CisgICAgTGF5b3V0VW5pdCBwYWdpbmF0aW9uU3RydXQoKSBjb25zdCB7IHJl
dHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9wYWdpbmF0aW9uU3RydXQgOiBMYXlvdXRV
bml0KCk7IH0KICAgICB2b2lkIHNldFBhZ2luYXRpb25TdHJ1dChMYXlvdXRVbml0KTsKICAgICAK
ICAgICAvLyBUaGUgcGFnZSBsb2dpY2FsIG9mZnNldCBpcyB0aGUgb2JqZWN0J3Mgb2Zmc2V0IGZy
b20gdGhlIHRvcCBvZiB0aGUgcGFnZSBpbiB0aGUgcGFnZSBwcm9ncmVzc2lvbgogICAgIC8vIGRp
cmVjdGlvbiAoc28gYW4geC1vZmZzZXQgaW4gdmVydGljYWwgdGV4dCBhbmQgYSB5LW9mZnNldCBm
b3IgaG9yaXpvbnRhbCB0ZXh0KS4KLSAgICBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsT2Zmc2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fcGFnZUxvZ2ljYWxPZmZz
ZXQgOiBaRVJPX0xBWU9VVF9VTklUOyB9CisgICAgTGF5b3V0VW5pdCBwYWdlTG9naWNhbE9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3BhZ2VMb2dpY2Fs
T2Zmc2V0IDogTGF5b3V0VW5pdCgpOyB9CiAgICAgdm9pZCBzZXRQYWdlTG9naWNhbE9mZnNldChM
YXlvdXRVbml0KTsKIAogICAgIFJvb3RJbmxpbmVCb3gqIGxpbmVHcmlkQm94KCkgY29uc3QgeyBy
ZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fbGluZUdyaWRCb3ggOiAwOyB9CkBAIC0z
NzEsNyArMzcxLDcgQEAgcHVibGljOgogICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0T2Zmc2V0
Rm9yQ29udGVudChSZW5kZXJSZWdpb24qLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9w
T2ZGaXJzdFBhZ2UpIGNvbnN0OwogICAgIExheW91dFVuaXQgYXZhaWxhYmxlTG9naWNhbFdpZHRo
Rm9yQ29udGVudChSZW5kZXJSZWdpb24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9n
aWNhbFRvcE9mRmlyc3RQYWdlKSBjb25zdAogICAgIHsgCi0gICAgICAgIHJldHVybiBtYXgoWkVS
T19MQVlPVVRfVU5JVCwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChyZWdpb24sIG9mZnNl
dEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIC0KKyAgICAgICAgcmV0dXJuIG1heDxMYXlvdXRV
bml0PigwLCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbiwgb2Zmc2V0RnJvbUxv
Z2ljYWxUb3BPZkZpcnN0UGFnZSkgLQogICAgICAgICAgICAgbG9naWNhbExlZnRPZmZzZXRGb3JD
b250ZW50KHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkpOyB9CiAgICAg
TGF5b3V0VW5pdCBzdGFydE9mZnNldEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiByZWdpb24sIExh
eW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgY29uc3QKICAgICB7CkBA
IC0xMTQ0LDIwICsxMTQ0LDIwIEBAIHByb3RlY3RlZDoKIAogICAgICAgICBzdGF0aWMgTGF5b3V0
VW5pdCBwb3NpdGl2ZU1hcmdpbkJlZm9yZURlZmF1bHQoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2Nr
KQogICAgICAgICB7IAotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KGJsb2NrLT5tYXJnaW5C
ZWZvcmUoKSwgWkVST19MQVlPVVRfVU5JVCk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYXg8
TGF5b3V0VW5pdD4oYmxvY2stPm1hcmdpbkJlZm9yZSgpLCAwKTsKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgc3RhdGljIExheW91dFVuaXQgbmVnYXRpdmVNYXJnaW5CZWZvcmVEZWZhdWx0
KGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaykKICAgICAgICAgeyAKLSAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1heCgtYmxvY2stPm1hcmdpbkJlZm9yZSgpLCBaRVJPX0xBWU9VVF9VTklUKTsKKyAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1heDxMYXlvdXRVbml0PigtYmxvY2stPm1hcmdpbkJlZm9y
ZSgpLCAwKTsKICAgICAgICAgfQogICAgICAgICBzdGF0aWMgTGF5b3V0VW5pdCBwb3NpdGl2ZU1h
cmdpbkFmdGVyRGVmYXVsdChjb25zdCBSZW5kZXJCbG9jayogYmxvY2spCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1heChibG9jay0+bWFyZ2luQWZ0ZXIoKSwgWkVST19MQVlP
VVRfVU5JVCk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYXg8TGF5b3V0VW5pdD4oYmxvY2st
Pm1hcmdpbkFmdGVyKCksIDApOwogICAgICAgICB9CiAgICAgICAgIHN0YXRpYyBMYXlvdXRVbml0
IG5lZ2F0aXZlTWFyZ2luQWZ0ZXJEZWZhdWx0KGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaykKICAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KC1ibG9jay0+bWFyZ2luQWZ0ZXIo
KSwgWkVST19MQVlPVVRfVU5JVCk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYXg8TGF5b3V0
VW5pdD4oLWJsb2NrLT5tYXJnaW5BZnRlcigpLCAwKTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgTWFyZ2luVmFsdWVzIG1fbWFyZ2luczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiAxMzM2NjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTI0OCw4ICsxMjQ4LDggQEAgcHVibGljOgogICAgIHZvaWQgdXBk
YXRlUmVwYWludFJhbmdlRnJvbUJveChSb290SW5saW5lQm94KiBib3gsIExheW91dFVuaXQgcGFn
aW5hdGlvbkRlbHRhID0gMCkKICAgICB7CiAgICAgICAgIG1fdXNlc1JlcGFpbnRCb3VuZHMgPSB0
cnVlOwotICAgICAgICBtX3JlcGFpbnRMb2dpY2FsVG9wID0gbWluKG1fcmVwYWludExvZ2ljYWxU
b3AsIGJveC0+bG9naWNhbFRvcFZpc3VhbE92ZXJmbG93KCkgKyBtaW4ocGFnaW5hdGlvbkRlbHRh
LCBaRVJPX0xBWU9VVF9VTklUKSk7Ci0gICAgICAgIG1fcmVwYWludExvZ2ljYWxCb3R0b20gPSBt
YXgobV9yZXBhaW50TG9naWNhbEJvdHRvbSwgYm94LT5sb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZs
b3coKSArIG1heChwYWdpbmF0aW9uRGVsdGEsIFpFUk9fTEFZT1VUX1VOSVQpKTsKKyAgICAgICAg
bV9yZXBhaW50TG9naWNhbFRvcCA9IG1pbihtX3JlcGFpbnRMb2dpY2FsVG9wLCBib3gtPmxvZ2lj
YWxUb3BWaXN1YWxPdmVyZmxvdygpICsgbWluPExheW91dFVuaXQ+KHBhZ2luYXRpb25EZWx0YSwg
MCkpOworICAgICAgICBtX3JlcGFpbnRMb2dpY2FsQm90dG9tID0gbWF4KG1fcmVwYWludExvZ2lj
YWxCb3R0b20sIGJveC0+bG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93KCkgKyBtYXg8TGF5b3V0
VW5pdD4ocGFnaW5hdGlvbkRlbHRhLCAwKSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgZW5kTGlu
ZU1hdGNoZWQoKSBjb25zdCB7IHJldHVybiBtX2VuZExpbmVNYXRjaGVkOyB9CkBAIC0xNzUzLDcg
KzE3NTMsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjaGVja0Zsb2F0c0luQ2xlYW5MaW5lCiAgICAg
ICAgICAgICBMYXlvdXRVbml0IGZsb2F0VG9wID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/
IGZsb2F0c1tmbG9hdEluZGV4XS5yZWN0LnkoKSA6IGZsb2F0c1tmbG9hdEluZGV4XS5yZWN0Lngo
KTsKICAgICAgICAgICAgIExheW91dFVuaXQgZmxvYXRIZWlnaHQgPSBpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gbWF4KGZsb2F0c1tmbG9hdEluZGV4XS5yZWN0LmhlaWdodCgpLCBuZXdTaXpl
LmhlaWdodCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA6IG1heChmbG9hdHNbZmxvYXRJbmRleF0ucmVjdC53aWR0aCgp
LCBuZXdTaXplLndpZHRoKCkpOwotICAgICAgICAgICAgZmxvYXRIZWlnaHQgPSBtaW4oZmxvYXRI
ZWlnaHQsIE1BWF9MQVlPVVRfVU5JVCAtIGZsb2F0VG9wKTsKKyAgICAgICAgICAgIGZsb2F0SGVp
Z2h0ID0gbWluKGZsb2F0SGVpZ2h0LCBMYXlvdXRVbml0OjptYXgoKSAtIGZsb2F0VG9wKTsKICAg
ICAgICAgICAgIGxpbmUtPm1hcmtEaXJ0eSgpOwogICAgICAgICAgICAgbWFya0xpbmVzRGlydHlJ
bkJsb2NrUmFuZ2UobGluZS0+bGluZUJvdHRvbVdpdGhMZWFkaW5nKCksIGZsb2F0VG9wICsgZmxv
YXRIZWlnaHQsIGxpbmUpOwogICAgICAgICAgICAgZmxvYXRzW2Zsb2F0SW5kZXhdLnJlY3Quc2V0
U2l6ZShuZXdTaXplKTsKQEAgLTI5MTgsNyArMjkxOCw3IEBAIElubGluZUl0ZXJhdG9yIFJlbmRl
ckJsb2NrOjpMaW5lQnJlYWtlcjoKIAogdm9pZCBSZW5kZXJCbG9jazo6YWRkT3ZlcmZsb3dGcm9t
SW5saW5lQ2hpbGRyZW4oKQogewotICAgIExheW91dFVuaXQgZW5kUGFkZGluZyA9IGhhc092ZXJm
bG93Q2xpcCgpID8gcGFkZGluZ0VuZCgpIDogWkVST19MQVlPVVRfVU5JVDsKKyAgICBMYXlvdXRV
bml0IGVuZFBhZGRpbmcgPSBoYXNPdmVyZmxvd0NsaXAoKSA/IHBhZGRpbmdFbmQoKSA6IExheW91
dFVuaXQoKTsKICAgICAvLyBGSVhNRTogTmVlZCB0byBmaW5kIGFub3RoZXIgd2F5IHRvIGRvIHRo
aXMsIHNpbmNlIHNjcm9sbGJhcnMgY291bGQgc2hvdyB3aGVuIHdlIGRvbid0IHdhbnQgdGhlbSB0
by4KICAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIWVuZFBhZGRpbmcgJiYgbm9kZSgpICYm
IG5vZGUoKS0+aXNSb290RWRpdGFibGVFbGVtZW50KCkgJiYgc3R5bGUoKS0+aXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpKQogICAgICAgICBlbmRQYWRkaW5nID0gMTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiAxMzM2NjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYzLDcgKzM2
Myw3IEBAIGludCBSZW5kZXJCb3g6OnNjcm9sbFdpZHRoKCkgY29uc3QKICAgICAvLyBGSVhNRTog
TmVlZCB0byB3b3JrIHJpZ2h0IHdpdGggd3JpdGluZyBtb2Rlcy4KICAgICBpZiAoc3R5bGUoKS0+
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAgICAgICByZXR1cm4gc25hcFNpemVUb1BpeGVs
KG1heChjbGllbnRXaWR0aCgpLCBsYXlvdXRPdmVyZmxvd1JlY3QoKS5tYXhYKCkgLSBib3JkZXJM
ZWZ0KCkpLCB4KCkgKyBjbGllbnRMZWZ0KCkpOwotICAgIHJldHVybiBjbGllbnRXaWR0aCgpIC0g
bWluKFpFUk9fTEFZT1VUX1VOSVQsIGxheW91dE92ZXJmbG93UmVjdCgpLngoKSAtIGJvcmRlckxl
ZnQoKSk7CisgICAgcmV0dXJuIGNsaWVudFdpZHRoKCkgLSBtaW48TGF5b3V0VW5pdD4oMCwgbGF5
b3V0T3ZlcmZsb3dSZWN0KCkueCgpIC0gYm9yZGVyTGVmdCgpKTsKIH0KIAogaW50IFJlbmRlckJv
eDo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKQEAgLTExNzksNyArMTE3OSw3IEBAIExheW91dFVuaXQg
UmVuZGVyQm94OjpzaHJpbmtMb2dpY2FsV2lkdGgKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3BQ
b3NpdGlvbiA9IGxvZ2ljYWxUb3AoKTsKICAgICBMYXlvdXRVbml0IGFkanVzdGVkUGFnZU9mZnNl
dEZvckNvbnRhaW5pbmdCbG9jayA9IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UgLSBs
b2dpY2FsVG9wKCk7CiAgICAgaWYgKHJlZ2lvbikgewotICAgICAgICBMYXlvdXRVbml0IG9mZnNl
dEZyb21Mb2dpY2FsVG9wT2ZSZWdpb24gPSByZWdpb24gPyByZWdpb24tPmxvZ2ljYWxUb3BGb3JG
bG93VGhyZWFkQ29udGVudCgpIC0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSA6IFpF
Uk9fTEFZT1VUX1VOSVQ7CisgICAgICAgIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BP
ZlJlZ2lvbiA9IHJlZ2lvbiA/IHJlZ2lvbi0+bG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250ZW50
KCkgLSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlIDogTGF5b3V0VW5pdCgpOwogICAg
ICAgICBsb2dpY2FsVG9wUG9zaXRpb24gPSBtYXgobG9naWNhbFRvcFBvc2l0aW9uLCBsb2dpY2Fs
VG9wUG9zaXRpb24gKyBvZmZzZXRGcm9tTG9naWNhbFRvcE9mUmVnaW9uKTsKICAgICAgICAgY29u
dGFpbmluZ0Jsb2NrUmVnaW9uID0gY2ItPmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMocmVnaW9u
KTsKICAgICB9CkBAIC0xMjQxLDcgKzEyNDEsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29u
dGFpbmluZ0Jsb2NrQXZhCiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wUG9zaXRpb24gPSBsb2dp
Y2FsVG9wKCk7CiAgICAgTGF5b3V0VW5pdCBhZGp1c3RlZFBhZ2VPZmZzZXRGb3JDb250YWluaW5n
QmxvY2sgPSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlIC0gbG9naWNhbFRvcCgpOwog
ICAgIGlmIChyZWdpb24pIHsKLSAgICAgICAgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRv
cE9mUmVnaW9uID0gcmVnaW9uID8gcmVnaW9uLT5sb2dpY2FsVG9wRm9yRmxvd1RocmVhZENvbnRl
bnQoKSAtIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UgOiBaRVJPX0xBWU9VVF9VTklU
OworICAgICAgICBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZSZWdpb24gPSByZWdp
b24gPyByZWdpb24tPmxvZ2ljYWxUb3BGb3JGbG93VGhyZWFkQ29udGVudCgpIC0gb2Zmc2V0RnJv
bUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSA6IExheW91dFVuaXQoKTsKICAgICAgICAgbG9naWNhbFRv
cFBvc2l0aW9uID0gbWF4KGxvZ2ljYWxUb3BQb3NpdGlvbiwgbG9naWNhbFRvcFBvc2l0aW9uICsg
b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZlJlZ2lvbik7CiAgICAgICAgIGNvbnRhaW5pbmdCbG9ja1Jl
Z2lvbiA9IGNiLT5jbGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKHJlZ2lvbik7CiAgICAgfQpAQCAt
MzUzMyw3ICszNTMzLDcgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJveDo6cG9zaXRpb25Gb3JQ
bwogICAgIH0KIAogICAgIC8vIFBhc3Mgb2ZmIHRvIHRoZSBjbG9zZXN0IGNoaWxkLgotICAgIExh
eW91dFVuaXQgbWluRGlzdCA9IE1BWF9MQVlPVVRfVU5JVDsKKyAgICBMYXlvdXRVbml0IG1pbkRp
c3QgPSBMYXlvdXRVbml0OjptYXgoKTsKICAgICBSZW5kZXJCb3gqIGNsb3Nlc3RSZW5kZXJlciA9
IDA7CiAgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRQb2ludCA9IHBvaW50OwogICAgIGlmIChpc1Rh
YmxlUm93KCkpCkBAIC0zNTQ5LDkgKzM1NDksOSBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQm94
Ojpwb3NpdGlvbkZvclBvCiAgICAgICAgIAogICAgICAgICBSZW5kZXJCb3gqIHJlbmRlcmVyID0g
dG9SZW5kZXJCb3gocmVuZGVyT2JqZWN0KTsKIAotICAgICAgICBMYXlvdXRVbml0IHRvcCA9IHJl
bmRlcmVyLT5ib3JkZXJUb3AoKSArIHJlbmRlcmVyLT5wYWRkaW5nVG9wKCkgKyAoaXNUYWJsZVJv
dygpID8gWkVST19MQVlPVVRfVU5JVCA6IHJlbmRlcmVyLT55KCkpOworICAgICAgICBMYXlvdXRV
bml0IHRvcCA9IHJlbmRlcmVyLT5ib3JkZXJUb3AoKSArIHJlbmRlcmVyLT5wYWRkaW5nVG9wKCkg
KyAoaXNUYWJsZVJvdygpID8gTGF5b3V0VW5pdCgpIDogcmVuZGVyZXItPnkoKSk7CiAgICAgICAg
IExheW91dFVuaXQgYm90dG9tID0gdG9wICsgcmVuZGVyZXItPmNvbnRlbnRIZWlnaHQoKTsKLSAg
ICAgICAgTGF5b3V0VW5pdCBsZWZ0ID0gcmVuZGVyZXItPmJvcmRlckxlZnQoKSArIHJlbmRlcmVy
LT5wYWRkaW5nTGVmdCgpICsgKGlzVGFibGVSb3coKSA/IFpFUk9fTEFZT1VUX1VOSVQgOiByZW5k
ZXJlci0+eCgpKTsKKyAgICAgICAgTGF5b3V0VW5pdCBsZWZ0ID0gcmVuZGVyZXItPmJvcmRlckxl
ZnQoKSArIHJlbmRlcmVyLT5wYWRkaW5nTGVmdCgpICsgKGlzVGFibGVSb3coKSA/IExheW91dFVu
aXQoKSA6IHJlbmRlcmVyLT54KCkpOwogICAgICAgICBMYXlvdXRVbml0IHJpZ2h0ID0gbGVmdCAr
IHJlbmRlcmVyLT5jb250ZW50V2lkdGgoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChwb2ludC54
KCkgPD0gcmlnaHQgJiYgcG9pbnQueCgpID49IGxlZnQgJiYgcG9pbnQueSgpIDw9IHRvcCAmJiBw
b2ludC55KCkgPj0gYm90dG9tKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5oCShyZXZpc2lvbiAxMzM2NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAgIExheW91
dFVuaXQgbG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSA/IHdpZHRoKCkgOiBoZWlnaHQoKTsgfQogICAgIExheW91dFVuaXQgbG9n
aWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkgPyBoZWlnaHQoKSA6IHdpZHRoKCk7IH0KIAotICAgIExheW91dFVuaXQgY29uc3RyYWlu
TG9naWNhbFdpZHRoSW5SZWdpb25CeU1pbk1heChMYXlvdXRVbml0LCBMYXlvdXRVbml0LCBSZW5k
ZXJCbG9jayosIFJlbmRlclJlZ2lvbiogPSAwLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2Fs
VG9wT2ZGaXJzdFBhZ2UgPSBaRVJPX0xBWU9VVF9VTklUKSBjb25zdDsKKyAgICBMYXlvdXRVbml0
IGNvbnN0cmFpbkxvZ2ljYWxXaWR0aEluUmVnaW9uQnlNaW5NYXgoTGF5b3V0VW5pdCwgTGF5b3V0
VW5pdCwgUmVuZGVyQmxvY2sqLCBSZW5kZXJSZWdpb24qID0gMCwgTGF5b3V0VW5pdCBvZmZzZXRG
cm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlID0gMCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBjb25z
dHJhaW5Mb2dpY2FsSGVpZ2h0QnlNaW5NYXgoTGF5b3V0VW5pdCkgY29uc3Q7CiAKICAgICBpbnQg
cGl4ZWxTbmFwcGVkTG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBwaXhlbFNuYXBwZWRIZWlnaHQoKSA6IHBpeGVsU25hcHBl
ZFdpZHRoKCk7IH0KQEAgLTM3NSw3ICszNzUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IGNvbXB1dGVMb2dpY2FsSGVpZ2h0KExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgTGF5b3V0VW5p
dCBsb2dpY2FsVG9wLCBMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmKSBjb25zdDsKIAogICAg
IFJlbmRlckJveFJlZ2lvbkluZm8qIHJlbmRlckJveFJlZ2lvbkluZm8oUmVuZGVyUmVnaW9uKiwg
TGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlLCBSZW5kZXJCb3hSZWdp
b25JbmZvRmxhZ3MgPSBDYWNoZVJlbmRlckJveFJlZ2lvbkluZm8pIGNvbnN0OwotICAgIHZvaWQg
Y29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYs
IFJlbmRlclJlZ2lvbiogPSAwLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJz
dFBhZ2UgPSBaRVJPX0xBWU9VVF9VTklUKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVMb2dpY2Fs
V2lkdGhJblJlZ2lvbihMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmLCBSZW5kZXJSZWdpb24q
ID0gMCwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlID0gMCkgY29u
c3Q7CiAKICAgICBib29sIHN0cmV0Y2hlc1RvVmlld3BvcnQoKSBjb25zdAogICAgIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNw
cAkocmV2aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUyLDcgKzU1Miw3IEBAIGludCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6cGl4ZWxTbmFwcGVkT2YKIAogTGF5b3V0VW5pdCBSZW5kZXJC
b3hNb2RlbE9iamVjdDo6Y29tcHV0ZWRDU1NQYWRkaW5nVG9wKCkgY29uc3QKIHsKLSAgICBMYXlv
dXRVbml0IHcgPSBaRVJPX0xBWU9VVF9VTklUOworICAgIExheW91dFVuaXQgdyA9IDA7CiAgICAg
UmVuZGVyVmlldyogcmVuZGVyVmlldyA9IDA7CiAgICAgTGVuZ3RoIHBhZGRpbmcgPSBzdHlsZSgp
LT5wYWRkaW5nVG9wKCk7CiAgICAgaWYgKHBhZGRpbmcuaXNQZXJjZW50KCkpCkBAIC01NjQsNyAr
NTY0LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0ZQogCiBMYXlv
dXRVbml0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlZENTU1BhZGRpbmdCb3R0b20oKSBj
b25zdAogewotICAgIExheW91dFVuaXQgdyA9IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgTGF5b3V0
VW5pdCB3ID0gMDsKICAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gMDsKICAgICBMZW5ndGgg
cGFkZGluZyA9IHN0eWxlKCktPnBhZGRpbmdCb3R0b20oKTsKICAgICBpZiAocGFkZGluZy5pc1Bl
cmNlbnQoKSkKQEAgLTU3Niw3ICs1NzYsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJveE1vZGVsT2Jq
ZWN0Ojpjb21wdXRlCiAKIExheW91dFVuaXQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVk
Q1NTUGFkZGluZ0xlZnQoKSBjb25zdAogewotICAgIExheW91dFVuaXQgdyA9IFpFUk9fTEFZT1VU
X1VOSVQ7CisgICAgTGF5b3V0VW5pdCB3ID0gMDsKICAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3
ID0gMDsKICAgICBMZW5ndGggcGFkZGluZyA9IHN0eWxlKCktPnBhZGRpbmdMZWZ0KCk7CiAgICAg
aWYgKHBhZGRpbmcuaXNQZXJjZW50KCkpCkBAIC01ODgsNyArNTg4LDcgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0ZQogCiBMYXlvdXRVbml0IFJlbmRlckJveE1vZGVs
T2JqZWN0Ojpjb21wdXRlZENTU1BhZGRpbmdSaWdodCgpIGNvbnN0CiB7Ci0gICAgTGF5b3V0VW5p
dCB3ID0gWkVST19MQVlPVVRfVU5JVDsKKyAgICBMYXlvdXRVbml0IHcgPSAwOwogICAgIFJlbmRl
clZpZXcqIHJlbmRlclZpZXcgPSAwOwogICAgIExlbmd0aCBwYWRkaW5nID0gc3R5bGUoKS0+cGFk
ZGluZ1JpZ2h0KCk7CiAgICAgaWYgKHBhZGRpbmcuaXNQZXJjZW50KCkpCkBAIC02MDAsNyArNjAw
LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0ZQogCiBMYXlvdXRV
bml0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlZENTU1BhZGRpbmdCZWZvcmUoKSBjb25z
dAogewotICAgIExheW91dFVuaXQgdyA9IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgTGF5b3V0VW5p
dCB3ID0gMDsKICAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gMDsKICAgICBMZW5ndGggcGFk
ZGluZyA9IHN0eWxlKCktPnBhZGRpbmdCZWZvcmUoKTsKICAgICBpZiAocGFkZGluZy5pc1BlcmNl
bnQoKSkKQEAgLTYxMiw3ICs2MTIsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJveE1vZGVsT2JqZWN0
Ojpjb21wdXRlCiAKIExheW91dFVuaXQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVkQ1NT
UGFkZGluZ0FmdGVyKCkgY29uc3QKIHsKLSAgICBMYXlvdXRVbml0IHcgPSBaRVJPX0xBWU9VVF9V
TklUOworICAgIExheW91dFVuaXQgdyA9IDA7CiAgICAgUmVuZGVyVmlldyogcmVuZGVyVmlldyA9
IDA7CiAgICAgTGVuZ3RoIHBhZGRpbmcgPSBzdHlsZSgpLT5wYWRkaW5nQWZ0ZXIoKTsKICAgICBp
ZiAocGFkZGluZy5pc1BlcmNlbnQoKSkKQEAgLTYyNCw3ICs2MjQsNyBAQCBMYXlvdXRVbml0IFJl
bmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlCiAKIExheW91dFVuaXQgUmVuZGVyQm94TW9kZWxP
YmplY3Q6OmNvbXB1dGVkQ1NTUGFkZGluZ1N0YXJ0KCkgY29uc3QKIHsKLSAgICBMYXlvdXRVbml0
IHcgPSBaRVJPX0xBWU9VVF9VTklUOworICAgIExheW91dFVuaXQgdyA9IDA7CiAgICAgUmVuZGVy
VmlldyogcmVuZGVyVmlldyA9IDA7CiAgICAgTGVuZ3RoIHBhZGRpbmcgPSBzdHlsZSgpLT5wYWRk
aW5nU3RhcnQoKTsKICAgICBpZiAocGFkZGluZy5pc1BlcmNlbnQoKSkKQEAgLTYzNiw3ICs2MzYs
NyBAQCBMYXlvdXRVbml0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlCiAKIExheW91dFVu
aXQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVkQ1NTUGFkZGluZ0VuZCgpIGNvbnN0CiB7
Ci0gICAgTGF5b3V0VW5pdCB3ID0gWkVST19MQVlPVVRfVU5JVDsKKyAgICBMYXlvdXRVbml0IHcg
PSAwOwogICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSAwOwogICAgIExlbmd0aCBwYWRkaW5n
ID0gc3R5bGUoKS0+cGFkZGluZ0VuZCgpOwogICAgIGlmIChwYWRkaW5nLmlzUGVyY2VudCgpKQpA
QCAtODAwLDggKzgwMCw4IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExh
eWUKICAgICAKICAgICBpbnQgYkxlZnQgPSBpbmNsdWRlTGVmdEVkZ2UgPyBib3JkZXJMZWZ0KCkg
OiAwOwogICAgIGludCBiUmlnaHQgPSBpbmNsdWRlUmlnaHRFZGdlID8gYm9yZGVyUmlnaHQoKSA6
IDA7Ci0gICAgTGF5b3V0VW5pdCBwTGVmdCA9IGluY2x1ZGVMZWZ0RWRnZSA/IHBhZGRpbmdMZWZ0
KCkgOiBaRVJPX0xBWU9VVF9VTklUOwotICAgIExheW91dFVuaXQgcFJpZ2h0ID0gaW5jbHVkZVJp
Z2h0RWRnZSA/IHBhZGRpbmdSaWdodCgpIDogWkVST19MQVlPVVRfVU5JVDsKKyAgICBMYXlvdXRV
bml0IHBMZWZ0ID0gaW5jbHVkZUxlZnRFZGdlID8gcGFkZGluZ0xlZnQoKSA6IExheW91dFVuaXQo
KTsKKyAgICBMYXlvdXRVbml0IHBSaWdodCA9IGluY2x1ZGVSaWdodEVkZ2UgPyBwYWRkaW5nUmln
aHQoKSA6IExheW91dFVuaXQoKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgY2xp
cFdpdGhTY3JvbGxpbmdTdGF0ZVNhdmVyKCpjb250ZXh0LCBjbGlwcGVkV2l0aExvY2FsU2Nyb2xs
aW5nKTsKICAgICBMYXlvdXRSZWN0IHNjcm9sbGVkUGFpbnRSZWN0ID0gcmVjdDsKQEAgLTgyNSwx
MCArODI1LDEwIEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWUKICAg
ICAgICAgLy8gQ2xpcCB0byB0aGUgcGFkZGluZyBvciBjb250ZW50IGJveGVzIGFzIG5lY2Vzc2Fy
eS4KICAgICAgICAgaWYgKCFjbGlwVG9Cb3JkZXJSYWRpdXMpIHsKICAgICAgICAgICAgIGJvb2wg
aW5jbHVkZVBhZGRpbmcgPSBiZ0xheWVyLT5jbGlwKCkgPT0gQ29udGVudEZpbGxCb3g7Ci0gICAg
ICAgICAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0gTGF5b3V0UmVjdChzY3JvbGxlZFBhaW50UmVj
dC54KCkgKyBiTGVmdCArIChpbmNsdWRlUGFkZGluZyA/IHBMZWZ0IDogWkVST19MQVlPVVRfVU5J
VCksCi0gICAgICAgICAgICAgICAgc2Nyb2xsZWRQYWludFJlY3QueSgpICsgYm9yZGVyVG9wKCkg
KyAoaW5jbHVkZVBhZGRpbmcgPyBwYWRkaW5nVG9wKCkgOiBaRVJPX0xBWU9VVF9VTklUKSwKLSAg
ICAgICAgICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC53aWR0aCgpIC0gYkxlZnQgLSBiUmlnaHQg
LSAoaW5jbHVkZVBhZGRpbmcgPyBwTGVmdCArIHBSaWdodCA6IFpFUk9fTEFZT1VUX1VOSVQpLAot
ICAgICAgICAgICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LmhlaWdodCgpIC0gYm9yZGVyVG9wKCkg
LSBib3JkZXJCb3R0b20oKSAtIChpbmNsdWRlUGFkZGluZyA/IHBhZGRpbmdUb3AoKSArIHBhZGRp
bmdCb3R0b20oKSA6IFpFUk9fTEFZT1VUX1VOSVQpKTsKKyAgICAgICAgICAgIExheW91dFJlY3Qg
Y2xpcFJlY3QgPSBMYXlvdXRSZWN0KHNjcm9sbGVkUGFpbnRSZWN0LngoKSArIGJMZWZ0ICsgKGlu
Y2x1ZGVQYWRkaW5nID8gcExlZnQgOiBMYXlvdXRVbml0KCkpLAorICAgICAgICAgICAgICAgIHNj
cm9sbGVkUGFpbnRSZWN0LnkoKSArIGJvcmRlclRvcCgpICsgKGluY2x1ZGVQYWRkaW5nID8gcGFk
ZGluZ1RvcCgpIDogTGF5b3V0VW5pdCgpKSwKKyAgICAgICAgICAgICAgICBzY3JvbGxlZFBhaW50
UmVjdC53aWR0aCgpIC0gYkxlZnQgLSBiUmlnaHQgLSAoaW5jbHVkZVBhZGRpbmcgPyBwTGVmdCAr
IHBSaWdodCA6IExheW91dFVuaXQoKSksCisgICAgICAgICAgICAgICAgc2Nyb2xsZWRQYWludFJl
Y3QuaGVpZ2h0KCkgLSBib3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpIC0gKGluY2x1ZGVQYWRk
aW5nID8gcGFkZGluZ1RvcCgpICsgcGFkZGluZ0JvdHRvbSgpIDogTGF5b3V0VW5pdCgpKSk7CiAg
ICAgICAgICAgICBiYWNrZ3JvdW5kQ2xpcFN0YXRlU2F2ZXIuc2F2ZSgpOwogICAgICAgICAgICAg
Y29udGV4dC0+Y2xpcChjbGlwUmVjdCk7CiAgICAgICAgIH0KQEAgLTI3MjksNyArMjcyOSw3IEBA
IExheW91dFJlY3QgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmxvY2FsQ2EKICAgICAgICAgICAgIHgg
LT0gdGV4dEluZGVudE9mZnNldDsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIHggPSBtaW4o
eCwgbWF4KG1heFggLSBjYXJldFdpZHRoLCBaRVJPX0xBWU9VVF9VTklUKSk7CisgICAgeCA9IG1p
bih4LCBtYXg8TGF5b3V0VW5pdD4obWF4WCAtIGNhcmV0V2lkdGgsIDApKTsKIAogICAgIExheW91
dFVuaXQgeSA9IHBhZGRpbmdUb3AoKSArIGJvcmRlclRvcCgpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAkocmV2aXNpb24gMTMz
NjY0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICNpZm5kZWYgUmVuZGVyQm94TW9kZWxP
YmplY3RfaAogI2RlZmluZSBSZW5kZXJCb3hNb2RlbE9iamVjdF9oCiAKLSNpbmNsdWRlICJMYXlv
dXRUeXBlc0lubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oIgogI2luY2x1ZGUgIlNoYWRvd0RhdGEuaCIKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJv
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJl
Y2F0ZWRGbGV4aWJsZUJveC5jcHAJKHJldmlzaW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MzIsNyArNTMyLDcgQEAgdm9pZCBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6Omxh
eW91dAogICAgICAgICAgICAgICAgICAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBpdGVyYXRv
ci5maXJzdCgpOyBjaGlsZDsgY2hpbGQgPSBpdGVyYXRvci5uZXh0KCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIExheW91dFVuaXQgYWxsb3dlZEZsZXggPSBhbGxvd2VkQ2hpbGRGbGV4KGNo
aWxkLCBleHBhbmRpbmcsIGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG93ZWRG
bGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBwcm9qZWN0ZWRG
bGV4ID0gKGFsbG93ZWRGbGV4ID09IE1BWF9MQVlPVVRfVU5JVCkgPyBhbGxvd2VkRmxleCA6IExh
eW91dFVuaXQoYWxsb3dlZEZsZXggKiAodG90YWxGbGV4IC8gY2hpbGQtPnN0eWxlKCktPmJveEZs
ZXgoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgcHJvamVjdGVk
RmxleCA9IChhbGxvd2VkRmxleCA9PSBMYXlvdXRVbml0OjptYXgoKSkgPyBhbGxvd2VkRmxleCA6
IExheW91dFVuaXQoYWxsb3dlZEZsZXggKiAodG90YWxGbGV4IC8gY2hpbGQtPnN0eWxlKCktPmJv
eEZsZXgoKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlQXZhaWxhYmxlVGhp
c1Bhc3MgPSBleHBhbmRpbmcgPyBtaW4oc3BhY2VBdmFpbGFibGVUaGlzUGFzcywgcHJvamVjdGVk
RmxleCkgOiBtYXgoc3BhY2VBdmFpbGFibGVUaGlzUGFzcywgcHJvamVjdGVkRmxleCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTc4Niw3ICs3
ODYsNyBAQCB2b2lkIFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveDo6bGF5b3V0CiAgICAgICAg
ICAgICAgICAgICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IGl0ZXJhdG9yLmZpcnN0KCk7IGNo
aWxkOyBjaGlsZCA9IGl0ZXJhdG9yLm5leHQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
TGF5b3V0VW5pdCBhbGxvd2VkRmxleCA9IGFsbG93ZWRDaGlsZEZsZXgoY2hpbGQsIGV4cGFuZGlu
ZywgaSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxsb3dlZEZsZXgpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHByb2plY3RlZEZsZXggPSAoYWxsb3dl
ZEZsZXggPT0gTUFYX0xBWU9VVF9VTklUKSA/IGFsbG93ZWRGbGV4IDogc3RhdGljX2Nhc3Q8TGF5
b3V0VW5pdD4oYWxsb3dlZEZsZXggKiAodG90YWxGbGV4IC8gY2hpbGQtPnN0eWxlKCktPmJveEZs
ZXgoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgcHJvamVjdGVk
RmxleCA9IChhbGxvd2VkRmxleCA9PSBMYXlvdXRVbml0OjptYXgoKSkgPyBhbGxvd2VkRmxleCA6
IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KGFsbG93ZWRGbGV4ICogKHRvdGFsRmxleCAvIGNoaWxk
LT5zdHlsZSgpLT5ib3hGbGV4KCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFj
ZUF2YWlsYWJsZVRoaXNQYXNzID0gZXhwYW5kaW5nID8gbWluKHNwYWNlQXZhaWxhYmxlVGhpc1Bh
c3MsIHByb2plY3RlZEZsZXgpIDogbWF4KHNwYWNlQXZhaWxhYmxlVGhpc1Bhc3MsIHByb2plY3Rl
ZEZsZXgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9
CkBAIC0xMDMyLDcgKzEwMzIsNyBAQCBMYXlvdXRVbml0IFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJs
ZUJveDo6CiAgICAgaWYgKGV4cGFuZGluZykgewogICAgICAgICBpZiAoaXNIb3Jpem9udGFsKCkp
IHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBGb3Igbm93IGp1c3QgaGFuZGxlIGZpeGVkIHZhbHVl
cy4KLSAgICAgICAgICAgIExheW91dFVuaXQgbWF4V2lkdGggPSBNQVhfTEFZT1VUX1VOSVQ7Cisg
ICAgICAgICAgICBMYXlvdXRVbml0IG1heFdpZHRoID0gTGF5b3V0VW5pdDo6bWF4KCk7CiAgICAg
ICAgICAgICBMYXlvdXRVbml0IHdpZHRoID0gY29udGVudFdpZHRoRm9yQ2hpbGQoY2hpbGQpOwog
ICAgICAgICAgICAgaWYgKCFjaGlsZC0+c3R5bGUoKS0+bWF4V2lkdGgoKS5pc1VuZGVmaW5lZCgp
ICYmIGNoaWxkLT5zdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSkKICAgICAgICAgICAgICAg
ICBtYXhXaWR0aCA9IGNoaWxkLT5zdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCk7CkBAIC0xMDQw
LDE2ICsxMDQwLDE2IEBAIExheW91dFVuaXQgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjoK
ICAgICAgICAgICAgICAgICBtYXhXaWR0aCA9IGNoaWxkLT5tYXhQcmVmZXJyZWRMb2dpY2FsV2lk
dGgoKTsKICAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkLT5zdHlsZSgpLT5tYXhXaWR0aCgpLnR5
cGUoKSA9PSBNaW5JbnRyaW5zaWMpCiAgICAgICAgICAgICAgICAgbWF4V2lkdGggPSBjaGlsZC0+
bWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCk7Ci0gICAgICAgICAgICBpZiAobWF4V2lkdGggPT0g
TUFYX0xBWU9VVF9VTklUKQorICAgICAgICAgICAgaWYgKG1heFdpZHRoID09IExheW91dFVuaXQ6
Om1heCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBtYXhXaWR0aDsKICAgICAgICAgICAgIHJl
dHVybiBtYXg8TGF5b3V0VW5pdD4oMCwgbWF4V2lkdGggLSB3aWR0aCk7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogRm9yIG5vdyBqdXN0IGhhbmRsZSBmaXhlZCB2YWx1
ZXMuCi0gICAgICAgICAgICBMYXlvdXRVbml0IG1heEhlaWdodCA9IE1BWF9MQVlPVVRfVU5JVDsK
KyAgICAgICAgICAgIExheW91dFVuaXQgbWF4SGVpZ2h0ID0gTGF5b3V0VW5pdDo6bWF4KCk7CiAg
ICAgICAgICAgICBMYXlvdXRVbml0IGhlaWdodCA9IGNvbnRlbnRIZWlnaHRGb3JDaGlsZChjaGls
ZCk7CiAgICAgICAgICAgICBpZiAoIWNoaWxkLT5zdHlsZSgpLT5tYXhIZWlnaHQoKS5pc1VuZGVm
aW5lZCgpICYmIGNoaWxkLT5zdHlsZSgpLT5tYXhIZWlnaHQoKS5pc0ZpeGVkKCkpCiAgICAgICAg
ICAgICAgICAgbWF4SGVpZ2h0ID0gY2hpbGQtPnN0eWxlKCktPm1heEhlaWdodCgpLnZhbHVlKCk7
Ci0gICAgICAgICAgICBpZiAobWF4SGVpZ2h0ID09IE1BWF9MQVlPVVRfVU5JVCkKKyAgICAgICAg
ICAgIGlmIChtYXhIZWlnaHQgPT0gTGF5b3V0VW5pdDo6bWF4KCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIG1heEhlaWdodDsKICAgICAgICAgICAgIHJldHVybiBtYXg8TGF5b3V0VW5pdD4oMCwg
bWF4SGVpZ2h0IC0gaGVpZ2h0KTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwCShyZXZpc2lvbiAxMzM2NjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDksMTEgKzE0OSwxMSBAQCB2b2lkIFJlbmRlckZpZWxkc2V0OjpwYWludEJveERlY29yYXRpb25z
CiAgICAgLy8gY2FzZXMgdGhlIGxlZ2VuZCBpcyBlbWJlZGRlZCBpbiB0aGUgcmlnaHQgYW5kIGJv
dHRvbSBib3JkZXJzIHJlc3BlY3RpdmVseS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDcyMzYKICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSkgewotICAgICAgICBMYXlvdXRVbml0IHlPZmYgPSAobGVnZW5kLT55KCkgPiAw
KSA/IFpFUk9fTEFZT1VUX1VOSVQgOiAobGVnZW5kLT5oZWlnaHQoKSAtIGJvcmRlclRvcCgpKSAv
IDI7CisgICAgICAgIExheW91dFVuaXQgeU9mZiA9IChsZWdlbmQtPnkoKSA+IDApID8gTGF5b3V0
VW5pdCgpIDogKGxlZ2VuZC0+aGVpZ2h0KCkgLSBib3JkZXJUb3AoKSkgLyAyOwogICAgICAgICBw
YWludFJlY3Quc2V0SGVpZ2h0KHBhaW50UmVjdC5oZWlnaHQoKSAtIHlPZmYpOwogICAgICAgICBw
YWludFJlY3Quc2V0WShwYWludFJlY3QueSgpICsgeU9mZik7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgTGF5b3V0VW5pdCB4T2ZmID0gKGxlZ2VuZC0+eCgpID4gMCkgPyBaRVJPX0xBWU9VVF9VTklU
IDogKGxlZ2VuZC0+d2lkdGgoKSAtIGJvcmRlckxlZnQoKSkgLyAyOworICAgICAgICBMYXlvdXRV
bml0IHhPZmYgPSAobGVnZW5kLT54KCkgPiAwKSA/IExheW91dFVuaXQoKSA6IChsZWdlbmQtPndp
ZHRoKCkgLSBib3JkZXJMZWZ0KCkpIC8gMjsKICAgICAgICAgcGFpbnRSZWN0LnNldFdpZHRoKHBh
aW50UmVjdC53aWR0aCgpIC0geE9mZik7CiAgICAgICAgIHBhaW50UmVjdC5zZXRYKHBhaW50UmVj
dC54KCkgKyB4T2ZmKTsKICAgICB9CkBAIC0yMDAsMTEgKzIwMCwxMSBAQCB2b2lkIFJlbmRlckZp
ZWxkc2V0OjpwYWludE1hc2soUGFpbnRJbmZvCiAgICAgLy8gY2FzZXMgdGhlIGxlZ2VuZCBpcyBl
bWJlZGRlZCBpbiB0aGUgcmlnaHQgYW5kIGJvdHRvbSBib3JkZXJzIHJlc3BlY3RpdmVseS4KICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDcyMzYKICAgICBp
ZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewotICAgICAgICBMYXlvdXRV
bml0IHlPZmYgPSAobGVnZW5kLT55KCkgPiAwKSA/IFpFUk9fTEFZT1VUX1VOSVQgOiAobGVnZW5k
LT5oZWlnaHQoKSAtIGJvcmRlclRvcCgpKSAvIDI7CisgICAgICAgIExheW91dFVuaXQgeU9mZiA9
IChsZWdlbmQtPnkoKSA+IDApID8gTGF5b3V0VW5pdCgpIDogKGxlZ2VuZC0+aGVpZ2h0KCkgLSBi
b3JkZXJUb3AoKSkgLyAyOwogICAgICAgICBwYWludFJlY3QuZXhwYW5kKDAsIC15T2ZmKTsKICAg
ICAgICAgcGFpbnRSZWN0Lm1vdmUoMCwgeU9mZik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgTGF5
b3V0VW5pdCB4T2ZmID0gKGxlZ2VuZC0+eCgpID4gMCkgPyBaRVJPX0xBWU9VVF9VTklUIDogKGxl
Z2VuZC0+d2lkdGgoKSAtIGJvcmRlckxlZnQoKSkgLyAyOworICAgICAgICBMYXlvdXRVbml0IHhP
ZmYgPSAobGVnZW5kLT54KCkgPiAwKSA/IExheW91dFVuaXQoKSA6IChsZWdlbmQtPndpZHRoKCkg
LSBib3JkZXJMZWZ0KCkpIC8gMjsKICAgICAgICAgcGFpbnRSZWN0LmV4cGFuZCgteE9mZiwgMCk7
CiAgICAgICAgIHBhaW50UmVjdC5tb3ZlKHhPZmYsIDApOwogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAkocmV2aXNpb24gMTMz
NjY0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzcxLDcgKzM3MSw3IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6
OnBhaW50Q2hpbGRyZW4oUGEKIAogdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6cmVwb3NpdGlvbkxv
Z2ljYWxIZWlnaHREZXBlbmRlbnRGbGV4SXRlbXMoT3JkZXJJdGVyYXRvciYgaXRlcmF0b3IsIFdU
Rjo6VmVjdG9yPExpbmVDb250ZXh0PiYgbGluZUNvbnRleHRzLCBMYXlvdXRVbml0JiBvbGRDbGll
bnRBZnRlckVkZ2UpCiB7Ci0gICAgTGF5b3V0VW5pdCBjcm9zc0F4aXNTdGFydEVkZ2UgPSBsaW5l
Q29udGV4dHMuaXNFbXB0eSgpID8gWkVST19MQVlPVVRfVU5JVCA6IGxpbmVDb250ZXh0c1swXS5j
cm9zc0F4aXNPZmZzZXQ7CisgICAgTGF5b3V0VW5pdCBjcm9zc0F4aXNTdGFydEVkZ2UgPSBsaW5l
Q29udGV4dHMuaXNFbXB0eSgpID8gTGF5b3V0VW5pdCgpIDogbGluZUNvbnRleHRzWzBdLmNyb3Nz
QXhpc09mZnNldDsKICAgICBhbGlnbkZsZXhMaW5lcyhpdGVyYXRvciwgbGluZUNvbnRleHRzKTsK
IAogICAgIC8vIElmIHdlIGhhdmUgYSBzaW5nbGUgbGluZSBmbGV4Ym94LCB0aGUgbGluZSBoZWln
aHQgaXMgYWxsIHRoZSBhdmFpbGFibGUgc3BhY2UuCkBAIC04OTQsNyArODk0LDcgQEAgYm9vbCBS
ZW5kZXJGbGV4aWJsZUJveDo6Y29tcHV0ZU5leHRGbGV4TAogICAgIGlmICghaXRlcmF0b3IuY3Vy
cmVudENoaWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIExheW91dFVuaXQgbGlu
ZUJyZWFrTGVuZ3RoID0gbWFpbkF4aXNDb250ZW50RXh0ZW50KE1BWF9MQVlPVVRfVU5JVCk7Cisg
ICAgTGF5b3V0VW5pdCBsaW5lQnJlYWtMZW5ndGggPSBtYWluQXhpc0NvbnRlbnRFeHRlbnQoTGF5
b3V0VW5pdDo6bWF4KCkpOwogCiAgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gaXRlcmF0b3Iu
Y3VycmVudENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGl0ZXJhdG9yLm5leHQoKSkgewogICAgICAg
ICBpZiAoY2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKSB7CkBAIC0xMjM0LDcgKzEyMzQs
NyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjphbGlnbkNoaWxkcmVuKE9yCiAKICAgICBSZW5k
ZXJCb3gqIGNoaWxkID0gaXRlcmF0b3IuZmlyc3QoKTsKICAgICBmb3IgKHNpemVfdCBsaW5lTnVt
YmVyID0gMDsgbGluZU51bWJlciA8IGxpbmVDb250ZXh0cy5zaXplKCk7ICsrbGluZU51bWJlcikg
ewotICAgICAgICBMYXlvdXRVbml0IG1pbk1hcmdpbkFmdGVyQmFzZWxpbmUgPSBNQVhfTEFZT1VU
X1VOSVQ7CisgICAgICAgIExheW91dFVuaXQgbWluTWFyZ2luQWZ0ZXJCYXNlbGluZSA9IExheW91
dFVuaXQ6Om1heCgpOwogICAgICAgICBMYXlvdXRVbml0IGxpbmVDcm9zc0F4aXNFeHRlbnQgPSBs
aW5lQ29udGV4dHNbbGluZU51bWJlcl0uY3Jvc3NBeGlzRXh0ZW50OwogICAgICAgICBMYXlvdXRV
bml0IG1heEFzY2VudCA9IGxpbmVDb250ZXh0c1tsaW5lTnVtYmVyXS5tYXhBc2NlbnQ7CiAKQEAg
LTEzMTksNyArMTMxOSw3IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmFwcGx5U3RyZXRjaEFs
aWcKICAgICB9IGVsc2UgaWYgKGlzQ29sdW1uRmxvdygpICYmIGNoaWxkLT5zdHlsZSgpLT5sb2dp
Y2FsV2lkdGgoKS5pc0F1dG8oKSkgewogICAgICAgICAvLyBGSVhNRTogSWYgdGhlIGNoaWxkIGRv
ZXNuJ3QgaGF2ZSBvcnRob2dvbmFsIGZsb3csIHRoZW4gaXQgYWxyZWFkeSBoYXMgYW4gb3ZlcnJp
ZGUgd2lkdGggc2V0LCBzbyB1c2UgaXQuCiAgICAgICAgIGlmIChoYXNPcnRob2dvbmFsRmxvdyhj
aGlsZCkpIHsKLSAgICAgICAgICAgIExheW91dFVuaXQgY2hpbGRXaWR0aCA9IHN0ZDo6bWF4KFpF
Uk9fTEFZT1VUX1VOSVQsIGxpbmVDcm9zc0F4aXNFeHRlbnQgLSBjcm9zc0F4aXNNYXJnaW5FeHRl
bnRGb3JDaGlsZChjaGlsZCkpOworICAgICAgICAgICAgTGF5b3V0VW5pdCBjaGlsZFdpZHRoID0g
c3RkOjptYXg8TGF5b3V0VW5pdD4oMCwgbGluZUNyb3NzQXhpc0V4dGVudCAtIGNyb3NzQXhpc01h
cmdpbkV4dGVudEZvckNoaWxkKGNoaWxkKSk7CiAgICAgICAgICAgICBjaGlsZFdpZHRoID0gY2hp
bGQtPmNvbnN0cmFpbkxvZ2ljYWxXaWR0aEluUmVnaW9uQnlNaW5NYXgoY2hpbGRXaWR0aCwgY2hp
bGRXaWR0aCwgdGhpcyk7CiAKICAgICAgICAgICAgIGlmIChjaGlsZFdpZHRoICE9IGNoaWxkLT5s
b2dpY2FsV2lkdGgoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZs
b3dUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGbG93VGhyZWFkLmNwcAkocmV2aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsNyArMjAw
LDcgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjp1cGRhdGVMb2dpY2FsV2lkdAogICAgICAgICBS
ZW5kZXJSZWdpb24qIHJlZ2lvbiA9ICppdGVyOwogICAgICAgICBMYXlvdXRVbml0IHJlZ2lvbkxv
Z2ljYWxXaWR0aCA9IHJlZ2lvbi0+cGFnZUxvZ2ljYWxXaWR0aCgpOwogICAgICAgICBpZiAocmVn
aW9uTG9naWNhbFdpZHRoICE9IGxvZ2ljYWxXaWR0aCkgewotICAgICAgICAgICAgTGF5b3V0VW5p
dCBsb2dpY2FsTGVmdCA9IHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IFpFUk9fTEFZT1VU
X1VOSVQgOiBsb2dpY2FsV2lkdGggLSByZWdpb25Mb2dpY2FsV2lkdGg7CisgICAgICAgICAgICBM
YXlvdXRVbml0IGxvZ2ljYWxMZWZ0ID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gTGF5
b3V0VW5pdCgpIDogbG9naWNhbFdpZHRoIC0gcmVnaW9uTG9naWNhbFdpZHRoOwogICAgICAgICAg
ICAgcmVnaW9uLT5zZXRSZW5kZXJCb3hSZWdpb25JbmZvKHRoaXMsIGxvZ2ljYWxMZWZ0LCByZWdp
b25Mb2dpY2FsV2lkdGgsIGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KQEAgLTMyNiw3ICszMjYs
NyBAQCBSZW5kZXJSZWdpb24qIFJlbmRlckZsb3dUaHJlYWQ6OnJlZ2lvbkF0CiAgICAgLy8gdGhl
IGxhc3QgdmFsaWQgcmVnaW9uLiBJdCBpcyBzaW1pbGFyIHRvIGF1dG8gZXh0ZW5kaW5nIHRoZSBz
aXplIG9mIHRoZSBsYXN0IHJlZ2lvbi4gCiAgICAgUmVuZGVyUmVnaW9uKiBsYXN0VmFsaWRSZWdp
b24gPSAwOwogCi0gICAgTGF5b3V0VW5pdCBhY2N1bXVsYXRlZExvZ2ljYWxIZWlnaHQgPSBaRVJP
X0xBWU9VVF9VTklUOworICAgIExheW91dFVuaXQgYWNjdW11bGF0ZWRMb2dpY2FsSGVpZ2h0ID0g
MDsKICAgICAKICAgICAvLyBGSVhNRTogVGhlIHJlZ2lvbnMgYXJlIGFsd2F5cyBpbiBvcmRlciwg
b3B0aW1pemUgdGhpcyBzZWFyY2guCiAgICAgZm9yIChSZW5kZXJSZWdpb25MaXN0Ojpjb25zdF9p
dGVyYXRvciBpdGVyID0gbV9yZWdpb25MaXN0LmJlZ2luKCk7IGl0ZXIgIT0gbV9yZWdpb25MaXN0
LmVuZCgpOyArK2l0ZXIpIHsKQEAgLTM2Miw3ICszNjIsNyBAQCBSZW5kZXJSZWdpb24qIFJlbmRl
ckZsb3dUaHJlYWQ6OnJlZ2lvbkF0CiBMYXlvdXRVbml0IFJlbmRlckZsb3dUaHJlYWQ6OnBhZ2VM
b2dpY2FsVG9wRm9yT2Zmc2V0KExheW91dFVuaXQgb2Zmc2V0KSBjb25zdAogewogICAgIFJlbmRl
clJlZ2lvbiogcmVnaW9uID0gcmVnaW9uQXRCbG9ja09mZnNldChvZmZzZXQpOwotICAgIHJldHVy
biByZWdpb24gPyByZWdpb24tPnBhZ2VMb2dpY2FsVG9wRm9yT2Zmc2V0KG9mZnNldCkgOiBaRVJP
X0xBWU9VVF9VTklUOworICAgIHJldHVybiByZWdpb24gPyByZWdpb24tPnBhZ2VMb2dpY2FsVG9w
Rm9yT2Zmc2V0KG9mZnNldCkgOiBMYXlvdXRVbml0KCk7CiB9CiAKIExheW91dFVuaXQgUmVuZGVy
Rmxvd1RocmVhZDo6cGFnZUxvZ2ljYWxXaWR0aEZvck9mZnNldChMYXlvdXRVbml0IG9mZnNldCkg
Y29uc3QKQEAgLTM3NSw5ICszNzUsOSBAQCBMYXlvdXRVbml0IFJlbmRlckZsb3dUaHJlYWQ6OnBh
Z2VMb2dpY2FsCiB7CiAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSByZWdpb25BdEJsb2NrT2Zm
c2V0KG9mZnNldCk7CiAgICAgaWYgKCFyZWdpb24pCi0gICAgICAgIHJldHVybiBaRVJPX0xBWU9V
VF9VTklUOworICAgICAgICByZXR1cm4gMDsKICAgICBpZiAocmVnaW9uLT5uZWVkc092ZXJyaWRl
TG9naWNhbENvbnRlbnRIZWlnaHRDb21wdXRhdGlvbigpKQotICAgICAgICByZXR1cm4gTUFYX0xB
WU9VVF9VTklUIC8gMjsKKyAgICAgICAgcmV0dXJuIExheW91dFVuaXQ6Om1heCgpIC8gMjsKICAg
ICByZXR1cm4gcmVnaW9uLT5wYWdlTG9naWNhbEhlaWdodCgpOwogfQogCkBAIC0zODUsOSArMzg1
LDkgQEAgTGF5b3V0VW5pdCBSZW5kZXJGbG93VGhyZWFkOjpwYWdlUmVtYWluaQogewogICAgIFJl
bmRlclJlZ2lvbiogcmVnaW9uID0gcmVnaW9uQXRCbG9ja09mZnNldChvZmZzZXQpOwogICAgIGlm
ICghcmVnaW9uKQotICAgICAgICByZXR1cm4gWkVST19MQVlPVVRfVU5JVDsKKyAgICAgICAgcmV0
dXJuIDA7CiAgICAgaWYgKHJlZ2lvbi0+bmVlZHNPdmVycmlkZUxvZ2ljYWxDb250ZW50SGVpZ2h0
Q29tcHV0YXRpb24oKSkKLSAgICAgICAgcmV0dXJuIE1BWF9MQVlPVVRfVU5JVCAvIDI7CisgICAg
ICAgIHJldHVybiBMYXlvdXRVbml0OjptYXgoKSAvIDI7CiAKICAgICBMYXlvdXRVbml0IHBhZ2VM
b2dpY2FsVG9wID0gcmVnaW9uLT5wYWdlTG9naWNhbFRvcEZvck9mZnNldChvZmZzZXQpOwogICAg
IExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSByZWdpb24tPnBhZ2VMb2dpY2FsSGVpZ2h0
KCk7CkBAIC00ODYsNyArNDg2LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJGbG93VGhyZWFkOjpjb250
ZW50TG9naQogewogICAgIFJlbmRlclJlZ2lvbiogZmlyc3RWYWxpZFJlZ2lvbkluRmxvdyA9IGZp
cnN0UmVnaW9uKCk7CiAgICAgaWYgKCFmaXJzdFZhbGlkUmVnaW9uSW5GbG93KQotICAgICAgICBy
ZXR1cm4gWkVST19MQVlPVVRfVU5JVDsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmaXJzdFZhbGlkUmVnaW9uSW5GbG93LT5jb250ZW50
V2lkdGgoKSA6IGZpcnN0VmFsaWRSZWdpb25JbkZsb3ctPmNvbnRlbnRIZWlnaHQoKTsKIH0KIApA
QCAtNDk0LDcgKzQ5NCw3IEBAIExheW91dFVuaXQgUmVuZGVyRmxvd1RocmVhZDo6Y29udGVudExv
Z2kKIHsKICAgICBSZW5kZXJSZWdpb24qIGZpcnN0VmFsaWRSZWdpb25JbkZsb3cgPSBmaXJzdFJl
Z2lvbigpOwogICAgIGlmICghZmlyc3RWYWxpZFJlZ2lvbkluRmxvdykKLSAgICAgICAgcmV0dXJu
IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpID8gZmlyc3RWYWxpZFJlZ2lvbkluRmxvdy0+Y29udGVudEhlaWdo
dCgpIDogZmlyc3RWYWxpZFJlZ2lvbkluRmxvdy0+Y29udGVudFdpZHRoKCk7CiB9CiAKQEAgLTUw
Miw3ICs1MDIsNyBAQCBMYXlvdXRVbml0IFJlbmRlckZsb3dUaHJlYWQ6OmNvbnRlbnRMb2dpCiB7
CiAgICAgUmVuZGVyUmVnaW9uKiBmaXJzdFZhbGlkUmVnaW9uSW5GbG93ID0gZmlyc3RSZWdpb24o
KTsKICAgICBpZiAoIWZpcnN0VmFsaWRSZWdpb25JbkZsb3cpCi0gICAgICAgIHJldHVybiBaRVJP
X0xBWU9VVF9VTklUOworICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSA/IGZpcnN0VmFsaWRSZWdpb25JbkZsb3ctPmZsb3dUaHJlYWRQb3J0aW9u
UmVjdCgpLngoKSA6IGZpcnN0VmFsaWRSZWdpb25JbkZsb3ctPmZsb3dUaHJlYWRQb3J0aW9uUmVj
dCgpLnkoKTsKIH0KIApAQCAtNzg2LDcgKzc4Niw3IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6
dXBkYXRlUmVnaW9uc0Zsb3cKICAgICAgICAgTGF5b3V0VW5pdCByZWdpb25Mb2dpY2FsV2lkdGgg
PSByZWdpb24tPnBhZ2VMb2dpY2FsV2lkdGgoKTsKICAgICAgICAgTGF5b3V0VW5pdCByZWdpb25M
b2dpY2FsSGVpZ2h0ID0gcmVnaW9uLT5sb2dpY2FsSGVpZ2h0T2ZBbGxGbG93VGhyZWFkQ29udGVu
dCgpOwogCi0gICAgICAgIExheW91dFJlY3QgcmVnaW9uUmVjdChzdHlsZSgpLT5kaXJlY3Rpb24o
KSA9PSBMVFIgPyBaRVJPX0xBWU9VVF9VTklUIDogbG9naWNhbFdpZHRoKCkgLSByZWdpb25Mb2dp
Y2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQsIHJlZ2lvbkxvZ2ljYWxXaWR0aCwgcmVnaW9uTG9naWNh
bEhlaWdodCk7CisgICAgICAgIExheW91dFJlY3QgcmVnaW9uUmVjdChzdHlsZSgpLT5kaXJlY3Rp
b24oKSA9PSBMVFIgPyBMYXlvdXRVbml0KCkgOiBsb2dpY2FsV2lkdGgoKSAtIHJlZ2lvbkxvZ2lj
YWxXaWR0aCwgbG9naWNhbEhlaWdodCwgcmVnaW9uTG9naWNhbFdpZHRoLCByZWdpb25Mb2dpY2Fs
SGVpZ2h0KTsKIAogICAgICAgICAvLyBXaGVuIGEgZmxvdyB0aHJlYWQgaGFzIG1vcmUgdGhhbiBv
bmUgYXV0byBsb2dpY2FsIGhlaWdodCByZWdpb24sCiAgICAgICAgIC8vIHdlIGhhdmUgdG8gdGFr
ZSBpbnRvIGFjY291bnQgdGhlIG92ZXJyaWRlIGxvZ2ljYWwgY29udGVudCBoZWlnaHQgdmFsdWUs
CkBAIC04ODIsNyArODgyLDcgQEAgYm9vbCBSZW5kZXJGbG93VGhyZWFkOjphZGRGb3JjZWRSZWdp
b25CcgogICAgICAgICB1cGRhdGVSZWdpb25zRmxvd1RocmVhZFBvcnRpb25SZWN0KCk7CiAKICAg
ICBpZiAob2Zmc2V0QnJlYWtBZGp1c3RtZW50KQotICAgICAgICAqb2Zmc2V0QnJlYWtBZGp1c3Rt
ZW50ID0gbWF4PExheW91dFVuaXQ+KFpFUk9fTEFZT1VUX1VOSVQsIGN1cnJlbnRSZWdpb25PZmZz
ZXRJbkZsb3dUaHJlYWQgLSBvZmZzZXRCcmVha0luRmxvd1RocmVhZCk7CisgICAgICAgICpvZmZz
ZXRCcmVha0FkanVzdG1lbnQgPSBtYXg8TGF5b3V0VW5pdD4oMCwgY3VycmVudFJlZ2lvbk9mZnNl
dEluRmxvd1RocmVhZCAtIG9mZnNldEJyZWFrSW5GbG93VGhyZWFkKTsKIAogICAgIHJldHVybiBv
dmVycmlkZUxvZ2ljYWxDb250ZW50SGVpZ2h0Q29tcHV0ZWQ7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyR2VvbWV0cnlNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR2VvbWV0cnlNYXAuaAkocmV2aXNpb24gMTMzNjY0KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdlb21ldHJ5TWFwLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVk
ZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIkxheW91dFR5
cGVzSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dFNpemUuaCIKICNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlUmVzb3VyY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJjZS5oCShyZXZp
c2lvbiAxMzM2NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNv
dXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiQ2FjaGVk
SW1hZ2UuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIklt
YWdlLmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAi
TGF5b3V0U2l6ZS5oIgogI2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJl
dmlzaW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NDksOCArOTQ5LDggQEAgTGF5b3V0UmVjdCBSZW5kZXJJ
bmxpbmU6OmxpbmVzVmlzdWFsT3ZlcgogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCiAg
ICAgLy8gUmV0dXJuIHRoZSB3aWR0aCBvZiB0aGUgbWluaW1hbCBsZWZ0IHNpZGUgYW5kIHRoZSBt
YXhpbWFsIHJpZ2h0IHNpZGUuCi0gICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdFNpZGUgPSBNQVhf
TEFZT1VUX1VOSVQ7Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRTaWRlID0gTUlOX0xBWU9V
VF9VTklUOworICAgIExheW91dFVuaXQgbG9naWNhbExlZnRTaWRlID0gTGF5b3V0VW5pdDo6bWF4
KCk7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRTaWRlID0gTGF5b3V0VW5pdDo6bWluKCk7
CiAgICAgZm9yIChJbmxpbmVGbG93Qm94KiBjdXJyID0gZmlyc3RMaW5lQm94KCk7IGN1cnI7IGN1
cnIgPSBjdXJyLT5uZXh0TGluZUJveCgpKSB7CiAgICAgICAgIGxvZ2ljYWxMZWZ0U2lkZSA9IG1p
bihsb2dpY2FsTGVmdFNpZGUsIGN1cnItPmxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3coKSk7CiAg
ICAgICAgIGxvZ2ljYWxSaWdodFNpZGUgPSBtYXgobG9naWNhbFJpZ2h0U2lkZSwgY3Vyci0+bG9n
aWNhbFJpZ2h0VmlzdWFsT3ZlcmZsb3coKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNTUsNyArMjA1NSw3
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU0KICAgICAgICAgICAg
IHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5M
ZWZ0LCBTdHJpbmc6Om51bWJlcihyZW5kZXJlci0+bWFyZ2luTGVmdCgpIC8gem9vbUZhY3Rvcikg
KyAicHgiLCBmYWxzZSk7CiAgICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHls
ZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luUmlnaHQsIFN0cmluZzo6bnVtYmVyKHJlbmRlcmVy
LT5tYXJnaW5SaWdodCgpIC8gem9vbUZhY3RvcikgKyAicHgiLCBmYWxzZSk7CiAgICAgICAgIH0K
LSAgICAgICAgTGF5b3V0VW5pdCBiYXNlV2lkdGggPSByZW5kZXJlci0+d2lkdGgoKSAtIChpc0Jv
eFNpemluZ0JvcmRlciA/IFpFUk9fTEFZT1VUX1VOSVQgOiByZW5kZXJlci0+Ym9yZGVyQW5kUGFk
ZGluZ1dpZHRoKCkpOworICAgICAgICBMYXlvdXRVbml0IGJhc2VXaWR0aCA9IHJlbmRlcmVyLT53
aWR0aCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gTGF5b3V0VW5pdCgpIDogcmVuZGVyZXItPmJv
cmRlckFuZFBhZGRpbmdXaWR0aCgpKTsKICAgICAgICAgYmFzZVdpZHRoID0gYmFzZVdpZHRoIC8g
em9vbUZhY3RvcjsKICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0
eShDU1NQcm9wZXJ0eVdpZHRoLCBTdHJpbmc6Om51bWJlcihyb3VuZFRvSW50KGJhc2VXaWR0aCAr
IGRpZmZlcmVuY2Uud2lkdGgoKSkpICsgInB4IiwgZmFsc2UpOwogICAgIH0KQEAgLTIwNjYsNyAr
MjA2Niw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU0KICAgICAg
ICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlN
YXJnaW5Ub3AsIFN0cmluZzo6bnVtYmVyKHJlbmRlcmVyLT5tYXJnaW5Ub3AoKSAvIHpvb21GYWN0
b3IpICsgInB4IiwgZmFsc2UpOwogICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5l
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgU3RyaW5nOjpudW1iZXIocmVu
ZGVyZXItPm1hcmdpbkJvdHRvbSgpIC8gem9vbUZhY3RvcikgKyAicHgiLCBmYWxzZSk7CiAgICAg
ICAgIH0KLSAgICAgICAgTGF5b3V0VW5pdCBiYXNlSGVpZ2h0ID0gcmVuZGVyZXItPmhlaWdodCgp
IC0gKGlzQm94U2l6aW5nQm9yZGVyID8gWkVST19MQVlPVVRfVU5JVCA6IHJlbmRlcmVyLT5ib3Jk
ZXJBbmRQYWRkaW5nSGVpZ2h0KCkpOworICAgICAgICBMYXlvdXRVbml0IGJhc2VIZWlnaHQgPSBy
ZW5kZXJlci0+aGVpZ2h0KCkgLSAoaXNCb3hTaXppbmdCb3JkZXIgPyBMYXlvdXRVbml0KCkgOiBy
ZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ0hlaWdodCgpKTsKICAgICAgICAgYmFzZUhlaWdodCA9
IGJhc2VIZWlnaHQgLyB6b29tRmFjdG9yOwogICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxp
bmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0LCBTdHJpbmc6Om51bWJlcihyb3VuZFRv
SW50KGJhc2VIZWlnaHQgKyBkaWZmZXJlbmNlLmhlaWdodCgpKSkgKyAicHgiLCBmYWxzZSk7CiAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVySW5m
by5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZp
bHRlckluZm8uaAkocmV2aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyRmlsdGVySW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiw3IEBA
CiAjaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnQuaCIKICNlbmRpZgogI2luY2x1ZGUgIkZpbHRl
ck9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRSZWN0LmgiCi0jaW5jbHVk
ZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1h
cmtlci5jcHAJKHJldmlzaW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0TWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwNSw3ICsxNTA1LDcgQEAg
dm9pZCBSZW5kZXJMaXN0TWFya2VyOjp1cGRhdGVNYXJnaW5zKCkKICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBOb25lTGlzdFN0eWxlOgogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXJn
aW5TdGFydCA9IG1fdGV4dC5pc0VtcHR5KCkgPyBaRVJPX0xBWU9VVF9VTklUIDogLW1pblByZWZl
cnJlZExvZ2ljYWxXaWR0aCgpIC0gb2Zmc2V0IC8gMjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1hcmdpblN0YXJ0ID0gbV90ZXh0LmlzRW1wdHkoKSA/IExheW91dFVuaXQoKSA6IC1taW5QcmVm
ZXJyZWRMb2dpY2FsV2lkdGgoKSAtIG9mZnNldCAvIDI7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgbWFyZ2luRW5kID0gLW1hcmdpblN0YXJ0IC0gbWluUHJl
ZmVycmVkTG9naWNhbFdpZHRoKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTWFycXVlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck1hcnF1ZWUuY3BwCShyZXZpc2lvbiAxMzM2NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSwxMyArMTI1LDEz
IEBAIGludCBSZW5kZXJNYXJxdWVlOjpjb21wdXRlUG9zaXRpb24oRU1hcnEKICAgICAgICAgfQog
ICAgICAgICBpZiAoZGlyID09IE1SSUdIVCkgewogICAgICAgICAgICAgaWYgKHN0b3BBdENvbnRl
bnRFZGdlKQotICAgICAgICAgICAgICAgIHJldHVybiBtYXgoWkVST19MQVlPVVRfVU5JVCwgbHRy
ID8gKGNvbnRlbnRXaWR0aCAtIGNsaWVudFdpZHRoKSA6IChjbGllbnRXaWR0aCAtIGNvbnRlbnRX
aWR0aCkpOworICAgICAgICAgICAgICAgIHJldHVybiBtYXg8TGF5b3V0VW5pdD4oMCwgbHRyID8g
KGNvbnRlbnRXaWR0aCAtIGNsaWVudFdpZHRoKSA6IChjbGllbnRXaWR0aCAtIGNvbnRlbnRXaWR0
aCkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBsdHIgPyBjb250
ZW50V2lkdGggOiBjbGllbnRXaWR0aDsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgIGlmIChzdG9wQXRDb250ZW50RWRnZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWlu
KFpFUk9fTEFZT1VUX1VOSVQsIGx0ciA/IChjb250ZW50V2lkdGggLSBjbGllbnRXaWR0aCkgOiAo
Y2xpZW50V2lkdGggLSBjb250ZW50V2lkdGgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWlu
PExheW91dFVuaXQ+KDAsIGx0ciA/IChjb250ZW50V2lkdGggLSBjbGllbnRXaWR0aCkgOiAoY2xp
ZW50V2lkdGggLSBjb250ZW50V2lkdGgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICByZXR1cm4gbHRyID8gLWNsaWVudFdpZHRoIDogLWNvbnRlbnRXaWR0aDsKICAgICAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgJKHJldmlz
aW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAjaWZuZGVmIFJlbmRlck1lbnVMaXN0
X2gKICNkZWZpbmUgUmVuZGVyTWVudUxpc3RfaAogCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIK
KyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiUG9wdXBNZW51LmgiCiAjaW5jbHVk
ZSAiUG9wdXBNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxl
Qm94LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5C
bG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11
bHRpQ29sdW1uQmxvY2suY3BwCShyZXZpc2lvbiAxMzM2NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5CbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDggKzM3LDggQEAgUmVuZGVyTXVsdGlDb2x1bW5CbG9jazo6UmVuZGVyTXVsdGlDb2x1bQogICAg
IDogUmVuZGVyQmxvY2sobm9kZSkKICAgICAsIG1fZmxvd1RocmVhZCgwKQogICAgICwgbV9jb2x1
bW5Db3VudCgxKQotICAgICwgbV9jb2x1bW5XaWR0aChaRVJPX0xBWU9VVF9VTklUKQotICAgICwg
bV9jb2x1bW5IZWlnaHQoWkVST19MQVlPVVRfVU5JVCkKKyAgICAsIG1fY29sdW1uV2lkdGgoMCkK
KyAgICAsIG1fY29sdW1uSGVpZ2h0KDApCiB7CiB9CiAKQEAgLTgzLDEzICs4MywxMyBAQCB2b2lk
IFJlbmRlck11bHRpQ29sdW1uQmxvY2s6OmNoZWNrRm9yUGFnCiAgICAgLy8gV2UgZG9uJ3QgYWN0
dWFsbHkgdXBkYXRlIGFueSBvZiB0aGUgdmFyaWFibGVzLiBXZSBqdXN0IHN1YmNsYXNzZWQgdG8g
YWRqdXN0IG91ciBjb2x1bW4gaGVpZ2h0LgogICAgIHVwZGF0ZUxvZ2ljYWxIZWlnaHQoKTsKICAg
ICBMYXlvdXRVbml0IG5ld0NvbnRlbnRMb2dpY2FsSGVpZ2h0ID0gY29udGVudExvZ2ljYWxIZWln
aHQoKTsKLSAgICBpZiAobmV3Q29udGVudExvZ2ljYWxIZWlnaHQgPiBaRVJPX0xBWU9VVF9VTklU
KSB7CisgICAgaWYgKG5ld0NvbnRlbnRMb2dpY2FsSGVpZ2h0ID4gMCkgewogICAgICAgICAvLyBU
aGUgcmVnaW9ucyB3aWxsIGJlIGludmFsaWRhdGVkIHdoZW4gd2UgbGF5IHRoZW0gb3V0IGFuZCB0
aGV5IGNoYW5nZSBzaXplIHRvCiAgICAgICAgIC8vIHRoZSBuZXcgY29sdW1uIGhlaWdodC4KICAg
ICAgICAgaWYgKGNvbHVtbkhlaWdodCgpICE9IG5ld0NvbnRlbnRMb2dpY2FsSGVpZ2h0KQogICAg
ICAgICAgICAgc2V0Q29sdW1uSGVpZ2h0KG5ld0NvbnRlbnRMb2dpY2FsSGVpZ2h0KTsKICAgICB9
Ci0gICAgc2V0TG9naWNhbEhlaWdodChaRVJPX0xBWU9VVF9VTklUKTsKKyAgICBzZXRMb2dpY2Fs
SGVpZ2h0KDApOwogCiAgICAgLy8gU2V0IHVwIG91ciBjb2x1bW4gc2V0cy4KICAgICBlbnN1cmVD
b2x1bW5TZXRzKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlD
b2x1bW5TZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNdWx0aUNvbHVtblNldC5jcHAJKHJldmlzaW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDggKzM5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogUmVuZGVyTXVsdGlDb2x1bW5TZXQ6OlJl
bmRlck11bHRpQ29sdW1uU2V0KE5vZGUqIG5vZGUsIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJl
YWQpCiAgICAgOiBSZW5kZXJSZWdpb25TZXQobm9kZSwgZmxvd1RocmVhZCkKICAgICAsIG1fY29t
cHV0ZWRDb2x1bW5Db3VudCgxKQotICAgICwgbV9jb21wdXRlZENvbHVtbldpZHRoKFpFUk9fTEFZ
T1VUX1VOSVQpCi0gICAgLCBtX2NvbXB1dGVkQ29sdW1uSGVpZ2h0KFpFUk9fTEFZT1VUX1VOSVQp
CisgICAgLCBtX2NvbXB1dGVkQ29sdW1uV2lkdGgoMCkKKyAgICAsIG1fY29tcHV0ZWRDb2x1bW5I
ZWlnaHQoMCkKIHsKIH0KIApAQCAtMjI4LDkgKzIyOCw5IEBAIHZvaWQgUmVuZGVyTXVsdGlDb2x1
bW5TZXQ6OnBhaW50Q29sdW1uUnUKICAgICBib29sIGFudGlhbGlhcyA9IHNob3VsZEFudGlhbGlh
c0xpbmVzKHBhaW50SW5mby5jb250ZXh0KTsKIAogICAgIGJvb2wgbGVmdFRvUmlnaHQgPSBzdHls
ZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7Ci0gICAgTGF5b3V0VW5pdCBjdXJyTG9naWNh
bExlZnRPZmZzZXQgPSBsZWZ0VG9SaWdodCA/IFpFUk9fTEFZT1VUX1VOSVQgOiBjb250ZW50TG9n
aWNhbFdpZHRoKCk7CisgICAgTGF5b3V0VW5pdCBjdXJyTG9naWNhbExlZnRPZmZzZXQgPSBsZWZ0
VG9SaWdodCA/IExheW91dFVuaXQoKSA6IGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKICAgICBMYXlv
dXRVbml0IHJ1bGVBZGQgPSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbExlZnQoKTsKLSAgICBMYXlv
dXRVbml0IHJ1bGVMb2dpY2FsTGVmdCA9IGxlZnRUb1JpZ2h0ID8gWkVST19MQVlPVVRfVU5JVCA6
IGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICBMYXlvdXRVbml0IHJ1bGVMb2dpY2FsTGVmdCA9
IGxlZnRUb1JpZ2h0ID8gTGF5b3V0VW5pdCgpIDogY29udGVudExvZ2ljYWxXaWR0aCgpOwogICAg
IExheW91dFVuaXQgaW5saW5lRGlyZWN0aW9uU2l6ZSA9IGNvbXB1dGVkQ29sdW1uV2lkdGgoKTsK
ICAgICBCb3hTaWRlIGJveFNpZGUgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpCiAgICAgICAg
ID8gbGVmdFRvUmlnaHQgPyBCU0xlZnQgOiBCU1JpZ2h0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcAkocmV2aXNpb24gMTMz
NjY0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQzNCw3ICs0MzQsNyBAQCBzdGF0aWMgYm9vbCBpc0NvbnRh
aW5lZEluTm9kZXMoVmVjdG9yPE5vCiAKIHN0YXRpYyBib29sIGJveEludGVyc2VjdHNSZWdpb24o
TGF5b3V0VW5pdCBsb2dpY2FsVG9wRm9yQm94LCBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b21Gb3JC
b3gsIExheW91dFVuaXQgbG9naWNhbFRvcEZvclJlZ2lvbiwgTGF5b3V0VW5pdCBsb2dpY2FsQm90
dG9tRm9yUmVnaW9uKQogewotICAgIGJvb2wgcmVnaW9uSXNFbXB0eSA9IGxvZ2ljYWxCb3R0b21G
b3JSZWdpb24gIT0gTUFYX0xBWU9VVF9VTklUICYmIGxvZ2ljYWxUb3BGb3JSZWdpb24gIT0gTUlO
X0xBWU9VVF9VTklUCisgICAgYm9vbCByZWdpb25Jc0VtcHR5ID0gbG9naWNhbEJvdHRvbUZvclJl
Z2lvbiAhPSBMYXlvdXRVbml0OjptYXgoKSAmJiBsb2dpY2FsVG9wRm9yUmVnaW9uICE9IExheW91
dFVuaXQ6Om1pbigpCiAgICAgICAgICYmIChsb2dpY2FsQm90dG9tRm9yUmVnaW9uIC0gbG9naWNh
bFRvcEZvclJlZ2lvbikgPD0gMDsKICAgICByZXR1cm4gIChsb2dpY2FsQm90dG9tRm9yQm94IC0g
bG9naWNhbFRvcEZvckJveCkgPiAwCiAgICAgICAgICYmICFyZWdpb25Jc0VtcHR5CkBAIC00NDgs
MTMgKzQ0OCwxMyBAQCB2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6Z2V0UmFuZ2VzKFZlCiAK
ICAgICAvLyBleHRlbmQgdGhlIGZpcnN0IHJlZ2lvbiB0b3AgdG8gY29udGFpbiBldmVyeXRoaW5n
IHVwIHRvIGl0cyBsb2dpY2FsIGhlaWdodAogICAgIGlmIChyZWdpb24tPmlzRmlyc3RSZWdpb24o
KSkKLSAgICAgICAgbG9naWNhbFRvcEZvclJlZ2lvbiA9IE1JTl9MQVlPVVRfVU5JVDsKKyAgICAg
ICAgbG9naWNhbFRvcEZvclJlZ2lvbiA9IExheW91dFVuaXQ6Om1pbigpOwogICAgIGVsc2UKICAg
ICAgICAgbG9naWNhbFRvcEZvclJlZ2lvbiA9ICByZWdpb24tPmxvZ2ljYWxUb3BGb3JGbG93VGhy
ZWFkQ29udGVudCgpOwogCiAgICAgLy8gZXh0ZW5kIHRoZSBsYXN0IHJlZ2lvbiB0byBjb250YWlu
IGV2ZXJ5dGhpbmcgYWJvdmUgaXRzIHkoKQogICAgIGlmIChyZWdpb24tPmlzTGFzdFJlZ2lvbigp
KQotICAgICAgICBsb2dpY2FsQm90dG9tRm9yUmVnaW9uID0gTUFYX0xBWU9VVF9VTklUOworICAg
ICAgICBsb2dpY2FsQm90dG9tRm9yUmVnaW9uID0gTGF5b3V0VW5pdDo6bWF4KCk7CiAgICAgZWxz
ZQogICAgICAgICBsb2dpY2FsQm90dG9tRm9yUmVnaW9uID0gcmVnaW9uLT5sb2dpY2FsQm90dG9t
Rm9yRmxvd1RocmVhZENvbnRlbnQoKTsKIApAQCAtNDk2LDggKzQ5Niw4IEBAIHZvaWQgUmVuZGVy
TmFtZWRGbG93VGhyZWFkOjpnZXRSYW5nZXMoVmUKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgTGF5b3V0VW5pdCBvZmZzZXRUb3AgPSByZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCktPm9m
ZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKTsKLSAgICAgICAgICAgIGNvbnN0IExheW91
dFBvaW50IGxvZ2ljYWxPZmZzZXRGcm9tVG9wKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBa
RVJPX0xBWU9VVF9VTklUIDogIG9mZnNldFRvcCwKLSAgICAgICAgICAgICAgICBpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpID8gb2Zmc2V0VG9wIDogWkVST19MQVlPVVRfVU5JVCk7CisgICAgICAg
ICAgICBjb25zdCBMYXlvdXRQb2ludCBsb2dpY2FsT2Zmc2V0RnJvbVRvcChpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpID8gTGF5b3V0VW5pdCgpIDogIG9mZnNldFRvcCwKKyAgICAgICAgICAgICAg
ICBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gb2Zmc2V0VG9wIDogTGF5b3V0VW5pdCgpKTsK
IAogICAgICAgICAgICAgYm91bmRpbmdCb3gubW92ZUJ5KGxvZ2ljYWxPZmZzZXRGcm9tVG9wKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlz
aW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDUwLDcgKzE0NTAsNyBAQCBib29sIFJlbmRlck9iamVjdDo6
cmVwYWludEFmdGVyTGF5b3V0SWZOCiAgICAgICAgIExheW91dFVuaXQgc2hhZG93UmlnaHQ7CiAg
ICAgICAgIHN0eWxlKCktPmdldEJveFNoYWRvd0hvcml6b250YWxFeHRlbnQoc2hhZG93TGVmdCwg
c2hhZG93UmlnaHQpOwogICAgICAgICBpbnQgYm9yZGVyUmlnaHQgPSBpc0JveCgpID8gdG9SZW5k
ZXJCb3godGhpcyktPmJvcmRlclJpZ2h0KCkgOiAwOwotICAgICAgICBMYXlvdXRVbml0IGJveFdp
ZHRoID0gaXNCb3goKSA/IHRvUmVuZGVyQm94KHRoaXMpLT53aWR0aCgpIDogWkVST19MQVlPVVRf
VU5JVDsKKyAgICAgICAgTGF5b3V0VW5pdCBib3hXaWR0aCA9IGlzQm94KCkgPyB0b1JlbmRlckJv
eCh0aGlzKS0+d2lkdGgoKSA6IExheW91dFVuaXQoKTsKICAgICAgICAgTGF5b3V0VW5pdCBtaW5J
bnNldFJpZ2h0U2hhZG93RXh0ZW50ID0gbWluPExheW91dFVuaXQ+KC1pbnNldFNoYWRvd0V4dGVu
dC5yaWdodCgpLCBtaW48TGF5b3V0VW5pdD4obmV3Qm91bmRzLndpZHRoKCksIG9sZEJvdW5kcy53
aWR0aCgpKSk7CiAgICAgICAgIExheW91dFVuaXQgYm9yZGVyV2lkdGggPSBtYXg8TGF5b3V0VW5p
dD4oYm9yZGVyUmlnaHQsIG1heDxMYXlvdXRVbml0Pih2YWx1ZUZvckxlbmd0aChzdHlsZSgpLT5i
b3JkZXJUb3BSaWdodFJhZGl1cygpLndpZHRoKCksIGJveFdpZHRoLCB2KSwgdmFsdWVGb3JMZW5n
dGgoc3R5bGUoKS0+Ym9yZGVyQm90dG9tUmlnaHRSYWRpdXMoKS53aWR0aCgpLCBib3hXaWR0aCwg
dikpKTsKICAgICAgICAgTGF5b3V0VW5pdCBkZWNvcmF0aW9uc1dpZHRoID0gbWF4PExheW91dFVu
aXQ+KC1vdXRsaW5lU3R5bGUtPm91dGxpbmVPZmZzZXQoKSwgYm9yZGVyV2lkdGggKyBtaW5JbnNl
dFJpZ2h0U2hhZG93RXh0ZW50KSArIG1heDxMYXlvdXRVbml0PihvdXRsaW5lV2lkdGgsIHNoYWRv
d1JpZ2h0KTsKQEAgLTE0NzAsNyArMTQ3MCw3IEBAIGJvb2wgUmVuZGVyT2JqZWN0OjpyZXBhaW50
QWZ0ZXJMYXlvdXRJZk4KICAgICAgICAgTGF5b3V0VW5pdCBzaGFkb3dCb3R0b207CiAgICAgICAg
IHN0eWxlKCktPmdldEJveFNoYWRvd1ZlcnRpY2FsRXh0ZW50KHNoYWRvd1RvcCwgc2hhZG93Qm90
dG9tKTsKICAgICAgICAgaW50IGJvcmRlckJvdHRvbSA9IGlzQm94KCkgPyB0b1JlbmRlckJveCh0
aGlzKS0+Ym9yZGVyQm90dG9tKCkgOiAwOwotICAgICAgICBMYXlvdXRVbml0IGJveEhlaWdodCA9
IGlzQm94KCkgPyB0b1JlbmRlckJveCh0aGlzKS0+aGVpZ2h0KCkgOiBaRVJPX0xBWU9VVF9VTklU
OworICAgICAgICBMYXlvdXRVbml0IGJveEhlaWdodCA9IGlzQm94KCkgPyB0b1JlbmRlckJveCh0
aGlzKS0+aGVpZ2h0KCkgOiBMYXlvdXRVbml0KCk7CiAgICAgICAgIExheW91dFVuaXQgbWluSW5z
ZXRCb3R0b21TaGFkb3dFeHRlbnQgPSBtaW48TGF5b3V0VW5pdD4oLWluc2V0U2hhZG93RXh0ZW50
LmJvdHRvbSgpLCBtaW48TGF5b3V0VW5pdD4obmV3Qm91bmRzLmhlaWdodCgpLCBvbGRCb3VuZHMu
aGVpZ2h0KCkpKTsKICAgICAgICAgTGF5b3V0VW5pdCBib3JkZXJIZWlnaHQgPSBtYXg8TGF5b3V0
VW5pdD4oYm9yZGVyQm90dG9tLCBtYXg8TGF5b3V0VW5pdD4odmFsdWVGb3JMZW5ndGgoc3R5bGUo
KS0+Ym9yZGVyQm90dG9tTGVmdFJhZGl1cygpLmhlaWdodCgpLCBib3hIZWlnaHQsIHYpLCB2YWx1
ZUZvckxlbmd0aChzdHlsZSgpLT5ib3JkZXJCb3R0b21SaWdodFJhZGl1cygpLmhlaWdodCgpLCBi
b3hIZWlnaHQsIHYpKSk7CiAgICAgICAgIExheW91dFVuaXQgZGVjb3JhdGlvbnNIZWlnaHQgPSBt
YXg8TGF5b3V0VW5pdD4oLW91dGxpbmVTdHlsZS0+b3V0bGluZU9mZnNldCgpLCBib3JkZXJIZWln
aHQgKyBtaW5JbnNldEJvdHRvbVNoYWRvd0V4dGVudCkgKyBtYXg8TGF5b3V0VW5pdD4ob3V0bGlu
ZVdpZHRoLCBzaGFkb3dCb3R0b20pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaAkocmV2aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw3IEBACiAjaW5jbHVk
ZSAiRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIK
ICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0VW5pdC5o
IgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2lu
Y2x1ZGUgIlBhaW50UGhhc2UuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3RDaGlsZExpc3QuaCIK
ICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck92ZXJmbG93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck92ZXJmbG93LmgJKHJldmlzaW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPdmVyZmxvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBA
CiAjaWZuZGVmIFJlbmRlck92ZXJmbG93X2gKICNkZWZpbmUgUmVuZGVyT3ZlcmZsb3dfaAogCi0j
aW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVn
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVn
aW9uLmNwcAkocmV2aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclJlZ2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3MCwxNCArMzcwLDE0IEBAIHZvaWQg
UmVuZGVyUmVnaW9uOjpkZWxldGVBbGxSZW5kZXJCb3hSZWcKIExheW91dFVuaXQgUmVuZGVyUmVn
aW9uOjpsb2dpY2FsVG9wT2ZGbG93VGhyZWFkQ29udGVudFJlY3QoY29uc3QgTGF5b3V0UmVjdCYg
cmVjdCkgY29uc3QKIHsKICAgICBpZiAoIW1faXNWYWxpZCB8fCAhZmxvd1RocmVhZCgpKQotICAg
ICAgICByZXR1cm4gWkVST19MQVlPVVRfVU5JVDsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0
dXJuIGZsb3dUaHJlYWQoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHJlY3QueSgpIDog
cmVjdC54KCk7CiB9CiAKIExheW91dFVuaXQgUmVuZGVyUmVnaW9uOjpsb2dpY2FsQm90dG9tT2ZG
bG93VGhyZWFkQ29udGVudFJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkgY29uc3QKIHsKICAg
ICBpZiAoIW1faXNWYWxpZCB8fCAhZmxvd1RocmVhZCgpKQotICAgICAgICByZXR1cm4gWkVST19M
QVlPVVRfVU5JVDsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGZsb3dUaHJlYWQoKS0+
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHJlY3QubWF4WSgpIDogcmVjdC5tYXhYKCk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAko
cmV2aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxh
Y2VkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgyLDcgKzM4Miw3IEBAIExheW91dFVuaXQgUmVu
ZGVyUmVwbGFjZWQ6OmNvbXB1dGVSZXBsYWMKICAgICAgICAgICAgICAgICAvLyBUaGlzIHNvbHZl
cyBhYm92ZSBlcXVhdGlvbiBmb3IgJ3dpZHRoJyAoPT0gbG9naWNhbFdpZHRoKS4KICAgICAgICAg
ICAgICAgICBMYXlvdXRVbml0IG1hcmdpblN0YXJ0ID0gbWluaW11bVZhbHVlRm9yTGVuZ3RoKHN0
eWxlKCktPm1hcmdpblN0YXJ0KCksIGxvZ2ljYWxXaWR0aCk7CiAgICAgICAgICAgICAgICAgTGF5
b3V0VW5pdCBtYXJnaW5FbmQgPSBtaW5pbXVtVmFsdWVGb3JMZW5ndGgoc3R5bGUoKS0+bWFyZ2lu
RW5kKCksIGxvZ2ljYWxXaWR0aCk7Ci0gICAgICAgICAgICAgICAgbG9naWNhbFdpZHRoID0gbWF4
KFpFUk9fTEFZT1VUX1VOSVQsIGxvZ2ljYWxXaWR0aCAtIChtYXJnaW5TdGFydCArIG1hcmdpbkVu
ZCArICh3aWR0aCgpIC0gY2xpZW50V2lkdGgoKSkpKTsKKyAgICAgICAgICAgICAgICBsb2dpY2Fs
V2lkdGggPSBtYXg8TGF5b3V0VW5pdD4oMCwgbG9naWNhbFdpZHRoIC0gKG1hcmdpblN0YXJ0ICsg
bWFyZ2luRW5kICsgKHdpZHRoKCkgLSBjbGllbnRXaWR0aCgpKSkpOwogICAgICAgICAgICAgICAg
IGlmIChpc1BlcmNlbnRhZ2VJbnRyaW5zaWNTaXplKQogICAgICAgICAgICAgICAgICAgICBsb2dp
Y2FsV2lkdGggPSBsb2dpY2FsV2lkdGggKiBjb25zdHJhaW5lZFNpemUud2lkdGgoKSAvIDEwMDsK
ICAgICAgICAgICAgICAgICByZXR1cm4gY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoUmVzcGVj
dGluZ01pbk1heFdpZHRoKGxvZ2ljYWxXaWR0aCwgaW5jbHVkZU1heFdpZHRoKTsKQEAgLTQ2MCw3
ICs0NjAsNyBAQCB2b2lkIFJlbmRlclJlcGxhY2VkOjpjb21wdXRlUHJlZmVycmVkTG9nCiAgICAg
bV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBjb21wdXRlTWF4UHJlZmVycmVkTG9naWNhbFdp
ZHRoKCkgKyBib3JkZXJBbmRQYWRkaW5nOwogCiAgICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCku
aXNGaXhlZCgpKQotICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1pbjxMYXlv
dXRVbml0PihtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCwgc3R5bGUoKS0+bWF4V2lkdGgoKS52
YWx1ZSgpICsgKHN0eWxlKCktPmJveFNpemluZygpID09IENPTlRFTlRfQk9YID8gYm9yZGVyQW5k
UGFkZGluZyA6IFpFUk9fTEFZT1VUX1VOSVQpKTsKKyAgICAgICAgbV9tYXhQcmVmZXJyZWRMb2dp
Y2FsV2lkdGggPSBtaW48TGF5b3V0VW5pdD4obV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgsIHN0
eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSArIChzdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBDT05U
RU5UX0JPWCA/IGJvcmRlckFuZFBhZGRpbmcgOiBMYXlvdXRVbml0KCkpKTsKIAogICAgIGlmICho
YXNSZWxhdGl2ZURpbWVuc2lvbnMoKSkKICAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lk
dGggPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCShy
ZXZpc2lvbiAxMzM2NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjEsNyArMzIxLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJU
YWJsZTo6Y29udmVydFN0eWxlTG9naQogICAgIGlmIChpc0NTU1RhYmxlICYmIHN0eWxlTG9naWNh
bFdpZHRoLmlzRml4ZWQoKSAmJiBzdHlsZUxvZ2ljYWxXaWR0aC5pc1Bvc2l0aXZlKCkpIHsKICAg
ICAgICAgcmVjYWxjQm9yZGVyc0luUm93RGlyZWN0aW9uKCk7CiAgICAgICAgIGlmIChzdHlsZSgp
LT5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCkKLSAgICAgICAgICAgIGJvcmRlcnMgPSBib3Jk
ZXJTdGFydCgpICsgYm9yZGVyRW5kKCkgKyAoY29sbGFwc2VCb3JkZXJzKCkgPyBaRVJPX0xBWU9V
VF9VTklUIDogcGFkZGluZ1N0YXJ0KCkgKyBwYWRkaW5nRW5kKCkpOworICAgICAgICAgICAgYm9y
ZGVycyA9IGJvcmRlclN0YXJ0KCkgKyBib3JkZXJFbmQoKSArIChjb2xsYXBzZUJvcmRlcnMoKSA/
IExheW91dFVuaXQoKSA6IHBhZGRpbmdTdGFydCgpICsgcGFkZGluZ0VuZCgpKTsKICAgICB9CiAg
ICAgcmV0dXJuIG1pbmltdW1WYWx1ZUZvckxlbmd0aChzdHlsZUxvZ2ljYWxXaWR0aCwgYXZhaWxh
YmxlV2lkdGgsIHZpZXcoKSkgKyBib3JkZXJzOwogfQpAQCAtNDM0LDggKzQzNCw4IEBAIHZvaWQg
UmVuZGVyVGFibGU6OmxheW91dCgpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBMYXlvdXRVbml0
IGJvcmRlckFuZFBhZGRpbmdCZWZvcmUgPSBib3JkZXJCZWZvcmUoKSArIChjb2xsYXBzaW5nID8g
WkVST19MQVlPVVRfVU5JVCA6IHBhZGRpbmdCZWZvcmUoKSk7Ci0gICAgTGF5b3V0VW5pdCBib3Jk
ZXJBbmRQYWRkaW5nQWZ0ZXIgPSBib3JkZXJBZnRlcigpICsgKGNvbGxhcHNpbmcgPyBaRVJPX0xB
WU9VVF9VTklUIDogcGFkZGluZ0FmdGVyKCkpOworICAgIExheW91dFVuaXQgYm9yZGVyQW5kUGFk
ZGluZ0JlZm9yZSA9IGJvcmRlckJlZm9yZSgpICsgKGNvbGxhcHNpbmcgPyBMYXlvdXRVbml0KCkg
OiBwYWRkaW5nQmVmb3JlKCkpOworICAgIExheW91dFVuaXQgYm9yZGVyQW5kUGFkZGluZ0FmdGVy
ID0gYm9yZGVyQWZ0ZXIoKSArIChjb2xsYXBzaW5nID8gTGF5b3V0VW5pdCgpIDogcGFkZGluZ0Fm
dGVyKCkpOwogCiAgICAgc2V0TG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0KCkgKyBib3JkZXJB
bmRQYWRkaW5nQmVmb3JlKTsKIApAQCAtNDQ2LDcgKzQ0Niw3IEBAIHZvaWQgUmVuZGVyVGFibGU6
OmxheW91dCgpCiAgICAgTGF5b3V0VW5pdCBjb21wdXRlZExvZ2ljYWxIZWlnaHQgPSAwOwogICAg
IGlmIChsb2dpY2FsSGVpZ2h0TGVuZ3RoLmlzRml4ZWQoKSkgewogICAgICAgICAvLyBIVE1MIHRh
YmxlcyBzaXplIGFzIHRob3VnaCBDU1MgaGVpZ2h0IGluY2x1ZGVzIGJvcmRlci9wYWRkaW5nLCBD
U1MgdGFibGVzIGRvIG5vdC4KLSAgICAgICAgTGF5b3V0VW5pdCBib3JkZXJzID0gWkVST19MQVlP
VVRfVU5JVDsKKyAgICAgICAgTGF5b3V0VW5pdCBib3JkZXJzID0gMDsKICAgICAgICAgLy8gRklY
TUU6IFdlIGNhbm5vdCBhcHBseSBib3gtc2l6aW5nOiBjb250ZW50LWJveCBvbiA8dGFibGU+IHdo
aWNoIG90aGVyIGJyb3dzZXJzIGFsbG93LgogICAgICAgICBpZiAoKG5vZGUoKSAmJiBub2RlKCkt
Pmhhc1RhZ05hbWUodGFibGVUYWcpKSB8fCBzdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBCT1JERVJf
Qk9YKQogICAgICAgICAgICAgYm9yZGVycyA9IGJvcmRlckFuZFBhZGRpbmdCZWZvcmUgKyBib3Jk
ZXJBbmRQYWRkaW5nQWZ0ZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGUuaAkocmV2aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5MSwxNCArMTkxLDEzIEBAIHB1YmxpYzoKICAg
ICAgICAgaWYgKHVuc2lnbmVkIGVmZmVjdGl2ZUNvbHVtbkNvdW50ID0gbnVtRWZmQ29scygpKQog
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PExheW91dFVuaXQ+KGVmZmVjdGl2ZUNvbHVt
bkNvdW50ICsgMSkgKiBoQm9yZGVyU3BhY2luZygpOwogCi0gICAgICAgIHJldHVybiBaRVJPX0xB
WU9VVF9VTklUOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKICAgICBMYXlvdXRVbml0IGJv
cmRlcnNQYWRkaW5nQW5kU3BhY2luZ0luUm93RGlyZWN0aW9uKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIC8vICdib3JkZXItc3BhY2luZycgb25seSBhcHBsaWVzIHRvIHNlcGFyYXRlIGJvcmRlcnMg
KHNlZSAxNy42LjEgVGhlIHNlcGFyYXRlZCBib3JkZXJzIG1vZGVsKS4KLSAgICAgICAgcmV0dXJu
IGJvcmRlclN0YXJ0KCkgKyBib3JkZXJFbmQoKSArCi0gICAgICAgICAgICAgICAoY29sbGFwc2VC
b3JkZXJzKCkgPyBaRVJPX0xBWU9VVF9VTklUIDogKHBhZGRpbmdTdGFydCgpICsgcGFkZGluZ0Vu
ZCgpICsgYm9yZGVyU3BhY2luZ0luUm93RGlyZWN0aW9uKCkpKTsKKyAgICAgICAgcmV0dXJuIGJv
cmRlclN0YXJ0KCkgKyBib3JkZXJFbmQoKSArIChjb2xsYXBzZUJvcmRlcnMoKSA/IExheW91dFVu
aXQoKSA6IChwYWRkaW5nU3RhcnQoKSArIHBhZGRpbmdFbmQoKSArIGJvcmRlclNwYWNpbmdJblJv
d0RpcmVjdGlvbigpKSk7CiAgICAgfQogCiAgICAgLy8gUmV0dXJuIHRoZSBmaXJzdCBjb2x1bW4g
b3IgY29sdW1uLWdyb3VwLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
LmNwcAkocmV2aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjE1LDggKzE2MTUsOCBAQCBMYXlvdXRSZWN0
IFJlbmRlclRleHQ6OmxpbmVzVmlzdWFsT3ZlcmZsCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0
KCk7CiAKICAgICAvLyBSZXR1cm4gdGhlIHdpZHRoIG9mIHRoZSBtaW5pbWFsIGxlZnQgc2lkZSBh
bmQgdGhlIG1heGltYWwgcmlnaHQgc2lkZS4KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0U2lk
ZSA9IE1BWF9MQVlPVVRfVU5JVDsKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodFNpZGUgPSBN
SU5fTEFZT1VUX1VOSVQ7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdFNpZGUgPSBMYXlvdXRV
bml0OjptYXgoKTsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodFNpZGUgPSBMYXlvdXRVbml0
OjptaW4oKTsKICAgICBmb3IgKElubGluZVRleHRCb3gqIGN1cnIgPSBmaXJzdFRleHRCb3goKTsg
Y3VycjsgY3VyciA9IGN1cnItPm5leHRUZXh0Qm94KCkpIHsKICAgICAgICAgbG9naWNhbExlZnRT
aWRlID0gbWluKGxvZ2ljYWxMZWZ0U2lkZSwgY3Vyci0+bG9naWNhbExlZnRWaXN1YWxPdmVyZmxv
dygpKTsKICAgICAgICAgbG9naWNhbFJpZ2h0U2lkZSA9IG1heChsb2dpY2FsUmlnaHRTaWRlLCBj
dXJyLT5sb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdygpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUNvbW1vbi5jcHAJKHJl
dmlzaW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNo
cm9taXVtQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lQ2hyb21pdW1Db21tb24uaCIKIAot
I2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRVbml0LmgiCiAjaW5jbHVkZSAiSW5wdXRUeXBlTmFt
ZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRVbml0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Db21tb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bUNvbW1vbi5oCShyZXZpc2lvbiAxMzM2NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVDaHJvbWl1bUNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsy
Nyw3IEBACiAjaWZuZGVmIFJlbmRlclRoZW1lQ2hyb21pdW1Db21tb25faAogI2RlZmluZSBSZW5k
ZXJUaGVtZUNocm9taXVtQ29tbW9uX2gKIAotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5j
bHVkZSAiTGF5b3V0VW5pdC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiAxMzM2NjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcg
Kzg5LDcgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgYwogICAgIHJl
dHVybiB0cyA8PCAiKCIgPDwgcC54KCkgPDwgIiwiIDw8IHAueSgpIDw8ICIpIjsKIH0KIAotVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRnJhY3Rpb25hbExheW91
dFBvaW50JiBwKQorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
TGF5b3V0UG9pbnQmIHApCiB7CiAgICAgLy8gRklYTUU6IFRoZXNlIHNob3VsZCBiZSBwcmludGVk
IGFzIGZsb2F0cy4gS2VlcGluZyB0aGVtIGludHMgZm9yIGNvbnNpc3RlbmN5IHdpdGggcGVydmlv
dXMgdGVzdCBleHBlY3RhdGlvbnMuCiAgICAgcmV0dXJuIHRzIDw8ICIoIiA8PCBwLngoKS50b0lu
dCgpIDw8ICIsIiA8PCBwLnkoKS50b0ludCgpIDw8ICIpIjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuaAkocmV2aXNpb24gMTMzNjY0KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsMTIgKzMyLDEyIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEVsZW1lbnQ7
Ci1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0UG9pbnQ7CiBjbGFzcyBGbG9hdFBvaW50OwogY2xhc3Mg
RmxvYXRTaXplOwogY2xhc3MgRnJhbWU7CiBjbGFzcyBJbnRQb2ludDsKIGNsYXNzIEludFJlY3Q7
CitjbGFzcyBMYXlvdXRQb2ludDsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFRleHRTdHJl
YW07CiAKQEAgLTcwLDcgKzcwLDcgQEAgc3RhdGljIHZvaWQgd3JpdGVSZW5kZXJPYmplY3QoVGV4
dFN0cmVhbQogCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBJbnRQ
b2ludCYpOwogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgSW50UmVj
dCYpOwotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgRnJhY3Rpb25h
bExheW91dFBvaW50Jik7CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25z
dCBMYXlvdXRQb2ludCYpOwogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29u
c3QgRmxvYXRQb2ludCYpOwogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29u
c3QgRmxvYXRTaXplJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcu
aAkocmV2aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDggKzEyNyw4IEBAIHB1YmxpYzoKICAgICAgICAg
aWYgKG1fbGF5b3V0U3RhdGUpIHsKICAgICAgICAgICAgIG1fbGF5b3V0U3RhdGUtPm1fbGF5b3V0
RGVsdGEgKz0gZGVsdGE7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRCAmJiBFTkFCTEUoU0FUVVJBVEVE
X0xBWU9VVF9BUklUSE1FVElDKQotICAgICAgICAgICAgbV9sYXlvdXRTdGF0ZS0+bV9sYXlvdXRE
ZWx0YVhTYXR1cmF0ZWQgfD0gbV9sYXlvdXRTdGF0ZS0+bV9sYXlvdXREZWx0YS53aWR0aCgpID09
IEZyYWN0aW9uYWxMYXlvdXRVbml0OjptYXgoKSB8fCBtX2xheW91dFN0YXRlLT5tX2xheW91dERl
bHRhLndpZHRoKCkgPT0gRnJhY3Rpb25hbExheW91dFVuaXQ6Om1pbigpOwotICAgICAgICAgICAg
bV9sYXlvdXRTdGF0ZS0+bV9sYXlvdXREZWx0YVlTYXR1cmF0ZWQgfD0gbV9sYXlvdXRTdGF0ZS0+
bV9sYXlvdXREZWx0YS5oZWlnaHQoKSA9PSBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWF4KCkgfHwg
bV9sYXlvdXRTdGF0ZS0+bV9sYXlvdXREZWx0YS5oZWlnaHQoKSA9PSBGcmFjdGlvbmFsTGF5b3V0
VW5pdDo6bWluKCk7CisgICAgICAgICAgICBtX2xheW91dFN0YXRlLT5tX2xheW91dERlbHRhWFNh
dHVyYXRlZCB8PSBtX2xheW91dFN0YXRlLT5tX2xheW91dERlbHRhLndpZHRoKCkgPT0gTGF5b3V0
VW5pdDo6bWF4KCkgfHwgbV9sYXlvdXRTdGF0ZS0+bV9sYXlvdXREZWx0YS53aWR0aCgpID09IExh
eW91dFVuaXQ6Om1pbigpOworICAgICAgICAgICAgbV9sYXlvdXRTdGF0ZS0+bV9sYXlvdXREZWx0
YVlTYXR1cmF0ZWQgfD0gbV9sYXlvdXRTdGF0ZS0+bV9sYXlvdXREZWx0YS5oZWlnaHQoKSA9PSBM
YXlvdXRVbml0OjptYXgoKSB8fCBtX2xheW91dFN0YXRlLT5tX2xheW91dERlbHRhLmhlaWdodCgp
ID09IExheW91dFVuaXQ6Om1pbigpOwogI2VuZGlmCiAgICAgICAgIH0KICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvTmluZVBpZWNlSW1hZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvTmluZVBpZWNlSW1hZ2UuaAkocmV2
aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVj
ZUltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICNpZm5kZWYgTmluZVBp
ZWNlSW1hZ2VfaAogI2RlZmluZSBOaW5lUGllY2VJbWFnZV9oCiAKLSNpbmNsdWRlICJMYXlvdXRU
eXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKICNpbmNsdWRlICJMZW5ndGhCb3guaCIK
ICNpbmNsdWRlICJTdHlsZUltYWdlLmgiCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9SZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCShyZXZpc2lvbiAxMzM2NjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcs
NyArMzcsNyBAQAogI2luY2x1ZGUgIkZvbnRCYXNlbGluZS5oIgogI2luY2x1ZGUgIkZvbnREZXNj
cmlwdGlvbi5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlICJMYXlvdXRU
eXBlc0lubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJMYXlvdXRCb3hFeHRlbnQuaCIKICNpbmNs
dWRlICJMZW5ndGguaCIKICNpbmNsdWRlICJMZW5ndGhCb3guaCIKICNpbmNsdWRlICJMZW5ndGhG
dW5jdGlvbnMuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFkb3dE
YXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hh
ZG93RGF0YS5jcHAJKHJldmlzaW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TaGFkb3dEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNoYWRvd0RhdGEuaCIKIAotI2luY2x1ZGUg
IkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKIAog
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1NoYWRvd0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvU2hhZG93RGF0YS5oCShyZXZpc2lvbiAxMzM2NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU2hhZG93RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3
IEBACiAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1
ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZVNldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlU2V0LmgJ
KHJldmlzaW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHls
ZUNhY2hlZEltYWdlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2lu
Y2x1ZGUgIkNhY2hlZEltYWdlQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5k
bGUuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFNpemUuaCIK
ICNpbmNsdWRlICJTdHlsZUltYWdlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2UuaAkocmV2aXNpb24gMTMz
NjY0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkNTU1ZhbHVlLmgiCiAjaW5j
bHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlw
ZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9y
dC5oCShyZXZpc2lvbiAxMzM2NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlclN1cHBvcnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNiBAQAogI2RlZmlu
ZSBTVkdSZW5kZXJTdXBwb3J0X2gKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiTGF5b3V0
VHlwZXMuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtMzMsNiArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBGbG9hdFBvaW50Owog
Y2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBMYXlvdXRSZWN0Owog
Y2xhc3MgUmVuZGVyQm94TW9kZWxPYmplY3Q7CiBjbGFzcyBSZW5kZXJHZW9tZXRyeU1hcDsKIGNs
YXNzIFJlbmRlckxheWVyTW9kZWxPYmplY3Q7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTMzNjY0KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0xMS0wNSAgRW1pbCBBIEVrbHVu
ZCAgPGVhZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmVtb3ZlIExheW91dFR5cGVzIGFic3Ry
YWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05
MzA1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
bW92ZSBMYXlvdXRUeXBlcyBhYnN0cmFjdGlvbiBhbmQgcmVuYW1lIEZyYWN0aW9uYWxMYXlvdXQq
IHRvCisgICAgICAgIExheW91dCogbm93IHRoYXQgYWxsIHBsYXRmb3JtcyB1c2UgdGhlIEZyYWN0
aW9uYWxMYXlvdXQgdmVyc2lvbgorICAgICAgICAoYWxiZWl0IHdpdGggZGlmZmVyZW50IGZyYWN0
aW9ucykuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0
eS4KKworICAgICAgICAqIHNyYy9MaW5rSGlnaGxpZ2h0LmNwcDoKKwogMjAxMi0xMS0wNiAgU2hl
cmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZC4gIFJvbGxlZCBERVBTLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTGlu
a0hpZ2hsaWdodC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
TGlua0hpZ2hsaWdodC5jcHAJKHJldmlzaW9uIDEzMzY2NCkKKysrIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0xpbmtIaWdobGlnaHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2
IEBACiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgog
I2luY2x1ZGUgIk5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
Q29udGV4dFNraWEuaCIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172658</attachid>
            <date>2012-11-06 15:13:21 -0800</date>
            <delta_ts>2012-11-07 08:36:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93050-20121106151133.patch</filename>
            <type>text/plain</type>
            <size>390711</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzY3NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MyBAQAorMjAxMi0xMS0wNSAgRW1pbCBB
IEVrbHVuZCAgPGVhZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmVtb3ZlIExheW91dFR5cGVz
IGFic3RyYWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05MzA1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFJlbW92ZSBMYXlvdXRUeXBlcyBhYnN0cmFjdGlvbiBhbmQgcmVuYW1lIEZyYWN0aW9uYWxM
YXlvdXQqIHRvCisgICAgICAgIExheW91dCogbm93IHRoYXQgYWxsIHBsYXRmb3JtcyB1c2UgdGhl
IEZyYWN0aW9uYWxMYXlvdXQgdmVyc2lvbgorICAgICAgICAoYWxiZWl0IHdpdGggZGlmZmVyZW50
IGZyYWN0aW9ucykuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBjaGFuZ2UgaW4gZnVuY3Rp
b25hbGl0eS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2Vm
aWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJDb3JlLmV4
cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3Bw
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaDoKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiBjc3Mv
TGVuZ3RoRnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKiBjc3MvTGVuZ3RoRnVuY3Rpb25zLmg6Cisg
ICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogZG9tL0RvY3VtZW50TWFya2VyQ29u
dHJvbGxlci5oOgorICAgICAgICAqIGRvbS9FbGVtZW50UmFyZURhdGEuaDoKKyAgICAgICAgKiBk
b20vTW91c2VSZWxhdGVkRXZlbnQuaDoKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAq
IGRvbS9Ub3VjaC5oOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAg
ICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaDoKKyAgICAgICAgKiBlZGl0aW5nL1JlbmRl
cmVkUG9zaXRpb24uaDoKKyAgICAgICAgKiBodG1sL0hUTUxBcmVhRWxlbWVudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvclRpbWVsaW5lQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvVGltZWxpbmVSZWNv
cmRGYWN0b3J5LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5
Lmg6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmg6CisgICAgICAgICogcGFn
ZS9Gb2N1c0NvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorICAgICAg
ICAqIHBhZ2UvUGFnZS5oOgorICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwOgor
ICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9G
cmFjdGlvbmFsTGF5b3V0VW5pdC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL0xheW91
dFVuaXQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRnJhY3Rpb25hbExh
eW91dFVuaXQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9MZW5ndGguaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9Qb3B1cE1lbnVDbGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hbmltYXRpb24vQW5p
bWF0aW9uVXRpbGl0aWVzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2lu
dC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRSZWN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRT
aXplLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94RXh0
ZW50Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExh
eW91dFBvaW50Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rp
b25hbExheW91dFJlY3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ZyYWN0aW9uYWxMYXlvdXRSZWN0Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRnJhY3Rpb25hbExheW91dFNpemUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbnRSZWN0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50LmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dEJveEV4
dGVudC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50Lmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxM
YXlvdXRCb3hFeHRlbnQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRQb2lu
dC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlv
bmFsTGF5b3V0UG9pbnQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rp
b25hbExheW91dFJlY3QuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJl
Y3QuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rp
b25hbExheW91dFJlY3QuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRTaXpl
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9u
YWxMYXlvdXRTaXplLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlck9wZXJh
dGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVy
UGFyYW1ldGVyTGlzdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyT3BlcmF0aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJPcGVyYXRpb25zLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9WYWxp
ZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFBvaW50UXQuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxMYXlvdXRSZWN0UXQu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxM
YXlvdXRTaXplUXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0
L0xheW91dFBvaW50UXQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9GcmFjdGlvbmFsTGF5b3V0UG9pbnRRdC5jcHAuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvTGF5b3V0UmVjdFF0LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvTGF5b3V0U2l6ZVF0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFNpemVRdC5jcHAuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25zLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25N
YXRyaXguY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNm
b3JtYXRpb25NYXRyaXguaDoKKyAgICAgICAgKiByZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0Lmg6
CisgICAgICAgICogcmVuZGVyaW5nL0NvbHVtbkluZm8uaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmg6CisgICAgICAgICogcmVuZGVyaW5nL0ZpbHRlckVm
ZmVjdFJlbmRlcmVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvR2FwUmVjdHMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0
VGVzdFJlc3VsdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0aW5nVHJhbnNmb3JtU3Rh
dGUuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgICogcmVuZGVy
aW5nL0xheW91dFJlcGFpbnRlci5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL0xheW91dFJlcGFp
bnRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRTdGF0ZS5oOgorICAgICAgICAqIHJl
bmRlcmluZy9MYXlvdXRUeXBlcy5oOgorICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRUeXBlc0lu
bGluZU1ldGhvZHMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUGFpbnRJbmZvLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
QmxvY2suaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNw
cDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJG
bGV4aWJsZUJveC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3Bw
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJHZW9tZXRyeU1hcC5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNlLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
cklubGluZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmg6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlz
dE1hcmtlci5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVs
dGlDb2x1bW5TZXQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJl
YWQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT3Zl
cmZsb3cuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUYWJsZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
aGVtZUNocm9taXVtQ29tbW9uLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVD
aHJvbWl1bUNvbW1vbi5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJWaWV3Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVj
ZUltYWdlLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuY3BwOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdHlsZS9TaGFkb3dEYXRhLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2Fj
aGVkSW1hZ2VTZXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZS5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oOgorCiAyMDEyLTExLTA2
ICBUaWFuY2hlbmcgSmlhbmcgIDx0aWppYW5nQHJpbS5jb20+CiAKICAgICAgICAgW0JsYWNrQmVy
cnldIFVwZGF0ZSBCQjEwIGZvcm0gdGhlbWUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2
aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTE4NzYsOCArMTg3Niw4IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250RmFtaWx5LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRG
YXN0UGF0aC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmVhdHVyZVNldHRpbmdzLmNw
cAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuY3BwCi0g
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuY3BwCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0xh
eW91dFJlY3QuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2UuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDEzMzY3NykKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTQyNzgsNyArNDI3OCw3IEBAIHdlYmNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vRmxvYXRDb252ZXJzaW9uLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0ZyYWN0aW9uYWxMYXlvdXRVbml0LmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xheW91
dFVuaXQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2FtZXBhZHMuaCBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vSGFzaFRvb2xzLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0hpc3RvZ3JhbVN1cHBvcnQuY3BwIFwKQEAgLTQ0NDIsMTIgKzQ0NDIsMTIgQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U21vb3Ro
aW5nTW9kZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250VHJhaXRz
TWFzay5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250V2lkdGhWYXJp
YW50LmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlv
dXRCb3hFeHRlbnQuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFj
dGlvbmFsTGF5b3V0Qm94RXh0ZW50LmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZyYWN0aW9uYWxMYXlvdXRQb2ludC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmggXAotCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRTaXplLmggXAorCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dEJveEV4dGVudC5jcHAgXAorCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dEJveEV4dGVudC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRQb2ludC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9MYXlvdXRSZWN0LmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTGF5b3V0UmVjdC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9M
YXlvdXRTaXplLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRl
ZEltYWdlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVk
SW1hZ2UuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdG9yLmgg
XApAQCAtNDk5MCw4ICs0OTkwLDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvTGF5b3V0U3RhdGUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3Rh
dGUuaCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFR5cGVzLmggXAotCVNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCBcCiAJU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFJlcGFpbnRlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvTGF5b3V0UmVwYWludGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L092ZXJsYXBUZXN0UmVxdWVzdENsaWVudC5oIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1Rhcmdl
dC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24g
MTMzNjc3KQorKysgU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAt
OTY5LDggKzk2OSw4IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQu
Y3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwIFwKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9GcmFj
dGlvbmFsTGF5b3V0Qm94RXh0ZW50LmNwcCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rp
b25hbExheW91dFJlY3QuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRCb3hFeHRl
bnQuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0LmNwcCBcCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9HZW5lcmF0b3JHZW5lcmF0ZWRJbWFnZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ds
eXBoUGFnZVRyZWVOb2RlLmNwcCBcCkBAIC0yMzM1LDcgKzIzMzUsNiBAQCBIRUFERVJTICs9IFwK
ICAgICByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oIFwKICAgICByZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5oIFwKICAgICByZW5kZXJpbmcvTGF5b3V0U3RhdGUuaCBcCi0gICAgcmVuZGVyaW5nL0xh
eW91dFR5cGVzLmggXAogICAgIHJlbmRlcmluZy9MYXlvdXRSZXBhaW50ZXIuaCBcCiAgICAgcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oIFwKICAgICByZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTEZlbmNlZC5oIFwKQEAgLTI3ODIsOSArMjc4MSw5IEBAIFNPVVJDRVMgKz0g
XAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0Zsb2F0UG9pbnRRdC5jcHAgXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3F0L0Zsb2F0UmVjdFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRmxvYXRTaXplUXQuY3BwIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9GcmFjdGlvbmFs
TGF5b3V0UG9pbnRRdC5jcHAgXAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxM
YXlvdXRSZWN0UXQuY3BwIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9GcmFjdGlvbmFsTGF5
b3V0U2l6ZVF0LmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTGF5b3V0UG9pbnRRdC5j
cHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0xheW91dFJlY3RRdC5jcHAgXAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3F0L0xheW91dFNpemVRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3F0L0dyYWRpZW50UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGlj
c0NvbnRleHRRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ljb25RdC5jcHAgXApJ
bmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDEzMzY3NykKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNyArMTQ3LDYgQEAgX19a
TjdXZWJDb3JlMTFNZW1vcnlDYWNoZTEzc2V0Q2FwYWNpdGllcwogX19aTjdXZWJDb3JlMTFNZW1v
cnlDYWNoZTE0ZXZpY3RSZXNvdXJjZXNFdgogX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTE5Z2V0
T3JpZ2luc1dpdGhDYWNoZUVSTjNXVEY3SGFzaFNldElOUzFfNlJlZlB0cklOU18xNFNlY3VyaXR5
T3JpZ2luRUVFTlNfMThTZWN1cml0eU9yaWdpbkhhc2hFTlMxXzEwSGFzaFRyYWl0c0lTNV9FRUVF
CiBfX1pON1dlYkNvcmUxMU1lbW9yeUNhY2hlMjVyZW1vdmVSZXNvdXJjZXNXaXRoT3JpZ2luRVBO
U18xNFNlY3VyaXR5T3JpZ2luRQotX19aTjdXZWJDb3JlMTFSZW5kZXJMYXllcjE5c2Nyb2xsUmVj
dFRvVmlzaWJsZUVSS05TXzIwRnJhY3Rpb25hbExheW91dFJlY3RFUktOU18xNVNjcm9sbEFsaWdu
bWVudEVTNl8KIF9fWk43V2ViQ29yZTExVVJMV2l0aERhdGFFUDZOU0RhdGFQNU5TVVJMCiBfX1pO
N1dlYkNvcmUxMW1lbW9yeUNhY2hlRXYKIF9fWk43V2ViQ29yZTExc3RhcnRPZldvcmRFUktOU18x
NVZpc2libGVQb3NpdGlvbkVOU185RVdvcmRTaWRlRQpAQCAtMTU5LDcgKzE1OCw3IEBAIF9fWk43
V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTRzY3JvbGxPdmVyZmwKIF9fWk43V2ViQ29yZTEyRXZlbnRI
YW5kbGVyMTVoYW5kbGVBY2Nlc3NLZXlFUktOU18yMVBsYXRmb3JtS2V5Ym9hcmRFdmVudEUKIF9f
Wk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTZoYW5kbGVXaGVlbEV2ZW50RVJLTlNfMThQbGF0Zm9y
bVdoZWVsRXZlbnRFCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE3c2Nyb2xsUmVjdXJzaXZl
bHlFTlNfMTVTY3JvbGxEaXJlY3Rpb25FTlNfMTdTY3JvbGxHcmFudWxhcml0eUVQTlNfNE5vZGVF
Ci1fX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjIwaGl0VGVzdFJlc3VsdEF0UG9pbnRFUktOU18y
MUZyYWN0aW9uYWxMYXlvdXRQb2ludEViYk5TXzE3SGl0VGVzdFNjcm9sbGJhcnNFalJLTlNfMjBG
cmFjdGlvbmFsTGF5b3V0U2l6ZUUKK19fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBoaXRUZXN0
UmVzdWx0QXRQb2ludEVSS05TXzExTGF5b3V0UG9pbnRFYmJOU18xN0hpdFRlc3RTY3JvbGxiYXJz
RWpSS05TXzEwTGF5b3V0U2l6ZUUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjFoYW5kbGVN
b3VzZVByZXNzRXZlbnRFUktOU18xOFBsYXRmb3JtTW91c2VFdmVudEUKIF9fWk43V2ViQ29yZTEy
RXZlbnRIYW5kbGVyMjNoYW5kbGVNb3VzZVJlbGVhc2VFdmVudEVSS05TXzE4UGxhdGZvcm1Nb3Vz
ZUV2ZW50RQogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyNGxvZ2ljYWxTY3JvbGxSZWN1cnNp
dmVseUVOU18yMlNjcm9sbExvZ2ljYWxEaXJlY3Rpb25FTlNfMTdTY3JvbGxHcmFudWxhcml0eUVQ
TlNfNE5vZGVFCkBAIC0xODUsOCArMTg0LDcgQEAgX19aTjdXZWJDb3JlMTJQcmludENvbnRleHQ5
c3Bvb2xQYWdlRVJOUwogX19aTjdXZWJDb3JlMTJQcmludENvbnRleHQ5c3Bvb2xSZWN0RVJOU18x
NUdyYXBoaWNzQ29udGV4dEVSS05TXzdJbnRSZWN0RQogX19aTjdXZWJDb3JlMTJQcmludENvbnRl
eHRDMUVQTlNfNUZyYW1lRQogX19aTjdXZWJDb3JlMTJQcmludENvbnRleHREMUV2Ci1fX1pOSzdX
ZWJDb3JlMTJSZW5kZXJPYmplY3QxNnJlcGFpbnRSZWN0YW5nbGVFUktOU18yMEZyYWN0aW9uYWxM
YXlvdXRSZWN0RWIKLV9fWk43V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTlzY3JvbGxSZWN0VG9WaXNp
YmxlRVJLTlNfMjBGcmFjdGlvbmFsTGF5b3V0UmVjdEVSS05TXzE1U2Nyb2xsQWxpZ25tZW50RVM2
XworX19aTjdXZWJDb3JlMTJSZW5kZXJPYmplY3QxOXNjcm9sbFJlY3RUb1Zpc2libGVFUktOU18x
MExheW91dFJlY3RFUktOU18xNVNjcm9sbEFsaWdubWVudEVTNl8KIF9fWk43V2ViQ29yZTEyU2hh
cmVkQnVmZmVyMTB3cmFwQ0ZEYXRhRVBLOF9fQ0ZEYXRhCiBfX1pON1dlYkNvcmUxMlNoYXJlZEJ1
ZmZlcjEwd3JhcE5TRGF0YUVQNk5TRGF0YQogX19aTjdXZWJDb3JlMTJTaGFyZWRCdWZmZXIxMmNy
ZWF0ZU5TRGF0YUV2CkBAIC00NjYsNyArNDY0LDYgQEAgX19aTjdXZWJDb3JlMTZWaXNpYmxlU2Vs
ZWN0aW9uQzFFUktOU18xNQogX19aTjdXZWJDb3JlMTZjcmVhdGVGdWxsTWFya3VwRVBLTlNfNE5v
ZGVFCiBfX1pON1dlYkNvcmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUEtOU181UmFuZ2VFCiBfX1pON1dl
YkNvcmUxNmRlbGV0ZUFsbENvb2tpZXNFdgotX19aTjdXZWJDb3JlMTZlbmNsb3NpbmdJbnRSZWN0
RVJLTlNfMjBGcmFjdGlvbmFsTGF5b3V0UmVjdEUKIF9fWk43V2ViQ29yZTE2ZW5jbG9zaW5nSW50
UmVjdEVSS05TXzlGbG9hdFJlY3RFCiBfX1pON1dlYkNvcmUxNmlzRW5kT2ZQYXJhZ3JhcGhFUktO
U18xNVZpc2libGVQb3NpdGlvbkVOU18yN0VkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZUUKIF9f
Wk43V2ViQ29yZTE2aXNVc2VyVmlzaWJsZVVSTEVQOE5TU3RyaW5nCkBAIC04NjIsNyArODU5LDYg
QEAgX19aTjdXZWJDb3JlN0VsZW1lbnQ5aW5uZXJUZXh0RXYKIF9fWk43V2ViQ29yZTdJbnRSZWN0
NXNjYWxlRWYKIF9fWk43V2ViQ29yZTdJbnRSZWN0NXVuaXRlRVJLUzBfCiBfX1pON1dlYkNvcmU3
SW50UmVjdDlpbnRlcnNlY3RFUktTMF8KLV9fWk43V2ViQ29yZTdJbnRSZWN0QzFFUktOU18yMEZy
YWN0aW9uYWxMYXlvdXRSZWN0RQogX19aTjdXZWJDb3JlN0ludFJlY3RDMUVSS05TXzlGbG9hdFJl
Y3RFCiBfX1pON1dlYkNvcmU3SW50U2l6ZUMxRVJLNkNHU2l6ZQogX19aTjdXZWJDb3JlN1J1bkxv
b3AxNHJ1bkZvckR1cmF0aW9uRWQKQEAgLTEwMDIsOSArOTk4LDcgQEAgX19aTjdXZWJDb3JlOHRv
U3RyaW5nRVJLTjNXVEY2VmVjdG9ySU5TXwogX19aTjdXZWJDb3JlOURPTVdpbmRvdzMwZGlzcGF0
Y2hBbGxQZW5kaW5nVW5sb2FkRXZlbnRzRXYKIF9fWk43V2ViQ29yZTlET01XaW5kb3czNmRpc3Bh
dGNoQWxsUGVuZGluZ0JlZm9yZVVubG9hZEV2ZW50c0V2CiBfX1pON1dlYkNvcmU5RmxvYXRSZWN0
QzFFUks2Q0dSZWN0Ci1fX1pON1dlYkNvcmU5RmxvYXRSZWN0QzFFUktOU18yMEZyYWN0aW9uYWxM
YXlvdXRSZWN0RQogX19aTjdXZWJDb3JlOUZsb2F0UmVjdEMxRVJLTlNfN0ludFJlY3RFCi1fX1pO
N1dlYkNvcmU5RmxvYXRTaXplQzFFUktOU18yMEZyYWN0aW9uYWxMYXlvdXRTaXplRQogX19aTjdX
ZWJDb3JlOUZsb2F0U2l6ZUMxRVJLTlNfN0ludFNpemVFCiBfX1pON1dlYkNvcmU5Rm9udENhY2hl
MTNmb250RGF0YUNvdW50RXYKIF9fWk43V2ViQ29yZTlGb250Q2FjaGUyMWluYWN0aXZlRm9udERh
dGFDb3VudEV2CkBAIC0xMTg2LDYgKzExODAsNyBAQCBfX1pOSzdXZWJDb3JlMTFSZW5kZXJTdHls
ZTRmb250RXYKIF9fWk5LN1dlYkNvcmUxMVNjcmlwdFZhbHVlOWdldFN0cmluZ0VQTjNKU0M5RXhl
Y1N0YXRlRVJOM1dURjZTdHJpbmdFCiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QxNGVuY2xv
c2luZ0xheWVyRXYKIF9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVjdDE1bG9jYWxUb0Fic29sdXRl
RVJLTlNfMTBGbG9hdFBvaW50RWoKK19fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVjdDE2cmVwYWlu
dFJlY3RhbmdsZUVSS05TXzEwTGF5b3V0UmVjdEViCiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmpl
Y3QyMGxvY2FsVG9Db250YWluZXJRdWFkRVJLTlNfOUZsb2F0UXVhZEVQTlNfMjJSZW5kZXJMYXll
ck1vZGVsT2JqZWN0RWpQYgogX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MjNhYnNvbHV0ZUJv
dW5kaW5nQm94UmVjdEViCiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QzOXBpeGVsU25hcHBl
ZEFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdEV2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZp
c2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29w
eSkKQEAgLTM3NCw4ICszNzQsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRTbW9vdGhpbmdNb2RlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRU
cmFpdHNNYXNrLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRXaWR0aFZh
cmlhbnQuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91
dFJlY3QuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91
dFNpemUuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UmVjdC5oJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRTaXplLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRvci5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9HbHlwaC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HbHlw
aEJ1ZmZlci5oJywKQEAgLTU1OCw4ICs1NTgsNiBAQAogICAgICAgICAgICAgJ3JlbmRlcmluZy9J
bmxpbmVGbG93Qm94LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94Lmgn
LAogICAgICAgICAgICAgJ3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5oJywKLSAgICAgICAgICAgICdy
ZW5kZXJpbmcvTGF5b3V0VHlwZXMuaCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL0xheW91dFR5
cGVzSW5saW5lTWV0aG9kcy5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvTGF5b3V0UmVwYWlu
dGVyLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9PdmVybGFwVGVzdFJlcXVlc3RDbGllbnQu
aCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1BhZ2luYXRpb24uaCcsCkBAIC00Nzg3LDcgKzQ3
ODUsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgnLAotICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuY3Bw
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRCb3hFeHRlbnQuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0b3JHZW5lcmF0ZWRJbWFnZS5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuaCcsCkBAIC01
OTA2LDcgKzU5MDQsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVj
dC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwJywKLSAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJlY3QuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uY3BwJywKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiAx
MzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagko
d29ya2luZyBjb3B5KQpAQCAtMjgzOTksNyArMjgzOTksNyBAQAogCQkJCT4KIAkJCTwvRmlsZT4K
IAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxGcmFjdGlvbmFsTGF5b3V0
VW5pdC5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cTGF5b3V0VW5pdC5oIgogCQkJ
CT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCkBAIC0yOTQ4NiwyNyArMjk0ODYsMjcgQEAKIAkJCQkJ
PgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3Jt
XGdyYXBoaWNzXEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuaCIKKwkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVxncmFwaGljc1xMYXlvdXRCb3hFeHRlbnQuaCIKIAkJCQkJPgogCQkJCTwv
RmlsZT4KIAkJCQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuY3BwIgorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXExheW91dEJveEV4dGVudC5jcHAiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+
CiAJCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGcmFj
dGlvbmFsTGF5b3V0UG9pbnQuaCIKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1xMYXlvdXRQb2ludC5oIgogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCi0JCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRnJhY3Rpb25hbExheW91dFJlY3Qu
Y3BwIgorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXExheW91dFJlY3Qu
Y3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cZ3JhcGhpY3NcRnJhY3Rpb25hbExheW91dFJlY3QuaCIKKwkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xMYXlvdXRSZWN0LmgiCiAJCQkJCT4KIAkJCQk8
L0ZpbGU+CiAJCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGlj
c1xGcmFjdGlvbmFsTGF5b3V0U2l6ZS5oIgorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3Jt
XGdyYXBoaWNzXExheW91dFNpemUuaCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQpA
QCAtMzg5NjMsMTAgKzM4OTYzLDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXExheW91dFR5cGVzLmgiCi0JCQkJPgotCQkJPC9G
aWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xQYWludEluZm8u
aCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTMwNCw2ICszMDQsMTMgQEAKIAkJMTQxMTVCNzIwOUY4NENENjAwQ0E0RkMxIC8qIEpTTm9k
ZUZpbHRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDExNUI3MDA5Rjg0Q0Q2MDBDQTRGQzEgLyogSlNOb2RlRmlsdGVyLmNwcCAqLzsgfTsKIAkJ
MTQxMTVCNzMwOUY4NENENjAwQ0E0RkMxIC8qIEpTTm9kZUZpbHRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxMTVCNzEwOUY4NENENjAwQ0E0RkMx
IC8qIEpTTm9kZUZpbHRlci5oICovOyB9OwogCQkxNDE5RDJDNTBDRUE2RjYxMDBGRjUwN0EgLyog
VHJlZVNoYXJlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQxOUQyQzQwQ0VBNkY2MTAwRkY1MDdBIC8qIFRyZWVTaGFyZWQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNDFEQzA0ODE2NDgzNDhGMDAz
NzFFNUEgLyogTGF5b3V0VW5pdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTQxREMwNDcxNjQ4MzQ4RjAwMzcxRTVBIC8qIExheW91dFVuaXQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNDFEQzA0RjE2
NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0Qm94RXh0ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MURDMDQ5MTY0ODM0QjkwMDM3MUU1QSAvKiBM
YXlvdXRCb3hFeHRlbnQuY3BwICovOyB9OworCQkxNDFEQzA1MDE2NDgzNEI5MDAzNzFFNUEgLyog
TGF5b3V0Qm94RXh0ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNDFEQzA0QTE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0Qm94RXh0ZW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTQxREMwNTEx
NjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dFBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDFEQzA0QjE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0
UG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkxNDFEQzA1MjE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0UmVjdC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDFEQzA0QzE2NDgzNEI5MDAzNzFF
NUEgLyogTGF5b3V0UmVjdC5jcHAgKi87IH07CisJCTE0MURDMDUzMTY0ODM0QjkwMDM3MUU1QSAv
KiBMYXlvdXRSZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNDFEQzA0RDE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0UmVjdC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0MURDMDU0MTY0ODM0Qjkw
MDM3MUU1QSAvKiBMYXlvdXRTaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDFEQzA0RTE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0U2l6ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0MjAxMUI2
MEEwMDMxMzMwMDgzMDNGOSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQyMDExQjQwQTAwMzEzMzAwODMw
M0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi87IH07CiAJCTE0MjAxMUI3MEEwMDMx
MzMwMDgzMDNGOSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MjAxMUI1MEEwMDMxMzMwMDgzMDNGOSAvKiBK
U0NTU1N0eWxlRGVjbGFyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNDJCOTdDOTEzMTM4OTQzMDA4QkVGNEIgLyogVGV4dENvbnRyb2xJ
bm5lckVsZW1lbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0MkI5N0M3MTMxMzg5NDMwMDhCRUY0QiAvKiBUZXh0Q29udHJvbElubmVyRWxlbWVu
dHMuY3BwICovOyB9OwpAQCAtMzEzLDEwICszMjAsNiBAQAogCQkxNDQ3NkFBODE1REM0QkIxMDAz
MDVEQjIgLyogV3JpdGluZ01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0NDc2QUE3MTVEQzRCQjEwMDMwNURCMiAvKiBXcml0aW5nTW9kZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0NDlFMjRD
MTA3RDRBODQwMEI1NzkzRiAvKiBKU0NhbGxiYWNrRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0OUUyNEExMDdENEE4NDAwQjU3OTNGIC8qIEpT
Q2FsbGJhY2tEYXRhLmggKi87IH07CiAJCTE0NDlFMjg3MTA3RDREQjQwMEI1NzkzRiAvKiBKU0Nh
bGxiYWNrRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNDQ5RTI4NjEwN0Q0REI0MDBCNTc5M0YgLyogSlNDYWxsYmFja0RhdGEuY3BwICovOyB9
OwotCQkxNDRGQ0U1MjE0RUM3OUJDMDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFVuaXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NEZDRTUxMTRF
Qzc5QkMwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0VW5pdC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTE0NEZDRTVEMTRFQzc5RTcwMDBEMTdB
MyAvKiBGcmFjdGlvbmFsTGF5b3V0U2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTQ0RkNFNTgxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxM
YXlvdXRTaXplLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKLQkJMTQ0RkNGRTAxNEVGMjUwOTAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NEZDRkRF
MTRFRjI1MDkwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAgKi87IH07Ci0JCTE0
NEZDRkUxMTRFRjI1MDkwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0RkNGREYxNEVGMjUwOTAw
MEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ2NEUwNkMxMzVFQzEwNjAwRkRCMDBBIC8qIEpT
TWVkaWFMaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0NjRFMDZCMTM1RUMxMDYwMEZEQjAwQSAvKiBKU01lZGlhTGlzdEN1c3RvbS5j
cHAgKi87IH07CiAJCTE0NkNDMTE1MTU2OTg4RTQwMDEwOUUzNyAvKiBMZW5ndGhCb3guY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2Q0MxMTMxNTY5
ODhCRDAwMTA5RTM3IC8qIExlbmd0aEJveC5jcHAgKi87IH07CiAJCTE0NzdFNzc2MEJGNDEzNEEw
MDE1Mjg3MiAvKiBQYWdlQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTQ3N0U3NzQwQkY0MTM0QTAwMTUyODcyIC8qIFBhZ2VDYWNoZS5jcHAg
Ki87IH07CkBAIC0zMjksOCArMzMyLDYgQEAKIAkJMTQ3OUZBRjIxMDlBRTM3NTAwREVENjU1IC8q
IFJlbmRlclJ1YnlSdW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0NzlGQUVBMTA5QUUzNzUwMERFRDY1NSAvKiBSZW5kZXJSdWJ5UnVuLmggKi87IH07
CiAJCTE0NzlGQUYzMTA5QUUzNzUwMERFRDY1NSAvKiBSZW5kZXJSdWJ5VGV4dC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDc5RkFFQjEwOUFFMzc1
MDBERUQ2NTUgLyogUmVuZGVyUnVieVRleHQuY3BwICovOyB9OwogCQkxNDc5RkFGNDEwOUFFMzc1
MDBERUQ2NTUgLyogUmVuZGVyUnVieVRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0NzlGQUVDMTA5QUUzNzUwMERFRDY1NSAvKiBSZW5kZXJSdWJ5
VGV4dC5oICovOyB9OwotCQkxNDgyRTBDNjE1NkMzNkRFMDA5NjUwNjUgLyogRnJhY3Rpb25hbExh
eW91dEJveEV4dGVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNDgyRTBDNDE1NkMzNkRFMDA5NjUwNjUgLyogRnJhY3Rpb25hbExheW91dEJveEV4
dGVudC5jcHAgKi87IH07Ci0JCTE0ODJFMEM3MTU2QzM2REUwMDk2NTA2NSAvKiBGcmFjdGlvbmFs
TGF5b3V0Qm94RXh0ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNDgyRTBDNTE1NkMzNkRFMDA5NjUwNjUgLyogRnJhY3Rpb25hbExheW91dEJveEV4
dGVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTE0OEFGREE1MEFGNTgzNjAwMDhDQzcwMCAvKiBFeGNlcHRpb25IYW5kbGVycy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4QUZEQTMwQUY1ODM2MDAw
OENDNzAwIC8qIEV4Y2VwdGlvbkhhbmRsZXJzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ4QUZEQTYwQUY1ODM2MDAwOENDNzAwIC8qIEV4Y2Vw
dGlvbkhhbmRsZXJzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTQ4QUZEQTQwQUY1ODM2MDAwOENDNzAwIC8qIEV4Y2VwdGlvbkhhbmRsZXJzLm1tICov
OyB9OwogCQkxNDk0N0ZGRDEyRjgwQ0QyMDBBMEY2MzEgLyogRG9jdW1lbnRPcmRlcmVkTWFwLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0OTQ3RkZC
MTJGODBDRDIwMEEwRjYzMSAvKiBEb2N1bWVudE9yZGVyZWRNYXAuY3BwICovOyB9OwpAQCAtOTIz
LDcgKzkyNCw2IEBACiAJCTMxOUU2OUI1MTMyOTlCQkQwMDRBQzkxQSAvKiBXZWJLaXRBbmltYXRp
b25MaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDMxOUU2OUFGMTMyOTlCQkQwMDRBQzkxQSAvKiBXZWJLaXRBbmltYXRpb25MaXN0LmNwcCAqLzsg
fTsKIAkJMzE5RTY5QjYxMzI5OUJCRDAwNEFDOTFBIC8qIFdlYktpdEFuaW1hdGlvbkxpc3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxOUU2OUIwMTMy
OTlCQkQwMDRBQzkxQSAvKiBXZWJLaXRBbmltYXRpb25MaXN0LmggKi87IH07CiAJCTMxOUZCRDVG
MTVEMkY0NjQwMDk2NDBBNiAvKiBDYWNoZWRJbWFnZUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE5RkJENUQxNUQyRjQ0NDAwOTY0MEE2IC8q
IENhY2hlZEltYWdlQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJMzFCODAxQkIxNUVDNThDNzAwQ0U2NDNEIC8qIExheW91dFR5cGVzSW5s
aW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODQ4OTRDQTgxNUVDNDg5NzAwQTQwNDgxIC8qIExheW91dFR5cGVzSW5saW5lTWV0aG9kcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTMxQzBG
RjIxMEU0Q0VCNkUwMDdENkZFNSAvKiBXZWJLaXRBbmltYXRpb25FdmVudC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUMwRkYxQjBFNENFQjZFMDA3
RDZGRTUgLyogV2ViS2l0QW5pbWF0aW9uRXZlbnQuY3BwICovOyB9OwogCQkzMUMwRkYyMjBFNENF
QjZFMDA3RDZGRTUgLyogV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQzBGRjFDMEU0Q0VCNkUwMDdENkZFNSAvKiBX
ZWJLaXRBbmltYXRpb25FdmVudC5oICovOyB9OwogCQkzMUMwRkYyNDBFNENFQjZFMDA3RDZGRTUg
LyogV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMxQzBGRjFFMEU0Q0VCNkUwMDdENkZFNSAvKiBXZWJLaXRUcmFu
c2l0aW9uRXZlbnQuY3BwICovOyB9OwpAQCAtNTI4OCw4ICs1Mjg4LDYgQEAKIAkJQjhEQkRCNEMx
MzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ4MTMwQjBGOEEwMEY1Q0RCMSAv
KiBTZXRTZWxlY3Rpb25Db21tYW5kLmggKi87IH07CiAJCUI4REJEQjREMTMwQjBGOEEwMEY1Q0RC
MSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ5MTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVs
bGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCAqLzsgfTsKIAkJQjhEQkRCNEUxMzBCMEY4QTAwRjVD
REIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjRBMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVs
bGluZ0NvcnJlY3Rpb25Db21tYW5kLmggKi87IH07Ci0JCUJBQjFDMDZBMTRGQzM2NzkwMDQyMzNG
QyAvKiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0NEZDRTU0MTRFQzc5RTcwMDBEMTdBMyAvKiBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQlCQUNGMjkwMTEzQjJBMEQ1MDA3ODFGOTAgLyogTGF5b3V0VHlwZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJBQ0YyOTAwMTNCMkEwRDUw
MDc4MUY5MCAvKiBMYXlvdXRUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUJDMDBGMDA0MEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAwRUZGRTBF
MEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5oICovOyB9OwogCQlCQzAwRjAwNTBFMEExODU1MDBG
RDA0RTMgLyogRE9NRmlsZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDMDBFRkZGMEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLm1tICovOyB9Owog
CQlCQzAwRjAwNjBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZUludGVybmFsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAwRjAwMDBFMEExODU1MDBG
RDA0RTMgLyogRE9NRmlsZUludGVybmFsLmggKi87IH07CkBAIC03Mzg4LDYgKzczODYsMTMgQEAK
IAkJMTQxOUQyQzQwQ0VBNkY2MTAwRkY1MDdBIC8qIFRyZWVTaGFyZWQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVHJlZVNoYXJlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxNDFCOTRFNTA5RUM0MjIzMDAwRTk0MTMgLyogTW91c2VFdmVudC5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IE1vdXNlRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxNDFCOTRFRTA5RUM0MjVBMDAwRTk0MTMgLyogVUlFdmVudC5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IFVJRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkxNDFEQzA0NzE2NDgzNDhGMDAzNzFFNUEgLyogTGF5b3V0VW5pdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRVbml0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTE0MURDMDQ5MTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRCb3hFeHRlbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0Qm94RXh0ZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQxREMwNEExNjQ4MzRCOTAwMzcxRTVBIC8q
IExheW91dEJveEV4dGVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlv
dXRCb3hFeHRlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQxREMwNEIxNjQ4
MzRCOTAwMzcxRTVBIC8qIExheW91dFBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IExheW91dFBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0MURD
MDRDMTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRSZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dFJlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxNDFEQzA0RDE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0UmVjdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRSZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTE0MURDMDRFMTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRTaXplLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dFNpemUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMTQyMDExQUUwQTAwMzExNzAwODMwM0Y5IC8qIENTU1N0eWxlRGVj
bGFyYXRpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBDU1NTdHlsZURlY2xhcmF0aW9u
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQyMDExQjQwQTAwMzEzMzAwODMw
M0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNDU1NTdHlsZURlY2xhcmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMTQyMDExQjUwQTAwMzEzMzAwODMwM0Y5IC8qIEpTQ1NTU3R5bGVEZWNs
YXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDU1NTdHlsZURl
Y2xhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03Mzk4LDExICs3NDAz
LDYgQEAKIAkJMTQ0NzZBQTcxNURDNEJCMTAwMzA1REIyIC8qIFdyaXRpbmdNb2RlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRpbmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0NDlFMjRBMTA3RDRBODQwMEI1NzkzRiAvKiBKU0NhbGxiYWNrRGF0
YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbGxiYWNrRGF0YS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDQ5RTI4NjEwN0Q0REI0MDBCNTc5M0YgLyog
SlNDYWxsYmFja0RhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNDYWxsYmFja0RhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxNDRGQ0U1
MTE0RUM3OUJDMDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFVuaXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRnJhY3Rpb25hbExheW91dFVuaXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMTQ0RkNFNTQxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxM
YXlvdXRQb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTQ0RkNFNTgxNEVD
NzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRTaXplLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZyYWN0aW9uYWxMYXlvdXRTaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTE0NEZDRkRFMTRFRjI1MDkwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0
UmVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGcmFjdGlvbmFs
TGF5b3V0UmVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0NEZDRkRGMTRF
RjI1MDkwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBGcmFjdGlvbmFsTGF5b3V0UmVjdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDY0RTA2QjEzNUVDMTA2MDBGREIwMEEgLyogSlNNZWRpYUxpc3RDdXN0
b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNNZWRpYUxpc3RD
dXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDZDQzExMzE1Njk4OEJE
MDAxMDlFMzcgLyogTGVuZ3RoQm94LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IExlbmd0aEJveC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NzdF
Nzc0MEJGNDEzNEEwMDE1Mjg3MiAvKiBQYWdlQ2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC03NDE2LDggKzc0MTYsNiBAQAogCQkxNDc5RkFFQjEwOUFFMzc1MDBERUQ2NTUgLyog
UmVuZGVyUnVieVRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVuZGVyUnVieVRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDc5RkFF
QzEwOUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieVRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyUnVieVRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTQ4MTNCRjMwOUVERjg4RTAwRjc1N0UxIC8qIElETFBhcnNlci5wbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0LnNjcmlwdC5wZXJsOyBuYW1lID0gSURMUGFyc2VyLnBtOyBwYXRoID0gc2NyaXB0cy9J
RExQYXJzZXIucG07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0ODJFMEM0MTU2QzM2
REUwMDk2NTA2NSAvKiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxNDgyRTBDNTE1NkMzNkRFMDA5NjUwNjUgLyog
RnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTE0OEFGREEzMEFGNTgzNjAwMDhDQzcwMCAvKiBFeGNlcHRpb25IYW5kbGVycy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjZXB0aW9uSGFuZGxlcnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4QUZEQTQwQUY1ODM2MDAwOENDNzAwIC8qIEV4
Y2VwdGlvbkhhbmRsZXJzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IEV4Y2VwdGlvbkhhbmRsZXJzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NDk0N0ZGQjEyRjgwQ0QyMDBBMEY2MzEgLyogRG9jdW1lbnRPcmRlcmVkTWFwLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERvY3VtZW50T3JkZXJlZE1hcC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05Mzg1LDcgKzkzODMsNiBAQAogCQk4NDg1MjI4
NzExOTAxNzNDMDA2RURDN0YgLyogU1ZHVktlcm5FbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1ZLZXJuRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTg0ODUyMjg4MTE5MDE3M0MwMDZFREM3RiAvKiBTVkdWS2VybkVsZW1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVktlcm5FbGVtZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0ODUyMjg5MTE5MDE3M0MwMDZFREM3RiAv
KiBTVkdWS2VybkVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNWR1ZLZXJuRWxl
bWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg0ODk0Q0E4MTVFQzQ4OTcw
MEE0MDQ4MSAvKiBMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTg0OUY3Nzc1MEVGRUM2MjAwMDkwODQ5RCAvKiBTdHJva2VTdHlsZUFw
cGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Ryb2tlU3R5bGVBcHBs
aWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0QTgxRjNCMEZDN0RGRjAwMDk1
NTMwMCAvKiBTb3VyY2VBbHBoYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBTb3VyY2VBbHBoYS5jcHA7IHBhdGggPSBmaWx0ZXJzL1NvdXJjZUFscGhhLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODRBODFGM0MwRkM3REZGMDAwOTU1MzAwIC8qIFNv
dXJjZUFscGhhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNvdXJjZUFscGhh
Lmg7IHBhdGggPSBmaWx0ZXJzL1NvdXJjZUFscGhhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMjYyMiw3ICsxMjYxOSw2IEBACiAJCUI4REJEQjQ4MTMwQjBGOEEwMEY1Q0RCMSAv
KiBTZXRTZWxlY3Rpb25Db21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNldFNlbGVjdGlvbkNvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjhE
QkRCNDkxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3BlbGxpbmdDb3JyZWN0aW9uQ29t
bWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI4REJEQjRBMTMwQjBGOEEw
MEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQkFDRjI5MDAxM0IyQTBENTAwNzgxRjkwIC8qIExheW91dFR5cGVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dFR5cGVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDBFRkZFMEUwQTE4NTUwMEZEMDRFMyAvKiBET01G
aWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUZpbGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMEVGRkYwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZp
bGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01GaWxlLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAwRjAwMDBFMEExODU1MDBGRDA0RTMg
LyogRE9NRmlsZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERP
TUZpbGVJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTk5ODUsMTIg
KzE5OTgxLDEyIEBACiAJCQkJMzcyMDIxOTgxMDYyMTNDNjAwRjI1QzRCIC8qIEZvbnRTbW9vdGhp
bmdNb2RlLmggKi8sCiAJCQkJMzc4NEMzNEEwRTExQUEzNDAwN0Q4RDQ4IC8qIEZvbnRUcmFpdHNN
YXNrLmggKi8sCiAJCQkJQkNFNDQxMzUxMkY3NDkwQjAwOUI4NEI4IC8qIEZvbnRXaWR0aFZhcmlh
bnQuaCAqLywKLQkJCQkxNDgyRTBDNDE1NkMzNkRFMDA5NjUwNjUgLyogRnJhY3Rpb25hbExheW91
dEJveEV4dGVudC5jcHAgKi8sCi0JCQkJMTQ4MkUwQzUxNTZDMzZERTAwOTY1MDY1IC8qIEZyYWN0
aW9uYWxMYXlvdXRCb3hFeHRlbnQuaCAqLywKLQkJCQkxNDRGQ0U1NDE0RUM3OUU3MDAwRDE3QTMg
LyogRnJhY3Rpb25hbExheW91dFBvaW50LmggKi8sCi0JCQkJMTQ0RkNGREUxNEVGMjUwOTAwMEQx
N0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcCAqLywKLQkJCQkxNDRGQ0ZERjE0RUYyNTA5
MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFJlY3QuaCAqLywKLQkJCQkxNDRGQ0U1ODE0RUM3
OUU3MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFNpemUuaCAqLywKKwkJCQkxNDFEQzA0OTE2
NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0Qm94RXh0ZW50LmNwcCAqLywKKwkJCQkxNDFEQzA0QTE2
NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0Qm94RXh0ZW50LmggKi8sCisJCQkJMTQxREMwNEIxNjQ4
MzRCOTAwMzcxRTVBIC8qIExheW91dFBvaW50LmggKi8sCisJCQkJMTQxREMwNEMxNjQ4MzRCOTAw
MzcxRTVBIC8qIExheW91dFJlY3QuY3BwICovLAorCQkJCTE0MURDMDREMTY0ODM0QjkwMDM3MUU1
QSAvKiBMYXlvdXRSZWN0LmggKi8sCisJCQkJMTQxREMwNEUxNjQ4MzRCOTAwMzcxRTVBIC8qIExh
eW91dFNpemUuaCAqLywKIAkJCQk0RkIzOTBBQzE1RUY2MUYzMDA3QUQ1MUYgLyogR2VuZXJhdGVk
SW1hZ2UuY3BwICovLAogCQkJCUJDMjNGMERBMERBRkY0QTQwMDlGREM5MSAvKiBHZW5lcmF0ZWRJ
bWFnZS5oICovLAogCQkJCUJDRTA0Qzg5MERBRkY3QTAwMDdBMEY0MSAvKiBHZW5lcmF0b3IuaCAq
LywKQEAgLTIwODg4LDcgKzIwODg0LDcgQEAKIAkJCQlDNTdGRURFMDEyMTJFRTlDMDA5N0JFNjUg
LyogRmlsZVN5c3RlbS5jcHAgKi8sCiAJCQkJNTE0QjNGNzIwQzcyMjA0NzAwMDUzMERGIC8qIEZp
bGVTeXN0ZW0uaCAqLywKIAkJCQlCQzA3M0JBOTBDMzk5QjFGMDAwRjU5NzkgLyogRmxvYXRDb252
ZXJzaW9uLmggKi8sCi0JCQkJMTQ0RkNFNTExNEVDNzlCQzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxM
YXlvdXRVbml0LmggKi8sCisJCQkJMTQxREMwNDcxNjQ4MzQ4RjAwMzcxRTVBIC8qIExheW91dFVu
aXQuaCAqLywKIAkJCQlBODc0OEJERjEyQ0JGMkRDMDAxRkJBNDEgLyogSGFzaFRvb2xzLmggKi8s
CiAJCQkJRDZGREFFRjIxNDlDMDYxOTAwMzdCMUUxIC8qIEhpc3RvZ3JhbVN1cHBvcnQuY3BwICov
LAogCQkJCUQ2MzBFMkFCMTQ5QkYzNDQwMDVCMkY5MyAvKiBIaXN0b2dyYW1TdXBwb3J0LmggKi8s
CkBAIC0yMTQ3MCw4ICsyMTQ2Niw2IEBACiAJCQkJQTEyMEFDQTAxM0Y5OTgzNzAwRkU0QUM3IC8q
IExheW91dFJlcGFpbnRlci5oICovLAogCQkJCTJEOTA2NjA0MEJFMTQxRDQwMDk1Njk5OCAvKiBM
YXlvdXRTdGF0ZS5jcHAgKi8sCiAJCQkJMkQ5MDY2MDUwQkUxNDFENDAwOTU2OTk4IC8qIExheW91
dFN0YXRlLmggKi8sCi0JCQkJQkFDRjI5MDAxM0IyQTBENTAwNzgxRjkwIC8qIExheW91dFR5cGVz
LmggKi8sCi0JCQkJODQ4OTRDQTgxNUVDNDg5NzAwQTQwNDgxIC8qIExheW91dFR5cGVzSW5saW5l
TWV0aG9kcy5oICovLAogCQkJCTM3NzRBQkEzMEZBMjFFQjQwMEFEN0RFOSAvKiBPdmVybGFwVGVz
dFJlcXVlc3RDbGllbnQuaCAqLywKIAkJCQk5Mzc3QUI5RjE1REVGRUVGMDAzMUZEMDQgLyogUGFn
aW5hdGlvbi5oICovLAogCQkJCTA4ODUwNjdEMTFEQTA0NUIwMDE4MkI5OCAvKiBQYWludEluZm8u
aCAqLywKQEAgLTIzNjA4LDExICsyMzYwMiw2IEBACiAJCQkJNjU2RDM3M0EwQURCQTVERTAwQTQ1
NTREIC8qIEZvcm1TdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE4ODVCOTMxMUI2RkRBNjAw
MzM4M0JCIC8qIEZvcm1TdWJtaXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzVDNDc2RDA5
QUM0RDYzMDBBNkFBQjQgLyogRm91bmRhdGlvbkV4dHJhcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MTQ4MkUwQzcxNTZDMzZERTAwOTY1MDY1IC8qIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuaCBp
biBIZWFkZXJzICovLAotCQkJCUJBQjFDMDZBMTRGQzM2NzkwMDQyMzNGQyAvKiBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTE0NEZDRkUxMTRFRjI1MDkwMDBEMTdB
MyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTQ0RkNFNUQx
NEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRTaXplLmggaW4gSGVhZGVycyAqLywK
LQkJCQkxNDRGQ0U1MjE0RUM3OUJDMDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFVuaXQuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4NTMxMjNEMTFEMDQ3MUIwMEQ0RDA3NyAvKiBGcmFnbWVudFNj
cmlwdGluZ1Blcm1pc3Npb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1QkYwMjJGMDk3NDgxNjMw
MEM0MzE5NiAvKiBGcmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCMDcwRDMxMzBBNDA5QzAw
QTM3NjNDIC8qIEZyYW1lQWN0aW9uU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTI0NDkw
LDggKzI0NDc5LDExIEBACiAJCQkJQTEyNTM4RDQxM0Y5QjYwQTAwMDI0NzU0IC8qIExheW91dFJl
cGFpbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ5MDY2MDcwQkUxNDFENDAwOTU2OTk4IC8q
IExheW91dFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlENjMwRTJBQzE0OUJGMzQ0MDA1QjJG
OTMgLyogTGF5b3V0VGVzdFN1cHBvcnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUJBQ0YyOTAxMTNC
MkEwRDUwMDc4MUY5MCAvKiBMYXlvdXRUeXBlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMzFCODAx
QkIxNUVDNThDNzAwQ0U2NDNEIC8qIExheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMTQxREMwNDgxNjQ4MzQ4RjAwMzcxRTVBIC8qIExheW91dFVuaXQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTE0MURDMDUwMTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRCb3hFeHRl
bnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0MURDMDUxMTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlv
dXRQb2ludC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTQxREMwNTMxNjQ4MzRCOTAwMzcxRTVBIC8q
IExheW91dFJlY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0MURDMDU0MTY0ODM0QjkwMDM3MUU1
QSAvKiBMYXlvdXRTaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTJERDhGNTBEOTFFNkFGMDAw
Rjg5RUUgLyogTGVnYWN5V2ViQXJjaGl2ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFNjVCRUIw
RUFDREYxNjAwN0U0NTMzIC8qIExlbmd0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNGRjY0OTEw
RUFEMTVDMjAwQzFENkY3IC8qIExlbmd0aEJveC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjgzNCw4
ICsyNjgyNiw2IEBACiAJCQkJNTE0Qzc2NEYwQ0U5MjM0RTAwN0VGM0NEIC8qIEZvcm1EYXRhU3Ry
ZWFtTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU2RDM3M0IwQURCQTVERTAwQTQ1NTREIC8q
IEZvcm1TdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTg4NUI5NDExQjZGREE2MDAzMzgz
QkIgLyogRm9ybVN1Ym1pc3Npb24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMTQ4MkUwQzYxNTZD
MzZERTAwOTY1MDY1IC8qIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJMTQ0RkNGRTAxNEVGMjUwOTAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1QkYwMjJFMDk3NDgxNjMwMEM0MzE5NiAvKiBGcmFt
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0IwNzBEMjEzMEE0MDlDMDBBMzc2M0MgLyogRnJh
bWVBY3Rpb25TY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc0QTg2MjIxNEI3QURC
QjAwM0ZEQzc2IC8qIEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlci5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTI3Nzk2LDYgKzI3Nzg2LDggQEAKIAkJCQk5MzUyMDg0NTA5QkQ0M0I5MDBGMjAzOEQgLyog
TGFuZ3VhZ2UubW0gaW4gU291cmNlcyAqLywKIAkJCQkyOTE3QjU2MTE0NzM0OTZDMDA1MkM5RDAg
LyogTGF5ZXJGbHVzaFNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyOTE3QjU2NjE0
NzM0OTk1MDA1MkM5RDAgLyogTGF5ZXJGbHVzaFNjaGVkdWxlck1hYy5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkxNDFEQzA0RjE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0Qm94RXh0ZW50LmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTE0MURDMDUyMTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRSZWN0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExMjBBQ0E0MTNGOTk4Q0EwMEZFNEFDNyAvKiBMYXlv
dXRSZXBhaW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ5MDY2MDYwQkUxNDFENDAwOTU2
OTk4IC8qIExheW91dFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUQ2RkRBRUYzMTQ5QzA2
MTkwMDM3QjFFNSAvKiBMYXlvdXRUZXN0U3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3QuY3BwCShyZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjM0LDcgKzIzNCw3IEBAIExheW91dFJlY3QgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmJvdW4K
ICAgICBmb3IgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBvc2l0aW9uUHJvdmlkZXIgPSBwYXJlbnRP
YmplY3QoKTsgcG9zaXRpb25Qcm92aWRlcjsgcG9zaXRpb25Qcm92aWRlciA9IHBvc2l0aW9uUHJv
dmlkZXItPnBhcmVudE9iamVjdCgpKSB7CiAgICAgICAgIGlmIChwb3NpdGlvblByb3ZpZGVyLT5p
c0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkgewogICAgICAgICAgICAgTGF5b3V0UmVjdCBw
YXJlbnRSZWN0ID0gcG9zaXRpb25Qcm92aWRlci0+ZWxlbWVudFJlY3QoKTsKLSAgICAgICAgICAg
IGJvdW5kaW5nQm94LnNldFNpemUoTGF5b3V0U2l6ZShwYXJlbnRSZWN0LndpZHRoKCksIEZyYWN0
aW9uYWxMYXlvdXRVbml0KHN0ZDo6bWluKDEwLjBmLCBwYXJlbnRSZWN0LmhlaWdodCgpLnRvRmxv
YXQoKSkpKSk7CisgICAgICAgICAgICBib3VuZGluZ0JveC5zZXRTaXplKExheW91dFNpemUocGFy
ZW50UmVjdC53aWR0aCgpLCBMYXlvdXRVbml0KHN0ZDo6bWluKDEwLjBmLCBwYXJlbnRSZWN0Lmhl
aWdodCgpLnRvRmxvYXQoKSkpKSk7CiAgICAgICAgICAgICBib3VuZGluZ0JveC5zZXRMb2NhdGlv
bihwYXJlbnRSZWN0LmxvY2F0aW9uKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0LmgJKHJldmlzaW9uIDEzMzY3NykKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNyArMzAsNyBAQAogI2RlZmluZSBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdF9oCiAKICNpbmNs
dWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNp
bmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgJKHJldmlzaW9uIDEzMzY3NykKKysrIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw4ICszMSw3IEBACiAjZGVmaW5lIEFjY2Vzc2liaWxpdHlPYmplY3RfaAogCiAjaW5jbHVk
ZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFJlY3QuaCIKLSNpbmNs
dWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJU
ZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKICNpbmNsdWRlICJW
aXNpYmxlU2VsZWN0aW9uLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAkocmV2aXNpb24gMTMzNjc3
KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNkZWZpbmUgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdF9oCiAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5o
IgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9MZW5ndGhGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9MZW5ndGhGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAxMzM2NzcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvTGVuZ3RoRnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQs
NyArMjQsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkxlbmd0aEZ1bmN0aW9u
cy5oIgogCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRVbml0Lmgi
CiAjaW5jbHVkZSAiTGVuZ3RoLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogCkBAIC01NSwy
MCArNTUsMjAgQEAgTGF5b3V0VW5pdCBtaW5pbXVtVmFsdWVGb3JMZW5ndGgoY29uc3QgTAogICAg
IGNhc2UgVmlld3BvcnRQZXJjZW50YWdlV2lkdGg6CiAgICAgICAgIGlmIChyZW5kZXJWaWV3KQog
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PExheW91dFVuaXQ+KHJlbmRlclZpZXctPnZp
ZXdwb3J0U2l6ZSgpLndpZHRoKCkgKiBsZW5ndGgudmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkg
LyAxMDAuMGYpOwotICAgICAgICByZXR1cm4gWkVST19MQVlPVVRfVU5JVDsKKyAgICAgICAgcmV0
dXJuIDA7CiAgICAgY2FzZSBWaWV3cG9ydFBlcmNlbnRhZ2VIZWlnaHQ6CiAgICAgICAgIGlmIChy
ZW5kZXJWaWV3KQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PExheW91dFVuaXQ+KHJl
bmRlclZpZXctPnZpZXdwb3J0U2l6ZSgpLmhlaWdodCgpICogbGVuZ3RoLnZpZXdwb3J0UGVyY2Vu
dGFnZUxlbmd0aCgpIC8gMTAwLjBmKTsKLSAgICAgICAgcmV0dXJuIFpFUk9fTEFZT1VUX1VOSVQ7
CisgICAgICAgIHJldHVybiAwOwogICAgIGNhc2UgVmlld3BvcnRQZXJjZW50YWdlTWluOgogICAg
ICAgICBpZiAocmVuZGVyVmlldykgewogICAgICAgICAgICAgSW50U2l6ZSB2aWV3cG9ydFNpemUg
PSByZW5kZXJWaWV3LT52aWV3cG9ydFNpemUoKTsKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxMYXlvdXRVbml0PihzdGQ6Om1pbih2aWV3cG9ydFNpemUud2lkdGgoKSwgdmlld3BvcnRT
aXplLmhlaWdodCgpKSAqIGxlbmd0aC52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSAvIDEwMC4w
Zik7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAg
IHJldHVybiAwOwogICAgIGNhc2UgRmlsbEF2YWlsYWJsZToKICAgICBjYXNlIEF1dG86Ci0gICAg
ICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOworICAgICAgICByZXR1cm4gMDsKICAgICBjYXNl
IFJlbGF0aXZlOgogICAgIGNhc2UgSW50cmluc2ljOgogICAgIGNhc2UgTWluSW50cmluc2ljOgpA
QCAtNzcsMTAgKzc3LDEwIEBAIExheW91dFVuaXQgbWluaW11bVZhbHVlRm9yTGVuZ3RoKGNvbnN0
IEwKICAgICBjYXNlIEZpdENvbnRlbnQ6CiAgICAgY2FzZSBVbmRlZmluZWQ6CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gWkVST19MQVlPVVRfVU5JVDsKKyAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiBaRVJPX0xBWU9VVF9VTklUOworICAgIHJldHVybiAwOwogfQogCiBMYXlvdXRVbml0IHZh
bHVlRm9yTGVuZ3RoKGNvbnN0IExlbmd0aCYgbGVuZ3RoLCBMYXlvdXRVbml0IG1heGltdW1WYWx1
ZSwgUmVuZGVyVmlldyogcmVuZGVyVmlldywgYm9vbCByb3VuZFBlcmNlbnRhZ2VzKQpAQCAtMTA0
LDEwICsxMDQsMTAgQEAgTGF5b3V0VW5pdCB2YWx1ZUZvckxlbmd0aChjb25zdCBMZW5ndGgmCiAg
ICAgY2FzZSBGaXRDb250ZW50OgogICAgIGNhc2UgVW5kZWZpbmVkOgogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAg
IHJldHVybiAwOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
WkVST19MQVlPVVRfVU5JVDsKKyAgICByZXR1cm4gMDsKIH0KIAogLy8gRklYTUU6IHdoZW4gc3Vi
cGl4ZWwgbGF5b3V0IGlzIHN1cHBvcnRlZCB0aGlzIGNvcHkgb2YgZmxvYXRWYWx1ZUZvckxlbmd0
aCgpIGNhbiBiZSByZW1vdmVkLiBTZWUgYnVnIDcxMTQzLgpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL0xlbmd0aEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9M
ZW5ndGhGdW5jdGlvbnMuaAkocmV2aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L0xlbmd0aEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMCArMjQsOSBAQAogI2lm
bmRlZiBMZW5ndGhGdW5jdGlvbnNfaAogI2RlZmluZSBMZW5ndGhGdW5jdGlvbnNfaAogCi0jaW5j
bHVkZSAiTGF5b3V0VHlwZXMuaCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBMYXlv
dXRVbml0OwogY2xhc3MgUmVuZGVyVmlldzsKIHN0cnVjdCBMZW5ndGg7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgIkljb25V
UkwuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb3VudGVycy5oIgogI2luY2x1ZGUgIkludFJlY3Qu
aCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgogI2luY2x1ZGUgIk11dGF0aW9uT2JzZXJ2ZXIu
aCIKICNpbmNsdWRlICJQYWdlVmlzaWJpbGl0eVN0YXRlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1T
Y3JlZW4uaCIKQEAgLTEwNiw2ICsxMDUsOCBAQCBjbGFzcyBIVE1MTmFtZUNvbGxlY3Rpb247CiBj
bGFzcyBIaXRUZXN0UmVxdWVzdDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBJbnRQb2lu
dDsKK2NsYXNzIExheW91dFBvaW50OworY2xhc3MgTGF5b3V0UmVjdDsKIGNsYXNzIERPTVdyYXBw
ZXJXb3JsZDsKIGNsYXNzIEpTTm9kZTsKIGNsYXNzIExvY2FsZTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgJKHJldmlzaW9uIDEzMzY3NykK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksMTIgKzI5LDEzIEBACiAKICNpbmNsdWRlICJEb2N1bWVudE1hcmtlci5o
IgogI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK2NsYXNzIExheW91dFBvaW50OworY2xhc3MgTGF5b3V0UmVjdDsKIGNsYXNz
IE5vZGU7CiBjbGFzcyBSYW5nZTsKIGNsYXNzIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXI7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCShyZXZpc2lvbiAxMzM2NzcpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEy
NSw3ICsxMjUsNyBAQCBwdWJsaWM6CiAKIGlubGluZSBJbnRTaXplIGRlZmF1bHRNaW5pbXVtU2l6
ZUZvclJlc2l6aW5nKCkKIHsKLSAgICByZXR1cm4gSW50U2l6ZShNQVhfTEFZT1VUX1VOSVQsIE1B
WF9MQVlPVVRfVU5JVCk7CisgICAgcmV0dXJuIEludFNpemUoTGF5b3V0VW5pdDo6bWF4KCksIExh
eW91dFVuaXQ6Om1heCgpKTsKIH0KIAogaW5saW5lIEVsZW1lbnRSYXJlRGF0YTo6RWxlbWVudFJh
cmVEYXRhKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZVJlbGF0ZWRFdmVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZVJlbGF0ZWRFdmVudC5oCShyZXZp
c2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTW91c2VSZWxhdGVkRXZlbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2lmbmRlZiBNb3VzZVJlbGF0ZWRFdmVu
dF9oCiAjZGVmaW5lIE1vdXNlUmVsYXRlZEV2ZW50X2gKIAotI2luY2x1ZGUgIkxheW91dFR5cGVz
SW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dFBvaW50LmgiCiAjaW5jbHVkZSAiVUlF
dmVudFdpdGhLZXlTdGF0ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmgJKHJldmlzaW9uIDEzMzY3NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDkgKzI3LDggQEAKIAogI2luY2x1ZGUgIkVkaXRpbmdCb3VuZGFyeS5o
IgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFJl
Y3QuaCIKICNpbmNsdWRlICJLVVJMSGFzaC5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisj
aW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIk11dGF0aW9uT2JzZXJ2ZXIuaCIKICNp
bmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgogI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJs
ZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RvdWNoLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL1RvdWNoLmgJKHJldmlzaW9uIDEzMzY3NykKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9Ub3VjaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaWYgRU5B
QkxFKFRPVUNIX0VWRU5UUykKIAogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSAi
TGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTGF5b3V0UG9pbnQuaCIKICNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDEzMzY3NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIHN0YXRpYyBpbmxpbmUgTGF5b3V0VW5pdCBOb1hQ
b3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbigpCiB7Ci0gICAgcmV0dXJuIE1JTl9MQVlPVVRf
VU5JVDsKKyAgICByZXR1cm4gTGF5b3V0VW5pdDo6bWluKCk7CiB9CiAKIENhcmV0QmFzZTo6Q2Fy
ZXRCYXNlKENhcmV0VmlzaWJpbGl0eSB2aXNpYmlsaXR5KQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uaAkocmV2aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3
IEBACiAKICNpbmNsdWRlICJFZGl0aW5nU3R5bGUuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0j
aW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVk
ZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJTY3JvbGxCZWhhdmlvci5oIgogI2luY2x1ZGUgIlRpbWVy
LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uaAkocmV2
aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDExICszMiwxMSBAQAogI2RlZmluZSBSZW5kZXJlZFBv
c2l0aW9uX2gKIAogI2luY2x1ZGUgIklubGluZUJveC5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVz
LmgiCiAjaW5jbHVkZSAiVGV4dEFmZmluaXR5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
Y2xhc3MgTGF5b3V0VW5pdDsKIGNsYXNzIFBvc2l0aW9uOwogY2xhc3MgUmVuZGVyT2JqZWN0Owog
Y2xhc3MgVmlzaWJsZVBvc2l0aW9uOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXJl
YUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxl
bWVudC5oCShyZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcmVh
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAjZGVmaW5lIEhUTUxB
cmVhRWxlbWVudF9oCiAKICNpbmNsdWRlICJIVE1MQW5jaG9yRWxlbWVudC5oIgotI2luY2x1ZGUg
IkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgPHd0Zi9P
d25BcnJheVB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmgJKHJldmlzaW9uIDEzMzY3NykKKysrIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmxvYXRR
dWFkLmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0Lmgi
CiAKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5l
QWdlbnQuaAkocmV2aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclRpbWVsaW5lQWdlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAog
I2luY2x1ZGUgIkluc3BlY3RvckJhc2VBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250
ZW5kLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlw
ZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1JbnN0cnVt
ZW50YXRpb24uaCIKICNpbmNsdWRlICJTY3JpcHRHQ0V2ZW50LmgiCiAjaW5jbHVkZSAiU2NyaXB0
R0NFdmVudExpc3RlbmVyLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxp
bmVSZWNvcmRGYWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcAkocmV2aXNpb24gMTMzNjc3KQorKysgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkluc3Bl
Y3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBl
c0lubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiUmVz
b3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUg
IlNjcmlwdENhbGxTdGFjay5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVs
aW5lUmVjb3JkRmFjdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaAkocmV2aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw3ICszMSw3IEBACiAjaWZuZGVmIFRpbWVsaW5lUmVjb3JkRmFjdG9yeV9oCiAjZGVmaW5l
IFRpbWVsaW5lUmVjb3JkRmFjdG9yeV9oCiAKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2lu
Y2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1h
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1h
Z2UuaAkocmV2aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZEltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJD
YWNoZWRSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJJ
bnRSZWN0LmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVk
ZSAiTGF5b3V0U2l6ZS5oIgogI2luY2x1ZGUgIlNWR0ltYWdlQ2FjaGUuaCIKICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaAko
cmV2aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBGb2N1c0NvbnRyb2xs
ZXJfaAogCiAjaW5jbHVkZSAiRm9jdXNEaXJlY3Rpb24uaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBl
cy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgog
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkocmV2aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAog
I2luY2x1ZGUgIkFkanVzdFZpZXdTaXplT3JOb3QuaCIKICNpbmNsdWRlICJDb2xvci5oIgogI2lu
Y2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlv
dXRSZWN0LmgiCiAjaW5jbHVkZSAiUGFnaW5hdGlvbi5oIgogI2luY2x1ZGUgIlBhaW50UGhhc2Uu
aCIKICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAkocmV2aXNpb24g
MTMzNjc3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCiAjaW5jbHVkZSAi
RmluZE9wdGlvbnMuaCIKICNpbmNsdWRlICJMYXlvdXRNaWxlc3RvbmVzLmgiCi0jaW5jbHVkZSAi
TGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiUGFnZVZp
c2liaWxpdHlTdGF0ZS5oIgogI2luY2x1ZGUgIlBhZ2luYXRpb24uaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVNjcmVlbi5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24u
aAkocmV2aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdh
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiAKICNpbmNsdWRlICJGb2N1
c0RpcmVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgotI2luY2x1
ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIk5v
ZGUuaCIKIAogI2luY2x1ZGUgPGxpbWl0cz4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAkocmV2aXNpb24gMTMzNjc3
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBTY3JvbGxpbmdDb29y
ZGluYXRvcl9oCiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMu
aCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKICNpbmNsdWRlICJUaW1lci5oIgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRnJhY3Rpb25hbExheW91dFVuaXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GcmFjdGlvbmFsTGF5b3V0VW5pdC5oCShyZXZp
c2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GcmFjdGlvbmFsTGF5b3V0
VW5pdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24u
Ci0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRnJhY3Rpb25h
bExheW91dFVuaXRfaAotI2RlZmluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdF9oCi0KLSNpbmNsdWRl
IDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1
ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3Rm
L1NhdHVyYXRlZEFyaXRobWV0aWMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWZkZWYg
TkRFQlVHCi0KLSNkZWZpbmUgUkVQT1JUX09WRVJGTE9XKGRvZXNPdmVyZmxvdykgKCh2b2lkKTAp
Ci0KLSNlbHNlCi0KLSNkZWZpbmUgUkVQT1JUX09WRVJGTE9XKGRvZXNPdmVyZmxvdykgZG8gXAot
ICAgIGlmICghKGRvZXNPdmVyZmxvdykpIHsgXAotICAgICAgICBXVEZSZXBvcnRFcnJvcihfX0ZJ
TEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICIhKCVzKSIsICNkb2VzT3ZlcmZs
b3cpOyBcCi0gICAgfSBcCi13aGlsZSAoMCkKLQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU1VCUElY
RUxfTEFZT1VUKQotc3RhdGljIGNvbnN0IGludCBrRml4ZWRQb2ludERlbm9taW5hdG9yID0gNjQ7
Ci0jZWxzZQotc3RhdGljIGNvbnN0IGludCBrRml4ZWRQb2ludERlbm9taW5hdG9yID0gMTsKLSNl
bmRpZgotY29uc3QgaW50IGludE1heEZvckxheW91dFVuaXQgPSBJTlRfTUFYIC8ga0ZpeGVkUG9p
bnREZW5vbWluYXRvcjsKLWNvbnN0IGludCBpbnRNaW5Gb3JMYXlvdXRVbml0ID0gSU5UX01JTiAv
IGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0KLWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRVbml0IHsK
LXB1YmxpYzoKLSAgICAvLyBGSVhNRTogSWRlYWxseSB3ZSB3b3VsZCBoYXZlIHNpemVfdCB2ZXJz
aW9ucyBvZiB0aGUgY29uc3RydWN0b3IgYW5kIG9wZXJhdG9ycy4KLSAgICAvLyBIb3dldmVyIGR1
ZSB0byBjb21waWxlciBhbmQgcGxhdGZvcm0gZGlmZmVyZW5jZXMgYWRkaW5nIHRob3NlIGFyZSBu
b24tdHJpdmlhbC4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTgzODQ4IGZvciBkZXRhaWxzLgotICAgIAotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
KCkgOiBtX3ZhbHVlKDApIHsgfQotI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCi0gICAgRnJh
Y3Rpb25hbExheW91dFVuaXQoaW50IHZhbHVlKSB7IHNldFZhbHVlKHZhbHVlKTsgfQotICAgIEZy
YWN0aW9uYWxMYXlvdXRVbml0KHVuc2lnbmVkIHNob3J0IHZhbHVlKSB7IHNldFZhbHVlKHZhbHVl
KTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KHVuc2lnbmVkIGludCB2YWx1ZSkgeyBzZXRW
YWx1ZSh2YWx1ZSk7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdChmbG9hdCB2YWx1ZSkKLSAg
ICB7Ci0jaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKLSAgICAgICAgbV92
YWx1ZSA9IGNsYW1wVG88ZmxvYXQ+KHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvciwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KElOVF9NSU4pLCBzdGF0aWNfY2FzdDxmbG9hdD4oSU5UX01BWCkpOwot
I2Vsc2UKLSAgICAgICAgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsKLSAgICAg
ICAgbV92YWx1ZSA9IHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKLSNlbmRpZgotICAg
IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdChkb3VibGUgdmFsdWUpCi0gICAgewotI2lmIEVO
QUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCi0gICAgICAgIG1fdmFsdWUgPSBjbGFt
cFRvPGRvdWJsZT4odmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yLCBzdGF0aWNfY2FzdDxk
b3VibGU+KElOVF9NSU4pLCBzdGF0aWNfY2FzdDxkb3VibGU+KElOVF9NQVgpKTsKLSNlbHNlCi0g
ICAgICAgIFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7Ci0gICAgICAgIG1fdmFs
dWUgPSB2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0jZW5kaWYKLSAgICB9Ci0jZWxz
ZQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KGludCB2YWx1ZSkgeyBSRVBPUlRfT1ZFUkZMT1co
aXNJbkJvdW5kcyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFsdWU7IH0KLSAgICBGcmFjdGlvbmFsTGF5
b3V0VW5pdCh1bnNpZ25lZCBzaG9ydCB2YWx1ZSkgeyBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5k
cyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFsdWU7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCh1
bnNpZ25lZCBpbnQgdmFsdWUpIHsgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsg
bV92YWx1ZSA9IHZhbHVlOyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQoZmxvYXQgdmFsdWUp
IHsgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsgbV92YWx1ZSA9IHZhbHVlOyB9
Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQoZG91YmxlIHZhbHVlKSB7IFJFUE9SVF9PVkVSRkxP
Vyhpc0luQm91bmRzKHZhbHVlKSk7IG1fdmFsdWUgPSB2YWx1ZTsgfQotI2VuZGlmCi0gICAgRnJh
Y3Rpb25hbExheW91dFVuaXQoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIHZhbHVlKSB7IG1f
dmFsdWUgPSB2YWx1ZS5yYXdWYWx1ZSgpOyB9Ci0KLSAgICBzdGF0aWMgRnJhY3Rpb25hbExheW91
dFVuaXQgZnJvbUZsb2F0Q2VpbChmbG9hdCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IHY7Ci0jaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykK
LSAgICAgICAgdi5tX3ZhbHVlID0gY2xhbXBUb0ludGVnZXIoY2VpbGYodmFsdWUgKiBrRml4ZWRQ
b2ludERlbm9taW5hdG9yKSk7Ci0jZWxzZQotICAgICAgICBSRVBPUlRfT1ZFUkZMT1coaXNJbkJv
dW5kcyh2YWx1ZSkpOwotICAgICAgICB2Lm1fdmFsdWUgPSBjZWlsZih2YWx1ZSAqIGtGaXhlZFBv
aW50RGVub21pbmF0b3IpOwotI2VuZGlmCi0gICAgICAgIHJldHVybiB2OwotICAgIH0KLQotICAg
IHN0YXRpYyBGcmFjdGlvbmFsTGF5b3V0VW5pdCBmcm9tRmxvYXRGbG9vcihmbG9hdCB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHY7Ci0jaWYgRU5BQkxFKFNBVFVS
QVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKLSAgICAgICAgdi5tX3ZhbHVlID0gY2xhbXBUb0ludGVn
ZXIoZmxvb3JmKHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvcikpOwotI2Vsc2UKLSAgICAg
ICAgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsKLSAgICAgICAgdi5tX3ZhbHVl
ID0gZmxvb3JmKHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvcik7Ci0jZW5kaWYKLSAgICAg
ICAgcmV0dXJuIHY7Ci0gICAgfQotCi0gICAgc3RhdGljIEZyYWN0aW9uYWxMYXlvdXRVbml0IGZy
b21GbG9hdFJvdW5kKGZsb2F0IHZhbHVlKQotICAgIHsKLSNpZiBFTkFCTEUoU0FUVVJBVEVEX0xB
WU9VVF9BUklUSE1FVElDKQotICAgICAgICBpZiAodmFsdWUgPj0gMCkKLSAgICAgICAgICAgIHJl
dHVybiBjbGFtcCh2YWx1ZSArIGVwc2lsb24oKSAvIDIuMGYpOwotICAgICAgICByZXR1cm4gY2xh
bXAodmFsdWUgLSBlcHNpbG9uKCkgLyAyLjBmKTsKLSNlbHNlCi0gICAgICAgIGlmICh2YWx1ZSA+
PSAwKSB7Ci0gICAgICAgICAgICBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSArIGVw
c2lsb24oKSAvIDIuMGYpKTsKLSAgICAgICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5p
dCh2YWx1ZSArIGVwc2lsb24oKSAvIDIuMGYpOwotICAgICAgICB9Ci0gICAgICAgIFJFUE9SVF9P
VkVSRkxPVyhpc0luQm91bmRzKHZhbHVlIC0gZXBzaWxvbigpIC8gMi4wZikpOwotICAgICAgICBy
ZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQodmFsdWUgLSBlcHNpbG9uKCkgLyAyLjBmKTsKLSNl
bmRpZgotICAgIH0KLQotI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCi0gICAgaW50IHRvSW50
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7IH0KLSAg
ICBmbG9hdCB0b0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdmFs
dWUpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsgfQotICAgIGRvdWJsZSB0b0RvdWJsZSgpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV92YWx1ZSkgLyBrRml4ZWRQb2ludERl
bm9taW5hdG9yOyB9Ci0gICAgZmxvYXQgY2VpbFRvRmxvYXQoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgZmxvYXQgZmxvYXRWYWx1ZSA9IHRvRmxvYXQoKTsKLSAgICAgICAgaWYgKHN0YXRpY19jYXN0
PGludD4oZmxvYXRWYWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3IpID09IG1fdmFsdWUpCi0g
ICAgICAgICAgICByZXR1cm4gZmxvYXRWYWx1ZTsKLSAgICAgICAgaWYgKGZsb2F0VmFsdWUgPiAw
KQotICAgICAgICAgICAgcmV0dXJuIG5leHRhZnRlcmYoZmxvYXRWYWx1ZSwgc3RkOjpudW1lcmlj
X2xpbWl0czxmbG9hdD46Om1heCgpKTsKLSAgICAgICAgcmV0dXJuIG5leHRhZnRlcmYoZmxvYXRW
YWx1ZSwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1pbigpKTsKLSAgICB9Ci0jZWxzZQot
ICAgIGludCB0b0ludCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KLSAgICBmbG9hdCB0b0Zs
b2F0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdmFsdWUpOyB9Ci0gICAg
ZG91YmxlIHRvRG91YmxlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3Zh
bHVlKTsgfQotICAgIGZsb2F0IGNlaWxUb0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gdG9GbG9hdCgp
OyB9Ci0jZW5kaWYKLSAgICB1bnNpZ25lZCB0b1Vuc2lnbmVkKCkgY29uc3QgeyBSRVBPUlRfT1ZF
UkZMT1cobV92YWx1ZSA+PSAwKTsgcmV0dXJuIHRvSW50KCk7IH0KLQotICAgIG9wZXJhdG9yIGlu
dCgpIGNvbnN0IHsgcmV0dXJuIHRvSW50KCk7IH0KLSAgICBvcGVyYXRvciB1bnNpZ25lZCgpIGNv
bnN0IHsgcmV0dXJuIHRvVW5zaWduZWQoKTsgfQotICAgIG9wZXJhdG9yIGZsb2F0KCkgY29uc3Qg
eyByZXR1cm4gdG9GbG9hdCgpOyB9Ci0gICAgb3BlcmF0b3IgZG91YmxlKCkgY29uc3QgeyByZXR1
cm4gdG9Eb3VibGUoKTsgfQotICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlOyB9Ci0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvcisrKGludCkKLSAgICB7
Ci0gICAgICAgIG1fdmFsdWUgKz0ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKLSAgICAgICAgcmV0
dXJuICp0aGlzOwotICAgIH0KLQotICAgIGlubGluZSBpbnQgcmF3VmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlOyB9Ci0gICAgaW5saW5lIHZvaWQgc2V0UmF3VmFsdWUoaW50IHZhbHVlKSB7
IG1fdmFsdWUgPSB2YWx1ZTsgfQotICAgIHZvaWQgc2V0UmF3VmFsdWUobG9uZyBsb25nIHZhbHVl
KQotICAgIHsKLSAgICAgICAgUkVQT1JUX09WRVJGTE9XKHZhbHVlID4gc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptaW4oKSAmJiB2YWx1ZSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4
KCkpOwotICAgICAgICBtX3ZhbHVlID0gc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSk7Ci0gICAgfQot
Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgYWJzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEZy
YWN0aW9uYWxMYXlvdXRVbml0IHJldHVyblZhbHVlOwotICAgICAgICByZXR1cm5WYWx1ZS5zZXRS
YXdWYWx1ZSg6OmFicyhtX3ZhbHVlKSk7Ci0gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLSAg
ICB9Ci0jaWYgT1MoREFSV0lOKQotICAgIGludCB3dGZfY2VpbCgpIGNvbnN0Ci0jZWxzZQotICAg
IGludCBjZWlsKCkgY29uc3QKLSNlbmRpZgotICAgIHsKLSNpZiBFTkFCTEUoU1VCUElYRUxfTEFZ
T1VUKQotICAgICAgICBpZiAobV92YWx1ZSA+PSAwKQotICAgICAgICAgICAgcmV0dXJuIChtX3Zh
bHVlICsga0ZpeGVkUG9pbnREZW5vbWluYXRvciAtIDEpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRv
cjsKLSAgICAgICAgcmV0dXJuIHRvSW50KCk7Ci0jZWxzZQotICAgICAgICByZXR1cm4gbV92YWx1
ZTsKLSNlbmRpZgotICAgIH0KLSAgICBpbnQgcm91bmQoKSBjb25zdAotICAgIHsKLSNpZiBFTkFC
TEUoU1VCUElYRUxfTEFZT1VUKSAmJiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElD
KQotICAgICAgICBpZiAobV92YWx1ZSA+IDApCi0gICAgICAgICAgICByZXR1cm4gc2F0dXJhdGVk
QWRkaXRpb24ocmF3VmFsdWUoKSwga0ZpeGVkUG9pbnREZW5vbWluYXRvciAvIDIpIC8ga0ZpeGVk
UG9pbnREZW5vbWluYXRvcjsKLSAgICAgICAgcmV0dXJuIHNhdHVyYXRlZFN1YnRyYWN0aW9uKHJh
d1ZhbHVlKCksIGtGaXhlZFBvaW50RGVub21pbmF0b3IgLyAyKSAvIGtGaXhlZFBvaW50RGVub21p
bmF0b3I7Ci0jZWxpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAgICAgICBpZiAobV92YWx1
ZSA+IDApCi0gICAgICAgICAgICByZXR1cm4gKG1fdmFsdWUgKyAoa0ZpeGVkUG9pbnREZW5vbWlu
YXRvciAvIDIpKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0gICAgICAgIHJldHVybiAobV92
YWx1ZSAtIChrRml4ZWRQb2ludERlbm9taW5hdG9yIC8gMikpIC8ga0ZpeGVkUG9pbnREZW5vbWlu
YXRvcjsKLSNlbHNlCi0gICAgICAgIHJldHVybiBtX3ZhbHVlOwotI2VuZGlmCi0gICAgfQotCi0g
ICAgaW50IGZsb29yKCkgY29uc3QKLSAgICB7Ci0jaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkK
LSAgICAgICAgaWYgKG1fdmFsdWUgPj0gMCkKLSAgICAgICAgICAgIHJldHVybiB0b0ludCgpOwot
ICAgICAgICByZXR1cm4gKG1fdmFsdWUgLSBrRml4ZWRQb2ludERlbm9taW5hdG9yICsgMSkgLyBr
Rml4ZWRQb2ludERlbm9taW5hdG9yOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIG1fdmFsdWU7Ci0j
ZW5kaWYKLSAgICB9Ci0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBmcmFjdGlvbigpIGNvbnN0
Ci0gICAgeyAgIAotICAgICAgICAvLyBBZGQgdGhlIGZyYWN0aW9uIHRvIHRoZSBzaXplIChhcyBv
cHBvc2VkIHRvIHRoZSBmdWxsIGxvY2F0aW9uKSB0byBhdm9pZCBvdmVyZmxvd3MuCi0gICAgICAg
IC8vIENvbXB1dGUgZnJhY3Rpb24gdXNpbmcgdGhlIG1vZCBvcGVyYXRvciB0byBwcmVzZXJ2ZSB0
aGUgc2lnbiBvZiB0aGUgdmFsdWUgYXMgaXQgbWF5IGFmZmVjdCByb3VuZGluZy4KLSAgICAgICAg
RnJhY3Rpb25hbExheW91dFVuaXQgZnJhY3Rpb247Ci0gICAgICAgIGZyYWN0aW9uLnNldFJhd1Zh
bHVlKHJhd1ZhbHVlKCkgJSBrRml4ZWRQb2ludERlbm9taW5hdG9yKTsKLSAgICAgICAgcmV0dXJu
IGZyYWN0aW9uOwotICAgIH0KLQotI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCi0gICAgc3Rh
dGljIGZsb2F0IGVwc2lsb24oKSB7IHJldHVybiAxLjBmIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRv
cjsgfQotI2Vsc2UKLSAgICBzdGF0aWMgaW50IGVwc2lsb24oKSB7IHJldHVybiAwOyB9Ci0jZW5k
aWYKLSAgICBzdGF0aWMgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQgbWF4KCkKLSAgICB7Ci0g
ICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG07Ci0gICAgICAgIG0ubV92YWx1ZSA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7Ci0gICAgICAgIHJldHVybiBtOwotICAgIH0KLSAg
ICBzdGF0aWMgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQgbWluKCkKLSAgICB7Ci0gICAgICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0IG07Ci0gICAgICAgIG0ubV92YWx1ZSA9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50Pjo6bWluKCk7Ci0gICAgICAgIHJldHVybiBtOwotICAgIH0KLQotICAgIC8v
IFZlcnNpb25zIG9mIG1heC9taW4gdGhhdCBhcmUgc2xpZ2h0bHkgc21hbGxlci9sYXJnZXIgdGhh
biBtYXgvbWluKCkgdG8gYWxsb3cgZm9yIHJvaW5kaW5nIHdpdGhvdXQgb3ZlcmZsb3dpbmcuCi0g
ICAgc3RhdGljIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0IG5lYXJseU1heCgpCi0gICAgewot
ICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtOwotICAgICAgICBtLm1fdmFsdWUgPSBzdGQ6
Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpIC0ga0ZpeGVkUG9pbnREZW5vbWluYXRvciAvIDI7
Ci0gICAgICAgIHJldHVybiBtOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQgbmVhcmx5TWluKCkKLSAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
IG07Ci0gICAgICAgIG0ubV92YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkg
KyBrRml4ZWRQb2ludERlbm9taW5hdG9yIC8gMjsKLSAgICAgICAgcmV0dXJuIG07Ci0gICAgfQot
ICAgIAotICAgIHN0YXRpYyBGcmFjdGlvbmFsTGF5b3V0VW5pdCBjbGFtcChkb3VibGUgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gY2xhbXBUbzxGcmFjdGlvbmFsTGF5b3V0VW5pdD4odmFs
dWUsIEZyYWN0aW9uYWxMYXlvdXRVbml0OjptaW4oKSwgRnJhY3Rpb25hbExheW91dFVuaXQ6Om1h
eCgpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIGJvb2wgaXNJbkJvdW5kcyhpbnQg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gOjphYnModmFsdWUpIDw9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50Pjo6bWF4KCkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOwotICAgIH0KLSAg
ICBzdGF0aWMgYm9vbCBpc0luQm91bmRzKHVuc2lnbmVkIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHZhbHVlIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1heCgpKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0gICAgfQotICAgIHN0YXRp
YyBib29sIGlzSW5Cb3VuZHMoZG91YmxlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDo6
ZmFicyh2YWx1ZSkgPD0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSAvIGtGaXhlZFBv
aW50RGVub21pbmF0b3I7Ci0gICAgfQotICAgIAotICAgIGlubGluZSB2b2lkIHNldFZhbHVlKGlu
dCB2YWx1ZSkKLSAgICB7Ci0jaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykK
LSAgICAgICAgaWYgKHZhbHVlID4gaW50TWF4Rm9yTGF5b3V0VW5pdCkKLSAgICAgICAgICAgIG1f
dmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwotICAgICAgICBlbHNlIGlm
ICh2YWx1ZSA8IGludE1pbkZvckxheW91dFVuaXQpCi0gICAgICAgICAgICBtX3ZhbHVlID0gc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
bV92YWx1ZSA9IHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKLSNlbHNlCi0gICAgICAg
IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7Ci0gICAgICAgIG1fdmFsdWUgPSB2
YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0jZW5kaWYKLSAgICB9Ci0gICAgaW5saW5l
IHZvaWQgc2V0VmFsdWUodW5zaWduZWQgdmFsdWUpCi0gICAgewotI2lmIEVOQUJMRShTQVRVUkFU
RURfTEFZT1VUX0FSSVRITUVUSUMpCi0gICAgICAgIGlmICh2YWx1ZSA+PSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaW50TWF4Rm9yTGF5b3V0VW5pdCkpCi0gICAgICAgICAgICBtX3ZhbHVlID0gc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
bV92YWx1ZSA9IHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKLSNlbHNlCi0gICAgICAg
IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7Ci0gICAgICAgIG1fdmFsdWUgPSB2
YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBpbnQg
bV92YWx1ZTsKLX07Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVy
biBhLnJhd1ZhbHVlKCkgPD0gYi5yYXdWYWx1ZSgpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRv
cjw9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQotewotICAgIHJldHVy
biBhLnRvRmxvYXQoKSA8PSBiOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKLXsKLSAgICByZXR1cm4gYSA8PSBGcmFjdGlv
bmFsTGF5b3V0VW5pdChiKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBmbG9h
dCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gYSA8PSBi
LnRvRmxvYXQoKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBpbnQgYSwgY29u
c3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlv
dXRVbml0KGEpIDw9IGI7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgRnJhY3Rp
b25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAg
IHJldHVybiBhLnJhd1ZhbHVlKCkgPj0gYi5yYXdWYWx1ZSgpOwotfQotCi1pbmxpbmUgYm9vbCBv
cGVyYXRvcj49KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKLXsKLSAgICBy
ZXR1cm4gYSA+PSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKLX0KLQotaW5saW5lIGJvb2wgb3Bl
cmF0b3I+PShjb25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsK
LSAgICByZXR1cm4gYSA+PSBiLnRvRmxvYXQoKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I+
PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKLXsKLSAgICByZXR1cm4g
YS50b0Zsb2F0KCkgPj0gYjsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBpbnQg
YSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9u
YWxMYXlvdXRVbml0KGEpID49IGI7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17
Ci0gICAgcmV0dXJuIGEucmF3VmFsdWUoKSA8IGIucmF3VmFsdWUoKTsKLX0KLQotaW5saW5lIGJv
b2wgb3BlcmF0b3I8KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKLXsKLSAg
ICByZXR1cm4gYSA8IEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOwotfQotCi1pbmxpbmUgYm9vbCBv
cGVyYXRvcjwoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCi17Ci0gICAg
cmV0dXJuIGEudG9GbG9hdCgpIDwgYjsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBkb3VibGUgYikKLXsKLSAgICByZXR1cm4gYS50b0Rv
dWJsZSgpIDwgYjsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IGludCBhLCBjb25z
dCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91
dFVuaXQoYSkgPCBiOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgZmxvYXQgYSwg
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJuIGEgPCBiLnRvRmxv
YXQoKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gYS5y
YXdWYWx1ZSgpID4gYi5yYXdWYWx1ZSgpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29u
c3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGRvdWJsZSBiKQotewotICAgIHJldHVybiBhLnRv
RG91YmxlKCkgPiBiOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgRnJhY3Rpb25h
bExheW91dFVuaXQmIGEsIGZsb2F0IGIpCi17Ci0gICAgcmV0dXJuIGEudG9GbG9hdCgpID4gYjsK
LX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBh
LCBpbnQgYikKLXsKLSAgICByZXR1cm4gYSA+IEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOwotfQot
Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBiKQotewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSA+IGI7Ci19
Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gYSA+IGIudG9GbG9hdCgpOwotfQotCi1pbmxp
bmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgZG91YmxlIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBiKQotewotICAgIHJldHVybiBhID4gYi50b0RvdWJsZSgpOwotfQotCi1pbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gYS5yYXdWYWx1ZSgpICE9IGIucmF3VmFs
dWUoKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYSwgZmxvYXQgYikKLXsKLSAgICByZXR1cm4gYSAhPSBGcmFjdGlvbmFsTGF5b3V0VW5p
dChiKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpbnQgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0
KGEpICE9IGI7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGEsIGludCBiKQotewotICAgIHJldHVybiBhICE9IEZyYWN0aW9uYWxMYXlvdXRV
bml0KGIpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4g
YS5yYXdWYWx1ZSgpID09IGIucmF3VmFsdWUoKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCi17Ci0gICAgcmV0dXJuIGEg
PT0gRnJhY3Rpb25hbExheW91dFVuaXQoYik7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVy
biBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSA9PSBiOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQotewotICAgIHJldHVy
biBhLnRvRmxvYXQoKSA9PSBiOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGZs
b2F0IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBhID09
IGIudG9GbG9hdCgpOwotfQotCi0vLyBGb3IgbXVsdGlwbGljYXRpb24gdGhhdCdzIHByb25lIHRv
IG92ZXJmbG93LCB0aGlzIGJvdW5kcyBpdCB0byBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWF4KCkg
YW5kIDo6bWluKCkKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBib3VuZGVkTXVsdGlwbHko
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBiKQotewotI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCi0gICAgRnJhY3Rpb25hbExheW91
dFVuaXQgcmV0dXJuVmFsOwotICAgIGxvbmcgbG9uZyByYXdWYWwgPSBzdGF0aWNfY2FzdDxsb25n
IGxvbmc+KGEucmF3VmFsdWUoKSkgKiBiLnJhd1ZhbHVlKCkgLyBrRml4ZWRQb2ludERlbm9taW5h
dG9yOwotICAgIGlmIChyYXdWYWwgPiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQot
ICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQ6Om1heCgpOwotICAgIGlmIChyYXdW
YWwgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpKQotICAgICAgICByZXR1cm4gRnJh
Y3Rpb25hbExheW91dFVuaXQ6Om1pbigpOwotICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShyYXdW
YWwpOwotICAgIHJldHVybiByZXR1cm5WYWw7Ci0jZWxzZQotICAgIHJldHVybiBhLnJhd1ZhbHVl
KCkgKiBiLnJhd1ZhbHVlKCk7Ci0jZW5kaWYKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRV
bml0IG9wZXJhdG9yKihjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rp
b25hbExheW91dFVuaXQmIGIpCi17Ci0jaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkgJiYgRU5B
QkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKLSAgICByZXR1cm4gYm91bmRlZE11bHRp
cGx5KGEsIGIpOwotI2VsaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCByZXR1cm5WYWw7Ci0gICAgbG9uZyBsb25nIHJhd1ZhbCA9IHN0YXRpY19jYXN0
PGxvbmcgbG9uZz4oYS5yYXdWYWx1ZSgpKSAqIGIucmF3VmFsdWUoKSAvIGtGaXhlZFBvaW50RGVu
b21pbmF0b3I7Ci0gICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKHJhd1ZhbCk7Ci0gICAgcmV0dXJu
IHJldHVyblZhbDsKLSNlbHNlCi0gICAgcmV0dXJuIGEucmF3VmFsdWUoKSAqIGIucmF3VmFsdWUo
KTsKLSNlbmRpZgotfSAgICAKLQotaW5saW5lIGRvdWJsZSBvcGVyYXRvciooY29uc3QgRnJhY3Rp
b25hbExheW91dFVuaXQmIGEsIGRvdWJsZSBiKQotewotICAgIHJldHVybiBhLnRvRG91YmxlKCkg
KiBiOwotfQotCi1pbmxpbmUgZmxvYXQgb3BlcmF0b3IqKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBhLCBmbG9hdCBiKQotewotICAgIHJldHVybiBhLnRvRmxvYXQoKSAqIGI7Ci19Ci0KLWlu
bGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvciooY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGEsIGludCBiKQotewotICAgIHJldHVybiBhICogRnJhY3Rpb25hbExheW91dFVuaXQo
Yik7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvciooY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGEsIHVuc2lnbmVkIGIpCi17Ci0gICAgcmV0dXJuIGEgKiBGcmFj
dGlvbmFsTGF5b3V0VW5pdChiKTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9w
ZXJhdG9yKih1bnNpZ25lZCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAg
ICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgKiBiOwotfQotCi1pbmxpbmUgRnJhY3Rp
b25hbExheW91dFVuaXQgb3BlcmF0b3IqKGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgKiBiOwot
fQotCi1pbmxpbmUgZmxvYXQgb3BlcmF0b3IqKGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBhICogYi50b0Zsb2F0KCk7Ci19Ci0KLWlu
bGluZSBkb3VibGUgb3BlcmF0b3IqKGNvbnN0IGRvdWJsZSBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gYSAqIGIudG9Eb3VibGUoKTsKLX0KLQotaW5saW5l
IEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0jaWYgRU5BQkxFKFNVQlBJ
WEVMX0xBWU9VVCkKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7Ci0gICAgbG9u
ZyBsb25nIHJhd1ZhbCA9IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oa0ZpeGVkUG9pbnREZW5vbWlu
YXRvcikgKiBhLnJhd1ZhbHVlKCkgLyBiLnJhd1ZhbHVlKCk7Ci0gICAgcmV0dXJuVmFsLnNldFJh
d1ZhbHVlKHJhd1ZhbCk7Ci0gICAgcmV0dXJuIHJldHVyblZhbDsKLSNlbHNlCi0gICAgcmV0dXJu
IGEucmF3VmFsdWUoKSAvIGIucmF3VmFsdWUoKTsKLSNlbmRpZgotfSAgICAKLQotaW5saW5lIGZs
b2F0IG9wZXJhdG9yLyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKLXsK
LSAgICByZXR1cm4gYS50b0Zsb2F0KCkgLyBiOwotfQotCi1pbmxpbmUgZG91YmxlIG9wZXJhdG9y
Lyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZG91YmxlIGIpCi17Ci0gICAgcmV0dXJu
IGEudG9Eb3VibGUoKSAvIGI7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVy
YXRvci8oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQotewotICAgIHJldHVy
biBhIC8gRnJhY3Rpb25hbExheW91dFVuaXQoYik7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5
b3V0VW5pdCBvcGVyYXRvci8oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIHVuc2lnbmVk
IGludCBiKQotewotICAgIHJldHVybiBhIC8gRnJhY3Rpb25hbExheW91dFVuaXQoYik7Ci19Ci0K
LWlubGluZSBmbG9hdCBvcGVyYXRvci8oY29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJuIGEgLyBiLnRvRmxvYXQoKTsKLX0KLQotaW5saW5l
IGRvdWJsZSBvcGVyYXRvci8oY29uc3QgZG91YmxlIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBiKQotewotICAgIHJldHVybiBhIC8gYi50b0RvdWJsZSgpOwotfQotCi1pbmxpbmUgRnJh
Y3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IvKGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgLyBi
OwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IvKHVuc2lnbmVkIGlu
dCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gRnJhY3Rp
b25hbExheW91dFVuaXQoYSkgLyBiOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQg
b3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYikKLXsKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7Ci0j
aWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKLSAgICByZXR1cm5WYWwuc2V0
UmF3VmFsdWUoc2F0dXJhdGVkQWRkaXRpb24oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsK
LSNlbHNlCi0gICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKGEucmF3VmFsdWUoKSArIGIucmF3VmFs
dWUoKSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gcmV0dXJuVmFsOwotfQotCi1pbmxpbmUgRnJhY3Rp
b25hbExheW91dFVuaXQgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBp
bnQgYikKLXsKLSAgICByZXR1cm4gYSArIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOwotfQotCi1p
bmxpbmUgZmxvYXQgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9h
dCBiKQotewotICAgIHJldHVybiBhLnRvRmxvYXQoKSArIGI7Ci19Ci0KLWlubGluZSBkb3VibGUg
b3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBkb3VibGUgYikKLXsKLSAg
ICByZXR1cm4gYS50b0RvdWJsZSgpICsgYjsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRV
bml0IG9wZXJhdG9yKyhjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIp
Ci17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpICsgYjsKLX0KLQotaW5saW5l
IGZsb2F0IG9wZXJhdG9yKyhjb25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYikKLXsKLSAgICByZXR1cm4gYSArIGIudG9GbG9hdCgpOwotfQotCi1pbmxpbmUgZG91Ymxl
IG9wZXJhdG9yKyhjb25zdCBkb3VibGUgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIp
Ci17Ci0gICAgcmV0dXJuIGEgKyBiLnRvRG91YmxlKCk7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJl
dHVyblZhbDsKLSNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQotICAgIHJl
dHVyblZhbC5zZXRSYXdWYWx1ZShzYXR1cmF0ZWRTdWJ0cmFjdGlvbihhLnJhd1ZhbHVlKCksIGIu
cmF3VmFsdWUoKSkpOwotI2Vsc2UKLSAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUoYS5yYXdWYWx1
ZSgpIC0gYi5yYXdWYWx1ZSgpKTsKLSNlbmRpZgotICAgIHJldHVybiByZXR1cm5WYWw7Ci19Ci0K
LWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGEsIGludCBiKQotewotICAgIHJldHVybiBhIC0gRnJhY3Rpb25hbExheW91dFVu
aXQoYik7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci0oY29uc3Qg
RnJhY3Rpb25hbExheW91dFVuaXQmIGEsIHVuc2lnbmVkIGIpCi17Ci0gICAgcmV0dXJuIGEgLSBG
cmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKLX0KLQotaW5saW5lIGZsb2F0IG9wZXJhdG9yLShjb25z
dCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKLXsKLSAgICByZXR1cm4gYS50b0Zs
b2F0KCkgLSBiOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3ItKGNv
bnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFVuaXQoYSkgLSBiOwotfQotCi1pbmxpbmUgZmxvYXQgb3BlcmF0b3It
KGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJl
dHVybiBhIC0gYi50b0Zsb2F0KCk7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBv
cGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEpCi17Ci0gICAgRnJhY3Rpb25h
bExheW91dFVuaXQgcmV0dXJuVmFsOwotICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZSgtYS5yYXdW
YWx1ZSgpKTsKLSAgICByZXR1cm4gcmV0dXJuVmFsOwotfQotCi0vLyBGb3IgcmV0dXJuaW5nIHRo
ZSByZW1haW5kZXIgYWZ0ZXIgYSBkaXZpc2lvbiB3aXRoIGludGVnZXIgcmVzdWx0cy4KLWlubGlu
ZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBpbnRNb2QoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotI2lmIEVOQUJMRShTVUJQSVhF
TF9MQVlPVVQpCi0gICAgLy8gVGhpcyBjYWxjdWxhdGVzIHRoZSBtb2R1bG8gc28gdGhhdDogYSA9
IHN0YXRpY19jYXN0PGludD4oYSAvIGIpICogYiArIGludE1vZChhLCBiKS4KLSAgICBGcmFjdGlv
bmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7Ci0gICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKGEucmF3
VmFsdWUoKSAlIGIucmF3VmFsdWUoKSk7Ci0gICAgcmV0dXJuIHJldHVyblZhbDsKLSNlbHNlCi0g
ICAgcmV0dXJuIGEucmF3VmFsdWUoKSAlIGIucmF3VmFsdWUoKTsKLSNlbmRpZgotfQotCi1pbmxp
bmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSNpZiBFTkFCTEUoU1VC
UElYRUxfTEFZT1VUKQotICAgIC8vIFRoaXMgY2FsY3VsYXRlcyB0aGUgbW9kdWxvIHNvIHRoYXQ6
IGEgPSAoYSAvIGIpICogYiArIGEgJSBiLgotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJldHVy
blZhbDsKLSAgICBsb25nIGxvbmcgcmF3VmFsID0gKHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oa0Zp
eGVkUG9pbnREZW5vbWluYXRvcikgKiBhLnJhd1ZhbHVlKCkpICUgYi5yYXdWYWx1ZSgpOwotICAg
IHJldHVyblZhbC5zZXRSYXdWYWx1ZShyYXdWYWwgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yKTsK
LSAgICByZXR1cm4gcmV0dXJuVmFsOwotI2Vsc2UKLSAgICByZXR1cm4gYS5yYXdWYWx1ZSgpICUg
Yi5yYXdWYWx1ZSgpOwotI2VuZGlmCi19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBv
cGVyYXRvciUoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQotewotICAgIHJl
dHVybiBhICUgRnJhY3Rpb25hbExheW91dFVuaXQoYik7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBvcGVyYXRvciUoaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBi
KQotewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSAlIGI7Ci19Ci0KLWlubGlu
ZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3IrPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
YSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0jaWYgRU5BQkxFKFNBVFVSQVRF
RF9MQVlPVVRfQVJJVEhNRVRJQykKLSAgICBhLnNldFJhd1ZhbHVlKHNhdHVyYXRlZEFkZGl0aW9u
KGEucmF3VmFsdWUoKSwgYi5yYXdWYWx1ZSgpKSk7Ci0jZWxzZQotICAgIGEgPSBhICsgYjsKLSNl
bmRpZgotICAgIHJldHVybiBhOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9w
ZXJhdG9yKz0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQotewotICAgIGEgPSBhICsg
YjsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVy
YXRvcis9KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQotewotICAgIGEgPSBhICsg
YjsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5lIGZsb2F0JiBvcGVyYXRvcis9KGZsb2F0JiBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICBhID0gYSArIGI7Ci0gICAg
cmV0dXJuIGE7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3ItPShG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCi17Ci0gICAgYSA9IGEgLSBiOwotICAgIHJl
dHVybiBhOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yLT0oRnJh
Y3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewot
I2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCi0gICAgYS5zZXRSYXdWYWx1
ZShzYXR1cmF0ZWRTdWJ0cmFjdGlvbihhLnJhd1ZhbHVlKCksIGIucmF3VmFsdWUoKSkpOwotI2Vs
c2UKLSAgICBhID0gYSAtIGI7Ci0jZW5kaWYKLSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5lIEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvci09KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBm
bG9hdCBiKQotewotICAgIGEgPSBhIC0gYjsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5lIGZs
b2F0JiBvcGVyYXRvci09KGZsb2F0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikK
LXsKLSAgICBhID0gYSAtIGI7Ci0gICAgcmV0dXJuIGE7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgb3BlcmF0b3IqPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgYSA9IGEgKiBiOwotICAgIHJldHVybiBhOwot
fQotLy8gb3BlcmF0b3IqPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpIGlzIHN1cHBv
cnRlZCBieSB0aGUgb3BlcmF0b3IgYWJvdmUgcGx1cyBGcmFjdGlvbmFsTGF5b3V0VW5pdChpbnQp
LgotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yKj0oRnJhY3Rpb25hbExh
eW91dFVuaXQmIGEsIGZsb2F0IGIpCi17Ci0gICAgYSA9IGEgKiBiOwotICAgIHJldHVybiBhOwot
fQotCi1pbmxpbmUgZmxvYXQmIG9wZXJhdG9yKj0oZmxvYXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRVbml0JiBiKQotewotICAgIGEgPSBhICogYjsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvci89KEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICBhID0gYSAvIGI7Ci0g
ICAgcmV0dXJuIGE7Ci19Ci0vLyBvcGVyYXRvci89KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBp
bnQgYikgaXMgc3VwcG9ydGVkIGJ5IHRoZSBvcGVyYXRvciBhYm92ZSBwbHVzIEZyYWN0aW9uYWxM
YXlvdXRVbml0KGludCkuCi0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3Iv
PShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKLXsKLSAgICBhID0gYSAvIGI7Ci0g
ICAgcmV0dXJuIGE7Ci19Ci0KLWlubGluZSBmbG9hdCYgb3BlcmF0b3IvPShmbG9hdCYgYSwgY29u
c3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgYSA9IGEgLyBiOwotICAgIHJldHVy
biBhOwotfQotCi1pbmxpbmUgaW50IHNuYXBTaXplVG9QaXhlbChGcmFjdGlvbmFsTGF5b3V0VW5p
dCBzaXplLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBsb2NhdGlvbikgCi17Ci0gICAgRnJhY3Rpb25h
bExheW91dFVuaXQgZnJhY3Rpb24gPSBsb2NhdGlvbi5mcmFjdGlvbigpOwotICAgIHJldHVybiAo
ZnJhY3Rpb24gKyBzaXplKS5yb3VuZCgpIC0gZnJhY3Rpb24ucm91bmQoKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRnJhY3Rpb25hbExheW91dFVuaXRfaApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGF5b3V0VW5pdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xheW91dFVuaXQuaAkocmV2aXNpb24gMTMzNTE3KQkoZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GcmFjdGlvbmFsTGF5b3V0VW5pdC5oOjEzMzUxNykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xheW91dFVuaXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDgyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZyYWN0aW9uYWxMYXlvdXRVbml0X2gKKyNkZWZpbmUg
RnJhY3Rpb25hbExheW91dFVuaXRfaAorCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8
bGltaXRzPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9TYXR1cmF0ZWRBcml0aG1ldGljLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmZGVmIE5ERUJVRworCisjZGVmaW5lIFJFUE9S
VF9PVkVSRkxPVyhkb2VzT3ZlcmZsb3cpICgodm9pZCkwKQorCisjZWxzZQorCisjZGVmaW5lIFJF
UE9SVF9PVkVSRkxPVyhkb2VzT3ZlcmZsb3cpIGRvIFwKKyAgICBpZiAoIShkb2VzT3ZlcmZsb3cp
KSB7IFwKKyAgICAgICAgV1RGUmVwb3J0RXJyb3IoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJF
VFRZX0ZVTkNUSU9OLCAiISglcykiLCAjZG9lc092ZXJmbG93KTsgXAorICAgIH0gXAord2hpbGUg
KDApCisKKyNlbmRpZgorCisjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKK3N0YXRpYyBjb25z
dCBpbnQga0ZpeGVkUG9pbnREZW5vbWluYXRvciA9IDY0OworI2Vsc2UKK3N0YXRpYyBjb25zdCBp
bnQga0ZpeGVkUG9pbnREZW5vbWluYXRvciA9IDE7CisjZW5kaWYKK2NvbnN0IGludCBpbnRNYXhG
b3JMYXlvdXRVbml0ID0gSU5UX01BWCAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Citjb25zdCBp
bnQgaW50TWluRm9yTGF5b3V0VW5pdCA9IElOVF9NSU4gLyBrRml4ZWRQb2ludERlbm9taW5hdG9y
OworCitjbGFzcyBGcmFjdGlvbmFsTGF5b3V0VW5pdCB7CitwdWJsaWM6CisgICAgLy8gRklYTUU6
IElkZWFsbHkgd2Ugd291bGQgaGF2ZSBzaXplX3QgdmVyc2lvbnMgb2YgdGhlIGNvbnN0cnVjdG9y
IGFuZCBvcGVyYXRvcnMuCisgICAgLy8gSG93ZXZlciBkdWUgdG8gY29tcGlsZXIgYW5kIHBsYXRm
b3JtIGRpZmZlcmVuY2VzIGFkZGluZyB0aG9zZSBhcmUgbm9uLXRyaXZpYWwuCisgICAgLy8gU2Vl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mzg0OCBmb3IgZGV0YWls
cy4KKyAgICAKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCgpIDogbV92YWx1ZSgwKSB7IH0KKyNp
ZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KGludCB2
YWx1ZSkgeyBzZXRWYWx1ZSh2YWx1ZSk7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCh1bnNp
Z25lZCBzaG9ydCB2YWx1ZSkgeyBzZXRWYWx1ZSh2YWx1ZSk7IH0KKyAgICBGcmFjdGlvbmFsTGF5
b3V0VW5pdCh1bnNpZ25lZCBpbnQgdmFsdWUpIHsgc2V0VmFsdWUodmFsdWUpOyB9CisgICAgRnJh
Y3Rpb25hbExheW91dFVuaXQoZmxvYXQgdmFsdWUpCisgICAgeworI2lmIEVOQUJMRShTQVRVUkFU
RURfTEFZT1VUX0FSSVRITUVUSUMpCisgICAgICAgIG1fdmFsdWUgPSBjbGFtcFRvPGZsb2F0Pih2
YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3IsIHN0YXRpY19jYXN0PGZsb2F0PihJTlRfTUlO
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KElOVF9NQVgpKTsKKyNlbHNlCisgICAgICAgIFJFUE9SVF9P
VkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7CisgICAgICAgIG1fdmFsdWUgPSB2YWx1ZSAqIGtG
aXhlZFBvaW50RGVub21pbmF0b3I7CisjZW5kaWYKKyAgICB9CisgICAgRnJhY3Rpb25hbExheW91
dFVuaXQoZG91YmxlIHZhbHVlKQorICAgIHsKKyNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9B
UklUSE1FVElDKQorICAgICAgICBtX3ZhbHVlID0gY2xhbXBUbzxkb3VibGU+KHZhbHVlICoga0Zp
eGVkUG9pbnREZW5vbWluYXRvciwgc3RhdGljX2Nhc3Q8ZG91YmxlPihJTlRfTUlOKSwgc3RhdGlj
X2Nhc3Q8ZG91YmxlPihJTlRfTUFYKSk7CisjZWxzZQorICAgICAgICBSRVBPUlRfT1ZFUkZMT1co
aXNJbkJvdW5kcyh2YWx1ZSkpOworICAgICAgICBtX3ZhbHVlID0gdmFsdWUgKiBrRml4ZWRQb2lu
dERlbm9taW5hdG9yOworI2VuZGlmCisgICAgfQorI2Vsc2UKKyAgICBGcmFjdGlvbmFsTGF5b3V0
VW5pdChpbnQgdmFsdWUpIHsgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsgbV92
YWx1ZSA9IHZhbHVlOyB9CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQodW5zaWduZWQgc2hvcnQg
dmFsdWUpIHsgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsgbV92YWx1ZSA9IHZh
bHVlOyB9CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQodW5zaWduZWQgaW50IHZhbHVlKSB7IFJF
UE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7IG1fdmFsdWUgPSB2YWx1ZTsgfQorICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0KGZsb2F0IHZhbHVlKSB7IFJFUE9SVF9PVkVSRkxPVyhpc0lu
Qm91bmRzKHZhbHVlKSk7IG1fdmFsdWUgPSB2YWx1ZTsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRV
bml0KGRvdWJsZSB2YWx1ZSkgeyBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOyBt
X3ZhbHVlID0gdmFsdWU7IH0KKyNlbmRpZgorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiB2YWx1ZSkgeyBtX3ZhbHVlID0gdmFsdWUucmF3VmFsdWUo
KTsgfQorCisgICAgc3RhdGljIEZyYWN0aW9uYWxMYXlvdXRVbml0IGZyb21GbG9hdENlaWwoZmxv
YXQgdmFsdWUpCisgICAgeworICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB2OworI2lmIEVO
QUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCisgICAgICAgIHYubV92YWx1ZSA9IGNs
YW1wVG9JbnRlZ2VyKGNlaWxmKHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvcikpOworI2Vs
c2UKKyAgICAgICAgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsKKyAgICAgICAg
di5tX3ZhbHVlID0gY2VpbGYodmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yKTsKKyNlbmRp
ZgorICAgICAgICByZXR1cm4gdjsKKyAgICB9CisKKyAgICBzdGF0aWMgRnJhY3Rpb25hbExheW91
dFVuaXQgZnJvbUZsb2F0Rmxvb3IoZmxvYXQgdmFsdWUpCisgICAgeworICAgICAgICBGcmFjdGlv
bmFsTGF5b3V0VW5pdCB2OworI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMp
CisgICAgICAgIHYubV92YWx1ZSA9IGNsYW1wVG9JbnRlZ2VyKGZsb29yZih2YWx1ZSAqIGtGaXhl
ZFBvaW50RGVub21pbmF0b3IpKTsKKyNlbHNlCisgICAgICAgIFJFUE9SVF9PVkVSRkxPVyhpc0lu
Qm91bmRzKHZhbHVlKSk7CisgICAgICAgIHYubV92YWx1ZSA9IGZsb29yZih2YWx1ZSAqIGtGaXhl
ZFBvaW50RGVub21pbmF0b3IpOworI2VuZGlmCisgICAgICAgIHJldHVybiB2OworICAgIH0KKwor
ICAgIHN0YXRpYyBGcmFjdGlvbmFsTGF5b3V0VW5pdCBmcm9tRmxvYXRSb3VuZChmbG9hdCB2YWx1
ZSkKKyAgICB7CisjaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKKyAgICAg
ICAgaWYgKHZhbHVlID49IDApCisgICAgICAgICAgICByZXR1cm4gY2xhbXAodmFsdWUgKyBlcHNp
bG9uKCkgLyAyLjBmKTsKKyAgICAgICAgcmV0dXJuIGNsYW1wKHZhbHVlIC0gZXBzaWxvbigpIC8g
Mi4wZik7CisjZWxzZQorICAgICAgICBpZiAodmFsdWUgPj0gMCkgeworICAgICAgICAgICAgUkVQ
T1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUgKyBlcHNpbG9uKCkgLyAyLjBmKSk7CisgICAg
ICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQodmFsdWUgKyBlcHNpbG9uKCkgLyAy
LjBmKTsKKyAgICAgICAgfQorICAgICAgICBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1
ZSAtIGVwc2lsb24oKSAvIDIuMGYpKTsKKyAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRV
bml0KHZhbHVlIC0gZXBzaWxvbigpIC8gMi4wZik7CisjZW5kaWYKKyAgICB9CisKKyNpZiBFTkFC
TEUoU1VCUElYRUxfTEFZT1VUKQorICAgIGludCB0b0ludCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWUgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOyB9CisgICAgZmxvYXQgdG9GbG9hdCgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX3ZhbHVlKSAvIGtGaXhlZFBvaW50RGVub21p
bmF0b3I7IH0KKyAgICBkb3VibGUgdG9Eb3VibGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxkb3VibGU+KG1fdmFsdWUpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsgfQorICAgIGZsb2F0
IGNlaWxUb0Zsb2F0KCkgY29uc3QKKyAgICB7CisgICAgICAgIGZsb2F0IGZsb2F0VmFsdWUgPSB0
b0Zsb2F0KCk7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0VmFsdWUgKiBrRml4
ZWRQb2ludERlbm9taW5hdG9yKSA9PSBtX3ZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZsb2F0
VmFsdWU7CisgICAgICAgIGlmIChmbG9hdFZhbHVlID4gMCkKKyAgICAgICAgICAgIHJldHVybiBu
ZXh0YWZ0ZXJmKGZsb2F0VmFsdWUsIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSk7
CisgICAgICAgIHJldHVybiBuZXh0YWZ0ZXJmKGZsb2F0VmFsdWUsIHN0ZDo6bnVtZXJpY19saW1p
dHM8ZmxvYXQ+OjptaW4oKSk7CisgICAgfQorI2Vsc2UKKyAgICBpbnQgdG9JbnQoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlOyB9CisgICAgZmxvYXQgdG9GbG9hdCgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PGZsb2F0PihtX3ZhbHVlKTsgfQorICAgIGRvdWJsZSB0b0RvdWJsZSgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV92YWx1ZSk7IH0KKyAgICBmbG9hdCBjZWls
VG9GbG9hdCgpIGNvbnN0IHsgcmV0dXJuIHRvRmxvYXQoKTsgfQorI2VuZGlmCisgICAgdW5zaWdu
ZWQgdG9VbnNpZ25lZCgpIGNvbnN0IHsgUkVQT1JUX09WRVJGTE9XKG1fdmFsdWUgPj0gMCk7IHJl
dHVybiB0b0ludCgpOyB9CisKKyAgICBvcGVyYXRvciBpbnQoKSBjb25zdCB7IHJldHVybiB0b0lu
dCgpOyB9CisgICAgb3BlcmF0b3IgdW5zaWduZWQoKSBjb25zdCB7IHJldHVybiB0b1Vuc2lnbmVk
KCk7IH0KKyAgICBvcGVyYXRvciBmbG9hdCgpIGNvbnN0IHsgcmV0dXJuIHRvRmxvYXQoKTsgfQor
ICAgIG9wZXJhdG9yIGRvdWJsZSgpIGNvbnN0IHsgcmV0dXJuIHRvRG91YmxlKCk7IH0KKyAgICBv
cGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAgRnJhY3Rpb25h
bExheW91dFVuaXQgb3BlcmF0b3IrKyhpbnQpCisgICAgeworICAgICAgICBtX3ZhbHVlICs9IGtG
aXhlZFBvaW50RGVub21pbmF0b3I7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAg
ICBpbmxpbmUgaW50IHJhd1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIGlu
bGluZSB2b2lkIHNldFJhd1ZhbHVlKGludCB2YWx1ZSkgeyBtX3ZhbHVlID0gdmFsdWU7IH0KKyAg
ICB2b2lkIHNldFJhd1ZhbHVlKGxvbmcgbG9uZyB2YWx1ZSkKKyAgICB7CisgICAgICAgIFJFUE9S
VF9PVkVSRkxPVyh2YWx1ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkgJiYgdmFs
dWUgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKTsKKyAgICAgICAgbV92YWx1ZSA9
IHN0YXRpY19jYXN0PGludD4odmFsdWUpOworICAgIH0KKworICAgIEZyYWN0aW9uYWxMYXlvdXRV
bml0IGFicygpIGNvbnN0CisgICAgeworICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1
cm5WYWx1ZTsKKyAgICAgICAgcmV0dXJuVmFsdWUuc2V0UmF3VmFsdWUoOjphYnMobV92YWx1ZSkp
OworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfQorI2lmIE9TKERBUldJTikKKyAg
ICBpbnQgd3RmX2NlaWwoKSBjb25zdAorI2Vsc2UKKyAgICBpbnQgY2VpbCgpIGNvbnN0CisjZW5k
aWYKKyAgICB7CisjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKKyAgICAgICAgaWYgKG1fdmFs
dWUgPj0gMCkKKyAgICAgICAgICAgIHJldHVybiAobV92YWx1ZSArIGtGaXhlZFBvaW50RGVub21p
bmF0b3IgLSAxKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7CisgICAgICAgIHJldHVybiB0b0lu
dCgpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fdmFsdWU7CisjZW5kaWYKKyAgICB9CisgICAg
aW50IHJvdW5kKCkgY29uc3QKKyAgICB7CisjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkgJiYg
RU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKKyAgICAgICAgaWYgKG1fdmFsdWUg
PiAwKQorICAgICAgICAgICAgcmV0dXJuIHNhdHVyYXRlZEFkZGl0aW9uKHJhd1ZhbHVlKCksIGtG
aXhlZFBvaW50RGVub21pbmF0b3IgLyAyKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7CisgICAg
ICAgIHJldHVybiBzYXR1cmF0ZWRTdWJ0cmFjdGlvbihyYXdWYWx1ZSgpLCBrRml4ZWRQb2ludERl
bm9taW5hdG9yIC8gMikgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOworI2VsaWYgRU5BQkxFKFNV
QlBJWEVMX0xBWU9VVCkKKyAgICAgICAgaWYgKG1fdmFsdWUgPiAwKQorICAgICAgICAgICAgcmV0
dXJuIChtX3ZhbHVlICsgKGtGaXhlZFBvaW50RGVub21pbmF0b3IgLyAyKSkgLyBrRml4ZWRQb2lu
dERlbm9taW5hdG9yOworICAgICAgICByZXR1cm4gKG1fdmFsdWUgLSAoa0ZpeGVkUG9pbnREZW5v
bWluYXRvciAvIDIpKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7CisjZWxzZQorICAgICAgICBy
ZXR1cm4gbV92YWx1ZTsKKyNlbmRpZgorICAgIH0KKworICAgIGludCBmbG9vcigpIGNvbnN0Cisg
ICAgeworI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisgICAgICAgIGlmIChtX3ZhbHVlID49
IDApCisgICAgICAgICAgICByZXR1cm4gdG9JbnQoKTsKKyAgICAgICAgcmV0dXJuIChtX3ZhbHVl
IC0ga0ZpeGVkUG9pbnREZW5vbWluYXRvciArIDEpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsK
KyNlbHNlCisgICAgICAgIHJldHVybiBtX3ZhbHVlOworI2VuZGlmCisgICAgfQorCisgICAgRnJh
Y3Rpb25hbExheW91dFVuaXQgZnJhY3Rpb24oKSBjb25zdAorICAgIHsgICAKKyAgICAgICAgLy8g
QWRkIHRoZSBmcmFjdGlvbiB0byB0aGUgc2l6ZSAoYXMgb3Bwb3NlZCB0byB0aGUgZnVsbCBsb2Nh
dGlvbikgdG8gYXZvaWQgb3ZlcmZsb3dzLgorICAgICAgICAvLyBDb21wdXRlIGZyYWN0aW9uIHVz
aW5nIHRoZSBtb2Qgb3BlcmF0b3IgdG8gcHJlc2VydmUgdGhlIHNpZ24gb2YgdGhlIHZhbHVlIGFz
IGl0IG1heSBhZmZlY3Qgcm91bmRpbmcuCisgICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGZy
YWN0aW9uOworICAgICAgICBmcmFjdGlvbi5zZXRSYXdWYWx1ZShyYXdWYWx1ZSgpICUga0ZpeGVk
UG9pbnREZW5vbWluYXRvcik7CisgICAgICAgIHJldHVybiBmcmFjdGlvbjsKKyAgICB9CisKKyNp
ZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIHN0YXRpYyBmbG9hdCBlcHNpbG9uKCkgeyBy
ZXR1cm4gMS4wZiAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7IH0KKyNlbHNlCisgICAgc3RhdGlj
IGludCBlcHNpbG9uKCkgeyByZXR1cm4gMDsgfQorI2VuZGlmCisgICAgc3RhdGljIGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRVbml0IG1heCgpCisgICAgeworICAgICAgICBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBtOworICAgICAgICBtLm1fdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1h
eCgpOworICAgICAgICByZXR1cm4gbTsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0IG1pbigpCisgICAgeworICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBt
OworICAgICAgICBtLm1fdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpOwor
ICAgICAgICByZXR1cm4gbTsKKyAgICB9CisKKyAgICAvLyBWZXJzaW9ucyBvZiBtYXgvbWluIHRo
YXQgYXJlIHNsaWdodGx5IHNtYWxsZXIvbGFyZ2VyIHRoYW4gbWF4L21pbigpIHRvIGFsbG93IGZv
ciByb2luZGluZyB3aXRob3V0IG92ZXJmbG93aW5nLgorICAgIHN0YXRpYyBjb25zdCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCBuZWFybHlNYXgoKQorICAgIHsKKyAgICAgICAgRnJhY3Rpb25hbExheW91
dFVuaXQgbTsKKyAgICAgICAgbS5tX3ZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKSAtIGtGaXhlZFBvaW50RGVub21pbmF0b3IgLyAyOworICAgICAgICByZXR1cm4gbTsKKyAg
ICB9CisgICAgc3RhdGljIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0IG5lYXJseU1pbigpCisg
ICAgeworICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtOworICAgICAgICBtLm1fdmFsdWUg
PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpICsga0ZpeGVkUG9pbnREZW5vbWluYXRv
ciAvIDI7CisgICAgICAgIHJldHVybiBtOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgRnJhY3Rp
b25hbExheW91dFVuaXQgY2xhbXAoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGNsYW1wVG88RnJhY3Rpb25hbExheW91dFVuaXQ+KHZhbHVlLCBGcmFjdGlvbmFsTGF5b3V0VW5p
dDo6bWluKCksIEZyYWN0aW9uYWxMYXlvdXRVbml0OjptYXgoKSk7CisgICAgfQorCitwcml2YXRl
OgorICAgIHN0YXRpYyBib29sIGlzSW5Cb3VuZHMoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIDo6YWJzKHZhbHVlKSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpIC8g
a0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKKyAgICB9CisgICAgc3RhdGljIGJvb2wgaXNJbkJvdW5k
cyh1bnNpZ25lZCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZSA8PSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkgLyBrRml4ZWRQ
b2ludERlbm9taW5hdG9yOworICAgIH0KKyAgICBzdGF0aWMgYm9vbCBpc0luQm91bmRzKGRvdWJs
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiA6OmZhYnModmFsdWUpIDw9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50Pjo6bWF4KCkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOworICAgIH0K
KyAgICAKKyAgICBpbmxpbmUgdm9pZCBzZXRWYWx1ZShpbnQgdmFsdWUpCisgICAgeworI2lmIEVO
QUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCisgICAgICAgIGlmICh2YWx1ZSA+IGlu
dE1heEZvckxheW91dFVuaXQpCisgICAgICAgICAgICBtX3ZhbHVlID0gc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUgPCBpbnRNaW5Gb3JMYXlv
dXRVbml0KQorICAgICAgICAgICAgbV92YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6
bWluKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fdmFsdWUgPSB2YWx1ZSAqIGtGaXhl
ZFBvaW50RGVub21pbmF0b3I7CisjZWxzZQorICAgICAgICBSRVBPUlRfT1ZFUkZMT1coaXNJbkJv
dW5kcyh2YWx1ZSkpOworICAgICAgICBtX3ZhbHVlID0gdmFsdWUgKiBrRml4ZWRQb2ludERlbm9t
aW5hdG9yOworI2VuZGlmCisgICAgfQorICAgIGlubGluZSB2b2lkIHNldFZhbHVlKHVuc2lnbmVk
IHZhbHVlKQorICAgIHsKKyNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQor
ICAgICAgICBpZiAodmFsdWUgPj0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGludE1heEZvckxheW91
dFVuaXQpKQorICAgICAgICAgICAgbV92YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6
bWF4KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fdmFsdWUgPSB2YWx1ZSAqIGtGaXhl
ZFBvaW50RGVub21pbmF0b3I7CisjZWxzZQorICAgICAgICBSRVBPUlRfT1ZFUkZMT1coaXNJbkJv
dW5kcyh2YWx1ZSkpOworICAgICAgICBtX3ZhbHVlID0gdmFsdWUgKiBrRml4ZWRQb2ludERlbm9t
aW5hdG9yOworI2VuZGlmCisgICAgfQorCisgICAgaW50IG1fdmFsdWU7Cit9OworCitpbmxpbmUg
Ym9vbCBvcGVyYXRvcjw9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4gYS5yYXdWYWx1ZSgpIDw9IGIucmF3
VmFsdWUoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgYSwgZmxvYXQgYikKK3sKKyAgICByZXR1cm4gYS50b0Zsb2F0KCkgPD0gYjsKK30K
KworaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwg
aW50IGIpCit7CisgICAgcmV0dXJuIGEgPD0gRnJhY3Rpb25hbExheW91dFVuaXQoYik7Cit9CisK
K2lubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEgPD0gYi50b0Zsb2F0KCk7Cit9CisKK2lubGlu
ZSBib29sIG9wZXJhdG9yPD0oY29uc3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBiKQoreworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSA8PSBiOworfQorCitp
bmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25z
dCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4gYS5yYXdWYWx1ZSgpID49
IGIucmF3VmFsdWUoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCit7CisgICAgcmV0dXJuIGEgPj0gRnJhY3Rpb25hbExh
eW91dFVuaXQoYik7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgZmxvYXQgYSwg
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEgPj0gYi50b0Zs
b2F0KCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEudG9GbG9hdCgpID49IGI7Cit9CisK
K2lubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBiKQoreworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSA+PSBiOwor
fQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEs
IGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBhLnJhd1ZhbHVl
KCkgPCBiLnJhd1ZhbHVlKCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCit7CisgICAgcmV0dXJuIGEgPCBGcmFjdGlvbmFs
TGF5b3V0VW5pdChiKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQoreworICAgIHJldHVybiBhLnRvRmxvYXQoKSA8IGI7
Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
YSwgZG91YmxlIGIpCit7CisgICAgcmV0dXJuIGEudG9Eb3VibGUoKSA8IGI7Cit9CisKK2lubGlu
ZSBib29sIG9wZXJhdG9yPChjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGIpCit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpIDwgYjsKK30KKworaW5s
aW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBiKQoreworICAgIHJldHVybiBhIDwgYi50b0Zsb2F0KCk7Cit9CisKK2lubGluZSBib29s
IG9wZXJhdG9yPihjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25h
bExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEucmF3VmFsdWUoKSA+IGIucmF3VmFsdWUo
KTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBhLCBkb3VibGUgYikKK3sKKyAgICByZXR1cm4gYS50b0RvdWJsZSgpID4gYjsKK30KKworaW5s
aW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBi
KQoreworICAgIHJldHVybiBhLnRvRmxvYXQoKSA+IGI7Cit9CisKK2lubGluZSBib29sIG9wZXJh
dG9yPihjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCit7CisgICAgcmV0dXJu
IGEgPiBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I+
KGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1
cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgPiBiOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRv
cj4oY29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAg
cmV0dXJuIGEgPiBiLnRvRmxvYXQoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0
IGRvdWJsZSBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4g
YSA+IGIudG9Eb3VibGUoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7Cisg
ICAgcmV0dXJuIGEucmF3VmFsdWUoKSAhPSBiLnJhd1ZhbHVlKCk7Cit9CisKK2lubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCit7Cisg
ICAgcmV0dXJuIGEgIT0gRnJhY3Rpb25hbExheW91dFVuaXQoYik7Cit9CisKK2lubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQor
eworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSAhPSBiOworfQorCitpbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK3sK
KyAgICByZXR1cm4gYSAhPSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKK30KKworaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rp
b25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEucmF3VmFsdWUoKSA9PSBiLnJhd1Zh
bHVlKCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGEsIGludCBiKQoreworICAgIHJldHVybiBhID09IEZyYWN0aW9uYWxMYXlvdXRVbml0
KGIpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGludCBhLCBjb25zdCBGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQo
YSkgPT0gYjsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgYSwgZmxvYXQgYikKK3sKKyAgICByZXR1cm4gYS50b0Zsb2F0KCkgPT0gYjsKK30K
KworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4gYSA9PSBiLnRvRmxvYXQoKTsKK30KKworLy8g
Rm9yIG11bHRpcGxpY2F0aW9uIHRoYXQncyBwcm9uZSB0byBvdmVyZmxvdywgdGhpcyBib3VuZHMg
aXQgdG8gRnJhY3Rpb25hbExheW91dFVuaXQ6Om1heCgpIGFuZCA6Om1pbigpCitpbmxpbmUgRnJh
Y3Rpb25hbExheW91dFVuaXQgYm91bmRlZE11bHRpcGx5KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyNpZiBFTkFCTEUoU1VC
UElYRUxfTEFZT1VUKQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJldHVyblZhbDsKKyAgICBs
b25nIGxvbmcgcmF3VmFsID0gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihhLnJhd1ZhbHVlKCkpICog
Yi5yYXdWYWx1ZSgpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKKyAgICBpZiAocmF3VmFsID4g
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIEZyYWN0aW9u
YWxMYXlvdXRVbml0OjptYXgoKTsKKyAgICBpZiAocmF3VmFsIDwgc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ+OjptaW4oKSkKKyAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0OjptaW4o
KTsKKyAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUocmF3VmFsKTsKKyAgICByZXR1cm4gcmV0dXJu
VmFsOworI2Vsc2UKKyAgICByZXR1cm4gYS5yYXdWYWx1ZSgpICogYi5yYXdWYWx1ZSgpOworI2Vu
ZGlmCit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvciooY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQorewor
I2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpICYmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FS
SVRITUVUSUMpCisgICAgcmV0dXJuIGJvdW5kZWRNdWx0aXBseShhLCBiKTsKKyNlbGlmIEVOQUJM
RShTVUJQSVhFTF9MQVlPVVQpCisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOwor
ICAgIGxvbmcgbG9uZyByYXdWYWwgPSBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGEucmF3VmFsdWUo
KSkgKiBiLnJhd1ZhbHVlKCkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOworICAgIHJldHVyblZh
bC5zZXRSYXdWYWx1ZShyYXdWYWwpOworICAgIHJldHVybiByZXR1cm5WYWw7CisjZWxzZQorICAg
IHJldHVybiBhLnJhd1ZhbHVlKCkgKiBiLnJhd1ZhbHVlKCk7CisjZW5kaWYKK30gICAgCisKK2lu
bGluZSBkb3VibGUgb3BlcmF0b3IqKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBkb3Vi
bGUgYikKK3sKKyAgICByZXR1cm4gYS50b0RvdWJsZSgpICogYjsKK30KKworaW5saW5lIGZsb2F0
IG9wZXJhdG9yKihjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK3sKKyAg
ICByZXR1cm4gYS50b0Zsb2F0KCkgKiBiOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVu
aXQgb3BlcmF0b3IqKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK3sKKyAg
ICByZXR1cm4gYSAqIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworfQorCitpbmxpbmUgRnJhY3Rp
b25hbExheW91dFVuaXQgb3BlcmF0b3IqKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCB1
bnNpZ25lZCBiKQoreworICAgIHJldHVybiBhICogRnJhY3Rpb25hbExheW91dFVuaXQoYik7Cit9
CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvcioodW5zaWduZWQgYSwgY29u
c3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlv
dXRVbml0KGEpICogYjsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9y
Kihjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0
dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpICogYjsKK30KKworaW5saW5lIGZsb2F0IG9wZXJh
dG9yKihjb25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAg
ICByZXR1cm4gYSAqIGIudG9GbG9hdCgpOworfQorCitpbmxpbmUgZG91YmxlIG9wZXJhdG9yKihj
b25zdCBkb3VibGUgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0
dXJuIGEgKiBiLnRvRG91YmxlKCk7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBv
cGVyYXRvci8oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRVbml0JiBiKQoreworI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisgICAgRnJhY3Rp
b25hbExheW91dFVuaXQgcmV0dXJuVmFsOworICAgIGxvbmcgbG9uZyByYXdWYWwgPSBzdGF0aWNf
Y2FzdDxsb25nIGxvbmc+KGtGaXhlZFBvaW50RGVub21pbmF0b3IpICogYS5yYXdWYWx1ZSgpIC8g
Yi5yYXdWYWx1ZSgpOworICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShyYXdWYWwpOworICAgIHJl
dHVybiByZXR1cm5WYWw7CisjZWxzZQorICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgLyBiLnJhd1Zh
bHVlKCk7CisjZW5kaWYKK30gICAgCisKK2lubGluZSBmbG9hdCBvcGVyYXRvci8oY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEudG9GbG9hdCgp
IC8gYjsKK30KKworaW5saW5lIGRvdWJsZSBvcGVyYXRvci8oY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGEsIGRvdWJsZSBiKQoreworICAgIHJldHVybiBhLnRvRG91YmxlKCkgLyBiOworfQor
CitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IvKGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRVbml0JiBhLCBpbnQgYikKK3sKKyAgICByZXR1cm4gYSAvIEZyYWN0aW9uYWxMYXlvdXRV
bml0KGIpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IvKGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCB1bnNpZ25lZCBpbnQgYikKK3sKKyAgICByZXR1cm4g
YSAvIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworfQorCitpbmxpbmUgZmxvYXQgb3BlcmF0b3Iv
KGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJl
dHVybiBhIC8gYi50b0Zsb2F0KCk7Cit9CisKK2lubGluZSBkb3VibGUgb3BlcmF0b3IvKGNvbnN0
IGRvdWJsZSBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4g
YSAvIGIudG9Eb3VibGUoKTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJh
dG9yLyhjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAg
cmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpIC8gYjsKK30KKworaW5saW5lIEZyYWN0aW9u
YWxMYXlvdXRVbml0IG9wZXJhdG9yLyh1bnNpZ25lZCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpIC8gYjsK
K30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKyhjb25zdCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAg
RnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOworI2lmIEVOQUJMRShTQVRVUkFURURfTEFZ
T1VUX0FSSVRITUVUSUMpCisgICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKHNhdHVyYXRlZEFkZGl0
aW9uKGEucmF3VmFsdWUoKSwgYi5yYXdWYWx1ZSgpKSk7CisjZWxzZQorICAgIHJldHVyblZhbC5z
ZXRSYXdWYWx1ZShhLnJhd1ZhbHVlKCkgKyBiLnJhd1ZhbHVlKCkpOworI2VuZGlmCisgICAgcmV0
dXJuIHJldHVyblZhbDsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9y
Kyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCit7CisgICAgcmV0dXJuIGEg
KyBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKK30KKworaW5saW5lIGZsb2F0IG9wZXJhdG9yKyhj
b25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK3sKKyAgICByZXR1cm4gYS50
b0Zsb2F0KCkgKyBiOworfQorCitpbmxpbmUgZG91YmxlIG9wZXJhdG9yKyhjb25zdCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgYSwgZG91YmxlIGIpCit7CisgICAgcmV0dXJuIGEudG9Eb3VibGUoKSAr
IGI7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvcisoY29uc3QgaW50
IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBGcmFjdGlv
bmFsTGF5b3V0VW5pdChhKSArIGI7Cit9CisKK2lubGluZSBmbG9hdCBvcGVyYXRvcisoY29uc3Qg
ZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEg
KyBiLnRvRmxvYXQoKTsKK30KKworaW5saW5lIGRvdWJsZSBvcGVyYXRvcisoY29uc3QgZG91Ymxl
IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBhICsgYi50
b0RvdWJsZSgpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3ItKGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
YikKK3sKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7CisjaWYgRU5BQkxFKFNB
VFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKKyAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUoc2F0
dXJhdGVkU3VidHJhY3Rpb24oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKKyNlbHNlCisg
ICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKGEucmF3VmFsdWUoKSAtIGIucmF3VmFsdWUoKSk7Cisj
ZW5kaWYKKyAgICByZXR1cm4gcmV0dXJuVmFsOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91
dFVuaXQgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK3sK
KyAgICByZXR1cm4gYSAtIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworfQorCitpbmxpbmUgRnJh
Y3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBh
LCB1bnNpZ25lZCBiKQoreworICAgIHJldHVybiBhIC0gRnJhY3Rpb25hbExheW91dFVuaXQoYik7
Cit9CisKK2lubGluZSBmbG9hdCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEudG9GbG9hdCgpIC0gYjsKK30KKworaW5saW5l
IEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLShjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rp
b25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEp
IC0gYjsKK30KKworaW5saW5lIGZsb2F0IG9wZXJhdG9yLShjb25zdCBmbG9hdCBhLCBjb25zdCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4gYSAtIGIudG9GbG9hdCgpOwor
fQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBhKQoreworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJldHVyblZhbDsK
KyAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUoLWEucmF3VmFsdWUoKSk7CisgICAgcmV0dXJuIHJl
dHVyblZhbDsKK30KKworLy8gRm9yIHJldHVybmluZyB0aGUgcmVtYWluZGVyIGFmdGVyIGEgZGl2
aXNpb24gd2l0aCBpbnRlZ2VyIHJlc3VsdHMuCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQg
aW50TW9kKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgYikKK3sKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIC8vIFRoaXMg
Y2FsY3VsYXRlcyB0aGUgbW9kdWxvIHNvIHRoYXQ6IGEgPSBzdGF0aWNfY2FzdDxpbnQ+KGEgLyBi
KSAqIGIgKyBpbnRNb2QoYSwgYikuCisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFs
OworICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShhLnJhd1ZhbHVlKCkgJSBiLnJhd1ZhbHVlKCkp
OworICAgIHJldHVybiByZXR1cm5WYWw7CisjZWxzZQorICAgIHJldHVybiBhLnJhd1ZhbHVlKCkg
JSBiLnJhd1ZhbHVlKCk7CisjZW5kaWYKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0
IG9wZXJhdG9yJShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25h
bExheW91dFVuaXQmIGIpCit7CisjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKKyAgICAvLyBU
aGlzIGNhbGN1bGF0ZXMgdGhlIG1vZHVsbyBzbyB0aGF0OiBhID0gKGEgLyBiKSAqIGIgKyBhICUg
Yi4KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7CisgICAgbG9uZyBsb25nIHJh
d1ZhbCA9IChzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGtGaXhlZFBvaW50RGVub21pbmF0b3IpICog
YS5yYXdWYWx1ZSgpKSAlIGIucmF3VmFsdWUoKTsKKyAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUo
cmF3VmFsIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcik7CisgICAgcmV0dXJuIHJldHVyblZhbDsK
KyNlbHNlCisgICAgcmV0dXJuIGEucmF3VmFsdWUoKSAlIGIucmF3VmFsdWUoKTsKKyNlbmRpZgor
fQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IlKGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK3sKKyAgICByZXR1cm4gYSAlIEZyYWN0aW9uYWxMYXlv
dXRVbml0KGIpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IlKGlu
dCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4gRnJhY3Rp
b25hbExheW91dFVuaXQoYSkgJSBiOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQm
IG9wZXJhdG9yKz0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBiKQoreworI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCisg
ICAgYS5zZXRSYXdWYWx1ZShzYXR1cmF0ZWRBZGRpdGlvbihhLnJhd1ZhbHVlKCksIGIucmF3VmFs
dWUoKSkpOworI2Vsc2UKKyAgICBhID0gYSArIGI7CisjZW5kaWYKKyAgICByZXR1cm4gYTsKK30K
KworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvcis9KEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBhLCBpbnQgYikKK3sKKyAgICBhID0gYSArIGI7CisgICAgcmV0dXJuIGE7Cit9CisK
K2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3IrPShGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYSwgZmxvYXQgYikKK3sKKyAgICBhID0gYSArIGI7CisgICAgcmV0dXJuIGE7Cit9CisK
K2lubGluZSBmbG9hdCYgb3BlcmF0b3IrPShmbG9hdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGIpCit7CisgICAgYSA9IGEgKyBiOworICAgIHJldHVybiBhOworfQorCitpbmxpbmUg
RnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yLT0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEs
IGludCBiKQoreworICAgIGEgPSBhIC0gYjsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvci09KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBj
b25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyNpZiBFTkFCTEUoU0FUVVJBVEVEX0xB
WU9VVF9BUklUSE1FVElDKQorICAgIGEuc2V0UmF3VmFsdWUoc2F0dXJhdGVkU3VidHJhY3Rpb24o
YS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKKyNlbHNlCisgICAgYSA9IGEgLSBiOworI2Vu
ZGlmCisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3Bl
cmF0b3ItPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK3sKKyAgICBhID0gYSAt
IGI7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBmbG9hdCYgb3BlcmF0b3ItPShmbG9hdCYg
YSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgYSA9IGEgLSBiOworICAg
IHJldHVybiBhOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yKj0o
RnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQor
eworICAgIGEgPSBhICogYjsKKyAgICByZXR1cm4gYTsKK30KKy8vIG9wZXJhdG9yKj0oRnJhY3Rp
b25hbExheW91dFVuaXQmIGEsIGludCBiKSBpcyBzdXBwb3J0ZWQgYnkgdGhlIG9wZXJhdG9yIGFi
b3ZlIHBsdXMgRnJhY3Rpb25hbExheW91dFVuaXQoaW50KS4KKworaW5saW5lIEZyYWN0aW9uYWxM
YXlvdXRVbml0JiBvcGVyYXRvcio9KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQor
eworICAgIGEgPSBhICogYjsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIGZsb2F0JiBvcGVy
YXRvcio9KGZsb2F0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICBh
ID0gYSAqIGI7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgb3BlcmF0b3IvPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGIpCit7CisgICAgYSA9IGEgLyBiOworICAgIHJldHVybiBhOworfQorLy8gb3Bl
cmF0b3IvPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpIGlzIHN1cHBvcnRlZCBieSB0
aGUgb3BlcmF0b3IgYWJvdmUgcGx1cyBGcmFjdGlvbmFsTGF5b3V0VW5pdChpbnQpLgorCitpbmxp
bmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yLz0oRnJhY3Rpb25hbExheW91dFVuaXQm
IGEsIGZsb2F0IGIpCit7CisgICAgYSA9IGEgLyBiOworICAgIHJldHVybiBhOworfQorCitpbmxp
bmUgZmxvYXQmIG9wZXJhdG9yLz0oZmxvYXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBiKQoreworICAgIGEgPSBhIC8gYjsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIGludCBz
bmFwU2l6ZVRvUGl4ZWwoRnJhY3Rpb25hbExheW91dFVuaXQgc2l6ZSwgRnJhY3Rpb25hbExheW91
dFVuaXQgbG9jYXRpb24pIAoreworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGZyYWN0aW9uID0g
bG9jYXRpb24uZnJhY3Rpb24oKTsKKyAgICByZXR1cm4gKGZyYWN0aW9uICsgc2l6ZSkucm91bmQo
KSAtIGZyYWN0aW9uLnJvdW5kKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEZyYWN0aW9uYWxMYXlvdXRVbml0X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0xheW91dFVuaXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9M
YXlvdXRVbml0LmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0xheW91dFVuaXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBAQAogICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCi0jaWZuZGVmIEZyYWN0aW9uYWxMYXlvdXRVbml0X2gKLSNkZWZpbmUgRnJh
Y3Rpb25hbExheW91dFVuaXRfaAorI2lmbmRlZiBMYXlvdXRVbml0X2gKKyNkZWZpbmUgTGF5b3V0
VW5pdF9oCiAKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDxsaW1pdHM+CkBAIC02Miwx
OCArNjIsMTggQEAgc3RhdGljIGNvbnN0IGludCBrRml4ZWRQb2ludERlbm9taW5hdG9yCiBjb25z
dCBpbnQgaW50TWF4Rm9yTGF5b3V0VW5pdCA9IElOVF9NQVggLyBrRml4ZWRQb2ludERlbm9taW5h
dG9yOwogY29uc3QgaW50IGludE1pbkZvckxheW91dFVuaXQgPSBJTlRfTUlOIC8ga0ZpeGVkUG9p
bnREZW5vbWluYXRvcjsKIAotY2xhc3MgRnJhY3Rpb25hbExheW91dFVuaXQgeworY2xhc3MgTGF5
b3V0VW5pdCB7CiBwdWJsaWM6CiAgICAgLy8gRklYTUU6IElkZWFsbHkgd2Ugd291bGQgaGF2ZSBz
aXplX3QgdmVyc2lvbnMgb2YgdGhlIGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRvcnMuCiAgICAgLy8g
SG93ZXZlciBkdWUgdG8gY29tcGlsZXIgYW5kIHBsYXRmb3JtIGRpZmZlcmVuY2VzIGFkZGluZyB0
aG9zZSBhcmUgbm9uLXRyaXZpYWwuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04Mzg0OCBmb3IgZGV0YWlscy4KICAgICAKLSAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCgpIDogbV92YWx1ZSgwKSB7IH0KKyAgICBMYXlvdXRVbml0KCkgOiBtX3ZhbHVl
KDApIHsgfQogI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCi0gICAgRnJhY3Rpb25hbExheW91
dFVuaXQoaW50IHZhbHVlKSB7IHNldFZhbHVlKHZhbHVlKTsgfQotICAgIEZyYWN0aW9uYWxMYXlv
dXRVbml0KHVuc2lnbmVkIHNob3J0IHZhbHVlKSB7IHNldFZhbHVlKHZhbHVlKTsgfQotICAgIEZy
YWN0aW9uYWxMYXlvdXRVbml0KHVuc2lnbmVkIGludCB2YWx1ZSkgeyBzZXRWYWx1ZSh2YWx1ZSk7
IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdChmbG9hdCB2YWx1ZSkKKyAgICBMYXlvdXRVbml0
KGludCB2YWx1ZSkgeyBzZXRWYWx1ZSh2YWx1ZSk7IH0KKyAgICBMYXlvdXRVbml0KHVuc2lnbmVk
IHNob3J0IHZhbHVlKSB7IHNldFZhbHVlKHZhbHVlKTsgfQorICAgIExheW91dFVuaXQodW5zaWdu
ZWQgdmFsdWUpIHsgc2V0VmFsdWUodmFsdWUpOyB9CisgICAgTGF5b3V0VW5pdChmbG9hdCB2YWx1
ZSkKICAgICB7CiAjaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKICAgICAg
ICAgbV92YWx1ZSA9IGNsYW1wVG88ZmxvYXQ+KHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRv
ciwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KElOVF9NSU4pLCBzdGF0aWNfY2FzdDxmbG9hdD4oSU5UX01B
WCkpOwpAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fdmFsdWUgPSB2YWx1ZSAq
IGtGaXhlZFBvaW50RGVub21pbmF0b3I7CiAjZW5kaWYKICAgICB9Ci0gICAgRnJhY3Rpb25hbExh
eW91dFVuaXQoZG91YmxlIHZhbHVlKQorICAgIExheW91dFVuaXQoZG91YmxlIHZhbHVlKQogICAg
IHsKICNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQogICAgICAgICBtX3Zh
bHVlID0gY2xhbXBUbzxkb3VibGU+KHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvciwgc3Rh
dGljX2Nhc3Q8ZG91YmxlPihJTlRfTUlOKSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihJTlRfTUFYKSk7
CkBAIC05MiwxNyArOTIsMTcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogI2Vsc2UKLSAgICBG
cmFjdGlvbmFsTGF5b3V0VW5pdChpbnQgdmFsdWUpIHsgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3Vu
ZHModmFsdWUpKTsgbV92YWx1ZSA9IHZhbHVlOyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQo
dW5zaWduZWQgc2hvcnQgdmFsdWUpIHsgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUp
KTsgbV92YWx1ZSA9IHZhbHVlOyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQodW5zaWduZWQg
aW50IHZhbHVlKSB7IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7IG1fdmFsdWUg
PSB2YWx1ZTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KGZsb2F0IHZhbHVlKSB7IFJFUE9S
VF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7IG1fdmFsdWUgPSB2YWx1ZTsgfQotICAgIEZy
YWN0aW9uYWxMYXlvdXRVbml0KGRvdWJsZSB2YWx1ZSkgeyBSRVBPUlRfT1ZFUkZMT1coaXNJbkJv
dW5kcyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFsdWU7IH0KKyAgICBMYXlvdXRVbml0KGludCB2YWx1
ZSkgeyBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFsdWU7
IH0KKyAgICBMYXlvdXRVbml0KHVuc2lnbmVkIHNob3J0IHZhbHVlKSB7IFJFUE9SVF9PVkVSRkxP
Vyhpc0luQm91bmRzKHZhbHVlKSk7IG1fdmFsdWUgPSB2YWx1ZTsgfQorICAgIExheW91dFVuaXQo
dW5zaWduZWQgdmFsdWUpIHsgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsgbV92
YWx1ZSA9IHZhbHVlOyB9CisgICAgTGF5b3V0VW5pdChmbG9hdCB2YWx1ZSkgeyBSRVBPUlRfT1ZF
UkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFsdWU7IH0KKyAgICBMYXlvdXRV
bml0KGRvdWJsZSB2YWx1ZSkgeyBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOyBt
X3ZhbHVlID0gdmFsdWU7IH0KICNlbmRpZgotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiB2YWx1ZSkgeyBtX3ZhbHVlID0gdmFsdWUucmF3VmFsdWUo
KTsgfQorICAgIExheW91dFVuaXQoY29uc3QgTGF5b3V0VW5pdCYgdmFsdWUpIHsgbV92YWx1ZSA9
IHZhbHVlLnJhd1ZhbHVlKCk7IH0KIAotICAgIHN0YXRpYyBGcmFjdGlvbmFsTGF5b3V0VW5pdCBm
cm9tRmxvYXRDZWlsKGZsb2F0IHZhbHVlKQorICAgIHN0YXRpYyBMYXlvdXRVbml0IGZyb21GbG9h
dENlaWwoZmxvYXQgdmFsdWUpCiAgICAgewotICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB2
OworICAgICAgICBMYXlvdXRVbml0IHY7CiAjaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJ
VEhNRVRJQykKICAgICAgICAgdi5tX3ZhbHVlID0gY2xhbXBUb0ludGVnZXIoY2VpbGYodmFsdWUg
KiBrRml4ZWRQb2ludERlbm9taW5hdG9yKSk7CiAjZWxzZQpAQCAtMTEyLDkgKzExMiw5IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHY7CiAgICAgfQogCi0gICAgc3RhdGljIEZyYWN0aW9uYWxM
YXlvdXRVbml0IGZyb21GbG9hdEZsb29yKGZsb2F0IHZhbHVlKQorICAgIHN0YXRpYyBMYXlvdXRV
bml0IGZyb21GbG9hdEZsb29yKGZsb2F0IHZhbHVlKQogICAgIHsKLSAgICAgICAgRnJhY3Rpb25h
bExheW91dFVuaXQgdjsKKyAgICAgICAgTGF5b3V0VW5pdCB2OwogI2lmIEVOQUJMRShTQVRVUkFU
RURfTEFZT1VUX0FSSVRITUVUSUMpCiAgICAgICAgIHYubV92YWx1ZSA9IGNsYW1wVG9JbnRlZ2Vy
KGZsb29yZih2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3IpKTsKICNlbHNlCkBAIC0xMjQs
NyArMTI0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdjsKICAgICB9CiAKLSAgICBzdGF0
aWMgRnJhY3Rpb25hbExheW91dFVuaXQgZnJvbUZsb2F0Um91bmQoZmxvYXQgdmFsdWUpCisgICAg
c3RhdGljIExheW91dFVuaXQgZnJvbUZsb2F0Um91bmQoZmxvYXQgdmFsdWUpCiAgICAgewogI2lm
IEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCiAgICAgICAgIGlmICh2YWx1ZSA+
PSAwKQpAQCAtMTMzLDEwICsxMzMsMTAgQEAgcHVibGljOgogI2Vsc2UKICAgICAgICAgaWYgKHZh
bHVlID49IDApIHsKICAgICAgICAgICAgIFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVl
ICsgZXBzaWxvbigpIC8gMi4wZikpOwotICAgICAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlv
dXRVbml0KHZhbHVlICsgZXBzaWxvbigpIC8gMi4wZik7CisgICAgICAgICAgICByZXR1cm4gTGF5
b3V0VW5pdCh2YWx1ZSArIGVwc2lsb24oKSAvIDIuMGYpOwogICAgICAgICB9CiAgICAgICAgIFJF
UE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlIC0gZXBzaWxvbigpIC8gMi4wZikpOwotICAg
ICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQodmFsdWUgLSBlcHNpbG9uKCkgLyAyLjBm
KTsKKyAgICAgICAgcmV0dXJuIExheW91dFVuaXQodmFsdWUgLSBlcHNpbG9uKCkgLyAyLjBmKTsK
ICNlbmRpZgogICAgIH0KIApAQCAtMTY3LDcgKzE2Nyw3IEBAIHB1YmxpYzoKICAgICBvcGVyYXRv
ciBkb3VibGUoKSBjb25zdCB7IHJldHVybiB0b0RvdWJsZSgpOyB9CiAgICAgb3BlcmF0b3IgYm9v
bCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KIAotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
IG9wZXJhdG9yKysoaW50KQorICAgIExheW91dFVuaXQgb3BlcmF0b3IrKyhpbnQpCiAgICAgewog
ICAgICAgICBtX3ZhbHVlICs9IGtGaXhlZFBvaW50RGVub21pbmF0b3I7CiAgICAgICAgIHJldHVy
biAqdGhpczsKQEAgLTE4MSw5ICsxODEsOSBAQCBwdWJsaWM6CiAgICAgICAgIG1fdmFsdWUgPSBz
dGF0aWNfY2FzdDxpbnQ+KHZhbHVlKTsKICAgICB9CiAKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBhYnMoKSBjb25zdAorICAgIExheW91dFVuaXQgYWJzKCkgY29uc3QKICAgICB7Ci0gICAgICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0IHJldHVyblZhbHVlOworICAgICAgICBMYXlvdXRVbml0IHJl
dHVyblZhbHVlOwogICAgICAgICByZXR1cm5WYWx1ZS5zZXRSYXdWYWx1ZSg6OmFicyhtX3ZhbHVl
KSk7CiAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKICAgICB9CkBAIC0yMjcsMTEgKzIyNywx
MSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBm
cmFjdGlvbigpIGNvbnN0CisgICAgTGF5b3V0VW5pdCBmcmFjdGlvbigpIGNvbnN0CiAgICAgeyAg
IAogICAgICAgICAvLyBBZGQgdGhlIGZyYWN0aW9uIHRvIHRoZSBzaXplIChhcyBvcHBvc2VkIHRv
IHRoZSBmdWxsIGxvY2F0aW9uKSB0byBhdm9pZCBvdmVyZmxvd3MuCiAgICAgICAgIC8vIENvbXB1
dGUgZnJhY3Rpb24gdXNpbmcgdGhlIG1vZCBvcGVyYXRvciB0byBwcmVzZXJ2ZSB0aGUgc2lnbiBv
ZiB0aGUgdmFsdWUgYXMgaXQgbWF5IGFmZmVjdCByb3VuZGluZy4KLSAgICAgICAgRnJhY3Rpb25h
bExheW91dFVuaXQgZnJhY3Rpb247CisgICAgICAgIExheW91dFVuaXQgZnJhY3Rpb247CiAgICAg
ICAgIGZyYWN0aW9uLnNldFJhd1ZhbHVlKHJhd1ZhbHVlKCkgJSBrRml4ZWRQb2ludERlbm9taW5h
dG9yKTsKICAgICAgICAgcmV0dXJuIGZyYWN0aW9uOwogICAgIH0KQEAgLTI0MSwzNiArMjQxLDM2
IEBAIHB1YmxpYzoKICNlbHNlCiAgICAgc3RhdGljIGludCBlcHNpbG9uKCkgeyByZXR1cm4gMDsg
fQogI2VuZGlmCi0gICAgc3RhdGljIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0IG1heCgpCisg
ICAgc3RhdGljIGNvbnN0IExheW91dFVuaXQgbWF4KCkKICAgICB7Ci0gICAgICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IG07CisgICAgICAgIExheW91dFVuaXQgbTsKICAgICAgICAgbS5tX3ZhbHVl
ID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKICAgICAgICAgcmV0dXJuIG07CiAg
ICAgfQotICAgIHN0YXRpYyBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtaW4oKQorICAgIHN0
YXRpYyBjb25zdCBMYXlvdXRVbml0IG1pbigpCiAgICAgewotICAgICAgICBGcmFjdGlvbmFsTGF5
b3V0VW5pdCBtOworICAgICAgICBMYXlvdXRVbml0IG07CiAgICAgICAgIG0ubV92YWx1ZSA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCk7CiAgICAgICAgIHJldHVybiBtOwogICAgIH0K
IAogICAgIC8vIFZlcnNpb25zIG9mIG1heC9taW4gdGhhdCBhcmUgc2xpZ2h0bHkgc21hbGxlci9s
YXJnZXIgdGhhbiBtYXgvbWluKCkgdG8gYWxsb3cgZm9yIHJvaW5kaW5nIHdpdGhvdXQgb3ZlcmZs
b3dpbmcuCi0gICAgc3RhdGljIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0IG5lYXJseU1heCgp
CisgICAgc3RhdGljIGNvbnN0IExheW91dFVuaXQgbmVhcmx5TWF4KCkKICAgICB7Ci0gICAgICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0IG07CisgICAgICAgIExheW91dFVuaXQgbTsKICAgICAgICAg
bS5tX3ZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSAtIGtGaXhlZFBvaW50
RGVub21pbmF0b3IgLyAyOwogICAgICAgICByZXR1cm4gbTsKICAgICB9Ci0gICAgc3RhdGljIGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0IG5lYXJseU1pbigpCisgICAgc3RhdGljIGNvbnN0IExh
eW91dFVuaXQgbmVhcmx5TWluKCkKICAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
IG07CisgICAgICAgIExheW91dFVuaXQgbTsKICAgICAgICAgbS5tX3ZhbHVlID0gc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ+OjptaW4oKSArIGtGaXhlZFBvaW50RGVub21pbmF0b3IgLyAyOwogICAg
ICAgICByZXR1cm4gbTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIEZyYWN0aW9uYWxMYXlvdXRV
bml0IGNsYW1wKGRvdWJsZSB2YWx1ZSkKKyAgICBzdGF0aWMgTGF5b3V0VW5pdCBjbGFtcChkb3Vi
bGUgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gY2xhbXBUbzxGcmFjdGlvbmFsTGF5b3V0
VW5pdD4odmFsdWUsIEZyYWN0aW9uYWxMYXlvdXRVbml0OjptaW4oKSwgRnJhY3Rpb25hbExheW91
dFVuaXQ6Om1heCgpKTsKKyAgICAgICAgcmV0dXJuIGNsYW1wVG88TGF5b3V0VW5pdD4odmFsdWUs
IExheW91dFVuaXQ6Om1pbigpLCBMYXlvdXRVbml0OjptYXgoKSk7CiAgICAgfQogCiBwcml2YXRl
OgpAQCAtMzE3LDE3NiArMzE3LDE3NiBAQCBwcml2YXRlOgogICAgIGludCBtX3ZhbHVlOwogfTsK
IAotaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwg
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNv
bnN0IExheW91dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAgICAgcmV0dXJuIGEu
cmF3VmFsdWUoKSA8PSBiLnJhd1ZhbHVlKCk7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPD0o
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCitpbmxpbmUgYm9vbCBvcGVy
YXRvcjw9KGNvbnN0IExheW91dFVuaXQmIGEsIGZsb2F0IGIpCiB7CiAgICAgcmV0dXJuIGEudG9G
bG9hdCgpIDw9IGI7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgRnJhY3Rpb25h
bExheW91dFVuaXQmIGEsIGludCBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBMYXlv
dXRVbml0JiBhLCBpbnQgYikKIHsKLSAgICByZXR1cm4gYSA8PSBGcmFjdGlvbmFsTGF5b3V0VW5p
dChiKTsKKyAgICByZXR1cm4gYSA8PSBMYXlvdXRVbml0KGIpOwogfQogCi1pbmxpbmUgYm9vbCBv
cGVyYXRvcjw9KGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQor
aW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBmbG9hdCBhLCBjb25zdCBMYXlvdXRVbml0JiBi
KQogewogICAgIHJldHVybiBhIDw9IGIudG9GbG9hdCgpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVy
YXRvcjw9KGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGlu
ZSBib29sIG9wZXJhdG9yPD0oY29uc3QgaW50IGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7Ci0g
ICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpIDw9IGI7CisgICAgcmV0dXJuIExheW91
dFVuaXQoYSkgPD0gYjsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUg
Ym9vbCBvcGVyYXRvcj49KGNvbnN0IExheW91dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIp
CiB7CiAgICAgcmV0dXJuIGEucmF3VmFsdWUoKSA+PSBiLnJhd1ZhbHVlKCk7CiB9CiAKLWlubGlu
ZSBib29sIG9wZXJhdG9yPj0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQor
aW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBMYXlvdXRVbml0JiBhLCBpbnQgYikKIHsKLSAg
ICByZXR1cm4gYSA+PSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKKyAgICByZXR1cm4gYSA+PSBM
YXlvdXRVbml0KGIpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IGZsb2F0IGEs
IGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I+PShj
b25zdCBmbG9hdCBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewogICAgIHJldHVybiBhID49IGIu
dG9GbG9hdCgpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRVbml0JiBhLCBmbG9hdCBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBMYXlv
dXRVbml0JiBhLCBmbG9hdCBiKQogewogICAgIHJldHVybiBhLnRvRmxvYXQoKSA+PSBiOwogfQog
Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgYikKK2lubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgaW50IGEsIGNvbnN0IExh
eW91dFVuaXQmIGIpCiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpID49IGI7
CisgICAgcmV0dXJuIExheW91dFVuaXQoYSkgPj0gYjsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0
b3I8KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYikKK2lubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBMYXlvdXRVbml0JiBhLCBjb25z
dCBMYXlvdXRVbml0JiBiKQogewogICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgPCBiLnJhd1ZhbHVl
KCk7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYSwgaW50IGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgTGF5b3V0VW5pdCYgYSwg
aW50IGIpCiB7Ci0gICAgcmV0dXJuIGEgPCBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKKyAgICBy
ZXR1cm4gYSA8IExheW91dFVuaXQoYik7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPChjb25z
dCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK2lubGluZSBib29sIG9wZXJhdG9y
PChjb25zdCBMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQogewogICAgIHJldHVybiBhLnRvRmxvYXQo
KSA8IGI7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYSwgZG91YmxlIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgTGF5b3V0VW5p
dCYgYSwgZG91YmxlIGIpCiB7CiAgICAgcmV0dXJuIGEudG9Eb3VibGUoKSA8IGI7CiB9CiAKLWlu
bGluZSBib29sIG9wZXJhdG9yPChjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVu
aXQmIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgaW50IGEsIGNvbnN0IExheW91dFVu
aXQmIGIpCiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpIDwgYjsKKyAgICBy
ZXR1cm4gTGF5b3V0VW5pdChhKSA8IGI7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPChjb25z
dCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBib29sIG9w
ZXJhdG9yPChjb25zdCBmbG9hdCBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewogICAgIHJldHVy
biBhIDwgYi50b0Zsb2F0KCk7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxp
bmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgTGF5b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYg
YikKIHsKICAgICByZXR1cm4gYS5yYXdWYWx1ZSgpID4gYi5yYXdWYWx1ZSgpOwogfQogCi1pbmxp
bmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGRvdWJsZSBi
KQoraW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IExheW91dFVuaXQmIGEsIGRvdWJsZSBiKQog
ewogICAgIHJldHVybiBhLnRvRG91YmxlKCkgPiBiOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRv
cj4oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCitpbmxpbmUgYm9vbCBv
cGVyYXRvcj4oY29uc3QgTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKIHsKICAgICByZXR1cm4gYS50
b0Zsb2F0KCkgPiBiOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgRnJhY3Rpb25h
bExheW91dFVuaXQmIGEsIGludCBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IExheW91
dFVuaXQmIGEsIGludCBiKQogewotICAgIHJldHVybiBhID4gRnJhY3Rpb25hbExheW91dFVuaXQo
Yik7CisgICAgcmV0dXJuIGEgPiBMYXlvdXRVbml0KGIpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVy
YXRvcj4oY29uc3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5l
IGJvb2wgb3BlcmF0b3I+KGNvbnN0IGludCBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewotICAg
IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSA+IGI7CisgICAgcmV0dXJuIExheW91dFVu
aXQoYSkgPiBiOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgZmxvYXQgYSwgY29u
c3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3Qg
ZmxvYXQgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1cm4gYSA+IGIudG9GbG9h
dCgpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgZG91YmxlIGEsIGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IGRvdWJs
ZSBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewogICAgIHJldHVybiBhID4gYi50b0RvdWJsZSgp
OwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBib29sIG9wZXJhdG9y
IT0oY29uc3QgTGF5b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1
cm4gYS5yYXdWYWx1ZSgpICE9IGIucmF3VmFsdWUoKTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK2lubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKIHsKLSAgICByZXR1cm4g
YSAhPSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKKyAgICByZXR1cm4gYSAhPSBMYXlvdXRVbml0
KGIpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGludCBhLCBjb25zdCBGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgaW50IGEs
IGNvbnN0IExheW91dFVuaXQmIGIpCiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0
KGEpICE9IGI7CisgICAgcmV0dXJuIExheW91dFVuaXQoYSkgIT0gYjsKIH0KIAotaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCitpbmxp
bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IExheW91dFVuaXQmIGEsIGludCBiKQogewotICAgIHJl
dHVybiBhICE9IEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworICAgIHJldHVybiBhICE9IExheW91
dFVuaXQoYik7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBMYXlvdXRVbml0JiBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewog
ICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgPT0gYi5yYXdWYWx1ZSgpOwogfQogCi1pbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK2lubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgTGF5b3V0VW5pdCYgYSwgaW50IGIpCiB7Ci0gICAgcmV0
dXJuIGEgPT0gRnJhY3Rpb25hbExheW91dFVuaXQoYik7CisgICAgcmV0dXJuIGEgPT0gTGF5b3V0
VW5pdChiKTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpbnQgYSwgY29uc3Qg
RnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGlu
dCBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0
VW5pdChhKSA9PSBiOworICAgIHJldHVybiBMYXlvdXRVbml0KGEpID09IGI7CiB9CiAKLWlubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIp
CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExheW91dFVuaXQmIGEsIGZsb2F0IGIpCiB7
CiAgICAgcmV0dXJuIGEudG9GbG9hdCgpID09IGI7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9y
PT0oY29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IGZsb2F0IGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAg
ICAgcmV0dXJuIGEgPT0gYi50b0Zsb2F0KCk7CiB9CiAKLS8vIEZvciBtdWx0aXBsaWNhdGlvbiB0
aGF0J3MgcHJvbmUgdG8gb3ZlcmZsb3csIHRoaXMgYm91bmRzIGl0IHRvIEZyYWN0aW9uYWxMYXlv
dXRVbml0OjptYXgoKSBhbmQgOjptaW4oKQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IGJv
dW5kZWRNdWx0aXBseShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rp
b25hbExheW91dFVuaXQmIGIpCisvLyBGb3IgbXVsdGlwbGljYXRpb24gdGhhdCdzIHByb25lIHRv
IG92ZXJmbG93LCB0aGlzIGJvdW5kcyBpdCB0byBMYXlvdXRVbml0OjptYXgoKSBhbmQgOjptaW4o
KQoraW5saW5lIExheW91dFVuaXQgYm91bmRlZE11bHRpcGx5KGNvbnN0IExheW91dFVuaXQmIGEs
IGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAg
ICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7CisgICAgTGF5b3V0VW5pdCByZXR1cm5W
YWw7CiAgICAgbG9uZyBsb25nIHJhd1ZhbCA9IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oYS5yYXdW
YWx1ZSgpKSAqIGIucmF3VmFsdWUoKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7CiAgICAgaWYg
KHJhd1ZhbCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCi0gICAgICAgIHJldHVy
biBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWF4KCk7CisgICAgICAgIHJldHVybiBMYXlvdXRVbml0
OjptYXgoKTsKICAgICBpZiAocmF3VmFsIDwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4o
KSkKLSAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0OjptaW4oKTsKKyAgICAgICAg
cmV0dXJuIExheW91dFVuaXQ6Om1pbigpOwogICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShyYXdW
YWwpOwogICAgIHJldHVybiByZXR1cm5WYWw7CiAjZWxzZQpAQCAtNDk0LDEyICs0OTQsMTIgQEAg
aW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IGJvdW5kZWRNdWx0aQogI2VuZGlmCiB9CiAKLWlu
bGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvciooY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIExheW91dFVu
aXQgb3BlcmF0b3IqKGNvbnN0IExheW91dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7
CiAjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkgJiYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRf
QVJJVEhNRVRJQykKICAgICByZXR1cm4gYm91bmRlZE11bHRpcGx5KGEsIGIpOwogI2VsaWYgRU5B
QkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7
CisgICAgTGF5b3V0VW5pdCByZXR1cm5WYWw7CiAgICAgbG9uZyBsb25nIHJhd1ZhbCA9IHN0YXRp
Y19jYXN0PGxvbmcgbG9uZz4oYS5yYXdWYWx1ZSgpKSAqIGIucmF3VmFsdWUoKSAvIGtGaXhlZFBv
aW50RGVub21pbmF0b3I7CiAgICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKHJhd1ZhbCk7CiAgICAg
cmV0dXJuIHJldHVyblZhbDsKQEAgLTUwOCw1MCArNTA4LDUwIEBAIGlubGluZSBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBvcGVyYXRvciooY28KICNlbmRpZgogfSAgICAKIAotaW5saW5lIGRvdWJsZSBv
cGVyYXRvciooY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGRvdWJsZSBiKQoraW5saW5l
IGRvdWJsZSBvcGVyYXRvciooY29uc3QgTGF5b3V0VW5pdCYgYSwgZG91YmxlIGIpCiB7CiAgICAg
cmV0dXJuIGEudG9Eb3VibGUoKSAqIGI7CiB9CiAKLWlubGluZSBmbG9hdCBvcGVyYXRvciooY29u
c3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCitpbmxpbmUgZmxvYXQgb3BlcmF0
b3IqKGNvbnN0IExheW91dFVuaXQmIGEsIGZsb2F0IGIpCiB7CiAgICAgcmV0dXJuIGEudG9GbG9h
dCgpICogYjsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKihjb25z
dCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCitpbmxpbmUgTGF5b3V0VW5pdCBvcGVy
YXRvciooY29uc3QgTGF5b3V0VW5pdCYgYSwgaW50IGIpCiB7Ci0gICAgcmV0dXJuIGEgKiBGcmFj
dGlvbmFsTGF5b3V0VW5pdChiKTsKKyAgICByZXR1cm4gYSAqIExheW91dFVuaXQoYik7CiB9CiAK
LWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvciooY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGEsIHVuc2lnbmVkIGIpCitpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvciooY29u
c3QgTGF5b3V0VW5pdCYgYSwgdW5zaWduZWQgYikKIHsKLSAgICByZXR1cm4gYSAqIEZyYWN0aW9u
YWxMYXlvdXRVbml0KGIpOworICAgIHJldHVybiBhICogTGF5b3V0VW5pdChiKTsKIH0KIAotaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKih1bnNpZ25lZCBhLCBjb25zdCBGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBMYXlvdXRVbml0IG9wZXJhdG9yKih1bnNpZ25l
ZCBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0
VW5pdChhKSAqIGI7CisgICAgcmV0dXJuIExheW91dFVuaXQoYSkgKiBiOwogfQogCi1pbmxpbmUg
RnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IqKGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBMYXlvdXRVbml0IG9wZXJhdG9yKihjb25zdCBpbnQg
YSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVu
aXQoYSkgKiBiOworICAgIHJldHVybiBMYXlvdXRVbml0KGEpICogYjsKIH0KIAotaW5saW5lIGZs
b2F0IG9wZXJhdG9yKihjb25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
YikKK2lubGluZSBmbG9hdCBvcGVyYXRvciooY29uc3QgZmxvYXQgYSwgY29uc3QgTGF5b3V0VW5p
dCYgYikKIHsKICAgICByZXR1cm4gYSAqIGIudG9GbG9hdCgpOwogfQogCi1pbmxpbmUgZG91Ymxl
IG9wZXJhdG9yKihjb25zdCBkb3VibGUgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIp
CitpbmxpbmUgZG91YmxlIG9wZXJhdG9yKihjb25zdCBkb3VibGUgYSwgY29uc3QgTGF5b3V0VW5p
dCYgYikKIHsKICAgICByZXR1cm4gYSAqIGIudG9Eb3VibGUoKTsKIH0KIAotaW5saW5lIEZyYWN0
aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwg
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRv
ci8oY29uc3QgTGF5b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICNpZiBFTkFC
TEUoU1VCUElYRUxfTEFZT1VUKQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJldHVyblZhbDsK
KyAgICBMYXlvdXRVbml0IHJldHVyblZhbDsKICAgICBsb25nIGxvbmcgcmF3VmFsID0gc3RhdGlj
X2Nhc3Q8bG9uZyBsb25nPihrRml4ZWRQb2ludERlbm9taW5hdG9yKSAqIGEucmF3VmFsdWUoKSAv
IGIucmF3VmFsdWUoKTsKICAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUocmF3VmFsKTsKICAgICBy
ZXR1cm4gcmV0dXJuVmFsOwpAQCAtNTYwLDQ5ICs1NjAsNDkgQEAgaW5saW5lIEZyYWN0aW9uYWxM
YXlvdXRVbml0IG9wZXJhdG9yLyhjbwogI2VuZGlmCiB9ICAgIAogCi1pbmxpbmUgZmxvYXQgb3Bl
cmF0b3IvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQoraW5saW5lIGZs
b2F0IG9wZXJhdG9yLyhjb25zdCBMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQogewogICAgIHJldHVy
biBhLnRvRmxvYXQoKSAvIGI7CiB9CiAKLWlubGluZSBkb3VibGUgb3BlcmF0b3IvKGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBhLCBkb3VibGUgYikKK2lubGluZSBkb3VibGUgb3BlcmF0b3Iv
KGNvbnN0IExheW91dFVuaXQmIGEsIGRvdWJsZSBiKQogewogICAgIHJldHVybiBhLnRvRG91Ymxl
KCkgLyBiOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IvKGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK2lubGluZSBMYXlvdXRVbml0IG9wZXJh
dG9yLyhjb25zdCBMYXlvdXRVbml0JiBhLCBpbnQgYikKIHsKLSAgICByZXR1cm4gYSAvIEZyYWN0
aW9uYWxMYXlvdXRVbml0KGIpOworICAgIHJldHVybiBhIC8gTGF5b3V0VW5pdChiKTsKIH0KIAot
aW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLyhjb25zdCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgYSwgdW5zaWduZWQgaW50IGIpCitpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvci8o
Y29uc3QgTGF5b3V0VW5pdCYgYSwgdW5zaWduZWQgYikKIHsKLSAgICByZXR1cm4gYSAvIEZyYWN0
aW9uYWxMYXlvdXRVbml0KGIpOworICAgIHJldHVybiBhIC8gTGF5b3V0VW5pdChiKTsKIH0KIAot
aW5saW5lIGZsb2F0IG9wZXJhdG9yLyhjb25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgYikKK2lubGluZSBmbG9hdCBvcGVyYXRvci8oY29uc3QgZmxvYXQgYSwgY29uc3Qg
TGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1cm4gYSAvIGIudG9GbG9hdCgpOwogfQogCi1pbmxp
bmUgZG91YmxlIG9wZXJhdG9yLyhjb25zdCBkb3VibGUgYSwgY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGIpCitpbmxpbmUgZG91YmxlIG9wZXJhdG9yLyhjb25zdCBkb3VibGUgYSwgY29uc3Qg
TGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1cm4gYSAvIGIudG9Eb3VibGUoKTsKIH0KIAotaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLyhjb25zdCBpbnQgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvci8oY29uc3Qg
aW50IGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlv
dXRVbml0KGEpIC8gYjsKKyAgICByZXR1cm4gTGF5b3V0VW5pdChhKSAvIGI7CiB9CiAKLWlubGlu
ZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci8odW5zaWduZWQgaW50IGEsIGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIExheW91dFVuaXQgb3BlcmF0b3IvKHVuc2ln
bmVkIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlv
dXRVbml0KGEpIC8gYjsKKyAgICByZXR1cm4gTGF5b3V0VW5pdChhKSAvIGI7CiB9CiAKLWlubGlu
ZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvcisoY29uc3QgRnJhY3Rpb25hbExheW91dFVu
aXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIExheW91dFVuaXQg
b3BlcmF0b3IrKGNvbnN0IExheW91dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7Ci0g
ICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOworICAgIExheW91dFVuaXQgcmV0dXJu
VmFsOwogI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCiAgICAgcmV0dXJu
VmFsLnNldFJhd1ZhbHVlKHNhdHVyYXRlZEFkZGl0aW9uKGEucmF3VmFsdWUoKSwgYi5yYXdWYWx1
ZSgpKSk7CiAjZWxzZQpAQCAtNjExLDM5ICs2MTEsMzkgQEAgaW5saW5lIEZyYWN0aW9uYWxMYXlv
dXRVbml0IG9wZXJhdG9yKyhjbwogICAgIHJldHVybiByZXR1cm5WYWw7CiB9CiAKLWlubGluZSBG
cmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvcisoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGEsIGludCBiKQoraW5saW5lIExheW91dFVuaXQgb3BlcmF0b3IrKGNvbnN0IExheW91dFVuaXQm
IGEsIGludCBiKQogewotICAgIHJldHVybiBhICsgRnJhY3Rpb25hbExheW91dFVuaXQoYik7Cisg
ICAgcmV0dXJuIGEgKyBMYXlvdXRVbml0KGIpOwogfQogCi1pbmxpbmUgZmxvYXQgb3BlcmF0b3Ir
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQoraW5saW5lIGZsb2F0IG9w
ZXJhdG9yKyhjb25zdCBMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQogewogICAgIHJldHVybiBhLnRv
RmxvYXQoKSArIGI7CiB9CiAKLWlubGluZSBkb3VibGUgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBhLCBkb3VibGUgYikKK2lubGluZSBkb3VibGUgb3BlcmF0b3IrKGNvbnN0
IExheW91dFVuaXQmIGEsIGRvdWJsZSBiKQogewogICAgIHJldHVybiBhLnRvRG91YmxlKCkgKyBi
OwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IrKGNvbnN0IGludCBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBMYXlvdXRVbml0IG9wZXJh
dG9yKyhjb25zdCBpbnQgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKLSAgICByZXR1cm4gRnJh
Y3Rpb25hbExheW91dFVuaXQoYSkgKyBiOworICAgIHJldHVybiBMYXlvdXRVbml0KGEpICsgYjsK
IH0KIAotaW5saW5lIGZsb2F0IG9wZXJhdG9yKyhjb25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBmbG9hdCBvcGVyYXRvcisoY29uc3QgZmxvYXQgYSwg
Y29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1cm4gYSArIGIudG9GbG9hdCgpOwogfQog
Ci1pbmxpbmUgZG91YmxlIG9wZXJhdG9yKyhjb25zdCBkb3VibGUgYSwgY29uc3QgRnJhY3Rpb25h
bExheW91dFVuaXQmIGIpCitpbmxpbmUgZG91YmxlIG9wZXJhdG9yKyhjb25zdCBkb3VibGUgYSwg
Y29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1cm4gYSArIGIudG9Eb3VibGUoKTsKIH0K
IAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgTGF5
b3V0VW5pdCBvcGVyYXRvci0oY29uc3QgTGF5b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYg
YikKIHsKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7CisgICAgTGF5b3V0VW5p
dCByZXR1cm5WYWw7CiAjaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKICAg
ICByZXR1cm5WYWwuc2V0UmF3VmFsdWUoc2F0dXJhdGVkU3VidHJhY3Rpb24oYS5yYXdWYWx1ZSgp
LCBiLnJhd1ZhbHVlKCkpKTsKICNlbHNlCkBAIC02NTIsNDQgKzY1Miw0NCBAQCBpbmxpbmUgRnJh
Y3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3ItKGNvCiAgICAgcmV0dXJuIHJldHVyblZhbDsKIH0K
IAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYSwgaW50IGIpCitpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvci0oY29uc3Qg
TGF5b3V0VW5pdCYgYSwgaW50IGIpCiB7Ci0gICAgcmV0dXJuIGEgLSBGcmFjdGlvbmFsTGF5b3V0
VW5pdChiKTsKKyAgICByZXR1cm4gYSAtIExheW91dFVuaXQoYik7CiB9CiAKLWlubGluZSBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEs
IHVuc2lnbmVkIGIpCitpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvci0oY29uc3QgTGF5b3V0VW5p
dCYgYSwgdW5zaWduZWQgYikKIHsKLSAgICByZXR1cm4gYSAtIEZyYWN0aW9uYWxMYXlvdXRVbml0
KGIpOworICAgIHJldHVybiBhIC0gTGF5b3V0VW5pdChiKTsKIH0KIAotaW5saW5lIGZsb2F0IG9w
ZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK2lubGluZSBm
bG9hdCBvcGVyYXRvci0oY29uc3QgTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKIHsKICAgICByZXR1
cm4gYS50b0Zsb2F0KCkgLSBiOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3Bl
cmF0b3ItKGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGlu
ZSBMYXlvdXRVbml0IG9wZXJhdG9yLShjb25zdCBpbnQgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikK
IHsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgLSBiOworICAgIHJldHVybiBM
YXlvdXRVbml0KGEpIC0gYjsKIH0KIAotaW5saW5lIGZsb2F0IG9wZXJhdG9yLShjb25zdCBmbG9h
dCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBmbG9hdCBvcGVyYXRv
ci0oY29uc3QgZmxvYXQgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1cm4gYSAt
IGIudG9GbG9hdCgpOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3It
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhKQoraW5saW5lIExheW91dFVuaXQgb3BlcmF0
b3ItKGNvbnN0IExheW91dFVuaXQmIGEpCiB7Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0
dXJuVmFsOworICAgIExheW91dFVuaXQgcmV0dXJuVmFsOwogICAgIHJldHVyblZhbC5zZXRSYXdW
YWx1ZSgtYS5yYXdWYWx1ZSgpKTsKICAgICByZXR1cm4gcmV0dXJuVmFsOwogfQogCiAvLyBGb3Ig
cmV0dXJuaW5nIHRoZSByZW1haW5kZXIgYWZ0ZXIgYSBkaXZpc2lvbiB3aXRoIGludGVnZXIgcmVz
dWx0cy4KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBpbnRNb2QoY29uc3QgRnJhY3Rpb25h
bExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIExh
eW91dFVuaXQgaW50TW9kKGNvbnN0IExheW91dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIp
CiB7CiAjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKICAgICAvLyBUaGlzIGNhbGN1bGF0ZXMg
dGhlIG1vZHVsbyBzbyB0aGF0OiBhID0gc3RhdGljX2Nhc3Q8aW50PihhIC8gYikgKiBiICsgaW50
TW9kKGEsIGIpLgotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJldHVyblZhbDsKKyAgICBMYXlv
dXRVbml0IHJldHVyblZhbDsKICAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUoYS5yYXdWYWx1ZSgp
ICUgYi5yYXdWYWx1ZSgpKTsKICAgICByZXR1cm4gcmV0dXJuVmFsOwogI2Vsc2UKQEAgLTY5Nywx
MSArNjk3LDExIEBAIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBpbnRNb2QoY29uc3QKICNl
bmRpZgogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IlKGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lu
bGluZSBMYXlvdXRVbml0IG9wZXJhdG9yJShjb25zdCBMYXlvdXRVbml0JiBhLCBjb25zdCBMYXlv
dXRVbml0JiBiKQogewogI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCiAgICAgLy8gVGhpcyBj
YWxjdWxhdGVzIHRoZSBtb2R1bG8gc28gdGhhdDogYSA9IChhIC8gYikgKiBiICsgYSAlIGIuCi0g
ICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOworICAgIExheW91dFVuaXQgcmV0dXJu
VmFsOwogICAgIGxvbmcgbG9uZyByYXdWYWwgPSAoc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihrRml4
ZWRQb2ludERlbm9taW5hdG9yKSAqIGEucmF3VmFsdWUoKSkgJSBiLnJhd1ZhbHVlKCk7CiAgICAg
cmV0dXJuVmFsLnNldFJhd1ZhbHVlKHJhd1ZhbCAvIGtGaXhlZFBvaW50RGVub21pbmF0b3IpOwog
ICAgIHJldHVybiByZXR1cm5WYWw7CkBAIC03MTAsMTcgKzcxMCwxNyBAQCBpbmxpbmUgRnJhY3Rp
b25hbExheW91dFVuaXQgb3BlcmF0b3IlKGNvCiAjZW5kaWYKIH0KIAotaW5saW5lIEZyYWN0aW9u
YWxMYXlvdXRVbml0IG9wZXJhdG9yJShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50
IGIpCitpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvciUoY29uc3QgTGF5b3V0VW5pdCYgYSwgaW50
IGIpCiB7Ci0gICAgcmV0dXJuIGEgJSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKKyAgICByZXR1
cm4gYSAlIExheW91dFVuaXQoYik7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBv
cGVyYXRvciUoaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIExh
eW91dFVuaXQgb3BlcmF0b3IlKGludCBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewotICAgIHJl
dHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSAlIGI7CisgICAgcmV0dXJuIExheW91dFVuaXQo
YSkgJSBiOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yKz0oRnJh
Y3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5s
aW5lIExheW91dFVuaXQmIG9wZXJhdG9yKz0oTGF5b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5p
dCYgYikKIHsKICNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQogICAgIGEu
c2V0UmF3VmFsdWUoc2F0dXJhdGVkQWRkaXRpb24oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkp
KTsKQEAgLTczMCwzMSArNzMwLDMxIEBAIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3Bl
cmF0b3IrPSgKICAgICByZXR1cm4gYTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBvcGVyYXRvcis9KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK2lubGluZSBMYXlv
dXRVbml0JiBvcGVyYXRvcis9KExheW91dFVuaXQmIGEsIGludCBiKQogewogICAgIGEgPSBhICsg
YjsKICAgICByZXR1cm4gYTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVy
YXRvcis9KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQoraW5saW5lIExheW91dFVu
aXQmIG9wZXJhdG9yKz0oTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKIHsKICAgICBhID0gYSArIGI7
CiAgICAgcmV0dXJuIGE7CiB9CiAKLWlubGluZSBmbG9hdCYgb3BlcmF0b3IrPShmbG9hdCYgYSwg
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgZmxvYXQmIG9wZXJhdG9yKz0o
ZmxvYXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAgICAgYSA9IGEgKyBiOwogICAgIHJl
dHVybiBhOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yLT0oRnJh
Y3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQoraW5saW5lIExheW91dFVuaXQmIG9wZXJhdG9y
LT0oTGF5b3V0VW5pdCYgYSwgaW50IGIpCiB7CiAgICAgYSA9IGEgLSBiOwogICAgIHJldHVybiBh
OwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yLT0oRnJhY3Rpb25h
bExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIExh
eW91dFVuaXQmIG9wZXJhdG9yLT0oTGF5b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikK
IHsKICNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQogICAgIGEuc2V0UmF3
VmFsdWUoc2F0dXJhdGVkU3VidHJhY3Rpb24oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsK
QEAgLTc2NCw2MiArNzY0LDEwNSBAQCBpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJh
dG9yLT0oCiAgICAgcmV0dXJuIGE7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
b3BlcmF0b3ItPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK2lubGluZSBMYXlv
dXRVbml0JiBvcGVyYXRvci09KExheW91dFVuaXQmIGEsIGZsb2F0IGIpCiB7CiAgICAgYSA9IGEg
LSBiOwogICAgIHJldHVybiBhOwogfQogCi1pbmxpbmUgZmxvYXQmIG9wZXJhdG9yLT0oZmxvYXQm
IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIGZsb2F0JiBvcGVyYXRv
ci09KGZsb2F0JiBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewogICAgIGEgPSBhIC0gYjsKICAg
ICByZXR1cm4gYTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvcio9
KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikK
K2lubGluZSBMYXlvdXRVbml0JiBvcGVyYXRvcio9KExheW91dFVuaXQmIGEsIGNvbnN0IExheW91
dFVuaXQmIGIpCiB7CiAgICAgYSA9IGEgKiBiOwogICAgIHJldHVybiBhOwogfQotLy8gb3BlcmF0
b3IqPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpIGlzIHN1cHBvcnRlZCBieSB0aGUg
b3BlcmF0b3IgYWJvdmUgcGx1cyBGcmFjdGlvbmFsTGF5b3V0VW5pdChpbnQpLgorLy8gb3BlcmF0
b3IqPShMYXlvdXRVbml0JiBhLCBpbnQgYikgaXMgc3VwcG9ydGVkIGJ5IHRoZSBvcGVyYXRvciBh
Ym92ZSBwbHVzIExheW91dFVuaXQoaW50KS4KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBvcGVyYXRvcio9KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQoraW5saW5lIExh
eW91dFVuaXQmIG9wZXJhdG9yKj0oTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKIHsKICAgICBhID0g
YSAqIGI7CiAgICAgcmV0dXJuIGE7CiB9CiAKLWlubGluZSBmbG9hdCYgb3BlcmF0b3IqPShmbG9h
dCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgZmxvYXQmIG9wZXJh
dG9yKj0oZmxvYXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAgICAgYSA9IGEgKiBiOwog
ICAgIHJldHVybiBhOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9y
Lz0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBi
KQoraW5saW5lIExheW91dFVuaXQmIG9wZXJhdG9yLz0oTGF5b3V0VW5pdCYgYSwgY29uc3QgTGF5
b3V0VW5pdCYgYikKIHsKICAgICBhID0gYSAvIGI7CiAgICAgcmV0dXJuIGE7CiB9Ci0vLyBvcGVy
YXRvci89KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikgaXMgc3VwcG9ydGVkIGJ5IHRo
ZSBvcGVyYXRvciBhYm92ZSBwbHVzIEZyYWN0aW9uYWxMYXlvdXRVbml0KGludCkuCisvLyBvcGVy
YXRvci89KExheW91dFVuaXQmIGEsIGludCBiKSBpcyBzdXBwb3J0ZWQgYnkgdGhlIG9wZXJhdG9y
IGFib3ZlIHBsdXMgTGF5b3V0VW5pdChpbnQpLgogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVu
aXQmIG9wZXJhdG9yLz0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCitpbmxpbmUg
TGF5b3V0VW5pdCYgb3BlcmF0b3IvPShMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQogewogICAgIGEg
PSBhIC8gYjsKICAgICByZXR1cm4gYTsKIH0KIAotaW5saW5lIGZsb2F0JiBvcGVyYXRvci89KGZs
b2F0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBmbG9hdCYgb3Bl
cmF0b3IvPShmbG9hdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICBhID0gYSAvIGI7
CiAgICAgcmV0dXJuIGE7CiB9CiAKLWlubGluZSBpbnQgc25hcFNpemVUb1BpeGVsKEZyYWN0aW9u
YWxMYXlvdXRVbml0IHNpemUsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGxvY2F0aW9uKSAKK2lubGlu
ZSBpbnQgc25hcFNpemVUb1BpeGVsKExheW91dFVuaXQgc2l6ZSwgTGF5b3V0VW5pdCBsb2NhdGlv
bikgCiB7Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgZnJhY3Rpb24gPSBsb2NhdGlvbi5mcmFj
dGlvbigpOworICAgIExheW91dFVuaXQgZnJhY3Rpb24gPSBsb2NhdGlvbi5mcmFjdGlvbigpOwog
ICAgIHJldHVybiAoZnJhY3Rpb24gKyBzaXplKS5yb3VuZCgpIC0gZnJhY3Rpb24ucm91bmQoKTsK
IH0KIAoraW5saW5lIGludCByb3VuZFRvSW50KExheW91dFVuaXQgdmFsdWUpCit7CisgICAgcmV0
dXJuIHZhbHVlLnJvdW5kKCk7Cit9CisKK2lubGluZSBpbnQgZmxvb3JUb0ludChMYXlvdXRVbml0
IHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZS5mbG9vcigpOworfQorCitpbmxpbmUgTGF5b3V0
VW5pdCByb3VuZGVkTGF5b3V0VW5pdChmbG9hdCB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoU1VCUElY
RUxfTEFZT1VUKQorICAgIHJldHVybiBMYXlvdXRVbml0Ojpmcm9tRmxvYXRSb3VuZCh2YWx1ZSk7
CisjZWxzZQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYodmFsdWUpKTsKKyNl
bmRpZgorfQorCitpbmxpbmUgTGF5b3V0VW5pdCBjZWlsZWRMYXlvdXRVbml0KGZsb2F0IHZhbHVl
KQoreworI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisgICAgcmV0dXJuIExheW91dFVuaXQ6
OmZyb21GbG9hdENlaWwodmFsdWUpOworI2Vsc2UKKyAgICByZXR1cm4gY2VpbGYodmFsdWUpOwor
I2VuZGlmCit9CisKK2lubGluZSBMYXlvdXRVbml0IGFic29sdXRlVmFsdWUoY29uc3QgTGF5b3V0
VW5pdCYgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlLmFicygpOworfQorCitpbmxpbmUgTGF5
b3V0VW5pdCBsYXlvdXRNb2QoY29uc3QgTGF5b3V0VW5pdCYgbnVtZXJhdG9yLCBjb25zdCBMYXlv
dXRVbml0JiBkZW5vbWluYXRvcikKK3sKKyAgICByZXR1cm4gbnVtZXJhdG9yICUgZGVub21pbmF0
b3I7Cit9CisKK2lubGluZSBib29sIGlzSW50ZWdlclZhbHVlKGNvbnN0IExheW91dFVuaXQgdmFs
dWUpCit7CisgICAgcmV0dXJuIHZhbHVlLnRvSW50KCkgPT0gdmFsdWU7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEZyYWN0aW9uYWxMYXlvdXRVbml0X2gKKyNlbmRp
ZiAvLyBMYXlvdXRVbml0X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCShyZXZpc2lv
biAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguaAkod29ya2luZyBj
b3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCh0ICE9IENhbGN1
bGF0ZWQpOwogICAgIH0KICAgICAKLSAgICBMZW5ndGgoRnJhY3Rpb25hbExheW91dFVuaXQgdiwg
TGVuZ3RoVHlwZSB0LCBib29sIHEgPSBmYWxzZSkKKyAgICBMZW5ndGgoTGF5b3V0VW5pdCB2LCBM
ZW5ndGhUeXBlIHQsIGJvb2wgcSA9IGZhbHNlKQogICAgICAgICA6IG1fZmxvYXRWYWx1ZSh2LnRv
RmxvYXQoKSksIG1fcXVpcmsocSksIG1fdHlwZSh0KSwgbV9pc0Zsb2F0KHRydWUpCiAgICAgewog
ICAgICAgICBBU1NFUlQodCAhPSBDYWxjdWxhdGVkKTsKQEAgLTE3Miw3ICsxNzIsNyBAQCBwdWJs
aWM6CiAgICAgICAgIG1faXNGbG9hdCA9IHRydWU7ICAgIAogICAgIH0KIAotICAgIHZvaWQgc2V0
VmFsdWUoTGVuZ3RoVHlwZSB0LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCB2YWx1ZSkKKyAgICB2b2lk
IHNldFZhbHVlKExlbmd0aFR5cGUgdCwgTGF5b3V0VW5pdCB2YWx1ZSkKICAgICB7CiAgICAgICAg
IG1fdHlwZSA9IHQ7CiAgICAgICAgIG1fZmxvYXRWYWx1ZSA9IHZhbHVlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51Q2xpZW50LmgJKHJldmlzaW9uIDEzMzY3NykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudUNsaWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw3ICsyMiw3IEBACiAjaWZuZGVmIFBvcHVwTWVudUNsaWVudF9oCiAjZGVmaW5lIFBv
cHVwTWVudUNsaWVudF9oCiAKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxh
eW91dFVuaXQuaCIKICNpbmNsdWRlICJQb3B1cE1lbnVTdHlsZS5oIgogI2luY2x1ZGUgIlNjcm9s
bFR5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb25VdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uVXRpbGl0aWVzLmgJKHJl
dmlzaW9uIDEzMzY3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9Bbmlt
YXRpb25VdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2lmbmRl
ZiBBbmltYXRpb25VdGlsaXRpZXNfaAogI2RlZmluZSBBbmltYXRpb25VdGlsaXRpZXNfaAogCi0j
aW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFVuaXQuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgor
I2luY2x1ZGUgIkxheW91dFVuaXQuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01Miw3ICs1Miw3IEBAIGlubGluZSBmbG9hdCBibGVuZChm
bG9hdCBmcm9tLCBmbG9hdCB0bywKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGZyb20g
KyAodG8gLSBmcm9tKSAqIHByb2dyZXNzKTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRV
bml0IGJsZW5kKEZyYWN0aW9uYWxMYXlvdXRVbml0IGZyb20sIEZyYWN0aW9uYWxMYXlvdXRVbml0
IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitpbmxpbmUgTGF5b3V0VW5pdCBibGVuZChMYXlvdXRVbml0
IGZyb20sIExheW91dFVuaXQgdG8sIGRvdWJsZSBwcm9ncmVzcykKIHsgIAogICAgIHJldHVybiBm
cm9tICsgKHRvIC0gZnJvbSkgKiBwcm9ncmVzczsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwCShyZXZpc2lvbiAxMzM2NzcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDEwIEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogCiAj
aW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFBv
aW50LmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25h
bExheW91dFNpemUuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIkxheW91dFBv
aW50LmgiCisjaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9u
TWF0cml4LmgiCiAjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPG1hdGguaD4KQEAgLTQyLDcg
KzQyLDcgQEAgRmxvYXRQb2ludDo6RmxvYXRQb2ludChjb25zdCBJbnRQb2ludCYgcAogewogfQog
Ci1GbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcCkg
OiBtX3gocC54KCkpLCBtX3kocC55KCkpCitGbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IExh
eW91dFBvaW50JiBwKSA6IG1feChwLngoKSksIG1feShwLnkoKSkKIHsKIH0KIApAQCAtNjEsMTMg
KzYxLDEzIEBAIGZsb2F0IEZsb2F0UG9pbnQ6Omxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJuIHNx
cnRmKGxlbmd0aFNxdWFyZWQoKSk7CiB9CiAKLXZvaWQgRmxvYXRQb2ludDo6bW92ZShjb25zdCBG
cmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkKK3ZvaWQgRmxvYXRQb2ludDo6bW92ZShjb25zdCBM
YXlvdXRTaXplJiBzaXplKQogewogICAgIG1feCArPSBzaXplLndpZHRoKCk7CiAgICAgbV95ICs9
IHNpemUuaGVpZ2h0KCk7CiB9CiAKLXZvaWQgRmxvYXRQb2ludDo6bW92ZUJ5KGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRQb2ludCYgcG9pbnQpCit2b2lkIEZsb2F0UG9pbnQ6Om1vdmVCeShjb25zdCBM
YXlvdXRQb2ludCYgcG9pbnQpCiB7CiAgICAgbV94ICs9IHBvaW50LngoKTsKICAgICBtX3kgKz0g
cG9pbnQueSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQ
b2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UG9pbnQuaAkocmV2aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRQb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxNSArNjgsMTUgQEAg
Y2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiBjbGFz
cyBJbnRQb2ludDsKIGNsYXNzIEludFNpemU7Ci1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0UG9pbnQ7
Ci1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0U2l6ZTsKK2NsYXNzIExheW91dFBvaW50OworY2xhc3Mg
TGF5b3V0U2l6ZTsKIAogY2xhc3MgRmxvYXRQb2ludCB7CiBwdWJsaWM6CiAgICAgRmxvYXRQb2lu
dCgpIDogbV94KDApLCBtX3koMCkgeyB9CiAgICAgRmxvYXRQb2ludChmbG9hdCB4LCBmbG9hdCB5
KSA6IG1feCh4KSwgbV95KHkpIHsgfQogICAgIEZsb2F0UG9pbnQoY29uc3QgSW50UG9pbnQmKTsK
LSAgICBGbG9hdFBvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYpOworICAgIEZsb2F0
UG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmKTsKICAgICBleHBsaWNpdCBGbG9hdFBvaW50KGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSkgOiBtX3goc2l6ZS53aWR0aCgpKSwgbV95KHNpemUuaGVpZ2h0KCkp
IHsgfQogCiAgICAgc3RhdGljIEZsb2F0UG9pbnQgemVybygpIHsgcmV0dXJuIEZsb2F0UG9pbnQo
KTsgfQpAQCAtMTAzLDcgKzEwMyw3IEBAIHB1YmxpYzoKICAgICAgICAgbV94ICs9IGEud2lkdGgo
KTsKICAgICAgICAgbV95ICs9IGEuaGVpZ2h0KCk7CiAgICAgfQotICAgIHZvaWQgbW92ZShjb25z
dCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYpOworICAgIHZvaWQgbW92ZShjb25zdCBMYXlvdXRTaXpl
Jik7CiAgICAgdm9pZCBtb3ZlKGNvbnN0IEZsb2F0U2l6ZSYgYSkKICAgICB7CiAgICAgICAgIG1f
eCArPSBhLndpZHRoKCk7CkBAIC0xMTQsNyArMTE0LDcgQEAgcHVibGljOgogICAgICAgICBtX3gg
Kz0gYS54KCk7CiAgICAgICAgIG1feSArPSBhLnkoKTsKICAgICB9Ci0gICAgdm9pZCBtb3ZlQnko
Y29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50Jik7CisgICAgdm9pZCBtb3ZlQnkoY29uc3QgTGF5
b3V0UG9pbnQmKTsKICAgICB2b2lkIG1vdmVCeShjb25zdCBGbG9hdFBvaW50JiBhKQogICAgIHsK
ICAgICAgICAgbV94ICs9IGEueCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRSZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCShyZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw4ICsyOCw4IEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAKICNpbmNsdWRlICJGbG9hdENv
bnZlcnNpb24uaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUg
IkludFJlY3QuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGht
PgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtNDMs
NyArNDMsNyBAQCBGbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBJbnRSZWN0JiByKSA6CiB7CiB9
CiAKLUZsb2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiByKSA6
IG1fbG9jYXRpb24oci5sb2NhdGlvbigpKSwgbV9zaXplKHIuc2l6ZSgpKQorRmxvYXRSZWN0OjpG
bG9hdFJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcikgOiBtX2xvY2F0aW9uKHIubG9jYXRpb24oKSks
IG1fc2l6ZShyLnNpemUoKSkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgJKHJldmlzaW9uIDEzMzY3NykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3
ICs3NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFZHUmVjdDsKICNlbmRpZgogCi1j
bGFzcyBGcmFjdGlvbmFsTGF5b3V0UmVjdDsKK2NsYXNzIExheW91dFJlY3Q7CiBjbGFzcyBJbnRS
ZWN0OwogY2xhc3MgSW50UG9pbnQ7CiAKQEAgLTkxLDcgKzkxLDcgQEAgcHVibGljOgogICAgIEZs
b2F0UmVjdChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQogICAg
ICAgICA6IG1fbG9jYXRpb24oRmxvYXRQb2ludCh4LCB5KSksIG1fc2l6ZShGbG9hdFNpemUod2lk
dGgsIGhlaWdodCkpIHsgfQogICAgIEZsb2F0UmVjdChjb25zdCBJbnRSZWN0Jik7Ci0gICAgRmxv
YXRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0Jik7CisgICAgRmxvYXRSZWN0KGNvbnN0
IExheW91dFJlY3QmKTsKIAogICAgIHN0YXRpYyBGbG9hdFJlY3QgbmFycm93UHJlY2lzaW9uKGRv
dWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0KTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuY3BwCShyZXZp
c2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNp
emUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNyw5IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0
U2l6ZS5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkludFNpemUu
aCIKKyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCiAjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUg
PG1hdGguaD4KIApAQCAtNDEsNyArNDEsNyBAQCBGbG9hdFNpemU6OkZsb2F0U2l6ZShjb25zdCBJ
bnRTaXplJiBzaXplCiB7CiB9CiAKLUZsb2F0U2l6ZTo6RmxvYXRTaXplKGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRTaXplJiBzaXplKSA6IG1fd2lkdGgoc2l6ZS53aWR0aCgpKSwgbV9oZWlnaHQoc2l6
ZS5oZWlnaHQoKSkKK0Zsb2F0U2l6ZTo6RmxvYXRTaXplKGNvbnN0IExheW91dFNpemUmIHNpemUp
IDogbV93aWR0aChzaXplLndpZHRoKCkpLCBtX2hlaWdodChzaXplLmhlaWdodCgpKQogewogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAko
cmV2aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRTaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDE0ICs2MCwxNCBAQCB0eXBlZGVmIHN0cnVj
dCBfTlNTaXplIE5TU2l6ZTsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW50U2l6ZTsK
LWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRTaXplOworY2xhc3MgTGF5b3V0U2l6ZTsKIAogY2xhc3Mg
RmxvYXRTaXplIHsKIHB1YmxpYzoKICAgICBGbG9hdFNpemUoKSA6IG1fd2lkdGgoMCksIG1faGVp
Z2h0KDApIHsgfQogICAgIEZsb2F0U2l6ZShmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KSA6IG1f
d2lkdGgod2lkdGgpLCBtX2hlaWdodChoZWlnaHQpIHsgfQogICAgIEZsb2F0U2l6ZShjb25zdCBJ
bnRTaXplJik7Ci0gICAgRmxvYXRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJik7Cisg
ICAgRmxvYXRTaXplKGNvbnN0IExheW91dFNpemUmKTsKIAogICAgIHN0YXRpYyBGbG9hdFNpemUg
bmFycm93UHJlY2lzaW9uKGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0
aW9uYWxMYXlvdXRCb3hFeHRlbnQuY3BwCShyZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSwxOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMiwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LUZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmxvZ2ljYWxU
b3AoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fdG9wIDogbV9sZWZ0OwotfQotCi1GcmFj
dGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Ojpsb2dpY2FsQm90dG9t
KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAotewotICAgIHJldHVybiBpc0hvcml6b250
YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX2JvdHRvbSA6IG1fcmlnaHQ7Ci19Ci0KLUZy
YWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmxvZ2ljYWxMZWZ0
KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAotewotICAgIHJldHVybiBpc0hvcml6b250
YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX2xlZnQgOiBtX3RvcDsKLX0KLQotRnJhY3Rp
b25hbExheW91dFVuaXQgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6bG9naWNhbFJpZ2h0KFdy
aXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAotewotICAgIHJldHVybiBpc0hvcml6b250YWxX
cml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX3JpZ2h0IDogbV9ib3R0b207Ci19Ci0KLUZyYWN0
aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmJlZm9yZShXcml0aW5n
TW9kZSB3cml0aW5nTW9kZSkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKHdyaXRpbmdNb2RlKSB7Ci0g
ICAgY2FzZSBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlOgotICAgICAgICByZXR1cm4gbV90b3A7Ci0g
ICAgY2FzZSBCb3R0b21Ub1RvcFdyaXRpbmdNb2RlOgotICAgICAgICByZXR1cm4gbV9ib3R0b207
Ci0gICAgY2FzZSBMZWZ0VG9SaWdodFdyaXRpbmdNb2RlOgotICAgICAgICByZXR1cm4gbV9sZWZ0
OwotICAgIGNhc2UgUmlnaHRUb0xlZnRXcml0aW5nTW9kZToKLSAgICAgICAgcmV0dXJuIG1fcmln
aHQ7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBtX3RvcDsK
LX0KLQotRnJhY3Rpb25hbExheW91dFVuaXQgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6YWZ0
ZXIoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0Ci17Ci0gICAgc3dpdGNoICh3cml0aW5n
TW9kZSkgewotICAgIGNhc2UgVG9wVG9Cb3R0b21Xcml0aW5nTW9kZToKLSAgICAgICAgcmV0dXJu
IG1fYm90dG9tOwotICAgIGNhc2UgQm90dG9tVG9Ub3BXcml0aW5nTW9kZToKLSAgICAgICAgcmV0
dXJuIG1fdG9wOwotICAgIGNhc2UgTGVmdFRvUmlnaHRXcml0aW5nTW9kZToKLSAgICAgICAgcmV0
dXJuIG1fcmlnaHQ7Ci0gICAgY2FzZSBSaWdodFRvTGVmdFdyaXRpbmdNb2RlOgotICAgICAgICBy
ZXR1cm4gbV9sZWZ0OwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gbV9ib3R0b207Ci19Ci0KLUZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRC
b3hFeHRlbnQ6OnN0YXJ0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRp
cmVjdGlvbikgY29uc3QKLXsKLSAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGlu
Z01vZGUpKQotICAgICAgICByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24p
ID8gbV9sZWZ0IDogbV9yaWdodDsKLSAgICByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbihk
aXJlY3Rpb24pID8gbV90b3AgOiBtX2JvdHRvbTsKLX0KLQotRnJhY3Rpb25hbExheW91dFVuaXQg
RnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6ZW5kKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikgY29uc3QKLXsKLSAgICBpZiAoaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUod3JpdGluZ01vZGUpKQotICAgICAgICByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVj
dGlvbihkaXJlY3Rpb24pID8gbV9yaWdodCA6IG1fbGVmdDsKLSAgICByZXR1cm4gaXNMZWZ0VG9S
aWdodERpcmVjdGlvbihkaXJlY3Rpb24pID8gbV9ib3R0b20gOiBtX3RvcDsKLX0KLQotdm9pZCBG
cmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzZXRCZWZvcmUoV3JpdGluZ01vZGUgd3JpdGluZ01v
ZGUsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKQotewotICAgIHN3aXRjaCAod3JpdGluZ01v
ZGUpIHsKLSAgICBjYXNlIFRvcFRvQm90dG9tV3JpdGluZ01vZGU6Ci0gICAgICAgIG1fdG9wID0g
dmFsdWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQm90dG9tVG9Ub3BXcml0aW5nTW9kZToK
LSAgICAgICAgbV9ib3R0b20gPSB2YWx1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMZWZ0
VG9SaWdodFdyaXRpbmdNb2RlOgotICAgICAgICBtX2xlZnQgPSB2YWx1ZTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBSaWdodFRvTGVmdFdyaXRpbmdNb2RlOgotICAgICAgICBtX3JpZ2h0ID0g
dmFsdWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICBtX3RvcCA9IHZhbHVlOwotICAgIH0KLX0KLQotdm9pZCBGcmFj
dGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzZXRBZnRlcihXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwg
RnJhY3Rpb25hbExheW91dFVuaXQgdmFsdWUpCi17Ci0gICAgc3dpdGNoICh3cml0aW5nTW9kZSkg
ewotICAgIGNhc2UgVG9wVG9Cb3R0b21Xcml0aW5nTW9kZToKLSAgICAgICAgbV9ib3R0b20gPSB2
YWx1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCb3R0b21Ub1RvcFdyaXRpbmdNb2RlOgot
ICAgICAgICBtX3RvcCA9IHZhbHVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExlZnRUb1Jp
Z2h0V3JpdGluZ01vZGU6Ci0gICAgICAgIG1fcmlnaHQgPSB2YWx1ZTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBSaWdodFRvTGVmdFdyaXRpbmdNb2RlOgotICAgICAgICBtX2xlZnQgPSB2YWx1
ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIG1fYm90dG9tID0gdmFsdWU7Ci0gICAgfQotfQotCi12b2lkIEZyYWN0
aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OnNldFN0YXJ0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgRnJhY3Rpb25hbExheW91dFVuaXQgdmFsdWUpCi17Ci0g
ICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkgewotICAgICAgICBp
ZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24pKQotICAgICAgICAgICAgbV9sZWZ0
ID0gdmFsdWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fcmlnaHQgPSB2YWx1ZTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24p
KQotICAgICAgICAgICAgbV90b3AgPSB2YWx1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
bV9ib3R0b20gPSB2YWx1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgRnJhY3Rpb25hbExheW91dEJveEV4
dGVudDo6c2V0RW5kKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVj
dGlvbiwgRnJhY3Rpb25hbExheW91dFVuaXQgdmFsdWUpCi17Ci0gICAgaWYgKGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkgewotICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodERp
cmVjdGlvbihkaXJlY3Rpb24pKQotICAgICAgICAgICAgbV9yaWdodCA9IHZhbHVlOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBtX2xlZnQgPSB2YWx1ZTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBpZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24pKQotICAgICAgICAgICAgbV9i
b3R0b20gPSB2YWx1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV90b3AgPSB2YWx1ZTsK
LSAgICB9Ci19Ci0KLUZyYWN0aW9uYWxMYXlvdXRVbml0JiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0
ZW50OjptdXRhYmxlTG9naWNhbExlZnQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCi17Ci0gICAg
cmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fbGVmdCA6IG1f
dG9wOwotfQotCi1GcmFjdGlvbmFsTGF5b3V0VW5pdCYgRnJhY3Rpb25hbExheW91dEJveEV4dGVu
dDo6bXV0YWJsZUxvZ2ljYWxSaWdodChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKLXsKLSAgICBy
ZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9yaWdodCA6IG1f
Ym90dG9tOwotfQotCi1GcmFjdGlvbmFsTGF5b3V0VW5pdCYgRnJhY3Rpb25hbExheW91dEJveEV4
dGVudDo6bXV0YWJsZUJlZm9yZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKLXsKLSAgICByZXR1
cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gKGlzRmxpcHBlZEJsb2Nr
c1dyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fYm90dG9tIDogbV90b3ApIDoKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlzRmxpcHBlZEJsb2Nr
c1dyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fcmlnaHQ6IG1fbGVmdCk7Ci19Ci0KLUZyYWN0
aW9uYWxMYXlvdXRVbml0JiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjptdXRhYmxlQWZ0ZXIo
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCi17Ci0gICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKHdyaXRpbmdNb2RlKSA/IChpc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSh3cml0aW5n
TW9kZSkgPyBtX3RvcCA6IG1fYm90dG9tKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChpc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSh3cml0aW5n
TW9kZSkgPyBtX2xlZnQ6IG1fcmlnaHQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94
RXh0ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oCShyZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMiwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEZyYWN0aW9uYWxMYXlvdXRCb3hF
eHRlbnRfaAotI2RlZmluZSBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50X2gKLQotI2luY2x1ZGUg
IkZyYWN0aW9uYWxMYXlvdXRVbml0LmgiCi0jaW5jbHVkZSAiVGV4dERpcmVjdGlvbi5oIgotI2lu
Y2x1ZGUgIldyaXRpbmdNb2RlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRnJh
Y3Rpb25hbExheW91dEJveEV4dGVudCB7Ci1wdWJsaWM6Ci0gICAgRnJhY3Rpb25hbExheW91dEJv
eEV4dGVudCgpIDogbV90b3AoMCksIG1fcmlnaHQoMCksIG1fYm90dG9tKDApLCBtX2xlZnQoMCkg
eyB9Ci0gICAgRnJhY3Rpb25hbExheW91dEJveEV4dGVudChGcmFjdGlvbmFsTGF5b3V0VW5pdCB0
b3AsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJpZ2h0LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBib3R0
b20sIEZyYWN0aW9uYWxMYXlvdXRVbml0IGxlZnQpCi0gICAgICAgIDogbV90b3AodG9wKSwgbV9y
aWdodChyaWdodCksIG1fYm90dG9tKGJvdHRvbSksIG1fbGVmdChsZWZ0KSB7IH0KLQotICAgIGlu
bGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCB0b3AoKSBjb25zdCB7IHJldHVybiBtX3RvcDsgfQot
ICAgIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCByaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmlnaHQ7IH0KLSAgICBpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgYm90dG9tKCkgY29uc3Qg
eyByZXR1cm4gbV9ib3R0b207IH0KLSAgICBpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgbGVm
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVmdDsgfQotCi0gICAgaW5saW5lIHZvaWQgc2V0VG9wKEZy
YWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKSB7IG1fdG9wID0gdmFsdWU7IH0KLSAgICBpbmxpbmUg
dm9pZCBzZXRSaWdodChGcmFjdGlvbmFsTGF5b3V0VW5pdCB2YWx1ZSkgeyBtX3JpZ2h0ID0gdmFs
dWU7IH0KLSAgICBpbmxpbmUgdm9pZCBzZXRCb3R0b20oRnJhY3Rpb25hbExheW91dFVuaXQgdmFs
dWUpIHsgbV9ib3R0b20gPSB2YWx1ZTsgfQotICAgIGlubGluZSB2b2lkIHNldExlZnQoRnJhY3Rp
b25hbExheW91dFVuaXQgdmFsdWUpIHsgbV9sZWZ0ID0gdmFsdWU7IH0KLQotICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IGxvZ2ljYWxUb3AoV3JpdGluZ01vZGUpIGNvbnN0OwotICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20oV3JpdGluZ01vZGUpIGNvbnN0OwotICAgIEZyYWN0
aW9uYWxMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KFdyaXRpbmdNb2RlKSBjb25zdDsKLSAgICBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQoV3JpdGluZ01vZGUpIGNvbnN0OwotCi0gICAg
RnJhY3Rpb25hbExheW91dFVuaXQgYmVmb3JlKFdyaXRpbmdNb2RlKSBjb25zdDsKLSAgICBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBhZnRlcihXcml0aW5nTW9kZSkgY29uc3Q7Ci0gICAgRnJhY3Rpb25h
bExheW91dFVuaXQgc3RhcnQoV3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24pIGNvbnN0OwotICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0IGVuZChXcml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbikgY29u
c3Q7Ci0KLSAgICB2b2lkIHNldEJlZm9yZShXcml0aW5nTW9kZSwgRnJhY3Rpb25hbExheW91dFVu
aXQpOwotICAgIHZvaWQgc2V0QWZ0ZXIoV3JpdGluZ01vZGUsIEZyYWN0aW9uYWxMYXlvdXRVbml0
KTsKLSAgICB2b2lkIHNldFN0YXJ0KFdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uLCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCk7Ci0gICAgdm9pZCBzZXRFbmQoV3JpdGluZ01vZGUsIFRleHREaXJlY3Rp
b24sIEZyYWN0aW9uYWxMYXlvdXRVbml0KTsKLQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBt
dXRhYmxlTG9naWNhbExlZnQoV3JpdGluZ01vZGUpOwotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBtdXRhYmxlTG9naWNhbFJpZ2h0KFdyaXRpbmdNb2RlKTsKLQotICAgIEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBtdXRhYmxlQmVmb3JlKFdyaXRpbmdNb2RlKTsKLSAgICBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgbXV0YWJsZUFmdGVyKFdyaXRpbmdNb2RlKTsKLQotcHJpdmF0ZToKLSAgICBGcmFjdGlv
bmFsTGF5b3V0VW5pdCBtX3RvcDsKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtX3JpZ2h0Owot
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1fYm90dG9tOwotICAgIEZyYWN0aW9uYWxMYXlvdXRV
bml0IG1fbGVmdDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEZy
YWN0aW9uYWxMYXlvdXRCb3hFeHRlbnRfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFBvaW50LmgJKHJldmlzaW9u
IDEzMzY3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxM
YXlvdXRQb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5MiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRnJh
Y3Rpb25hbExheW91dFBvaW50X2gKLSNkZWZpbmUgRnJhY3Rpb25hbExheW91dFBvaW50X2gKLQot
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0U2l6ZS5o
IgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLSNpZiBQTEFURk9STShRVCkKLSNpbmNs
dWRlIDxxZ2xvYmFsLmg+Ci1RVF9CRUdJTl9OQU1FU1BBQ0UKLWNsYXNzIFFQb2ludDsKLWNsYXNz
IFFQb2ludEY7Ci1RVF9FTkRfTkFNRVNQQUNFCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgewotcHVibGljOgotICAgIEZyYWN0aW9u
YWxMYXlvdXRQb2ludCgpIDogbV94KDApLCBtX3koMCkgeyB9Ci0gICAgRnJhY3Rpb25hbExheW91
dFBvaW50KEZyYWN0aW9uYWxMYXlvdXRVbml0IHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHkpIDog
bV94KHgpLCBtX3koeSkgeyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFBvaW50KGNvbnN0IEludFBv
aW50JiBwb2ludCkgOiBtX3gocG9pbnQueCgpKSwgbV95KHBvaW50LnkoKSkgeyB9Ci0gICAgZXhw
bGljaXQgRnJhY3Rpb25hbExheW91dFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHNpemUpIDogbV94
KHNpemUueCgpKSwgbV95KHNpemUueSgpKSB7IH0KLSAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpIDogbV94KHNpemUud2lk
dGgoKSksIG1feShzaXplLmhlaWdodCgpKSB7IH0KLQotICAgIHN0YXRpYyBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQgemVybygpIHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludCgpOyB9Ci0KLSAg
ICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB4KCkgY29uc3QgeyByZXR1cm4gbV94OyB9Ci0gICAgRnJh
Y3Rpb25hbExheW91dFVuaXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQotCi0gICAgdm9pZCBz
ZXRYKEZyYWN0aW9uYWxMYXlvdXRVbml0IHgpIHsgbV94ID0geDsgfQotICAgIHZvaWQgc2V0WShG
cmFjdGlvbmFsTGF5b3V0VW5pdCB5KSB7IG1feSA9IHk7IH0KLQotICAgIHZvaWQgbW92ZShjb25z
dCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgcykgeyBtb3ZlKHMud2lkdGgoKSwgcy5oZWlnaHQoKSk7
IH0gCi0gICAgdm9pZCBtb3ZlQnkoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBvZmZzZXQp
IHsgbW92ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsgfQotICAgIHZvaWQgbW92ZShGcmFjdGlv
bmFsTGF5b3V0VW5pdCBkeCwgRnJhY3Rpb25hbExheW91dFVuaXQgZHkpIHsgbV94ICs9IGR4OyBt
X3kgKz0gZHk7IH0KLSAgICB2b2lkIHNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSkKLSAgICB7Ci0g
ICAgICAgIG1feCAqPSBzeDsKLSAgICAgICAgbV95ICo9IHN5OwotICAgIH0KLSAgICAKLSAgICBG
cmFjdGlvbmFsTGF5b3V0UG9pbnQgZXhwYW5kZWRUbyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9p
bnQmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQ
b2ludChzdGQ6Om1heChtX3gsIG90aGVyLm1feCksIHN0ZDo6bWF4KG1feSwgb3RoZXIubV95KSk7
Ci0gICAgfQotCi0gICAgRnJhY3Rpb25hbExheW91dFBvaW50IHNocnVua1RvKGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRQb2ludCYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gRnJh
Y3Rpb25hbExheW91dFBvaW50KHN0ZDo6bWluKG1feCwgb3RoZXIubV94KSwgc3RkOjptaW4obV95
LCBvdGhlci5tX3kpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsYW1wTmVnYXRpdmVUb1plcm8oKQot
ICAgIHsKLSAgICAgICAgKnRoaXMgPSBleHBhbmRlZFRvKHplcm8oKSk7Ci0gICAgfQotCi0gICAg
RnJhY3Rpb25hbExheW91dFBvaW50IHRyYW5zcG9zZWRQb2ludCgpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KG1feSwgbV94KTsKLSAgICB9Ci0KLSNp
ZiBQTEFURk9STShRVCkKLSAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3Qg
UVBvaW50Jik7Ci0gICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFBvaW50KGNvbnN0IFFQb2lu
dEYmKTsKLSAgICBvcGVyYXRvciBRUG9pbnRGKCkgY29uc3Q7Ci0jZW5kaWYKLQotcHJpdmF0ZToK
LSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtX3gsIG1feTsKLX07Ci0KLWlubGluZSBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQmIG9wZXJhdG9yKz0oRnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25z
dCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKLXsKLSAgICBhLm1vdmUoYi53aWR0aCgpLCBiLmhl
aWdodCgpKTsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2lu
dCYgb3BlcmF0b3ItPShGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRTaXplJiBiKQotewotICAgIGEubW92ZSgtYi53aWR0aCgpLCAtYi5oZWlnaHQoKSk7Ci0g
ICAgcmV0dXJuIGE7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgb3BlcmF0b3Ir
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNp
emUmIGIpCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChhLngoKSArIGIud2lk
dGgoKSwgYS55KCkgKyBiLmhlaWdodCgpKTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCBvcGVyYXRvcisoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQmIGIpCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2lu
dChhLngoKSArIGIueCgpLCBhLnkoKSArIGIueSgpKTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxM
YXlvdXRTaXplIG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYikKLXsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91
dFNpemUoYS54KCkgLSBiLngoKSwgYS55KCkgLSBiLnkoKSk7Ci19Ci0KLWlubGluZSBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwg
Y29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxM
YXlvdXRQb2ludChhLngoKSAtIGIud2lkdGgoKSwgYS55KCkgLSBiLmhlaWdodCgpKTsKLX0KLQot
aW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExh
eW91dFBvaW50JiBwb2ludCkKLXsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KC1w
b2ludC54KCksIC1wb2ludC55KCkpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBi
KQotewotICAgIHJldHVybiBhLngoKSA9PSBiLngoKSAmJiBhLnkoKSA9PSBiLnkoKTsKLX0KLQot
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYikKLXsKLSAgICByZXR1cm4gYS54KCkgIT0gYi54
KCkgfHwgYS55KCkgIT0gYi55KCk7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQg
dG9Qb2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkKLXsKLSAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFBvaW50KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci19Ci0K
LWlubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSB0b1NpemUoY29uc3QgRnJhY3Rpb25hbExheW91
dFBvaW50JiBhKQotewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShhLngoKSwgYS55
KCkpOwotfQotCi1pbmxpbmUgSW50UG9pbnQgZmxvb3JlZEludFBvaW50KGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRQb2ludCYgcG9pbnQpCi17Ci0gICAgcmV0dXJuIEludFBvaW50KHBvaW50LngoKS5m
bG9vcigpLCBwb2ludC55KCkuZmxvb3IoKSk7Ci19Ci0KLWlubGluZSBJbnRQb2ludCByb3VuZGVk
SW50UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBwb2ludCkKLXsKLSAgICByZXR1
cm4gSW50UG9pbnQocG9pbnQueCgpLnJvdW5kKCksIHBvaW50LnkoKS5yb3VuZCgpKTsKLX0KLQot
aW5saW5lIEludFBvaW50IHJvdW5kZWRJbnRQb2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6
ZSYgc2l6ZSkKLXsKLSAgICByZXR1cm4gSW50UG9pbnQoc2l6ZS53aWR0aCgpLnJvdW5kKCksIHNp
emUuaGVpZ2h0KCkucm91bmQoKSk7Ci19Ci0KLWlubGluZSBJbnRQb2ludCBjZWlsZWRJbnRQb2lu
dChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50KQotewotICAgIHJldHVybiBJbnRQ
b2ludChwb2ludC54KCkuY2VpbCgpLCBwb2ludC55KCkuY2VpbCgpKTsKLX0KLQotaW5saW5lIEZy
YWN0aW9uYWxMYXlvdXRQb2ludCBmbG9vcmVkRnJhY3Rpb25hbExheW91dFBvaW50KGNvbnN0IEZs
b2F0UG9pbnQmIHApCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChGcmFjdGlv
bmFsTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Rmxvb3IocC54KCkpLCBGcmFjdGlvbmFsTGF5b3V0VW5p
dDo6ZnJvbUZsb2F0Rmxvb3IocC55KCkpKTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCBjZWlsZWRGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkKLXsK
LSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpm
cm9tRmxvYXRDZWlsKHAueCgpKSwgRnJhY3Rpb25hbExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwo
cC55KCkpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRnJhY3Rp
b25hbExheW91dFBvaW50X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAJKHJldmlzaW9uIDEzMzY3
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRS
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFJlY3QuaCIKLQotI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRVbml0LmgiCi0jaW5jbHVkZSA8YWxn
b3JpdGhtPgotCi11c2luZyBzdGQ6Om1heDsKLXVzaW5nIHN0ZDo6bWluOwotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLUZyYWN0aW9uYWxMYXlvdXRSZWN0OjpGcmFjdGlvbmFsTGF5b3V0UmVjdChj
b25zdCBGbG9hdFJlY3QmIHIpCi0gICAgOiBtX2xvY2F0aW9uKEZyYWN0aW9uYWxMYXlvdXRQb2lu
dChyLmxvY2F0aW9uKCkpKQotICAgICwgbV9zaXplKEZyYWN0aW9uYWxMYXlvdXRTaXplKHIuc2l6
ZSgpKSkKLXsKLX0KLQotYm9vbCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6aW50ZXJzZWN0cyhjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgLy8gQ2hlY2tpbmcg
ZW1wdGluZXNzIGhhbmRsZXMgbmVnYXRpdmUgd2lkdGhzIGFzIHdlbGwgYXMgemVyby4KLSAgICBy
ZXR1cm4gIWlzRW1wdHkoKSAmJiAhb3RoZXIuaXNFbXB0eSgpCi0gICAgICAgICYmIHgoKSA8IG90
aGVyLm1heFgoKSAmJiBvdGhlci54KCkgPCBtYXhYKCkKLSAgICAgICAgJiYgeSgpIDwgb3RoZXIu
bWF4WSgpICYmIG90aGVyLnkoKSA8IG1heFkoKTsKLX0KLQotYm9vbCBGcmFjdGlvbmFsTGF5b3V0
UmVjdDo6Y29udGFpbnMoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90aGVyKSBjb25zdAot
ewotICAgIHJldHVybiB4KCkgPD0gb3RoZXIueCgpICYmIG1heFgoKSA+PSBvdGhlci5tYXhYKCkK
LSAgICAgICAgJiYgeSgpIDw9IG90aGVyLnkoKSAmJiBtYXhZKCkgPj0gb3RoZXIubWF4WSgpOwot
fQotCi12b2lkIEZyYWN0aW9uYWxMYXlvdXRSZWN0OjppbnRlcnNlY3QoY29uc3QgRnJhY3Rpb25h
bExheW91dFJlY3QmIG90aGVyKQotewotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdMb2Nh
dGlvbihtYXgoeCgpLCBvdGhlci54KCkpLCBtYXgoeSgpLCBvdGhlci55KCkpKTsKLSAgICBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQgbmV3TWF4UG9pbnQobWluKG1heFgoKSwgb3RoZXIubWF4WCgpKSwg
bWluKG1heFkoKSwgb3RoZXIubWF4WSgpKSk7Ci0KLSAgICAvLyBSZXR1cm4gYSBjbGVhbiBlbXB0
eSByZWN0YW5nbGUgZm9yIG5vbi1pbnRlcnNlY3RpbmcgY2FzZXMuCi0gICAgaWYgKG5ld0xvY2F0
aW9uLngoKSA+PSBuZXdNYXhQb2ludC54KCkgfHwgbmV3TG9jYXRpb24ueSgpID49IG5ld01heFBv
aW50LnkoKSkgewotICAgICAgICBuZXdMb2NhdGlvbiA9IEZyYWN0aW9uYWxMYXlvdXRQb2ludCgw
LCAwKTsKLSAgICAgICAgbmV3TWF4UG9pbnQgPSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoMCwgMCk7
Ci0gICAgfQotCi0gICAgbV9sb2NhdGlvbiA9IG5ld0xvY2F0aW9uOwotICAgIG1fc2l6ZSA9IG5l
d01heFBvaW50IC0gbmV3TG9jYXRpb247Ci19Ci0KLXZvaWQgRnJhY3Rpb25hbExheW91dFJlY3Q6
OnVuaXRlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBvdGhlcikKLXsKLSAgICAvLyBIYW5k
bGUgZW1wdHkgc3BlY2lhbCBjYXNlcyBmaXJzdC4KLSAgICBpZiAob3RoZXIuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKGlzRW1wdHkoKSkgewotICAgICAgICAqdGhpcyA9IG90
aGVyOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRnJhY3Rpb25hbExheW91dFBvaW50
IG5ld0xvY2F0aW9uKG1pbih4KCksIG90aGVyLngoKSksIG1pbih5KCksIG90aGVyLnkoKSkpOwot
ICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdNYXhQb2ludChtYXgobWF4WCgpLCBvdGhlci5t
YXhYKCkpLCBtYXgobWF4WSgpLCBvdGhlci5tYXhZKCkpKTsKLQotICAgIG1fbG9jYXRpb24gPSBu
ZXdMb2NhdGlvbjsKLSAgICBtX3NpemUgPSBuZXdNYXhQb2ludCAtIG5ld0xvY2F0aW9uOwotfQot
Ci12b2lkIEZyYWN0aW9uYWxMYXlvdXRSZWN0Ojp1bml0ZUlmTm9uWmVybyhjb25zdCBGcmFjdGlv
bmFsTGF5b3V0UmVjdCYgb3RoZXIpCi17Ci0gICAgLy8gSGFuZGxlIGVtcHR5IHNwZWNpYWwgY2Fz
ZXMgZmlyc3QuCi0gICAgaWYgKCFvdGhlci53aWR0aCgpICYmICFvdGhlci5oZWlnaHQoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmICghd2lkdGgoKSAmJiAhaGVpZ2h0KCkpIHsKLSAgICAgICAg
KnRoaXMgPSBvdGhlcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEZyYWN0aW9uYWxM
YXlvdXRQb2ludCBuZXdMb2NhdGlvbihtaW4oeCgpLCBvdGhlci54KCkpLCBtaW4oeSgpLCBvdGhl
ci55KCkpKTsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbmV3TWF4UG9pbnQobWF4KG1heFgo
KSwgb3RoZXIubWF4WCgpKSwgbWF4KG1heFkoKSwgb3RoZXIubWF4WSgpKSk7Ci0KLSAgICBtX2xv
Y2F0aW9uID0gbmV3TG9jYXRpb247Ci0gICAgbV9zaXplID0gbmV3TWF4UG9pbnQgLSBuZXdMb2Nh
dGlvbjsKLX0KLQotdm9pZCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6c2NhbGUoZmxvYXQgcykKLXsK
LSAgICBtX2xvY2F0aW9uLnNjYWxlKHMsIHMpOwotICAgIG1fc2l6ZS5zY2FsZShzKTsKLX0KLQot
RnJhY3Rpb25hbExheW91dFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxGcmFjdGlvbmFsTGF5
b3V0UmVjdD4mIHJlY3RzKQotewotICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0IHJlc3VsdDsKLQot
ICAgIHNpemVfdCBjb3VudCA9IHJlY3RzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNvdW50OyArK2kpCi0gICAgICAgIHJlc3VsdC51bml0ZShyZWN0c1tpXSk7Ci0KLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1JbnRSZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgRnJhY3Rp
b25hbExheW91dFJlY3QmIHJlY3QpCi17Ci0gICAgSW50UG9pbnQgbG9jYXRpb24gPSBmbG9vcmVk
SW50UG9pbnQocmVjdC5taW5YTWluWUNvcm5lcigpKTsKLSAgICBJbnRQb2ludCBtYXhQb2ludCA9
IGNlaWxlZEludFBvaW50KHJlY3QubWF4WE1heFlDb3JuZXIoKSk7Ci0KLSAgICByZXR1cm4gSW50
UmVjdChsb2NhdGlvbiwgbWF4UG9pbnQgLSBsb2NhdGlvbik7Ci19Ci0KLUZyYWN0aW9uYWxMYXlv
dXRSZWN0IGVuY2xvc2luZ0ZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKLXsKLSNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAgIEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCBsb2NhdGlvbiA9IGZsb29yZWRGcmFjdGlvbmFsTGF5b3V0UG9pbnQocmVjdC5taW5YTWlu
WUNvcm5lcigpKTsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbWF4UG9pbnQgPSBjZWlsZWRG
cmFjdGlvbmFsTGF5b3V0UG9pbnQocmVjdC5tYXhYTWF4WUNvcm5lcigpKTsKLQotICAgIHJldHVy
biBGcmFjdGlvbmFsTGF5b3V0UmVjdChsb2NhdGlvbiwgbWF4UG9pbnQgLSBsb2NhdGlvbik7Ci0j
ZWxzZQotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHJlY3QpOwotI2VuZGlmCi19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuaAkocmV2aXNpb24gMTMzNjc3
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
YykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgot
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEZyYWN0aW9uYWxM
YXlvdXRSZWN0X2gKLSNkZWZpbmUgRnJhY3Rpb25hbExheW91dFJlY3RfaAotCi0jaW5jbHVkZSAi
RnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oIgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRQ
b2ludC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0K
LSNpZiBQTEFURk9STShRVCkKLSNpbmNsdWRlIDxxZ2xvYmFsLmg+Ci1RVF9CRUdJTl9OQU1FU1BB
Q0UKLWNsYXNzIFFSZWN0OwotY2xhc3MgUVJlY3RGOwotUVRfRU5EX05BTUVTUEFDRQotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRmxvYXRSZWN0OwotCi1jbGFzcyBGcmFj
dGlvbmFsTGF5b3V0UmVjdCB7Ci1wdWJsaWM6Ci0gICAgRnJhY3Rpb25hbExheW91dFJlY3QoKSB7
IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQm
IGxvY2F0aW9uLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkKLSAgICAgICAgOiBt
X2xvY2F0aW9uKGxvY2F0aW9uKSwgbV9zaXplKHNpemUpIHsgfQotICAgIEZyYWN0aW9uYWxMYXlv
dXRSZWN0KEZyYWN0aW9uYWxMYXlvdXRVbml0IHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHksIEZy
YWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBoZWlnaHQpCi0g
ICAgICAgIDogbV9sb2NhdGlvbihGcmFjdGlvbmFsTGF5b3V0UG9pbnQoeCwgeSkpLCBtX3NpemUo
RnJhY3Rpb25hbExheW91dFNpemUod2lkdGgsIGhlaWdodCkpIHsgfQotICAgIEZyYWN0aW9uYWxM
YXlvdXRSZWN0KGNvbnN0IEZsb2F0UG9pbnQmIGxvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIHNp
emUpCi0gICAgICAgIDogbV9sb2NhdGlvbihsb2NhdGlvbiksIG1fc2l6ZShzaXplKSB7IH0KLSAg
ICBGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSA6IG1fbG9jYXRpb24o
cmVjdC5sb2NhdGlvbigpKSwgbV9zaXplKHJlY3Quc2l6ZSgpKSB7IH0KLQotICAgIGV4cGxpY2l0
IEZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOyAvLyBkb24ndCBkbyB0aGlz
IGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQotICAgICAgICAKLSAgICBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQgbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9Ci0gICAgRnJh
Y3Rpb25hbExheW91dFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotCi0gICAg
SW50UG9pbnQgcGl4ZWxTbmFwcGVkTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiByb3VuZGVkSW50
UG9pbnQobV9sb2NhdGlvbik7IH0KLSAgICBJbnRTaXplIHBpeGVsU25hcHBlZFNpemUoKSBjb25z
dCB7IHJldHVybiBJbnRTaXplKHNuYXBTaXplVG9QaXhlbChtX3NpemUud2lkdGgoKSwgbV9sb2Nh
dGlvbi54KCkpLCBzbmFwU2l6ZVRvUGl4ZWwobV9zaXplLmhlaWdodCgpLCBtX2xvY2F0aW9uLnko
KSkpOyB9Ci0KLSAgICB2b2lkIHNldExvY2F0aW9uKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2lu
dCYgbG9jYXRpb24pIHsgbV9sb2NhdGlvbiA9IGxvY2F0aW9uOyB9Ci0gICAgdm9pZCBzZXRTaXpl
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KLQot
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHgoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uLngo
KTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHkoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0
aW9uLnkoKTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1heFgoKSBjb25zdCB7IHJldHVy
biB4KCkgKyB3aWR0aCgpOyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgbWF4WSgpIGNvbnN0
IHsgcmV0dXJuIHkoKSArIGhlaWdodCgpOyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgd2lk
dGgoKSBjb25zdCB7IHJldHVybiBtX3NpemUud2lkdGgoKTsgfQotICAgIEZyYWN0aW9uYWxMYXlv
dXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQotCi0gICAg
aW50IHBpeGVsU25hcHBlZFgoKSBjb25zdCB7IHJldHVybiB4KCkucm91bmQoKTsgfQotICAgIGlu
dCBwaXhlbFNuYXBwZWRZKCkgY29uc3QgeyByZXR1cm4geSgpLnJvdW5kKCk7IH0KLSAgICBpbnQg
cGl4ZWxTbmFwcGVkV2lkdGgoKSBjb25zdCB7IHJldHVybiBzbmFwU2l6ZVRvUGl4ZWwod2lkdGgo
KSwgeCgpKTsgfQotICAgIGludCBwaXhlbFNuYXBwZWRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBz
bmFwU2l6ZVRvUGl4ZWwoaGVpZ2h0KCksIHkoKSk7IH0KLSAgICBpbnQgcGl4ZWxTbmFwcGVkTWF4
WCgpIGNvbnN0IHsgcmV0dXJuIChtX2xvY2F0aW9uLngoKSArIG1fc2l6ZS53aWR0aCgpKS5yb3Vu
ZCgpOyB9Ci0gICAgaW50IHBpeGVsU25hcHBlZE1heFkoKSBjb25zdCB7IHJldHVybiAobV9sb2Nh
dGlvbi55KCkgKyBtX3NpemUuaGVpZ2h0KCkpLnJvdW5kKCk7IH0KLQotICAgIHZvaWQgc2V0WChG
cmFjdGlvbmFsTGF5b3V0VW5pdCB4KSB7IG1fbG9jYXRpb24uc2V0WCh4KTsgfQotICAgIHZvaWQg
c2V0WShGcmFjdGlvbmFsTGF5b3V0VW5pdCB5KSB7IG1fbG9jYXRpb24uc2V0WSh5KTsgfQotICAg
IHZvaWQgc2V0V2lkdGgoRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgpIHsgbV9zaXplLnNldFdp
ZHRoKHdpZHRoKTsgfQotICAgIHZvaWQgc2V0SGVpZ2h0KEZyYWN0aW9uYWxMYXlvdXRVbml0IGhl
aWdodCkgeyBtX3NpemUuc2V0SGVpZ2h0KGhlaWdodCk7IH0KLQotICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0KLQotICAgIC8vIE5PVEU6IFRoZSBy
ZXN1bHQgaXMgcm91bmRlZCB0byBpbnRlZ2VyIHZhbHVlcywgYW5kIHRodXMgbWF5IGJlIG5vdCB0
aGUgZXhhY3QKLSAgICAvLyBjZW50ZXIgcG9pbnQuCi0gICAgRnJhY3Rpb25hbExheW91dFBvaW50
IGNlbnRlcigpIGNvbnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludCh4KCkgKyB3aWR0
aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAyKTsgfQotCi0gICAgdm9pZCBtb3ZlKGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1fbG9jYXRpb24gKz0gc2l6ZTsgfSAKLSAgICB2
b2lkIG1vdmVCeShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIG9mZnNldCkgeyBtX2xvY2F0
aW9uLm1vdmUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7IH0KLSAgICB2b2lkIG1vdmUoRnJhY3Rp
b25hbExheW91dFVuaXQgZHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGR5KSB7IG1fbG9jYXRpb24u
bW92ZShkeCwgZHkpOyB9IAotCi0gICAgdm9pZCBleHBhbmQoY29uc3QgRnJhY3Rpb25hbExheW91
dFNpemUmIHNpemUpIHsgbV9zaXplICs9IHNpemU7IH0KLSAgICB2b2lkIGV4cGFuZChjb25zdCBG
cmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50JiBib3gpCi0gICAgewotICAgICAgICBtX2xvY2F0aW9u
Lm1vdmUoLWJveC5sZWZ0KCksIC1ib3gudG9wKCkpOwotICAgICAgICBtX3NpemUuZXhwYW5kKGJv
eC5sZWZ0KCkgKyBib3gucmlnaHQoKSwgYm94LnRvcCgpICsgYm94LmJvdHRvbSgpKTsKLSAgICB9
Ci0gICAgdm9pZCBleHBhbmQoRnJhY3Rpb25hbExheW91dFVuaXQgZHcsIEZyYWN0aW9uYWxMYXlv
dXRVbml0IGRoKSB7IG1fc2l6ZS5leHBhbmQoZHcsIGRoKTsgfQotICAgIHZvaWQgY29udHJhY3Qo
Y29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpIHsgbV9zaXplIC09IHNpemU7IH0KLSAg
ICB2b2lkIGNvbnRyYWN0KEZyYWN0aW9uYWxMYXlvdXRVbml0IGR3LCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBkaCkgeyBtX3NpemUuZXhwYW5kKC1kdywgLWRoKTsgfQotCi0gICAgdm9pZCBzaGlmdFhF
ZGdlVG8oRnJhY3Rpb25hbExheW91dFVuaXQgZWRnZSkKLSAgICB7Ci0gICAgICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IGRlbHRhID0gZWRnZSAtIHgoKTsKLSAgICAgICAgc2V0WChlZGdlKTsKLSAg
ICAgICAgc2V0V2lkdGgoc3RkOjptYXg8RnJhY3Rpb25hbExheW91dFVuaXQ+KDAsIHdpZHRoKCkg
LSBkZWx0YSkpOwotICAgIH0KLSAgICB2b2lkIHNoaWZ0TWF4WEVkZ2VUbyhGcmFjdGlvbmFsTGF5
b3V0VW5pdCBlZGdlKQotICAgIHsKLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZGVsdGEg
PSBlZGdlIC0gbWF4WCgpOwotICAgICAgICBzZXRXaWR0aChzdGQ6Om1heDxGcmFjdGlvbmFsTGF5
b3V0VW5pdD4oMCwgd2lkdGgoKSArIGRlbHRhKSk7Ci0gICAgfQotICAgIHZvaWQgc2hpZnRZRWRn
ZVRvKEZyYWN0aW9uYWxMYXlvdXRVbml0IGVkZ2UpCi0gICAgewotICAgICAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBkZWx0YSA9IGVkZ2UgLSB5KCk7Ci0gICAgICAgIHNldFkoZWRnZSk7Ci0gICAg
ICAgIHNldEhlaWdodChzdGQ6Om1heDxGcmFjdGlvbmFsTGF5b3V0VW5pdD4oMCwgaGVpZ2h0KCkg
LSBkZWx0YSkpOwotICAgIH0KLSAgICB2b2lkIHNoaWZ0TWF4WUVkZ2VUbyhGcmFjdGlvbmFsTGF5
b3V0VW5pdCBlZGdlKQotICAgIHsKLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZGVsdGEg
PSBlZGdlIC0gbWF4WSgpOwotICAgICAgICBzZXRIZWlnaHQoc3RkOjptYXg8RnJhY3Rpb25hbExh
eW91dFVuaXQ+KDAsIGhlaWdodCgpICsgZGVsdGEpKTsKLSAgICB9Ci0KLSAgICBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQgbWluWE1pbllDb3JuZXIoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9
IC8vIHR5cGljYWxseSB0b3BMZWZ0Ci0gICAgRnJhY3Rpb25hbExheW91dFBvaW50IG1heFhNaW5Z
Q29ybmVyKCkgY29uc3QgeyByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KG1fbG9jYXRpb24u
eCgpICsgbV9zaXplLndpZHRoKCksIG1fbG9jYXRpb24ueSgpKTsgfSAvLyB0eXBpY2FsbHkgdG9w
UmlnaHQKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbWluWE1heFlDb3JuZXIoKSBjb25zdCB7
IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQobV9sb2NhdGlvbi54KCksIG1fbG9jYXRpb24u
eSgpICsgbV9zaXplLmhlaWdodCgpKTsgfSAvLyB0eXBpY2FsbHkgYm90dG9tTGVmdAotICAgIEZy
YWN0aW9uYWxMYXlvdXRQb2ludCBtYXhYTWF4WUNvcm5lcigpIGNvbnN0IHsgcmV0dXJuIEZyYWN0
aW9uYWxMYXlvdXRQb2ludChtX2xvY2F0aW9uLngoKSArIG1fc2l6ZS53aWR0aCgpLCBtX2xvY2F0
aW9uLnkoKSArIG1fc2l6ZS5oZWlnaHQoKSk7IH0gLy8gdHlwaWNhbGx5IGJvdHRvbVJpZ2h0Ci0g
ICAgCi0gICAgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JikgY29u
c3Q7Ci0gICAgYm9vbCBjb250YWlucyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpIGNvbnN0
OwotCi0gICAgLy8gVGhpcyBjaGVja3MgdG8gc2VlIGlmIHRoZSByZWN0IGNvbnRhaW5zIHgseSBp
biB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuCi0gICAgLy8gRXF1aXZhbGVudCB0byBjaGVja2luZyBp
ZiB0aGUgcmVjdCBjb250YWlucyBhIDF4MSByZWN0IGJlbG93IGFuZCB0byB0aGUgcmlnaHQgb2Yg
KHB4LHB5KS4KLSAgICBib29sIGNvbnRhaW5zKEZyYWN0aW9uYWxMYXlvdXRVbml0IHB4LCBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBweSkgY29uc3QKLSAgICAgICAgeyByZXR1cm4gcHggPj0geCgpICYm
IHB4IDwgbWF4WCgpICYmIHB5ID49IHkoKSAmJiBweSA8IG1heFkoKTsgfQotICAgIGJvb2wgY29u
dGFpbnMoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBwb2ludCkgY29uc3QgeyByZXR1cm4g
Y29udGFpbnMocG9pbnQueCgpLCBwb2ludC55KCkpOyB9Ci0KLSAgICB2b2lkIGludGVyc2VjdChj
b25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpOwotICAgIHZvaWQgdW5pdGUoY29uc3QgRnJhY3Rp
b25hbExheW91dFJlY3QmKTsKLSAgICB2b2lkIHVuaXRlSWZOb25aZXJvKGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRSZWN0Jik7Ci0KLSAgICB2b2lkIGluZmxhdGVYKEZyYWN0aW9uYWxMYXlvdXRVbml0
IGR4KQotICAgIHsKLSAgICAgICAgbV9sb2NhdGlvbi5zZXRYKG1fbG9jYXRpb24ueCgpIC0gZHgp
OwotICAgICAgICBtX3NpemUuc2V0V2lkdGgobV9zaXplLndpZHRoKCkgKyBkeCArIGR4KTsKLSAg
ICB9Ci0gICAgdm9pZCBpbmZsYXRlWShGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeSkKLSAgICB7Ci0g
ICAgICAgIG1fbG9jYXRpb24uc2V0WShtX2xvY2F0aW9uLnkoKSAtIGR5KTsKLSAgICAgICAgbV9z
aXplLnNldEhlaWdodChtX3NpemUuaGVpZ2h0KCkgKyBkeSArIGR5KTsKLSAgICB9Ci0gICAgdm9p
ZCBpbmZsYXRlKEZyYWN0aW9uYWxMYXlvdXRVbml0IGQpIHsgaW5mbGF0ZVgoZCk7IGluZmxhdGVZ
KGQpOyB9Ci0gICAgdm9pZCBzY2FsZShmbG9hdCBzKTsKLQotICAgIEZyYWN0aW9uYWxMYXlvdXRS
ZWN0IHRyYW5zcG9zZWRSZWN0KCkgY29uc3QgeyByZXR1cm4gRnJhY3Rpb25hbExheW91dFJlY3Qo
bV9sb2NhdGlvbi50cmFuc3Bvc2VkUG9pbnQoKSwgbV9zaXplLnRyYW5zcG9zZWRTaXplKCkpOyB9
Ci0KLSAgICBzdGF0aWMgRnJhY3Rpb25hbExheW91dFJlY3QgaW5maW5pdGVSZWN0KCkKLSAgICB7
Ci0gICAgICAgIC8vIFJldHVybiBhIHJlY3QgdGhhdCBpcyBzbGlnaHRseSBzbWFsbGVyIHRoYW4g
dGhlIHRydWUgbWF4IHJlY3QgdG8gYWxsb3cgcGl4ZWxTbmFwcGluZyB0byByb3VuZCB1cCB0byB0
aGUgbmVhcmVzdCBJbnRSZWN0IHdpdGhvdXQgb3ZlcmZsb3dpbmcuCi0gICAgICAgIHJldHVybiBG
cmFjdGlvbmFsTGF5b3V0UmVjdChGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bmVhcmx5TWluKCkgLyAy
LCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bmVhcmx5TWluKCkgLyAyLCBGcmFjdGlvbmFsTGF5b3V0
VW5pdDo6bmVhcmx5TWF4KCksIEZyYWN0aW9uYWxMYXlvdXRVbml0OjpuZWFybHlNYXgoKSk7Ci0g
ICAgfQotCi0jaWYgUExBVEZPUk0oUVQpCi0gICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFJl
Y3QoY29uc3QgUVJlY3QmKTsKLSAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25z
dCBRUmVjdEYmKTsKLSAgICBvcGVyYXRvciBRUmVjdEYoKSBjb25zdDsKLSNlbmRpZgotCi1wcml2
YXRlOgotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBtX2xvY2F0aW9uOwotICAgIEZyYWN0aW9u
YWxMYXlvdXRTaXplIG1fc2l6ZTsKLX07Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UmVjdCBp
bnRlcnNlY3Rpb24oY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRSZWN0JiBiKQotewotICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0IGMgPSBhOwotICAg
IGMuaW50ZXJzZWN0KGIpOwotICAgIHJldHVybiBjOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExh
eW91dFJlY3QgdW5pb25SZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBhLCBjb25zdCBG
cmFjdGlvbmFsTGF5b3V0UmVjdCYgYikKLXsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCBjID0g
YTsKLSAgICBjLnVuaXRlKGIpOwotICAgIHJldHVybiBjOwotfQotCi1GcmFjdGlvbmFsTGF5b3V0
UmVjdCB1bmlvblJlY3QoY29uc3QgVmVjdG9yPEZyYWN0aW9uYWxMYXlvdXRSZWN0PiYpOwotCi1p
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBhLCBjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYikKLXsKLSAgICByZXR1cm4gYS5sb2NhdGlvbigpID09
IGIubG9jYXRpb24oKSAmJiBhLnNpemUoKSA9PSBiLnNpemUoKTsKLX0KLQotaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYSwgY29uc3QgRnJhY3Rpb25h
bExheW91dFJlY3QmIGIpCi17Ci0gICAgcmV0dXJuIGEubG9jYXRpb24oKSAhPSBiLmxvY2F0aW9u
KCkgfHwgYS5zaXplKCkgIT0gYi5zaXplKCk7Ci19Ci0KLWlubGluZSBJbnRSZWN0IHBpeGVsU25h
cHBlZEludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIHJlY3QpCi17Ci0jaWYgRU5B
QkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICByZXR1cm4gSW50UmVjdChyb3VuZGVkSW50UG9pbnQo
cmVjdC5sb2NhdGlvbigpKSwgSW50U2l6ZShzbmFwU2l6ZVRvUGl4ZWwocmVjdC53aWR0aCgpLCBy
ZWN0LngoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc25hcFNpemVUb1BpeGVsKHJlY3QuaGVpZ2h0KCksIHJlY3QueSgpKSkp
OwotCi0jZWxzZQotICAgIHJldHVybiBJbnRSZWN0KHJlY3QpOwotI2VuZGlmCi19Ci0KLUludFJl
Y3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpOwotRnJhY3Rp
b25hbExheW91dFJlY3QgZW5jbG9zaW5nRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgRmxvYXRS
ZWN0Jik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEZyYWN0aW9uYWxM
YXlvdXRSZWN0X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0
aW9uYWxMYXlvdXRTaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFNpemUuaAkocmV2aXNpb24gMTMzNjc3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFNpemUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSwxNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMiwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEZyYWN0aW9uYWxMYXlvdXRTaXpl
X2gKLSNkZWZpbmUgRnJhY3Rpb25hbExheW91dFNpemVfaAotCi0jaW5jbHVkZSAiRmxvYXRTaXpl
LmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFVuaXQuaCIKLSNpbmNsdWRlICJJbnRTaXpl
LmgiCi0KLSNpZiBQTEFURk9STShRVCkKLSNpbmNsdWRlIDxxZ2xvYmFsLmg+Ci1RVF9CRUdJTl9O
QU1FU1BBQ0UKLWNsYXNzIFFTaXplOwotY2xhc3MgUVNpemVGOwotUVRfRU5EX05BTUVTUEFDRQot
I2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRnJhY3Rpb25hbExheW91dFBv
aW50OwotCi1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0U2l6ZSB7Ci1wdWJsaWM6Ci0gICAgRnJhY3Rp
b25hbExheW91dFNpemUoKSA6IG1fd2lkdGgoMCksIG1faGVpZ2h0KDApIHsgfQotICAgIEZyYWN0
aW9uYWxMYXlvdXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpIDogbV93aWR0aChzaXplLndpZHRo
KCkpLCBtX2hlaWdodChzaXplLmhlaWdodCgpKSB7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0U2l6
ZShGcmFjdGlvbmFsTGF5b3V0VW5pdCB3aWR0aCwgRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0
KSA6IG1fd2lkdGgod2lkdGgpLCBtX2hlaWdodChoZWlnaHQpIHsgfQotCi0gICAgZXhwbGljaXQg
RnJhY3Rpb25hbExheW91dFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKSA6IG1fd2lkdGgoc2l6
ZS53aWR0aCgpKSwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkgeyB9Ci0gICAgCi0gICAgRnJhY3Rp
b25hbExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9Ci0gICAgRnJh
Y3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KLQot
ICAgIHZvaWQgc2V0V2lkdGgoRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgpIHsgbV93aWR0aCA9
IHdpZHRoOyB9Ci0gICAgdm9pZCBzZXRIZWlnaHQoRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0
KSB7IG1faGVpZ2h0ID0gaGVpZ2h0OyB9Ci0KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiBtX3dpZHRoIDw9IDAgfHwgbV9oZWlnaHQgPD0gMDsgfQotICAgIGJvb2wgaXNaZXJvKCkg
Y29uc3QgeyByZXR1cm4gIW1fd2lkdGggJiYgIW1faGVpZ2h0OyB9Ci0KLSAgICBmbG9hdCBhc3Bl
Y3RSYXRpbygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX3dpZHRoKSAvIHN0
YXRpY19jYXN0PGZsb2F0PihtX2hlaWdodCk7IH0KLSAgICAKLSAgICB2b2lkIGV4cGFuZChGcmFj
dGlvbmFsTGF5b3V0VW5pdCB3aWR0aCwgRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KQotICAg
IHsKLSAgICAgICAgbV93aWR0aCArPSB3aWR0aDsKLSAgICAgICAgbV9oZWlnaHQgKz0gaGVpZ2h0
OwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNjYWxlKGZsb2F0IHNjYWxlKQotICAgIHsKLSAgICAg
ICAgbV93aWR0aCAqPSBzY2FsZTsKLSAgICAgICAgbV9oZWlnaHQgKj0gc2NhbGU7Ci0gICAgfQot
Ci0gICAgdm9pZCBzY2FsZShmbG9hdCB3aWR0aFNjYWxlLCBmbG9hdCBoZWlnaHRTY2FsZSkKLSAg
ICB7Ci0gICAgICAgIG1fd2lkdGggKj0gd2lkdGhTY2FsZTsKLSAgICAgICAgbV9oZWlnaHQgKj0g
aGVpZ2h0U2NhbGU7Ci0gICAgfQotICAgIAotICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplIGV4cGFu
ZGVkVG8oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIG90aGVyKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKG1fd2lkdGggPiBvdGhlci5tX3dpZHRo
ID8gbV93aWR0aCA6IG90aGVyLm1fd2lkdGgsCi0gICAgICAgICAgICBtX2hlaWdodCA+IG90aGVy
Lm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdodCk7Ci0gICAgfQotCi0gICAgRnJh
Y3Rpb25hbExheW91dFNpemUgc2hydW5rVG8oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIG90
aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKG1f
d2lkdGggPCBvdGhlci5tX3dpZHRoID8gbV93aWR0aCA6IG90aGVyLm1fd2lkdGgsCi0gICAgICAg
ICAgICBtX2hlaWdodCA8IG90aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdo
dCk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGFtcE5lZ2F0aXZlVG9aZXJvKCkKLSAgICB7Ci0gICAg
ICAgICp0aGlzID0gZXhwYW5kZWRUbyhGcmFjdGlvbmFsTGF5b3V0U2l6ZSgpKTsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBjbGFtcFRvTWluaW11bVNpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFNp
emUmIG1pbmltdW1TaXplKQotICAgIHsKLSAgICAgICAgaWYgKG1fd2lkdGggPCBtaW5pbXVtU2l6
ZS53aWR0aCgpKQotICAgICAgICAgICAgbV93aWR0aCA9IG1pbmltdW1TaXplLndpZHRoKCk7Ci0g
ICAgICAgIGlmIChtX2hlaWdodCA8IG1pbmltdW1TaXplLmhlaWdodCgpKQotICAgICAgICAgICAg
bV9oZWlnaHQgPSBtaW5pbXVtU2l6ZS5oZWlnaHQoKTsKLSAgICB9Ci0KLSAgICBGcmFjdGlvbmFs
TGF5b3V0U2l6ZSB0cmFuc3Bvc2VkU2l6ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFNpemUobV9oZWlnaHQsIG1fd2lkdGgpOwotICAgIH0KLQotI2lmIFBM
QVRGT1JNKFFUKQotICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0IFFTaXpl
Jik7Ci0gICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFNpemUoY29uc3QgUVNpemVGJik7Ci0g
ICAgb3BlcmF0b3IgUVNpemVGKCkgY29uc3Q7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBtX3dpZHRoLCBtX2hlaWdodDsKLX07Ci0KLWlubGluZSBGcmFjdGlv
bmFsTGF5b3V0U2l6ZSYgb3BlcmF0b3IrPShGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYSwgY29uc3Qg
RnJhY3Rpb25hbExheW91dFNpemUmIGIpCi17Ci0gICAgYS5zZXRXaWR0aChhLndpZHRoKCkgKyBi
LndpZHRoKCkpOwotICAgIGEuc2V0SGVpZ2h0KGEuaGVpZ2h0KCkgKyBiLmhlaWdodCgpKTsKLSAg
ICByZXR1cm4gYTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplJiBvcGVyYXRvci09
KEZyYWN0aW9uYWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikK
LXsKLSAgICBhLnNldFdpZHRoKGEud2lkdGgoKSAtIGIud2lkdGgoKSk7Ci0gICAgYS5zZXRIZWln
aHQoYS5oZWlnaHQoKSAtIGIuaGVpZ2h0KCkpOwotICAgIHJldHVybiBhOwotfQotCi1pbmxpbmUg
RnJhY3Rpb25hbExheW91dFNpemUgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXpl
JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKLXsKLSAgICByZXR1cm4gRnJhY3Rp
b25hbExheW91dFNpemUoYS53aWR0aCgpICsgYi53aWR0aCgpLCBhLmhlaWdodCgpICsgYi5oZWln
aHQoKSk7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSBvcGVyYXRvci0oY29uc3Qg
RnJhY3Rpb25hbExheW91dFNpemUmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQot
ewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShhLndpZHRoKCkgLSBiLndpZHRoKCks
IGEuaGVpZ2h0KCkgLSBiLmhlaWdodCgpKTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRT
aXplIG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkKLXsKLSAgICBy
ZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUoLXNpemUud2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkp
OwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXpl
JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKLXsKLSAgICByZXR1cm4gYS53aWR0
aCgpID09IGIud2lkdGgoKSAmJiBhLmhlaWdodCgpID09IGIuaGVpZ2h0KCk7Ci19Ci0KLWlubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGEsIGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRTaXplJiBiKQotewotICAgIHJldHVybiBhLndpZHRoKCkgIT0gYi53aWR0
aCgpIHx8IGEuaGVpZ2h0KCkgIT0gYi5oZWlnaHQoKTsKLX0KLQotaW5saW5lIEludFNpemUgZmxv
b3JlZEludFNpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHMpCi17Ci0gICAgcmV0dXJu
IEludFNpemUocy53aWR0aCgpLmZsb29yKCksIHMuaGVpZ2h0KCkuZmxvb3IoKSk7Ci19Ci0KLWlu
bGluZSBJbnRTaXplIHJvdW5kZWRJbnRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBz
KQotewotICAgIHJldHVybiBJbnRTaXplKHMud2lkdGgoKS5yb3VuZCgpLCBzLmhlaWdodCgpLnJv
dW5kKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBGcmFjdGlv
bmFsTGF5b3V0U2l6ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0xheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAkocmV2aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiTGF5b3V0
VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUg
IlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5jcHAJKHJldmlz
aW9uIDEzMzY3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
TGF5ZXJBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJBbmlt
YXRpb24uaCIKIAotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRTaXplLmgiCisjaW5jbHVkZSAi
TGF5b3V0U2l6ZS5oIgogI2luY2x1ZGUgIlVuaXRCZXppZXIuaCIKICNpbmNsdWRlIDx3dGYvQ3Vy
cmVudFRpbWUuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50
UmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW50UmVjdC5jcHAJKHJldmlzaW9uIDEzMzY3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ludFJlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogCi0jaW5jbHVkZSAiRnJh
Y3Rpb25hbExheW91dFJlY3QuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJM
YXlvdXRSZWN0LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogCiB1c2luZyBzdGQ6Om1heDsKQEAg
LTQxLDcgKzQxLDcgQEAgSW50UmVjdDo6SW50UmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCiB7CiB9
CiAKLUludFJlY3Q6OkludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIHIpCitJbnRS
ZWN0OjpJbnRSZWN0KGNvbnN0IExheW91dFJlY3QmIHIpCiAgICAgOiBtX2xvY2F0aW9uKHIueCgp
LCByLnkoKSkKICAgICAsIG1fc2l6ZShyLndpZHRoKCksIHIuaGVpZ2h0KCkpCiB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCShyZXZpc2lvbiAxMzM2
NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgc3RydWN0IFNrSVJlY3Q7CiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRSZWN0Owor
Y2xhc3MgTGF5b3V0UmVjdDsKIAogY2xhc3MgSW50UmVjdCB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX2xvY2F0aW9u
KEludFBvaW50KHgsIHkpKSwgbV9zaXplKEludFNpemUod2lkdGgsIGhlaWdodCkpIHsgfQogCiAg
ICAgZXhwbGljaXQgSW50UmVjdChjb25zdCBGbG9hdFJlY3QmKTsgLy8gZG9uJ3QgZG8gdGhpcyBp
bXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKLSAgICBleHBsaWNpdCBJbnRSZWN0KGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRSZWN0Jik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBp
dCdzIGxvc3N5CisgICAgZXhwbGljaXQgSW50UmVjdChjb25zdCBMYXlvdXRSZWN0Jik7IC8vIGRv
bid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CiAgICAgICAgIAogICAgIElu
dFBvaW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfQogICAgIEludFNp
emUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRCb3hFeHRlbnQuY3BwCShyZXZpc2lv
biAxMzM1MTcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9u
YWxMYXlvdXRCb3hFeHRlbnQuY3BwOjEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0xheW91dEJveEV4dGVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
OTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRCb3hF
eHRlbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGcmFjdGlvbmFsTGF5b3V0VW5pdCBG
cmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Ojpsb2dpY2FsVG9wKFdyaXRpbmdNb2RlIHdyaXRpbmdN
b2RlKSBjb25zdAoreworICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5n
TW9kZSkgPyBtX3RvcCA6IG1fbGVmdDsKK30KKworRnJhY3Rpb25hbExheW91dFVuaXQgRnJhY3Rp
b25hbExheW91dEJveEV4dGVudDo6bG9naWNhbEJvdHRvbShXcml0aW5nTW9kZSB3cml0aW5nTW9k
ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01v
ZGUpID8gbV9ib3R0b20gOiBtX3JpZ2h0OworfQorCitGcmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFj
dGlvbmFsTGF5b3V0Qm94RXh0ZW50Ojpsb2dpY2FsTGVmdChXcml0aW5nTW9kZSB3cml0aW5nTW9k
ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01v
ZGUpID8gbV9sZWZ0IDogbV90b3A7Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9u
YWxMYXlvdXRCb3hFeHRlbnQ6OmxvZ2ljYWxSaWdodChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkg
Y29uc3QKK3sKKyAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUp
ID8gbV9yaWdodCA6IG1fYm90dG9tOworfQorCitGcmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlv
bmFsTGF5b3V0Qm94RXh0ZW50OjpiZWZvcmUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0
Cit7CisgICAgc3dpdGNoICh3cml0aW5nTW9kZSkgeworICAgIGNhc2UgVG9wVG9Cb3R0b21Xcml0
aW5nTW9kZToKKyAgICAgICAgcmV0dXJuIG1fdG9wOworICAgIGNhc2UgQm90dG9tVG9Ub3BXcml0
aW5nTW9kZToKKyAgICAgICAgcmV0dXJuIG1fYm90dG9tOworICAgIGNhc2UgTGVmdFRvUmlnaHRX
cml0aW5nTW9kZToKKyAgICAgICAgcmV0dXJuIG1fbGVmdDsKKyAgICBjYXNlIFJpZ2h0VG9MZWZ0
V3JpdGluZ01vZGU6CisgICAgICAgIHJldHVybiBtX3JpZ2h0OworICAgIH0KKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbV90b3A7Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRV
bml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmFmdGVyKFdyaXRpbmdNb2RlIHdyaXRpbmdN
b2RlKSBjb25zdAoreworICAgIHN3aXRjaCAod3JpdGluZ01vZGUpIHsKKyAgICBjYXNlIFRvcFRv
Qm90dG9tV3JpdGluZ01vZGU6CisgICAgICAgIHJldHVybiBtX2JvdHRvbTsKKyAgICBjYXNlIEJv
dHRvbVRvVG9wV3JpdGluZ01vZGU6CisgICAgICAgIHJldHVybiBtX3RvcDsKKyAgICBjYXNlIExl
ZnRUb1JpZ2h0V3JpdGluZ01vZGU6CisgICAgICAgIHJldHVybiBtX3JpZ2h0OworICAgIGNhc2Ug
UmlnaHRUb0xlZnRXcml0aW5nTW9kZToKKyAgICAgICAgcmV0dXJuIG1fbGVmdDsKKyAgICB9Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG1fYm90dG9tOworfQorCitGcmFj
dGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzdGFydChXcml0aW5n
TW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0Cit7CisgICAg
aWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkKKyAgICAgICAgcmV0dXJu
IGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSA/IG1fbGVmdCA6IG1fcmlnaHQ7Cisg
ICAgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSA/IG1fdG9wIDogbV9i
b3R0b207Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRl
bnQ6OmVuZChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24p
IGNvbnN0Cit7CisgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkK
KyAgICAgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSA/IG1fcmln
aHQgOiBtX2xlZnQ7CisgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9u
KSA/IG1fYm90dG9tIDogbV90b3A7Cit9CisKK3ZvaWQgRnJhY3Rpb25hbExheW91dEJveEV4dGVu
dDo6c2V0QmVmb3JlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCB2YWx1ZSkKK3sKKyAgICBzd2l0Y2ggKHdyaXRpbmdNb2RlKSB7CisgICAgY2FzZSBUb3BUb0Jv
dHRvbVdyaXRpbmdNb2RlOgorICAgICAgICBtX3RvcCA9IHZhbHVlOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEJvdHRvbVRvVG9wV3JpdGluZ01vZGU6CisgICAgICAgIG1fYm90dG9tID0gdmFs
dWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGVmdFRvUmlnaHRXcml0aW5nTW9kZToKKyAg
ICAgICAgbV9sZWZ0ID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmlnaHRUb0xl
ZnRXcml0aW5nTW9kZToKKyAgICAgICAgbV9yaWdodCA9IHZhbHVlOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgbV90
b3AgPSB2YWx1ZTsKKyAgICB9Cit9CisKK3ZvaWQgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6
c2V0QWZ0ZXIoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHZh
bHVlKQoreworICAgIHN3aXRjaCAod3JpdGluZ01vZGUpIHsKKyAgICBjYXNlIFRvcFRvQm90dG9t
V3JpdGluZ01vZGU6CisgICAgICAgIG1fYm90dG9tID0gdmFsdWU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQm90dG9tVG9Ub3BXcml0aW5nTW9kZToKKyAgICAgICAgbV90b3AgPSB2YWx1ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMZWZ0VG9SaWdodFdyaXRpbmdNb2RlOgorICAgICAg
ICBtX3JpZ2h0ID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmlnaHRUb0xlZnRX
cml0aW5nTW9kZToKKyAgICAgICAgbV9sZWZ0ID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBtX2JvdHRv
bSA9IHZhbHVlOworICAgIH0KK30KKwordm9pZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Ojpz
ZXRTdGFydChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24s
IEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKQoreworICAgIGlmIChpc0hvcml6b250YWxXcml0
aW5nTW9kZSh3cml0aW5nTW9kZSkpIHsKKyAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oZGlyZWN0aW9uKSkKKyAgICAgICAgICAgIG1fbGVmdCA9IHZhbHVlOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX3JpZ2h0ID0gdmFsdWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYg
KGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSkKKyAgICAgICAgICAgIG1fdG9wID0g
dmFsdWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYm90dG9tID0gdmFsdWU7CisgICAg
fQorfQorCit2b2lkIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OnNldEVuZChXcml0aW5nTW9k
ZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIEZyYWN0aW9uYWxMYXlvdXRV
bml0IHZhbHVlKQoreworICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9k
ZSkpIHsKKyAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSkKKyAg
ICAgICAgICAgIG1fcmlnaHQgPSB2YWx1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9s
ZWZ0ID0gdmFsdWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oZGlyZWN0aW9uKSkKKyAgICAgICAgICAgIG1fYm90dG9tID0gdmFsdWU7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1fdG9wID0gdmFsdWU7CisgICAgfQorfQorCitGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6bXV0YWJsZUxvZ2ljYWxMZWZ0
KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQoreworICAgIHJldHVybiBpc0hvcml6b250YWxXcml0
aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX2xlZnQgOiBtX3RvcDsKK30KKworRnJhY3Rpb25hbExh
eW91dFVuaXQmIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6Om11dGFibGVMb2dpY2FsUmlnaHQo
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCit7CisgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fcmlnaHQgOiBtX2JvdHRvbTsKK30KKworRnJhY3Rpb25h
bExheW91dFVuaXQmIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6Om11dGFibGVCZWZvcmUoV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUpCit7CisgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKHdyaXRpbmdNb2RlKSA/IChpc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSh3cml0aW5nTW9k
ZSkgPyBtX2JvdHRvbSA6IG1fdG9wKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChpc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSh3cml0aW5nTW9k
ZSkgPyBtX3JpZ2h0OiBtX2xlZnQpOworfQorCitGcmFjdGlvbmFsTGF5b3V0VW5pdCYgRnJhY3Rp
b25hbExheW91dEJveEV4dGVudDo6bXV0YWJsZUFmdGVyKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2Rl
KQoreworICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyAo
aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV90b3AgOiBtX2JvdHRv
bSkgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9sZWZ0OiBtX3JpZ2h0
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRCb3hFeHRlbnQuY3BwCShyZXZpc2lvbiAx
MzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRCb3hFeHRl
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwzMSArMjksMzEgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oIgorI2lu
Y2x1ZGUgIkxheW91dEJveEV4dGVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZyYWN0
aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmxvZ2ljYWxUb3AoV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0CitMYXlvdXRVbml0IExheW91dEJveEV4dGVudDo6
bG9naWNhbFRvcChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QKIHsKICAgICByZXR1cm4g
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV90b3AgOiBtX2xlZnQ7CiB9
CiAKLUZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmxvZ2lj
YWxCb3R0b20oV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0CitMYXlvdXRVbml0IExheW91
dEJveEV4dGVudDo6bG9naWNhbEJvdHRvbShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QK
IHsKICAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9i
b3R0b20gOiBtX3JpZ2h0OwogfQogCi1GcmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5
b3V0Qm94RXh0ZW50Ojpsb2dpY2FsTGVmdChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QK
K0xheW91dFVuaXQgTGF5b3V0Qm94RXh0ZW50Ojpsb2dpY2FsTGVmdChXcml0aW5nTW9kZSB3cml0
aW5nTW9kZSkgY29uc3QKIHsKICAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3Jp
dGluZ01vZGUpID8gbV9sZWZ0IDogbV90b3A7CiB9CiAKLUZyYWN0aW9uYWxMYXlvdXRVbml0IEZy
YWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmxvZ2ljYWxSaWdodChXcml0aW5nTW9kZSB3cml0aW5n
TW9kZSkgY29uc3QKK0xheW91dFVuaXQgTGF5b3V0Qm94RXh0ZW50Ojpsb2dpY2FsUmlnaHQoV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fcmlnaHQgOiBtX2JvdHRvbTsKIH0KIAotRnJhY3Rp
b25hbExheW91dFVuaXQgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6YmVmb3JlKFdyaXRpbmdN
b2RlIHdyaXRpbmdNb2RlKSBjb25zdAorTGF5b3V0VW5pdCBMYXlvdXRCb3hFeHRlbnQ6OmJlZm9y
ZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QKIHsKICAgICBzd2l0Y2ggKHdyaXRpbmdN
b2RlKSB7CiAgICAgY2FzZSBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlOgpAQCAtNjksNyArNjksNyBA
QCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94CiAgICAgcmV0dXJuIG1f
dG9wOwogfQogCi1GcmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50
OjphZnRlcihXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QKK0xheW91dFVuaXQgTGF5b3V0
Qm94RXh0ZW50OjphZnRlcihXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QKIHsKICAgICBz
d2l0Y2ggKHdyaXRpbmdNb2RlKSB7CiAgICAgY2FzZSBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlOgpA
QCAtODUsMjEgKzg1LDIxIEBAIEZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRC
b3gKICAgICByZXR1cm4gbV9ib3R0b207CiB9CiAKLUZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0
aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OnN0YXJ0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbikgY29uc3QKK0xheW91dFVuaXQgTGF5b3V0Qm94RXh0ZW50Ojpz
dGFydChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pIGNv
bnN0CiB7CiAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkKICAg
ICAgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSA/IG1fbGVmdCA6
IG1fcmlnaHQ7CiAgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSA/
IG1fdG9wIDogbV9ib3R0b207CiB9CiAKLUZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxM
YXlvdXRCb3hFeHRlbnQ6OmVuZChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlv
biBkaXJlY3Rpb24pIGNvbnN0CitMYXlvdXRVbml0IExheW91dEJveEV4dGVudDo6ZW5kKFdyaXRp
bmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikgY29uc3QKIHsKICAg
ICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKQogICAgICAgICByZXR1
cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24pID8gbV9yaWdodCA6IG1fbGVmdDsK
ICAgICByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24pID8gbV9ib3R0b20g
OiBtX3RvcDsKIH0KIAotdm9pZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzZXRCZWZvcmUo
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKQordm9p
ZCBMYXlvdXRCb3hFeHRlbnQ6OnNldEJlZm9yZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgTGF5
b3V0VW5pdCB2YWx1ZSkKIHsKICAgICBzd2l0Y2ggKHdyaXRpbmdNb2RlKSB7CiAgICAgY2FzZSBU
b3BUb0JvdHRvbVdyaXRpbmdNb2RlOgpAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgRnJhY3Rpb25h
bExheW91dEJveEV4dGVudDo6c2V0QmVmb3IKICAgICB9CiB9CiAKLXZvaWQgRnJhY3Rpb25hbExh
eW91dEJveEV4dGVudDo6c2V0QWZ0ZXIoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIEZyYWN0aW9u
YWxMYXlvdXRVbml0IHZhbHVlKQordm9pZCBMYXlvdXRCb3hFeHRlbnQ6OnNldEFmdGVyKFdyaXRp
bmdNb2RlIHdyaXRpbmdNb2RlLCBMYXlvdXRVbml0IHZhbHVlKQogewogICAgIHN3aXRjaCAod3Jp
dGluZ01vZGUpIHsKICAgICBjYXNlIFRvcFRvQm90dG9tV3JpdGluZ01vZGU6CkBAIC0xNDEsNyAr
MTQxLDcgQEAgdm9pZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzZXRBZnRlcgogICAgIH0K
IH0KIAotdm9pZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzZXRTdGFydChXcml0aW5nTW9k
ZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIEZyYWN0aW9uYWxMYXlvdXRV
bml0IHZhbHVlKQordm9pZCBMYXlvdXRCb3hFeHRlbnQ6OnNldFN0YXJ0KFdyaXRpbmdNb2RlIHdy
aXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgTGF5b3V0VW5pdCB2YWx1ZSkKIHsK
ICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKSB7CiAgICAgICAg
IGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKGRpcmVjdGlvbikpCkBAIC0xNTYsNyArMTU2LDcg
QEAgdm9pZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzZXRTdGFydAogICAgIH0KIH0KIAot
dm9pZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzZXRFbmQoV3JpdGluZ01vZGUgd3JpdGlu
Z01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCB2YWx1
ZSkKK3ZvaWQgTGF5b3V0Qm94RXh0ZW50OjpzZXRFbmQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUs
IFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBMYXlvdXRVbml0IHZhbHVlKQogewogICAgIGlmIChp
c0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpIHsKICAgICAgICAgaWYgKGlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSkKQEAgLTE3MSwyMyArMTcxLDIzIEBAIHZvaWQg
RnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6c2V0RW5kKFcKICAgICB9CiB9CiAKLUZyYWN0aW9u
YWxMYXlvdXRVbml0JiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjptdXRhYmxlTG9naWNhbExl
ZnQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCitMYXlvdXRVbml0JiBMYXlvdXRCb3hFeHRlbnQ6
Om11dGFibGVMb2dpY2FsTGVmdChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKIHsKICAgICByZXR1
cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9sZWZ0IDogbV90b3A7
CiB9CiAKLUZyYWN0aW9uYWxMYXlvdXRVbml0JiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Ojpt
dXRhYmxlTG9naWNhbFJpZ2h0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQorTGF5b3V0VW5pdCYg
TGF5b3V0Qm94RXh0ZW50OjptdXRhYmxlTG9naWNhbFJpZ2h0KFdyaXRpbmdNb2RlIHdyaXRpbmdN
b2RlKQogewogICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkg
PyBtX3JpZ2h0IDogbV9ib3R0b207CiB9CiAKLUZyYWN0aW9uYWxMYXlvdXRVbml0JiBGcmFjdGlv
bmFsTGF5b3V0Qm94RXh0ZW50OjptdXRhYmxlQmVmb3JlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2Rl
KQorTGF5b3V0VW5pdCYgTGF5b3V0Qm94RXh0ZW50OjptdXRhYmxlQmVmb3JlKFdyaXRpbmdNb2Rl
IHdyaXRpbmdNb2RlKQogewogICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0
aW5nTW9kZSkgPyAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9i
b3R0b20gOiBtX3RvcCkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9y
aWdodDogbV9sZWZ0KTsKIH0KIAotRnJhY3Rpb25hbExheW91dFVuaXQmIEZyYWN0aW9uYWxMYXlv
dXRCb3hFeHRlbnQ6Om11dGFibGVBZnRlcihXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKK0xheW91
dFVuaXQmIExheW91dEJveEV4dGVudDo6bXV0YWJsZUFmdGVyKFdyaXRpbmdNb2RlIHdyaXRpbmdN
b2RlKQogewogICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkg
PyAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV90b3AgOiBtX2Jv
dHRvbSkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9sZWZ0OiBtX3Jp
Z2h0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dEJveEV4
dGVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xh
eW91dEJveEV4dGVudC5oCShyZXZpc2lvbiAxMzM1MTcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuaDoxMzM1MTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRCb3hFeHRlbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRnJhY3Rpb25hbExheW91dEJveEV4dGVu
dF9oCisjZGVmaW5lIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnRfaAorCisjaW5jbHVkZSAiRnJh
Y3Rpb25hbExheW91dFVuaXQuaCIKKyNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCisjaW5jbHVk
ZSAiV3JpdGluZ01vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGcmFjdGlv
bmFsTGF5b3V0Qm94RXh0ZW50IHsKK3B1YmxpYzoKKyAgICBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0
ZW50KCkgOiBtX3RvcCgwKSwgbV9yaWdodCgwKSwgbV9ib3R0b20oMCksIG1fbGVmdCgwKSB7IH0K
KyAgICBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50KEZyYWN0aW9uYWxMYXlvdXRVbml0IHRvcCwg
RnJhY3Rpb25hbExheW91dFVuaXQgcmlnaHQsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGJvdHRvbSwg
RnJhY3Rpb25hbExheW91dFVuaXQgbGVmdCkKKyAgICAgICAgOiBtX3RvcCh0b3ApLCBtX3JpZ2h0
KHJpZ2h0KSwgbV9ib3R0b20oYm90dG9tKSwgbV9sZWZ0KGxlZnQpIHsgfQorCisgICAgaW5saW5l
IEZyYWN0aW9uYWxMYXlvdXRVbml0IHRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wOyB9CisgICAg
aW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yaWdo
dDsgfQorICAgIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBib3R0b20oKSBjb25zdCB7IHJl
dHVybiBtX2JvdHRvbTsgfQorICAgIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBsZWZ0KCkg
Y29uc3QgeyByZXR1cm4gbV9sZWZ0OyB9CisKKyAgICBpbmxpbmUgdm9pZCBzZXRUb3AoRnJhY3Rp
b25hbExheW91dFVuaXQgdmFsdWUpIHsgbV90b3AgPSB2YWx1ZTsgfQorICAgIGlubGluZSB2b2lk
IHNldFJpZ2h0KEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKSB7IG1fcmlnaHQgPSB2YWx1ZTsg
fQorICAgIGlubGluZSB2b2lkIHNldEJvdHRvbShGcmFjdGlvbmFsTGF5b3V0VW5pdCB2YWx1ZSkg
eyBtX2JvdHRvbSA9IHZhbHVlOyB9CisgICAgaW5saW5lIHZvaWQgc2V0TGVmdChGcmFjdGlvbmFs
TGF5b3V0VW5pdCB2YWx1ZSkgeyBtX2xlZnQgPSB2YWx1ZTsgfQorCisgICAgRnJhY3Rpb25hbExh
eW91dFVuaXQgbG9naWNhbFRvcChXcml0aW5nTW9kZSkgY29uc3Q7CisgICAgRnJhY3Rpb25hbExh
eW91dFVuaXQgbG9naWNhbEJvdHRvbShXcml0aW5nTW9kZSkgY29uc3Q7CisgICAgRnJhY3Rpb25h
bExheW91dFVuaXQgbG9naWNhbExlZnQoV3JpdGluZ01vZGUpIGNvbnN0OworICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IGxvZ2ljYWxSaWdodChXcml0aW5nTW9kZSkgY29uc3Q7CisKKyAgICBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBiZWZvcmUoV3JpdGluZ01vZGUpIGNvbnN0OworICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IGFmdGVyKFdyaXRpbmdNb2RlKSBjb25zdDsKKyAgICBGcmFjdGlvbmFsTGF5
b3V0VW5pdCBzdGFydChXcml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbikgY29uc3Q7CisgICAgRnJh
Y3Rpb25hbExheW91dFVuaXQgZW5kKFdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uKSBjb25zdDsK
KworICAgIHZvaWQgc2V0QmVmb3JlKFdyaXRpbmdNb2RlLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCk7
CisgICAgdm9pZCBzZXRBZnRlcihXcml0aW5nTW9kZSwgRnJhY3Rpb25hbExheW91dFVuaXQpOwor
ICAgIHZvaWQgc2V0U3RhcnQoV3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24sIEZyYWN0aW9uYWxM
YXlvdXRVbml0KTsKKyAgICB2b2lkIHNldEVuZChXcml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiwg
RnJhY3Rpb25hbExheW91dFVuaXQpOworCisgICAgRnJhY3Rpb25hbExheW91dFVuaXQmIG11dGFi
bGVMb2dpY2FsTGVmdChXcml0aW5nTW9kZSk7CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQmIG11
dGFibGVMb2dpY2FsUmlnaHQoV3JpdGluZ01vZGUpOworCisgICAgRnJhY3Rpb25hbExheW91dFVu
aXQmIG11dGFibGVCZWZvcmUoV3JpdGluZ01vZGUpOworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBtdXRhYmxlQWZ0ZXIoV3JpdGluZ01vZGUpOworCitwcml2YXRlOgorICAgIEZyYWN0aW9uYWxM
YXlvdXRVbml0IG1fdG9wOworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1fcmlnaHQ7CisgICAg
RnJhY3Rpb25hbExheW91dFVuaXQgbV9ib3R0b207CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQg
bV9sZWZ0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRnJhY3Rp
b25hbExheW91dEJveEV4dGVudF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9MYXlvdXRCb3hFeHRlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9MYXlvdXRCb3hFeHRlbnQuaAkocmV2aXNpb24gMTMzNTE3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDU5ICsyOCw1OSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVm
IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnRfaAotI2RlZmluZSBGcmFjdGlvbmFsTGF5b3V0Qm94
RXh0ZW50X2gKKyNpZm5kZWYgTGF5b3V0Qm94RXh0ZW50X2gKKyNkZWZpbmUgTGF5b3V0Qm94RXh0
ZW50X2gKIAotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRVbml0LmgiCisjaW5jbHVkZSAiTGF5
b3V0VW5pdC5oIgogI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKICNpbmNsdWRlICJXcml0aW5n
TW9kZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRC
b3hFeHRlbnQgeworY2xhc3MgTGF5b3V0Qm94RXh0ZW50IHsKIHB1YmxpYzoKLSAgICBGcmFjdGlv
bmFsTGF5b3V0Qm94RXh0ZW50KCkgOiBtX3RvcCgwKSwgbV9yaWdodCgwKSwgbV9ib3R0b20oMCks
IG1fbGVmdCgwKSB7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50KEZyYWN0aW9uYWxM
YXlvdXRVbml0IHRvcCwgRnJhY3Rpb25hbExheW91dFVuaXQgcmlnaHQsIEZyYWN0aW9uYWxMYXlv
dXRVbml0IGJvdHRvbSwgRnJhY3Rpb25hbExheW91dFVuaXQgbGVmdCkKKyAgICBMYXlvdXRCb3hF
eHRlbnQoKSA6IG1fdG9wKDApLCBtX3JpZ2h0KDApLCBtX2JvdHRvbSgwKSwgbV9sZWZ0KDApIHsg
fQorICAgIExheW91dEJveEV4dGVudChMYXlvdXRVbml0IHRvcCwgTGF5b3V0VW5pdCByaWdodCwg
TGF5b3V0VW5pdCBib3R0b20sIExheW91dFVuaXQgbGVmdCkKICAgICAgICAgOiBtX3RvcCh0b3Ap
LCBtX3JpZ2h0KHJpZ2h0KSwgbV9ib3R0b20oYm90dG9tKSwgbV9sZWZ0KGxlZnQpIHsgfQogCi0g
ICAgaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IHRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9w
OyB9Ci0gICAgaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJpZ2h0KCkgY29uc3QgeyByZXR1
cm4gbV9yaWdodDsgfQotICAgIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBib3R0b20oKSBj
b25zdCB7IHJldHVybiBtX2JvdHRvbTsgfQotICAgIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBsZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0OyB9Ci0KLSAgICBpbmxpbmUgdm9pZCBzZXRU
b3AoRnJhY3Rpb25hbExheW91dFVuaXQgdmFsdWUpIHsgbV90b3AgPSB2YWx1ZTsgfQotICAgIGlu
bGluZSB2b2lkIHNldFJpZ2h0KEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKSB7IG1fcmlnaHQg
PSB2YWx1ZTsgfQotICAgIGlubGluZSB2b2lkIHNldEJvdHRvbShGcmFjdGlvbmFsTGF5b3V0VW5p
dCB2YWx1ZSkgeyBtX2JvdHRvbSA9IHZhbHVlOyB9Ci0gICAgaW5saW5lIHZvaWQgc2V0TGVmdChG
cmFjdGlvbmFsTGF5b3V0VW5pdCB2YWx1ZSkgeyBtX2xlZnQgPSB2YWx1ZTsgfQotCi0gICAgRnJh
Y3Rpb25hbExheW91dFVuaXQgbG9naWNhbFRvcChXcml0aW5nTW9kZSkgY29uc3Q7Ci0gICAgRnJh
Y3Rpb25hbExheW91dFVuaXQgbG9naWNhbEJvdHRvbShXcml0aW5nTW9kZSkgY29uc3Q7Ci0gICAg
RnJhY3Rpb25hbExheW91dFVuaXQgbG9naWNhbExlZnQoV3JpdGluZ01vZGUpIGNvbnN0OwotICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0IGxvZ2ljYWxSaWdodChXcml0aW5nTW9kZSkgY29uc3Q7Ci0K
LSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBiZWZvcmUoV3JpdGluZ01vZGUpIGNvbnN0OwotICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0IGFmdGVyKFdyaXRpbmdNb2RlKSBjb25zdDsKLSAgICBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBzdGFydChXcml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbikgY29uc3Q7
Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgZW5kKFdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9u
KSBjb25zdDsKLQotICAgIHZvaWQgc2V0QmVmb3JlKFdyaXRpbmdNb2RlLCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCk7Ci0gICAgdm9pZCBzZXRBZnRlcihXcml0aW5nTW9kZSwgRnJhY3Rpb25hbExheW91
dFVuaXQpOwotICAgIHZvaWQgc2V0U3RhcnQoV3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24sIEZy
YWN0aW9uYWxMYXlvdXRVbml0KTsKLSAgICB2b2lkIHNldEVuZChXcml0aW5nTW9kZSwgVGV4dERp
cmVjdGlvbiwgRnJhY3Rpb25hbExheW91dFVuaXQpOworICAgIGlubGluZSBMYXlvdXRVbml0IHRv
cCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wOyB9CisgICAgaW5saW5lIExheW91dFVuaXQgcmlnaHQo
KSBjb25zdCB7IHJldHVybiBtX3JpZ2h0OyB9CisgICAgaW5saW5lIExheW91dFVuaXQgYm90dG9t
KCkgY29uc3QgeyByZXR1cm4gbV9ib3R0b207IH0KKyAgICBpbmxpbmUgTGF5b3V0VW5pdCBsZWZ0
KCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0OyB9CisKKyAgICBpbmxpbmUgdm9pZCBzZXRUb3AoTGF5
b3V0VW5pdCB2YWx1ZSkgeyBtX3RvcCA9IHZhbHVlOyB9CisgICAgaW5saW5lIHZvaWQgc2V0Umln
aHQoTGF5b3V0VW5pdCB2YWx1ZSkgeyBtX3JpZ2h0ID0gdmFsdWU7IH0KKyAgICBpbmxpbmUgdm9p
ZCBzZXRCb3R0b20oTGF5b3V0VW5pdCB2YWx1ZSkgeyBtX2JvdHRvbSA9IHZhbHVlOyB9CisgICAg
aW5saW5lIHZvaWQgc2V0TGVmdChMYXlvdXRVbml0IHZhbHVlKSB7IG1fbGVmdCA9IHZhbHVlOyB9
CisKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3AoV3JpdGluZ01vZGUpIGNvbnN0OworICAgIExh
eW91dFVuaXQgbG9naWNhbEJvdHRvbShXcml0aW5nTW9kZSkgY29uc3Q7CisgICAgTGF5b3V0VW5p
dCBsb2dpY2FsTGVmdChXcml0aW5nTW9kZSkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
UmlnaHQoV3JpdGluZ01vZGUpIGNvbnN0OworCisgICAgTGF5b3V0VW5pdCBiZWZvcmUoV3JpdGlu
Z01vZGUpIGNvbnN0OworICAgIExheW91dFVuaXQgYWZ0ZXIoV3JpdGluZ01vZGUpIGNvbnN0Owor
ICAgIExheW91dFVuaXQgc3RhcnQoV3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24pIGNvbnN0Owor
ICAgIExheW91dFVuaXQgZW5kKFdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uKSBjb25zdDsKKwor
ICAgIHZvaWQgc2V0QmVmb3JlKFdyaXRpbmdNb2RlLCBMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNl
dEFmdGVyKFdyaXRpbmdNb2RlLCBMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNldFN0YXJ0KFdyaXRp
bmdNb2RlLCBUZXh0RGlyZWN0aW9uLCBMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNldEVuZChXcml0
aW5nTW9kZSwgVGV4dERpcmVjdGlvbiwgTGF5b3V0VW5pdCk7CiAKLSAgICBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgbXV0YWJsZUxvZ2ljYWxMZWZ0KFdyaXRpbmdNb2RlKTsKLSAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgbXV0YWJsZUxvZ2ljYWxSaWdodChXcml0aW5nTW9kZSk7CisgICAgTGF5b3V0
VW5pdCYgbXV0YWJsZUxvZ2ljYWxMZWZ0KFdyaXRpbmdNb2RlKTsKKyAgICBMYXlvdXRVbml0JiBt
dXRhYmxlTG9naWNhbFJpZ2h0KFdyaXRpbmdNb2RlKTsKIAotICAgIEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBtdXRhYmxlQmVmb3JlKFdyaXRpbmdNb2RlKTsKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgbXV0YWJsZUFmdGVyKFdyaXRpbmdNb2RlKTsKKyAgICBMYXlvdXRVbml0JiBtdXRhYmxlQmVm
b3JlKFdyaXRpbmdNb2RlKTsKKyAgICBMYXlvdXRVbml0JiBtdXRhYmxlQWZ0ZXIoV3JpdGluZ01v
ZGUpOwogCiBwcml2YXRlOgotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1fdG9wOwotICAgIEZy
YWN0aW9uYWxMYXlvdXRVbml0IG1fcmlnaHQ7Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgbV9i
b3R0b207Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgbV9sZWZ0OworICAgIExheW91dFVuaXQg
bV90b3A7CisgICAgTGF5b3V0VW5pdCBtX3JpZ2h0OworICAgIExheW91dFVuaXQgbV9ib3R0b207
CisgICAgTGF5b3V0VW5pdCBtX2xlZnQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
LSNlbmRpZiAvLyBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50X2gKKyNlbmRpZiAvLyBMYXlvdXRC
b3hFeHRlbnRfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0
UG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9M
YXlvdXRQb2ludC5oCShyZXZpc2lvbiAxMzM1MTcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRQb2ludC5oOjEzMzUxNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBGcmFjdGlvbmFsTGF5b3V0UG9pbnRfaAorI2RlZmluZSBG
cmFjdGlvbmFsTGF5b3V0UG9pbnRfaAorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1
ZGUgIkZyYWN0aW9uYWxMYXlvdXRTaXplLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
KworI2lmIFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgPHFnbG9iYWwuaD4KK1FUX0JFR0lOX05BTUVT
UEFDRQorY2xhc3MgUVBvaW50OworY2xhc3MgUVBvaW50RjsKK1FUX0VORF9OQU1FU1BBQ0UKKyNl
bmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZyYWN0aW9uYWxMYXlvdXRQb2lu
dCB7CitwdWJsaWM6CisgICAgRnJhY3Rpb25hbExheW91dFBvaW50KCkgOiBtX3goMCksIG1feSgw
KSB7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoRnJhY3Rpb25hbExheW91dFVuaXQgeCwg
RnJhY3Rpb25hbExheW91dFVuaXQgeSkgOiBtX3goeCksIG1feSh5KSB7IH0KKyAgICBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KSA6IG1feChwb2ludC54KCkpLCBt
X3kocG9pbnQueSgpKSB7IH0KKyAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29u
c3QgRmxvYXRQb2ludCYgc2l6ZSkgOiBtX3goc2l6ZS54KCkpLCBtX3koc2l6ZS55KCkpIHsgfQor
ICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRQb2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0
U2l6ZSYgc2l6ZSkgOiBtX3goc2l6ZS53aWR0aCgpKSwgbV95KHNpemUuaGVpZ2h0KCkpIHsgfQor
CisgICAgc3RhdGljIEZyYWN0aW9uYWxMYXlvdXRQb2ludCB6ZXJvKCkgeyByZXR1cm4gRnJhY3Rp
b25hbExheW91dFBvaW50KCk7IH0KKworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHgoKSBjb25z
dCB7IHJldHVybiBtX3g7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB5KCkgY29uc3QgeyBy
ZXR1cm4gbV95OyB9CisKKyAgICB2b2lkIHNldFgoRnJhY3Rpb25hbExheW91dFVuaXQgeCkgeyBt
X3ggPSB4OyB9CisgICAgdm9pZCBzZXRZKEZyYWN0aW9uYWxMYXlvdXRVbml0IHkpIHsgbV95ID0g
eTsgfQorCisgICAgdm9pZCBtb3ZlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzKSB7IG1v
dmUocy53aWR0aCgpLCBzLmhlaWdodCgpKTsgfSAKKyAgICB2b2lkIG1vdmVCeShjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQmIG9mZnNldCkgeyBtb3ZlKG9mZnNldC54KCksIG9mZnNldC55KCkp
OyB9CisgICAgdm9pZCBtb3ZlKEZyYWN0aW9uYWxMYXlvdXRVbml0IGR4LCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCBkeSkgeyBtX3ggKz0gZHg7IG1feSArPSBkeTsgfQorICAgIHZvaWQgc2NhbGUoZmxv
YXQgc3gsIGZsb2F0IHN5KQorICAgIHsKKyAgICAgICAgbV94ICo9IHN4OworICAgICAgICBtX3kg
Kj0gc3k7CisgICAgfQorICAgIAorICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBleHBhbmRlZFRv
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KHN0ZDo6bWF4KG1feCwgb3RoZXIubV94KSwg
c3RkOjptYXgobV95LCBvdGhlci5tX3kpKTsKKyAgICB9CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQgc2hydW5rVG8oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoc3RkOjptaW4obV94
LCBvdGhlci5tX3gpLCBzdGQ6Om1pbihtX3ksIG90aGVyLm1feSkpOworICAgIH0KKworICAgIHZv
aWQgY2xhbXBOZWdhdGl2ZVRvWmVybygpCisgICAgeworICAgICAgICAqdGhpcyA9IGV4cGFuZGVk
VG8oemVybygpKTsKKyAgICB9CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgdHJhbnNwb3Nl
ZFBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9p
bnQobV95LCBtX3gpOworICAgIH0KKworI2lmIFBMQVRGT1JNKFFUKQorICAgIGV4cGxpY2l0IEZy
YWN0aW9uYWxMYXlvdXRQb2ludChjb25zdCBRUG9pbnQmKTsKKyAgICBleHBsaWNpdCBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQoY29uc3QgUVBvaW50RiYpOworICAgIG9wZXJhdG9yIFFQb2ludEYoKSBj
b25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1feCwg
bV95OworfTsKKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgb3BlcmF0b3IrPShGcmFj
dGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQorewor
ICAgIGEubW92ZShiLndpZHRoKCksIGIuaGVpZ2h0KCkpOworICAgIHJldHVybiBhOworfQorCitp
bmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50JiBvcGVyYXRvci09KEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCit7CisgICAgYS5tb3ZlKC1i
LndpZHRoKCksIC1iLmhlaWdodCgpKTsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEZyYWN0
aW9uYWxMYXlvdXRQb2ludCBvcGVyYXRvcisoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25h
bExheW91dFBvaW50KGEueCgpICsgYi53aWR0aCgpLCBhLnkoKSArIGIuaGVpZ2h0KCkpOworfQor
CitpbmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50IG9wZXJhdG9yKyhjb25zdCBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYikKK3sKKyAgICBy
ZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KGEueCgpICsgYi54KCksIGEueSgpICsgYi55KCkp
OworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFNpemUgb3BlcmF0b3ItKGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBiKQorewor
ICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShhLngoKSAtIGIueCgpLCBhLnkoKSAtIGIu
eSgpKTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBvcGVyYXRvci0oY29uc3Qg
RnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikK
K3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KGEueCgpIC0gYi53aWR0aCgpLCBh
LnkoKSAtIGIuaGVpZ2h0KCkpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50IG9w
ZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50KQoreworICAgIHJldHVy
biBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoLXBvaW50LngoKSwgLXBvaW50LnkoKSk7Cit9CisKK2lu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGIpCit7CisgICAgcmV0dXJuIGEueCgpID09IGIueCgp
ICYmIGEueSgpID09IGIueSgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBiKQor
eworICAgIHJldHVybiBhLngoKSAhPSBiLngoKSB8fCBhLnkoKSAhPSBiLnkoKTsKK30KKworaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCB0b1BvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRT
aXplJiBzaXplKQoreworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoc2l6ZS53aWR0
aCgpLCBzaXplLmhlaWdodCgpKTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplIHRv
U2l6ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEpCit7CisgICAgcmV0dXJuIEZyYWN0
aW9uYWxMYXlvdXRTaXplKGEueCgpLCBhLnkoKSk7Cit9CisKK2lubGluZSBJbnRQb2ludCBmbG9v
cmVkSW50UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBwb2ludCkKK3sKKyAgICBy
ZXR1cm4gSW50UG9pbnQocG9pbnQueCgpLmZsb29yKCksIHBvaW50LnkoKS5mbG9vcigpKTsKK30K
KworaW5saW5lIEludFBvaW50IHJvdW5kZWRJbnRQb2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQmIHBvaW50KQoreworICAgIHJldHVybiBJbnRQb2ludChwb2ludC54KCkucm91bmQoKSwg
cG9pbnQueSgpLnJvdW5kKCkpOworfQorCitpbmxpbmUgSW50UG9pbnQgcm91bmRlZEludFBvaW50
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKQoreworICAgIHJldHVybiBJbnRQb2lu
dChzaXplLndpZHRoKCkucm91bmQoKSwgc2l6ZS5oZWlnaHQoKS5yb3VuZCgpKTsKK30KKworaW5s
aW5lIEludFBvaW50IGNlaWxlZEludFBvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYg
cG9pbnQpCit7CisgICAgcmV0dXJuIEludFBvaW50KHBvaW50LngoKS5jZWlsKCksIHBvaW50Lnko
KS5jZWlsKCkpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50IGZsb29yZWRGcmFj
dGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICByZXR1cm4gRnJh
Y3Rpb25hbExheW91dFBvaW50KEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpmcm9tRmxvYXRGbG9vcihw
LngoKSksIEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpmcm9tRmxvYXRGbG9vcihwLnkoKSkpOworfQor
CitpbmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50IGNlaWxlZEZyYWN0aW9uYWxMYXlvdXRQb2lu
dChjb25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9p
bnQoRnJhY3Rpb25hbExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwocC54KCkpLCBGcmFjdGlvbmFs
TGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChwLnkoKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBGcmFjdGlvbmFsTGF5b3V0UG9pbnRfaApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UG9pbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRQb2ludC5oCShyZXZpc2lvbiAx
MzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRQb2ludC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMSArMjgsMTEgQEAKICAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAotI2lmbmRlZiBGcmFjdGlvbmFsTGF5b3V0UG9pbnRfaAotI2RlZmluZSBGcmFjdGlvbmFsTGF5
b3V0UG9pbnRfaAorI2lmbmRlZiBMYXlvdXRQb2ludF9oCisjZGVmaW5lIExheW91dFBvaW50X2gK
IAogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0U2l6
ZS5oIgorI2luY2x1ZGUgIkxheW91dFNpemUuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgogCiAjaWYgUExBVEZPUk0oUVQpCkBAIC00NSwzOSArNDUsMzkgQEAgUVRfRU5EX05BTUVTUEFD
RQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRQb2ludCB7
CitjbGFzcyBMYXlvdXRQb2ludCB7CiBwdWJsaWM6Ci0gICAgRnJhY3Rpb25hbExheW91dFBvaW50
KCkgOiBtX3goMCksIG1feSgwKSB7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoRnJhY3Rp
b25hbExheW91dFVuaXQgeCwgRnJhY3Rpb25hbExheW91dFVuaXQgeSkgOiBtX3goeCksIG1feSh5
KSB7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KSA6
IG1feChwb2ludC54KCkpLCBtX3kocG9pbnQueSgpKSB7IH0KLSAgICBleHBsaWNpdCBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgc2l6ZSkgOiBtX3goc2l6ZS54KCkpLCBt
X3koc2l6ZS55KCkpIHsgfQotICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRQb2ludChjb25z
dCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkgOiBtX3goc2l6ZS53aWR0aCgpKSwgbV95KHNp
emUuaGVpZ2h0KCkpIHsgfQotCi0gICAgc3RhdGljIEZyYWN0aW9uYWxMYXlvdXRQb2ludCB6ZXJv
KCkgeyByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KCk7IH0KLQotICAgIEZyYWN0aW9uYWxM
YXlvdXRVbml0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0
VW5pdCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9Ci0KLSAgICB2b2lkIHNldFgoRnJhY3Rpb25h
bExheW91dFVuaXQgeCkgeyBtX3ggPSB4OyB9Ci0gICAgdm9pZCBzZXRZKEZyYWN0aW9uYWxMYXlv
dXRVbml0IHkpIHsgbV95ID0geTsgfQotCi0gICAgdm9pZCBtb3ZlKGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRTaXplJiBzKSB7IG1vdmUocy53aWR0aCgpLCBzLmhlaWdodCgpKTsgfSAKLSAgICB2b2lk
IG1vdmVCeShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIG9mZnNldCkgeyBtb3ZlKG9mZnNl
dC54KCksIG9mZnNldC55KCkpOyB9Ci0gICAgdm9pZCBtb3ZlKEZyYWN0aW9uYWxMYXlvdXRVbml0
IGR4LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeSkgeyBtX3ggKz0gZHg7IG1feSArPSBkeTsgfQor
ICAgIExheW91dFBvaW50KCkgOiBtX3goMCksIG1feSgwKSB7IH0KKyAgICBMYXlvdXRQb2ludChM
YXlvdXRVbml0IHgsIExheW91dFVuaXQgeSkgOiBtX3goeCksIG1feSh5KSB7IH0KKyAgICBMYXlv
dXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpIDogbV94KHBvaW50LngoKSksIG1feShwb2lu
dC55KCkpIHsgfQorICAgIGV4cGxpY2l0IExheW91dFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHNp
emUpIDogbV94KHNpemUueCgpKSwgbV95KHNpemUueSgpKSB7IH0KKyAgICBleHBsaWNpdCBMYXlv
dXRQb2ludChjb25zdCBMYXlvdXRTaXplJiBzaXplKSA6IG1feChzaXplLndpZHRoKCkpLCBtX3ko
c2l6ZS5oZWlnaHQoKSkgeyB9CisKKyAgICBzdGF0aWMgTGF5b3V0UG9pbnQgemVybygpIHsgcmV0
dXJuIExheW91dFBvaW50KCk7IH0KKworICAgIExheW91dFVuaXQgeCgpIGNvbnN0IHsgcmV0dXJu
IG1feDsgfQorICAgIExheW91dFVuaXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQorCisgICAg
dm9pZCBzZXRYKExheW91dFVuaXQgeCkgeyBtX3ggPSB4OyB9CisgICAgdm9pZCBzZXRZKExheW91
dFVuaXQgeSkgeyBtX3kgPSB5OyB9CisKKyAgICB2b2lkIG1vdmUoY29uc3QgTGF5b3V0U2l6ZSYg
cykgeyBtb3ZlKHMud2lkdGgoKSwgcy5oZWlnaHQoKSk7IH0gCisgICAgdm9pZCBtb3ZlQnkoY29u
c3QgTGF5b3V0UG9pbnQmIG9mZnNldCkgeyBtb3ZlKG9mZnNldC54KCksIG9mZnNldC55KCkpOyB9
CisgICAgdm9pZCBtb3ZlKExheW91dFVuaXQgZHgsIExheW91dFVuaXQgZHkpIHsgbV94ICs9IGR4
OyBtX3kgKz0gZHk7IH0KICAgICB2b2lkIHNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSkKICAgICB7
CiAgICAgICAgIG1feCAqPSBzeDsKICAgICAgICAgbV95ICo9IHN5OwogICAgIH0KICAgICAKLSAg
ICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgZXhwYW5kZWRUbyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQmIG90aGVyKSBjb25zdAorICAgIExheW91dFBvaW50IGV4cGFuZGVkVG8oY29uc3QgTGF5
b3V0UG9pbnQmIG90aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxM
YXlvdXRQb2ludChzdGQ6Om1heChtX3gsIG90aGVyLm1feCksIHN0ZDo6bWF4KG1feSwgb3RoZXIu
bV95KSk7CisgICAgICAgIHJldHVybiBMYXlvdXRQb2ludChzdGQ6Om1heChtX3gsIG90aGVyLm1f
eCksIHN0ZDo6bWF4KG1feSwgb3RoZXIubV95KSk7CiAgICAgfQogCi0gICAgRnJhY3Rpb25hbExh
eW91dFBvaW50IHNocnVua1RvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgb3RoZXIpIGNv
bnN0CisgICAgTGF5b3V0UG9pbnQgc2hydW5rVG8oY29uc3QgTGF5b3V0UG9pbnQmIG90aGVyKSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChzdGQ6Om1p
bihtX3gsIG90aGVyLm1feCksIHN0ZDo6bWluKG1feSwgb3RoZXIubV95KSk7CisgICAgICAgIHJl
dHVybiBMYXlvdXRQb2ludChzdGQ6Om1pbihtX3gsIG90aGVyLm1feCksIHN0ZDo6bWluKG1feSwg
b3RoZXIubV95KSk7CiAgICAgfQogCiAgICAgdm9pZCBjbGFtcE5lZ2F0aXZlVG9aZXJvKCkKQEAg
LTg1LDEwOCArODUsMTM4IEBAIHB1YmxpYzoKICAgICAgICAgKnRoaXMgPSBleHBhbmRlZFRvKHpl
cm8oKSk7CiAgICAgfQogCi0gICAgRnJhY3Rpb25hbExheW91dFBvaW50IHRyYW5zcG9zZWRQb2lu
dCgpIGNvbnN0CisgICAgTGF5b3V0UG9pbnQgdHJhbnNwb3NlZFBvaW50KCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQobV95LCBtX3gpOworICAgICAg
ICByZXR1cm4gTGF5b3V0UG9pbnQobV95LCBtX3gpOwogICAgIH0KIAogI2lmIFBMQVRGT1JNKFFU
KQotICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRQb2ludChjb25zdCBRUG9pbnQmKTsKLSAg
ICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgUVBvaW50RiYpOworICAgIGV4
cGxpY2l0IExheW91dFBvaW50KGNvbnN0IFFQb2ludCYpOworICAgIGV4cGxpY2l0IExheW91dFBv
aW50KGNvbnN0IFFQb2ludEYmKTsKICAgICBvcGVyYXRvciBRUG9pbnRGKCkgY29uc3Q7CiAjZW5k
aWYKIAogcHJpdmF0ZToKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtX3gsIG1feTsKKyAgICBM
YXlvdXRVbml0IG1feCwgbV95OwogfTsKIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCYg
b3BlcmF0b3IrPShGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRTaXplJiBiKQoraW5saW5lIExheW91dFBvaW50JiBvcGVyYXRvcis9KExheW91dFBvaW50JiBh
LCBjb25zdCBMYXlvdXRTaXplJiBiKQogewogICAgIGEubW92ZShiLndpZHRoKCksIGIuaGVpZ2h0
KCkpOwogICAgIHJldHVybiBhOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50JiBv
cGVyYXRvci09KEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91
dFNpemUmIGIpCitpbmxpbmUgTGF5b3V0UG9pbnQmIG9wZXJhdG9yLT0oTGF5b3V0UG9pbnQmIGEs
IGNvbnN0IExheW91dFNpemUmIGIpCiB7CiAgICAgYS5tb3ZlKC1iLndpZHRoKCksIC1iLmhlaWdo
dCgpKTsKICAgICByZXR1cm4gYTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBv
cGVyYXRvcisoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0U2l6ZSYgYikKK2lubGluZSBMYXlvdXRQb2ludCBvcGVyYXRvcisoY29uc3QgTGF5b3V0
UG9pbnQmIGEsIGNvbnN0IExheW91dFNpemUmIGIpCiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxM
YXlvdXRQb2ludChhLngoKSArIGIud2lkdGgoKSwgYS55KCkgKyBiLmhlaWdodCgpKTsKKyAgICBy
ZXR1cm4gTGF5b3V0UG9pbnQoYS54KCkgKyBiLndpZHRoKCksIGEueSgpICsgYi5oZWlnaHQoKSk7
CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgb3BlcmF0b3IrKGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBiKQoraW5s
aW5lIExheW91dFBvaW50IG9wZXJhdG9yKyhjb25zdCBMYXlvdXRQb2ludCYgYSwgY29uc3QgTGF5
b3V0UG9pbnQmIGIpCiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChhLngoKSAr
IGIueCgpLCBhLnkoKSArIGIueSgpKTsKKyAgICByZXR1cm4gTGF5b3V0UG9pbnQoYS54KCkgKyBi
LngoKSwgYS55KCkgKyBiLnkoKSk7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSBv
cGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQmIGIpCitpbmxpbmUgTGF5b3V0U2l6ZSBvcGVyYXRvci0oY29uc3QgTGF5b3V0
UG9pbnQmIGEsIGNvbnN0IExheW91dFBvaW50JiBiKQogewotICAgIHJldHVybiBGcmFjdGlvbmFs
TGF5b3V0U2l6ZShhLngoKSAtIGIueCgpLCBhLnkoKSAtIGIueSgpKTsKKyAgICByZXR1cm4gTGF5
b3V0U2l6ZShhLngoKSAtIGIueCgpLCBhLnkoKSAtIGIueSgpKTsKIH0KIAotaW5saW5lIEZyYWN0
aW9uYWxMYXlvdXRQb2ludCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK2lubGluZSBMYXlvdXRQb2ludCBvcGVy
YXRvci0oY29uc3QgTGF5b3V0UG9pbnQmIGEsIGNvbnN0IExheW91dFNpemUmIGIpCiB7Ci0gICAg
cmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChhLngoKSAtIGIud2lkdGgoKSwgYS55KCkgLSBi
LmhlaWdodCgpKTsKKyAgICByZXR1cm4gTGF5b3V0UG9pbnQoYS54KCkgLSBiLndpZHRoKCksIGEu
eSgpIC0gYi5oZWlnaHQoKSk7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgb3Bl
cmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcG9pbnQpCitpbmxpbmUgTGF5b3V0
UG9pbnQgb3BlcmF0b3ItKGNvbnN0IExheW91dFBvaW50JiBwb2ludCkKIHsKLSAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFBvaW50KC1wb2ludC54KCksIC1wb2ludC55KCkpOworICAgIHJldHVy
biBMYXlvdXRQb2ludCgtcG9pbnQueCgpLCAtcG9pbnQueSgpKTsKIH0KIAotaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRQb2ludCYgYikKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgTGF5b3V0UG9p
bnQmIGEsIGNvbnN0IExheW91dFBvaW50JiBiKQogewogICAgIHJldHVybiBhLngoKSA9PSBiLngo
KSAmJiBhLnkoKSA9PSBiLnkoKTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBG
cmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYikK
K2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgTGF5b3V0UG9pbnQmIGEsIGNvbnN0IExheW91
dFBvaW50JiBiKQogewogICAgIHJldHVybiBhLngoKSAhPSBiLngoKSB8fCBhLnkoKSAhPSBiLnko
KTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCB0b1BvaW50KGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRTaXplJiBzaXplKQoraW5saW5lIExheW91dFBvaW50IHRvUG9pbnQoY29uc3Qg
TGF5b3V0U2l6ZSYgc2l6ZSkKIHsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgcmV0dXJuIExheW91dFBvaW50KHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6
ZSB0b1NpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBhKQoraW5saW5lIExheW91dFBv
aW50IHRvTGF5b3V0UG9pbnQoY29uc3QgTGF5b3V0U2l6ZSYgcCkKIHsKLSAgICByZXR1cm4gRnJh
Y3Rpb25hbExheW91dFNpemUoYS54KCksIGEueSgpKTsKKyAgICByZXR1cm4gTGF5b3V0UG9pbnQo
cC53aWR0aCgpLCBwLmhlaWdodCgpKTsKIH0KIAotaW5saW5lIEludFBvaW50IGZsb29yZWRJbnRQ
b2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50KQoraW5saW5lIExheW91dFNp
emUgdG9TaXplKGNvbnN0IExheW91dFBvaW50JiBhKQoreworICAgIHJldHVybiBMYXlvdXRTaXpl
KGEueCgpLCBhLnkoKSk7Cit9CisKK2lubGluZSBJbnRQb2ludCBmbG9vcmVkSW50UG9pbnQoY29u
c3QgTGF5b3V0UG9pbnQmIHBvaW50KQogewogICAgIHJldHVybiBJbnRQb2ludChwb2ludC54KCku
Zmxvb3IoKSwgcG9pbnQueSgpLmZsb29yKCkpOwogfQogCi1pbmxpbmUgSW50UG9pbnQgcm91bmRl
ZEludFBvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcG9pbnQpCitpbmxpbmUgSW50
UG9pbnQgcm91bmRlZEludFBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCkKIHsKICAgICBy
ZXR1cm4gSW50UG9pbnQocG9pbnQueCgpLnJvdW5kKCksIHBvaW50LnkoKS5yb3VuZCgpKTsKIH0K
IAotaW5saW5lIEludFBvaW50IHJvdW5kZWRJbnRQb2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0
U2l6ZSYgc2l6ZSkKK2lubGluZSBJbnRQb2ludCByb3VuZGVkSW50UG9pbnQoY29uc3QgTGF5b3V0
U2l6ZSYgc2l6ZSkKIHsKICAgICByZXR1cm4gSW50UG9pbnQoc2l6ZS53aWR0aCgpLnJvdW5kKCks
IHNpemUuaGVpZ2h0KCkucm91bmQoKSk7CiB9CiAKLWlubGluZSBJbnRQb2ludCBjZWlsZWRJbnRQ
b2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50KQoraW5saW5lIEludFBvaW50
IGNlaWxlZEludFBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCkKIHsKICAgICByZXR1cm4g
SW50UG9pbnQocG9pbnQueCgpLmNlaWwoKSwgcG9pbnQueSgpLmNlaWwoKSk7CiB9CiAKLWlubGlu
ZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgZmxvb3JlZEZyYWN0aW9uYWxMYXlvdXRQb2ludChjb25z
dCBGbG9hdFBvaW50JiBwKQoraW5saW5lIExheW91dFBvaW50IGZsb29yZWRMYXlvdXRQb2ludChj
b25zdCBGbG9hdFBvaW50JiBwKQogewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQo
RnJhY3Rpb25hbExheW91dFVuaXQ6OmZyb21GbG9hdEZsb29yKHAueCgpKSwgRnJhY3Rpb25hbExh
eW91dFVuaXQ6OmZyb21GbG9hdEZsb29yKHAueSgpKSk7CisgICAgcmV0dXJuIExheW91dFBvaW50
KExheW91dFVuaXQ6OmZyb21GbG9hdEZsb29yKHAueCgpKSwgTGF5b3V0VW5pdDo6ZnJvbUZsb2F0
Rmxvb3IocC55KCkpKTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBjZWlsZWRG
cmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkKK2lubGluZSBMYXlvdXRQ
b2ludCBjZWlsZWRMYXlvdXRQb2ludChjb25zdCBGbG9hdFBvaW50JiBwKQogewotICAgIHJldHVy
biBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoRnJhY3Rpb25hbExheW91dFVuaXQ6OmZyb21GbG9hdENl
aWwocC54KCkpLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChwLnkoKSkpOwor
ICAgIHJldHVybiBMYXlvdXRQb2ludChMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKHAueCgpKSwg
TGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChwLnkoKSkpOwogfQogCitpbmxpbmUgSW50U2l6ZSBw
aXhlbFNuYXBwZWRJbnRTaXplKGNvbnN0IExheW91dFNpemUmIHMsIGNvbnN0IExheW91dFBvaW50
JiBwKQoreworICAgIHJldHVybiBJbnRTaXplKHNuYXBTaXplVG9QaXhlbChzLndpZHRoKCksIHAu
eCgpKSwgc25hcFNpemVUb1BpeGVsKHMuaGVpZ2h0KCksIHAueSgpKSk7Cit9CisKK2lubGluZSBM
YXlvdXRQb2ludCByb3VuZGVkTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyNp
ZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIHJldHVybiBMYXlvdXRQb2ludChwKTsKKyNl
bHNlCisgICAgcmV0dXJuIHJvdW5kZWRJbnRQb2ludChwKTsKKyNlbmRpZgorfQorCitpbmxpbmUg
TGF5b3V0U2l6ZSB0b0xheW91dFNpemUoY29uc3QgTGF5b3V0UG9pbnQmIHApCit7CisgICAgcmV0
dXJuIExheW91dFNpemUocC54KCksIHAueSgpKTsKK30KKworaW5saW5lIExheW91dFBvaW50IGZs
b29yZWRMYXlvdXRQb2ludChjb25zdCBGbG9hdFNpemUmIHMpCit7CisgICAgcmV0dXJuIGZsb29y
ZWRMYXlvdXRQb2ludChGbG9hdFBvaW50KHMpKTsKK30KKworCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKLSNlbmRpZiAvLyBGcmFjdGlvbmFsTGF5b3V0UG9pbnRfaAorI2VuZGlmIC8vIExheW91
dFBvaW50X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xh
eW91dFJlY3QuY3BwCShyZXZpc2lvbiAxMzM1MTcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcDoxMzM1MTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRnJhY3Rpb25h
bExheW91dFJlY3QuaCIKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZyYWN0
aW9uYWxMYXlvdXRVbml0LmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCit1c2luZyBzdGQ6Om1h
eDsKK3VzaW5nIHN0ZDo6bWluOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZyYWN0aW9uYWxM
YXlvdXRSZWN0OjpGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCisgICAg
OiBtX2xvY2F0aW9uKEZyYWN0aW9uYWxMYXlvdXRQb2ludChyLmxvY2F0aW9uKCkpKQorICAgICwg
bV9zaXplKEZyYWN0aW9uYWxMYXlvdXRTaXplKHIuc2l6ZSgpKSkKK3sKK30KKworYm9vbCBGcmFj
dGlvbmFsTGF5b3V0UmVjdDo6aW50ZXJzZWN0cyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYg
b3RoZXIpIGNvbnN0Cit7CisgICAgLy8gQ2hlY2tpbmcgZW1wdGluZXNzIGhhbmRsZXMgbmVnYXRp
dmUgd2lkdGhzIGFzIHdlbGwgYXMgemVyby4KKyAgICByZXR1cm4gIWlzRW1wdHkoKSAmJiAhb3Ro
ZXIuaXNFbXB0eSgpCisgICAgICAgICYmIHgoKSA8IG90aGVyLm1heFgoKSAmJiBvdGhlci54KCkg
PCBtYXhYKCkKKyAgICAgICAgJiYgeSgpIDwgb3RoZXIubWF4WSgpICYmIG90aGVyLnkoKSA8IG1h
eFkoKTsKK30KKworYm9vbCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6Y29udGFpbnMoY29uc3QgRnJh
Y3Rpb25hbExheW91dFJlY3QmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiB4KCkgPD0gb3Ro
ZXIueCgpICYmIG1heFgoKSA+PSBvdGhlci5tYXhYKCkKKyAgICAgICAgJiYgeSgpIDw9IG90aGVy
LnkoKSAmJiBtYXhZKCkgPj0gb3RoZXIubWF4WSgpOworfQorCit2b2lkIEZyYWN0aW9uYWxMYXlv
dXRSZWN0OjppbnRlcnNlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90aGVyKQorewor
ICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdMb2NhdGlvbihtYXgoeCgpLCBvdGhlci54KCkp
LCBtYXgoeSgpLCBvdGhlci55KCkpKTsKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbmV3TWF4
UG9pbnQobWluKG1heFgoKSwgb3RoZXIubWF4WCgpKSwgbWluKG1heFkoKSwgb3RoZXIubWF4WSgp
KSk7CisKKyAgICAvLyBSZXR1cm4gYSBjbGVhbiBlbXB0eSByZWN0YW5nbGUgZm9yIG5vbi1pbnRl
cnNlY3RpbmcgY2FzZXMuCisgICAgaWYgKG5ld0xvY2F0aW9uLngoKSA+PSBuZXdNYXhQb2ludC54
KCkgfHwgbmV3TG9jYXRpb24ueSgpID49IG5ld01heFBvaW50LnkoKSkgeworICAgICAgICBuZXdM
b2NhdGlvbiA9IEZyYWN0aW9uYWxMYXlvdXRQb2ludCgwLCAwKTsKKyAgICAgICAgbmV3TWF4UG9p
bnQgPSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoMCwgMCk7CisgICAgfQorCisgICAgbV9sb2NhdGlv
biA9IG5ld0xvY2F0aW9uOworICAgIG1fc2l6ZSA9IG5ld01heFBvaW50IC0gbmV3TG9jYXRpb247
Cit9CisKK3ZvaWQgRnJhY3Rpb25hbExheW91dFJlY3Q6OnVuaXRlKGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRSZWN0JiBvdGhlcikKK3sKKyAgICAvLyBIYW5kbGUgZW1wdHkgc3BlY2lhbCBjYXNlcyBm
aXJzdC4KKyAgICBpZiAob3RoZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KGlzRW1wdHkoKSkgeworICAgICAgICAqdGhpcyA9IG90aGVyOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgRnJhY3Rpb25hbExheW91dFBvaW50IG5ld0xvY2F0aW9uKG1pbih4KCksIG90
aGVyLngoKSksIG1pbih5KCksIG90aGVyLnkoKSkpOworICAgIEZyYWN0aW9uYWxMYXlvdXRQb2lu
dCBuZXdNYXhQb2ludChtYXgobWF4WCgpLCBvdGhlci5tYXhYKCkpLCBtYXgobWF4WSgpLCBvdGhl
ci5tYXhZKCkpKTsKKworICAgIG1fbG9jYXRpb24gPSBuZXdMb2NhdGlvbjsKKyAgICBtX3NpemUg
PSBuZXdNYXhQb2ludCAtIG5ld0xvY2F0aW9uOworfQorCit2b2lkIEZyYWN0aW9uYWxMYXlvdXRS
ZWN0Ojp1bml0ZUlmTm9uWmVybyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgb3RoZXIpCit7
CisgICAgLy8gSGFuZGxlIGVtcHR5IHNwZWNpYWwgY2FzZXMgZmlyc3QuCisgICAgaWYgKCFvdGhl
ci53aWR0aCgpICYmICFvdGhlci5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICgh
d2lkdGgoKSAmJiAhaGVpZ2h0KCkpIHsKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdMb2NhdGlvbiht
aW4oeCgpLCBvdGhlci54KCkpLCBtaW4oeSgpLCBvdGhlci55KCkpKTsKKyAgICBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQgbmV3TWF4UG9pbnQobWF4KG1heFgoKSwgb3RoZXIubWF4WCgpKSwgbWF4KG1h
eFkoKSwgb3RoZXIubWF4WSgpKSk7CisKKyAgICBtX2xvY2F0aW9uID0gbmV3TG9jYXRpb247Cisg
ICAgbV9zaXplID0gbmV3TWF4UG9pbnQgLSBuZXdMb2NhdGlvbjsKK30KKwordm9pZCBGcmFjdGlv
bmFsTGF5b3V0UmVjdDo6c2NhbGUoZmxvYXQgcykKK3sKKyAgICBtX2xvY2F0aW9uLnNjYWxlKHMs
IHMpOworICAgIG1fc2l6ZS5zY2FsZShzKTsKK30KKworRnJhY3Rpb25hbExheW91dFJlY3QgdW5p
b25SZWN0KGNvbnN0IFZlY3RvcjxGcmFjdGlvbmFsTGF5b3V0UmVjdD4mIHJlY3RzKQoreworICAg
IEZyYWN0aW9uYWxMYXlvdXRSZWN0IHJlc3VsdDsKKworICAgIHNpemVfdCBjb3VudCA9IHJlY3Rz
LnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAg
IHJlc3VsdC51bml0ZShyZWN0c1tpXSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitJbnRS
ZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIHJlY3QpCit7
CisgICAgSW50UG9pbnQgbG9jYXRpb24gPSBmbG9vcmVkSW50UG9pbnQocmVjdC5taW5YTWluWUNv
cm5lcigpKTsKKyAgICBJbnRQb2ludCBtYXhQb2ludCA9IGNlaWxlZEludFBvaW50KHJlY3QubWF4
WE1heFlDb3JuZXIoKSk7CisKKyAgICByZXR1cm4gSW50UmVjdChsb2NhdGlvbiwgbWF4UG9pbnQg
LSBsb2NhdGlvbik7Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRSZWN0IGVuY2xvc2luZ0ZyYWN0aW9u
YWxMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyNpZiBFTkFCTEUoU1VCUElY
RUxfTEFZT1VUKQorICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBsb2NhdGlvbiA9IGZsb29yZWRG
cmFjdGlvbmFsTGF5b3V0UG9pbnQocmVjdC5taW5YTWluWUNvcm5lcigpKTsKKyAgICBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQgbWF4UG9pbnQgPSBjZWlsZWRGcmFjdGlvbmFsTGF5b3V0UG9pbnQocmVj
dC5tYXhYTWF4WUNvcm5lcigpKTsKKworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UmVjdChs
b2NhdGlvbiwgbWF4UG9pbnQgLSBsb2NhdGlvbik7CisjZWxzZQorICAgIHJldHVybiBlbmNsb3Np
bmdJbnRSZWN0KHJlY3QpOworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJlY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJlY3QuY3Bw
CShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9M
YXlvdXRSZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDEwIEBACiAgKi8KIAog
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRSZWN0LmgiCisj
aW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVk
ZSAiRnJhY3Rpb25hbExheW91dFVuaXQuaCIKKyNpbmNsdWRlICJMYXlvdXRVbml0LmgiCiAjaW5j
bHVkZSA8YWxnb3JpdGhtPgogCiB1c2luZyBzdGQ6Om1heDsKQEAgLTQwLDEzICs0MCwxMyBAQCB1
c2luZyBzdGQ6Om1pbjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GcmFjdGlvbmFsTGF5b3V0
UmVjdDo6RnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQotICAgIDogbV9s
b2NhdGlvbihGcmFjdGlvbmFsTGF5b3V0UG9pbnQoci5sb2NhdGlvbigpKSkKLSAgICAsIG1fc2l6
ZShGcmFjdGlvbmFsTGF5b3V0U2l6ZShyLnNpemUoKSkpCitMYXlvdXRSZWN0OjpMYXlvdXRSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcikKKyAgICA6IG1fbG9jYXRpb24oTGF5b3V0UG9pbnQoci5sb2Nh
dGlvbigpKSkKKyAgICAsIG1fc2l6ZShMYXlvdXRTaXplKHIuc2l6ZSgpKSkKIHsKIH0KIAotYm9v
bCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6aW50ZXJzZWN0cyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0
UmVjdCYgb3RoZXIpIGNvbnN0Citib29sIExheW91dFJlY3Q6OmludGVyc2VjdHMoY29uc3QgTGF5
b3V0UmVjdCYgb3RoZXIpIGNvbnN0CiB7CiAgICAgLy8gQ2hlY2tpbmcgZW1wdGluZXNzIGhhbmRs
ZXMgbmVnYXRpdmUgd2lkdGhzIGFzIHdlbGwgYXMgemVyby4KICAgICByZXR1cm4gIWlzRW1wdHko
KSAmJiAhb3RoZXIuaXNFbXB0eSgpCkBAIC01NCwyOCArNTQsMjggQEAgYm9vbCBGcmFjdGlvbmFs
TGF5b3V0UmVjdDo6aW50ZXJzZWN0cyhjbwogICAgICAgICAmJiB5KCkgPCBvdGhlci5tYXhZKCkg
JiYgb3RoZXIueSgpIDwgbWF4WSgpOwogfQogCi1ib29sIEZyYWN0aW9uYWxMYXlvdXRSZWN0Ojpj
b250YWlucyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgb3RoZXIpIGNvbnN0Citib29sIExh
eW91dFJlY3Q6OmNvbnRhaW5zKGNvbnN0IExheW91dFJlY3QmIG90aGVyKSBjb25zdAogewogICAg
IHJldHVybiB4KCkgPD0gb3RoZXIueCgpICYmIG1heFgoKSA+PSBvdGhlci5tYXhYKCkKICAgICAg
ICAgJiYgeSgpIDw9IG90aGVyLnkoKSAmJiBtYXhZKCkgPj0gb3RoZXIubWF4WSgpOwogfQogCi12
b2lkIEZyYWN0aW9uYWxMYXlvdXRSZWN0OjppbnRlcnNlY3QoY29uc3QgRnJhY3Rpb25hbExheW91
dFJlY3QmIG90aGVyKQordm9pZCBMYXlvdXRSZWN0OjppbnRlcnNlY3QoY29uc3QgTGF5b3V0UmVj
dCYgb3RoZXIpCiB7Ci0gICAgRnJhY3Rpb25hbExheW91dFBvaW50IG5ld0xvY2F0aW9uKG1heCh4
KCksIG90aGVyLngoKSksIG1heCh5KCksIG90aGVyLnkoKSkpOwotICAgIEZyYWN0aW9uYWxMYXlv
dXRQb2ludCBuZXdNYXhQb2ludChtaW4obWF4WCgpLCBvdGhlci5tYXhYKCkpLCBtaW4obWF4WSgp
LCBvdGhlci5tYXhZKCkpKTsKKyAgICBMYXlvdXRQb2ludCBuZXdMb2NhdGlvbihtYXgoeCgpLCBv
dGhlci54KCkpLCBtYXgoeSgpLCBvdGhlci55KCkpKTsKKyAgICBMYXlvdXRQb2ludCBuZXdNYXhQ
b2ludChtaW4obWF4WCgpLCBvdGhlci5tYXhYKCkpLCBtaW4obWF4WSgpLCBvdGhlci5tYXhZKCkp
KTsKIAogICAgIC8vIFJldHVybiBhIGNsZWFuIGVtcHR5IHJlY3RhbmdsZSBmb3Igbm9uLWludGVy
c2VjdGluZyBjYXNlcy4KICAgICBpZiAobmV3TG9jYXRpb24ueCgpID49IG5ld01heFBvaW50Lngo
KSB8fCBuZXdMb2NhdGlvbi55KCkgPj0gbmV3TWF4UG9pbnQueSgpKSB7Ci0gICAgICAgIG5ld0xv
Y2F0aW9uID0gRnJhY3Rpb25hbExheW91dFBvaW50KDAsIDApOwotICAgICAgICBuZXdNYXhQb2lu
dCA9IEZyYWN0aW9uYWxMYXlvdXRQb2ludCgwLCAwKTsKKyAgICAgICAgbmV3TG9jYXRpb24gPSBM
YXlvdXRQb2ludCgwLCAwKTsKKyAgICAgICAgbmV3TWF4UG9pbnQgPSBMYXlvdXRQb2ludCgwLCAw
KTsKICAgICB9CiAKICAgICBtX2xvY2F0aW9uID0gbmV3TG9jYXRpb247CiAgICAgbV9zaXplID0g
bmV3TWF4UG9pbnQgLSBuZXdMb2NhdGlvbjsKIH0KIAotdm9pZCBGcmFjdGlvbmFsTGF5b3V0UmVj
dDo6dW5pdGUoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90aGVyKQordm9pZCBMYXlvdXRS
ZWN0Ojp1bml0ZShjb25zdCBMYXlvdXRSZWN0JiBvdGhlcikKIHsKICAgICAvLyBIYW5kbGUgZW1w
dHkgc3BlY2lhbCBjYXNlcyBmaXJzdC4KICAgICBpZiAob3RoZXIuaXNFbXB0eSgpKQpAQCAtODUs
MTQgKzg1LDE0IEBAIHZvaWQgRnJhY3Rpb25hbExheW91dFJlY3Q6OnVuaXRlKGNvbnN0IEYKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdMb2Nh
dGlvbihtaW4oeCgpLCBvdGhlci54KCkpLCBtaW4oeSgpLCBvdGhlci55KCkpKTsKLSAgICBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQgbmV3TWF4UG9pbnQobWF4KG1heFgoKSwgb3RoZXIubWF4WCgpKSwg
bWF4KG1heFkoKSwgb3RoZXIubWF4WSgpKSk7CisgICAgTGF5b3V0UG9pbnQgbmV3TG9jYXRpb24o
bWluKHgoKSwgb3RoZXIueCgpKSwgbWluKHkoKSwgb3RoZXIueSgpKSk7CisgICAgTGF5b3V0UG9p
bnQgbmV3TWF4UG9pbnQobWF4KG1heFgoKSwgb3RoZXIubWF4WCgpKSwgbWF4KG1heFkoKSwgb3Ro
ZXIubWF4WSgpKSk7CiAKICAgICBtX2xvY2F0aW9uID0gbmV3TG9jYXRpb247CiAgICAgbV9zaXpl
ID0gbmV3TWF4UG9pbnQgLSBuZXdMb2NhdGlvbjsKIH0KIAotdm9pZCBGcmFjdGlvbmFsTGF5b3V0
UmVjdDo6dW5pdGVJZk5vblplcm8oY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90aGVyKQor
dm9pZCBMYXlvdXRSZWN0Ojp1bml0ZUlmTm9uWmVybyhjb25zdCBMYXlvdXRSZWN0JiBvdGhlcikK
IHsKICAgICAvLyBIYW5kbGUgZW1wdHkgc3BlY2lhbCBjYXNlcyBmaXJzdC4KICAgICBpZiAoIW90
aGVyLndpZHRoKCkgJiYgIW90aGVyLmhlaWdodCgpKQpAQCAtMTAyLDIyICsxMDIsMjIgQEAgdm9p
ZCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6dW5pdGVJZk5vblplcgogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgRnJhY3Rpb25hbExheW91dFBvaW50IG5ld0xvY2F0aW9uKG1pbih4KCksIG90
aGVyLngoKSksIG1pbih5KCksIG90aGVyLnkoKSkpOwotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2lu
dCBuZXdNYXhQb2ludChtYXgobWF4WCgpLCBvdGhlci5tYXhYKCkpLCBtYXgobWF4WSgpLCBvdGhl
ci5tYXhZKCkpKTsKKyAgICBMYXlvdXRQb2ludCBuZXdMb2NhdGlvbihtaW4oeCgpLCBvdGhlci54
KCkpLCBtaW4oeSgpLCBvdGhlci55KCkpKTsKKyAgICBMYXlvdXRQb2ludCBuZXdNYXhQb2ludCht
YXgobWF4WCgpLCBvdGhlci5tYXhYKCkpLCBtYXgobWF4WSgpLCBvdGhlci5tYXhZKCkpKTsKIAog
ICAgIG1fbG9jYXRpb24gPSBuZXdMb2NhdGlvbjsKICAgICBtX3NpemUgPSBuZXdNYXhQb2ludCAt
IG5ld0xvY2F0aW9uOwogfQogCi12b2lkIEZyYWN0aW9uYWxMYXlvdXRSZWN0OjpzY2FsZShmbG9h
dCBzKQordm9pZCBMYXlvdXRSZWN0OjpzY2FsZShmbG9hdCBzKQogewogICAgIG1fbG9jYXRpb24u
c2NhbGUocywgcyk7CiAgICAgbV9zaXplLnNjYWxlKHMpOwogfQogCi1GcmFjdGlvbmFsTGF5b3V0
UmVjdCB1bmlvblJlY3QoY29uc3QgVmVjdG9yPEZyYWN0aW9uYWxMYXlvdXRSZWN0PiYgcmVjdHMp
CitMYXlvdXRSZWN0IHVuaW9uUmVjdChjb25zdCBWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzKQog
ewotICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0IHJlc3VsdDsKKyAgICBMYXlvdXRSZWN0IHJlc3Vs
dDsKIAogICAgIHNpemVfdCBjb3VudCA9IHJlY3RzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpCkBAIC0xMjYsNyArMTI2LDcgQEAgRnJhY3Rpb25hbExheW91
dFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlYwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUludFJl
Y3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgcmVjdCkKK0lu
dFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0KQogewogICAgIElu
dFBvaW50IGxvY2F0aW9uID0gZmxvb3JlZEludFBvaW50KHJlY3QubWluWE1pbllDb3JuZXIoKSk7
CiAgICAgSW50UG9pbnQgbWF4UG9pbnQgPSBjZWlsZWRJbnRQb2ludChyZWN0Lm1heFhNYXhZQ29y
bmVyKCkpOwpAQCAtMTM0LDE2ICsxMzQsOSBAQCBJbnRSZWN0IGVuY2xvc2luZ0ludFJlY3QoY29u
c3QgRnJhY3Rpb25hCiAgICAgcmV0dXJuIEludFJlY3QobG9jYXRpb24sIG1heFBvaW50IC0gbG9j
YXRpb24pOwogfQogCi1GcmFjdGlvbmFsTGF5b3V0UmVjdCBlbmNsb3NpbmdGcmFjdGlvbmFsTGF5
b3V0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCitMYXlvdXRSZWN0IGVuY2xvc2luZ0xheW91
dFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlP
VVQpCi0gICAgRnJhY3Rpb25hbExheW91dFBvaW50IGxvY2F0aW9uID0gZmxvb3JlZEZyYWN0aW9u
YWxMYXlvdXRQb2ludChyZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwotICAgIEZyYWN0aW9uYWxMYXlv
dXRQb2ludCBtYXhQb2ludCA9IGNlaWxlZEZyYWN0aW9uYWxMYXlvdXRQb2ludChyZWN0Lm1heFhN
YXhZQ29ybmVyKCkpOwotCi0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRSZWN0KGxvY2F0aW9u
LCBtYXhQb2ludCAtIGxvY2F0aW9uKTsKLSNlbHNlCiAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJl
Y3QocmVjdCk7Ci0jZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UmVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJlY3QuaAkocmV2aXNpb24g
MTMzNTE3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFs
TGF5b3V0UmVjdC5oOjEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0xheW91dFJlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyNyBAQAorLyoKKyAqIENv
cHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZy
YWN0aW9uYWxMYXlvdXRSZWN0X2gKKyNkZWZpbmUgRnJhY3Rpb25hbExheW91dFJlY3RfaAorCisj
aW5jbHVkZSAiRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oIgorI2luY2x1ZGUgIkZyYWN0aW9u
YWxMYXlvdXRQb2ludC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKKyNpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlIDxxZ2xvYmFsLmg+CitRVF9CRUdJ
Tl9OQU1FU1BBQ0UKK2NsYXNzIFFSZWN0OworY2xhc3MgUVJlY3RGOworUVRfRU5EX05BTUVTUEFD
RQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRSZWN0OworCitj
bGFzcyBGcmFjdGlvbmFsTGF5b3V0UmVjdCB7CitwdWJsaWM6CisgICAgRnJhY3Rpb25hbExheW91
dFJlY3QoKSB7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQmIGxvY2F0aW9uLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkKKyAg
ICAgICAgOiBtX2xvY2F0aW9uKGxvY2F0aW9uKSwgbV9zaXplKHNpemUpIHsgfQorICAgIEZyYWN0
aW9uYWxMYXlvdXRSZWN0KEZyYWN0aW9uYWxMYXlvdXRVbml0IHgsIEZyYWN0aW9uYWxMYXlvdXRV
bml0IHksIEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBo
ZWlnaHQpCisgICAgICAgIDogbV9sb2NhdGlvbihGcmFjdGlvbmFsTGF5b3V0UG9pbnQoeCwgeSkp
LCBtX3NpemUoRnJhY3Rpb25hbExheW91dFNpemUod2lkdGgsIGhlaWdodCkpIHsgfQorICAgIEZy
YWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UG9pbnQmIGxvY2F0aW9uLCBjb25zdCBGbG9h
dFNpemUmIHNpemUpCisgICAgICAgIDogbV9sb2NhdGlvbihsb2NhdGlvbiksIG1fc2l6ZShzaXpl
KSB7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSA6IG1f
bG9jYXRpb24ocmVjdC5sb2NhdGlvbigpKSwgbV9zaXplKHJlY3Quc2l6ZSgpKSB7IH0KKworICAg
IGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOyAvLyBkb24n
dCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQorICAgICAgICAKKyAgICBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQgbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9
CisgICAgRnJhY3Rpb25hbExheW91dFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsg
fQorCisgICAgSW50UG9pbnQgcGl4ZWxTbmFwcGVkTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBy
b3VuZGVkSW50UG9pbnQobV9sb2NhdGlvbik7IH0KKyAgICBJbnRTaXplIHBpeGVsU25hcHBlZFNp
emUoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKHNuYXBTaXplVG9QaXhlbChtX3NpemUud2lkdGgo
KSwgbV9sb2NhdGlvbi54KCkpLCBzbmFwU2l6ZVRvUGl4ZWwobV9zaXplLmhlaWdodCgpLCBtX2xv
Y2F0aW9uLnkoKSkpOyB9CisKKyAgICB2b2lkIHNldExvY2F0aW9uKGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRQb2ludCYgbG9jYXRpb24pIHsgbV9sb2NhdGlvbiA9IGxvY2F0aW9uOyB9CisgICAgdm9p
ZCBzZXRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1fc2l6ZSA9IHNp
emU7IH0KKworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHgoKSBjb25zdCB7IHJldHVybiBtX2xv
Y2F0aW9uLngoKTsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHkoKSBjb25zdCB7IHJldHVy
biBtX2xvY2F0aW9uLnkoKTsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1heFgoKSBjb25z
dCB7IHJldHVybiB4KCkgKyB3aWR0aCgpOyB9CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbWF4
WSgpIGNvbnN0IHsgcmV0dXJuIHkoKSArIGhlaWdodCgpOyB9CisgICAgRnJhY3Rpb25hbExheW91
dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3NpemUud2lkdGgoKTsgfQorICAgIEZyYWN0
aW9uYWxMYXlvdXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsg
fQorCisgICAgaW50IHBpeGVsU25hcHBlZFgoKSBjb25zdCB7IHJldHVybiB4KCkucm91bmQoKTsg
fQorICAgIGludCBwaXhlbFNuYXBwZWRZKCkgY29uc3QgeyByZXR1cm4geSgpLnJvdW5kKCk7IH0K
KyAgICBpbnQgcGl4ZWxTbmFwcGVkV2lkdGgoKSBjb25zdCB7IHJldHVybiBzbmFwU2l6ZVRvUGl4
ZWwod2lkdGgoKSwgeCgpKTsgfQorICAgIGludCBwaXhlbFNuYXBwZWRIZWlnaHQoKSBjb25zdCB7
IHJldHVybiBzbmFwU2l6ZVRvUGl4ZWwoaGVpZ2h0KCksIHkoKSk7IH0KKyAgICBpbnQgcGl4ZWxT
bmFwcGVkTWF4WCgpIGNvbnN0IHsgcmV0dXJuIChtX2xvY2F0aW9uLngoKSArIG1fc2l6ZS53aWR0
aCgpKS5yb3VuZCgpOyB9CisgICAgaW50IHBpeGVsU25hcHBlZE1heFkoKSBjb25zdCB7IHJldHVy
biAobV9sb2NhdGlvbi55KCkgKyBtX3NpemUuaGVpZ2h0KCkpLnJvdW5kKCk7IH0KKworICAgIHZv
aWQgc2V0WChGcmFjdGlvbmFsTGF5b3V0VW5pdCB4KSB7IG1fbG9jYXRpb24uc2V0WCh4KTsgfQor
ICAgIHZvaWQgc2V0WShGcmFjdGlvbmFsTGF5b3V0VW5pdCB5KSB7IG1fbG9jYXRpb24uc2V0WSh5
KTsgfQorICAgIHZvaWQgc2V0V2lkdGgoRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgpIHsgbV9z
aXplLnNldFdpZHRoKHdpZHRoKTsgfQorICAgIHZvaWQgc2V0SGVpZ2h0KEZyYWN0aW9uYWxMYXlv
dXRVbml0IGhlaWdodCkgeyBtX3NpemUuc2V0SGVpZ2h0KGhlaWdodCk7IH0KKworICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0KKworICAgIC8vIE5P
VEU6IFRoZSByZXN1bHQgaXMgcm91bmRlZCB0byBpbnRlZ2VyIHZhbHVlcywgYW5kIHRodXMgbWF5
IGJlIG5vdCB0aGUgZXhhY3QKKyAgICAvLyBjZW50ZXIgcG9pbnQuCisgICAgRnJhY3Rpb25hbExh
eW91dFBvaW50IGNlbnRlcigpIGNvbnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludCh4
KCkgKyB3aWR0aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAyKTsgfQorCisgICAgdm9pZCBtb3Zl
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1fbG9jYXRpb24gKz0gc2l6ZTsg
fSAKKyAgICB2b2lkIG1vdmVCeShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIG9mZnNldCkg
eyBtX2xvY2F0aW9uLm1vdmUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7IH0KKyAgICB2b2lkIG1v
dmUoRnJhY3Rpb25hbExheW91dFVuaXQgZHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGR5KSB7IG1f
bG9jYXRpb24ubW92ZShkeCwgZHkpOyB9IAorCisgICAgdm9pZCBleHBhbmQoY29uc3QgRnJhY3Rp
b25hbExheW91dFNpemUmIHNpemUpIHsgbV9zaXplICs9IHNpemU7IH0KKyAgICB2b2lkIGV4cGFu
ZChjb25zdCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50JiBib3gpCisgICAgeworICAgICAgICBt
X2xvY2F0aW9uLm1vdmUoLWJveC5sZWZ0KCksIC1ib3gudG9wKCkpOworICAgICAgICBtX3NpemUu
ZXhwYW5kKGJveC5sZWZ0KCkgKyBib3gucmlnaHQoKSwgYm94LnRvcCgpICsgYm94LmJvdHRvbSgp
KTsKKyAgICB9CisgICAgdm9pZCBleHBhbmQoRnJhY3Rpb25hbExheW91dFVuaXQgZHcsIEZyYWN0
aW9uYWxMYXlvdXRVbml0IGRoKSB7IG1fc2l6ZS5leHBhbmQoZHcsIGRoKTsgfQorICAgIHZvaWQg
Y29udHJhY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpIHsgbV9zaXplIC09IHNp
emU7IH0KKyAgICB2b2lkIGNvbnRyYWN0KEZyYWN0aW9uYWxMYXlvdXRVbml0IGR3LCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCBkaCkgeyBtX3NpemUuZXhwYW5kKC1kdywgLWRoKTsgfQorCisgICAgdm9p
ZCBzaGlmdFhFZGdlVG8oRnJhY3Rpb25hbExheW91dFVuaXQgZWRnZSkKKyAgICB7CisgICAgICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0IGRlbHRhID0gZWRnZSAtIHgoKTsKKyAgICAgICAgc2V0WChl
ZGdlKTsKKyAgICAgICAgc2V0V2lkdGgoc3RkOjptYXg8RnJhY3Rpb25hbExheW91dFVuaXQ+KDAs
IHdpZHRoKCkgLSBkZWx0YSkpOworICAgIH0KKyAgICB2b2lkIHNoaWZ0TWF4WEVkZ2VUbyhGcmFj
dGlvbmFsTGF5b3V0VW5pdCBlZGdlKQorICAgIHsKKyAgICAgICAgRnJhY3Rpb25hbExheW91dFVu
aXQgZGVsdGEgPSBlZGdlIC0gbWF4WCgpOworICAgICAgICBzZXRXaWR0aChzdGQ6Om1heDxGcmFj
dGlvbmFsTGF5b3V0VW5pdD4oMCwgd2lkdGgoKSArIGRlbHRhKSk7CisgICAgfQorICAgIHZvaWQg
c2hpZnRZRWRnZVRvKEZyYWN0aW9uYWxMYXlvdXRVbml0IGVkZ2UpCisgICAgeworICAgICAgICBG
cmFjdGlvbmFsTGF5b3V0VW5pdCBkZWx0YSA9IGVkZ2UgLSB5KCk7CisgICAgICAgIHNldFkoZWRn
ZSk7CisgICAgICAgIHNldEhlaWdodChzdGQ6Om1heDxGcmFjdGlvbmFsTGF5b3V0VW5pdD4oMCwg
aGVpZ2h0KCkgLSBkZWx0YSkpOworICAgIH0KKyAgICB2b2lkIHNoaWZ0TWF4WUVkZ2VUbyhGcmFj
dGlvbmFsTGF5b3V0VW5pdCBlZGdlKQorICAgIHsKKyAgICAgICAgRnJhY3Rpb25hbExheW91dFVu
aXQgZGVsdGEgPSBlZGdlIC0gbWF4WSgpOworICAgICAgICBzZXRIZWlnaHQoc3RkOjptYXg8RnJh
Y3Rpb25hbExheW91dFVuaXQ+KDAsIGhlaWdodCgpICsgZGVsdGEpKTsKKyAgICB9CisKKyAgICBG
cmFjdGlvbmFsTGF5b3V0UG9pbnQgbWluWE1pbllDb3JuZXIoKSBjb25zdCB7IHJldHVybiBtX2xv
Y2F0aW9uOyB9IC8vIHR5cGljYWxseSB0b3BMZWZ0CisgICAgRnJhY3Rpb25hbExheW91dFBvaW50
IG1heFhNaW5ZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KG1f
bG9jYXRpb24ueCgpICsgbV9zaXplLndpZHRoKCksIG1fbG9jYXRpb24ueSgpKTsgfSAvLyB0eXBp
Y2FsbHkgdG9wUmlnaHQKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbWluWE1heFlDb3JuZXIo
KSBjb25zdCB7IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQobV9sb2NhdGlvbi54KCksIG1f
bG9jYXRpb24ueSgpICsgbV9zaXplLmhlaWdodCgpKTsgfSAvLyB0eXBpY2FsbHkgYm90dG9tTGVm
dAorICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBtYXhYTWF4WUNvcm5lcigpIGNvbnN0IHsgcmV0
dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChtX2xvY2F0aW9uLngoKSArIG1fc2l6ZS53aWR0aCgp
LCBtX2xvY2F0aW9uLnkoKSArIG1fc2l6ZS5oZWlnaHQoKSk7IH0gLy8gdHlwaWNhbGx5IGJvdHRv
bVJpZ2h0CisgICAgCisgICAgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRS
ZWN0JikgY29uc3Q7CisgICAgYm9vbCBjb250YWlucyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVj
dCYpIGNvbnN0OworCisgICAgLy8gVGhpcyBjaGVja3MgdG8gc2VlIGlmIHRoZSByZWN0IGNvbnRh
aW5zIHgseSBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuCisgICAgLy8gRXF1aXZhbGVudCB0byBj
aGVja2luZyBpZiB0aGUgcmVjdCBjb250YWlucyBhIDF4MSByZWN0IGJlbG93IGFuZCB0byB0aGUg
cmlnaHQgb2YgKHB4LHB5KS4KKyAgICBib29sIGNvbnRhaW5zKEZyYWN0aW9uYWxMYXlvdXRVbml0
IHB4LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBweSkgY29uc3QKKyAgICAgICAgeyByZXR1cm4gcHgg
Pj0geCgpICYmIHB4IDwgbWF4WCgpICYmIHB5ID49IHkoKSAmJiBweSA8IG1heFkoKTsgfQorICAg
IGJvb2wgY29udGFpbnMoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBwb2ludCkgY29uc3Qg
eyByZXR1cm4gY29udGFpbnMocG9pbnQueCgpLCBwb2ludC55KCkpOyB9CisKKyAgICB2b2lkIGlu
dGVyc2VjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpOworICAgIHZvaWQgdW5pdGUoY29u
c3QgRnJhY3Rpb25hbExheW91dFJlY3QmKTsKKyAgICB2b2lkIHVuaXRlSWZOb25aZXJvKGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRSZWN0Jik7CisKKyAgICB2b2lkIGluZmxhdGVYKEZyYWN0aW9uYWxM
YXlvdXRVbml0IGR4KQorICAgIHsKKyAgICAgICAgbV9sb2NhdGlvbi5zZXRYKG1fbG9jYXRpb24u
eCgpIC0gZHgpOworICAgICAgICBtX3NpemUuc2V0V2lkdGgobV9zaXplLndpZHRoKCkgKyBkeCAr
IGR4KTsKKyAgICB9CisgICAgdm9pZCBpbmZsYXRlWShGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeSkK
KyAgICB7CisgICAgICAgIG1fbG9jYXRpb24uc2V0WShtX2xvY2F0aW9uLnkoKSAtIGR5KTsKKyAg
ICAgICAgbV9zaXplLnNldEhlaWdodChtX3NpemUuaGVpZ2h0KCkgKyBkeSArIGR5KTsKKyAgICB9
CisgICAgdm9pZCBpbmZsYXRlKEZyYWN0aW9uYWxMYXlvdXRVbml0IGQpIHsgaW5mbGF0ZVgoZCk7
IGluZmxhdGVZKGQpOyB9CisgICAgdm9pZCBzY2FsZShmbG9hdCBzKTsKKworICAgIEZyYWN0aW9u
YWxMYXlvdXRSZWN0IHRyYW5zcG9zZWRSZWN0KCkgY29uc3QgeyByZXR1cm4gRnJhY3Rpb25hbExh
eW91dFJlY3QobV9sb2NhdGlvbi50cmFuc3Bvc2VkUG9pbnQoKSwgbV9zaXplLnRyYW5zcG9zZWRT
aXplKCkpOyB9CisKKyAgICBzdGF0aWMgRnJhY3Rpb25hbExheW91dFJlY3QgaW5maW5pdGVSZWN0
KCkKKyAgICB7CisgICAgICAgIC8vIFJldHVybiBhIHJlY3QgdGhhdCBpcyBzbGlnaHRseSBzbWFs
bGVyIHRoYW4gdGhlIHRydWUgbWF4IHJlY3QgdG8gYWxsb3cgcGl4ZWxTbmFwcGluZyB0byByb3Vu
ZCB1cCB0byB0aGUgbmVhcmVzdCBJbnRSZWN0IHdpdGhvdXQgb3ZlcmZsb3dpbmcuCisgICAgICAg
IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UmVjdChGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bmVhcmx5
TWluKCkgLyAyLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bmVhcmx5TWluKCkgLyAyLCBGcmFjdGlv
bmFsTGF5b3V0VW5pdDo6bmVhcmx5TWF4KCksIEZyYWN0aW9uYWxMYXlvdXRVbml0OjpuZWFybHlN
YXgoKSk7CisgICAgfQorCisjaWYgUExBVEZPUk0oUVQpCisgICAgZXhwbGljaXQgRnJhY3Rpb25h
bExheW91dFJlY3QoY29uc3QgUVJlY3QmKTsKKyAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0
UmVjdChjb25zdCBRUmVjdEYmKTsKKyAgICBvcGVyYXRvciBRUmVjdEYoKSBjb25zdDsKKyNlbmRp
ZgorCitwcml2YXRlOgorICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBtX2xvY2F0aW9uOworICAg
IEZyYWN0aW9uYWxMYXlvdXRTaXplIG1fc2l6ZTsKK307CisKK2lubGluZSBGcmFjdGlvbmFsTGF5
b3V0UmVjdCBpbnRlcnNlY3Rpb24oY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGEsIGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBiKQoreworICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0IGMg
PSBhOworICAgIGMuaW50ZXJzZWN0KGIpOworICAgIHJldHVybiBjOworfQorCitpbmxpbmUgRnJh
Y3Rpb25hbExheW91dFJlY3QgdW5pb25SZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYikKK3sKKyAgICBGcmFjdGlvbmFsTGF5b3V0
UmVjdCBjID0gYTsKKyAgICBjLnVuaXRlKGIpOworICAgIHJldHVybiBjOworfQorCitGcmFjdGlv
bmFsTGF5b3V0UmVjdCB1bmlvblJlY3QoY29uc3QgVmVjdG9yPEZyYWN0aW9uYWxMYXlvdXRSZWN0
PiYpOworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0
JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYikKK3sKKyAgICByZXR1cm4gYS5sb2Nh
dGlvbigpID09IGIubG9jYXRpb24oKSAmJiBhLnNpemUoKSA9PSBiLnNpemUoKTsKK30KKworaW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYSwgY29uc3Qg
RnJhY3Rpb25hbExheW91dFJlY3QmIGIpCit7CisgICAgcmV0dXJuIGEubG9jYXRpb24oKSAhPSBi
LmxvY2F0aW9uKCkgfHwgYS5zaXplKCkgIT0gYi5zaXplKCk7Cit9CisKK2lubGluZSBJbnRSZWN0
IHBpeGVsU25hcHBlZEludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIHJlY3QpCit7
CisjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKKyAgICByZXR1cm4gSW50UmVjdChyb3VuZGVk
SW50UG9pbnQocmVjdC5sb2NhdGlvbigpKSwgSW50U2l6ZShzbmFwU2l6ZVRvUGl4ZWwocmVjdC53
aWR0aCgpLCByZWN0LngoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc25hcFNpemVUb1BpeGVsKHJlY3QuaGVpZ2h0KCksIHJl
Y3QueSgpKSkpOworCisjZWxzZQorICAgIHJldHVybiBJbnRSZWN0KHJlY3QpOworI2VuZGlmCit9
CisKK0ludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYp
OworRnJhY3Rpb25hbExheW91dFJlY3QgZW5jbG9zaW5nRnJhY3Rpb25hbExheW91dFJlY3QoY29u
c3QgRmxvYXRSZWN0Jik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEZy
YWN0aW9uYWxMYXlvdXRSZWN0X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0xheW91dFJlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9MYXlvdXRSZWN0LmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTIg
KzI4LDEyIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgRnJhY3Rpb25hbExheW91
dFJlY3RfaAotI2RlZmluZSBGcmFjdGlvbmFsTGF5b3V0UmVjdF9oCisjaWZuZGVmIExheW91dFJl
Y3RfaAorI2RlZmluZSBMYXlvdXRSZWN0X2gKIAotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRC
b3hFeHRlbnQuaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCIKICNpbmNsdWRl
ICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94RXh0ZW50LmgiCisjaW5jbHVkZSAiTGF5
b3V0UG9pbnQuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKICNpZiBQTEFURk9STShRVCkK
QEAgLTQ4LDM0ICs0OCwzNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0UmVj
dDsKIAotY2xhc3MgRnJhY3Rpb25hbExheW91dFJlY3QgeworY2xhc3MgTGF5b3V0UmVjdCB7CiBw
dWJsaWM6Ci0gICAgRnJhY3Rpb25hbExheW91dFJlY3QoKSB7IH0KLSAgICBGcmFjdGlvbmFsTGF5
b3V0UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBjb25zdCBGcmFj
dGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkKKyAgICBMYXlvdXRSZWN0KCkgeyB9CisgICAgTGF5b3V0
UmVjdChjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIGNvbnN0IExheW91dFNpemUmIHNpemUp
CiAgICAgICAgIDogbV9sb2NhdGlvbihsb2NhdGlvbiksIG1fc2l6ZShzaXplKSB7IH0KLSAgICBG
cmFjdGlvbmFsTGF5b3V0UmVjdChGcmFjdGlvbmFsTGF5b3V0VW5pdCB4LCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCB5LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCB3aWR0aCwgRnJhY3Rpb25hbExheW91dFVu
aXQgaGVpZ2h0KQotICAgICAgICA6IG1fbG9jYXRpb24oRnJhY3Rpb25hbExheW91dFBvaW50KHgs
IHkpKSwgbV9zaXplKEZyYWN0aW9uYWxMYXlvdXRTaXplKHdpZHRoLCBoZWlnaHQpKSB7IH0KLSAg
ICBGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBGbG9hdFBvaW50JiBsb2NhdGlvbiwgY29uc3Qg
RmxvYXRTaXplJiBzaXplKQorICAgIExheW91dFJlY3QoTGF5b3V0VW5pdCB4LCBMYXlvdXRVbml0
IHksIExheW91dFVuaXQgd2lkdGgsIExheW91dFVuaXQgaGVpZ2h0KQorICAgICAgICA6IG1fbG9j
YXRpb24oTGF5b3V0UG9pbnQoeCwgeSkpLCBtX3NpemUoTGF5b3V0U2l6ZSh3aWR0aCwgaGVpZ2h0
KSkgeyB9CisgICAgTGF5b3V0UmVjdChjb25zdCBGbG9hdFBvaW50JiBsb2NhdGlvbiwgY29uc3Qg
RmxvYXRTaXplJiBzaXplKQogICAgICAgICA6IG1fbG9jYXRpb24obG9jYXRpb24pLCBtX3NpemUo
c2l6ZSkgeyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkg
OiBtX2xvY2F0aW9uKHJlY3QubG9jYXRpb24oKSksIG1fc2l6ZShyZWN0LnNpemUoKSkgeyB9Cisg
ICAgTGF5b3V0UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSA6IG1fbG9jYXRpb24ocmVjdC5sb2Nh
dGlvbigpKSwgbV9zaXplKHJlY3Quc2l6ZSgpKSB7IH0KIAotICAgIGV4cGxpY2l0IEZyYWN0aW9u
YWxMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0
bHkgc2luY2UgaXQncyBsb3NzeQorICAgIGV4cGxpY2l0IExheW91dFJlY3QoY29uc3QgRmxvYXRS
ZWN0Jik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CiAgICAg
ICAgIAotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fbG9jYXRpb247IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0U2l6ZSBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaXplOyB9CisgICAgTGF5b3V0UG9pbnQgbG9jYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX2xvY2F0aW9uOyB9CisgICAgTGF5b3V0U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
aXplOyB9CiAKICAgICBJbnRQb2ludCBwaXhlbFNuYXBwZWRMb2NhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIHJvdW5kZWRJbnRQb2ludChtX2xvY2F0aW9uKTsgfQogICAgIEludFNpemUgcGl4ZWxTbmFw
cGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUoc25hcFNpemVUb1BpeGVsKG1fc2l6ZS53
aWR0aCgpLCBtX2xvY2F0aW9uLngoKSksIHNuYXBTaXplVG9QaXhlbChtX3NpemUuaGVpZ2h0KCks
IG1fbG9jYXRpb24ueSgpKSk7IH0KIAotICAgIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgRnJhY3Rp
b25hbExheW91dFBvaW50JiBsb2NhdGlvbikgeyBtX2xvY2F0aW9uID0gbG9jYXRpb247IH0KLSAg
ICB2b2lkIHNldFNpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpIHsgbV9zaXpl
ID0gc2l6ZTsgfQorICAgIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0
aW9uKSB7IG1fbG9jYXRpb24gPSBsb2NhdGlvbjsgfQorICAgIHZvaWQgc2V0U2l6ZShjb25zdCBM
YXlvdXRTaXplJiBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KIAotICAgIEZyYWN0aW9uYWxMYXlv
dXRVbml0IHgoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uLngoKTsgfQotICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IHkoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uLnkoKTsgfQotICAgIEZy
YWN0aW9uYWxMYXlvdXRVbml0IG1heFgoKSBjb25zdCB7IHJldHVybiB4KCkgKyB3aWR0aCgpOyB9
Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgbWF4WSgpIGNvbnN0IHsgcmV0dXJuIHkoKSArIGhl
aWdodCgpOyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVy
biBtX3NpemUud2lkdGgoKTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQorICAgIExheW91dFVuaXQgeCgpIGNvbnN0
IHsgcmV0dXJuIG1fbG9jYXRpb24ueCgpOyB9CisgICAgTGF5b3V0VW5pdCB5KCkgY29uc3QgeyBy
ZXR1cm4gbV9sb2NhdGlvbi55KCk7IH0KKyAgICBMYXlvdXRVbml0IG1heFgoKSBjb25zdCB7IHJl
dHVybiB4KCkgKyB3aWR0aCgpOyB9CisgICAgTGF5b3V0VW5pdCBtYXhZKCkgY29uc3QgeyByZXR1
cm4geSgpICsgaGVpZ2h0KCk7IH0KKyAgICBMYXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1
cm4gbV9zaXplLndpZHRoKCk7IH0KKyAgICBMYXlvdXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQogCiAgICAgaW50IHBpeGVsU25hcHBlZFgoKSBjb25zdCB7
IHJldHVybiB4KCkucm91bmQoKTsgfQogICAgIGludCBwaXhlbFNuYXBwZWRZKCkgY29uc3QgeyBy
ZXR1cm4geSgpLnJvdW5kKCk7IH0KQEAgLTg0LDEzMSArODQsMTMxIEBAIHB1YmxpYzoKICAgICBp
bnQgcGl4ZWxTbmFwcGVkTWF4WCgpIGNvbnN0IHsgcmV0dXJuIChtX2xvY2F0aW9uLngoKSArIG1f
c2l6ZS53aWR0aCgpKS5yb3VuZCgpOyB9CiAgICAgaW50IHBpeGVsU25hcHBlZE1heFkoKSBjb25z
dCB7IHJldHVybiAobV9sb2NhdGlvbi55KCkgKyBtX3NpemUuaGVpZ2h0KCkpLnJvdW5kKCk7IH0K
IAotICAgIHZvaWQgc2V0WChGcmFjdGlvbmFsTGF5b3V0VW5pdCB4KSB7IG1fbG9jYXRpb24uc2V0
WCh4KTsgfQotICAgIHZvaWQgc2V0WShGcmFjdGlvbmFsTGF5b3V0VW5pdCB5KSB7IG1fbG9jYXRp
b24uc2V0WSh5KTsgfQotICAgIHZvaWQgc2V0V2lkdGgoRnJhY3Rpb25hbExheW91dFVuaXQgd2lk
dGgpIHsgbV9zaXplLnNldFdpZHRoKHdpZHRoKTsgfQotICAgIHZvaWQgc2V0SGVpZ2h0KEZyYWN0
aW9uYWxMYXlvdXRVbml0IGhlaWdodCkgeyBtX3NpemUuc2V0SGVpZ2h0KGhlaWdodCk7IH0KKyAg
ICB2b2lkIHNldFgoTGF5b3V0VW5pdCB4KSB7IG1fbG9jYXRpb24uc2V0WCh4KTsgfQorICAgIHZv
aWQgc2V0WShMYXlvdXRVbml0IHkpIHsgbV9sb2NhdGlvbi5zZXRZKHkpOyB9CisgICAgdm9pZCBz
ZXRXaWR0aChMYXlvdXRVbml0IHdpZHRoKSB7IG1fc2l6ZS5zZXRXaWR0aCh3aWR0aCk7IH0KKyAg
ICB2b2lkIHNldEhlaWdodChMYXlvdXRVbml0IGhlaWdodCkgeyBtX3NpemUuc2V0SGVpZ2h0KGhl
aWdodCk7IH0KIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5pc0Vt
cHR5KCk7IH0KIAogICAgIC8vIE5PVEU6IFRoZSByZXN1bHQgaXMgcm91bmRlZCB0byBpbnRlZ2Vy
IHZhbHVlcywgYW5kIHRodXMgbWF5IGJlIG5vdCB0aGUgZXhhY3QKICAgICAvLyBjZW50ZXIgcG9p
bnQuCi0gICAgRnJhY3Rpb25hbExheW91dFBvaW50IGNlbnRlcigpIGNvbnN0IHsgcmV0dXJuIEZy
YWN0aW9uYWxMYXlvdXRQb2ludCh4KCkgKyB3aWR0aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAy
KTsgfQorICAgIExheW91dFBvaW50IGNlbnRlcigpIGNvbnN0IHsgcmV0dXJuIExheW91dFBvaW50
KHgoKSArIHdpZHRoKCkgLyAyLCB5KCkgKyBoZWlnaHQoKSAvIDIpOyB9CiAKLSAgICB2b2lkIG1v
dmUoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpIHsgbV9sb2NhdGlvbiArPSBzaXpl
OyB9IAotICAgIHZvaWQgbW92ZUJ5KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgb2Zmc2V0
KSB7IG1fbG9jYXRpb24ubW92ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsgfQotICAgIHZvaWQg
bW92ZShGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeCwgRnJhY3Rpb25hbExheW91dFVuaXQgZHkpIHsg
bV9sb2NhdGlvbi5tb3ZlKGR4LCBkeSk7IH0gCisgICAgdm9pZCBtb3ZlKGNvbnN0IExheW91dFNp
emUmIHNpemUpIHsgbV9sb2NhdGlvbiArPSBzaXplOyB9IAorICAgIHZvaWQgbW92ZUJ5KGNvbnN0
IExheW91dFBvaW50JiBvZmZzZXQpIHsgbV9sb2NhdGlvbi5tb3ZlKG9mZnNldC54KCksIG9mZnNl
dC55KCkpOyB9CisgICAgdm9pZCBtb3ZlKExheW91dFVuaXQgZHgsIExheW91dFVuaXQgZHkpIHsg
bV9sb2NhdGlvbi5tb3ZlKGR4LCBkeSk7IH0gCiAKLSAgICB2b2lkIGV4cGFuZChjb25zdCBGcmFj
dGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkgeyBtX3NpemUgKz0gc2l6ZTsgfQotICAgIHZvaWQgZXhw
YW5kKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQmIGJveCkKKyAgICB2b2lkIGV4cGFu
ZChjb25zdCBMYXlvdXRTaXplJiBzaXplKSB7IG1fc2l6ZSArPSBzaXplOyB9CisgICAgdm9pZCBl
eHBhbmQoY29uc3QgTGF5b3V0Qm94RXh0ZW50JiBib3gpCiAgICAgewogICAgICAgICBtX2xvY2F0
aW9uLm1vdmUoLWJveC5sZWZ0KCksIC1ib3gudG9wKCkpOwogICAgICAgICBtX3NpemUuZXhwYW5k
KGJveC5sZWZ0KCkgKyBib3gucmlnaHQoKSwgYm94LnRvcCgpICsgYm94LmJvdHRvbSgpKTsKICAg
ICB9Ci0gICAgdm9pZCBleHBhbmQoRnJhY3Rpb25hbExheW91dFVuaXQgZHcsIEZyYWN0aW9uYWxM
YXlvdXRVbml0IGRoKSB7IG1fc2l6ZS5leHBhbmQoZHcsIGRoKTsgfQotICAgIHZvaWQgY29udHJh
Y3QoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpIHsgbV9zaXplIC09IHNpemU7IH0K
LSAgICB2b2lkIGNvbnRyYWN0KEZyYWN0aW9uYWxMYXlvdXRVbml0IGR3LCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCBkaCkgeyBtX3NpemUuZXhwYW5kKC1kdywgLWRoKTsgfQorICAgIHZvaWQgZXhwYW5k
KExheW91dFVuaXQgZHcsIExheW91dFVuaXQgZGgpIHsgbV9zaXplLmV4cGFuZChkdywgZGgpOyB9
CisgICAgdm9pZCBjb250cmFjdChjb25zdCBMYXlvdXRTaXplJiBzaXplKSB7IG1fc2l6ZSAtPSBz
aXplOyB9CisgICAgdm9pZCBjb250cmFjdChMYXlvdXRVbml0IGR3LCBMYXlvdXRVbml0IGRoKSB7
IG1fc2l6ZS5leHBhbmQoLWR3LCAtZGgpOyB9CiAKLSAgICB2b2lkIHNoaWZ0WEVkZ2VUbyhGcmFj
dGlvbmFsTGF5b3V0VW5pdCBlZGdlKQorICAgIHZvaWQgc2hpZnRYRWRnZVRvKExheW91dFVuaXQg
ZWRnZSkKICAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRlbHRhID0gZWRnZSAt
IHgoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBkZWx0YSA9IGVkZ2UgLSB4KCk7CiAgICAgICAgIHNl
dFgoZWRnZSk7Ci0gICAgICAgIHNldFdpZHRoKHN0ZDo6bWF4PEZyYWN0aW9uYWxMYXlvdXRVbml0
PigwLCB3aWR0aCgpIC0gZGVsdGEpKTsKKyAgICAgICAgc2V0V2lkdGgoc3RkOjptYXg8TGF5b3V0
VW5pdD4oMCwgd2lkdGgoKSAtIGRlbHRhKSk7CiAgICAgfQotICAgIHZvaWQgc2hpZnRNYXhYRWRn
ZVRvKEZyYWN0aW9uYWxMYXlvdXRVbml0IGVkZ2UpCisgICAgdm9pZCBzaGlmdE1heFhFZGdlVG8o
TGF5b3V0VW5pdCBlZGdlKQogICAgIHsKLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZGVs
dGEgPSBlZGdlIC0gbWF4WCgpOwotICAgICAgICBzZXRXaWR0aChzdGQ6Om1heDxGcmFjdGlvbmFs
TGF5b3V0VW5pdD4oMCwgd2lkdGgoKSArIGRlbHRhKSk7CisgICAgICAgIExheW91dFVuaXQgZGVs
dGEgPSBlZGdlIC0gbWF4WCgpOworICAgICAgICBzZXRXaWR0aChzdGQ6Om1heDxMYXlvdXRVbml0
PigwLCB3aWR0aCgpICsgZGVsdGEpKTsKICAgICB9Ci0gICAgdm9pZCBzaGlmdFlFZGdlVG8oRnJh
Y3Rpb25hbExheW91dFVuaXQgZWRnZSkKKyAgICB2b2lkIHNoaWZ0WUVkZ2VUbyhMYXlvdXRVbml0
IGVkZ2UpCiAgICAgewotICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkZWx0YSA9IGVkZ2Ug
LSB5KCk7CisgICAgICAgIExheW91dFVuaXQgZGVsdGEgPSBlZGdlIC0geSgpOwogICAgICAgICBz
ZXRZKGVkZ2UpOwotICAgICAgICBzZXRIZWlnaHQoc3RkOjptYXg8RnJhY3Rpb25hbExheW91dFVu
aXQ+KDAsIGhlaWdodCgpIC0gZGVsdGEpKTsKKyAgICAgICAgc2V0SGVpZ2h0KHN0ZDo6bWF4PExh
eW91dFVuaXQ+KDAsIGhlaWdodCgpIC0gZGVsdGEpKTsKICAgICB9Ci0gICAgdm9pZCBzaGlmdE1h
eFlFZGdlVG8oRnJhY3Rpb25hbExheW91dFVuaXQgZWRnZSkKKyAgICB2b2lkIHNoaWZ0TWF4WUVk
Z2VUbyhMYXlvdXRVbml0IGVkZ2UpCiAgICAgewotICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBkZWx0YSA9IGVkZ2UgLSBtYXhZKCk7Ci0gICAgICAgIHNldEhlaWdodChzdGQ6Om1heDxGcmFj
dGlvbmFsTGF5b3V0VW5pdD4oMCwgaGVpZ2h0KCkgKyBkZWx0YSkpOworICAgICAgICBMYXlvdXRV
bml0IGRlbHRhID0gZWRnZSAtIG1heFkoKTsKKyAgICAgICAgc2V0SGVpZ2h0KHN0ZDo6bWF4PExh
eW91dFVuaXQ+KDAsIGhlaWdodCgpICsgZGVsdGEpKTsKICAgICB9CiAKLSAgICBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQgbWluWE1pbllDb3JuZXIoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9
IC8vIHR5cGljYWxseSB0b3BMZWZ0Ci0gICAgRnJhY3Rpb25hbExheW91dFBvaW50IG1heFhNaW5Z
Q29ybmVyKCkgY29uc3QgeyByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KG1fbG9jYXRpb24u
eCgpICsgbV9zaXplLndpZHRoKCksIG1fbG9jYXRpb24ueSgpKTsgfSAvLyB0eXBpY2FsbHkgdG9w
UmlnaHQKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbWluWE1heFlDb3JuZXIoKSBjb25zdCB7
IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQobV9sb2NhdGlvbi54KCksIG1fbG9jYXRpb24u
eSgpICsgbV9zaXplLmhlaWdodCgpKTsgfSAvLyB0eXBpY2FsbHkgYm90dG9tTGVmdAotICAgIEZy
YWN0aW9uYWxMYXlvdXRQb2ludCBtYXhYTWF4WUNvcm5lcigpIGNvbnN0IHsgcmV0dXJuIEZyYWN0
aW9uYWxMYXlvdXRQb2ludChtX2xvY2F0aW9uLngoKSArIG1fc2l6ZS53aWR0aCgpLCBtX2xvY2F0
aW9uLnkoKSArIG1fc2l6ZS5oZWlnaHQoKSk7IH0gLy8gdHlwaWNhbGx5IGJvdHRvbVJpZ2h0Cisg
ICAgTGF5b3V0UG9pbnQgbWluWE1pbllDb3JuZXIoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9u
OyB9IC8vIHR5cGljYWxseSB0b3BMZWZ0CisgICAgTGF5b3V0UG9pbnQgbWF4WE1pbllDb3JuZXIo
KSBjb25zdCB7IHJldHVybiBMYXlvdXRQb2ludChtX2xvY2F0aW9uLngoKSArIG1fc2l6ZS53aWR0
aCgpLCBtX2xvY2F0aW9uLnkoKSk7IH0gLy8gdHlwaWNhbGx5IHRvcFJpZ2h0CisgICAgTGF5b3V0
UG9pbnQgbWluWE1heFlDb3JuZXIoKSBjb25zdCB7IHJldHVybiBMYXlvdXRQb2ludChtX2xvY2F0
aW9uLngoKSwgbV9sb2NhdGlvbi55KCkgKyBtX3NpemUuaGVpZ2h0KCkpOyB9IC8vIHR5cGljYWxs
eSBib3R0b21MZWZ0CisgICAgTGF5b3V0UG9pbnQgbWF4WE1heFlDb3JuZXIoKSBjb25zdCB7IHJl
dHVybiBMYXlvdXRQb2ludChtX2xvY2F0aW9uLngoKSArIG1fc2l6ZS53aWR0aCgpLCBtX2xvY2F0
aW9uLnkoKSArIG1fc2l6ZS5oZWlnaHQoKSk7IH0gLy8gdHlwaWNhbGx5IGJvdHRvbVJpZ2h0CiAg
ICAgCi0gICAgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JikgY29u
c3Q7Ci0gICAgYm9vbCBjb250YWlucyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpIGNvbnN0
OworICAgIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CisgICAgYm9v
bCBjb250YWlucyhjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKICAgICAvLyBUaGlzIGNoZWNr
cyB0byBzZWUgaWYgdGhlIHJlY3QgY29udGFpbnMgeCx5IGluIHRoZSB0cmFkaXRpb25hbCBzZW5z
ZS4KICAgICAvLyBFcXVpdmFsZW50IHRvIGNoZWNraW5nIGlmIHRoZSByZWN0IGNvbnRhaW5zIGEg
MXgxIHJlY3QgYmVsb3cgYW5kIHRvIHRoZSByaWdodCBvZiAocHgscHkpLgotICAgIGJvb2wgY29u
dGFpbnMoRnJhY3Rpb25hbExheW91dFVuaXQgcHgsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHB5KSBj
b25zdAorICAgIGJvb2wgY29udGFpbnMoTGF5b3V0VW5pdCBweCwgTGF5b3V0VW5pdCBweSkgY29u
c3QKICAgICAgICAgeyByZXR1cm4gcHggPj0geCgpICYmIHB4IDwgbWF4WCgpICYmIHB5ID49IHko
KSAmJiBweSA8IG1heFkoKTsgfQotICAgIGJvb2wgY29udGFpbnMoY29uc3QgRnJhY3Rpb25hbExh
eW91dFBvaW50JiBwb2ludCkgY29uc3QgeyByZXR1cm4gY29udGFpbnMocG9pbnQueCgpLCBwb2lu
dC55KCkpOyB9CisgICAgYm9vbCBjb250YWlucyhjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpIGNv
bnN0IHsgcmV0dXJuIGNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsgfQogCi0gICAgdm9p
ZCBpbnRlcnNlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKTsKLSAgICB2b2lkIHVuaXRl
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0Jik7Ci0gICAgdm9pZCB1bml0ZUlmTm9uWmVybyhj
b25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpOworICAgIHZvaWQgaW50ZXJzZWN0KGNvbnN0IExh
eW91dFJlY3QmKTsKKyAgICB2b2lkIHVuaXRlKGNvbnN0IExheW91dFJlY3QmKTsKKyAgICB2b2lk
IHVuaXRlSWZOb25aZXJvKGNvbnN0IExheW91dFJlY3QmKTsKIAotICAgIHZvaWQgaW5mbGF0ZVgo
RnJhY3Rpb25hbExheW91dFVuaXQgZHgpCisgICAgdm9pZCBpbmZsYXRlWChMYXlvdXRVbml0IGR4
KQogICAgIHsKICAgICAgICAgbV9sb2NhdGlvbi5zZXRYKG1fbG9jYXRpb24ueCgpIC0gZHgpOwog
ICAgICAgICBtX3NpemUuc2V0V2lkdGgobV9zaXplLndpZHRoKCkgKyBkeCArIGR4KTsKICAgICB9
Ci0gICAgdm9pZCBpbmZsYXRlWShGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeSkKKyAgICB2b2lkIGlu
ZmxhdGVZKExheW91dFVuaXQgZHkpCiAgICAgewogICAgICAgICBtX2xvY2F0aW9uLnNldFkobV9s
b2NhdGlvbi55KCkgLSBkeSk7CiAgICAgICAgIG1fc2l6ZS5zZXRIZWlnaHQobV9zaXplLmhlaWdo
dCgpICsgZHkgKyBkeSk7CiAgICAgfQotICAgIHZvaWQgaW5mbGF0ZShGcmFjdGlvbmFsTGF5b3V0
VW5pdCBkKSB7IGluZmxhdGVYKGQpOyBpbmZsYXRlWShkKTsgfQorICAgIHZvaWQgaW5mbGF0ZShM
YXlvdXRVbml0IGQpIHsgaW5mbGF0ZVgoZCk7IGluZmxhdGVZKGQpOyB9CiAgICAgdm9pZCBzY2Fs
ZShmbG9hdCBzKTsKIAotICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0IHRyYW5zcG9zZWRSZWN0KCkg
Y29uc3QgeyByZXR1cm4gRnJhY3Rpb25hbExheW91dFJlY3QobV9sb2NhdGlvbi50cmFuc3Bvc2Vk
UG9pbnQoKSwgbV9zaXplLnRyYW5zcG9zZWRTaXplKCkpOyB9CisgICAgTGF5b3V0UmVjdCB0cmFu
c3Bvc2VkUmVjdCgpIGNvbnN0IHsgcmV0dXJuIExheW91dFJlY3QobV9sb2NhdGlvbi50cmFuc3Bv
c2VkUG9pbnQoKSwgbV9zaXplLnRyYW5zcG9zZWRTaXplKCkpOyB9CiAKLSAgICBzdGF0aWMgRnJh
Y3Rpb25hbExheW91dFJlY3QgaW5maW5pdGVSZWN0KCkKKyAgICBzdGF0aWMgTGF5b3V0UmVjdCBp
bmZpbml0ZVJlY3QoKQogICAgIHsKICAgICAgICAgLy8gUmV0dXJuIGEgcmVjdCB0aGF0IGlzIHNs
aWdodGx5IHNtYWxsZXIgdGhhbiB0aGUgdHJ1ZSBtYXggcmVjdCB0byBhbGxvdyBwaXhlbFNuYXBw
aW5nIHRvIHJvdW5kIHVwIHRvIHRoZSBuZWFyZXN0IEludFJlY3Qgd2l0aG91dCBvdmVyZmxvd2lu
Zy4KLSAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRSZWN0KEZyYWN0aW9uYWxMYXlvdXRV
bml0OjpuZWFybHlNaW4oKSAvIDIsIEZyYWN0aW9uYWxMYXlvdXRVbml0OjpuZWFybHlNaW4oKSAv
IDIsIEZyYWN0aW9uYWxMYXlvdXRVbml0OjpuZWFybHlNYXgoKSwgRnJhY3Rpb25hbExheW91dFVu
aXQ6Om5lYXJseU1heCgpKTsKKyAgICAgICAgcmV0dXJuIExheW91dFJlY3QoTGF5b3V0VW5pdDo6
bmVhcmx5TWluKCkgLyAyLCBMYXlvdXRVbml0OjpuZWFybHlNaW4oKSAvIDIsIExheW91dFVuaXQ6
Om5lYXJseU1heCgpLCBMYXlvdXRVbml0OjpuZWFybHlNYXgoKSk7CiAgICAgfQogCiAjaWYgUExB
VEZPUk0oUVQpCi0gICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgUVJlY3Qm
KTsKLSAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBRUmVjdEYmKTsKKyAg
ICBleHBsaWNpdCBMYXlvdXRSZWN0KGNvbnN0IFFSZWN0Jik7CisgICAgZXhwbGljaXQgTGF5b3V0
UmVjdChjb25zdCBRUmVjdEYmKTsKICAgICBvcGVyYXRvciBRUmVjdEYoKSBjb25zdDsKICNlbmRp
ZgogCiBwcml2YXRlOgotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBtX2xvY2F0aW9uOwotICAg
IEZyYWN0aW9uYWxMYXlvdXRTaXplIG1fc2l6ZTsKKyAgICBMYXlvdXRQb2ludCBtX2xvY2F0aW9u
OworICAgIExheW91dFNpemUgbV9zaXplOwogfTsKIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRS
ZWN0IGludGVyc2VjdGlvbihjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFJlY3QmIGIpCitpbmxpbmUgTGF5b3V0UmVjdCBpbnRlcnNlY3Rpb24oY29u
c3QgTGF5b3V0UmVjdCYgYSwgY29uc3QgTGF5b3V0UmVjdCYgYikKIHsKLSAgICBGcmFjdGlvbmFs
TGF5b3V0UmVjdCBjID0gYTsKKyAgICBMYXlvdXRSZWN0IGMgPSBhOwogICAgIGMuaW50ZXJzZWN0
KGIpOwogICAgIHJldHVybiBjOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFJlY3QgdW5p
b25SZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0UmVjdCYgYikKK2lubGluZSBMYXlvdXRSZWN0IHVuaW9uUmVjdChjb25zdCBMYXlvdXRSZWN0
JiBhLCBjb25zdCBMYXlvdXRSZWN0JiBiKQogewotICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0IGMg
PSBhOworICAgIExheW91dFJlY3QgYyA9IGE7CiAgICAgYy51bml0ZShiKTsKICAgICByZXR1cm4g
YzsKIH0KIAotRnJhY3Rpb25hbExheW91dFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxGcmFj
dGlvbmFsTGF5b3V0UmVjdD4mKTsKK0xheW91dFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxM
YXlvdXRSZWN0PiYpOwogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRSZWN0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYikKK2lubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgTGF5b3V0UmVjdCYgYSwgY29uc3QgTGF5b3V0UmVjdCYgYikKIHsK
ICAgICByZXR1cm4gYS5sb2NhdGlvbigpID09IGIubG9jYXRpb24oKSAmJiBhLnNpemUoKSA9PSBi
LnNpemUoKTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5
b3V0UmVjdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGIpCitpbmxpbmUgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IExheW91dFJlY3QmIGEsIGNvbnN0IExheW91dFJlY3QmIGIpCiB7CiAg
ICAgcmV0dXJuIGEubG9jYXRpb24oKSAhPSBiLmxvY2F0aW9uKCkgfHwgYS5zaXplKCkgIT0gYi5z
aXplKCk7CiB9CiAKLWlubGluZSBJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3QoY29uc3QgRnJh
Y3Rpb25hbExheW91dFJlY3QmIHJlY3QpCitpbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRS
ZWN0KGNvbnN0IExheW91dFJlY3QmIHJlY3QpCiB7CiAjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9V
VCkKICAgICByZXR1cm4gSW50UmVjdChyb3VuZGVkSW50UG9pbnQocmVjdC5sb2NhdGlvbigpKSwg
SW50U2l6ZShzbmFwU2l6ZVRvUGl4ZWwocmVjdC53aWR0aCgpLCByZWN0LngoKSksCkBAIC0yMTks
OSArMjE5LDI1IEBAIGlubGluZSBJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3QoY29uc3QKICNl
bmRpZgogfQogCi1JbnRSZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91
dFJlY3QmKTsKLUZyYWN0aW9uYWxMYXlvdXRSZWN0IGVuY2xvc2luZ0ZyYWN0aW9uYWxMYXlvdXRS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworSW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IExh
eW91dFJlY3QmKTsKK0xheW91dFJlY3QgZW5jbG9zaW5nTGF5b3V0UmVjdChjb25zdCBGbG9hdFJl
Y3QmKTsKKworCitpbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0KExheW91dFVuaXQg
bGVmdCwgTGF5b3V0VW5pdCB0b3AsIExheW91dFVuaXQgd2lkdGgsIExheW91dFVuaXQgaGVpZ2h0
KQoreworICAgIHJldHVybiBJbnRSZWN0KGxlZnQucm91bmQoKSwgdG9wLnJvdW5kKCksIHNuYXBT
aXplVG9QaXhlbCh3aWR0aCwgbGVmdCksIHNuYXBTaXplVG9QaXhlbChoZWlnaHQsIHRvcCkpOwor
fQorCitpbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0RnJvbUVkZ2VzKExheW91dFVu
aXQgbGVmdCwgTGF5b3V0VW5pdCB0b3AsIExheW91dFVuaXQgcmlnaHQsIExheW91dFVuaXQgYm90
dG9tKQoreworICAgIHJldHVybiBJbnRSZWN0KGxlZnQucm91bmQoKSwgdG9wLnJvdW5kKCksIHNu
YXBTaXplVG9QaXhlbChyaWdodCAtIGxlZnQsIGxlZnQpLCBzbmFwU2l6ZVRvUGl4ZWwoYm90dG9t
IC0gdG9wLCB0b3ApKTsKK30KKworaW5saW5lIEludFJlY3QgcGl4ZWxTbmFwcGVkSW50UmVjdChM
YXlvdXRQb2ludCBsb2NhdGlvbiwgTGF5b3V0U2l6ZSBzaXplKQoreworICAgIHJldHVybiBJbnRS
ZWN0KHJvdW5kZWRJbnRQb2ludChsb2NhdGlvbiksIHBpeGVsU25hcHBlZEludFNpemUoc2l6ZSwg
bG9jYXRpb24pKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRnJh
Y3Rpb25hbExheW91dFJlY3RfaAorI2VuZGlmIC8vIExheW91dFJlY3RfaApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0U2l6ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFNpemUuaAkocmV2aXNpb24gMTMz
NTE3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5
b3V0U2l6ZS5oOjEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xh
eW91dFNpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIENvcHly
aWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZyYWN0
aW9uYWxMYXlvdXRTaXplX2gKKyNkZWZpbmUgRnJhY3Rpb25hbExheW91dFNpemVfaAorCisjaW5j
bHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFVuaXQuaCIKKyNp
bmNsdWRlICJJbnRTaXplLmgiCisKKyNpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlIDxxZ2xvYmFs
Lmg+CitRVF9CRUdJTl9OQU1FU1BBQ0UKK2NsYXNzIFFTaXplOworY2xhc3MgUVNpemVGOworUVRf
RU5EX05BTUVTUEFDRQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRnJh
Y3Rpb25hbExheW91dFBvaW50OworCitjbGFzcyBGcmFjdGlvbmFsTGF5b3V0U2l6ZSB7CitwdWJs
aWM6CisgICAgRnJhY3Rpb25hbExheW91dFNpemUoKSA6IG1fd2lkdGgoMCksIG1faGVpZ2h0KDAp
IHsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpIDogbV93
aWR0aChzaXplLndpZHRoKCkpLCBtX2hlaWdodChzaXplLmhlaWdodCgpKSB7IH0KKyAgICBGcmFj
dGlvbmFsTGF5b3V0U2l6ZShGcmFjdGlvbmFsTGF5b3V0VW5pdCB3aWR0aCwgRnJhY3Rpb25hbExh
eW91dFVuaXQgaGVpZ2h0KSA6IG1fd2lkdGgod2lkdGgpLCBtX2hlaWdodChoZWlnaHQpIHsgfQor
CisgICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXpl
KSA6IG1fd2lkdGgoc2l6ZS53aWR0aCgpKSwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkgeyB9Cisg
ICAgCisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dp
ZHRoOyB9CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4g
bV9oZWlnaHQ7IH0KKworICAgIHZvaWQgc2V0V2lkdGgoRnJhY3Rpb25hbExheW91dFVuaXQgd2lk
dGgpIHsgbV93aWR0aCA9IHdpZHRoOyB9CisgICAgdm9pZCBzZXRIZWlnaHQoRnJhY3Rpb25hbExh
eW91dFVuaXQgaGVpZ2h0KSB7IG1faGVpZ2h0ID0gaGVpZ2h0OyB9CisKKyAgICBib29sIGlzRW1w
dHkoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoIDw9IDAgfHwgbV9oZWlnaHQgPD0gMDsgfQorICAg
IGJvb2wgaXNaZXJvKCkgY29uc3QgeyByZXR1cm4gIW1fd2lkdGggJiYgIW1faGVpZ2h0OyB9CisK
KyAgICBmbG9hdCBhc3BlY3RSYXRpbygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0
PihtX3dpZHRoKSAvIHN0YXRpY19jYXN0PGZsb2F0PihtX2hlaWdodCk7IH0KKyAgICAKKyAgICB2
b2lkIGV4cGFuZChGcmFjdGlvbmFsTGF5b3V0VW5pdCB3aWR0aCwgRnJhY3Rpb25hbExheW91dFVu
aXQgaGVpZ2h0KQorICAgIHsKKyAgICAgICAgbV93aWR0aCArPSB3aWR0aDsKKyAgICAgICAgbV9o
ZWlnaHQgKz0gaGVpZ2h0OworICAgIH0KKyAgICAKKyAgICB2b2lkIHNjYWxlKGZsb2F0IHNjYWxl
KQorICAgIHsKKyAgICAgICAgbV93aWR0aCAqPSBzY2FsZTsKKyAgICAgICAgbV9oZWlnaHQgKj0g
c2NhbGU7CisgICAgfQorCisgICAgdm9pZCBzY2FsZShmbG9hdCB3aWR0aFNjYWxlLCBmbG9hdCBo
ZWlnaHRTY2FsZSkKKyAgICB7CisgICAgICAgIG1fd2lkdGggKj0gd2lkdGhTY2FsZTsKKyAgICAg
ICAgbV9oZWlnaHQgKj0gaGVpZ2h0U2NhbGU7CisgICAgfQorICAgIAorICAgIEZyYWN0aW9uYWxM
YXlvdXRTaXplIGV4cGFuZGVkVG8oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKG1fd2lkdGgg
PiBvdGhlci5tX3dpZHRoID8gbV93aWR0aCA6IG90aGVyLm1fd2lkdGgsCisgICAgICAgICAgICBt
X2hlaWdodCA+IG90aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdodCk7Cisg
ICAgfQorCisgICAgRnJhY3Rpb25hbExheW91dFNpemUgc2hydW5rVG8oY29uc3QgRnJhY3Rpb25h
bExheW91dFNpemUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEZyYWN0aW9u
YWxMYXlvdXRTaXplKG1fd2lkdGggPCBvdGhlci5tX3dpZHRoID8gbV93aWR0aCA6IG90aGVyLm1f
d2lkdGgsCisgICAgICAgICAgICBtX2hlaWdodCA8IG90aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQg
OiBvdGhlci5tX2hlaWdodCk7CisgICAgfQorCisgICAgdm9pZCBjbGFtcE5lZ2F0aXZlVG9aZXJv
KCkKKyAgICB7CisgICAgICAgICp0aGlzID0gZXhwYW5kZWRUbyhGcmFjdGlvbmFsTGF5b3V0U2l6
ZSgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGFtcFRvTWluaW11bVNpemUoY29uc3QgRnJh
Y3Rpb25hbExheW91dFNpemUmIG1pbmltdW1TaXplKQorICAgIHsKKyAgICAgICAgaWYgKG1fd2lk
dGggPCBtaW5pbXVtU2l6ZS53aWR0aCgpKQorICAgICAgICAgICAgbV93aWR0aCA9IG1pbmltdW1T
aXplLndpZHRoKCk7CisgICAgICAgIGlmIChtX2hlaWdodCA8IG1pbmltdW1TaXplLmhlaWdodCgp
KQorICAgICAgICAgICAgbV9oZWlnaHQgPSBtaW5pbXVtU2l6ZS5oZWlnaHQoKTsKKyAgICB9CisK
KyAgICBGcmFjdGlvbmFsTGF5b3V0U2l6ZSB0cmFuc3Bvc2VkU2l6ZSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUobV9oZWlnaHQsIG1fd2lkdGgpOwor
ICAgIH0KKworI2lmIFBMQVRGT1JNKFFUKQorICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRT
aXplKGNvbnN0IFFTaXplJik7CisgICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFNpemUoY29u
c3QgUVNpemVGJik7CisgICAgb3BlcmF0b3IgUVNpemVGKCkgY29uc3Q7CisjZW5kaWYKKworcHJp
dmF0ZToKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtX3dpZHRoLCBtX2hlaWdodDsKK307CisK
K2lubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgb3BlcmF0b3IrPShGcmFjdGlvbmFsTGF5b3V0
U2l6ZSYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCit7CisgICAgYS5zZXRXaWR0
aChhLndpZHRoKCkgKyBiLndpZHRoKCkpOworICAgIGEuc2V0SGVpZ2h0KGEuaGVpZ2h0KCkgKyBi
LmhlaWdodCgpKTsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRT
aXplJiBvcGVyYXRvci09KEZyYWN0aW9uYWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0U2l6ZSYgYikKK3sKKyAgICBhLnNldFdpZHRoKGEud2lkdGgoKSAtIGIud2lkdGgoKSk7
CisgICAgYS5zZXRIZWlnaHQoYS5oZWlnaHQoKSAtIGIuaGVpZ2h0KCkpOworICAgIHJldHVybiBh
OworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFNpemUgb3BlcmF0b3IrKGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK3sKKyAg
ICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUoYS53aWR0aCgpICsgYi53aWR0aCgpLCBhLmhl
aWdodCgpICsgYi5oZWlnaHQoKSk7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSBv
cGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGEsIGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRTaXplJiBiKQoreworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShhLndpZHRo
KCkgLSBiLndpZHRoKCksIGEuaGVpZ2h0KCkgLSBiLmhlaWdodCgpKTsKK30KKworaW5saW5lIEZy
YWN0aW9uYWxMYXlvdXRTaXplIG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYg
c2l6ZSkKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUoLXNpemUud2lkdGgoKSwg
LXNpemUuaGVpZ2h0KCkpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK3sKKyAg
ICByZXR1cm4gYS53aWR0aCgpID09IGIud2lkdGgoKSAmJiBhLmhlaWdodCgpID09IGIuaGVpZ2h0
KCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJhY3Rpb25hbExheW91dFNp
emUmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQoreworICAgIHJldHVybiBhLndp
ZHRoKCkgIT0gYi53aWR0aCgpIHx8IGEuaGVpZ2h0KCkgIT0gYi5oZWlnaHQoKTsKK30KKworaW5s
aW5lIEludFNpemUgZmxvb3JlZEludFNpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHMp
Cit7CisgICAgcmV0dXJuIEludFNpemUocy53aWR0aCgpLmZsb29yKCksIHMuaGVpZ2h0KCkuZmxv
b3IoKSk7Cit9CisKK2lubGluZSBJbnRTaXplIHJvdW5kZWRJbnRTaXplKGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRTaXplJiBzKQoreworICAgIHJldHVybiBJbnRTaXplKHMud2lkdGgoKS5yb3VuZCgp
LCBzLmhlaWdodCgpLnJvdW5kKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBGcmFjdGlvbmFsTGF5b3V0U2l6ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9MYXlvdXRTaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0U2l6ZS5oCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRTaXplLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDEyICsyOCwxMiBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEZyYWN0
aW9uYWxMYXlvdXRTaXplX2gKLSNkZWZpbmUgRnJhY3Rpb25hbExheW91dFNpemVfaAorI2lmbmRl
ZiBMYXlvdXRTaXplX2gKKyNkZWZpbmUgTGF5b3V0U2l6ZV9oCiAKICNpbmNsdWRlICJGbG9hdFNp
emUuaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0VW5pdC5oIgogI2luY2x1ZGUgIkludFNp
emUuaCIKKyNpbmNsdWRlICJMYXlvdXRVbml0LmgiCiAKICNpZiBQTEFURk9STShRVCkKICNpbmNs
dWRlIDxxZ2xvYmFsLmg+CkBAIC00NSwyOCArNDUsMjggQEAgUVRfRU5EX05BTUVTUEFDRQogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRQb2ludDsKK2NsYXNz
IExheW91dFBvaW50OwogCi1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0U2l6ZSB7CitjbGFzcyBMYXlv
dXRTaXplIHsKIHB1YmxpYzoKLSAgICBGcmFjdGlvbmFsTGF5b3V0U2l6ZSgpIDogbV93aWR0aCgw
KSwgbV9oZWlnaHQoMCkgeyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFNpemUoY29uc3QgSW50U2l6
ZSYgc2l6ZSkgOiBtX3dpZHRoKHNpemUud2lkdGgoKSksIG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkp
IHsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplKEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRo
LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBoZWlnaHQpIDogbV93aWR0aCh3aWR0aCksIG1faGVpZ2h0
KGhlaWdodCkgeyB9CisgICAgTGF5b3V0U2l6ZSgpIDogbV93aWR0aCgwKSwgbV9oZWlnaHQoMCkg
eyB9CisgICAgTGF5b3V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKSA6IG1fd2lkdGgoc2l6ZS53
aWR0aCgpKSwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkgeyB9CisgICAgTGF5b3V0U2l6ZShMYXlv
dXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IGhlaWdodCkgOiBtX3dpZHRoKHdpZHRoKSwgbV9oZWln
aHQoaGVpZ2h0KSB7IH0KIAotICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSkgOiBtX3dpZHRoKHNpemUud2lkdGgoKSksIG1faGVpZ2h0KHNpemUu
aGVpZ2h0KCkpIHsgfQorICAgIGV4cGxpY2l0IExheW91dFNpemUoY29uc3QgRmxvYXRTaXplJiBz
aXplKSA6IG1fd2lkdGgoc2l6ZS53aWR0aCgpKSwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkgeyB9
CiAgICAgCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBt
X3dpZHRoOyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1
cm4gbV9oZWlnaHQ7IH0KKyAgICBMYXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93
aWR0aDsgfQorICAgIExheW91dFVuaXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7
IH0KIAotICAgIHZvaWQgc2V0V2lkdGgoRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgpIHsgbV93
aWR0aCA9IHdpZHRoOyB9Ci0gICAgdm9pZCBzZXRIZWlnaHQoRnJhY3Rpb25hbExheW91dFVuaXQg
aGVpZ2h0KSB7IG1faGVpZ2h0ID0gaGVpZ2h0OyB9CisgICAgdm9pZCBzZXRXaWR0aChMYXlvdXRV
bml0IHdpZHRoKSB7IG1fd2lkdGggPSB3aWR0aDsgfQorICAgIHZvaWQgc2V0SGVpZ2h0KExheW91
dFVuaXQgaGVpZ2h0KSB7IG1faGVpZ2h0ID0gaGVpZ2h0OyB9CiAKICAgICBib29sIGlzRW1wdHko
KSBjb25zdCB7IHJldHVybiBtX3dpZHRoIDw9IDAgfHwgbV9oZWlnaHQgPD0gMDsgfQogICAgIGJv
b2wgaXNaZXJvKCkgY29uc3QgeyByZXR1cm4gIW1fd2lkdGggJiYgIW1faGVpZ2h0OyB9CiAKICAg
ICBmbG9hdCBhc3BlY3RSYXRpbygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Piht
X3dpZHRoKSAvIHN0YXRpY19jYXN0PGZsb2F0PihtX2hlaWdodCk7IH0KICAgICAKLSAgICB2b2lk
IGV4cGFuZChGcmFjdGlvbmFsTGF5b3V0VW5pdCB3aWR0aCwgRnJhY3Rpb25hbExheW91dFVuaXQg
aGVpZ2h0KQorICAgIHZvaWQgZXhwYW5kKExheW91dFVuaXQgd2lkdGgsIExheW91dFVuaXQgaGVp
Z2h0KQogICAgIHsKICAgICAgICAgbV93aWR0aCArPSB3aWR0aDsKICAgICAgICAgbV9oZWlnaHQg
Kz0gaGVpZ2h0OwpAQCAtODQsMjQgKzg0LDI0IEBAIHB1YmxpYzoKICAgICAgICAgbV9oZWlnaHQg
Kj0gaGVpZ2h0U2NhbGU7CiAgICAgfQogICAgIAotICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplIGV4
cGFuZGVkVG8oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIG90aGVyKSBjb25zdAorICAgIExh
eW91dFNpemUgZXhwYW5kZWRUbyhjb25zdCBMYXlvdXRTaXplJiBvdGhlcikgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShtX3dpZHRoID4gb3RoZXIubV93
aWR0aCA/IG1fd2lkdGggOiBvdGhlci5tX3dpZHRoLAorICAgICAgICByZXR1cm4gTGF5b3V0U2l6
ZShtX3dpZHRoID4gb3RoZXIubV93aWR0aCA/IG1fd2lkdGggOiBvdGhlci5tX3dpZHRoLAogICAg
ICAgICAgICAgbV9oZWlnaHQgPiBvdGhlci5tX2hlaWdodCA/IG1faGVpZ2h0IDogb3RoZXIubV9o
ZWlnaHQpOwogICAgIH0KIAotICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplIHNocnVua1RvKGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBvdGhlcikgY29uc3QKKyAgICBMYXlvdXRTaXplIHNocnVu
a1RvKGNvbnN0IExheW91dFNpemUmIG90aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJu
IEZyYWN0aW9uYWxMYXlvdXRTaXplKG1fd2lkdGggPCBvdGhlci5tX3dpZHRoID8gbV93aWR0aCA6
IG90aGVyLm1fd2lkdGgsCisgICAgICAgIHJldHVybiBMYXlvdXRTaXplKG1fd2lkdGggPCBvdGhl
ci5tX3dpZHRoID8gbV93aWR0aCA6IG90aGVyLm1fd2lkdGgsCiAgICAgICAgICAgICBtX2hlaWdo
dCA8IG90aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdodCk7CiAgICAgfQog
CiAgICAgdm9pZCBjbGFtcE5lZ2F0aXZlVG9aZXJvKCkKICAgICB7Ci0gICAgICAgICp0aGlzID0g
ZXhwYW5kZWRUbyhGcmFjdGlvbmFsTGF5b3V0U2l6ZSgpKTsKKyAgICAgICAgKnRoaXMgPSBleHBh
bmRlZFRvKExheW91dFNpemUoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY2xhbXBUb01pbmlt
dW1TaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBtaW5pbXVtU2l6ZSkKKyAgICB2b2lk
IGNsYW1wVG9NaW5pbXVtU2l6ZShjb25zdCBMYXlvdXRTaXplJiBtaW5pbXVtU2l6ZSkKICAgICB7
CiAgICAgICAgIGlmIChtX3dpZHRoIDwgbWluaW11bVNpemUud2lkdGgoKSkKICAgICAgICAgICAg
IG1fd2lkdGggPSBtaW5pbXVtU2l6ZS53aWR0aCgpOwpAQCAtMTA5LDcwICsxMDksNzkgQEAgcHVi
bGljOgogICAgICAgICAgICAgbV9oZWlnaHQgPSBtaW5pbXVtU2l6ZS5oZWlnaHQoKTsKICAgICB9
CiAKLSAgICBGcmFjdGlvbmFsTGF5b3V0U2l6ZSB0cmFuc3Bvc2VkU2l6ZSgpIGNvbnN0CisgICAg
TGF5b3V0U2l6ZSB0cmFuc3Bvc2VkU2l6ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFNpemUobV9oZWlnaHQsIG1fd2lkdGgpOworICAgICAgICByZXR1cm4g
TGF5b3V0U2l6ZShtX2hlaWdodCwgbV93aWR0aCk7CiAgICAgfQogCiAjaWYgUExBVEZPUk0oUVQp
Ci0gICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFNpemUoY29uc3QgUVNpemUmKTsKLSAgICBl
eHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZShjb25zdCBRU2l6ZUYmKTsKKyAgICBleHBsaWNp
dCBMYXlvdXRTaXplKGNvbnN0IFFTaXplJik7CisgICAgZXhwbGljaXQgTGF5b3V0U2l6ZShjb25z
dCBRU2l6ZUYmKTsKICAgICBvcGVyYXRvciBRU2l6ZUYoKSBjb25zdDsKICNlbmRpZgogCiBwcml2
YXRlOgotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1fd2lkdGgsIG1faGVpZ2h0OworICAgIExh
eW91dFVuaXQgbV93aWR0aCwgbV9oZWlnaHQ7CiB9OwogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91
dFNpemUmIG9wZXJhdG9yKz0oRnJhY3Rpb25hbExheW91dFNpemUmIGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRTaXplJiBiKQoraW5saW5lIExheW91dFNpemUmIG9wZXJhdG9yKz0oTGF5b3V0U2l6
ZSYgYSwgY29uc3QgTGF5b3V0U2l6ZSYgYikKIHsKICAgICBhLnNldFdpZHRoKGEud2lkdGgoKSAr
IGIud2lkdGgoKSk7CiAgICAgYS5zZXRIZWlnaHQoYS5oZWlnaHQoKSArIGIuaGVpZ2h0KCkpOwog
ICAgIHJldHVybiBhOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFNpemUmIG9wZXJhdG9y
LT0oRnJhY3Rpb25hbExheW91dFNpemUmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBi
KQoraW5saW5lIExheW91dFNpemUmIG9wZXJhdG9yLT0oTGF5b3V0U2l6ZSYgYSwgY29uc3QgTGF5
b3V0U2l6ZSYgYikKIHsKICAgICBhLnNldFdpZHRoKGEud2lkdGgoKSAtIGIud2lkdGgoKSk7CiAg
ICAgYS5zZXRIZWlnaHQoYS5oZWlnaHQoKSAtIGIuaGVpZ2h0KCkpOwogICAgIHJldHVybiBhOwog
fQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFNpemUgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK2lubGluZSBM
YXlvdXRTaXplIG9wZXJhdG9yKyhjb25zdCBMYXlvdXRTaXplJiBhLCBjb25zdCBMYXlvdXRTaXpl
JiBiKQogewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShhLndpZHRoKCkgKyBiLndp
ZHRoKCksIGEuaGVpZ2h0KCkgKyBiLmhlaWdodCgpKTsKKyAgICByZXR1cm4gTGF5b3V0U2l6ZShh
LndpZHRoKCkgKyBiLndpZHRoKCksIGEuaGVpZ2h0KCkgKyBiLmhlaWdodCgpKTsKIH0KIAotaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplIG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0
U2l6ZSYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCitpbmxpbmUgTGF5b3V0U2l6
ZSBvcGVyYXRvci0oY29uc3QgTGF5b3V0U2l6ZSYgYSwgY29uc3QgTGF5b3V0U2l6ZSYgYikKIHsK
LSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUoYS53aWR0aCgpIC0gYi53aWR0aCgpLCBh
LmhlaWdodCgpIC0gYi5oZWlnaHQoKSk7CisgICAgcmV0dXJuIExheW91dFNpemUoYS53aWR0aCgp
IC0gYi53aWR0aCgpLCBhLmhlaWdodCgpIC0gYi5oZWlnaHQoKSk7CiB9CiAKLWlubGluZSBGcmFj
dGlvbmFsTGF5b3V0U2l6ZSBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNp
emUpCitpbmxpbmUgTGF5b3V0U2l6ZSBvcGVyYXRvci0oY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkK
IHsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUoLXNpemUud2lkdGgoKSwgLXNpemUu
aGVpZ2h0KCkpOworICAgIHJldHVybiBMYXlvdXRTaXplKC1zaXplLndpZHRoKCksIC1zaXplLmhl
aWdodCgpKTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFsTGF5
b3V0U2l6ZSYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCitpbmxpbmUgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IExheW91dFNpemUmIGEsIGNvbnN0IExheW91dFNpemUmIGIpCiB7CiAg
ICAgcmV0dXJuIGEud2lkdGgoKSA9PSBiLndpZHRoKCkgJiYgYS5oZWlnaHQoKSA9PSBiLmhlaWdo
dCgpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRT
aXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK2lubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgTGF5b3V0U2l6ZSYgYSwgY29uc3QgTGF5b3V0U2l6ZSYgYikKIHsKICAgICBy
ZXR1cm4gYS53aWR0aCgpICE9IGIud2lkdGgoKSB8fCBhLmhlaWdodCgpICE9IGIuaGVpZ2h0KCk7
CiB9CiAKLWlubGluZSBJbnRTaXplIGZsb29yZWRJbnRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRTaXplJiBzKQoraW5saW5lIEludFNpemUgZmxvb3JlZEludFNpemUoY29uc3QgTGF5b3V0U2l6
ZSYgcykKIHsKICAgICByZXR1cm4gSW50U2l6ZShzLndpZHRoKCkuZmxvb3IoKSwgcy5oZWlnaHQo
KS5mbG9vcigpKTsKIH0KIAotaW5saW5lIEludFNpemUgcm91bmRlZEludFNpemUoY29uc3QgRnJh
Y3Rpb25hbExheW91dFNpemUmIHMpCitpbmxpbmUgSW50U2l6ZSByb3VuZGVkSW50U2l6ZShjb25z
dCBMYXlvdXRTaXplJiBzKQogewogICAgIHJldHVybiBJbnRTaXplKHMud2lkdGgoKS5yb3VuZCgp
LCBzLmhlaWdodCgpLnJvdW5kKCkpOwogfQogCitpbmxpbmUgTGF5b3V0U2l6ZSByb3VuZGVkTGF5
b3V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHMpCit7CisjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9V
VCkKKyAgICByZXR1cm4gTGF5b3V0U2l6ZShzKTsKKyNlbHNlCisgICAgcmV0dXJuIHJvdW5kZWRJ
bnRTaXplKHMpOworI2VuZGlmCit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlm
IC8vIEZyYWN0aW9uYWxMYXlvdXRTaXplX2gKKyNlbmRpZiAvLyBMYXlvdXRTaXplX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAkocmV2
aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQ
bGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogCiAjaW5jbHVkZSAiSW50
UmVjdC5oIgogI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZU1l
dGhvZHMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlck9wZXJh
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgJKHJldmlzaW9uIDEzMzY3NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyT3BlcmF0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJDdXN0b21GaWx0
ZXJQYXJhbWV0ZXJMaXN0LmgiCiAjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oIgogI2lu
Y2x1ZGUgIkZpbHRlck9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5j
bHVkZSAiTGF5b3V0U2l6ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUGFyYW1ldGVy
TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdC5oCShyZXZpc2lvbiAxMzM2NzcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclBhcmFt
ZXRlckxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2RlZmluZSBDdXN0
b21GaWx0ZXJQYXJhbWV0ZXJMaXN0X2gKIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSNpbmNs
dWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFNpemUuaCIKICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRp
b24uaAkocmV2aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAs
NyBAQAogCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNp
bmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFNpemUuaCIKICNpbmNsdWRl
ICJMZW5ndGguaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxMzM2NzcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlv
bnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2lmIEVOQUJMRShDU1NfRklM
VEVSUykKIAogI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIkxheW91dFR5
cGVzLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9WYWxpZGF0
ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9u
LmNwcAkocmV2aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9WYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw3ICszNCw3IEBACiAKICNpbmNsdWRlICJDdXN0b21GaWx0ZXJQYXJhbWV0ZXIu
aCIKICNpbmNsdWRlICJDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmgiCi0jaW5jbHVkZSAi
RnJhY3Rpb25hbExheW91dFNpemUuaCIKKyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCiAjaW5jbHVk
ZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvVmFsaWRhdGVkQ3VzdG9tRmlsdGVy
T3BlcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9WYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uaAkocmV2aXNpb24gMTMz
Njc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9WYWxpZGF0
ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBA
QAogI2luY2x1ZGUgIkN1c3RvbUZpbHRlckNvbnN0YW50cy5oIgogI2luY2x1ZGUgIkN1c3RvbUZp
bHRlclBhcmFtZXRlckxpc3QuaCIKICNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb24uaCIKLSNpbmNs
dWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFNpemUuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9G
cmFjdGlvbmFsTGF5b3V0UG9pbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFBvaW50UXQuY3BwCShyZXZpc2lv
biAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9GcmFjdGlv
bmFsTGF5b3V0UG9pbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDUgKzAsMCBAQAotLyoK
LSAgICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0K
LSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZyYWN0aW9u
YWxMYXlvdXRQb2ludC5oIgotCi0jaW5jbHVkZSA8UVBvaW50PgotI2luY2x1ZGUgPFFQb2ludEY+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRnJhY3Rpb25hbExheW91dFBvaW50OjpGcmFjdGlv
bmFsTGF5b3V0UG9pbnQoY29uc3QgUVBvaW50JiBwb2ludCkKLSAgICA6IG1feChwb2ludC54KCkp
Ci0gICAgLCBtX3kocG9pbnQueSgpKQotewotfQotCi1GcmFjdGlvbmFsTGF5b3V0UG9pbnQ6OkZy
YWN0aW9uYWxMYXlvdXRQb2ludChjb25zdCBRUG9pbnRGJiBwb2ludCkKLSAgICA6IG1feChwb2lu
dC54KCkpCi0gICAgLCBtX3kocG9pbnQueSgpKQotewotfQotCi1GcmFjdGlvbmFsTGF5b3V0UG9p
bnQ6Om9wZXJhdG9yIFFQb2ludEYoKSBjb25zdAotewotICAgIHJldHVybiBRUG9pbnRGKG1feCwg
bV95KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxMYXlvdXRSZWN0UXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxMYXlvdXRSZWN0UXQu
Y3BwCShyZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9GcmFjdGlvbmFsTGF5b3V0UmVjdFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0NSAr
MCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRnJhY3Rpb25hbExheW91dFJlY3QuaCIKLQotI2luY2x1ZGUgPFFSZWN0PgotI2luY2x1ZGUg
PFFSZWN0Rj4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1GcmFjdGlvbmFsTGF5b3V0UmVjdDo6
RnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgUVJlY3QmIHIpCi0gICAgOiBtX2xvY2F0aW9uKHIu
dG9wTGVmdCgpKQotICAgICwgbV9zaXplKHIud2lkdGgoKSwgci5oZWlnaHQoKSkKLXsKLX0KLQot
RnJhY3Rpb25hbExheW91dFJlY3Q6OkZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IFFSZWN0RiYg
cikKLSAgICA6IG1fbG9jYXRpb24oci50b3BMZWZ0KCkpCi0gICAgLCBtX3NpemUoci53aWR0aCgp
LCByLmhlaWdodCgpKQotewotfQotCi1GcmFjdGlvbmFsTGF5b3V0UmVjdDo6b3BlcmF0b3IgUVJl
Y3RGKCkgY29uc3QKLXsKLSAgICByZXR1cm4gUVJlY3RGKHgoKSwgeSgpLCB3aWR0aCgpLCBoZWln
aHQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9GcmFjdGlvbmFsTGF5b3V0U2l6ZVF0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9GcmFjdGlvbmFsTGF5b3V0U2l6ZVF0
LmNwcAkocmV2aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvRnJhY3Rpb25hbExheW91dFNpemVRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDYg
KzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5j
bHVkZSAiRnJhY3Rpb25hbExheW91dFNpemUuaCIKLQotI2luY2x1ZGUgPFFTaXplPgotI2luY2x1
ZGUgPFFTaXplRj4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1GcmFjdGlvbmFsTGF5b3V0U2l6
ZTo6RnJhY3Rpb25hbExheW91dFNpemUoY29uc3QgUVNpemUmIHNpemUpCi0gICAgOiBtX3dpZHRo
KHNpemUud2lkdGgoKSkKLSAgICAsIG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkpCi17Ci19Ci0KLUZy
YWN0aW9uYWxMYXlvdXRTaXplOjpGcmFjdGlvbmFsTGF5b3V0U2l6ZShjb25zdCBRU2l6ZUYmIHNp
emUpCi0gICAgOiBtX3dpZHRoKHNpemUud2lkdGgoKSkKLSAgICAsIG1faGVpZ2h0KHNpemUuaGVp
Z2h0KCkpCi17Ci19Ci0KLUZyYWN0aW9uYWxMYXlvdXRTaXplOjpvcGVyYXRvciBRU2l6ZUYoKSBj
b25zdAotewotICAgIHJldHVybiBRU2l6ZUYod2lkdGgoKSwgaGVpZ2h0KCkpOwotfQotCi19IC8v
IG5hbWVzcGFjZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTGF5
b3V0UG9pbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvTGF5b3V0UG9pbnRRdC5jcHAJKHJldmlzaW9uIDEzMzUxNykJKGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFBvaW50UXQuY3Bw
OjEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0xheW91dFBv
aW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgICAgQ29weXJp
Z2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UG9p
bnQuaCIKKworI2luY2x1ZGUgPFFQb2ludD4KKyNpbmNsdWRlIDxRUG9pbnRGPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0ZyYWN0aW9uYWxMYXlvdXRQb2ludDo6RnJhY3Rpb25hbExheW91dFBv
aW50KGNvbnN0IFFQb2ludCYgcG9pbnQpCisgICAgOiBtX3gocG9pbnQueCgpKQorICAgICwgbV95
KHBvaW50LnkoKSkKK3sKK30KKworRnJhY3Rpb25hbExheW91dFBvaW50OjpGcmFjdGlvbmFsTGF5
b3V0UG9pbnQoY29uc3QgUVBvaW50RiYgcG9pbnQpCisgICAgOiBtX3gocG9pbnQueCgpKQorICAg
ICwgbV95KHBvaW50LnkoKSkKK3sKK30KKworRnJhY3Rpb25hbExheW91dFBvaW50OjpvcGVyYXRv
ciBRUG9pbnRGKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUVBvaW50RihtX3gsIG1feSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9MYXlvdXRQb2ludFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9MYXlvdXRQb2ludFF0LmNwcAkocmV2aXNpb24gMTMzNTE3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTGF5b3V0UG9pbnRRdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE4LDI2ICsxOCwyNiBAQAogKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRQb2ludC5oIgorI2luY2x1ZGUgIkxheW91dFBvaW50
LmgiCiAKICNpbmNsdWRlIDxRUG9pbnQ+CiAjaW5jbHVkZSA8UVBvaW50Rj4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1GcmFjdGlvbmFsTGF5b3V0UG9pbnQ6OkZyYWN0aW9uYWxMYXlvdXRQb2lu
dChjb25zdCBRUG9pbnQmIHBvaW50KQorTGF5b3V0UG9pbnQ6OkxheW91dFBvaW50KGNvbnN0IFFQ
b2ludCYgcG9pbnQpCiAgICAgOiBtX3gocG9pbnQueCgpKQogICAgICwgbV95KHBvaW50LnkoKSkK
IHsKIH0KIAotRnJhY3Rpb25hbExheW91dFBvaW50OjpGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29u
c3QgUVBvaW50RiYgcG9pbnQpCitMYXlvdXRQb2ludDo6TGF5b3V0UG9pbnQoY29uc3QgUVBvaW50
RiYgcG9pbnQpCiAgICAgOiBtX3gocG9pbnQueCgpKQogICAgICwgbV95KHBvaW50LnkoKSkKIHsK
IH0KIAotRnJhY3Rpb25hbExheW91dFBvaW50OjpvcGVyYXRvciBRUG9pbnRGKCkgY29uc3QKK0xh
eW91dFBvaW50OjpvcGVyYXRvciBRUG9pbnRGKCkgY29uc3QKIHsKICAgICByZXR1cm4gUVBvaW50
RihtX3gsIG1feSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9MYXlvdXRSZWN0UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0xheW91dFJlY3RRdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9MYXlvdXRSZWN0UXQuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQ1IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgorCisjaW5jbHVkZSA8UVJlY3Q+CisjaW5jbHVkZSA8
UVJlY3RGPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0xheW91dFJlY3Q6OkxheW91dFJlY3Qo
Y29uc3QgUVJlY3QmIHIpCisgICAgOiBtX2xvY2F0aW9uKHIudG9wTGVmdCgpKQorICAgICwgbV9z
aXplKHIud2lkdGgoKSwgci5oZWlnaHQoKSkKK3sKK30KKworTGF5b3V0UmVjdDo6TGF5b3V0UmVj
dChjb25zdCBRUmVjdEYmIHIpCisgICAgOiBtX2xvY2F0aW9uKHIudG9wTGVmdCgpKQorICAgICwg
bV9zaXplKHIud2lkdGgoKSwgci5oZWlnaHQoKSkKK3sKK30KKworTGF5b3V0UmVjdDo6b3BlcmF0
b3IgUVJlY3RGKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUVJlY3RGKHgoKSwgeSgpLCB3aWR0aCgp
LCBoZWlnaHQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9MYXlvdXRTaXplUXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0xheW91dFNpemVRdC5jcHAJKHJldmlzaW9u
IDEzMzUxNykJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rp
b25hbExheW91dFNpemVRdC5jcHA6MTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvTGF5b3V0U2l6ZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2
IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
ICJGcmFjdGlvbmFsTGF5b3V0U2l6ZS5oIgorCisjaW5jbHVkZSA8UVNpemU+CisjaW5jbHVkZSA8
UVNpemVGPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZyYWN0aW9uYWxMYXlvdXRTaXplOjpG
cmFjdGlvbmFsTGF5b3V0U2l6ZShjb25zdCBRU2l6ZSYgc2l6ZSkKKyAgICA6IG1fd2lkdGgoc2l6
ZS53aWR0aCgpKQorICAgICwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkKK3sKK30KKworRnJhY3Rp
b25hbExheW91dFNpemU6OkZyYWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0IFFTaXplRiYgc2l6ZSkK
KyAgICA6IG1fd2lkdGgoc2l6ZS53aWR0aCgpKQorICAgICwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQo
KSkKK3sKK30KKworRnJhY3Rpb25hbExheW91dFNpemU6Om9wZXJhdG9yIFFTaXplRigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIFFTaXplRih3aWR0aCgpLCBoZWlnaHQoKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9MYXlvdXRT
aXplUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0xheW91dFNpemVRdC5jcHAJKHJldmlzaW9uIDEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0xheW91dFNpemVRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5LDI2ICsxOSwyNiBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpbmNsdWRlICJGcmFj
dGlvbmFsTGF5b3V0U2l6ZS5oIgorI2luY2x1ZGUgIkxheW91dFNpemUuaCIKIAogI2luY2x1ZGUg
PFFTaXplPgogI2luY2x1ZGUgPFFTaXplRj4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GcmFj
dGlvbmFsTGF5b3V0U2l6ZTo6RnJhY3Rpb25hbExheW91dFNpemUoY29uc3QgUVNpemUmIHNpemUp
CitMYXlvdXRTaXplOjpMYXlvdXRTaXplKGNvbnN0IFFTaXplJiBzaXplKQogICAgIDogbV93aWR0
aChzaXplLndpZHRoKCkpCiAgICAgLCBtX2hlaWdodChzaXplLmhlaWdodCgpKQogewogfQogCi1G
cmFjdGlvbmFsTGF5b3V0U2l6ZTo6RnJhY3Rpb25hbExheW91dFNpemUoY29uc3QgUVNpemVGJiBz
aXplKQorTGF5b3V0U2l6ZTo6TGF5b3V0U2l6ZShjb25zdCBRU2l6ZUYmIHNpemUpCiAgICAgOiBt
X3dpZHRoKHNpemUud2lkdGgoKSkKICAgICAsIG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkpCiB7CiB9
CiAKLUZyYWN0aW9uYWxMYXlvdXRTaXplOjpvcGVyYXRvciBRU2l6ZUYoKSBjb25zdAorTGF5b3V0
U2l6ZTo6b3BlcmF0b3IgUVNpemVGKCkgY29uc3QKIHsKICAgICByZXR1cm4gUVNpemVGKHdpZHRo
KCksIGhlaWdodCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9ucy5o
CShyZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyAr
MjUsNyBAQAogI2lmbmRlZiBUcmFuc2Zvcm1PcGVyYXRpb25zX2gKICNkZWZpbmUgVHJhbnNmb3Jt
T3BlcmF0aW9uc19oCiAKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91
dFNpemUuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1PcGVyYXRpb24uaCIKICNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3Jt
U3RhdGUuaAkocmV2aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3
ICszMCw3IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5o
IgogI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZU1ldGhv
ZHMuaCIKKyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25N
YXRyaXguaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMv
VHJhbnNmb3JtYXRpb25NYXRyaXguY3BwCShyZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsOCBAQAogI2luY2x1ZGUgIkZsb2F0UG9pbnQz
RC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgotI2lu
Y2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgIkxheW91dFJlY3QuaCIKIAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTYxNywxMCArNjE3LDEwIEBAIEZsb2F0UXVhZCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6cHJvamVjdFEKIHN0YXRpYyBmbG9hdCBjbGFtcEVkZ2VWYWx1
ZShmbG9hdCBmKQogewogICAgIEFTU0VSVCghaXNuYW4oZikpOwotICAgIHJldHVybiBtaW48Zmxv
YXQ+KG1heDxmbG9hdD4oZiwgLUZyYWN0aW9uYWxMYXlvdXRVbml0OjptYXgoKSAvIDIpLCBGcmFj
dGlvbmFsTGF5b3V0VW5pdDo6bWF4KCkgLyAyKTsKKyAgICByZXR1cm4gbWluPGZsb2F0PihtYXg8
ZmxvYXQ+KGYsIC1MYXlvdXRVbml0OjptYXgoKSAvIDIpLCBMYXlvdXRVbml0OjptYXgoKSAvIDIp
OwogfQogCi1GcmFjdGlvbmFsTGF5b3V0UmVjdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6Y2xhbXBl
ZEJvdW5kc09mUHJvamVjdGVkUXVhZChjb25zdCBGbG9hdFF1YWQmIHEpIGNvbnN0CitMYXlvdXRS
ZWN0IFRyYW5zZm9ybWF0aW9uTWF0cml4OjpjbGFtcGVkQm91bmRzT2ZQcm9qZWN0ZWRRdWFkKGNv
bnN0IEZsb2F0UXVhZCYgcSkgY29uc3QKIHsKICAgICBGbG9hdFJlY3QgbWFwcGVkUXVhZEJvdW5k
cyA9IHByb2plY3RRdWFkKHEpLmJvdW5kaW5nQm94KCk7CiAKQEAgLTYyOSwxOCArNjI5LDE3IEBA
IEZyYWN0aW9uYWxMYXlvdXRSZWN0IFRyYW5zZm9ybWF0aW9uTWF0cmkKIAogICAgIGZsb2F0IHJp
Z2h0OwogICAgIGlmIChpc2luZihtYXBwZWRRdWFkQm91bmRzLngoKSkgJiYgaXNpbmYobWFwcGVk
UXVhZEJvdW5kcy53aWR0aCgpKSkKLSAgICAgICAgcmlnaHQgPSBGcmFjdGlvbmFsTGF5b3V0VW5p
dDo6bWF4KCkgLyAyOworICAgICAgICByaWdodCA9IExheW91dFVuaXQ6Om1heCgpIC8gMjsKICAg
ICBlbHNlCiAgICAgICAgIHJpZ2h0ID0gY2xhbXBFZGdlVmFsdWUoY2VpbGYobWFwcGVkUXVhZEJv
dW5kcy5tYXhYKCkpKTsKIAogICAgIGZsb2F0IGJvdHRvbTsKICAgICBpZiAoaXNpbmYobWFwcGVk
UXVhZEJvdW5kcy55KCkpICYmIGlzaW5mKG1hcHBlZFF1YWRCb3VuZHMuaGVpZ2h0KCkpKQotICAg
ICAgICBib3R0b20gPSBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWF4KCkgLyAyOworICAgICAgICBi
b3R0b20gPSBMYXlvdXRVbml0OjptYXgoKSAvIDI7CiAgICAgZWxzZQogICAgICAgICBib3R0b20g
PSBjbGFtcEVkZ2VWYWx1ZShjZWlsZihtYXBwZWRRdWFkQm91bmRzLm1heFkoKSkpOwogCi0gICAg
cmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRSZWN0KEZyYWN0aW9uYWxMYXlvdXRVbml0OjpjbGFtcChs
ZWZ0KSwgRnJhY3Rpb25hbExheW91dFVuaXQ6OmNsYW1wKHRvcCksIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6Y2xhbXAocmlnaHQgLSBsZWZ0
KSwgRnJhY3Rpb25hbExheW91dFVuaXQ6OmNsYW1wKGJvdHRvbSAtIHRvcCkpOworICAgIHJldHVy
biBMYXlvdXRSZWN0KExheW91dFVuaXQ6OmNsYW1wKGxlZnQpLCBMYXlvdXRVbml0OjpjbGFtcCh0
b3ApLCAgTGF5b3V0VW5pdDo6Y2xhbXAocmlnaHQgLSBsZWZ0KSwgTGF5b3V0VW5pdDo6Y2xhbXAo
Ym90dG9tIC0gdG9wKSk7CiB9CiAKIEZsb2F0UG9pbnQgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1h
cFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApIGNvbnN0CkBAIC02NzAsOSArNjY5LDkgQEAgSW50
UmVjdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUmVjdChjbwogICAgIHJldHVybiBlbmNsb3Np
bmdJbnRSZWN0KG1hcFJlY3QoRmxvYXRSZWN0KHJlY3QpKSk7CiB9CiAKLUZyYWN0aW9uYWxMYXlv
dXRSZWN0IFRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRSZWN0JiByKSBjb25zdAorTGF5b3V0UmVjdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUmVj
dChjb25zdCBMYXlvdXRSZWN0JiByKSBjb25zdAogewotICAgIHJldHVybiBlbmNsb3NpbmdGcmFj
dGlvbmFsTGF5b3V0UmVjdChtYXBSZWN0KEZsb2F0UmVjdChyKSkpOworICAgIHJldHVybiBlbmNs
b3NpbmdMYXlvdXRSZWN0KG1hcFJlY3QoRmxvYXRSZWN0KHIpKSk7CiB9CiAKIEZsb2F0UmVjdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9y
bWF0aW9uTWF0cml4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5oCShyZXZpc2lvbiAxMzM2Nzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9y
bWF0aW9uTWF0cml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBJbnRSZWN0OwotY2xh
c3MgRnJhY3Rpb25hbExheW91dFJlY3Q7CitjbGFzcyBMYXlvdXRSZWN0OwogY2xhc3MgRmxvYXRQ
b2ludDNEOwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgRmxvYXRRdWFkOwpAQCAtMTU3LDcgKzE1
Nyw3IEBAIHB1YmxpYzoKICAgICAvLyBSb3VuZHMgdGhlIHJlc3VsdGluZyBtYXBwZWQgcmVjdGFu
Z2xlIG91dC4gVGhpcyBpcyBoZWxwZnVsIGZvciBib3VuZGluZwogICAgIC8vIGJveCBjb21wdXRh
dGlvbnMgYnV0IG1heSBub3QgYmUgd2hhdCBpcyB3YW50ZWQgaW4gb3RoZXIgY29udGV4dHMuCiAg
ICAgSW50UmVjdCBtYXBSZWN0KGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICBGcmFjdGlvbmFs
TGF5b3V0UmVjdCBtYXBSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JikgY29uc3Q7Cisg
ICAgTGF5b3V0UmVjdCBtYXBSZWN0KGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKIAogICAgIC8v
IElmIHRoZSBtYXRyaXggaGFzIDNEIGNvbXBvbmVudHMsIHRoZSB6IGNvbXBvbmVudCBvZiB0aGUg
cmVzdWx0IGlzCiAgICAgLy8gZHJvcHBlZCwgZWZmZWN0aXZlbHkgcHJvamVjdGluZyB0aGUgcXVh
ZCBpbnRvIHRoZSB6PTAgcGxhbmUKQEAgLTE3Myw3ICsxNzMsNyBAQCBwdWJsaWM6CiAgICAgRmxv
YXRRdWFkIHByb2plY3RRdWFkKGNvbnN0IEZsb2F0UXVhZCYsICBib29sKiBjbGFtcGVkID0gMCkg
Y29uc3Q7CiAgICAgLy8gUHJvamVjdHMgdGhlIGZvdXIgY29ybmVycyBvZiB0aGUgcXVhZCBhbmQg
dGFrZXMgYSBib3VuZGluZyBib3gsCiAgICAgLy8gd2hpbGUgc2FuaXRpemluZyB2YWx1ZXMgY3Jl
YXRlZCB3aGVuIHRoZSB3IGNvbXBvbmVudCBpcyBuZWdhdGl2ZS4KLSAgICBGcmFjdGlvbmFsTGF5
b3V0UmVjdCBjbGFtcGVkQm91bmRzT2ZQcm9qZWN0ZWRRdWFkKGNvbnN0IEZsb2F0UXVhZCYpIGNv
bnN0OworICAgIExheW91dFJlY3QgY2xhbXBlZEJvdW5kc09mUHJvamVjdGVkUXVhZChjb25zdCBG
bG9hdFF1YWQmKSBjb25zdDsKIAogICAgIGRvdWJsZSBtMTEoKSBjb25zdCB7IHJldHVybiBtX21h
dHJpeFswXVswXTsgfQogICAgIHZvaWQgc2V0TTExKGRvdWJsZSBmKSB7IG1fbWF0cml4WzBdWzBd
ID0gZjsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQu
aAkocmV2aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJs
ZUxheW91dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAjaWZuZGVmIEF1dG9U
YWJsZUxheW91dF9oCiAjZGVmaW5lIEF1dG9UYWJsZUxheW91dF9oCiAKLSNpbmNsdWRlICJMYXlv
dXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKICNpbmNsdWRlICJMZW5ndGguaCIK
ICNpbmNsdWRlICJUYWJsZUxheW91dC5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db2x1bW5JbmZvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbHVtbkluZm8uaAkocmV2aXNpb24gMTMzNjc3KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbHVtbkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNyArMjYsNyBAQAogI2lmbmRlZiBDb2x1bW5JbmZvX2gKICNkZWZpbmUgQ29sdW1uSW5mb19o
CiAKLSNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJMYXlv
dXRVbml0LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZv
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mby5oCShyZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0
LDcgQEAKIAogI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTGF5
b3V0VW5pdC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTc4LDE0ICs3OCwxNCBAQCBwcml2
YXRlOgogICAgIHsKICAgICAgICAgQVNTRVJUKG1fc2hhcGUpOwogICAgICAgICAvLyBVc2UgZnJv
bUZsb2F0Q2VpbCgpIHRvIGVuc3VyZSB0aGF0IHRoZSByZXR1cm5lZCBMYXlvdXRVbml0IHZhbHVl
IGlzIHdpdGhpbiB0aGUgc2hhcGUncyBib3VuZHMuCi0gICAgICAgIHJldHVybiBGcmFjdGlvbmFs
TGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChtX3NoYXBlLT5zaGFwZUxvZ2ljYWxCb3VuZGluZ0Jv
eCgpLnkoKSk7CisgICAgICAgIHJldHVybiBMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKG1fc2hh
cGUtPnNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkueSgpKTsKICAgICB9CiAKICAgICBpbmxpbmUg
TGF5b3V0VW5pdCBzaGFwZUxvZ2ljYWxCb3VuZHNNYXhZKCkgY29uc3QKICAgICB7CiAgICAgICAg
IEFTU0VSVChtX3NoYXBlKTsKICAgICAgICAgLy8gVXNlIGZyb21GbG9hdEZsb29yKCkgdG8gZW5z
dXJlIHRoYXQgdGhlIHJldHVybmVkIExheW91dFVuaXQgdmFsdWUgaXMgd2l0aGluIHRoZSBzaGFw
ZSdzIGJvdW5kcy4KLSAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpmcm9tRmxv
YXRGbG9vcihtX3NoYXBlLT5zaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpLm1heFkoKSk7CisgICAg
ICAgIHJldHVybiBMYXlvdXRVbml0Ojpmcm9tRmxvYXRGbG9vcihtX3NoYXBlLT5zaGFwZUxvZ2lj
YWxCb3VuZGluZ0JveCgpLm1heFkoKSk7CiAgICAgfQogCiAgICAgUmVuZGVyQmxvY2sqIG1fYmxv
Y2s7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVu
ZGVyZXIuaAkocmV2aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zp
bHRlckVmZmVjdFJlbmRlcmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDEwICszMiw5IEBACiAj
aW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9ucy5oIgog
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRSZWN0Lmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
LSNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJMYXlvdXRS
ZWN0LmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNvdXJjZUdy
YXBoaWMuaCIKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlv
dXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxh
eW91dC5oCShyZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRml4
ZWRUYWJsZUxheW91dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAjaWZuZGVm
IEZpeGVkVGFibGVMYXlvdXRfaAogI2RlZmluZSBGaXhlZFRhYmxlTGF5b3V0X2gKIAotI2luY2x1
ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgogI2luY2x1ZGUgIkxl
bmd0aC5oIgogI2luY2x1ZGUgIlRhYmxlTGF5b3V0LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dhcFJlY3RzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dhcFJlY3RzLmgJKHJldmlzaW9uIDEzMzY3NykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HYXBSZWN0cy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw3ICsyMyw3IEBACiAjaWZuZGVmIEdhcFJlY3RzX2gKICNkZWZpbmUgR2FwUmVjdHNfaAog
Ci0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRl
c3RSZXN1bHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVz
dFJlc3VsdC5oCShyZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SGl0VGVzdFJlc3VsdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVk
ZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiSGl0VGVz
dFJlcXVlc3QuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCIKKyNpbmNs
dWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiVGV4dERpcmVjdGlvbi5oIgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRl
LmNwcAkocmV2aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRl
c3RpbmdUcmFuc2Zvcm1TdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUu
aCIKIAotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRSZWN0LmgiCisjaW5jbHVkZSAiTGF5b3V0
UmVjdC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTgwLDcgKzgwLDcgQEAgRmxvYXRRdWFkIEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZTo6
bWFwcAogICAgIHJldHVybiBtX2FjY3VtdWxhdGVkVHJhbnNmb3JtLmludmVyc2UoKS5wcm9qZWN0
UXVhZChtX2xhc3RQbGFuYXJBcmVhKTsKIH0KIAotRnJhY3Rpb25hbExheW91dFJlY3QgSGl0VGVz
dGluZ1RyYW5zZm9ybVN0YXRlOjpib3VuZHNPZk1hcHBlZEFyZWEoKSBjb25zdAorTGF5b3V0UmVj
dCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU6OmJvdW5kc09mTWFwcGVkQXJlYSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1fYWNjdW11bGF0ZWRUcmFuc2Zvcm0uaW52ZXJzZSgpLmNsYW1wZWRCb3Vu
ZHNPZlByb2plY3RlZFF1YWQobV9sYXN0UGxhbmFyQXJlYSk7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZS5oCShyZXZp
c2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdGluZ1RyYW5z
Zm9ybVN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAg
IEZsb2F0UG9pbnQgbWFwcGVkUG9pbnQoKSBjb25zdDsKICAgICBGbG9hdFF1YWQgbWFwcGVkUXVh
ZCgpIGNvbnN0OwogICAgIEZsb2F0UXVhZCBtYXBwZWRBcmVhKCkgY29uc3Q7Ci0gICAgRnJhY3Rp
b25hbExheW91dFJlY3QgYm91bmRzT2ZNYXBwZWRBcmVhKCkgY29uc3Q7CisgICAgTGF5b3V0UmVj
dCBib3VuZHNPZk1hcHBlZEFyZWEoKSBjb25zdDsKICAgICB2b2lkIGZsYXR0ZW4oKTsKIAogICAg
IEZsb2F0UG9pbnQgbV9sYXN0UGxhbmFyUG9pbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3Nyw4
ICs2NzcsOCBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNJbkJsb2NrRGlyCiAKICAg
ICAgICAgICAgICAgICBSZW5kZXJSdWJ5UnVuKiBydWJ5UnVuID0gdG9SZW5kZXJSdWJ5UnVuKGN1
cnItPnJlbmRlcmVyKCkpOwogICAgICAgICAgICAgICAgIGlmIChSZW5kZXJSdWJ5QmFzZSogcnVi
eUJhc2UgPSBydWJ5UnVuLT5ydWJ5QmFzZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIExheW91
dFVuaXQgYm90dG9tUnVieUJhc2VMZWFkaW5nID0gKGN1cnItPmxvZ2ljYWxIZWlnaHQoKSAtIHJ1
YnlCYXNlLT5sb2dpY2FsQm90dG9tKCkpICsgcnVieUJhc2UtPmxvZ2ljYWxIZWlnaHQoKSAtIChy
dWJ5QmFzZS0+bGFzdFJvb3RCb3goKSA/IHJ1YnlCYXNlLT5sYXN0Um9vdEJveCgpLT5saW5lQm90
dG9tKCkgOiBaRVJPX0xBWU9VVF9VTklUKTsKLSAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5p
dCB0b3BSdWJ5QmFzZUxlYWRpbmcgPSBydWJ5QmFzZS0+bG9naWNhbFRvcCgpICsgKHJ1YnlCYXNl
LT5maXJzdFJvb3RCb3goKSA/IHJ1YnlCYXNlLT5maXJzdFJvb3RCb3goKS0+bGluZVRvcCgpIDog
WkVST19MQVlPVVRfVU5JVCk7CisgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgYm90dG9t
UnVieUJhc2VMZWFkaW5nID0gKGN1cnItPmxvZ2ljYWxIZWlnaHQoKSAtIHJ1YnlCYXNlLT5sb2dp
Y2FsQm90dG9tKCkpICsgcnVieUJhc2UtPmxvZ2ljYWxIZWlnaHQoKSAtIChydWJ5QmFzZS0+bGFz
dFJvb3RCb3goKSA/IHJ1YnlCYXNlLT5sYXN0Um9vdEJveCgpLT5saW5lQm90dG9tKCkgOiBMYXlv
dXRVbml0KCkpOworICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHRvcFJ1YnlCYXNlTGVh
ZGluZyA9IHJ1YnlCYXNlLT5sb2dpY2FsVG9wKCkgKyAocnVieUJhc2UtPmZpcnN0Um9vdEJveCgp
ID8gcnVieUJhc2UtPmZpcnN0Um9vdEJveCgpLT5saW5lVG9wKCkgOiBMYXlvdXRVbml0KCkpOwog
ICAgICAgICAgICAgICAgICAgICBuZXdMb2dpY2FsVG9wICs9ICFyZW5kZXJlcigpLT5zdHlsZSgp
LT5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkgPyB0b3BSdWJ5QmFzZUxlYWRpbmcgOiBib3R0
b21SdWJ5QmFzZUxlYWRpbmc7CiAgICAgICAgICAgICAgICAgICAgIGJveEhlaWdodCAtPSAodG9w
UnVieUJhc2VMZWFkaW5nICsgYm90dG9tUnVieUJhc2VMZWFkaW5nKTsKICAgICAgICAgICAgICAg
ICB9CkBAIC03OTEsNyArNzkxLDcgQEAgaW5saW5lIHZvaWQgSW5saW5lRmxvd0JveDo6YWRkQm9y
ZGVyT3V0cwogICAgIGlmICghc3R5bGUtPmhhc0JvcmRlckltYWdlT3V0c2V0cygpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50IGJvcmRlck91dHNldHMg
PSBzdHlsZS0+Ym9yZGVySW1hZ2VPdXRzZXRzKCk7CisgICAgTGF5b3V0Qm94RXh0ZW50IGJvcmRl
ck91dHNldHMgPSBzdHlsZS0+Ym9yZGVySW1hZ2VPdXRzZXRzKCk7CiAKICAgICBMYXlvdXRVbml0
IGJvcmRlck91dHNldExvZ2ljYWxUb3AgPSBib3JkZXJPdXRzZXRzLmxvZ2ljYWxUb3Aoc3R5bGUt
PndyaXRpbmdNb2RlKCkpOwogICAgIExheW91dFVuaXQgYm9yZGVyT3V0c2V0TG9naWNhbEJvdHRv
bSA9IGJvcmRlck91dHNldHMubG9naWNhbEJvdHRvbShzdHlsZS0+d3JpdGluZ01vZGUoKSk7CkBA
IC04MDYsOCArODA2LDggQEAgaW5saW5lIHZvaWQgSW5saW5lRmxvd0JveDo6YWRkQm9yZGVyT3V0
cwogICAgIExheW91dFVuaXQgbG9naWNhbFRvcFZpc3VhbE92ZXJmbG93ID0gbWluKHBpeGVsU25h
cHBlZExvZ2ljYWxUb3AoKSAtIG91dHNldExvZ2ljYWxUb3AsIGxvZ2ljYWxWaXN1YWxPdmVyZmxv
dy55KCkpOwogICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93ID0gbWF4
KHBpeGVsU25hcHBlZExvZ2ljYWxCb3R0b20oKSArIG91dHNldExvZ2ljYWxCb3R0b20sIGxvZ2lj
YWxWaXN1YWxPdmVyZmxvdy5tYXhZKCkpOwogCi0gICAgTGF5b3V0VW5pdCBvdXRzZXRMb2dpY2Fs
TGVmdCA9IGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2UoKSA/IGJvcmRlck91dHNldExvZ2ljYWxMZWZ0
IDogWkVST19MQVlPVVRfVU5JVDsKLSAgICBMYXlvdXRVbml0IG91dHNldExvZ2ljYWxSaWdodCA9
IGluY2x1ZGVMb2dpY2FsUmlnaHRFZGdlKCkgPyBib3JkZXJPdXRzZXRMb2dpY2FsUmlnaHQgOiBa
RVJPX0xBWU9VVF9VTklUOworICAgIExheW91dFVuaXQgb3V0c2V0TG9naWNhbExlZnQgPSBpbmNs
dWRlTG9naWNhbExlZnRFZGdlKCkgPyBib3JkZXJPdXRzZXRMb2dpY2FsTGVmdCA6IExheW91dFVu
aXQoKTsKKyAgICBMYXlvdXRVbml0IG91dHNldExvZ2ljYWxSaWdodCA9IGluY2x1ZGVMb2dpY2Fs
UmlnaHRFZGdlKCkgPyBib3JkZXJPdXRzZXRMb2dpY2FsUmlnaHQgOiBMYXlvdXRVbml0KCk7CiAK
ICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3cgPSBtaW4ocGl4ZWxTbmFw
cGVkTG9naWNhbExlZnQoKSAtIG91dHNldExvZ2ljYWxMZWZ0LCBsb2dpY2FsVmlzdWFsT3ZlcmZs
b3cueCgpKTsKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodFZpc3VhbE92ZXJmbG93ID0gbWF4
KHBpeGVsU25hcHBlZExvZ2ljYWxSaWdodCgpICsgb3V0c2V0TG9naWNhbFJpZ2h0LCBsb2dpY2Fs
VmlzdWFsT3ZlcmZsb3cubWF4WCgpKTsKQEAgLTExNDIsOCArMTE0Miw4IEBAIHZvaWQgSW5saW5l
Rmxvd0JveDo6cGFpbnRGaWxsTGF5ZXIoY29uc3QKICAgICAgICAgICAgIGZvciAoSW5saW5lRmxv
d0JveCogY3VyciA9IHRoaXM7IGN1cnI7IGN1cnIgPSBjdXJyLT5wcmV2TGluZUJveCgpKQogICAg
ICAgICAgICAgICAgIHRvdGFsTG9naWNhbFdpZHRoICs9IGN1cnItPmxvZ2ljYWxXaWR0aCgpOwog
ICAgICAgICB9Ci0gICAgICAgIExheW91dFVuaXQgc3RyaXBYID0gcmVjdC54KCkgLSAoaXNIb3Jp
em9udGFsKCkgPyBsb2dpY2FsT2Zmc2V0T25MaW5lIDogWkVST19MQVlPVVRfVU5JVCk7Ci0gICAg
ICAgIExheW91dFVuaXQgc3RyaXBZID0gcmVjdC55KCkgLSAoaXNIb3Jpem9udGFsKCkgPyBaRVJP
X0xBWU9VVF9VTklUIDogbG9naWNhbE9mZnNldE9uTGluZSk7CisgICAgICAgIExheW91dFVuaXQg
c3RyaXBYID0gcmVjdC54KCkgLSAoaXNIb3Jpem9udGFsKCkgPyBsb2dpY2FsT2Zmc2V0T25MaW5l
IDogTGF5b3V0VW5pdCgpKTsKKyAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFkgPSByZWN0LnkoKSAt
IChpc0hvcml6b250YWwoKSA/IExheW91dFVuaXQoKSA6IGxvZ2ljYWxPZmZzZXRPbkxpbmUpOwog
ICAgICAgICBMYXlvdXRVbml0IHN0cmlwV2lkdGggPSBpc0hvcml6b250YWwoKSA/IHRvdGFsTG9n
aWNhbFdpZHRoIDogc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4od2lkdGgoKSk7CiAgICAgICAgIExh
eW91dFVuaXQgc3RyaXBIZWlnaHQgPSBpc0hvcml6b250YWwoKSA/IHN0YXRpY19jYXN0PExheW91
dFVuaXQ+KGhlaWdodCgpKSA6IHRvdGFsTG9naWNhbFdpZHRoOwogCkBAIC0xMjY5LDggKzEyNjks
OCBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50Qm94RGVjb3JhdGlvbnMoCiAgICAgICAgICAg
ICAgICAgTGF5b3V0VW5pdCB0b3RhbExvZ2ljYWxXaWR0aCA9IGxvZ2ljYWxPZmZzZXRPbkxpbmU7
CiAgICAgICAgICAgICAgICAgZm9yIChJbmxpbmVGbG93Qm94KiBjdXJyID0gdGhpczsgY3Vycjsg
Y3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkpCiAgICAgICAgICAgICAgICAgICAgIHRvdGFsTG9n
aWNhbFdpZHRoICs9IGN1cnItPmxvZ2ljYWxXaWR0aCgpOwotICAgICAgICAgICAgICAgIExheW91
dFVuaXQgc3RyaXBYID0gYWRqdXN0ZWRQYWludG9mZnNldC54KCkgLSAoaXNIb3Jpem9udGFsKCkg
PyBsb2dpY2FsT2Zmc2V0T25MaW5lIDogWkVST19MQVlPVVRfVU5JVCk7Ci0gICAgICAgICAgICAg
ICAgTGF5b3V0VW5pdCBzdHJpcFkgPSBhZGp1c3RlZFBhaW50b2Zmc2V0LnkoKSAtIChpc0hvcml6
b250YWwoKSA/IFpFUk9fTEFZT1VUX1VOSVQgOiBsb2dpY2FsT2Zmc2V0T25MaW5lKTsKKyAgICAg
ICAgICAgICAgICBMYXlvdXRVbml0IHN0cmlwWCA9IGFkanVzdGVkUGFpbnRvZmZzZXQueCgpIC0g
KGlzSG9yaXpvbnRhbCgpID8gbG9naWNhbE9mZnNldE9uTGluZSA6IExheW91dFVuaXQoKSk7Cisg
ICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFkgPSBhZGp1c3RlZFBhaW50b2Zmc2V0Lnko
KSAtIChpc0hvcml6b250YWwoKSA/IExheW91dFVuaXQoKSA6IGxvZ2ljYWxPZmZzZXRPbkxpbmUp
OwogICAgICAgICAgICAgICAgIExheW91dFVuaXQgc3RyaXBXaWR0aCA9IGlzSG9yaXpvbnRhbCgp
ID8gdG90YWxMb2dpY2FsV2lkdGggOiBmcmFtZVJlY3Qud2lkdGgoKTsKICAgICAgICAgICAgICAg
ICBMYXlvdXRVbml0IHN0cmlwSGVpZ2h0ID0gaXNIb3Jpem9udGFsKCkgPyBmcmFtZVJlY3QuaGVp
Z2h0KCkgOiB0b3RhbExvZ2ljYWxXaWR0aDsKIApAQCAtMTM0MSw4ICsxMzQxLDggQEAgdm9pZCBJ
bmxpbmVGbG93Qm94OjpwYWludE1hc2soUGFpbnRJbmZvJgogICAgICAgICBMYXlvdXRVbml0IHRv
dGFsTG9naWNhbFdpZHRoID0gbG9naWNhbE9mZnNldE9uTGluZTsKICAgICAgICAgZm9yIChJbmxp
bmVGbG93Qm94KiBjdXJyID0gdGhpczsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkp
CiAgICAgICAgICAgICB0b3RhbExvZ2ljYWxXaWR0aCArPSBjdXJyLT5sb2dpY2FsV2lkdGgoKTsK
LSAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFggPSBhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSAtIChp
c0hvcml6b250YWwoKSA/IGxvZ2ljYWxPZmZzZXRPbkxpbmUgOiBaRVJPX0xBWU9VVF9VTklUKTsK
LSAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFkgPSBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSAtIChp
c0hvcml6b250YWwoKSA/IFpFUk9fTEFZT1VUX1VOSVQgOiBsb2dpY2FsT2Zmc2V0T25MaW5lKTsK
KyAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFggPSBhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSAtIChp
c0hvcml6b250YWwoKSA/IGxvZ2ljYWxPZmZzZXRPbkxpbmUgOiBMYXlvdXRVbml0KCkpOworICAg
ICAgICBMYXlvdXRVbml0IHN0cmlwWSA9IGFkanVzdGVkUGFpbnRPZmZzZXQueSgpIC0gKGlzSG9y
aXpvbnRhbCgpID8gTGF5b3V0VW5pdCgpIDogbG9naWNhbE9mZnNldE9uTGluZSk7CiAgICAgICAg
IExheW91dFVuaXQgc3RyaXBXaWR0aCA9IGlzSG9yaXpvbnRhbCgpID8gdG90YWxMb2dpY2FsV2lk
dGggOiBmcmFtZVJlY3Qud2lkdGgoKTsKICAgICAgICAgTGF5b3V0VW5pdCBzdHJpcEhlaWdodCA9
IGlzSG9yaXpvbnRhbCgpID8gZnJhbWVSZWN0LmhlaWdodCgpIDogdG90YWxMb2dpY2FsV2lkdGg7
CiAKQEAgLTE0MzksNyArMTQzOSw3IEBAIExheW91dFVuaXQgSW5saW5lRmxvd0JveDo6Y29tcHV0
ZU92ZXJBbm4KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgaWYgKCFydWJ5UnVuLT5zdHlsZSgpLT5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkp
IHsKLSAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHRvcE9mRmlyc3RSdWJ5VGV4dExpbmUgPSBy
dWJ5VGV4dC0+bG9naWNhbFRvcCgpICsgKHJ1YnlUZXh0LT5maXJzdFJvb3RCb3goKSA/IHJ1YnlU
ZXh0LT5maXJzdFJvb3RCb3goKS0+bGluZVRvcCgpIDogWkVST19MQVlPVVRfVU5JVCk7CisgICAg
ICAgICAgICAgICAgTGF5b3V0VW5pdCB0b3BPZkZpcnN0UnVieVRleHRMaW5lID0gcnVieVRleHQt
PmxvZ2ljYWxUb3AoKSArIChydWJ5VGV4dC0+Zmlyc3RSb290Qm94KCkgPyBydWJ5VGV4dC0+Zmly
c3RSb290Qm94KCktPmxpbmVUb3AoKSA6IExheW91dFVuaXQoKSk7CiAgICAgICAgICAgICAgICAg
aWYgKHRvcE9mRmlyc3RSdWJ5VGV4dExpbmUgPj0gMCkKICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgdG9wT2ZGaXJzdFJ1YnlUZXh0TGluZSArPSBjdXJyLT5s
b2dpY2FsVG9wKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0UmVwYWlu
dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFJlcGFp
bnRlci5oCShyZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5
b3V0UmVwYWludGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYg
TGF5b3V0UmVwYWludGVyX2gKICNkZWZpbmUgTGF5b3V0UmVwYWludGVyX2gKIAotI2luY2x1ZGUg
IkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5
b3V0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0
U3RhdGUuaAkocmV2aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xh
eW91dFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgTGF5
b3V0U3RhdGVfaAogCiAjaW5jbHVkZSAiQ29sdW1uSW5mby5oIgotI2luY2x1ZGUgIkxheW91dFR5
cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9MYXlvdXRUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9MYXlvdXRUeXBlcy5oCShyZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvTGF5b3V0VHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1OSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
VGhlc2UgdHlwZWRlZnMgYXJlIGJlaW5nIHVzZWQgdG8gYWJzdHJhY3QgbGF5b3V0IGFuZCBoaXQg
dGVzdGluZyBvZmYKLS8vIG9mIGludGVnZXJzIGFuZCBldmVudHVhbGx5IHJlcGxhY2UgdGhlbSB3
aXRoIGZsb2F0cy4gT25jZSB0aGlzIHRyYW5zaXRpb24KLS8vIGlzIGNvbXBsZXRlLCB0aGVzZSB0
eXBlcyB3aWxsIGJlIHJlbW92ZWQuIFByb2dyZXNzIGNhbiBiZSB0cmFja2VkIGF0Ci0vLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMTgKLQotI2lmbmRlZiBMYXlv
dXRUeXBlc19oCi0jZGVmaW5lIExheW91dFR5cGVzX2gKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OwotY2xhc3MgRnJhY3Rpb25hbExheW91
dFBvaW50OwotY2xhc3MgRnJhY3Rpb25hbExheW91dFJlY3Q7Ci1jbGFzcyBGcmFjdGlvbmFsTGF5
b3V0U2l6ZTsKLWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRVbml0OwotCi10eXBlZGVmIEZyYWN0aW9u
YWxMYXlvdXRCb3hFeHRlbnQgTGF5b3V0Qm94RXh0ZW50OwotdHlwZWRlZiBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQgTGF5b3V0UG9pbnQ7Ci10eXBlZGVmIEZyYWN0aW9uYWxMYXlvdXRSZWN0IExheW91
dFJlY3Q7Ci10eXBlZGVmIEZyYWN0aW9uYWxMYXlvdXRTaXplIExheW91dFNpemU7Ci10eXBlZGVm
IEZyYWN0aW9uYWxMYXlvdXRVbml0IExheW91dFVuaXQ7Ci0KLSNkZWZpbmUgTUFYX0xBWU9VVF9V
TklUIExheW91dFVuaXQ6Om1heCgpCi0jZGVmaW5lIE1JTl9MQVlPVVRfVU5JVCBMYXlvdXRVbml0
OjptaW4oKQotI2RlZmluZSBaRVJPX0xBWU9VVF9VTklUIExheW91dFVuaXQoMCkKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gTGF5b3V0VHlwZXNfaApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaAko
cmV2aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFR5cGVz
SW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1MyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3Ry
aWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBM
YXlvdXRUeXBlc0lubGluZU1ldGhvZHNfaAotI2RlZmluZSBMYXlvdXRUeXBlc0lubGluZU1ldGhv
ZHNfaAotCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91
dEJveEV4dGVudC5oIgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRSZWN0LmgiCi0jaW5jbHVk
ZSAiRnJhY3Rpb25hbExheW91dFVuaXQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVk
ZSAiTGF5b3V0VHlwZXMuaCIKLQotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRSZWN0IGVuY2xvc2luZ0xh
eW91dFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIHJldHVybiBlbmNsb3NpbmdJ
bnRSZWN0KHJlY3QpOwotfQotCi1pbmxpbmUgTGF5b3V0U2l6ZSByb3VuZGVkTGF5b3V0U2l6ZShj
b25zdCBGbG9hdFNpemUmIHMpCi17Ci0jaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICBy
ZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUocyk7Ci0jZWxzZQotICAgIHJldHVybiByb3VuZGVk
SW50U2l6ZShzKTsKLSNlbmRpZgotfQotCi1pbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRS
ZWN0KExheW91dFVuaXQgbGVmdCwgTGF5b3V0VW5pdCB0b3AsIExheW91dFVuaXQgd2lkdGgsIExh
eW91dFVuaXQgaGVpZ2h0KQotewotICAgIHJldHVybiBJbnRSZWN0KGxlZnQucm91bmQoKSwgdG9w
LnJvdW5kKCksIHNuYXBTaXplVG9QaXhlbCh3aWR0aCwgbGVmdCksIHNuYXBTaXplVG9QaXhlbCho
ZWlnaHQsIHRvcCkpOwotfQotCi1pbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0RnJv
bUVkZ2VzKExheW91dFVuaXQgbGVmdCwgTGF5b3V0VW5pdCB0b3AsIExheW91dFVuaXQgcmlnaHQs
IExheW91dFVuaXQgYm90dG9tKQotewotICAgIHJldHVybiBJbnRSZWN0KGxlZnQucm91bmQoKSwg
dG9wLnJvdW5kKCksIHNuYXBTaXplVG9QaXhlbChyaWdodCAtIGxlZnQsIGxlZnQpLCBzbmFwU2l6
ZVRvUGl4ZWwoYm90dG9tIC0gdG9wLCB0b3ApKTsKLX0KLQotaW5saW5lIExheW91dFBvaW50IHJv
dW5kZWRMYXlvdXRQb2ludChjb25zdCBGbG9hdFBvaW50JiBwKQotewotI2lmIEVOQUJMRShTVUJQ
SVhFTF9MQVlPVVQpCi0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChwKTsKLSNlbHNl
Ci0gICAgcmV0dXJuIHJvdW5kZWRJbnRQb2ludChwKTsKLSNlbmRpZgotfQotCi1pbmxpbmUgTGF5
b3V0UG9pbnQgZmxvb3JlZExheW91dFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApCi17Ci0gICAg
cmV0dXJuIGZsb29yZWRGcmFjdGlvbmFsTGF5b3V0UG9pbnQocCk7Ci19Ci0KLWlubGluZSBMYXlv
dXRQb2ludCBmbG9vcmVkTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRTaXplJiBzKQotewotICAgIHJl
dHVybiBmbG9vcmVkTGF5b3V0UG9pbnQoRmxvYXRQb2ludChzKSk7Ci19Ci0KLWlubGluZSBpbnQg
cm91bmRUb0ludChMYXlvdXRVbml0IHZhbHVlKQotewotICAgIHJldHVybiB2YWx1ZS5yb3VuZCgp
OwotfQotCi1pbmxpbmUgaW50IGZsb29yVG9JbnQoTGF5b3V0VW5pdCB2YWx1ZSkKLXsKLSAgICBy
ZXR1cm4gdmFsdWUuZmxvb3IoKTsKLX0KLQotaW5saW5lIExheW91dFVuaXQgcm91bmRlZExheW91
dFVuaXQoZmxvYXQgdmFsdWUpCi17Ci0jaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICBy
ZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQ6OmZyb21GbG9hdFJvdW5kKHZhbHVlKTsKLSNlbHNl
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obHJvdW5kZih2YWx1ZSkpOwotI2VuZGlmCi19
Ci0KLWlubGluZSBMYXlvdXRVbml0IGNlaWxlZExheW91dFVuaXQoZmxvYXQgdmFsdWUpCi17Ci0j
aWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVu
aXQ6OmZyb21GbG9hdENlaWwodmFsdWUpOwotI2Vsc2UKLSAgICByZXR1cm4gY2VpbGYodmFsdWUp
OwotI2VuZGlmCi19Ci0KLWlubGluZSBMYXlvdXRVbml0IGFic29sdXRlVmFsdWUoY29uc3QgTGF5
b3V0VW5pdCYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHZhbHVlLmFicygpOwotfQotCi1pbmxpbmUg
TGF5b3V0U2l6ZSB0b0xheW91dFNpemUoY29uc3QgTGF5b3V0UG9pbnQmIHApCi17Ci0gICAgcmV0
dXJuIExheW91dFNpemUocC54KCksIHAueSgpKTsKLX0KLQotaW5saW5lIExheW91dFBvaW50IHRv
TGF5b3V0UG9pbnQoY29uc3QgTGF5b3V0U2l6ZSYgcCkKLXsKLSAgICByZXR1cm4gTGF5b3V0UG9p
bnQocC53aWR0aCgpLCBwLmhlaWdodCgpKTsKLX0KLQotaW5saW5lIExheW91dFVuaXQgbGF5b3V0
TW9kKGNvbnN0IExheW91dFVuaXQmIG51bWVyYXRvciwgY29uc3QgTGF5b3V0VW5pdCYgZGVub21p
bmF0b3IpCi17Ci0gICAgcmV0dXJuIG51bWVyYXRvciAlIGRlbm9taW5hdG9yOwotfQotCi1pbmxp
bmUgSW50U2l6ZSBwaXhlbFNuYXBwZWRJbnRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXpl
JiBzLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHApCi17Ci0gICAgcmV0dXJuIEludFNp
emUoc25hcFNpemVUb1BpeGVsKHMud2lkdGgoKSwgcC54KCkpLCBzbmFwU2l6ZVRvUGl4ZWwocy5o
ZWlnaHQoKSwgcC55KCkpKTsKLX0KLQotaW5saW5lIEludFJlY3QgcGl4ZWxTbmFwcGVkSW50UmVj
dChMYXlvdXRQb2ludCBsb2NhdGlvbiwgTGF5b3V0U2l6ZSBzaXplKQotewotICAgIHJldHVybiBJ
bnRSZWN0KHJvdW5kZWRJbnRQb2ludChsb2NhdGlvbiksIHBpeGVsU25hcHBlZEludFNpemUoc2l6
ZSwgbG9jYXRpb24pKTsKLX0KLQotaW5saW5lIGJvb2wgaXNJbnRlZ2VyVmFsdWUoY29uc3QgTGF5
b3V0VW5pdCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdmFsdWUudG9JbnQoKSA9PSB2YWx1ZTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gTGF5b3V0VHlwZXNJbmxpbmVN
ZXRob2RzX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9QYWludEluZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUGFpbnRJbmZvLmgJKHJldmlzaW9u
IDEzMzY3NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9QYWludEluZm8uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9k
cy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJQYWludFBoYXNlLmgiCiAj
aW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDEzMzY3NykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4MSw4ICsxODEsOCBAQCBSZW5kZXJCbG9jazo6TWFyZ2luSW5mbzo6TWFyZ2luSW5mbyhSZW5k
CiAgICAgbV9xdWlya0NvbnRhaW5lciA9IGJsb2NrLT5pc1RhYmxlQ2VsbCgpIHx8IGJsb2NrLT5p
c0JvZHkoKSB8fCBibG9ja1N0eWxlLT5tYXJnaW5CZWZvcmVDb2xsYXBzZSgpID09IE1ESVNDQVJE
CiAgICAgICAgIHx8IGJsb2NrU3R5bGUtPm1hcmdpbkFmdGVyQ29sbGFwc2UoKSA9PSBNRElTQ0FS
RDsKIAotICAgIG1fcG9zaXRpdmVNYXJnaW4gPSBtX2NhbkNvbGxhcHNlTWFyZ2luQmVmb3JlV2l0
aENoaWxkcmVuID8gYmxvY2stPm1heFBvc2l0aXZlTWFyZ2luQmVmb3JlKCkgOiBaRVJPX0xBWU9V
VF9VTklUOwotICAgIG1fbmVnYXRpdmVNYXJnaW4gPSBtX2NhbkNvbGxhcHNlTWFyZ2luQmVmb3Jl
V2l0aENoaWxkcmVuID8gYmxvY2stPm1heE5lZ2F0aXZlTWFyZ2luQmVmb3JlKCkgOiBaRVJPX0xB
WU9VVF9VTklUOworICAgIG1fcG9zaXRpdmVNYXJnaW4gPSBtX2NhbkNvbGxhcHNlTWFyZ2luQmVm
b3JlV2l0aENoaWxkcmVuID8gYmxvY2stPm1heFBvc2l0aXZlTWFyZ2luQmVmb3JlKCkgOiBMYXlv
dXRVbml0KCk7CisgICAgbV9uZWdhdGl2ZU1hcmdpbiA9IG1fY2FuQ29sbGFwc2VNYXJnaW5CZWZv
cmVXaXRoQ2hpbGRyZW4gPyBibG9jay0+bWF4TmVnYXRpdmVNYXJnaW5CZWZvcmUoKSA6IExheW91
dFVuaXQoKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQpAQCAtMTI5MSw3ICsxMjkxLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6aXNTZWxmQ29s
bGFwc2luZ0Jsb2NrKAogICAgIC8vIChjKSBoYXZlIGJvcmRlci9wYWRkaW5nLAogICAgIC8vIChk
KSBoYXZlIGEgbWluLWhlaWdodAogICAgIC8vIChlKSBoYXZlIHNwZWNpZmllZCB0aGF0IG9uZSBv
ZiBvdXIgbWFyZ2lucyBjYW4ndCBjb2xsYXBzZSB1c2luZyBhIENTUyBleHRlbnNpb24KLSAgICBp
ZiAobG9naWNhbEhlaWdodCgpID4gWkVST19MQVlPVVRfVU5JVAorICAgIGlmIChsb2dpY2FsSGVp
Z2h0KCkgPiAwCiAgICAgICAgIHx8IGlzVGFibGUoKSB8fCBib3JkZXJBbmRQYWRkaW5nTG9naWNh
bEhlaWdodCgpCiAgICAgICAgIHx8IHN0eWxlKCktPmxvZ2ljYWxNaW5IZWlnaHQoKS5pc1Bvc2l0
aXZlKCkKICAgICAgICAgfHwgc3R5bGUoKS0+bWFyZ2luQmVmb3JlQ29sbGFwc2UoKSA9PSBNU0VQ
QVJBVEUgfHwgc3R5bGUoKS0+bWFyZ2luQWZ0ZXJDb2xsYXBzZSgpID09IE1TRVBBUkFURSkKQEAg
LTE0MjMsNyArMTQyMyw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZVJlZ2lvbnNBbmRFeGNs
dXMKIAogICAgIC8vIENvbXB1dGUgdGhlIG1heGltdW0gbG9naWNhbCBoZWlnaHQgY29udGVudCBt
YXkgY2F1c2UgdGhpcyBibG9jayB0byBleHBhbmQgdG8KICAgICAvLyBGSVhNRTogVGhlc2Ugc2hv
dWxkIGV2ZW50dWFsbHkgdXNlIHRoZSBjb25zdCBjb21wdXRlTG9naWNhbEhlaWdodCByYXRoZXIg
dGhhbiB1cGRhdGVMb2dpY2FsSGVpZ2h0Ci0gICAgc2V0TG9naWNhbEhlaWdodChNQVhfTEFZT1VU
X1VOSVQgLyAyKTsKKyAgICBzZXRMb2dpY2FsSGVpZ2h0KExheW91dFVuaXQ6Om1heCgpIC8gMik7
CiAgICAgdXBkYXRlTG9naWNhbEhlaWdodCgpOwogCiAjaWYgRU5BQkxFKENTU19FWENMVVNJT05T
KQpAQCAtMTQ0NCw3ICsxNDQ0LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUV4Y2x1c2lv
blNoYXBlUwogICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogZXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvID0gdGhpcy0+ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCk7CiAgICAgaWYgKGV4Y2x1
c2lvblNoYXBlSW5zaWRlSW5mbykgewogICAgICAgICBib29sIHBlcmNlbnRhZ2VMb2dpY2FsSGVp
Z2h0UmVzb2x2YWJsZSA9IHBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0SXNSZXNvbHZhYmxlRnJvbUJs
b2NrKHRoaXMsIGZhbHNlKTsKLSAgICAgICAgZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5jb21w
dXRlU2hhcGVTaXplKGxvZ2ljYWxXaWR0aCgpLCBwZXJjZW50YWdlTG9naWNhbEhlaWdodFJlc29s
dmFibGUgPyBsb2dpY2FsSGVpZ2h0KCkgOiBaRVJPX0xBWU9VVF9VTklUKTsKKyAgICAgICAgZXhj
bHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5jb21wdXRlU2hhcGVTaXplKGxvZ2ljYWxXaWR0aCgpLCBw
ZXJjZW50YWdlTG9naWNhbEhlaWdodFJlc29sdmFibGUgPyBsb2dpY2FsSGVpZ2h0KCkgOiBMYXlv
dXRVbml0KCkpOwogICAgIH0KIH0KICNlbmRpZgpAQCAtMTQ3NSwxMSArMTQ3NSwxMSBAQCB2b2lk
IFJlbmRlckJsb2NrOjpjaGVja0ZvclBhZ2luYXRpb25Mb2dpCiAgICAgICAgICAgICAvLyBhdm9p
ZCBkb2luZyB0d28gbGF5b3V0IHBhc3Nlcy4KICAgICAgICAgICAgIHVwZGF0ZUxvZ2ljYWxIZWln
aHQoKTsKICAgICAgICAgICAgIExheW91dFVuaXQgY29sdW1uSGVpZ2h0ID0gY29udGVudExvZ2lj
YWxIZWlnaHQoKTsKLSAgICAgICAgICAgIGlmIChjb2x1bW5IZWlnaHQgPiBaRVJPX0xBWU9VVF9V
TklUKSB7CisgICAgICAgICAgICBpZiAoY29sdW1uSGVpZ2h0ID4gMCkgewogICAgICAgICAgICAg
ICAgIHBhZ2VMb2dpY2FsSGVpZ2h0ID0gY29sdW1uSGVpZ2h0OwogICAgICAgICAgICAgICAgIGhh
c1NwZWNpZmllZFBhZ2VMb2dpY2FsSGVpZ2h0ID0gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHNldExvZ2ljYWxIZWlnaHQoWkVST19MQVlPVVRfVU5JVCk7CisgICAgICAgICAgICBz
ZXRMb2dpY2FsSGVpZ2h0KDApOwogICAgICAgICB9CiAgICAgICAgIGlmIChjb2xJbmZvLT5jb2x1
bW5IZWlnaHQoKSAhPSBwYWdlTG9naWNhbEhlaWdodCAmJiBldmVySGFkTGF5b3V0KCkpIHsKICAg
ICAgICAgICAgIGNvbEluZm8tPnNldENvbHVtbkhlaWdodChwYWdlTG9naWNhbEhlaWdodCk7CkBA
IC0xNTE2LDcgKzE1MTYsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJl
bGF5CiAgICAgY2xlYXJGbG9hdHMoKTsKIAogICAgIExheW91dFVuaXQgcHJldmlvdXNIZWlnaHQg
PSBsb2dpY2FsSGVpZ2h0KCk7Ci0gICAgc2V0TG9naWNhbEhlaWdodChaRVJPX0xBWU9VVF9VTklU
KTsKKyAgICBzZXRMb2dpY2FsSGVpZ2h0KDApOwogCiAgICAgYm9vbCBwYWdlTG9naWNhbEhlaWdo
dENoYW5nZWQgPSBmYWxzZTsKICAgICBib29sIGhhc1NwZWNpZmllZFBhZ2VMb2dpY2FsSGVpZ2h0
ID0gZmFsc2U7CkBAIC0xNTUyLDkgKzE1NTIsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRC
bG9jayhib29sIHJlbGF5CiAgICAgICAgIHNldFBhZ2luYXRpb25TdHJ1dCgwKTsKICAgICB9CiAK
LSAgICBMYXlvdXRVbml0IHJlcGFpbnRMb2dpY2FsVG9wID0gWkVST19MQVlPVVRfVU5JVDsKLSAg
ICBMYXlvdXRVbml0IHJlcGFpbnRMb2dpY2FsQm90dG9tID0gWkVST19MQVlPVVRfVU5JVDsKLSAg
ICBMYXlvdXRVbml0IG1heEZsb2F0TG9naWNhbEJvdHRvbSA9IFpFUk9fTEFZT1VUX1VOSVQ7Cisg
ICAgTGF5b3V0VW5pdCByZXBhaW50TG9naWNhbFRvcCA9IDA7CisgICAgTGF5b3V0VW5pdCByZXBh
aW50TG9naWNhbEJvdHRvbSA9IDA7CisgICAgTGF5b3V0VW5pdCBtYXhGbG9hdExvZ2ljYWxCb3R0
b20gPSAwOwogICAgIGlmICghZmlyc3RDaGlsZCgpICYmICFpc0Fub255bW91c0Jsb2NrKCkpCiAg
ICAgICAgIHNldENoaWxkcmVuSW5saW5lKHRydWUpOwogICAgIGlmIChjaGlsZHJlbklubGluZSgp
KQpAQCAtMTY5MSw5ICsxNjkxLDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZU92ZXJmbG93
KExheW91dAogICAgICAgICBMYXlvdXRSZWN0IGNsaWVudFJlY3QoY2xpZW50Qm94UmVjdCgpKTsK
ICAgICAgICAgTGF5b3V0UmVjdCByZWN0VG9BcHBseTsKICAgICAgICAgaWYgKGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICByZWN0VG9BcHBseSA9IExheW91dFJlY3QoY2xp
ZW50UmVjdC54KCksIGNsaWVudFJlY3QueSgpLCAxLCBtYXgoWkVST19MQVlPVVRfVU5JVCwgb2xk
Q2xpZW50QWZ0ZXJFZGdlIC0gY2xpZW50UmVjdC55KCkpKTsKKyAgICAgICAgICAgIHJlY3RUb0Fw
cGx5ID0gTGF5b3V0UmVjdChjbGllbnRSZWN0LngoKSwgY2xpZW50UmVjdC55KCksIDEsIG1heDxM
YXlvdXRVbml0PigwLCBvbGRDbGllbnRBZnRlckVkZ2UgLSBjbGllbnRSZWN0LnkoKSkpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICByZWN0VG9BcHBseSA9IExheW91dFJlY3QoY2xpZW50UmVj
dC54KCksIGNsaWVudFJlY3QueSgpLCBtYXgoWkVST19MQVlPVVRfVU5JVCwgb2xkQ2xpZW50QWZ0
ZXJFZGdlIC0gY2xpZW50UmVjdC54KCkpLCAxKTsKKyAgICAgICAgICAgIHJlY3RUb0FwcGx5ID0g
TGF5b3V0UmVjdChjbGllbnRSZWN0LngoKSwgY2xpZW50UmVjdC55KCksIG1heDxMYXlvdXRVbml0
PigwLCBvbGRDbGllbnRBZnRlckVkZ2UgLSBjbGllbnRSZWN0LngoKSksIDEpOwogICAgICAgICBh
ZGRMYXlvdXRPdmVyZmxvdyhyZWN0VG9BcHBseSk7CiAgICAgfQogICAgICAgICAKQEAgLTE4MDYs
NyArMTgwNiw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdEZsb2F0aW5nQmxvY2soY28KICAg
ICAvLyBmb3IgYnkgc2ltcGx5IGNhbGxpbmcgY2FuQ29sbGFwc2VXaXRoTWFyZ2luQmVmb3JlLiAg
U2VlCiAgICAgLy8gaHR0cDovL3d3dy5oaXhpZS5jaC90ZXN0cy9hZGhvYy9jc3MvYm94L2Jsb2Nr
L21hcmdpbi1jb2xsYXBzZS8wNDYuaHRtbCBmb3IKICAgICAvLyBhbiBleGFtcGxlIG9mIHRoaXMg
c2NlbmFyaW8uCi0gICAgTGF5b3V0VW5pdCBtYXJnaW5PZmZzZXQgPSBtYXJnaW5JbmZvLmNhbkNv
bGxhcHNlV2l0aE1hcmdpbkJlZm9yZSgpID8gWkVST19MQVlPVVRfVU5JVCA6IG1hcmdpbkluZm8u
bWFyZ2luKCk7CisgICAgTGF5b3V0VW5pdCBtYXJnaW5PZmZzZXQgPSBtYXJnaW5JbmZvLmNhbkNv
bGxhcHNlV2l0aE1hcmdpbkJlZm9yZSgpID8gTGF5b3V0VW5pdCgpIDogbWFyZ2luSW5mby5tYXJn
aW4oKTsKICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQoKSArIG1hcmdpbk9mZnNl
dCk7CiAgICAgcG9zaXRpb25OZXdGbG9hdHMoKTsKICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxvZ2lj
YWxIZWlnaHQoKSAtIG1hcmdpbk9mZnNldCk7CkBAIC0yMjA2LDggKzIyMDYsOCBAQCBMYXlvdXRV
bml0IFJlbmRlckJsb2NrOjplc3RpbWF0ZUxvZ2ljYWxUCiAgICAgLy8gcmVsYXlvdXQgaWYgdGhl
cmUgYXJlIGludHJ1ZGluZyBmbG9hdHMuCiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wRXN0aW1h
dGUgPSBsb2dpY2FsSGVpZ2h0KCk7CiAgICAgaWYgKCFtYXJnaW5JbmZvLmNhbkNvbGxhcHNlV2l0
aE1hcmdpbkJlZm9yZSgpKSB7Ci0gICAgICAgIExheW91dFVuaXQgcG9zaXRpdmVNYXJnaW5CZWZv
cmUgPSBaRVJPX0xBWU9VVF9VTklUOwotICAgICAgICBMYXlvdXRVbml0IG5lZ2F0aXZlTWFyZ2lu
QmVmb3JlID0gWkVST19MQVlPVVRfVU5JVDsKKyAgICAgICAgTGF5b3V0VW5pdCBwb3NpdGl2ZU1h
cmdpbkJlZm9yZSA9IDA7CisgICAgICAgIExheW91dFVuaXQgbmVnYXRpdmVNYXJnaW5CZWZvcmUg
PSAwOwogICAgICAgICBpZiAoY2hpbGQtPnNlbGZOZWVkc0xheW91dCgpKSB7CiAgICAgICAgICAg
ICAvLyBUcnkgdG8gZG8gYSBiYXNpYyBlc3RpbWF0aW9uIG9mIGhvdyB0aGUgY29sbGFwc2UgaXMg
Z29pbmcgdG8gZ28uCiAgICAgICAgICAgICBtYXJnaW5CZWZvcmVFc3RpbWF0ZUZvckNoaWxkKGNo
aWxkLCBwb3NpdGl2ZU1hcmdpbkJlZm9yZSwgbmVnYXRpdmVNYXJnaW5CZWZvcmUpOwpAQCAtMjc5
Niw5ICsyNzk2LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5SdWxlcyhQYWludAog
CiAgICAgaWYgKGNvbEluZm8tPnByb2dyZXNzaW9uQXhpcygpID09IENvbHVtbkluZm86OklubGlu
ZUF4aXMpIHsKICAgICAgICAgYm9vbCBsZWZ0VG9SaWdodCA9IHN0eWxlKCktPmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSBeIGNvbEluZm8tPnByb2dyZXNzaW9uSXNSZXZlcnNlZCgpOwotICAgICAg
ICBMYXlvdXRVbml0IGN1cnJMb2dpY2FsTGVmdE9mZnNldCA9IGxlZnRUb1JpZ2h0ID8gWkVST19M
QVlPVVRfVU5JVCA6IGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBj
dXJyTG9naWNhbExlZnRPZmZzZXQgPSBsZWZ0VG9SaWdodCA/IExheW91dFVuaXQoKSA6IGNvbnRl
bnRMb2dpY2FsV2lkdGgoKTsKICAgICAgICAgTGF5b3V0VW5pdCBydWxlQWRkID0gbG9naWNhbExl
ZnRPZmZzZXRGb3JDb250ZW50KCk7Ci0gICAgICAgIExheW91dFVuaXQgcnVsZUxvZ2ljYWxMZWZ0
ID0gbGVmdFRvUmlnaHQgPyBaRVJPX0xBWU9VVF9VTklUIDogY29udGVudExvZ2ljYWxXaWR0aCgp
OworICAgICAgICBMYXlvdXRVbml0IHJ1bGVMb2dpY2FsTGVmdCA9IGxlZnRUb1JpZ2h0ID8gTGF5
b3V0VW5pdCgpIDogY29udGVudExvZ2ljYWxXaWR0aCgpOwogICAgICAgICBMYXlvdXRVbml0IGlu
bGluZURpcmVjdGlvblNpemUgPSBjb2xJbmZvLT5kZXNpcmVkQ29sdW1uV2lkdGgoKTsKICAgICAg
ICAgQm94U2lkZSBib3hTaWRlID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKQogICAgICAgICAg
ICAgPyBsZWZ0VG9SaWdodCA/IEJTTGVmdCA6IEJTUmlnaHQKQEAgLTI5ODgsNyArMjk4OCw3IEBA
IGJvb2wgUmVuZGVyQmxvY2s6OnBhaW50Q2hpbGQoUmVuZGVyQm94KgogICAgIGlmIChjaGVja0Fm
dGVyQWx3YXlzCiAgICAgICAgICYmIChhYnNvbHV0ZUNoaWxkWSArIGNoaWxkLT5oZWlnaHQoKSkg
PiBwYWludEluZm8ucmVjdC55KCkKICAgICAgICAgJiYgKGFic29sdXRlQ2hpbGRZICsgY2hpbGQt
PmhlaWdodCgpKSA8IHBhaW50SW5mby5yZWN0Lm1heFkoKSkgewotICAgICAgICB2aWV3KCktPnNl
dEJlc3RUcnVuY2F0ZWRBdChhYnNvbHV0ZUNoaWxkWSArIGNoaWxkLT5oZWlnaHQoKSArIG1heCha
RVJPX0xBWU9VVF9VTklULCBjaGlsZC0+Y29sbGFwc2VkTWFyZ2luQWZ0ZXIoKSksIHRoaXMsIHRy
dWUpOworICAgICAgICB2aWV3KCktPnNldEJlc3RUcnVuY2F0ZWRBdChhYnNvbHV0ZUNoaWxkWSAr
IGNoaWxkLT5oZWlnaHQoKSArIG1heDxMYXlvdXRVbml0PigwLCBjaGlsZC0+Y29sbGFwc2VkTWFy
Z2luQWZ0ZXIoKSksIHRoaXMsIHRydWUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIHJldHVybiB0cnVlOwpAQCAtMzUxNCwxNCArMzUxNCwxNCBAQCBMYXlvdXRSZWN0IFJlbmRl
ckJsb2NrOjpibG9ja1NlbGVjdGlvbkdhCiB7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wID0g
bGFzdExvZ2ljYWxUb3A7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gYmxvY2tEaXJl
Y3Rpb25PZmZzZXQocm9vdEJsb2NrLCBvZmZzZXRGcm9tUm9vdEJsb2NrKSArIGxvZ2ljYWxCb3R0
b20gLSBsb2dpY2FsVG9wOwotICAgIGlmIChsb2dpY2FsSGVpZ2h0IDw9IFpFUk9fTEFZT1VUX1VO
SVQpCisgICAgaWYgKGxvZ2ljYWxIZWlnaHQgPD0gMCkKICAgICAgICAgcmV0dXJuIExheW91dFJl
Y3QoKTsKIAogICAgIC8vIEdldCB0aGUgc2VsZWN0aW9uIG9mZnNldHMgZm9yIHRoZSBib3R0b20g
b2YgdGhlIGdhcAogICAgIExheW91dFVuaXQgbG9naWNhbExlZnQgPSBtYXgobGFzdExvZ2ljYWxM
ZWZ0LCBsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIGxvZ2ljYWxCb3R0b20p
KTsKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodCA9IG1pbihsYXN0TG9naWNhbFJpZ2h0LCBs
b2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBsb2dpY2FsQm90dG9tKSk7CiAg
ICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGggPSBsb2dpY2FsUmlnaHQgLSBsb2dpY2FsTGVmdDsK
LSAgICBpZiAobG9naWNhbFdpZHRoIDw9IFpFUk9fTEFZT1VUX1VOSVQpCisgICAgaWYgKGxvZ2lj
YWxXaWR0aCA8PSAwKQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCiAgICAgTGF5b3V0
UmVjdCBnYXBSZWN0ID0gcm9vdEJsb2NrLT5sb2dpY2FsUmVjdFRvUGh5c2ljYWxSZWN0KHJvb3RC
bG9ja1BoeXNpY2FsUG9zaXRpb24sIExheW91dFJlY3QobG9naWNhbExlZnQsIGxvZ2ljYWxUb3As
IGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCkpOwpAQCAtMzUzNyw3ICszNTM3LDcgQEAgTGF5
b3V0UmVjdCBSZW5kZXJCbG9jazo6bG9naWNhbExlZnRTZWxlYwogICAgIExheW91dFVuaXQgcm9v
dEJsb2NrTG9naWNhbExlZnQgPSBtYXgobG9naWNhbExlZnRTZWxlY3Rpb25PZmZzZXQocm9vdEJs
b2NrLCBsb2dpY2FsVG9wKSwgbG9naWNhbExlZnRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBs
b2dpY2FsVG9wICsgbG9naWNhbEhlaWdodCkpOwogICAgIExheW91dFVuaXQgcm9vdEJsb2NrTG9n
aWNhbFJpZ2h0ID0gbWluKGlubGluZURpcmVjdGlvbk9mZnNldChyb290QmxvY2ssIG9mZnNldEZy
b21Sb290QmxvY2spICsgZmxvb3JUb0ludChsb2dpY2FsTGVmdCksIG1pbihsb2dpY2FsUmlnaHRT
ZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBsb2dpY2FsVG9wKSwgbG9naWNhbFJpZ2h0U2VsZWN0
aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQpKSk7CiAgICAg
TGF5b3V0VW5pdCByb290QmxvY2tMb2dpY2FsV2lkdGggPSByb290QmxvY2tMb2dpY2FsUmlnaHQg
LSByb290QmxvY2tMb2dpY2FsTGVmdDsKLSAgICBpZiAocm9vdEJsb2NrTG9naWNhbFdpZHRoIDw9
IFpFUk9fTEFZT1VUX1VOSVQpCisgICAgaWYgKHJvb3RCbG9ja0xvZ2ljYWxXaWR0aCA8PSAwKQog
ICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCiAgICAgTGF5b3V0UmVjdCBnYXBSZWN0ID0g
cm9vdEJsb2NrLT5sb2dpY2FsUmVjdFRvUGh5c2ljYWxSZWN0KHJvb3RCbG9ja1BoeXNpY2FsUG9z
aXRpb24sIExheW91dFJlY3Qocm9vdEJsb2NrTG9naWNhbExlZnQsIHJvb3RCbG9ja0xvZ2ljYWxU
b3AsIHJvb3RCbG9ja0xvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCkpOwpAQCAtMzU1Myw3ICsz
NTUzLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0U2VsZQogICAgIExh
eW91dFVuaXQgcm9vdEJsb2NrTG9naWNhbExlZnQgPSBtYXgoaW5saW5lRGlyZWN0aW9uT2Zmc2V0
KHJvb3RCbG9jaywgb2Zmc2V0RnJvbVJvb3RCbG9jaykgKyBmbG9vclRvSW50KGxvZ2ljYWxSaWdo
dCksIG1heChsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIGxvZ2ljYWxUb3Ap
LCBsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIGxvZ2ljYWxUb3AgKyBsb2dp
Y2FsSGVpZ2h0KSkpOwogICAgIExheW91dFVuaXQgcm9vdEJsb2NrTG9naWNhbFJpZ2h0ID0gbWlu
KGxvZ2ljYWxSaWdodFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIGxvZ2ljYWxUb3ApLCBsb2dp
Y2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBsb2dpY2FsVG9wICsgbG9naWNhbEhl
aWdodCkpOwogICAgIExheW91dFVuaXQgcm9vdEJsb2NrTG9naWNhbFdpZHRoID0gcm9vdEJsb2Nr
TG9naWNhbFJpZ2h0IC0gcm9vdEJsb2NrTG9naWNhbExlZnQ7Ci0gICAgaWYgKHJvb3RCbG9ja0xv
Z2ljYWxXaWR0aCA8PSBaRVJPX0xBWU9VVF9VTklUKQorICAgIGlmIChyb290QmxvY2tMb2dpY2Fs
V2lkdGggPD0gMCkKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKIAogICAgIExheW91dFJl
Y3QgZ2FwUmVjdCA9IHJvb3RCbG9jay0+bG9naWNhbFJlY3RUb1BoeXNpY2FsUmVjdChyb290Qmxv
Y2tQaHlzaWNhbFBvc2l0aW9uLCBMYXlvdXRSZWN0KHJvb3RCbG9ja0xvZ2ljYWxMZWZ0LCByb290
QmxvY2tMb2dpY2FsVG9wLCByb290QmxvY2tMb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpKTsK
QEAgLTM4MTMsOCArMzgxMyw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2Jq
ZWN0KFIKICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20gPSBsb2dpY2Fs
Qm90dG9tRm9yRmxvYXQocik7CiAKICAgICAgICAgICAgICAgICAvLyBGaXggZm9yIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDk5NS4KLSAgICAgICAgICAgICAgICBp
ZiAobG9naWNhbEJvdHRvbSA8IDAgfHwgbG9naWNhbEJvdHRvbSA8IGxvZ2ljYWxUb3AgfHwgbG9n
aWNhbFRvcCA9PSBNQVhfTEFZT1VUX1VOSVQpCi0gICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxC
b3R0b20gPSBNQVhfTEFZT1VUX1VOSVQ7CisgICAgICAgICAgICAgICAgaWYgKGxvZ2ljYWxCb3R0
b20gPCAwIHx8IGxvZ2ljYWxCb3R0b20gPCBsb2dpY2FsVG9wIHx8IGxvZ2ljYWxUb3AgPT0gTGF5
b3V0VW5pdDo6bWF4KCkpCisgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxCb3R0b20gPSBMYXlv
dXRVbml0OjptYXgoKTsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gU3BlY2lhbC1jYXNlIHplcm8tIGFuZCBsZXNzLXRoYW4temVyby1oZWlnaHQgZmxvYXRz
OiB0aG9zZSBkb24ndCB0b3VjaAogICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbGluZSB0aGF0
IHRoZXkncmUgb24sIGJ1dCBpdCBzdGlsbCBuZWVkcyB0byBiZSBkaXJ0aWVkLiBUaGlzIGlzCkBA
IC00MjY3LDcgKzQyNjcsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpuZXh0RmxvYXRMb2dp
Y2FsCiAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKICAgICAgICAgcmV0dXJuIGxvZ2ljYWxI
ZWlnaHQ7CiAKLSAgICBMYXlvdXRVbml0IGJvdHRvbSA9IE1BWF9MQVlPVVRfVU5JVDsKKyAgICBM
YXlvdXRVbml0IGJvdHRvbSA9IExheW91dFVuaXQ6Om1heCgpOwogICAgIGNvbnN0IEZsb2F0aW5n
T2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsK
ICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVu
ZCgpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2Jq
ZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewpAQCAtNDI3NywxNCArNDI3NywxNCBA
QCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpuZXh0RmxvYXRMb2dpY2FsCiAgICAgICAgICAgICBi
b3R0b20gPSBtaW4oZmxvYXRCb3R0b20sIGJvdHRvbSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGJv
dHRvbSA9PSBNQVhfTEFZT1VUX1VOSVQgPyBaRVJPX0xBWU9VVF9VTklUIDogYm90dG9tOworICAg
IHJldHVybiBib3R0b20gPT0gTGF5b3V0VW5pdDo6bWF4KCkgPyBMYXlvdXRVbml0KCkgOiBib3R0
b207CiB9CiAKIExheW91dFVuaXQgUmVuZGVyQmxvY2s6Omxvd2VzdEZsb2F0TG9naWNhbEJvdHRv
bShGbG9hdGluZ09iamVjdDo6VHlwZSBmbG9hdFR5cGUpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Zs
b2F0aW5nT2JqZWN0cykKLSAgICAgICAgcmV0dXJuIFpFUk9fTEFZT1VUX1VOSVQ7Ci0gICAgTGF5
b3V0VW5pdCBsb3dlc3RGbG9hdEJvdHRvbSA9IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAgIHJl
dHVybiAwOworICAgIExheW91dFVuaXQgbG93ZXN0RmxvYXRCb3R0b20gPSAwOwogICAgIGNvbnN0
IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3Rz
LT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2Jq
ZWN0U2V0LmVuZCgpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZs
b2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewpAQCAtNDMwMiw3ICs0
MzAyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bWFya0xpbmVzRGlydHlJbkJsb2NrUgogCiAgICAg
Um9vdElubGluZUJveCogbG93ZXN0RGlydHlMaW5lID0gbGFzdFJvb3RCb3goKTsKICAgICBSb290
SW5saW5lQm94KiBhZnRlckxvd2VzdCA9IGxvd2VzdERpcnR5TGluZTsKLSAgICB3aGlsZSAobG93
ZXN0RGlydHlMaW5lICYmIGxvd2VzdERpcnR5TGluZS0+bGluZUJvdHRvbVdpdGhMZWFkaW5nKCkg
Pj0gbG9naWNhbEJvdHRvbSAmJiBsb2dpY2FsQm90dG9tIDwgTUFYX0xBWU9VVF9VTklUKSB7Cisg
ICAgd2hpbGUgKGxvd2VzdERpcnR5TGluZSAmJiBsb3dlc3REaXJ0eUxpbmUtPmxpbmVCb3R0b21X
aXRoTGVhZGluZygpID49IGxvZ2ljYWxCb3R0b20gJiYgbG9naWNhbEJvdHRvbSA8IExheW91dFVu
aXQ6Om1heCgpKSB7CiAgICAgICAgIGFmdGVyTG93ZXN0ID0gbG93ZXN0RGlydHlMaW5lOwogICAg
ICAgICBsb3dlc3REaXJ0eUxpbmUgPSBsb3dlc3REaXJ0eUxpbmUtPnByZXZSb290Qm94KCk7CiAg
ICAgfQpAQCAtNDM5Myw4ICs0MzkzLDggQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHMo
KQogICAgICAgICBhZGRJbnRydWRpbmdGbG9hdHMoYmxvY2ssIGxvZ2ljYWxMZWZ0T2Zmc2V0LCBs
b2dpY2FsVG9wT2Zmc2V0KTsKIAogICAgIGlmIChjaGlsZHJlbklubGluZSgpKSB7Ci0gICAgICAg
IExheW91dFVuaXQgY2hhbmdlTG9naWNhbFRvcCA9IE1BWF9MQVlPVVRfVU5JVDsKLSAgICAgICAg
TGF5b3V0VW5pdCBjaGFuZ2VMb2dpY2FsQm90dG9tID0gTUlOX0xBWU9VVF9VTklUOworICAgICAg
ICBMYXlvdXRVbml0IGNoYW5nZUxvZ2ljYWxUb3AgPSBMYXlvdXRVbml0OjptYXgoKTsKKyAgICAg
ICAgTGF5b3V0VW5pdCBjaGFuZ2VMb2dpY2FsQm90dG9tID0gTGF5b3V0VW5pdDo6bWluKCk7CiAg
ICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewogICAgICAgICAgICAgY29uc3QgRmxvYXRp
bmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgp
OwogICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09i
amVjdFNldC5lbmQoKTsKQEAgLTQ0NzUsNyArNDQ3NSw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxv
Y2s6OmFkZE92ZXJoYW5naW5nRmwKICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGNoaWxk
RW5kID0gY2hpbGQtPm1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5lbmQoKTsKICAgICBmb3IgKEZs
b2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgY2hpbGRJdCA9IGNoaWxkLT5tX2Zsb2F0aW5nT2JqZWN0
cy0+c2V0KCkuYmVnaW4oKTsgY2hpbGRJdCAhPSBjaGlsZEVuZDsgKytjaGlsZEl0KSB7CiAgICAg
ICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKmNoaWxkSXQ7Ci0gICAgICAgIExheW91dFVuaXQgbG9n
aWNhbEJvdHRvbUZvckZsb2F0ID0gbWluKHRoaXMtPmxvZ2ljYWxCb3R0b21Gb3JGbG9hdChyKSwg
TUFYX0xBWU9VVF9VTklUIC0gY2hpbGRMb2dpY2FsVG9wKTsKKyAgICAgICAgTGF5b3V0VW5pdCBs
b2dpY2FsQm90dG9tRm9yRmxvYXQgPSBtaW4odGhpcy0+bG9naWNhbEJvdHRvbUZvckZsb2F0KHIp
LCBMYXlvdXRVbml0OjptYXgoKSAtIGNoaWxkTG9naWNhbFRvcCk7CiAgICAgICAgIExheW91dFVu
aXQgbG9naWNhbEJvdHRvbSA9IGNoaWxkTG9naWNhbFRvcCArIGxvZ2ljYWxCb3R0b21Gb3JGbG9h
dDsKICAgICAgICAgbG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tID0gbWF4KGxvd2VzdEZsb2F0TG9n
aWNhbEJvdHRvbSwgbG9naWNhbEJvdHRvbSk7CiAKQEAgLTQ2NjAsNyArNDY2MCw3IEBAIExheW91
dFVuaXQgUmVuZGVyQmxvY2s6OmdldENsZWFyRGVsdGEoUmUKICAgICB9CiAKICAgICAvLyBXZSBh
bHNvIGNsZWFyIGZsb2F0cyBpZiB3ZSBhcmUgdG9vIGJpZyB0byBzaXQgb24gdGhlIHNhbWUgbGlu
ZSBhcyBhIGZsb2F0IChhbmQgd2lzaCB0byBhdm9pZCBmbG9hdHMgYnkgZGVmYXVsdCkuCi0gICAg
TGF5b3V0VW5pdCByZXN1bHQgPSBjbGVhclNldCA/IG1heChaRVJPX0xBWU9VVF9VTklULCBsb2dp
Y2FsQm90dG9tIC0gbG9naWNhbFRvcCkgOiBaRVJPX0xBWU9VVF9VTklUOworICAgIExheW91dFVu
aXQgcmVzdWx0ID0gY2xlYXJTZXQgPyBtYXg8TGF5b3V0VW5pdD4oMCwgbG9naWNhbEJvdHRvbSAt
IGxvZ2ljYWxUb3ApIDogTGF5b3V0VW5pdCgpOwogICAgIGlmICghcmVzdWx0ICYmIGNoaWxkLT5h
dm9pZHNGbG9hdHMoKSkgewogICAgICAgICBMYXlvdXRVbml0IG5ld0xvZ2ljYWxUb3AgPSBsb2dp
Y2FsVG9wOwogICAgICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtNTc4MCw3ICs1NzgwLDcgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUlubGluZVByZWZlcnJlZAogCiAgICAgUmVuZGVyU3R5bGUq
IHN0eWxlVG9Vc2UgPSBzdHlsZSgpOwogICAgIFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxvY2sg
PSB0aGlzLT5jb250YWluaW5nQmxvY2soKTsKLSAgICBMYXlvdXRVbml0IGN3ID0gY29udGFpbmlu
Z0Jsb2NrID8gY29udGFpbmluZ0Jsb2NrLT5jb250ZW50TG9naWNhbFdpZHRoKCkgOiBaRVJPX0xB
WU9VVF9VTklUOworICAgIExheW91dFVuaXQgY3cgPSBjb250YWluaW5nQmxvY2sgPyBjb250YWlu
aW5nQmxvY2stPmNvbnRlbnRMb2dpY2FsV2lkdGgoKSA6IExheW91dFVuaXQoKTsKIAogICAgIC8v
IElmIHdlIGFyZSBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lLCB3ZSB3YW50IHRvIGlnbm9yZSBhbGwg
d2hpdGUtc3BhY2UuCiAgICAgLy8gQWxzbyBzdHJpcCBzcGFjZXMgaWYgd2UgcHJldmlvdXNseSBo
YWQgdGV4dCB0aGF0IGVuZGVkIGluIGEgdHJhaWxpbmcgc3BhY2UuCkBAIC02MTU3LDggKzYxNTcs
OCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlQmxvY2tQcmVmZXJyZWRMCiAgICAgfQogCiAg
ICAgLy8gQWx3YXlzIG1ha2Ugc3VyZSB0aGVzZSB2YWx1ZXMgYXJlIG5vbi1uZWdhdGl2ZS4KLSAg
ICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1heChaRVJPX0xBWU9VVF9VTklULCBtX21p
blByZWZlcnJlZExvZ2ljYWxXaWR0aCk7Ci0gICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgg
PSBtYXgoWkVST19MQVlPVVRfVU5JVCwgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgpOworICAg
IG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4PExheW91dFVuaXQ+KDAsIG1fbWluUHJl
ZmVycmVkTG9naWNhbFdpZHRoKTsKKyAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1h
eDxMYXlvdXRVbml0PigwLCBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCk7CiAKICAgICBtX21h
eFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1heChmbG9hdExlZnRXaWR0aCArIGZsb2F0UmlnaHRX
aWR0aCwgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgpOwogfQpAQCAtNjU4OSw3ICs2NTg5LDcg
QEAgc3RhdGljIGludCBnZXRIZWlnaHRGb3JMaW5lQ291bnQoUmVuZGVyQgogICAgICAgICBpZiAo
YmxvY2stPmNoaWxkcmVuSW5saW5lKCkpIHsKICAgICAgICAgICAgIGZvciAoUm9vdElubGluZUJv
eCogYm94ID0gYmxvY2stPmZpcnN0Um9vdEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFJvb3RC
b3goKSkgewogICAgICAgICAgICAgICAgIGlmICgrK2NvdW50ID09IGwpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBib3gtPmxpbmVCb3R0b20oKSArIChpbmNsdWRlQm90dG9tID8gKGJsb2Nr
LT5ib3JkZXJCb3R0b20oKSArIGJsb2NrLT5wYWRkaW5nQm90dG9tKCkpIDogWkVST19MQVlPVVRf
VU5JVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBib3gtPmxpbmVCb3R0b20oKSArIChp
bmNsdWRlQm90dG9tID8gKGJsb2NrLT5ib3JkZXJCb3R0b20oKSArIGJsb2NrLT5wYWRkaW5nQm90
dG9tKCkpIDogTGF5b3V0VW5pdCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg
ICBlbHNlIHsKQEAgLTY1OTgsNyArNjU5OCw3IEBAIHN0YXRpYyBpbnQgZ2V0SGVpZ2h0Rm9yTGlu
ZUNvdW50KFJlbmRlckIKICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tMaW5lcyhvYmop
KSB7CiAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHQgPSBnZXRIZWlnaHRGb3JMaW5lQ291
bnQodG9SZW5kZXJCbG9jayhvYmopLCBsLCBmYWxzZSwgY291bnQpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAocmVzdWx0ICE9IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdCArIG9iai0+eSgpICsgKGluY2x1ZGVCb3R0b20gPyAoYmxvY2stPmJvcmRlckJvdHRvbSgp
ICsgYmxvY2stPnBhZGRpbmdCb3R0b20oKSkgOiBaRVJPX0xBWU9VVF9VTklUKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyBvYmotPnkoKSArIChpbmNsdWRlQm90dG9t
ID8gKGJsb2NrLT5ib3JkZXJCb3R0b20oKSArIGJsb2NrLT5wYWRkaW5nQm90dG9tKCkpIDogTGF5
b3V0VW5pdCgpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFvYmotPmlzRmxvYXRpbmdP
ck91dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAhb2JqLT5pc1J1bkluKCkpCiAgICAgICAgICAgICAg
ICAgICAgIG5vcm1hbEZsb3dDaGlsZFdpdGhvdXRMaW5lcyA9IG9iajsKICAgICAgICAgICAgIH0K
QEAgLTY2ODcsMTEgKzY2ODcsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6Ym9yZGVyRml0QWRqdXN0
KExheW91dAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBXYWxrIGFueSBub3JtYWwgZmxvdyBs
aW5lcyB0byBzbnVnbHkgZml0LgotICAgIExheW91dFVuaXQgbGVmdCA9IE1BWF9MQVlPVVRfVU5J
VDsKLSAgICBMYXlvdXRVbml0IHJpZ2h0ID0gTUlOX0xBWU9VVF9VTklUOworICAgIExheW91dFVu
aXQgbGVmdCA9IExheW91dFVuaXQ6Om1heCgpOworICAgIExheW91dFVuaXQgcmlnaHQgPSBMYXlv
dXRVbml0OjptaW4oKTsKICAgICBMYXlvdXRVbml0IG9sZFdpZHRoID0gcmVjdC53aWR0aCgpOwog
ICAgIGFkanVzdEZvckJvcmRlckZpdCgwLCBsZWZ0LCByaWdodCk7Ci0gICAgaWYgKGxlZnQgIT0g
TUFYX0xBWU9VVF9VTklUKSB7CisgICAgaWYgKGxlZnQgIT0gTGF5b3V0VW5pdDo6bWF4KCkpIHsK
ICAgICAgICAgbGVmdCA9IG1pbihsZWZ0LCBvbGRXaWR0aCAtIChib3JkZXJSaWdodCgpICsgcGFk
ZGluZ1JpZ2h0KCkpKTsKIAogICAgICAgICBsZWZ0IC09IChib3JkZXJMZWZ0KCkgKyBwYWRkaW5n
TGVmdCgpKTsKQEAgLTY3MDAsNyArNjcwMCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmJvcmRlckZp
dEFkanVzdChMYXlvdXQKICAgICAgICAgICAgIHJlY3QuZXhwYW5kKC1sZWZ0LCAwKTsKICAgICAg
ICAgfQogICAgIH0KLSAgICBpZiAocmlnaHQgIT0gTUlOX0xBWU9VVF9VTklUKSB7CisgICAgaWYg
KHJpZ2h0ICE9IExheW91dFVuaXQ6Om1pbigpKSB7CiAgICAgICAgIHJpZ2h0ID0gbWF4KHJpZ2h0
LCBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpKTsKIAogICAgICAgICByaWdodCArPSAoYm9y
ZGVyUmlnaHQoKSArIHBhZGRpbmdSaWdodCgpKTsKQEAgLTY4ODcsOCArNjg4Nyw4IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3QKICAgICAgICAgLy8gRklYTUU6IFRo
aXMgaXMgd3JvbmcgZm9yIGJsb2NrLWZsb3dzIHRoYXQgYXJlIGhvcml6b250YWwuCiAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Njc4MQogICAgICAg
ICBib29sIHByZXZJbmxpbmVIYXNMaW5lQm94ID0gdG9SZW5kZXJJbmxpbmUoaW5saW5lRWxlbWVu
dENvbnRpbnVhdGlvbigpLT5ub2RlKCktPnJlbmRlcmVyKCkpLT5maXJzdExpbmVCb3goKTsgCi0g
ICAgICAgIGZsb2F0IHRvcE1hcmdpbiA9IHByZXZJbmxpbmVIYXNMaW5lQm94ID8gY29sbGFwc2Vk
TWFyZ2luQmVmb3JlKCkgOiBaRVJPX0xBWU9VVF9VTklUOwotICAgICAgICBmbG9hdCBib3R0b21N
YXJnaW4gPSBuZXh0SW5saW5lSGFzTGluZUJveCA/IGNvbGxhcHNlZE1hcmdpbkFmdGVyKCkgOiBa
RVJPX0xBWU9VVF9VTklUOworICAgICAgICBmbG9hdCB0b3BNYXJnaW4gPSBwcmV2SW5saW5lSGFz
TGluZUJveCA/IGNvbGxhcHNlZE1hcmdpbkJlZm9yZSgpIDogTGF5b3V0VW5pdCgpOworICAgICAg
ICBmbG9hdCBib3R0b21NYXJnaW4gPSBuZXh0SW5saW5lSGFzTGluZUJveCA/IGNvbGxhcHNlZE1h
cmdpbkFmdGVyKCkgOiBMYXlvdXRVbml0KCk7CiAgICAgICAgIExheW91dFJlY3QgcmVjdChhZGRp
dGlvbmFsT2Zmc2V0LngoKSwgYWRkaXRpb25hbE9mZnNldC55KCkgLSB0b3BNYXJnaW4sIHdpZHRo
KCksIGhlaWdodCgpICsgdG9wTWFyZ2luICsgYm90dG9tTWFyZ2luKTsKICAgICAgICAgaWYgKCFy
ZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJlY3RzLmFwcGVuZChwaXhlbFNuYXBwZWRJbnRS
ZWN0KHJlY3QpKTsKQEAgLTY5OTMsNyArNjk5Myw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6
OmFwcGx5QmVmb3JlQnJlYWsKICAgICAgICAgaWYgKGNoZWNrQ29sdW1uQnJlYWtzKQogICAgICAg
ICAgICAgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5hZGRGb3JjZWRDb2x1bW5CcmVhayhjaGlsZCwg
bG9naWNhbE9mZnNldCk7CiAgICAgICAgIGlmIChjaGVja1JlZ2lvbkJyZWFrcykgewotICAgICAg
ICAgICAgTGF5b3V0VW5pdCBvZmZzZXRCcmVha0FkanVzdG1lbnQgPSBaRVJPX0xBWU9VVF9VTklU
OworICAgICAgICAgICAgTGF5b3V0VW5pdCBvZmZzZXRCcmVha0FkanVzdG1lbnQgPSAwOwogICAg
ICAgICAgICAgaWYgKGVuY2xvc2luZ1JlbmRlckZsb3dUaHJlYWQoKS0+YWRkRm9yY2VkUmVnaW9u
QnJlYWsob2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpICsgbG9naWNhbE9mZnNldCwg
Y2hpbGQsIHRydWUsICZvZmZzZXRCcmVha0FkanVzdG1lbnQpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBsb2dpY2FsT2Zmc2V0ICsgb2Zmc2V0QnJlYWtBZGp1c3RtZW50OwogICAgICAgICB9CkBA
IC03MDE1LDggKzcwMTUsOCBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphcHBseUFmdGVyQnJl
YWsoCiAgICAgICAgIGlmIChjaGVja0NvbHVtbkJyZWFrcykKICAgICAgICAgICAgIHZpZXcoKS0+
bGF5b3V0U3RhdGUoKS0+YWRkRm9yY2VkQ29sdW1uQnJlYWsoY2hpbGQsIGxvZ2ljYWxPZmZzZXQp
OwogICAgICAgICBpZiAoY2hlY2tSZWdpb25CcmVha3MpIHsKLSAgICAgICAgICAgIExheW91dFVu
aXQgbWFyZ2luT2Zmc2V0ID0gbWFyZ2luSW5mby5jYW5Db2xsYXBzZVdpdGhNYXJnaW5CZWZvcmUo
KSA/IFpFUk9fTEFZT1VUX1VOSVQgOiBtYXJnaW5JbmZvLm1hcmdpbigpOwotICAgICAgICAgICAg
TGF5b3V0VW5pdCBvZmZzZXRCcmVha0FkanVzdG1lbnQgPSBaRVJPX0xBWU9VVF9VTklUOworICAg
ICAgICAgICAgTGF5b3V0VW5pdCBtYXJnaW5PZmZzZXQgPSBtYXJnaW5JbmZvLmNhbkNvbGxhcHNl
V2l0aE1hcmdpbkJlZm9yZSgpID8gTGF5b3V0VW5pdCgpIDogbWFyZ2luSW5mby5tYXJnaW4oKTsK
KyAgICAgICAgICAgIExheW91dFVuaXQgb2Zmc2V0QnJlYWtBZGp1c3RtZW50ID0gMDsKICAgICAg
ICAgICAgIGlmIChlbmNsb3NpbmdSZW5kZXJGbG93VGhyZWFkKCktPmFkZEZvcmNlZFJlZ2lvbkJy
ZWFrKG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSArIGxvZ2ljYWxPZmZzZXQgKyBt
YXJnaW5PZmZzZXQsIGNoaWxkLCBmYWxzZSwgJm9mZnNldEJyZWFrQWRqdXN0bWVudCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGxvZ2ljYWxPZmZzZXQgKyBvZmZzZXRCcmVha0FkanVzdG1lbnQ7
CiAgICAgICAgIH0KQEAgLTcwNzgsNyArNzA3OCw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6
OmFkanVzdEZvclVuc3BsaXQKICAgICAgICAgfHwgKGNoZWNrUmVnaW9uQnJlYWtzICYmIGNoaWxk
LT5zdHlsZSgpLT5yZWdpb25CcmVha0luc2lkZSgpID09IFBCQVZPSUQpOwogICAgIGlmICghaXNV
bnNwbGl0dGFibGUpCiAgICAgICAgIHJldHVybiBsb2dpY2FsT2Zmc2V0OwotICAgIExheW91dFVu
aXQgY2hpbGRMb2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodEZvckNoaWxkKGNoaWxkKSArIChp
bmNsdWRlTWFyZ2lucyA/IG1hcmdpbkJlZm9yZUZvckNoaWxkKGNoaWxkKSArIG1hcmdpbkFmdGVy
Rm9yQ2hpbGQoY2hpbGQpIDogWkVST19MQVlPVVRfVU5JVCk7CisgICAgTGF5b3V0VW5pdCBjaGls
ZExvZ2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoY2hpbGQpICsgKGluY2x1ZGVN
YXJnaW5zID8gbWFyZ2luQmVmb3JlRm9yQ2hpbGQoY2hpbGQpICsgbWFyZ2luQWZ0ZXJGb3JDaGls
ZChjaGlsZCkgOiBMYXlvdXRVbml0KCkpOwogICAgIExheW91dFN0YXRlKiBsYXlvdXRTdGF0ZSA9
IHZpZXcoKS0+bGF5b3V0U3RhdGUoKTsKICAgICBpZiAobGF5b3V0U3RhdGUtPm1fY29sdW1uSW5m
bykKICAgICAgICAgbGF5b3V0U3RhdGUtPm1fY29sdW1uSW5mby0+dXBkYXRlTWluaW11bUNvbHVt
bkhlaWdodChjaGlsZExvZ2ljYWxIZWlnaHQpOwpAQCAtNzE1NiwxMiArNzE1NiwxMiBAQCB2b2lk
IFJlbmRlckJsb2NrOjphZGp1c3RMaW5lUG9zaXRpb25Gb3JQCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIGlmIChsaW5lSGVpZ2h0ID4gcGFnZUxvZ2ljYWxIZWlnaHQpIHsKICAgICAgICAg
ICAgIC8vIFNwbGl0IHRoZSB0b3AgbWFyZ2luIGluIG9yZGVyIHRvIGF2b2lkIHNwbGl0dGluZyB0
aGUgdmlzaWJsZSBwYXJ0IG9mIHRoZSBsaW5lLgotICAgICAgICAgICAgcmVtYWluaW5nTG9naWNh
bEhlaWdodCAtPSBtaW4obGluZUhlaWdodCAtIHBhZ2VMb2dpY2FsSGVpZ2h0LCBtYXgoWkVST19M
QVlPVVRfVU5JVCwgbG9naWNhbFZpc3VhbE92ZXJmbG93LnkoKSAtIGxpbmVCb3gtPmxpbmVUb3BX
aXRoTGVhZGluZygpKSk7CisgICAgICAgICAgICByZW1haW5pbmdMb2dpY2FsSGVpZ2h0IC09IG1p
bihsaW5lSGVpZ2h0IC0gcGFnZUxvZ2ljYWxIZWlnaHQsIG1heDxMYXlvdXRVbml0PigwLCBsb2dp
Y2FsVmlzdWFsT3ZlcmZsb3cueSgpIC0gbGluZUJveC0+bGluZVRvcFdpdGhMZWFkaW5nKCkpKTsK
ICAgICAgICAgfQotICAgICAgICBMYXlvdXRVbml0IHRvdGFsTG9naWNhbEhlaWdodCA9IGxpbmVI
ZWlnaHQgKyBtYXgoWkVST19MQVlPVVRfVU5JVCwgbG9naWNhbE9mZnNldCk7CisgICAgICAgIExh
eW91dFVuaXQgdG90YWxMb2dpY2FsSGVpZ2h0ID0gbGluZUhlaWdodCArIG1heDxMYXlvdXRVbml0
PigwLCBsb2dpY2FsT2Zmc2V0KTsKICAgICAgICAgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdo
dEF0TmV3T2Zmc2V0ID0gaGFzVW5pZm9ybVBhZ2VMb2dpY2FsSGVpZ2h0ID8gcGFnZUxvZ2ljYWxI
ZWlnaHQgOiBwYWdlTG9naWNhbEhlaWdodEZvck9mZnNldChsb2dpY2FsT2Zmc2V0ICsgcmVtYWlu
aW5nTG9naWNhbEhlaWdodCk7CiAgICAgICAgIGlmIChsaW5lQm94ID09IGZpcnN0Um9vdEJveCgp
ICYmIHRvdGFsTG9naWNhbEhlaWdodCA8IHBhZ2VMb2dpY2FsSGVpZ2h0QXROZXdPZmZzZXQgJiYg
IWlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmICFpc1RhYmxlQ2VsbCgpKQotICAgICAgICAgICAg
c2V0UGFnaW5hdGlvblN0cnV0KHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQgKyBtYXgoWkVST19MQVlP
VVRfVU5JVCwgbG9naWNhbE9mZnNldCkpOworICAgICAgICAgICAgc2V0UGFnaW5hdGlvblN0cnV0
KHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQgKyBtYXg8TGF5b3V0VW5pdD4oMCwgbG9naWNhbE9mZnNl
dCkpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGRlbHRhICs9IHJlbWFpbmluZ0xvZ2lj
YWxIZWlnaHQ7CiAgICAgICAgICAgICBsaW5lQm94LT5zZXRQYWdpbmF0aW9uU3RydXQocmVtYWlu
aW5nTG9naWNhbEhlaWdodCk7CkBAIC03MjQ5LDcgKzcyNDksNyBAQCBMYXlvdXRVbml0IFJlbmRl
ckJsb2NrOjpvZmZzZXRGcm9tTG9naWNhCiB7CiAgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRl
ID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpOwogICAgIGlmIChsYXlvdXRTdGF0ZSAmJiAhbGF5b3V0
U3RhdGUtPmlzUGFnaW5hdGVkKCkpCi0gICAgICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOwor
ICAgICAgICByZXR1cm4gMDsKICAgICBpZiAobGF5b3V0U3RhdGUpIHsKICAgICAgICAgLy8gRklY
TUU6IFNhbml0eSBjaGVjayB0aGF0IHRoZSByZW5kZXJlciBpbiB0aGUgbGF5b3V0IHN0YXRlIGlz
IG91cnMsIHNpbmNlIG90aGVyd2lzZSB0aGUgY29tcHV0YXRpb24gd2lsbCBiZSBvZmYuCiAgICAg
ICAgIC8vIFJpZ2h0IG5vdyB0aGlzIGFzc2VydCBnZXRzIGhpdCBpbnNpZGUgY29tcHV0ZUxvZ2lj
YWxIZWlnaHQgZm9yIHBlcmNlbnRhZ2UgbWFyZ2lucywgc2luY2UgdGhleSdyZSBjb21wdXRlZCB1
c2luZwpAQCAtNzI2NSw3ICs3MjY1LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6b2Zmc2V0
RnJvbUxvZ2ljYQogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgc2xvd2VyIHBhdGggdGhhdCBkb2Vz
bid0IHVzZSBsYXlvdXQgc3RhdGUgYW5kIHJlbGllcyBvbiBnZXR0aW5nIHlvdXIgbG9naWNhbCB0
b3AgaW5zaWRlIHRoZSBlbmNsb3NpbmcgZmxvdyB0aHJlYWQuIEl0IGRvZXNuJ3QKICAgICAvLyB3
b3JrIHdpdGggY29sdW1ucyBvciBwYWdlcyBjdXJyZW50bHksIGJ1dCBpdCBzaG91bGQgb25jZSB0
aGV5IGhhdmUgYmVlbiBzd2l0Y2hlZCBvdmVyIHRvIHVzaW5nIGZsb3cgdGhyZWFkcy4KICAgICBp
ZiAoIWluUmVuZGVyRmxvd1RocmVhZCgpKQotICAgICAgICByZXR1cm4gWkVST19MQVlPVVRfVU5J
VDsKKyAgICAgICAgcmV0dXJuIDA7CiAKICAgICBjb25zdCBSZW5kZXJCbG9jayogY3VycmVudEJs
b2NrID0gdGhpczsKICAgICBMYXlvdXRSZWN0IGJsb2NrUmVjdCgwLCAwLCB3aWR0aCgpLCBoZWln
aHQoKSk7CkBAIC03Mjc0LDcgKzcyNzQsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpvZmZz
ZXRGcm9tTG9naWNhCiAgICAgICAgIFJlbmRlckJsb2NrKiBjb250YWluZXJCbG9jayA9IGN1cnJl
bnRCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAgIEFTU0VSVChjb250YWluZXJCbG9j
ayk7CiAgICAgICAgIGlmICghY29udGFpbmVyQmxvY2spCi0gICAgICAgICAgICByZXR1cm4gWkVS
T19MQVlPVVRfVU5JVDsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBMYXlvdXRQb2lu
dCBjdXJyZW50QmxvY2tMb2NhdGlvbiA9IGN1cnJlbnRCbG9jay0+bG9jYXRpb24oKTsKIAogICAg
ICAgICBpZiAoY29udGFpbmVyQmxvY2stPnN0eWxlKCktPndyaXRpbmdNb2RlKCkgIT0gY3VycmVu
dEJsb2NrLT5zdHlsZSgpLT53cml0aW5nTW9kZSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDksNyBA
QCBwdWJsaWM6CiAgICAgLy8gY29tcHV0ZSB0aGUgcmVnaW9uIGFsbCBvdmVyIGFnYWluIHdoZW4g
eW91IGFscmVhZHkga25vdyBpdC4KICAgICBMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0
aEZvckxpbmUoTGF5b3V0VW5pdCBwb3NpdGlvbiwgYm9vbCBmaXJzdExpbmUsIFJlbmRlclJlZ2lv
biogcmVnaW9uLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UsIExh
eW91dFVuaXQgbG9naWNhbEhlaWdodCA9IDApIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
bWF4KFpFUk9fTEFZT1VUX1VOSVQsIGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUocG9zaXRpb24s
IGZpcnN0TGluZSwgcmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlLCBsb2dp
Y2FsSGVpZ2h0KQorICAgICAgICByZXR1cm4gbWF4PExheW91dFVuaXQ+KDAsIGxvZ2ljYWxSaWdo
dE9mZnNldEZvckxpbmUocG9zaXRpb24sIGZpcnN0TGluZSwgcmVnaW9uLCBvZmZzZXRGcm9tTG9n
aWNhbFRvcE9mRmlyc3RQYWdlLCBsb2dpY2FsSGVpZ2h0KQogICAgICAgICAgICAgLSBsb2dpY2Fs
TGVmdE9mZnNldEZvckxpbmUocG9zaXRpb24sIGZpcnN0TGluZSwgcmVnaW9uLCBvZmZzZXRGcm9t
TG9naWNhbFRvcE9mRmlyc3RQYWdlLCBsb2dpY2FsSGVpZ2h0KSk7CiAgICAgfQogICAgIExheW91
dFVuaXQgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IHBvc2l0aW9uLCBib29s
IGZpcnN0TGluZSwgUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQgb2Zmc2V0RnJvbUxv
Z2ljYWxUb3BPZkZpcnN0UGFnZSwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMCkgY29uc3Qg
CkBAIC0yOTcsMTIgKzI5NywxMiBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgY29sdW1uQ291bnQo
Q29sdW1uSW5mbyopIGNvbnN0OwogICAgIExheW91dFJlY3QgY29sdW1uUmVjdEF0KENvbHVtbklu
Zm8qLCB1bnNpZ25lZCkgY29uc3Q7CiAKLSAgICBMYXlvdXRVbml0IHBhZ2luYXRpb25TdHJ1dCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3BhZ2luYXRpb25TdHJ1
dCA6IFpFUk9fTEFZT1VUX1VOSVQ7IH0KKyAgICBMYXlvdXRVbml0IHBhZ2luYXRpb25TdHJ1dCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3BhZ2luYXRpb25TdHJ1
dCA6IExheW91dFVuaXQoKTsgfQogICAgIHZvaWQgc2V0UGFnaW5hdGlvblN0cnV0KExheW91dFVu
aXQpOwogICAgIAogICAgIC8vIFRoZSBwYWdlIGxvZ2ljYWwgb2Zmc2V0IGlzIHRoZSBvYmplY3Qn
cyBvZmZzZXQgZnJvbSB0aGUgdG9wIG9mIHRoZSBwYWdlIGluIHRoZSBwYWdlIHByb2dyZXNzaW9u
CiAgICAgLy8gZGlyZWN0aW9uIChzbyBhbiB4LW9mZnNldCBpbiB2ZXJ0aWNhbCB0ZXh0IGFuZCBh
IHktb2Zmc2V0IGZvciBob3Jpem9udGFsIHRleHQpLgotICAgIExheW91dFVuaXQgcGFnZUxvZ2lj
YWxPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9wYWdl
TG9naWNhbE9mZnNldCA6IFpFUk9fTEFZT1VUX1VOSVQ7IH0KKyAgICBMYXlvdXRVbml0IHBhZ2VM
b2dpY2FsT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1f
cGFnZUxvZ2ljYWxPZmZzZXQgOiBMYXlvdXRVbml0KCk7IH0KICAgICB2b2lkIHNldFBhZ2VMb2dp
Y2FsT2Zmc2V0KExheW91dFVuaXQpOwogCiAgICAgUm9vdElubGluZUJveCogbGluZUdyaWRCb3go
KSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9saW5lR3JpZEJveCA6
IDA7IH0KQEAgLTM3MSw3ICszNzEsNyBAQCBwdWJsaWM6CiAgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
UmlnaHRPZmZzZXRGb3JDb250ZW50KFJlbmRlclJlZ2lvbiosIExheW91dFVuaXQgb2Zmc2V0RnJv
bUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVM
b2dpY2FsV2lkdGhGb3JDb250ZW50KFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IG9m
ZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0CiAgICAgeyAKLSAgICAgICAgcmV0
dXJuIG1heChaRVJPX0xBWU9VVF9VTklULCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KHJl
Z2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgLQorICAgICAgICByZXR1cm4g
bWF4PExheW91dFVuaXQ+KDAsIGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQocmVnaW9uLCBv
ZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSAtCiAgICAgICAgICAgICBsb2dpY2FsTGVm
dE9mZnNldEZvckNvbnRlbnQocmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdl
KSk7IH0KICAgICBMYXlvdXRVbml0IHN0YXJ0T2Zmc2V0Rm9yQ29udGVudChSZW5kZXJSZWdpb24q
IHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSBjb25z
dAogICAgIHsKQEAgLTExNDQsMjAgKzExNDQsMjAgQEAgcHJvdGVjdGVkOgogCiAgICAgICAgIHN0
YXRpYyBMYXlvdXRVbml0IHBvc2l0aXZlTWFyZ2luQmVmb3JlRGVmYXVsdChjb25zdCBSZW5kZXJC
bG9jayogYmxvY2spCiAgICAgICAgIHsgCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptYXgoYmxv
Y2stPm1hcmdpbkJlZm9yZSgpLCBaRVJPX0xBWU9VVF9VTklUKTsKKyAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1heDxMYXlvdXRVbml0PihibG9jay0+bWFyZ2luQmVmb3JlKCksIDApOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgTGF5b3V0VW5pdCBuZWdhdGl2ZU1hcmdpbkJl
Zm9yZURlZmF1bHQoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrKQogICAgICAgICB7IAotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bWF4KC1ibG9jay0+bWFyZ2luQmVmb3JlKCksIFpFUk9fTEFZT1VU
X1VOSVQpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4PExheW91dFVuaXQ+KC1ibG9jay0+
bWFyZ2luQmVmb3JlKCksIDApOwogICAgICAgICB9CiAgICAgICAgIHN0YXRpYyBMYXlvdXRVbml0
IHBvc2l0aXZlTWFyZ2luQWZ0ZXJEZWZhdWx0KGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaykKICAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KGJsb2NrLT5tYXJnaW5BZnRlcigp
LCBaRVJPX0xBWU9VVF9VTklUKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1heDxMYXlvdXRV
bml0PihibG9jay0+bWFyZ2luQWZ0ZXIoKSwgMCk7CiAgICAgICAgIH0KICAgICAgICAgc3RhdGlj
IExheW91dFVuaXQgbmVnYXRpdmVNYXJnaW5BZnRlckRlZmF1bHQoY29uc3QgUmVuZGVyQmxvY2sq
IGJsb2NrKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYXgoLWJsb2NrLT5t
YXJnaW5BZnRlcigpLCBaRVJPX0xBWU9VVF9VTklUKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1heDxMYXlvdXRVbml0PigtYmxvY2stPm1hcmdpbkFmdGVyKCksIDApOwogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBNYXJnaW5WYWx1ZXMgbV9tYXJnaW5zOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHJldmlz
aW9uIDEzMzY3NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVM
YXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQ4LDggKzEyNDgsOCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCB1cGRhdGVSZXBhaW50UmFuZ2VGcm9tQm94KFJvb3RJbmxpbmVCb3gqIGJveCwgTGF5
b3V0VW5pdCBwYWdpbmF0aW9uRGVsdGEgPSAwKQogICAgIHsKICAgICAgICAgbV91c2VzUmVwYWlu
dEJvdW5kcyA9IHRydWU7Ci0gICAgICAgIG1fcmVwYWludExvZ2ljYWxUb3AgPSBtaW4obV9yZXBh
aW50TG9naWNhbFRvcCwgYm94LT5sb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3coKSArIG1pbihwYWdp
bmF0aW9uRGVsdGEsIFpFUk9fTEFZT1VUX1VOSVQpKTsKLSAgICAgICAgbV9yZXBhaW50TG9naWNh
bEJvdHRvbSA9IG1heChtX3JlcGFpbnRMb2dpY2FsQm90dG9tLCBib3gtPmxvZ2ljYWxCb3R0b21W
aXN1YWxPdmVyZmxvdygpICsgbWF4KHBhZ2luYXRpb25EZWx0YSwgWkVST19MQVlPVVRfVU5JVCkp
OworICAgICAgICBtX3JlcGFpbnRMb2dpY2FsVG9wID0gbWluKG1fcmVwYWludExvZ2ljYWxUb3As
IGJveC0+bG9naWNhbFRvcFZpc3VhbE92ZXJmbG93KCkgKyBtaW48TGF5b3V0VW5pdD4ocGFnaW5h
dGlvbkRlbHRhLCAwKSk7CisgICAgICAgIG1fcmVwYWludExvZ2ljYWxCb3R0b20gPSBtYXgobV9y
ZXBhaW50TG9naWNhbEJvdHRvbSwgYm94LT5sb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3coKSAr
IG1heDxMYXlvdXRVbml0PihwYWdpbmF0aW9uRGVsdGEsIDApKTsKICAgICB9CiAgICAgCiAgICAg
Ym9vbCBlbmRMaW5lTWF0Y2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kTGluZU1hdGNoZWQ7IH0K
QEAgLTE3NTMsNyArMTc1Myw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNoZWNrRmxvYXRzSW5DbGVh
bkxpbmUKICAgICAgICAgICAgIExheW91dFVuaXQgZmxvYXRUb3AgPSBpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gZmxvYXRzW2Zsb2F0SW5kZXhdLnJlY3QueSgpIDogZmxvYXRzW2Zsb2F0SW5k
ZXhdLnJlY3QueCgpOwogICAgICAgICAgICAgTGF5b3V0VW5pdCBmbG9hdEhlaWdodCA9IGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBtYXgoZmxvYXRzW2Zsb2F0SW5kZXhdLnJlY3QuaGVpZ2h0
KCksIG5ld1NpemUuaGVpZ2h0KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbWF4KGZsb2F0c1tmbG9hdEluZGV4XS5y
ZWN0LndpZHRoKCksIG5ld1NpemUud2lkdGgoKSk7Ci0gICAgICAgICAgICBmbG9hdEhlaWdodCA9
IG1pbihmbG9hdEhlaWdodCwgTUFYX0xBWU9VVF9VTklUIC0gZmxvYXRUb3ApOworICAgICAgICAg
ICAgZmxvYXRIZWlnaHQgPSBtaW4oZmxvYXRIZWlnaHQsIExheW91dFVuaXQ6Om1heCgpIC0gZmxv
YXRUb3ApOwogICAgICAgICAgICAgbGluZS0+bWFya0RpcnR5KCk7CiAgICAgICAgICAgICBtYXJr
TGluZXNEaXJ0eUluQmxvY2tSYW5nZShsaW5lLT5saW5lQm90dG9tV2l0aExlYWRpbmcoKSwgZmxv
YXRUb3AgKyBmbG9hdEhlaWdodCwgbGluZSk7CiAgICAgICAgICAgICBmbG9hdHNbZmxvYXRJbmRl
eF0ucmVjdC5zZXRTaXplKG5ld1NpemUpOwpAQCAtMjkxOCw3ICsyOTE4LDcgQEAgSW5saW5lSXRl
cmF0b3IgUmVuZGVyQmxvY2s6OkxpbmVCcmVha2VyOgogCiB2b2lkIFJlbmRlckJsb2NrOjphZGRP
dmVyZmxvd0Zyb21JbmxpbmVDaGlsZHJlbigpCiB7Ci0gICAgTGF5b3V0VW5pdCBlbmRQYWRkaW5n
ID0gaGFzT3ZlcmZsb3dDbGlwKCkgPyBwYWRkaW5nRW5kKCkgOiBaRVJPX0xBWU9VVF9VTklUOwor
ICAgIExheW91dFVuaXQgZW5kUGFkZGluZyA9IGhhc092ZXJmbG93Q2xpcCgpID8gcGFkZGluZ0Vu
ZCgpIDogTGF5b3V0VW5pdCgpOwogICAgIC8vIEZJWE1FOiBOZWVkIHRvIGZpbmQgYW5vdGhlciB3
YXkgdG8gZG8gdGhpcywgc2luY2Ugc2Nyb2xsYmFycyBjb3VsZCBzaG93IHdoZW4gd2UgZG9uJ3Qg
d2FudCB0aGVtIHRvLgogICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiAhZW5kUGFkZGluZyAm
JiBub2RlKCkgJiYgbm9kZSgpLT5pc1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSAmJiBzdHlsZSgpLT5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAgIGVuZFBhZGRpbmcgPSAxOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDEzMzY3NykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNjMsNyArMzYzLDcgQEAgaW50IFJlbmRlckJveDo6c2Nyb2xsV2lkdGgoKSBjb25zdAogICAg
IC8vIEZJWE1FOiBOZWVkIHRvIHdvcmsgcmlnaHQgd2l0aCB3cml0aW5nIG1vZGVzLgogICAgIGlm
IChzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAgIHJldHVybiBzbmFw
U2l6ZVRvUGl4ZWwobWF4KGNsaWVudFdpZHRoKCksIGxheW91dE92ZXJmbG93UmVjdCgpLm1heFgo
KSAtIGJvcmRlckxlZnQoKSksIHgoKSArIGNsaWVudExlZnQoKSk7Ci0gICAgcmV0dXJuIGNsaWVu
dFdpZHRoKCkgLSBtaW4oWkVST19MQVlPVVRfVU5JVCwgbGF5b3V0T3ZlcmZsb3dSZWN0KCkueCgp
IC0gYm9yZGVyTGVmdCgpKTsKKyAgICByZXR1cm4gY2xpZW50V2lkdGgoKSAtIG1pbjxMYXlvdXRV
bml0PigwLCBsYXlvdXRPdmVyZmxvd1JlY3QoKS54KCkgLSBib3JkZXJMZWZ0KCkpOwogfQogCiBp
bnQgUmVuZGVyQm94OjpzY3JvbGxIZWlnaHQoKSBjb25zdApAQCAtMTE3OSw3ICsxMTc5LDcgQEAg
TGF5b3V0VW5pdCBSZW5kZXJCb3g6OnNocmlua0xvZ2ljYWxXaWR0aAogICAgIExheW91dFVuaXQg
bG9naWNhbFRvcFBvc2l0aW9uID0gbG9naWNhbFRvcCgpOwogICAgIExheW91dFVuaXQgYWRqdXN0
ZWRQYWdlT2Zmc2V0Rm9yQ29udGFpbmluZ0Jsb2NrID0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZp
cnN0UGFnZSAtIGxvZ2ljYWxUb3AoKTsKICAgICBpZiAocmVnaW9uKSB7Ci0gICAgICAgIExheW91
dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZlJlZ2lvbiA9IHJlZ2lvbiA/IHJlZ2lvbi0+bG9n
aWNhbFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCkgLSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmly
c3RQYWdlIDogWkVST19MQVlPVVRfVU5JVDsKKyAgICAgICAgTGF5b3V0VW5pdCBvZmZzZXRGcm9t
TG9naWNhbFRvcE9mUmVnaW9uID0gcmVnaW9uID8gcmVnaW9uLT5sb2dpY2FsVG9wRm9yRmxvd1Ro
cmVhZENvbnRlbnQoKSAtIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UgOiBMYXlvdXRV
bml0KCk7CiAgICAgICAgIGxvZ2ljYWxUb3BQb3NpdGlvbiA9IG1heChsb2dpY2FsVG9wUG9zaXRp
b24sIGxvZ2ljYWxUb3BQb3NpdGlvbiArIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZSZWdpb24pOwog
ICAgICAgICBjb250YWluaW5nQmxvY2tSZWdpb24gPSBjYi0+Y2xhbXBUb1N0YXJ0QW5kRW5kUmVn
aW9ucyhyZWdpb24pOwogICAgIH0KQEAgLTEyNDEsNyArMTI0MSw3IEBAIExheW91dFVuaXQgUmVu
ZGVyQm94Ojpjb250YWluaW5nQmxvY2tBdmEKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3BQb3Np
dGlvbiA9IGxvZ2ljYWxUb3AoKTsKICAgICBMYXlvdXRVbml0IGFkanVzdGVkUGFnZU9mZnNldEZv
ckNvbnRhaW5pbmdCbG9jayA9IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UgLSBsb2dp
Y2FsVG9wKCk7CiAgICAgaWYgKHJlZ2lvbikgewotICAgICAgICBMYXlvdXRVbml0IG9mZnNldEZy
b21Mb2dpY2FsVG9wT2ZSZWdpb24gPSByZWdpb24gPyByZWdpb24tPmxvZ2ljYWxUb3BGb3JGbG93
VGhyZWFkQ29udGVudCgpIC0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSA6IFpFUk9f
TEFZT1VUX1VOSVQ7CisgICAgICAgIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZlJl
Z2lvbiA9IHJlZ2lvbiA/IHJlZ2lvbi0+bG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCkg
LSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlIDogTGF5b3V0VW5pdCgpOwogICAgICAg
ICBsb2dpY2FsVG9wUG9zaXRpb24gPSBtYXgobG9naWNhbFRvcFBvc2l0aW9uLCBsb2dpY2FsVG9w
UG9zaXRpb24gKyBvZmZzZXRGcm9tTG9naWNhbFRvcE9mUmVnaW9uKTsKICAgICAgICAgY29udGFp
bmluZ0Jsb2NrUmVnaW9uID0gY2ItPmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMocmVnaW9uKTsK
ICAgICB9CkBAIC0zNTMzLDcgKzM1MzMsNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQm94Ojpw
b3NpdGlvbkZvclBvCiAgICAgfQogCiAgICAgLy8gUGFzcyBvZmYgdG8gdGhlIGNsb3Nlc3QgY2hp
bGQuCi0gICAgTGF5b3V0VW5pdCBtaW5EaXN0ID0gTUFYX0xBWU9VVF9VTklUOworICAgIExheW91
dFVuaXQgbWluRGlzdCA9IExheW91dFVuaXQ6Om1heCgpOwogICAgIFJlbmRlckJveCogY2xvc2Vz
dFJlbmRlcmVyID0gMDsKICAgICBMYXlvdXRQb2ludCBhZGp1c3RlZFBvaW50ID0gcG9pbnQ7CiAg
ICAgaWYgKGlzVGFibGVSb3coKSkKQEAgLTM1NDksOSArMzU0OSw5IEBAIFZpc2libGVQb3NpdGlv
biBSZW5kZXJCb3g6OnBvc2l0aW9uRm9yUG8KICAgICAgICAgCiAgICAgICAgIFJlbmRlckJveCog
cmVuZGVyZXIgPSB0b1JlbmRlckJveChyZW5kZXJPYmplY3QpOwogCi0gICAgICAgIExheW91dFVu
aXQgdG9wID0gcmVuZGVyZXItPmJvcmRlclRvcCgpICsgcmVuZGVyZXItPnBhZGRpbmdUb3AoKSAr
IChpc1RhYmxlUm93KCkgPyBaRVJPX0xBWU9VVF9VTklUIDogcmVuZGVyZXItPnkoKSk7CisgICAg
ICAgIExheW91dFVuaXQgdG9wID0gcmVuZGVyZXItPmJvcmRlclRvcCgpICsgcmVuZGVyZXItPnBh
ZGRpbmdUb3AoKSArIChpc1RhYmxlUm93KCkgPyBMYXlvdXRVbml0KCkgOiByZW5kZXJlci0+eSgp
KTsKICAgICAgICAgTGF5b3V0VW5pdCBib3R0b20gPSB0b3AgKyByZW5kZXJlci0+Y29udGVudEhl
aWdodCgpOwotICAgICAgICBMYXlvdXRVbml0IGxlZnQgPSByZW5kZXJlci0+Ym9yZGVyTGVmdCgp
ICsgcmVuZGVyZXItPnBhZGRpbmdMZWZ0KCkgKyAoaXNUYWJsZVJvdygpID8gWkVST19MQVlPVVRf
VU5JVCA6IHJlbmRlcmVyLT54KCkpOworICAgICAgICBMYXlvdXRVbml0IGxlZnQgPSByZW5kZXJl
ci0+Ym9yZGVyTGVmdCgpICsgcmVuZGVyZXItPnBhZGRpbmdMZWZ0KCkgKyAoaXNUYWJsZVJvdygp
ID8gTGF5b3V0VW5pdCgpIDogcmVuZGVyZXItPngoKSk7CiAgICAgICAgIExheW91dFVuaXQgcmln
aHQgPSBsZWZ0ICsgcmVuZGVyZXItPmNvbnRlbnRXaWR0aCgpOwogICAgICAgICAKICAgICAgICAg
aWYgKHBvaW50LngoKSA8PSByaWdodCAmJiBwb2ludC54KCkgPj0gbGVmdCAmJiBwb2ludC55KCkg
PD0gdG9wICYmIHBvaW50LnkoKSA+PSBib3R0b20pIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDEzMzY3NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBwdWJsaWM6
CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gd2lkdGgoKSA6IGhlaWdodCgpOyB9CiAgICAgTGF5
b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSA/IGhlaWdodCgpIDogd2lkdGgoKTsgfQogCi0gICAgTGF5b3V0VW5p
dCBjb25zdHJhaW5Mb2dpY2FsV2lkdGhJblJlZ2lvbkJ5TWluTWF4KExheW91dFVuaXQsIExheW91
dFVuaXQsIFJlbmRlckJsb2NrKiwgUmVuZGVyUmVnaW9uKiA9IDAsIExheW91dFVuaXQgb2Zmc2V0
RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSA9IFpFUk9fTEFZT1VUX1VOSVQpIGNvbnN0OworICAg
IExheW91dFVuaXQgY29uc3RyYWluTG9naWNhbFdpZHRoSW5SZWdpb25CeU1pbk1heChMYXlvdXRV
bml0LCBMYXlvdXRVbml0LCBSZW5kZXJCbG9jayosIFJlbmRlclJlZ2lvbiogPSAwLCBMYXlvdXRV
bml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UgPSAwKSBjb25zdDsKICAgICBMYXlv
dXRVbml0IGNvbnN0cmFpbkxvZ2ljYWxIZWlnaHRCeU1pbk1heChMYXlvdXRVbml0KSBjb25zdDsK
IAogICAgIGludCBwaXhlbFNuYXBwZWRMb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gc3R5
bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHBpeGVsU25hcHBlZEhlaWdodCgpIDog
cGl4ZWxTbmFwcGVkV2lkdGgoKTsgfQpAQCAtMzc1LDcgKzM3NSw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgY29tcHV0ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0
LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYpIGNv
bnN0OwogCiAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogcmVuZGVyQm94UmVnaW9uSW5mbyhSZW5k
ZXJSZWdpb24qLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UsIFJl
bmRlckJveFJlZ2lvbkluZm9GbGFncyA9IENhY2hlUmVuZGVyQm94UmVnaW9uSW5mbykgY29uc3Q7
Ci0gICAgdm9pZCBjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb24oTG9naWNhbEV4dGVudENvbXB1
dGVkVmFsdWVzJiwgUmVuZGVyUmVnaW9uKiA9IDAsIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2lj
YWxUb3BPZkZpcnN0UGFnZSA9IFpFUk9fTEFZT1VUX1VOSVQpIGNvbnN0OworICAgIHZvaWQgY29t
cHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYsIFJl
bmRlclJlZ2lvbiogPSAwLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBh
Z2UgPSAwKSBjb25zdDsKIAogICAgIGJvb2wgc3RyZXRjaGVzVG9WaWV3cG9ydCgpIGNvbnN0CiAg
ICAgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuY3BwCShyZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTIsNyArNTUy
LDcgQEAgaW50IFJlbmRlckJveE1vZGVsT2JqZWN0OjpwaXhlbFNuYXBwZWRPZgogCiBMYXlvdXRV
bml0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlZENTU1BhZGRpbmdUb3AoKSBjb25zdAog
ewotICAgIExheW91dFVuaXQgdyA9IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgTGF5b3V0VW5pdCB3
ID0gMDsKICAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gMDsKICAgICBMZW5ndGggcGFkZGlu
ZyA9IHN0eWxlKCktPnBhZGRpbmdUb3AoKTsKICAgICBpZiAocGFkZGluZy5pc1BlcmNlbnQoKSkK
QEAgLTU2NCw3ICs1NjQsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21w
dXRlCiAKIExheW91dFVuaXQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVkQ1NTUGFkZGlu
Z0JvdHRvbSgpIGNvbnN0CiB7Ci0gICAgTGF5b3V0VW5pdCB3ID0gWkVST19MQVlPVVRfVU5JVDsK
KyAgICBMYXlvdXRVbml0IHcgPSAwOwogICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSAwOwog
ICAgIExlbmd0aCBwYWRkaW5nID0gc3R5bGUoKS0+cGFkZGluZ0JvdHRvbSgpOwogICAgIGlmIChw
YWRkaW5nLmlzUGVyY2VudCgpKQpAQCAtNTc2LDcgKzU3Niw3IEBAIExheW91dFVuaXQgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OmNvbXB1dGUKIAogTGF5b3V0VW5pdCBSZW5kZXJCb3hNb2RlbE9iamVj
dDo6Y29tcHV0ZWRDU1NQYWRkaW5nTGVmdCgpIGNvbnN0CiB7Ci0gICAgTGF5b3V0VW5pdCB3ID0g
WkVST19MQVlPVVRfVU5JVDsKKyAgICBMYXlvdXRVbml0IHcgPSAwOwogICAgIFJlbmRlclZpZXcq
IHJlbmRlclZpZXcgPSAwOwogICAgIExlbmd0aCBwYWRkaW5nID0gc3R5bGUoKS0+cGFkZGluZ0xl
ZnQoKTsKICAgICBpZiAocGFkZGluZy5pc1BlcmNlbnQoKSkKQEAgLTU4OCw3ICs1ODgsNyBAQCBM
YXlvdXRVbml0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlCiAKIExheW91dFVuaXQgUmVu
ZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVkQ1NTUGFkZGluZ1JpZ2h0KCkgY29uc3QKIHsKLSAg
ICBMYXlvdXRVbml0IHcgPSBaRVJPX0xBWU9VVF9VTklUOworICAgIExheW91dFVuaXQgdyA9IDA7
CiAgICAgUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IDA7CiAgICAgTGVuZ3RoIHBhZGRpbmcgPSBz
dHlsZSgpLT5wYWRkaW5nUmlnaHQoKTsKICAgICBpZiAocGFkZGluZy5pc1BlcmNlbnQoKSkKQEAg
LTYwMCw3ICs2MDAsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRl
CiAKIExheW91dFVuaXQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVkQ1NTUGFkZGluZ0Jl
Zm9yZSgpIGNvbnN0CiB7Ci0gICAgTGF5b3V0VW5pdCB3ID0gWkVST19MQVlPVVRfVU5JVDsKKyAg
ICBMYXlvdXRVbml0IHcgPSAwOwogICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSAwOwogICAg
IExlbmd0aCBwYWRkaW5nID0gc3R5bGUoKS0+cGFkZGluZ0JlZm9yZSgpOwogICAgIGlmIChwYWRk
aW5nLmlzUGVyY2VudCgpKQpAQCAtNjEyLDcgKzYxMiw3IEBAIExheW91dFVuaXQgUmVuZGVyQm94
TW9kZWxPYmplY3Q6OmNvbXB1dGUKIAogTGF5b3V0VW5pdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6
Y29tcHV0ZWRDU1NQYWRkaW5nQWZ0ZXIoKSBjb25zdAogewotICAgIExheW91dFVuaXQgdyA9IFpF
Uk9fTEFZT1VUX1VOSVQ7CisgICAgTGF5b3V0VW5pdCB3ID0gMDsKICAgICBSZW5kZXJWaWV3KiBy
ZW5kZXJWaWV3ID0gMDsKICAgICBMZW5ndGggcGFkZGluZyA9IHN0eWxlKCktPnBhZGRpbmdBZnRl
cigpOwogICAgIGlmIChwYWRkaW5nLmlzUGVyY2VudCgpKQpAQCAtNjI0LDcgKzYyNCw3IEBAIExh
eW91dFVuaXQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGUKIAogTGF5b3V0VW5pdCBSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0ZWRDU1NQYWRkaW5nU3RhcnQoKSBjb25zdAogewotICAg
IExheW91dFVuaXQgdyA9IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgTGF5b3V0VW5pdCB3ID0gMDsK
ICAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gMDsKICAgICBMZW5ndGggcGFkZGluZyA9IHN0
eWxlKCktPnBhZGRpbmdTdGFydCgpOwogICAgIGlmIChwYWRkaW5nLmlzUGVyY2VudCgpKQpAQCAt
NjM2LDcgKzYzNiw3IEBAIExheW91dFVuaXQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGUK
IAogTGF5b3V0VW5pdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0ZWRDU1NQYWRkaW5nRW5k
KCkgY29uc3QKIHsKLSAgICBMYXlvdXRVbml0IHcgPSBaRVJPX0xBWU9VVF9VTklUOworICAgIExh
eW91dFVuaXQgdyA9IDA7CiAgICAgUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IDA7CiAgICAgTGVu
Z3RoIHBhZGRpbmcgPSBzdHlsZSgpLT5wYWRkaW5nRW5kKCk7CiAgICAgaWYgKHBhZGRpbmcuaXNQ
ZXJjZW50KCkpCkBAIC04MDAsOCArODAwLDggQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6
cGFpbnRGaWxsTGF5ZQogICAgIAogICAgIGludCBiTGVmdCA9IGluY2x1ZGVMZWZ0RWRnZSA/IGJv
cmRlckxlZnQoKSA6IDA7CiAgICAgaW50IGJSaWdodCA9IGluY2x1ZGVSaWdodEVkZ2UgPyBib3Jk
ZXJSaWdodCgpIDogMDsKLSAgICBMYXlvdXRVbml0IHBMZWZ0ID0gaW5jbHVkZUxlZnRFZGdlID8g
cGFkZGluZ0xlZnQoKSA6IFpFUk9fTEFZT1VUX1VOSVQ7Ci0gICAgTGF5b3V0VW5pdCBwUmlnaHQg
PSBpbmNsdWRlUmlnaHRFZGdlID8gcGFkZGluZ1JpZ2h0KCkgOiBaRVJPX0xBWU9VVF9VTklUOwor
ICAgIExheW91dFVuaXQgcExlZnQgPSBpbmNsdWRlTGVmdEVkZ2UgPyBwYWRkaW5nTGVmdCgpIDog
TGF5b3V0VW5pdCgpOworICAgIExheW91dFVuaXQgcFJpZ2h0ID0gaW5jbHVkZVJpZ2h0RWRnZSA/
IHBhZGRpbmdSaWdodCgpIDogTGF5b3V0VW5pdCgpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlciBjbGlwV2l0aFNjcm9sbGluZ1N0YXRlU2F2ZXIoKmNvbnRleHQsIGNsaXBwZWRXaXRo
TG9jYWxTY3JvbGxpbmcpOwogICAgIExheW91dFJlY3Qgc2Nyb2xsZWRQYWludFJlY3QgPSByZWN0
OwpAQCAtODI1LDEwICs4MjUsMTAgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRG
aWxsTGF5ZQogICAgICAgICAvLyBDbGlwIHRvIHRoZSBwYWRkaW5nIG9yIGNvbnRlbnQgYm94ZXMg
YXMgbmVjZXNzYXJ5LgogICAgICAgICBpZiAoIWNsaXBUb0JvcmRlclJhZGl1cykgewogICAgICAg
ICAgICAgYm9vbCBpbmNsdWRlUGFkZGluZyA9IGJnTGF5ZXItPmNsaXAoKSA9PSBDb250ZW50Rmls
bEJveDsKLSAgICAgICAgICAgIExheW91dFJlY3QgY2xpcFJlY3QgPSBMYXlvdXRSZWN0KHNjcm9s
bGVkUGFpbnRSZWN0LngoKSArIGJMZWZ0ICsgKGluY2x1ZGVQYWRkaW5nID8gcExlZnQgOiBaRVJP
X0xBWU9VVF9VTklUKSwKLSAgICAgICAgICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC55KCkgKyBi
b3JkZXJUb3AoKSArIChpbmNsdWRlUGFkZGluZyA/IHBhZGRpbmdUb3AoKSA6IFpFUk9fTEFZT1VU
X1VOSVQpLAotICAgICAgICAgICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LndpZHRoKCkgLSBiTGVm
dCAtIGJSaWdodCAtIChpbmNsdWRlUGFkZGluZyA/IHBMZWZ0ICsgcFJpZ2h0IDogWkVST19MQVlP
VVRfVU5JVCksCi0gICAgICAgICAgICAgICAgc2Nyb2xsZWRQYWludFJlY3QuaGVpZ2h0KCkgLSBi
b3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpIC0gKGluY2x1ZGVQYWRkaW5nID8gcGFkZGluZ1Rv
cCgpICsgcGFkZGluZ0JvdHRvbSgpIDogWkVST19MQVlPVVRfVU5JVCkpOworICAgICAgICAgICAg
TGF5b3V0UmVjdCBjbGlwUmVjdCA9IExheW91dFJlY3Qoc2Nyb2xsZWRQYWludFJlY3QueCgpICsg
YkxlZnQgKyAoaW5jbHVkZVBhZGRpbmcgPyBwTGVmdCA6IExheW91dFVuaXQoKSksCisgICAgICAg
ICAgICAgICAgc2Nyb2xsZWRQYWludFJlY3QueSgpICsgYm9yZGVyVG9wKCkgKyAoaW5jbHVkZVBh
ZGRpbmcgPyBwYWRkaW5nVG9wKCkgOiBMYXlvdXRVbml0KCkpLAorICAgICAgICAgICAgICAgIHNj
cm9sbGVkUGFpbnRSZWN0LndpZHRoKCkgLSBiTGVmdCAtIGJSaWdodCAtIChpbmNsdWRlUGFkZGlu
ZyA/IHBMZWZ0ICsgcFJpZ2h0IDogTGF5b3V0VW5pdCgpKSwKKyAgICAgICAgICAgICAgICBzY3Jv
bGxlZFBhaW50UmVjdC5oZWlnaHQoKSAtIGJvcmRlclRvcCgpIC0gYm9yZGVyQm90dG9tKCkgLSAo
aW5jbHVkZVBhZGRpbmcgPyBwYWRkaW5nVG9wKCkgKyBwYWRkaW5nQm90dG9tKCkgOiBMYXlvdXRV
bml0KCkpKTsKICAgICAgICAgICAgIGJhY2tncm91bmRDbGlwU3RhdGVTYXZlci5zYXZlKCk7CiAg
ICAgICAgICAgICBjb250ZXh0LT5jbGlwKGNsaXBSZWN0KTsKICAgICAgICAgfQpAQCAtMjcyOSw3
ICsyNzI5LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6bG9jYWxDYQogICAg
ICAgICAgICAgeCAtPSB0ZXh0SW5kZW50T2Zmc2V0OwogICAgICAgICBicmVhazsKICAgICB9Ci0g
ICAgeCA9IG1pbih4LCBtYXgobWF4WCAtIGNhcmV0V2lkdGgsIFpFUk9fTEFZT1VUX1VOSVQpKTsK
KyAgICB4ID0gbWluKHgsIG1heDxMYXlvdXRVbml0PihtYXhYIC0gY2FyZXRXaWR0aCwgMCkpOwog
CiAgICAgTGF5b3V0VW5pdCB5ID0gcGFkZGluZ1RvcCgpICsgYm9yZGVyVG9wKCk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCShy
ZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2lmbmRlZiBSZW5k
ZXJCb3hNb2RlbE9iamVjdF9oCiAjZGVmaW5lIFJlbmRlckJveE1vZGVsT2JqZWN0X2gKIAotI2lu
Y2x1ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3Qu
aCIKICNpbmNsdWRlICJSZW5kZXJMYXllck1vZGVsT2JqZWN0LmgiCiAjaW5jbHVkZSAiU2hhZG93
RGF0YS5oIgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRl
ZEZsZXhpYmxlQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcAkocmV2aXNpb24gMTMzNjc3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUzMiw3ICs1MzIsNyBAQCB2b2lkIFJlbmRlckRlcHJlY2F0ZWRGbGV4
aWJsZUJveDo6bGF5b3V0CiAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVuZGVyQm94KiBjaGls
ZCA9IGl0ZXJhdG9yLmZpcnN0KCk7IGNoaWxkOyBjaGlsZCA9IGl0ZXJhdG9yLm5leHQoKSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBhbGxvd2VkRmxleCA9IGFsbG93ZWRD
aGlsZEZsZXgoY2hpbGQsIGV4cGFuZGluZywgaSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoYWxsb3dlZEZsZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0
IHByb2plY3RlZEZsZXggPSAoYWxsb3dlZEZsZXggPT0gTUFYX0xBWU9VVF9VTklUKSA/IGFsbG93
ZWRGbGV4IDogTGF5b3V0VW5pdChhbGxvd2VkRmxleCAqICh0b3RhbEZsZXggLyBjaGlsZC0+c3R5
bGUoKS0+Ym94RmxleCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5p
dCBwcm9qZWN0ZWRGbGV4ID0gKGFsbG93ZWRGbGV4ID09IExheW91dFVuaXQ6Om1heCgpKSA/IGFs
bG93ZWRGbGV4IDogTGF5b3V0VW5pdChhbGxvd2VkRmxleCAqICh0b3RhbEZsZXggLyBjaGlsZC0+
c3R5bGUoKS0+Ym94RmxleCgpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VB
dmFpbGFibGVUaGlzUGFzcyA9IGV4cGFuZGluZyA/IG1pbihzcGFjZUF2YWlsYWJsZVRoaXNQYXNz
LCBwcm9qZWN0ZWRGbGV4KSA6IG1heChzcGFjZUF2YWlsYWJsZVRoaXNQYXNzLCBwcm9qZWN0ZWRG
bGV4KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQpA
QCAtNzg2LDcgKzc4Niw3IEBAIHZvaWQgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjpsYXlv
dXQKICAgICAgICAgICAgICAgICAgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gaXRlcmF0b3Iu
Zmlyc3QoKTsgY2hpbGQ7IGNoaWxkID0gaXRlcmF0b3IubmV4dCgpKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBMYXlvdXRVbml0IGFsbG93ZWRGbGV4ID0gYWxsb3dlZENoaWxkRmxleChjaGls
ZCwgZXhwYW5kaW5nLCBpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbGxvd2VkRmxl
eCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgcHJvamVjdGVkRmxl
eCA9IChhbGxvd2VkRmxleCA9PSBNQVhfTEFZT1VUX1VOSVQpID8gYWxsb3dlZEZsZXggOiBzdGF0
aWNfY2FzdDxMYXlvdXRVbml0PihhbGxvd2VkRmxleCAqICh0b3RhbEZsZXggLyBjaGlsZC0+c3R5
bGUoKS0+Ym94RmxleCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5p
dCBwcm9qZWN0ZWRGbGV4ID0gKGFsbG93ZWRGbGV4ID09IExheW91dFVuaXQ6Om1heCgpKSA/IGFs
bG93ZWRGbGV4IDogc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oYWxsb3dlZEZsZXggKiAodG90YWxG
bGV4IC8gY2hpbGQtPnN0eWxlKCktPmJveEZsZXgoKSkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNwYWNlQXZhaWxhYmxlVGhpc1Bhc3MgPSBleHBhbmRpbmcgPyBtaW4oc3BhY2VBdmFp
bGFibGVUaGlzUGFzcywgcHJvamVjdGVkRmxleCkgOiBtYXgoc3BhY2VBdmFpbGFibGVUaGlzUGFz
cywgcHJvamVjdGVkRmxleCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIH0KQEAgLTEwMzIsNyArMTAzMiw3IEBAIExheW91dFVuaXQgUmVuZGVyRGVwcmVj
YXRlZEZsZXhpYmxlQm94OjoKICAgICBpZiAoZXhwYW5kaW5nKSB7CiAgICAgICAgIGlmIChpc0hv
cml6b250YWwoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IEZvciBub3cganVzdCBoYW5kbGUg
Zml4ZWQgdmFsdWVzLgotICAgICAgICAgICAgTGF5b3V0VW5pdCBtYXhXaWR0aCA9IE1BWF9MQVlP
VVRfVU5JVDsKKyAgICAgICAgICAgIExheW91dFVuaXQgbWF4V2lkdGggPSBMYXlvdXRVbml0Ojpt
YXgoKTsKICAgICAgICAgICAgIExheW91dFVuaXQgd2lkdGggPSBjb250ZW50V2lkdGhGb3JDaGls
ZChjaGlsZCk7CiAgICAgICAgICAgICBpZiAoIWNoaWxkLT5zdHlsZSgpLT5tYXhXaWR0aCgpLmlz
VW5kZWZpbmVkKCkgJiYgY2hpbGQtPnN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpKQogICAg
ICAgICAgICAgICAgIG1heFdpZHRoID0gY2hpbGQtPnN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUo
KTsKQEAgLTEwNDAsMTYgKzEwNDAsMTYgQEAgTGF5b3V0VW5pdCBSZW5kZXJEZXByZWNhdGVkRmxl
eGlibGVCb3g6OgogICAgICAgICAgICAgICAgIG1heFdpZHRoID0gY2hpbGQtPm1heFByZWZlcnJl
ZExvZ2ljYWxXaWR0aCgpOwogICAgICAgICAgICAgZWxzZSBpZiAoY2hpbGQtPnN0eWxlKCktPm1h
eFdpZHRoKCkudHlwZSgpID09IE1pbkludHJpbnNpYykKICAgICAgICAgICAgICAgICBtYXhXaWR0
aCA9IGNoaWxkLT5taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgICAgIGlmICht
YXhXaWR0aCA9PSBNQVhfTEFZT1VUX1VOSVQpCisgICAgICAgICAgICBpZiAobWF4V2lkdGggPT0g
TGF5b3V0VW5pdDo6bWF4KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG1heFdpZHRoOwogICAg
ICAgICAgICAgcmV0dXJuIG1heDxMYXlvdXRVbml0PigwLCBtYXhXaWR0aCAtIHdpZHRoKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBGb3Igbm93IGp1c3QgaGFuZGxl
IGZpeGVkIHZhbHVlcy4KLSAgICAgICAgICAgIExheW91dFVuaXQgbWF4SGVpZ2h0ID0gTUFYX0xB
WU9VVF9VTklUOworICAgICAgICAgICAgTGF5b3V0VW5pdCBtYXhIZWlnaHQgPSBMYXlvdXRVbml0
OjptYXgoKTsKICAgICAgICAgICAgIExheW91dFVuaXQgaGVpZ2h0ID0gY29udGVudEhlaWdodEZv
ckNoaWxkKGNoaWxkKTsKICAgICAgICAgICAgIGlmICghY2hpbGQtPnN0eWxlKCktPm1heEhlaWdo
dCgpLmlzVW5kZWZpbmVkKCkgJiYgY2hpbGQtPnN0eWxlKCktPm1heEhlaWdodCgpLmlzRml4ZWQo
KSkKICAgICAgICAgICAgICAgICBtYXhIZWlnaHQgPSBjaGlsZC0+c3R5bGUoKS0+bWF4SGVpZ2h0
KCkudmFsdWUoKTsKLSAgICAgICAgICAgIGlmIChtYXhIZWlnaHQgPT0gTUFYX0xBWU9VVF9VTklU
KQorICAgICAgICAgICAgaWYgKG1heEhlaWdodCA9PSBMYXlvdXRVbml0OjptYXgoKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gbWF4SGVpZ2h0OwogICAgICAgICAgICAgcmV0dXJuIG1heDxMYXlv
dXRVbml0PigwLCBtYXhIZWlnaHQgLSBoZWlnaHQpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAJKHJldmlzaW9uIDEzMzY3NykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0OSwxMSArMTQ5LDExIEBAIHZvaWQgUmVuZGVyRmllbGRzZXQ6OnBhaW50Qm94
RGVjb3JhdGlvbnMKICAgICAvLyBjYXNlcyB0aGUgbGVnZW5kIGlzIGVtYmVkZGVkIGluIHRoZSBy
aWdodCBhbmQgYm90dG9tIGJvcmRlcnMgcmVzcGVjdGl2ZWx5LgogICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzIzNgogICAgIGlmIChzdHlsZSgpLT5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAgIExheW91dFVuaXQgeU9mZiA9IChsZWdl
bmQtPnkoKSA+IDApID8gWkVST19MQVlPVVRfVU5JVCA6IChsZWdlbmQtPmhlaWdodCgpIC0gYm9y
ZGVyVG9wKCkpIC8gMjsKKyAgICAgICAgTGF5b3V0VW5pdCB5T2ZmID0gKGxlZ2VuZC0+eSgpID4g
MCkgPyBMYXlvdXRVbml0KCkgOiAobGVnZW5kLT5oZWlnaHQoKSAtIGJvcmRlclRvcCgpKSAvIDI7
CiAgICAgICAgIHBhaW50UmVjdC5zZXRIZWlnaHQocGFpbnRSZWN0LmhlaWdodCgpIC0geU9mZik7
CiAgICAgICAgIHBhaW50UmVjdC5zZXRZKHBhaW50UmVjdC55KCkgKyB5T2ZmKTsKICAgICB9IGVs
c2UgewotICAgICAgICBMYXlvdXRVbml0IHhPZmYgPSAobGVnZW5kLT54KCkgPiAwKSA/IFpFUk9f
TEFZT1VUX1VOSVQgOiAobGVnZW5kLT53aWR0aCgpIC0gYm9yZGVyTGVmdCgpKSAvIDI7CisgICAg
ICAgIExheW91dFVuaXQgeE9mZiA9IChsZWdlbmQtPngoKSA+IDApID8gTGF5b3V0VW5pdCgpIDog
KGxlZ2VuZC0+d2lkdGgoKSAtIGJvcmRlckxlZnQoKSkgLyAyOwogICAgICAgICBwYWludFJlY3Qu
c2V0V2lkdGgocGFpbnRSZWN0LndpZHRoKCkgLSB4T2ZmKTsKICAgICAgICAgcGFpbnRSZWN0LnNl
dFgocGFpbnRSZWN0LngoKSArIHhPZmYpOwogICAgIH0KQEAgLTIwMCwxMSArMjAwLDExIEBAIHZv
aWQgUmVuZGVyRmllbGRzZXQ6OnBhaW50TWFzayhQYWludEluZm8KICAgICAvLyBjYXNlcyB0aGUg
bGVnZW5kIGlzIGVtYmVkZGVkIGluIHRoZSByaWdodCBhbmQgYm90dG9tIGJvcmRlcnMgcmVzcGVj
dGl2ZWx5LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
NzIzNgogICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7Ci0gICAg
ICAgIExheW91dFVuaXQgeU9mZiA9IChsZWdlbmQtPnkoKSA+IDApID8gWkVST19MQVlPVVRfVU5J
VCA6IChsZWdlbmQtPmhlaWdodCgpIC0gYm9yZGVyVG9wKCkpIC8gMjsKKyAgICAgICAgTGF5b3V0
VW5pdCB5T2ZmID0gKGxlZ2VuZC0+eSgpID4gMCkgPyBMYXlvdXRVbml0KCkgOiAobGVnZW5kLT5o
ZWlnaHQoKSAtIGJvcmRlclRvcCgpKSAvIDI7CiAgICAgICAgIHBhaW50UmVjdC5leHBhbmQoMCwg
LXlPZmYpOwogICAgICAgICBwYWludFJlY3QubW92ZSgwLCB5T2ZmKTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBMYXlvdXRVbml0IHhPZmYgPSAobGVnZW5kLT54KCkgPiAwKSA/IFpFUk9fTEFZT1VU
X1VOSVQgOiAobGVnZW5kLT53aWR0aCgpIC0gYm9yZGVyTGVmdCgpKSAvIDI7CisgICAgICAgIExh
eW91dFVuaXQgeE9mZiA9IChsZWdlbmQtPngoKSA+IDApID8gTGF5b3V0VW5pdCgpIDogKGxlZ2Vu
ZC0+d2lkdGgoKSAtIGJvcmRlckxlZnQoKSkgLyAyOwogICAgICAgICBwYWludFJlY3QuZXhwYW5k
KC14T2ZmLCAwKTsKICAgICAgICAgcGFpbnRSZWN0Lm1vdmUoeE9mZiwgMCk7CiAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCShy
ZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGli
bGVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzEsNyArMzcxLDcgQEAgdm9pZCBSZW5kZXJG
bGV4aWJsZUJveDo6cGFpbnRDaGlsZHJlbihQYQogCiB2b2lkIFJlbmRlckZsZXhpYmxlQm94Ojpy
ZXBvc2l0aW9uTG9naWNhbEhlaWdodERlcGVuZGVudEZsZXhJdGVtcyhPcmRlckl0ZXJhdG9yJiBp
dGVyYXRvciwgV1RGOjpWZWN0b3I8TGluZUNvbnRleHQ+JiBsaW5lQ29udGV4dHMsIExheW91dFVu
aXQmIG9sZENsaWVudEFmdGVyRWRnZSkKIHsKLSAgICBMYXlvdXRVbml0IGNyb3NzQXhpc1N0YXJ0
RWRnZSA9IGxpbmVDb250ZXh0cy5pc0VtcHR5KCkgPyBaRVJPX0xBWU9VVF9VTklUIDogbGluZUNv
bnRleHRzWzBdLmNyb3NzQXhpc09mZnNldDsKKyAgICBMYXlvdXRVbml0IGNyb3NzQXhpc1N0YXJ0
RWRnZSA9IGxpbmVDb250ZXh0cy5pc0VtcHR5KCkgPyBMYXlvdXRVbml0KCkgOiBsaW5lQ29udGV4
dHNbMF0uY3Jvc3NBeGlzT2Zmc2V0OwogICAgIGFsaWduRmxleExpbmVzKGl0ZXJhdG9yLCBsaW5l
Q29udGV4dHMpOwogCiAgICAgLy8gSWYgd2UgaGF2ZSBhIHNpbmdsZSBsaW5lIGZsZXhib3gsIHRo
ZSBsaW5lIGhlaWdodCBpcyBhbGwgdGhlIGF2YWlsYWJsZSBzcGFjZS4KQEAgLTg5NCw3ICs4OTQs
NyBAQCBib29sIFJlbmRlckZsZXhpYmxlQm94Ojpjb21wdXRlTmV4dEZsZXhMCiAgICAgaWYgKCFp
dGVyYXRvci5jdXJyZW50Q2hpbGQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTGF5
b3V0VW5pdCBsaW5lQnJlYWtMZW5ndGggPSBtYWluQXhpc0NvbnRlbnRFeHRlbnQoTUFYX0xBWU9V
VF9VTklUKTsKKyAgICBMYXlvdXRVbml0IGxpbmVCcmVha0xlbmd0aCA9IG1haW5BeGlzQ29udGVu
dEV4dGVudChMYXlvdXRVbml0OjptYXgoKSk7CiAKICAgICBmb3IgKFJlbmRlckJveCogY2hpbGQg
PSBpdGVyYXRvci5jdXJyZW50Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gaXRlcmF0b3IubmV4dCgp
KSB7CiAgICAgICAgIGlmIChjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKQEAgLTEy
MzQsNyArMTIzNCw3IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmFsaWduQ2hpbGRyZW4oT3IK
IAogICAgIFJlbmRlckJveCogY2hpbGQgPSBpdGVyYXRvci5maXJzdCgpOwogICAgIGZvciAoc2l6
ZV90IGxpbmVOdW1iZXIgPSAwOyBsaW5lTnVtYmVyIDwgbGluZUNvbnRleHRzLnNpemUoKTsgKyts
aW5lTnVtYmVyKSB7Ci0gICAgICAgIExheW91dFVuaXQgbWluTWFyZ2luQWZ0ZXJCYXNlbGluZSA9
IE1BWF9MQVlPVVRfVU5JVDsKKyAgICAgICAgTGF5b3V0VW5pdCBtaW5NYXJnaW5BZnRlckJhc2Vs
aW5lID0gTGF5b3V0VW5pdDo6bWF4KCk7CiAgICAgICAgIExheW91dFVuaXQgbGluZUNyb3NzQXhp
c0V4dGVudCA9IGxpbmVDb250ZXh0c1tsaW5lTnVtYmVyXS5jcm9zc0F4aXNFeHRlbnQ7CiAgICAg
ICAgIExheW91dFVuaXQgbWF4QXNjZW50ID0gbGluZUNvbnRleHRzW2xpbmVOdW1iZXJdLm1heEFz
Y2VudDsKIApAQCAtMTMxOSw3ICsxMzE5LDcgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6YXBw
bHlTdHJldGNoQWxpZwogICAgIH0gZWxzZSBpZiAoaXNDb2x1bW5GbG93KCkgJiYgY2hpbGQtPnN0
eWxlKCktPmxvZ2ljYWxXaWR0aCgpLmlzQXV0bygpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBJZiB0
aGUgY2hpbGQgZG9lc24ndCBoYXZlIG9ydGhvZ29uYWwgZmxvdywgdGhlbiBpdCBhbHJlYWR5IGhh
cyBhbiBvdmVycmlkZSB3aWR0aCBzZXQsIHNvIHVzZSBpdC4KICAgICAgICAgaWYgKGhhc09ydGhv
Z29uYWxGbG93KGNoaWxkKSkgewotICAgICAgICAgICAgTGF5b3V0VW5pdCBjaGlsZFdpZHRoID0g
c3RkOjptYXgoWkVST19MQVlPVVRfVU5JVCwgbGluZUNyb3NzQXhpc0V4dGVudCAtIGNyb3NzQXhp
c01hcmdpbkV4dGVudEZvckNoaWxkKGNoaWxkKSk7CisgICAgICAgICAgICBMYXlvdXRVbml0IGNo
aWxkV2lkdGggPSBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCBsaW5lQ3Jvc3NBeGlzRXh0ZW50IC0g
Y3Jvc3NBeGlzTWFyZ2luRXh0ZW50Rm9yQ2hpbGQoY2hpbGQpKTsKICAgICAgICAgICAgIGNoaWxk
V2lkdGggPSBjaGlsZC0+Y29uc3RyYWluTG9naWNhbFdpZHRoSW5SZWdpb25CeU1pbk1heChjaGls
ZFdpZHRoLCBjaGlsZFdpZHRoLCB0aGlzKTsKIAogICAgICAgICAgICAgaWYgKGNoaWxkV2lkdGgg
IT0gY2hpbGQtPmxvZ2ljYWxXaWR0aCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCShyZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIwMCw3ICsyMDAsNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnVwZGF0ZUxvZ2ljYWxXaWR0
CiAgICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gKml0ZXI7CiAgICAgICAgIExheW91dFVu
aXQgcmVnaW9uTG9naWNhbFdpZHRoID0gcmVnaW9uLT5wYWdlTG9naWNhbFdpZHRoKCk7CiAgICAg
ICAgIGlmIChyZWdpb25Mb2dpY2FsV2lkdGggIT0gbG9naWNhbFdpZHRoKSB7Ci0gICAgICAgICAg
ICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0ID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8g
WkVST19MQVlPVVRfVU5JVCA6IGxvZ2ljYWxXaWR0aCAtIHJlZ2lvbkxvZ2ljYWxXaWR0aDsKKyAg
ICAgICAgICAgIExheW91dFVuaXQgbG9naWNhbExlZnQgPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9
PSBMVFIgPyBMYXlvdXRVbml0KCkgOiBsb2dpY2FsV2lkdGggLSByZWdpb25Mb2dpY2FsV2lkdGg7
CiAgICAgICAgICAgICByZWdpb24tPnNldFJlbmRlckJveFJlZ2lvbkluZm8odGhpcywgbG9naWNh
bExlZnQsIHJlZ2lvbkxvZ2ljYWxXaWR0aCwgZmFsc2UpOwogICAgICAgICB9CiAgICAgfQpAQCAt
MzI2LDcgKzMyNiw3IEBAIFJlbmRlclJlZ2lvbiogUmVuZGVyRmxvd1RocmVhZDo6cmVnaW9uQXQK
ICAgICAvLyB0aGUgbGFzdCB2YWxpZCByZWdpb24uIEl0IGlzIHNpbWlsYXIgdG8gYXV0byBleHRl
bmRpbmcgdGhlIHNpemUgb2YgdGhlIGxhc3QgcmVnaW9uLiAKICAgICBSZW5kZXJSZWdpb24qIGxh
c3RWYWxpZFJlZ2lvbiA9IDA7CiAKLSAgICBMYXlvdXRVbml0IGFjY3VtdWxhdGVkTG9naWNhbEhl
aWdodCA9IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgTGF5b3V0VW5pdCBhY2N1bXVsYXRlZExvZ2lj
YWxIZWlnaHQgPSAwOwogICAgIAogICAgIC8vIEZJWE1FOiBUaGUgcmVnaW9ucyBhcmUgYWx3YXlz
IGluIG9yZGVyLCBvcHRpbWl6ZSB0aGlzIHNlYXJjaC4KICAgICBmb3IgKFJlbmRlclJlZ2lvbkxp
c3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuYmVnaW4oKTsgaXRlciAhPSBt
X3JlZ2lvbkxpc3QuZW5kKCk7ICsraXRlcikgewpAQCAtMzYyLDcgKzM2Miw3IEBAIFJlbmRlclJl
Z2lvbiogUmVuZGVyRmxvd1RocmVhZDo6cmVnaW9uQXQKIExheW91dFVuaXQgUmVuZGVyRmxvd1Ro
cmVhZDo6cGFnZUxvZ2ljYWxUb3BGb3JPZmZzZXQoTGF5b3V0VW5pdCBvZmZzZXQpIGNvbnN0CiB7
CiAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KG9mZnNldCk7
Ci0gICAgcmV0dXJuIHJlZ2lvbiA/IHJlZ2lvbi0+cGFnZUxvZ2ljYWxUb3BGb3JPZmZzZXQob2Zm
c2V0KSA6IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgcmV0dXJuIHJlZ2lvbiA/IHJlZ2lvbi0+cGFn
ZUxvZ2ljYWxUb3BGb3JPZmZzZXQob2Zmc2V0KSA6IExheW91dFVuaXQoKTsKIH0KIAogTGF5b3V0
VW5pdCBSZW5kZXJGbG93VGhyZWFkOjpwYWdlTG9naWNhbFdpZHRoRm9yT2Zmc2V0KExheW91dFVu
aXQgb2Zmc2V0KSBjb25zdApAQCAtMzc1LDkgKzM3NSw5IEBAIExheW91dFVuaXQgUmVuZGVyRmxv
d1RocmVhZDo6cGFnZUxvZ2ljYWwKIHsKICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9IHJlZ2lv
bkF0QmxvY2tPZmZzZXQob2Zmc2V0KTsKICAgICBpZiAoIXJlZ2lvbikKLSAgICAgICAgcmV0dXJu
IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAgIHJldHVybiAwOwogICAgIGlmIChyZWdpb24tPm5l
ZWRzT3ZlcnJpZGVMb2dpY2FsQ29udGVudEhlaWdodENvbXB1dGF0aW9uKCkpCi0gICAgICAgIHJl
dHVybiBNQVhfTEFZT1VUX1VOSVQgLyAyOworICAgICAgICByZXR1cm4gTGF5b3V0VW5pdDo6bWF4
KCkgLyAyOwogICAgIHJldHVybiByZWdpb24tPnBhZ2VMb2dpY2FsSGVpZ2h0KCk7CiB9CiAKQEAg
LTM4NSw5ICszODUsOSBAQCBMYXlvdXRVbml0IFJlbmRlckZsb3dUaHJlYWQ6OnBhZ2VSZW1haW5p
CiB7CiAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KG9mZnNl
dCk7CiAgICAgaWYgKCFyZWdpb24pCi0gICAgICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOwor
ICAgICAgICByZXR1cm4gMDsKICAgICBpZiAocmVnaW9uLT5uZWVkc092ZXJyaWRlTG9naWNhbENv
bnRlbnRIZWlnaHRDb21wdXRhdGlvbigpKQotICAgICAgICByZXR1cm4gTUFYX0xBWU9VVF9VTklU
IC8gMjsKKyAgICAgICAgcmV0dXJuIExheW91dFVuaXQ6Om1heCgpIC8gMjsKIAogICAgIExheW91
dFVuaXQgcGFnZUxvZ2ljYWxUb3AgPSByZWdpb24tPnBhZ2VMb2dpY2FsVG9wRm9yT2Zmc2V0KG9m
ZnNldCk7CiAgICAgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9IHJlZ2lvbi0+cGFnZUxv
Z2ljYWxIZWlnaHQoKTsKQEAgLTQ4Niw3ICs0ODYsNyBAQCBMYXlvdXRVbml0IFJlbmRlckZsb3dU
aHJlYWQ6OmNvbnRlbnRMb2dpCiB7CiAgICAgUmVuZGVyUmVnaW9uKiBmaXJzdFZhbGlkUmVnaW9u
SW5GbG93ID0gZmlyc3RSZWdpb24oKTsKICAgICBpZiAoIWZpcnN0VmFsaWRSZWdpb25JbkZsb3cp
Ci0gICAgICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOworICAgICAgICByZXR1cm4gMDsKICAg
ICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGZpcnN0VmFsaWRSZWdpb25JbkZs
b3ctPmNvbnRlbnRXaWR0aCgpIDogZmlyc3RWYWxpZFJlZ2lvbkluRmxvdy0+Y29udGVudEhlaWdo
dCgpOwogfQogCkBAIC00OTQsNyArNDk0LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJGbG93VGhyZWFk
Ojpjb250ZW50TG9naQogewogICAgIFJlbmRlclJlZ2lvbiogZmlyc3RWYWxpZFJlZ2lvbkluRmxv
dyA9IGZpcnN0UmVnaW9uKCk7CiAgICAgaWYgKCFmaXJzdFZhbGlkUmVnaW9uSW5GbG93KQotICAg
ICAgICByZXR1cm4gWkVST19MQVlPVVRfVU5JVDsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0
dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmaXJzdFZhbGlkUmVnaW9uSW5GbG93LT5j
b250ZW50SGVpZ2h0KCkgOiBmaXJzdFZhbGlkUmVnaW9uSW5GbG93LT5jb250ZW50V2lkdGgoKTsK
IH0KIApAQCAtNTAyLDcgKzUwMiw3IEBAIExheW91dFVuaXQgUmVuZGVyRmxvd1RocmVhZDo6Y29u
dGVudExvZ2kKIHsKICAgICBSZW5kZXJSZWdpb24qIGZpcnN0VmFsaWRSZWdpb25JbkZsb3cgPSBm
aXJzdFJlZ2lvbigpOwogICAgIGlmICghZmlyc3RWYWxpZFJlZ2lvbkluRmxvdykKLSAgICAgICAg
cmV0dXJuIFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBp
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gZmlyc3RWYWxpZFJlZ2lvbkluRmxvdy0+Zmxvd1Ro
cmVhZFBvcnRpb25SZWN0KCkueCgpIDogZmlyc3RWYWxpZFJlZ2lvbkluRmxvdy0+Zmxvd1RocmVh
ZFBvcnRpb25SZWN0KCkueSgpOwogfQogCkBAIC03ODYsNyArNzg2LDcgQEAgdm9pZCBSZW5kZXJG
bG93VGhyZWFkOjp1cGRhdGVSZWdpb25zRmxvdwogICAgICAgICBMYXlvdXRVbml0IHJlZ2lvbkxv
Z2ljYWxXaWR0aCA9IHJlZ2lvbi0+cGFnZUxvZ2ljYWxXaWR0aCgpOwogICAgICAgICBMYXlvdXRV
bml0IHJlZ2lvbkxvZ2ljYWxIZWlnaHQgPSByZWdpb24tPmxvZ2ljYWxIZWlnaHRPZkFsbEZsb3dU
aHJlYWRDb250ZW50KCk7CiAKLSAgICAgICAgTGF5b3V0UmVjdCByZWdpb25SZWN0KHN0eWxlKCkt
PmRpcmVjdGlvbigpID09IExUUiA/IFpFUk9fTEFZT1VUX1VOSVQgOiBsb2dpY2FsV2lkdGgoKSAt
IHJlZ2lvbkxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCwgcmVnaW9uTG9naWNhbFdpZHRoLCBy
ZWdpb25Mb2dpY2FsSGVpZ2h0KTsKKyAgICAgICAgTGF5b3V0UmVjdCByZWdpb25SZWN0KHN0eWxl
KCktPmRpcmVjdGlvbigpID09IExUUiA/IExheW91dFVuaXQoKSA6IGxvZ2ljYWxXaWR0aCgpIC0g
cmVnaW9uTG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0LCByZWdpb25Mb2dpY2FsV2lkdGgsIHJl
Z2lvbkxvZ2ljYWxIZWlnaHQpOwogCiAgICAgICAgIC8vIFdoZW4gYSBmbG93IHRocmVhZCBoYXMg
bW9yZSB0aGFuIG9uZSBhdXRvIGxvZ2ljYWwgaGVpZ2h0IHJlZ2lvbiwKICAgICAgICAgLy8gd2Ug
aGF2ZSB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgb3ZlcnJpZGUgbG9naWNhbCBjb250ZW50IGhl
aWdodCB2YWx1ZSwKQEAgLTg4Miw3ICs4ODIsNyBAQCBib29sIFJlbmRlckZsb3dUaHJlYWQ6OmFk
ZEZvcmNlZFJlZ2lvbkJyCiAgICAgICAgIHVwZGF0ZVJlZ2lvbnNGbG93VGhyZWFkUG9ydGlvblJl
Y3QoKTsKIAogICAgIGlmIChvZmZzZXRCcmVha0FkanVzdG1lbnQpCi0gICAgICAgICpvZmZzZXRC
cmVha0FkanVzdG1lbnQgPSBtYXg8TGF5b3V0VW5pdD4oWkVST19MQVlPVVRfVU5JVCwgY3VycmVu
dFJlZ2lvbk9mZnNldEluRmxvd1RocmVhZCAtIG9mZnNldEJyZWFrSW5GbG93VGhyZWFkKTsKKyAg
ICAgICAgKm9mZnNldEJyZWFrQWRqdXN0bWVudCA9IG1heDxMYXlvdXRVbml0PigwLCBjdXJyZW50
UmVnaW9uT2Zmc2V0SW5GbG93VGhyZWFkIC0gb2Zmc2V0QnJlYWtJbkZsb3dUaHJlYWQpOwogCiAg
ICAgcmV0dXJuIG92ZXJyaWRlTG9naWNhbENvbnRlbnRIZWlnaHRDb21wdXRlZDsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHZW9tZXRyeU1hcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHZW9tZXRyeU1hcC5oCShyZXZpc2lv
biAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR2VvbWV0cnlNYXAu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkZsb2F0UG9pbnQu
aCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVk
ZSAiTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgog
I2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5o
PgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJjZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZVJlc291
cmNlLmgJKHJldmlzaW9uIDEzMzY3NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbWFnZVJlc291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNs
dWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCiAj
aW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCIK
KyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCiAjaW5jbHVkZSAiU3R5bGVJbWFnZS5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5s
aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5s
aW5lLmNwcAkocmV2aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlcklubGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0OSw4ICs5NDksOCBAQCBMYXlvdXRS
ZWN0IFJlbmRlcklubGluZTo6bGluZXNWaXN1YWxPdmVyCiAgICAgICAgIHJldHVybiBMYXlvdXRS
ZWN0KCk7CiAKICAgICAvLyBSZXR1cm4gdGhlIHdpZHRoIG9mIHRoZSBtaW5pbWFsIGxlZnQgc2lk
ZSBhbmQgdGhlIG1heGltYWwgcmlnaHQgc2lkZS4KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0
U2lkZSA9IE1BWF9MQVlPVVRfVU5JVDsKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodFNpZGUg
PSBNSU5fTEFZT1VUX1VOSVQ7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdFNpZGUgPSBMYXlv
dXRVbml0OjptYXgoKTsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodFNpZGUgPSBMYXlvdXRV
bml0OjptaW4oKTsKICAgICBmb3IgKElubGluZUZsb3dCb3gqIGN1cnIgPSBmaXJzdExpbmVCb3go
KTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkpIHsKICAgICAgICAgbG9naWNhbExl
ZnRTaWRlID0gbWluKGxvZ2ljYWxMZWZ0U2lkZSwgY3Vyci0+bG9naWNhbExlZnRWaXN1YWxPdmVy
ZmxvdygpKTsKICAgICAgICAgbG9naWNhbFJpZ2h0U2lkZSA9IG1heChsb2dpY2FsUmlnaHRTaWRl
LCBjdXJyLT5sb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdygpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMTMzNjc3KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA1
NSw3ICsyMDU1LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cmVzaXplKGNvbnN0IFBsYXRmb3JtTQog
ICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eU1hcmdpbkxlZnQsIFN0cmluZzo6bnVtYmVyKHJlbmRlcmVyLT5tYXJnaW5MZWZ0KCkgLyB6
b29tRmFjdG9yKSArICJweCIsIGZhbHNlKTsKICAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNl
dElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5SaWdodCwgU3RyaW5nOjpudW1i
ZXIocmVuZGVyZXItPm1hcmdpblJpZ2h0KCkgLyB6b29tRmFjdG9yKSArICJweCIsIGZhbHNlKTsK
ICAgICAgICAgfQotICAgICAgICBMYXlvdXRVbml0IGJhc2VXaWR0aCA9IHJlbmRlcmVyLT53aWR0
aCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gWkVST19MQVlPVVRfVU5JVCA6IHJlbmRlcmVyLT5i
b3JkZXJBbmRQYWRkaW5nV2lkdGgoKSk7CisgICAgICAgIExheW91dFVuaXQgYmFzZVdpZHRoID0g
cmVuZGVyZXItPndpZHRoKCkgLSAoaXNCb3hTaXppbmdCb3JkZXIgPyBMYXlvdXRVbml0KCkgOiBy
ZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ1dpZHRoKCkpOwogICAgICAgICBiYXNlV2lkdGggPSBi
YXNlV2lkdGggLyB6b29tRmFjdG9yOwogICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVT
dHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgsIFN0cmluZzo6bnVtYmVyKHJvdW5kVG9JbnQo
YmFzZVdpZHRoICsgZGlmZmVyZW5jZS53aWR0aCgpKSkgKyAicHgiLCBmYWxzZSk7CiAgICAgfQpA
QCAtMjA2Niw3ICsyMDY2LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cmVzaXplKGNvbnN0IFBsYXRm
b3JtTQogICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShD
U1NQcm9wZXJ0eU1hcmdpblRvcCwgU3RyaW5nOjpudW1iZXIocmVuZGVyZXItPm1hcmdpblRvcCgp
IC8gem9vbUZhY3RvcikgKyAicHgiLCBmYWxzZSk7CiAgICAgICAgICAgICBzdHlsZWRFbGVtZW50
LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luQm90dG9tLCBTdHJpbmc6
Om51bWJlcihyZW5kZXJlci0+bWFyZ2luQm90dG9tKCkgLyB6b29tRmFjdG9yKSArICJweCIsIGZh
bHNlKTsKICAgICAgICAgfQotICAgICAgICBMYXlvdXRVbml0IGJhc2VIZWlnaHQgPSByZW5kZXJl
ci0+aGVpZ2h0KCkgLSAoaXNCb3hTaXppbmdCb3JkZXIgPyBaRVJPX0xBWU9VVF9VTklUIDogcmVu
ZGVyZXItPmJvcmRlckFuZFBhZGRpbmdIZWlnaHQoKSk7CisgICAgICAgIExheW91dFVuaXQgYmFz
ZUhlaWdodCA9IHJlbmRlcmVyLT5oZWlnaHQoKSAtIChpc0JveFNpemluZ0JvcmRlciA/IExheW91
dFVuaXQoKSA6IHJlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nSGVpZ2h0KCkpOwogICAgICAgICBi
YXNlSGVpZ2h0ID0gYmFzZUhlaWdodCAvIHpvb21GYWN0b3I7CiAgICAgICAgIHN0eWxlZEVsZW1l
bnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQsIFN0cmluZzo6bnVt
YmVyKHJvdW5kVG9JbnQoYmFzZUhlaWdodCArIGRpZmZlcmVuY2UuaGVpZ2h0KCkpKSArICJweCIs
IGZhbHNlKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJGaWx0ZXJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyRmlsdGVySW5mby5oCShyZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDggKzM2LDcgQEAKICNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudC5oIgogI2VuZGlmCiAjaW5j
bHVkZSAiRmlsdGVyT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFJlY3Qu
aCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RNYXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0TWFya2VyLmNwcAkocmV2aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTA1LDcg
KzE1MDUsNyBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OnVwZGF0ZU1hcmdpbnMoKQogICAgICAg
ICAgICAgICAgICAgICBjYXNlIE5vbmVMaXN0U3R5bGU6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1hcmdpblN0YXJ0ID0gbV90ZXh0LmlzRW1wdHkoKSA/IFpFUk9fTEFZT1VUX1VOSVQg
OiAtbWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCkgLSBvZmZzZXQgLyAyOworICAgICAgICAgICAg
ICAgICAgICAgICAgbWFyZ2luU3RhcnQgPSBtX3RleHQuaXNFbXB0eSgpID8gTGF5b3V0VW5pdCgp
IDogLW1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpIC0gb2Zmc2V0IC8gMjsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtYXJnaW5FbmQgPSAtbWFyZ2luU3Rh
cnQgLSBtaW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAJKHJldmlzaW9uIDEzMzY3NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1
LDEzICsxMjUsMTMgQEAgaW50IFJlbmRlck1hcnF1ZWU6OmNvbXB1dGVQb3NpdGlvbihFTWFycQog
ICAgICAgICB9CiAgICAgICAgIGlmIChkaXIgPT0gTVJJR0hUKSB7CiAgICAgICAgICAgICBpZiAo
c3RvcEF0Q29udGVudEVkZ2UpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1heChaRVJPX0xBWU9V
VF9VTklULCBsdHIgPyAoY29udGVudFdpZHRoIC0gY2xpZW50V2lkdGgpIDogKGNsaWVudFdpZHRo
IC0gY29udGVudFdpZHRoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1heDxMYXlvdXRVbml0
PigwLCBsdHIgPyAoY29udGVudFdpZHRoIC0gY2xpZW50V2lkdGgpIDogKGNsaWVudFdpZHRoIC0g
Y29udGVudFdpZHRoKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGx0ciA/IGNvbnRlbnRXaWR0aCA6IGNsaWVudFdpZHRoOwogICAgICAgICB9CiAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgaWYgKHN0b3BBdENvbnRlbnRFZGdlKQotICAgICAgICAgICAgICAg
IHJldHVybiBtaW4oWkVST19MQVlPVVRfVU5JVCwgbHRyID8gKGNvbnRlbnRXaWR0aCAtIGNsaWVu
dFdpZHRoKSA6IChjbGllbnRXaWR0aCAtIGNvbnRlbnRXaWR0aCkpOworICAgICAgICAgICAgICAg
IHJldHVybiBtaW48TGF5b3V0VW5pdD4oMCwgbHRyID8gKGNvbnRlbnRXaWR0aCAtIGNsaWVudFdp
ZHRoKSA6IChjbGllbnRXaWR0aCAtIGNvbnRlbnRXaWR0aCkpOwogICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgIHJldHVybiBsdHIgPyAtY2xpZW50V2lkdGggOiAtY29udGVudFdpZHRo
OwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxp
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxp
c3QuaAkocmV2aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck1lbnVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICNpZm5kZWYgUmVu
ZGVyTWVudUxpc3RfaAogI2RlZmluZSBSZW5kZXJNZW51TGlzdF9oCiAKLSNpbmNsdWRlICJMYXlv
dXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJQb3B1cE1lbnUu
aCIKICNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJSZW5kZXJEZXByZWNh
dGVkRmxleGlibGVCb3guaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
dWx0aUNvbHVtbkJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTXVsdGlDb2x1bW5CbG9jay5jcHAJKHJldmlzaW9uIDEzMzY3NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzcsOCArMzcsOCBAQCBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjpSZW5kZXJNdWx0
aUNvbHVtCiAgICAgOiBSZW5kZXJCbG9jayhub2RlKQogICAgICwgbV9mbG93VGhyZWFkKDApCiAg
ICAgLCBtX2NvbHVtbkNvdW50KDEpCi0gICAgLCBtX2NvbHVtbldpZHRoKFpFUk9fTEFZT1VUX1VO
SVQpCi0gICAgLCBtX2NvbHVtbkhlaWdodChaRVJPX0xBWU9VVF9VTklUKQorICAgICwgbV9jb2x1
bW5XaWR0aCgwKQorICAgICwgbV9jb2x1bW5IZWlnaHQoMCkKIHsKIH0KIApAQCAtODMsMTMgKzgz
LDEzIEBAIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5CbG9jazo6Y2hlY2tGb3JQYWcKICAgICAvLyBX
ZSBkb24ndCBhY3R1YWxseSB1cGRhdGUgYW55IG9mIHRoZSB2YXJpYWJsZXMuIFdlIGp1c3Qgc3Vi
Y2xhc3NlZCB0byBhZGp1c3Qgb3VyIGNvbHVtbiBoZWlnaHQuCiAgICAgdXBkYXRlTG9naWNhbEhl
aWdodCgpOwogICAgIExheW91dFVuaXQgbmV3Q29udGVudExvZ2ljYWxIZWlnaHQgPSBjb250ZW50
TG9naWNhbEhlaWdodCgpOwotICAgIGlmIChuZXdDb250ZW50TG9naWNhbEhlaWdodCA+IFpFUk9f
TEFZT1VUX1VOSVQpIHsKKyAgICBpZiAobmV3Q29udGVudExvZ2ljYWxIZWlnaHQgPiAwKSB7CiAg
ICAgICAgIC8vIFRoZSByZWdpb25zIHdpbGwgYmUgaW52YWxpZGF0ZWQgd2hlbiB3ZSBsYXkgdGhl
bSBvdXQgYW5kIHRoZXkgY2hhbmdlIHNpemUgdG8KICAgICAgICAgLy8gdGhlIG5ldyBjb2x1bW4g
aGVpZ2h0LgogICAgICAgICBpZiAoY29sdW1uSGVpZ2h0KCkgIT0gbmV3Q29udGVudExvZ2ljYWxI
ZWlnaHQpCiAgICAgICAgICAgICBzZXRDb2x1bW5IZWlnaHQobmV3Q29udGVudExvZ2ljYWxIZWln
aHQpOwogICAgIH0KLSAgICBzZXRMb2dpY2FsSGVpZ2h0KFpFUk9fTEFZT1VUX1VOSVQpOworICAg
IHNldExvZ2ljYWxIZWlnaHQoMCk7CiAKICAgICAvLyBTZXQgdXAgb3VyIGNvbHVtbiBzZXRzLgog
ICAgIGVuc3VyZUNvbHVtblNldHMoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNdWx0aUNvbHVtblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmNwcAkocmV2aXNpb24gMTMzNjc3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzksOCArMzksOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBSZW5kZXJNdWx0aUNv
bHVtblNldDo6UmVuZGVyTXVsdGlDb2x1bW5TZXQoTm9kZSogbm9kZSwgUmVuZGVyRmxvd1RocmVh
ZCogZmxvd1RocmVhZCkKICAgICA6IFJlbmRlclJlZ2lvblNldChub2RlLCBmbG93VGhyZWFkKQog
ICAgICwgbV9jb21wdXRlZENvbHVtbkNvdW50KDEpCi0gICAgLCBtX2NvbXB1dGVkQ29sdW1uV2lk
dGgoWkVST19MQVlPVVRfVU5JVCkKLSAgICAsIG1fY29tcHV0ZWRDb2x1bW5IZWlnaHQoWkVST19M
QVlPVVRfVU5JVCkKKyAgICAsIG1fY29tcHV0ZWRDb2x1bW5XaWR0aCgwKQorICAgICwgbV9jb21w
dXRlZENvbHVtbkhlaWdodCgwKQogewogfQogCkBAIC0yMjgsOSArMjI4LDkgQEAgdm9pZCBSZW5k
ZXJNdWx0aUNvbHVtblNldDo6cGFpbnRDb2x1bW5SdQogICAgIGJvb2wgYW50aWFsaWFzID0gc2hv
dWxkQW50aWFsaWFzTGluZXMocGFpbnRJbmZvLmNvbnRleHQpOwogCiAgICAgYm9vbCBsZWZ0VG9S
aWdodCA9IHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLSAgICBMYXlvdXRVbml0
IGN1cnJMb2dpY2FsTGVmdE9mZnNldCA9IGxlZnRUb1JpZ2h0ID8gWkVST19MQVlPVVRfVU5JVCA6
IGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICBMYXlvdXRVbml0IGN1cnJMb2dpY2FsTGVmdE9m
ZnNldCA9IGxlZnRUb1JpZ2h0ID8gTGF5b3V0VW5pdCgpIDogY29udGVudExvZ2ljYWxXaWR0aCgp
OwogICAgIExheW91dFVuaXQgcnVsZUFkZCA9IGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsTGVmdCgp
OwotICAgIExheW91dFVuaXQgcnVsZUxvZ2ljYWxMZWZ0ID0gbGVmdFRvUmlnaHQgPyBaRVJPX0xB
WU9VVF9VTklUIDogY29udGVudExvZ2ljYWxXaWR0aCgpOworICAgIExheW91dFVuaXQgcnVsZUxv
Z2ljYWxMZWZ0ID0gbGVmdFRvUmlnaHQgPyBMYXlvdXRVbml0KCkgOiBjb250ZW50TG9naWNhbFdp
ZHRoKCk7CiAgICAgTGF5b3V0VW5pdCBpbmxpbmVEaXJlY3Rpb25TaXplID0gY29tcHV0ZWRDb2x1
bW5XaWR0aCgpOwogICAgIEJveFNpZGUgYm94U2lkZSA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkKICAgICAgICAgPyBsZWZ0VG9SaWdodCA/IEJTTGVmdCA6IEJTUmlnaHQKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwCShy
ZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRG
bG93VGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM0LDcgKzQzNCw3IEBAIHN0YXRpYyBi
b29sIGlzQ29udGFpbmVkSW5Ob2RlcyhWZWN0b3I8Tm8KIAogc3RhdGljIGJvb2wgYm94SW50ZXJz
ZWN0c1JlZ2lvbihMYXlvdXRVbml0IGxvZ2ljYWxUb3BGb3JCb3gsIExheW91dFVuaXQgbG9naWNh
bEJvdHRvbUZvckJveCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wRm9yUmVnaW9uLCBMYXlvdXRVbml0
IGxvZ2ljYWxCb3R0b21Gb3JSZWdpb24pCiB7Ci0gICAgYm9vbCByZWdpb25Jc0VtcHR5ID0gbG9n
aWNhbEJvdHRvbUZvclJlZ2lvbiAhPSBNQVhfTEFZT1VUX1VOSVQgJiYgbG9naWNhbFRvcEZvclJl
Z2lvbiAhPSBNSU5fTEFZT1VUX1VOSVQKKyAgICBib29sIHJlZ2lvbklzRW1wdHkgPSBsb2dpY2Fs
Qm90dG9tRm9yUmVnaW9uICE9IExheW91dFVuaXQ6Om1heCgpICYmIGxvZ2ljYWxUb3BGb3JSZWdp
b24gIT0gTGF5b3V0VW5pdDo6bWluKCkKICAgICAgICAgJiYgKGxvZ2ljYWxCb3R0b21Gb3JSZWdp
b24gLSBsb2dpY2FsVG9wRm9yUmVnaW9uKSA8PSAwOwogICAgIHJldHVybiAgKGxvZ2ljYWxCb3R0
b21Gb3JCb3ggLSBsb2dpY2FsVG9wRm9yQm94KSA+IDAKICAgICAgICAgJiYgIXJlZ2lvbklzRW1w
dHkKQEAgLTQ0OCwxMyArNDQ4LDEzIEBAIHZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpnZXRS
YW5nZXMoVmUKIAogICAgIC8vIGV4dGVuZCB0aGUgZmlyc3QgcmVnaW9uIHRvcCB0byBjb250YWlu
IGV2ZXJ5dGhpbmcgdXAgdG8gaXRzIGxvZ2ljYWwgaGVpZ2h0CiAgICAgaWYgKHJlZ2lvbi0+aXNG
aXJzdFJlZ2lvbigpKQotICAgICAgICBsb2dpY2FsVG9wRm9yUmVnaW9uID0gTUlOX0xBWU9VVF9V
TklUOworICAgICAgICBsb2dpY2FsVG9wRm9yUmVnaW9uID0gTGF5b3V0VW5pdDo6bWluKCk7CiAg
ICAgZWxzZQogICAgICAgICBsb2dpY2FsVG9wRm9yUmVnaW9uID0gIHJlZ2lvbi0+bG9naWNhbFRv
cEZvckZsb3dUaHJlYWRDb250ZW50KCk7CiAKICAgICAvLyBleHRlbmQgdGhlIGxhc3QgcmVnaW9u
IHRvIGNvbnRhaW4gZXZlcnl0aGluZyBhYm92ZSBpdHMgeSgpCiAgICAgaWYgKHJlZ2lvbi0+aXNM
YXN0UmVnaW9uKCkpCi0gICAgICAgIGxvZ2ljYWxCb3R0b21Gb3JSZWdpb24gPSBNQVhfTEFZT1VU
X1VOSVQ7CisgICAgICAgIGxvZ2ljYWxCb3R0b21Gb3JSZWdpb24gPSBMYXlvdXRVbml0OjptYXgo
KTsKICAgICBlbHNlCiAgICAgICAgIGxvZ2ljYWxCb3R0b21Gb3JSZWdpb24gPSByZWdpb24tPmxv
Z2ljYWxCb3R0b21Gb3JGbG93VGhyZWFkQ29udGVudCgpOwogCkBAIC00OTYsOCArNDk2LDggQEAg
dm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmdldFJhbmdlcyhWZQogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBMYXlvdXRVbml0IG9mZnNldFRvcCA9IHJlbmRlcmVyLT5jb250YWluaW5n
QmxvY2soKS0+b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpOwotICAgICAgICAgICAg
Y29uc3QgTGF5b3V0UG9pbnQgbG9naWNhbE9mZnNldEZyb21Ub3AoaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSA/IFpFUk9fTEFZT1VUX1VOSVQgOiAgb2Zmc2V0VG9wLAotICAgICAgICAgICAgICAg
IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBvZmZzZXRUb3AgOiBaRVJPX0xBWU9VVF9VTklU
KTsKKyAgICAgICAgICAgIGNvbnN0IExheW91dFBvaW50IGxvZ2ljYWxPZmZzZXRGcm9tVG9wKGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBMYXlvdXRVbml0KCkgOiAgb2Zmc2V0VG9wLAorICAg
ICAgICAgICAgICAgIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBvZmZzZXRUb3AgOiBMYXlv
dXRVbml0KCkpOwogCiAgICAgICAgICAgICBib3VuZGluZ0JveC5tb3ZlQnkobG9naWNhbE9mZnNl
dEZyb21Ub3ApOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcAkocmV2aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NTAsNyArMTQ1MCw3IEBAIGJvb2wgUmVu
ZGVyT2JqZWN0OjpyZXBhaW50QWZ0ZXJMYXlvdXRJZk4KICAgICAgICAgTGF5b3V0VW5pdCBzaGFk
b3dSaWdodDsKICAgICAgICAgc3R5bGUoKS0+Z2V0Qm94U2hhZG93SG9yaXpvbnRhbEV4dGVudChz
aGFkb3dMZWZ0LCBzaGFkb3dSaWdodCk7CiAgICAgICAgIGludCBib3JkZXJSaWdodCA9IGlzQm94
KCkgPyB0b1JlbmRlckJveCh0aGlzKS0+Ym9yZGVyUmlnaHQoKSA6IDA7Ci0gICAgICAgIExheW91
dFVuaXQgYm94V2lkdGggPSBpc0JveCgpID8gdG9SZW5kZXJCb3godGhpcyktPndpZHRoKCkgOiBa
RVJPX0xBWU9VVF9VTklUOworICAgICAgICBMYXlvdXRVbml0IGJveFdpZHRoID0gaXNCb3goKSA/
IHRvUmVuZGVyQm94KHRoaXMpLT53aWR0aCgpIDogTGF5b3V0VW5pdCgpOwogICAgICAgICBMYXlv
dXRVbml0IG1pbkluc2V0UmlnaHRTaGFkb3dFeHRlbnQgPSBtaW48TGF5b3V0VW5pdD4oLWluc2V0
U2hhZG93RXh0ZW50LnJpZ2h0KCksIG1pbjxMYXlvdXRVbml0PihuZXdCb3VuZHMud2lkdGgoKSwg
b2xkQm91bmRzLndpZHRoKCkpKTsKICAgICAgICAgTGF5b3V0VW5pdCBib3JkZXJXaWR0aCA9IG1h
eDxMYXlvdXRVbml0Pihib3JkZXJSaWdodCwgbWF4PExheW91dFVuaXQ+KHZhbHVlRm9yTGVuZ3Ro
KHN0eWxlKCktPmJvcmRlclRvcFJpZ2h0UmFkaXVzKCkud2lkdGgoKSwgYm94V2lkdGgsIHYpLCB2
YWx1ZUZvckxlbmd0aChzdHlsZSgpLT5ib3JkZXJCb3R0b21SaWdodFJhZGl1cygpLndpZHRoKCks
IGJveFdpZHRoLCB2KSkpOwogICAgICAgICBMYXlvdXRVbml0IGRlY29yYXRpb25zV2lkdGggPSBt
YXg8TGF5b3V0VW5pdD4oLW91dGxpbmVTdHlsZS0+b3V0bGluZU9mZnNldCgpLCBib3JkZXJXaWR0
aCArIG1pbkluc2V0UmlnaHRTaGFkb3dFeHRlbnQpICsgbWF4PExheW91dFVuaXQ+KG91dGxpbmVX
aWR0aCwgc2hhZG93UmlnaHQpOwpAQCAtMTQ3MCw3ICsxNDcwLDcgQEAgYm9vbCBSZW5kZXJPYmpl
Y3Q6OnJlcGFpbnRBZnRlckxheW91dElmTgogICAgICAgICBMYXlvdXRVbml0IHNoYWRvd0JvdHRv
bTsKICAgICAgICAgc3R5bGUoKS0+Z2V0Qm94U2hhZG93VmVydGljYWxFeHRlbnQoc2hhZG93VG9w
LCBzaGFkb3dCb3R0b20pOwogICAgICAgICBpbnQgYm9yZGVyQm90dG9tID0gaXNCb3goKSA/IHRv
UmVuZGVyQm94KHRoaXMpLT5ib3JkZXJCb3R0b20oKSA6IDA7Ci0gICAgICAgIExheW91dFVuaXQg
Ym94SGVpZ2h0ID0gaXNCb3goKSA/IHRvUmVuZGVyQm94KHRoaXMpLT5oZWlnaHQoKSA6IFpFUk9f
TEFZT1VUX1VOSVQ7CisgICAgICAgIExheW91dFVuaXQgYm94SGVpZ2h0ID0gaXNCb3goKSA/IHRv
UmVuZGVyQm94KHRoaXMpLT5oZWlnaHQoKSA6IExheW91dFVuaXQoKTsKICAgICAgICAgTGF5b3V0
VW5pdCBtaW5JbnNldEJvdHRvbVNoYWRvd0V4dGVudCA9IG1pbjxMYXlvdXRVbml0PigtaW5zZXRT
aGFkb3dFeHRlbnQuYm90dG9tKCksIG1pbjxMYXlvdXRVbml0PihuZXdCb3VuZHMuaGVpZ2h0KCks
IG9sZEJvdW5kcy5oZWlnaHQoKSkpOwogICAgICAgICBMYXlvdXRVbml0IGJvcmRlckhlaWdodCA9
IG1heDxMYXlvdXRVbml0Pihib3JkZXJCb3R0b20sIG1heDxMYXlvdXRVbml0Pih2YWx1ZUZvckxl
bmd0aChzdHlsZSgpLT5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCkuaGVpZ2h0KCksIGJveEhlaWdo
dCwgdiksIHZhbHVlRm9yTGVuZ3RoKHN0eWxlKCktPmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCku
aGVpZ2h0KCksIGJveEhlaWdodCwgdikpKTsKICAgICAgICAgTGF5b3V0VW5pdCBkZWNvcmF0aW9u
c0hlaWdodCA9IG1heDxMYXlvdXRVbml0Pigtb3V0bGluZVN0eWxlLT5vdXRsaW5lT2Zmc2V0KCks
IGJvcmRlckhlaWdodCArIG1pbkluc2V0Qm90dG9tU2hhZG93RXh0ZW50KSArIG1heDxMYXlvdXRV
bml0PihvdXRsaW5lV2lkdGgsIHNoYWRvd0JvdHRvbSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDcg
QEAKICNpbmNsdWRlICJEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAi
RWxlbWVudC5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgotI2luY2x1ZGUgIkZyYWN0aW9uYWxM
YXlvdXRVbml0LmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRS
ZWN0LmgiCiAjaW5jbHVkZSAiUGFpbnRQaGFzZS5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdENo
aWxkTGlzdC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT3ZlcmZsb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT3ZlcmZsb3cuaAkocmV2aXNpb24gMTMzNjc3KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck92ZXJmbG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTIx
LDcgKzIxLDcgQEAKICNpZm5kZWYgUmVuZGVyT3ZlcmZsb3dfaAogI2RlZmluZSBSZW5kZXJPdmVy
Zmxvd19oCiAKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3Qu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSZWdpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSZWdpb24uY3BwCShyZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcwLDE0ICszNzAs
MTQgQEAgdm9pZCBSZW5kZXJSZWdpb246OmRlbGV0ZUFsbFJlbmRlckJveFJlZwogTGF5b3V0VW5p
dCBSZW5kZXJSZWdpb246OmxvZ2ljYWxUb3BPZkZsb3dUaHJlYWRDb250ZW50UmVjdChjb25zdCBM
YXlvdXRSZWN0JiByZWN0KSBjb25zdAogewogICAgIGlmICghbV9pc1ZhbGlkIHx8ICFmbG93VGhy
ZWFkKCkpCi0gICAgICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOworICAgICAgICByZXR1cm4g
MDsKICAgICByZXR1cm4gZmxvd1RocmVhZCgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8g
cmVjdC55KCkgOiByZWN0LngoKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJSZWdpb246OmxvZ2lj
YWxCb3R0b21PZkZsb3dUaHJlYWRDb250ZW50UmVjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0KSBj
b25zdAogewogICAgIGlmICghbV9pc1ZhbGlkIHx8ICFmbG93VGhyZWFkKCkpCi0gICAgICAgIHJl
dHVybiBaRVJPX0xBWU9VVF9VTklUOworICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gZmxv
d1RocmVhZCgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gcmVjdC5tYXhZKCkgOiByZWN0
Lm1heFgoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxh
Y2VkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVw
bGFjZWQuY3BwCShyZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUmVwbGFjZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODIsNyArMzgyLDcgQEAgTGF5
b3V0VW5pdCBSZW5kZXJSZXBsYWNlZDo6Y29tcHV0ZVJlcGxhYwogICAgICAgICAgICAgICAgIC8v
IFRoaXMgc29sdmVzIGFib3ZlIGVxdWF0aW9uIGZvciAnd2lkdGgnICg9PSBsb2dpY2FsV2lkdGgp
LgogICAgICAgICAgICAgICAgIExheW91dFVuaXQgbWFyZ2luU3RhcnQgPSBtaW5pbXVtVmFsdWVG
b3JMZW5ndGgoc3R5bGUoKS0+bWFyZ2luU3RhcnQoKSwgbG9naWNhbFdpZHRoKTsKICAgICAgICAg
ICAgICAgICBMYXlvdXRVbml0IG1hcmdpbkVuZCA9IG1pbmltdW1WYWx1ZUZvckxlbmd0aChzdHls
ZSgpLT5tYXJnaW5FbmQoKSwgbG9naWNhbFdpZHRoKTsKLSAgICAgICAgICAgICAgICBsb2dpY2Fs
V2lkdGggPSBtYXgoWkVST19MQVlPVVRfVU5JVCwgbG9naWNhbFdpZHRoIC0gKG1hcmdpblN0YXJ0
ICsgbWFyZ2luRW5kICsgKHdpZHRoKCkgLSBjbGllbnRXaWR0aCgpKSkpOworICAgICAgICAgICAg
ICAgIGxvZ2ljYWxXaWR0aCA9IG1heDxMYXlvdXRVbml0PigwLCBsb2dpY2FsV2lkdGggLSAobWFy
Z2luU3RhcnQgKyBtYXJnaW5FbmQgKyAod2lkdGgoKSAtIGNsaWVudFdpZHRoKCkpKSk7CiAgICAg
ICAgICAgICAgICAgaWYgKGlzUGVyY2VudGFnZUludHJpbnNpY1NpemUpCiAgICAgICAgICAgICAg
ICAgICAgIGxvZ2ljYWxXaWR0aCA9IGxvZ2ljYWxXaWR0aCAqIGNvbnN0cmFpbmVkU2l6ZS53aWR0
aCgpIC8gMTAwOwogICAgICAgICAgICAgICAgIHJldHVybiBjb21wdXRlUmVwbGFjZWRMb2dpY2Fs
V2lkdGhSZXNwZWN0aW5nTWluTWF4V2lkdGgobG9naWNhbFdpZHRoLCBpbmNsdWRlTWF4V2lkdGgp
OwpAQCAtNDYwLDcgKzQ2MCw3IEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6OmNvbXB1dGVQcmVmZXJy
ZWRMb2cKICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IGNvbXB1dGVNYXhQcmVmZXJy
ZWRMb2dpY2FsV2lkdGgoKSArIGJvcmRlckFuZFBhZGRpbmc7CiAKICAgICBpZiAoc3R5bGUoKS0+
bWF4V2lkdGgoKS5pc0ZpeGVkKCkpCi0gICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRo
ID0gbWluPExheW91dFVuaXQ+KG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoLCBzdHlsZSgpLT5t
YXhXaWR0aCgpLnZhbHVlKCkgKyAoc3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1gg
PyBib3JkZXJBbmRQYWRkaW5nIDogWkVST19MQVlPVVRfVU5JVCkpOworICAgICAgICBtX21heFBy
ZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1pbjxMYXlvdXRVbml0PihtX21heFByZWZlcnJlZExvZ2lj
YWxXaWR0aCwgc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpICsgKHN0eWxlKCktPmJveFNpemlu
ZygpID09IENPTlRFTlRfQk9YID8gYm9yZGVyQW5kUGFkZGluZyA6IExheW91dFVuaXQoKSkpOwog
CiAgICAgaWYgKGhhc1JlbGF0aXZlRGltZW5zaW9ucygpKQogICAgICAgICBtX21pblByZWZlcnJl
ZExvZ2ljYWxXaWR0aCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZS5jcHAJKHJldmlzaW9uIDEzMzY3NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMSw3ICszMjEsNyBAQCBMYXlvdXRV
bml0IFJlbmRlclRhYmxlOjpjb252ZXJ0U3R5bGVMb2dpCiAgICAgaWYgKGlzQ1NTVGFibGUgJiYg
c3R5bGVMb2dpY2FsV2lkdGguaXNGaXhlZCgpICYmIHN0eWxlTG9naWNhbFdpZHRoLmlzUG9zaXRp
dmUoKSkgewogICAgICAgICByZWNhbGNCb3JkZXJzSW5Sb3dEaXJlY3Rpb24oKTsKICAgICAgICAg
aWYgKHN0eWxlKCktPmJveFNpemluZygpID09IENPTlRFTlRfQk9YKQotICAgICAgICAgICAgYm9y
ZGVycyA9IGJvcmRlclN0YXJ0KCkgKyBib3JkZXJFbmQoKSArIChjb2xsYXBzZUJvcmRlcnMoKSA/
IFpFUk9fTEFZT1VUX1VOSVQgOiBwYWRkaW5nU3RhcnQoKSArIHBhZGRpbmdFbmQoKSk7CisgICAg
ICAgICAgICBib3JkZXJzID0gYm9yZGVyU3RhcnQoKSArIGJvcmRlckVuZCgpICsgKGNvbGxhcHNl
Qm9yZGVycygpID8gTGF5b3V0VW5pdCgpIDogcGFkZGluZ1N0YXJ0KCkgKyBwYWRkaW5nRW5kKCkp
OwogICAgIH0KICAgICByZXR1cm4gbWluaW11bVZhbHVlRm9yTGVuZ3RoKHN0eWxlTG9naWNhbFdp
ZHRoLCBhdmFpbGFibGVXaWR0aCwgdmlldygpKSArIGJvcmRlcnM7CiB9CkBAIC00MzQsOCArNDM0
LDggQEAgdm9pZCBSZW5kZXJUYWJsZTo6bGF5b3V0KCkKICAgICAgICAgfQogICAgIH0KIAotICAg
IExheW91dFVuaXQgYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSA9IGJvcmRlckJlZm9yZSgpICsgKGNv
bGxhcHNpbmcgPyBaRVJPX0xBWU9VVF9VTklUIDogcGFkZGluZ0JlZm9yZSgpKTsKLSAgICBMYXlv
dXRVbml0IGJvcmRlckFuZFBhZGRpbmdBZnRlciA9IGJvcmRlckFmdGVyKCkgKyAoY29sbGFwc2lu
ZyA/IFpFUk9fTEFZT1VUX1VOSVQgOiBwYWRkaW5nQWZ0ZXIoKSk7CisgICAgTGF5b3V0VW5pdCBi
b3JkZXJBbmRQYWRkaW5nQmVmb3JlID0gYm9yZGVyQmVmb3JlKCkgKyAoY29sbGFwc2luZyA/IExh
eW91dFVuaXQoKSA6IHBhZGRpbmdCZWZvcmUoKSk7CisgICAgTGF5b3V0VW5pdCBib3JkZXJBbmRQ
YWRkaW5nQWZ0ZXIgPSBib3JkZXJBZnRlcigpICsgKGNvbGxhcHNpbmcgPyBMYXlvdXRVbml0KCkg
OiBwYWRkaW5nQWZ0ZXIoKSk7CiAKICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQo
KSArIGJvcmRlckFuZFBhZGRpbmdCZWZvcmUpOwogCkBAIC00NDYsNyArNDQ2LDcgQEAgdm9pZCBS
ZW5kZXJUYWJsZTo6bGF5b3V0KCkKICAgICBMYXlvdXRVbml0IGNvbXB1dGVkTG9naWNhbEhlaWdo
dCA9IDA7CiAgICAgaWYgKGxvZ2ljYWxIZWlnaHRMZW5ndGguaXNGaXhlZCgpKSB7CiAgICAgICAg
IC8vIEhUTUwgdGFibGVzIHNpemUgYXMgdGhvdWdoIENTUyBoZWlnaHQgaW5jbHVkZXMgYm9yZGVy
L3BhZGRpbmcsIENTUyB0YWJsZXMgZG8gbm90LgotICAgICAgICBMYXlvdXRVbml0IGJvcmRlcnMg
PSBaRVJPX0xBWU9VVF9VTklUOworICAgICAgICBMYXlvdXRVbml0IGJvcmRlcnMgPSAwOwogICAg
ICAgICAvLyBGSVhNRTogV2UgY2Fubm90IGFwcGx5IGJveC1zaXppbmc6IGNvbnRlbnQtYm94IG9u
IDx0YWJsZT4gd2hpY2ggb3RoZXIgYnJvd3NlcnMgYWxsb3cuCiAgICAgICAgIGlmICgobm9kZSgp
ICYmIG5vZGUoKS0+aGFzVGFnTmFtZSh0YWJsZVRhZykpIHx8IHN0eWxlKCktPmJveFNpemluZygp
ID09IEJPUkRFUl9CT1gpCiAgICAgICAgICAgICBib3JkZXJzID0gYm9yZGVyQW5kUGFkZGluZ0Jl
Zm9yZSArIGJvcmRlckFuZFBhZGRpbmdBZnRlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZS5oCShyZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDE0ICsxOTEsMTMgQEAg
cHVibGljOgogICAgICAgICBpZiAodW5zaWduZWQgZWZmZWN0aXZlQ29sdW1uQ291bnQgPSBudW1F
ZmZDb2xzKCkpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oZWZm
ZWN0aXZlQ29sdW1uQ291bnQgKyAxKSAqIGhCb3JkZXJTcGFjaW5nKCk7CiAKLSAgICAgICAgcmV0
dXJuIFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIExh
eW91dFVuaXQgYm9yZGVyc1BhZGRpbmdBbmRTcGFjaW5nSW5Sb3dEaXJlY3Rpb24oKSBjb25zdAog
ICAgIHsKICAgICAgICAgLy8gJ2JvcmRlci1zcGFjaW5nJyBvbmx5IGFwcGxpZXMgdG8gc2VwYXJh
dGUgYm9yZGVycyAoc2VlIDE3LjYuMSBUaGUgc2VwYXJhdGVkIGJvcmRlcnMgbW9kZWwpLgotICAg
ICAgICByZXR1cm4gYm9yZGVyU3RhcnQoKSArIGJvcmRlckVuZCgpICsKLSAgICAgICAgICAgICAg
IChjb2xsYXBzZUJvcmRlcnMoKSA/IFpFUk9fTEFZT1VUX1VOSVQgOiAocGFkZGluZ1N0YXJ0KCkg
KyBwYWRkaW5nRW5kKCkgKyBib3JkZXJTcGFjaW5nSW5Sb3dEaXJlY3Rpb24oKSkpOworICAgICAg
ICByZXR1cm4gYm9yZGVyU3RhcnQoKSArIGJvcmRlckVuZCgpICsgKGNvbGxhcHNlQm9yZGVycygp
ID8gTGF5b3V0VW5pdCgpIDogKHBhZGRpbmdTdGFydCgpICsgcGFkZGluZ0VuZCgpICsgYm9yZGVy
U3BhY2luZ0luUm93RGlyZWN0aW9uKCkpKTsKICAgICB9CiAKICAgICAvLyBSZXR1cm4gdGhlIGZp
cnN0IGNvbHVtbiBvciBjb2x1bW4tZ3JvdXAuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MTUsOCArMTYxNSw4IEBA
IExheW91dFJlY3QgUmVuZGVyVGV4dDo6bGluZXNWaXN1YWxPdmVyZmwKICAgICAgICAgcmV0dXJu
IExheW91dFJlY3QoKTsKIAogICAgIC8vIFJldHVybiB0aGUgd2lkdGggb2YgdGhlIG1pbmltYWwg
bGVmdCBzaWRlIGFuZCB0aGUgbWF4aW1hbCByaWdodCBzaWRlLgotICAgIExheW91dFVuaXQgbG9n
aWNhbExlZnRTaWRlID0gTUFYX0xBWU9VVF9VTklUOwotICAgIExheW91dFVuaXQgbG9naWNhbFJp
Z2h0U2lkZSA9IE1JTl9MQVlPVVRfVU5JVDsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0U2lk
ZSA9IExheW91dFVuaXQ6Om1heCgpOworICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0U2lkZSA9
IExheW91dFVuaXQ6Om1pbigpOwogICAgIGZvciAoSW5saW5lVGV4dEJveCogY3VyciA9IGZpcnN0
VGV4dEJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFRleHRCb3goKSkgewogICAgICAgICBs
b2dpY2FsTGVmdFNpZGUgPSBtaW4obG9naWNhbExlZnRTaWRlLCBjdXJyLT5sb2dpY2FsTGVmdFZp
c3VhbE92ZXJmbG93KCkpOwogICAgICAgICBsb2dpY2FsUmlnaHRTaWRlID0gbWF4KGxvZ2ljYWxS
aWdodFNpZGUsIGN1cnItPmxvZ2ljYWxSaWdodFZpc3VhbE92ZXJmbG93KCkpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Db21tb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtQ29t
bW9uLmNwcAkocmV2aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lQ2hyb21pdW1Db21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWVDaHJvbWl1bUNv
bW1vbi5oIgogCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFVuaXQuaCIKICNpbmNsdWRlICJJ
bnB1dFR5cGVOYW1lcy5oIgorI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bUNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUNocm9taXVtQ29tbW9uLmgJKHJldmlzaW9uIDEzMzY3NykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtQ29tbW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDcgKzI3LDcgQEAKICNpZm5kZWYgUmVuZGVyVGhlbWVDaHJvbWl1bUNvbW1vbl9oCiAj
ZGVmaW5lIFJlbmRlclRoZW1lQ2hyb21pdW1Db21tb25faAogCi0jaW5jbHVkZSAiTGF5b3V0VHlw
ZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRVbml0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWlj
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDEzMzY3NykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODksNyArODksNyBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjCiAgICAgcmV0dXJuIHRzIDw8ICIoIiA8PCBwLngoKSA8PCAiLCIgPDwgcC55KCkgPDwgIiki
OwogfQogCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQmIHApCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBMYXlvdXRQb2ludCYgcCkKIHsKICAgICAvLyBGSVhNRTogVGhlc2Ugc2hvdWxk
IGJlIHByaW50ZWQgYXMgZmxvYXRzLiBLZWVwaW5nIHRoZW0gaW50cyBmb3IgY29uc2lzdGVuY3kg
d2l0aCBwZXJ2aW91cyB0ZXN0IGV4cGVjdGF0aW9ucy4KICAgICByZXR1cm4gdHMgPDwgIigiIDw8
IHAueCgpLnRvSW50KCkgPDwgIiwiIDw8IHAueSgpLnRvSW50KCkgPDwgIikiOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5oCShyZXZpc2lvbiAxMzM2
NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiwxMiArMzIsMTIgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgRWxlbWVudDsKLWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRQb2ludDsKIGNsYXNzIEZsb2F0UG9p
bnQ7CiBjbGFzcyBGbG9hdFNpemU7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEludFBvaW50OwogY2xh
c3MgSW50UmVjdDsKK2NsYXNzIExheW91dFBvaW50OwogY2xhc3MgUmVuZGVyT2JqZWN0OwogY2xh
c3MgVGV4dFN0cmVhbTsKIApAQCAtNzAsNyArNzAsNyBAQCBzdGF0aWMgdm9pZCB3cml0ZVJlbmRl
ck9iamVjdChUZXh0U3RyZWFtCiAKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYs
IGNvbnN0IEludFBvaW50Jik7CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBj
b25zdCBJbnRSZWN0Jik7Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmKTsKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYsIGNvbnN0IExheW91dFBvaW50Jik7CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mLCBjb25zdCBGbG9hdFBvaW50Jik7CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mLCBjb25zdCBGbG9hdFNpemUmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVmlldy5oCShyZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsOCArMTI3LDggQEAgcHVibGlj
OgogICAgICAgICBpZiAobV9sYXlvdXRTdGF0ZSkgewogICAgICAgICAgICAgbV9sYXlvdXRTdGF0
ZS0+bV9sYXlvdXREZWx0YSArPSBkZWx0YTsKICNpZiAhQVNTRVJUX0RJU0FCTEVEICYmIEVOQUJM
RShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCi0gICAgICAgICAgICBtX2xheW91dFN0YXRl
LT5tX2xheW91dERlbHRhWFNhdHVyYXRlZCB8PSBtX2xheW91dFN0YXRlLT5tX2xheW91dERlbHRh
LndpZHRoKCkgPT0gRnJhY3Rpb25hbExheW91dFVuaXQ6Om1heCgpIHx8IG1fbGF5b3V0U3RhdGUt
Pm1fbGF5b3V0RGVsdGEud2lkdGgoKSA9PSBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWluKCk7Ci0g
ICAgICAgICAgICBtX2xheW91dFN0YXRlLT5tX2xheW91dERlbHRhWVNhdHVyYXRlZCB8PSBtX2xh
eW91dFN0YXRlLT5tX2xheW91dERlbHRhLmhlaWdodCgpID09IEZyYWN0aW9uYWxMYXlvdXRVbml0
OjptYXgoKSB8fCBtX2xheW91dFN0YXRlLT5tX2xheW91dERlbHRhLmhlaWdodCgpID09IEZyYWN0
aW9uYWxMYXlvdXRVbml0OjptaW4oKTsKKyAgICAgICAgICAgIG1fbGF5b3V0U3RhdGUtPm1fbGF5
b3V0RGVsdGFYU2F0dXJhdGVkIHw9IG1fbGF5b3V0U3RhdGUtPm1fbGF5b3V0RGVsdGEud2lkdGgo
KSA9PSBMYXlvdXRVbml0OjptYXgoKSB8fCBtX2xheW91dFN0YXRlLT5tX2xheW91dERlbHRhLndp
ZHRoKCkgPT0gTGF5b3V0VW5pdDo6bWluKCk7CisgICAgICAgICAgICBtX2xheW91dFN0YXRlLT5t
X2xheW91dERlbHRhWVNhdHVyYXRlZCB8PSBtX2xheW91dFN0YXRlLT5tX2xheW91dERlbHRhLmhl
aWdodCgpID09IExheW91dFVuaXQ6Om1heCgpIHx8IG1fbGF5b3V0U3RhdGUtPm1fbGF5b3V0RGVs
dGEuaGVpZ2h0KCkgPT0gTGF5b3V0VW5pdDo6bWluKCk7CiAjZW5kaWYKICAgICAgICAgfQogICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9OaW5lUGllY2VJbWFnZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9OaW5lUGllY2VJ
bWFnZS5oCShyZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvTmluZVBpZWNlSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2lm
bmRlZiBOaW5lUGllY2VJbWFnZV9oCiAjZGVmaW5lIE5pbmVQaWVjZUltYWdlX2gKIAotI2luY2x1
ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgogI2luY2x1ZGUgIkxl
bmd0aEJveC5oIgogI2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDEzMzY3NykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSAiRm9udEJhc2VsaW5lLmgiCiAjaW5jbHVk
ZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgotI2luY2x1
ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dEJveEV4dGVu
dC5oIgogI2luY2x1ZGUgIkxlbmd0aC5oIgogI2luY2x1ZGUgIkxlbmd0aEJveC5oIgogI2luY2x1
ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1NoYWRvd0RhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TaGFkb3dEYXRhLmNwcAkocmV2aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3
ICsyMiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2hhZG93RGF0YS5oIgog
Ci0jaW5jbHVkZSAiTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTGF5b3V0
UmVjdC5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU2hhZG93RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TaGFkb3dEYXRhLmgJKHJldmlzaW9uIDEzMzY3NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFkb3dEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAj
aW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlU2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVk
SW1hZ2VTZXQuaAkocmV2aXNpb24gMTMzNjc3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2VTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAs
NyBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2VDbGllbnQuaCIKICNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5
b3V0U2l6ZS5oIgogI2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZS5oCShy
ZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJ
bWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiQ1NTVmFs
dWUuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRl
ICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFNpemUuaCIKICNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJT
dXBwb3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJTdXBwb3J0LmgJKHJldmlzaW9uIDEzMzY3NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw2
IEBACiAjZGVmaW5lIFNWR1JlbmRlclN1cHBvcnRfaAogCiAjaWYgRU5BQkxFKFNWRykKLSNpbmNs
dWRlICJMYXlvdXRUeXBlcy5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC0zMyw2ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZs
b2F0UG9pbnQ7CiBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIExh
eW91dFJlY3Q7CiBjbGFzcyBSZW5kZXJCb3hNb2RlbE9iamVjdDsKIGNsYXNzIFJlbmRlckdlb21l
dHJ5TWFwOwogY2xhc3MgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzM2NzcpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDEyLTExLTA1ICBF
bWlsIEEgRWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZW1vdmUgTGF5b3V0
VHlwZXMgYWJzdHJhY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTkzMDUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgUmVtb3ZlIExheW91dFR5cGVzIGFic3RyYWN0aW9uIGFuZCByZW5hbWUgRnJhY3Rp
b25hbExheW91dCogdG8KKyAgICAgICAgTGF5b3V0KiBub3cgdGhhdCBhbGwgcGxhdGZvcm1zIHVz
ZSB0aGUgRnJhY3Rpb25hbExheW91dCB2ZXJzaW9uCisgICAgICAgIChhbGJlaXQgd2l0aCBkaWZm
ZXJlbnQgZnJhY3Rpb25zKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGNoYW5nZSBpbiBm
dW5jdGlvbmFsaXR5LgorCisgICAgICAgICogc3JjL0xpbmtIaWdobGlnaHQuY3BwOgorCiAyMDEy
LTExLTA2ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAg
ICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTMzNTI2LgpJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvTGlua0hpZ2hsaWdodC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvTGlua0hpZ2hsaWdodC5jcHAJKHJldmlzaW9uIDEzMzY3NykKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xpbmtIaWdobGlnaHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCiAj
aW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIk5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172815</attachid>
            <date>2012-11-07 08:36:41 -0800</date>
            <delta_ts>2012-11-07 16:37:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93050-20121107083452.patch</filename>
            <type>text/plain</type>
            <size>392587</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MyBAQAorMjAxMi0xMS0wNSAgRW1pbCBB
IEVrbHVuZCAgPGVhZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmVtb3ZlIExheW91dFR5cGVz
IGFic3RyYWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05MzA1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFJlbW92ZSBMYXlvdXRUeXBlcyBhYnN0cmFjdGlvbiBhbmQgcmVuYW1lIEZyYWN0aW9uYWxM
YXlvdXQqIHRvCisgICAgICAgIExheW91dCogbm93IHRoYXQgYWxsIHBsYXRmb3JtcyB1c2UgdGhl
IEZyYWN0aW9uYWxMYXlvdXQgdmVyc2lvbgorICAgICAgICAoYWxiZWl0IHdpdGggZGlmZmVyZW50
IGZyYWN0aW9ucykuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBjaGFuZ2UgaW4gZnVuY3Rp
b25hbGl0eS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2Vm
aWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJDb3JlLmV4
cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3Bw
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaDoKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiBjc3Mv
TGVuZ3RoRnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKiBjc3MvTGVuZ3RoRnVuY3Rpb25zLmg6Cisg
ICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogZG9tL0RvY3VtZW50TWFya2VyQ29u
dHJvbGxlci5oOgorICAgICAgICAqIGRvbS9FbGVtZW50UmFyZURhdGEuaDoKKyAgICAgICAgKiBk
b20vTW91c2VSZWxhdGVkRXZlbnQuaDoKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAq
IGRvbS9Ub3VjaC5oOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAg
ICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaDoKKyAgICAgICAgKiBlZGl0aW5nL1JlbmRl
cmVkUG9zaXRpb24uaDoKKyAgICAgICAgKiBodG1sL0hUTUxBcmVhRWxlbWVudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvclRpbWVsaW5lQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvVGltZWxpbmVSZWNv
cmRGYWN0b3J5LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5
Lmg6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmg6CisgICAgICAgICogcGFn
ZS9Gb2N1c0NvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorICAgICAg
ICAqIHBhZ2UvUGFnZS5oOgorICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwOgor
ICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9G
cmFjdGlvbmFsTGF5b3V0VW5pdC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL0xheW91
dFVuaXQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRnJhY3Rpb25hbExh
eW91dFVuaXQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9MZW5ndGguaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9Qb3B1cE1lbnVDbGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hbmltYXRpb24vQW5p
bWF0aW9uVXRpbGl0aWVzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2lu
dC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRSZWN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRT
aXplLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94RXh0
ZW50Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExh
eW91dFBvaW50Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rp
b25hbExheW91dFJlY3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ZyYWN0aW9uYWxMYXlvdXRSZWN0Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRnJhY3Rpb25hbExheW91dFNpemUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbnRSZWN0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50LmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dEJveEV4
dGVudC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50Lmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxM
YXlvdXRCb3hFeHRlbnQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRQb2lu
dC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlv
bmFsTGF5b3V0UG9pbnQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rp
b25hbExheW91dFJlY3QuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJl
Y3QuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rp
b25hbExheW91dFJlY3QuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRTaXpl
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9u
YWxMYXlvdXRTaXplLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlck9wZXJh
dGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVy
UGFyYW1ldGVyTGlzdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyT3BlcmF0aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJPcGVyYXRpb25zLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9WYWxp
ZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFBvaW50UXQuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxMYXlvdXRSZWN0UXQu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxM
YXlvdXRTaXplUXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0
L0xheW91dFBvaW50UXQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9GcmFjdGlvbmFsTGF5b3V0UG9pbnRRdC5jcHAuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvTGF5b3V0UmVjdFF0LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvTGF5b3V0U2l6ZVF0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFNpemVRdC5jcHAuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25zLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25N
YXRyaXguY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNm
b3JtYXRpb25NYXRyaXguaDoKKyAgICAgICAgKiByZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0Lmg6
CisgICAgICAgICogcmVuZGVyaW5nL0NvbHVtbkluZm8uaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmg6CisgICAgICAgICogcmVuZGVyaW5nL0ZpbHRlckVm
ZmVjdFJlbmRlcmVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvR2FwUmVjdHMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0
VGVzdFJlc3VsdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0aW5nVHJhbnNmb3JtU3Rh
dGUuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgICogcmVuZGVy
aW5nL0xheW91dFJlcGFpbnRlci5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL0xheW91dFJlcGFp
bnRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRTdGF0ZS5oOgorICAgICAgICAqIHJl
bmRlcmluZy9MYXlvdXRUeXBlcy5oOgorICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRUeXBlc0lu
bGluZU1ldGhvZHMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUGFpbnRJbmZvLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
QmxvY2suaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNw
cDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJG
bGV4aWJsZUJveC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3Bw
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJHZW9tZXRyeU1hcC5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNlLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
cklubGluZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmg6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlz
dE1hcmtlci5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVs
dGlDb2x1bW5TZXQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJl
YWQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT3Zl
cmZsb3cuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUYWJsZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
aGVtZUNocm9taXVtQ29tbW9uLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVD
aHJvbWl1bUNvbW1vbi5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJWaWV3Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVj
ZUltYWdlLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuY3BwOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdHlsZS9TaGFkb3dEYXRhLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2Fj
aGVkSW1hZ2VTZXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZS5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oOgorCiAyMDEyLTExLTA3
ICBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5AZGlnaWEuY29tPgogCiAgICAg
ICAgIFtRdF0gT3BlbiBsaW5rIGluIHRoaXMgd2luZG93IGFjdGlvbgpJbmRleDogU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQJKHJldmlzaW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xODc2LDggKzE4NzYsOCBAQCBTRVQoV2ViQ29yZV9TT1VS
Q0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbWlseS5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9Gb250RmFzdFBhdGguY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZlYXR1
cmVTZXR0aW5ncy5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0Qm94
RXh0ZW50LmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmNw
cAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0xheW91dEJveEV4dGVudC5jcHAKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9MYXlvdXRSZWN0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRl
ZEltYWdlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRvckdlbmVyYXRlZEltYWdl
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcApJbmRleDog
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC00Mjc4LDcgKzQy
NzgsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Zp
bGVTeXN0ZW0uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmggXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Zsb2F0Q29udmVyc2lvbi5oIFwKLQlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9GcmFjdGlvbmFsTGF5b3V0VW5pdC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9MYXlvdXRVbml0LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dhbWVwYWRz
LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hhc2hUb29scy5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9IaXN0b2dyYW1TdXBwb3J0LmNwcCBcCkBAIC00NDQyLDEyICs0NDQyLDEy
IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udFNtb290aGluZ01vZGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udFRyYWl0c01hc2suaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udFdpZHRoVmFyaWFudC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
cmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCBcCi0JU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5oIFwKLQlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0U2l6ZS5oIFwKKwlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRCb3hFeHRlbnQuY3BwIFwKKwlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRCb3hFeHRlbnQuaCBcCisJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UG9pbnQuaCBcCisJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UmVjdC5jcHAgXAorCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJlY3QuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvTGF5b3V0U2l6ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HZW5lcmF0ZWRJbWFnZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dlbmVyYXRlZEltYWdlLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dlbmVyYXRvci5oIFwKQEAgLTQ5OTAsOCArNDk5MCw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaCBcCiAJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0xheW91dFN0YXRlLmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBl
cy5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXNJbmxpbmVNZXRob2Rz
LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRSZXBhaW50ZXIuaCBcCiAJU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFJlcGFpbnRlci5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9PdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCBcCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5w
cmkJKHJldmlzaW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHdvcmtp
bmcgY29weSkKQEAgLTk2OSw4ICs5NjksOCBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9Gb250LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBc
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcCBcCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3MvRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5jcHAgXAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
TGF5b3V0Qm94RXh0ZW50LmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UmVjdC5j
cHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmNwcCBcCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvR2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2UuY3BwIFwKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAgXApAQCAtMjMzNSw3ICsyMzM1LDYgQEAg
SEVBREVSUyArPSBcCiAgICAgcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaCBcCiAgICAgcmVuZGVy
aW5nL0lubGluZVRleHRCb3guaCBcCiAgICAgcmVuZGVyaW5nL0xheW91dFN0YXRlLmggXAotICAg
IHJlbmRlcmluZy9MYXlvdXRUeXBlcy5oIFwKICAgICByZW5kZXJpbmcvTGF5b3V0UmVwYWludGVy
LmggXAogICAgIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suaCBcCiAgICAgcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuaCBcCkBAIC0yNzgyLDkgKzI3ODEsOSBA
QCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9GbG9hdFBvaW50UXQuY3Bw
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9GbG9hdFJlY3RRdC5jcHAgXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3F0L0Zsb2F0U2l6ZVF0LmNwcCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRnJhY3Rpb25hbExheW91dFBvaW50UXQuY3BwIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9GcmFjdGlvbmFsTGF5b3V0UmVjdFF0LmNwcCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
RnJhY3Rpb25hbExheW91dFNpemVRdC5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0xh
eW91dFBvaW50UXQuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9MYXlvdXRSZWN0UXQu
Y3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9MYXlvdXRTaXplUXQuY3BwIFwKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFkaWVudFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9J
Y29uUXQuY3BwIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxMzM3NjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDcg
KzE0Nyw2IEBAIF9fWk43V2ViQ29yZTExTWVtb3J5Q2FjaGUxM3NldENhcGFjaXRpZXMKIF9fWk43
V2ViQ29yZTExTWVtb3J5Q2FjaGUxNGV2aWN0UmVzb3VyY2VzRXYKIF9fWk43V2ViQ29yZTExTWVt
b3J5Q2FjaGUxOWdldE9yaWdpbnNXaXRoQ2FjaGVFUk4zV1RGN0hhc2hTZXRJTlMxXzZSZWZQdHJJ
TlNfMTRTZWN1cml0eU9yaWdpbkVFRU5TXzE4U2VjdXJpdHlPcmlnaW5IYXNoRU5TMV8xMEhhc2hU
cmFpdHNJUzVfRUVFRQogX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTI1cmVtb3ZlUmVzb3VyY2Vz
V2l0aE9yaWdpbkVQTlNfMTRTZWN1cml0eU9yaWdpbkUKLV9fWk43V2ViQ29yZTExUmVuZGVyTGF5
ZXIxOXNjcm9sbFJlY3RUb1Zpc2libGVFUktOU18yMEZyYWN0aW9uYWxMYXlvdXRSZWN0RVJLTlNf
MTVTY3JvbGxBbGlnbm1lbnRFUzZfCiBfX1pON1dlYkNvcmUxMVVSTFdpdGhEYXRhRVA2TlNEYXRh
UDVOU1VSTAogX19aTjdXZWJDb3JlMTFtZW1vcnlDYWNoZUV2CiBfX1pON1dlYkNvcmUxMXN0YXJ0
T2ZXb3JkRVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FTlNfOUVXb3JkU2lkZUUKQEAgLTE1OSw3ICsx
NTgsNyBAQCBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE0c2Nyb2xsT3ZlcmZsCiBfX1pON1dl
YkNvcmUxMkV2ZW50SGFuZGxlcjE1aGFuZGxlQWNjZXNzS2V5RVJLTlNfMjFQbGF0Zm9ybUtleWJv
YXJkRXZlbnRFCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE2aGFuZGxlV2hlZWxFdmVudEVS
S05TXzE4UGxhdGZvcm1XaGVlbEV2ZW50RQogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxN3Nj
cm9sbFJlY3Vyc2l2ZWx5RU5TXzE1U2Nyb2xsRGlyZWN0aW9uRU5TXzE3U2Nyb2xsR3JhbnVsYXJp
dHlFUE5TXzROb2RlRQotX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyMGhpdFRlc3RSZXN1bHRB
dFBvaW50RVJLTlNfMjFGcmFjdGlvbmFsTGF5b3V0UG9pbnRFYmJOU18xN0hpdFRlc3RTY3JvbGxi
YXJzRWpSS05TXzIwRnJhY3Rpb25hbExheW91dFNpemVFCitfX1pON1dlYkNvcmUxMkV2ZW50SGFu
ZGxlcjIwaGl0VGVzdFJlc3VsdEF0UG9pbnRFUktOU18xMUxheW91dFBvaW50RWJiTlNfMTdIaXRU
ZXN0U2Nyb2xsYmFyc0VqUktOU18xMExheW91dFNpemVFCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFu
ZGxlcjIxaGFuZGxlTW91c2VQcmVzc0V2ZW50RVJLTlNfMThQbGF0Zm9ybU1vdXNlRXZlbnRFCiBf
X1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjIzaGFuZGxlTW91c2VSZWxlYXNlRXZlbnRFUktOU18x
OFBsYXRmb3JtTW91c2VFdmVudEUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjRsb2dpY2Fs
U2Nyb2xsUmVjdXJzaXZlbHlFTlNfMjJTY3JvbGxMb2dpY2FsRGlyZWN0aW9uRU5TXzE3U2Nyb2xs
R3JhbnVsYXJpdHlFUE5TXzROb2RlRQpAQCAtMTg1LDggKzE4NCw3IEBAIF9fWk43V2ViQ29yZTEy
UHJpbnRDb250ZXh0OXNwb29sUGFnZUVSTlMKIF9fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0OXNw
b29sUmVjdEVSTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU183SW50UmVjdEUKIF9fWk43V2ViQ29y
ZTEyUHJpbnRDb250ZXh0QzFFUE5TXzVGcmFtZUUKIF9fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0
RDFFdgotX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTZyZXBhaW50UmVjdGFuZ2xlRVJLTlNf
MjBGcmFjdGlvbmFsTGF5b3V0UmVjdEViCi1fX1pON1dlYkNvcmUxMlJlbmRlck9iamVjdDE5c2Ny
b2xsUmVjdFRvVmlzaWJsZUVSS05TXzIwRnJhY3Rpb25hbExheW91dFJlY3RFUktOU18xNVNjcm9s
bEFsaWdubWVudEVTNl8KK19fWk43V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTlzY3JvbGxSZWN0VG9W
aXNpYmxlRVJLTlNfMTBMYXlvdXRSZWN0RVJLTlNfMTVTY3JvbGxBbGlnbm1lbnRFUzZfCiBfX1pO
N1dlYkNvcmUxMlNoYXJlZEJ1ZmZlcjEwd3JhcENGRGF0YUVQSzhfX0NGRGF0YQogX19aTjdXZWJD
b3JlMTJTaGFyZWRCdWZmZXIxMHdyYXBOU0RhdGFFUDZOU0RhdGEKIF9fWk43V2ViQ29yZTEyU2hh
cmVkQnVmZmVyMTJjcmVhdGVOU0RhdGFFdgpAQCAtNDY2LDcgKzQ2NCw2IEBAIF9fWk43V2ViQ29y
ZTE2VmlzaWJsZVNlbGVjdGlvbkMxRVJLTlNfMTUKIF9fWk43V2ViQ29yZTE2Y3JlYXRlRnVsbE1h
cmt1cEVQS05TXzROb2RlRQogX19aTjdXZWJDb3JlMTZjcmVhdGVGdWxsTWFya3VwRVBLTlNfNVJh
bmdlRQogX19aTjdXZWJDb3JlMTZkZWxldGVBbGxDb29raWVzRXYKLV9fWk43V2ViQ29yZTE2ZW5j
bG9zaW5nSW50UmVjdEVSS05TXzIwRnJhY3Rpb25hbExheW91dFJlY3RFCiBfX1pON1dlYkNvcmUx
NmVuY2xvc2luZ0ludFJlY3RFUktOU185RmxvYXRSZWN0RQogX19aTjdXZWJDb3JlMTZpc0VuZE9m
UGFyYWdyYXBoRVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FTlNfMjdFZGl0aW5nQm91bmRhcnlDcm9z
c2luZ1J1bGVFCiBfX1pON1dlYkNvcmUxNmlzVXNlclZpc2libGVVUkxFUDhOU1N0cmluZwpAQCAt
ODYyLDcgKzg1OSw2IEBAIF9fWk43V2ViQ29yZTdFbGVtZW50OXNldFBzZXVkb0VSS04zV1RGMTIK
IF9fWk43V2ViQ29yZTdJbnRSZWN0NXNjYWxlRWYKIF9fWk43V2ViQ29yZTdJbnRSZWN0NXVuaXRl
RVJLUzBfCiBfX1pON1dlYkNvcmU3SW50UmVjdDlpbnRlcnNlY3RFUktTMF8KLV9fWk43V2ViQ29y
ZTdJbnRSZWN0QzFFUktOU18yMEZyYWN0aW9uYWxMYXlvdXRSZWN0RQogX19aTjdXZWJDb3JlN0lu
dFJlY3RDMUVSS05TXzlGbG9hdFJlY3RFCiBfX1pON1dlYkNvcmU3SW50U2l6ZUMxRVJLNkNHU2l6
ZQogX19aTjdXZWJDb3JlN1J1bkxvb3AxNHJ1bkZvckR1cmF0aW9uRWQKQEAgLTEwMDIsOSArOTk4
LDcgQEAgX19aTjdXZWJDb3JlOHRvU3RyaW5nRVJLTjNXVEY2VmVjdG9ySU5TXwogX19aTjdXZWJD
b3JlOURPTVdpbmRvdzMwZGlzcGF0Y2hBbGxQZW5kaW5nVW5sb2FkRXZlbnRzRXYKIF9fWk43V2Vi
Q29yZTlET01XaW5kb3czNmRpc3BhdGNoQWxsUGVuZGluZ0JlZm9yZVVubG9hZEV2ZW50c0V2CiBf
X1pON1dlYkNvcmU5RmxvYXRSZWN0QzFFUks2Q0dSZWN0Ci1fX1pON1dlYkNvcmU5RmxvYXRSZWN0
QzFFUktOU18yMEZyYWN0aW9uYWxMYXlvdXRSZWN0RQogX19aTjdXZWJDb3JlOUZsb2F0UmVjdEMx
RVJLTlNfN0ludFJlY3RFCi1fX1pON1dlYkNvcmU5RmxvYXRTaXplQzFFUktOU18yMEZyYWN0aW9u
YWxMYXlvdXRTaXplRQogX19aTjdXZWJDb3JlOUZsb2F0U2l6ZUMxRVJLTlNfN0ludFNpemVFCiBf
X1pON1dlYkNvcmU5Rm9udENhY2hlMTNmb250RGF0YUNvdW50RXYKIF9fWk43V2ViQ29yZTlGb250
Q2FjaGUyMWluYWN0aXZlRm9udERhdGFDb3VudEV2CkBAIC0xMTg2LDYgKzExODAsNyBAQCBfX1pO
SzdXZWJDb3JlMTFSZW5kZXJTdHlsZTRmb250RXYKIF9fWk5LN1dlYkNvcmUxMVNjcmlwdFZhbHVl
OWdldFN0cmluZ0VQTjNKU0M5RXhlY1N0YXRlRVJOM1dURjZTdHJpbmdFCiBfX1pOSzdXZWJDb3Jl
MTJSZW5kZXJPYmplY3QxNGVuY2xvc2luZ0xheWVyRXYKIF9fWk5LN1dlYkNvcmUxMlJlbmRlck9i
amVjdDE1bG9jYWxUb0Fic29sdXRlRVJLTlNfMTBGbG9hdFBvaW50RWoKK19fWk5LN1dlYkNvcmUx
MlJlbmRlck9iamVjdDE2cmVwYWludFJlY3RhbmdsZUVSS05TXzEwTGF5b3V0UmVjdEViCiBfX1pO
SzdXZWJDb3JlMTJSZW5kZXJPYmplY3QyMGxvY2FsVG9Db250YWluZXJRdWFkRVJLTlNfOUZsb2F0
UXVhZEVQTlNfMjJSZW5kZXJMYXllck1vZGVsT2JqZWN0RWpQYgogX19aTks3V2ViQ29yZTEyUmVu
ZGVyT2JqZWN0MjNhYnNvbHV0ZUJvdW5kaW5nQm94UmVjdEViCiBfX1pOSzdXZWJDb3JlMTJSZW5k
ZXJPYmplY3QzOXBpeGVsU25hcHBlZEFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdEV2CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTM3NCw4ICszNzQsOCBAQAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTbW9vdGhpbmdNb2RlLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRUcmFpdHNNYXNrLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRXaWR0aFZhcmlhbnQuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvRnJhY3Rpb25hbExheW91dFNpemUuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvTGF5b3V0UmVjdC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9MYXlv
dXRTaXplLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRvci5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaC5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oJywKQEAgLTU1OCw4ICs1NTgsNiBAQAogICAg
ICAgICAgICAgJ3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgnLAogICAgICAgICAgICAgJ3JlbmRl
cmluZy9JbmxpbmVUZXh0Qm94LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9MYXlvdXRTdGF0
ZS5oJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvTGF5b3V0VHlwZXMuaCcsCi0gICAgICAgICAg
ICAncmVuZGVyaW5nL0xheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oJywKICAgICAgICAgICAgICdy
ZW5kZXJpbmcvTGF5b3V0UmVwYWludGVyLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9PdmVy
bGFwVGVzdFJlcXVlc3RDbGllbnQuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1BhZ2luYXRp
b24uaCcsCkBAIC00Nzg3LDcgKzQ3ODUsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRGYXN0UGF0aC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRQbGF0Zm9ybURhdGEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9Gb250
UGxhdGZvcm1EYXRhLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9u
YWxMYXlvdXRCb3hFeHRlbnQuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9M
YXlvdXRCb3hFeHRlbnQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HZW5l
cmF0b3JHZW5lcmF0ZWRJbWFnZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L0dlbmVyYXRlZEltYWdlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR2Vu
ZXJhdGVkSW1hZ2UuaCcsCkBAIC01OTA2LDcgKzU5MDQsNyBAQAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0U2l6ZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ludFJl
Y3QuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0
UmVjdC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJlY3QuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFu
c2Zvcm0uY3BwJywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjgzOTksNyArMjgzOTksNyBA
QAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0
Zm9ybVxGcmFjdGlvbmFsTGF5b3V0VW5pdC5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cTGF5b3V0VW5pdC5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCkBAIC0yOTQ4Niwy
NyArMjk0ODYsMjcgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQotCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQu
aCIKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xMYXlvdXRCb3hFeHRl
bnQuaCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuY3BwIgorCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXExheW91dEJveEV4dGVudC5jcHAi
CiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxw
bGF0Zm9ybVxncmFwaGljc1xGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCIKKwkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xMYXlvdXRQb2ludC5oIgogCQkJCQk+CiAJCQkJPC9G
aWxlPgogCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Nc
RnJhY3Rpb25hbExheW91dFJlY3QuY3BwIgorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3Jt
XGdyYXBoaWNzXExheW91dFJlY3QuY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxl
Ci0JCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRnJhY3Rpb25hbExheW91
dFJlY3QuaCIKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xMYXlvdXRS
ZWN0LmgiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGcmFjdGlvbmFsTGF5b3V0U2l6ZS5oIgorCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXExheW91dFNpemUuaCIKIAkJCQkJPgogCQkJ
CTwvRmlsZT4KIAkJCQk8RmlsZQpAQCAtMzg5NjMsMTAgKzM4OTYzLDYgQEAKIAkJCQk+CiAJCQk8
L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXExheW91dFR5
cGVzLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHJlbmRlcmluZ1xQYWludEluZm8uaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxMzM3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMwNCw2ICszMDQsMTMgQEAKIAkJMTQxMTVCNzIwOUY4
NENENjAwQ0E0RkMxIC8qIEpTTm9kZUZpbHRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDExNUI3MDA5Rjg0Q0Q2MDBDQTRGQzEgLyogSlNOb2Rl
RmlsdGVyLmNwcCAqLzsgfTsKIAkJMTQxMTVCNzMwOUY4NENENjAwQ0E0RkMxIC8qIEpTTm9kZUZp
bHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQx
MTVCNzEwOUY4NENENjAwQ0E0RkMxIC8qIEpTTm9kZUZpbHRlci5oICovOyB9OwogCQkxNDE5RDJD
NTBDRUE2RjYxMDBGRjUwN0EgLyogVHJlZVNoYXJlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxOUQyQzQwQ0VBNkY2MTAwRkY1MDdBIC8qIFRyZWVT
aGFyZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkxNDFEQzA0ODE2NDgzNDhGMDAzNzFFNUEgLyogTGF5b3V0VW5pdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxREMwNDcxNjQ4MzQ4RjAwMzcxRTVB
IC8qIExheW91dFVuaXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkxNDFEQzA0RjE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0Qm94RXh0ZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MURDMDQ5
MTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRCb3hFeHRlbnQuY3BwICovOyB9OworCQkxNDFEQzA1
MDE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0Qm94RXh0ZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDFEQzA0QTE2NDgzNEI5MDAzNzFFNUEgLyog
TGF5b3V0Qm94RXh0ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMTQxREMwNTExNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dFBvaW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDFEQzA0QjE2NDgz
NEI5MDAzNzFFNUEgLyogTGF5b3V0UG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkxNDFEQzA1MjE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0
UmVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDFEQzA0QzE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0UmVjdC5jcHAgKi87IH07CisJCTE0MURD
MDUzMTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRSZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDFEQzA0RDE2NDgzNEI5MDAzNzFFNUEgLyogTGF5
b3V0UmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTE0MURDMDU0MTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRTaXplLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDFEQzA0RTE2NDgzNEI5MDAzNzFF
NUEgLyogTGF5b3V0U2l6ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTE0MjAxMUI2MEEwMDMxMzMwMDgzMDNGOSAvKiBKU0NTU1N0eWxlRGVjbGFy
YXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTQyMDExQjQwQTAwMzEzMzAwODMwM0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi87
IH07CiAJCTE0MjAxMUI3MEEwMDMxMzMwMDgzMDNGOSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MjAxMUI1
MEEwMDMxMzMwMDgzMDNGOSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDJCOTdDOTEzMTM4OTQzMDA4
QkVGNEIgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MkI5N0M3MTMxMzg5NDMwMDhCRUY0QiAvKiBU
ZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwICovOyB9OwpAQCAtMzEzLDEwICszMjAsNiBAQAog
CQkxNDQ3NkFBODE1REM0QkIxMDAzMDVEQjIgLyogV3JpdGluZ01vZGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NDc2QUE3MTVEQzRCQjEwMDMwNURC
MiAvKiBXcml0aW5nTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTE0NDlFMjRDMTA3RDRBODQwMEI1NzkzRiAvKiBKU0NhbGxiYWNrRGF0YS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0OUUyNEEx
MDdENEE4NDAwQjU3OTNGIC8qIEpTQ2FsbGJhY2tEYXRhLmggKi87IH07CiAJCTE0NDlFMjg3MTA3
RDREQjQwMEI1NzkzRiAvKiBKU0NhbGxiYWNrRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQ5RTI4NjEwN0Q0REI0MDBCNTc5M0YgLyogSlND
YWxsYmFja0RhdGEuY3BwICovOyB9OwotCQkxNDRGQ0U1MjE0RUM3OUJDMDAwRDE3QTMgLyogRnJh
Y3Rpb25hbExheW91dFVuaXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0NEZDRTUxMTRFQzc5QkMwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0VW5p
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTE0
NEZDRTVEMTRFQzc5RTcwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0U2l6ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0RkNFNTgxNEVDNzlFNzAw
MEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRTaXplLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTQ0RkNGRTAxNEVGMjUwOTAwMEQxN0EzIC8qIEZy
YWN0aW9uYWxMYXlvdXRSZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0NEZDRkRFMTRFRjI1MDkwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0
UmVjdC5jcHAgKi87IH07Ci0JCTE0NEZDRkUxMTRFRjI1MDkwMDBEMTdBMyAvKiBGcmFjdGlvbmFs
TGF5b3V0UmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQ0RkNGREYxNEVGMjUwOTAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ2NEUwNkMx
MzVFQzEwNjAwRkRCMDBBIC8qIEpTTWVkaWFMaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NjRFMDZCMTM1RUMxMDYwMEZEQjAwQSAv
KiBKU01lZGlhTGlzdEN1c3RvbS5jcHAgKi87IH07CiAJCTE0NkNDMTE1MTU2OTg4RTQwMDEwOUUz
NyAvKiBMZW5ndGhCb3guY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTQ2Q0MxMTMxNTY5ODhCRDAwMTA5RTM3IC8qIExlbmd0aEJveC5jcHAgKi87IH07
CiAJCTE0NzdFNzc2MEJGNDEzNEEwMDE1Mjg3MiAvKiBQYWdlQ2FjaGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3N0U3NzQwQkY0MTM0QTAwMTUy
ODcyIC8qIFBhZ2VDYWNoZS5jcHAgKi87IH07CkBAIC0zMjksOCArMzMyLDYgQEAKIAkJMTQ3OUZB
RjIxMDlBRTM3NTAwREVENjU1IC8qIFJlbmRlclJ1YnlSdW4uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NzlGQUVBMTA5QUUzNzUwMERFRDY1NSAvKiBS
ZW5kZXJSdWJ5UnVuLmggKi87IH07CiAJCTE0NzlGQUYzMTA5QUUzNzUwMERFRDY1NSAvKiBSZW5k
ZXJSdWJ5VGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNDc5RkFFQjEwOUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieVRleHQuY3BwICovOyB9
OwogCQkxNDc5RkFGNDEwOUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieVRleHQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NzlGQUVDMTA5QUUzNzUw
MERFRDY1NSAvKiBSZW5kZXJSdWJ5VGV4dC5oICovOyB9OwotCQkxNDgyRTBDNjE1NkMzNkRFMDA5
NjUwNjUgLyogRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDgyRTBDNDE1NkMzNkRFMDA5NjUwNjUgLyog
RnJhY3Rpb25hbExheW91dEJveEV4dGVudC5jcHAgKi87IH07Ci0JCTE0ODJFMEM3MTU2QzM2REUw
MDk2NTA2NSAvKiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDgyRTBDNTE1NkMzNkRFMDA5NjUwNjUgLyog
RnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTE0OEFGREE1MEFGNTgzNjAwMDhDQzcwMCAvKiBFeGNlcHRp
b25IYW5kbGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQ4QUZEQTMwQUY1ODM2MDAwOENDNzAwIC8qIEV4Y2VwdGlvbkhhbmRsZXJzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ4QUZEQTYwQUY1
ODM2MDAwOENDNzAwIC8qIEV4Y2VwdGlvbkhhbmRsZXJzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4QUZEQTQwQUY1ODM2MDAwOENDNzAwIC8qIEV4
Y2VwdGlvbkhhbmRsZXJzLm1tICovOyB9OwogCQkxNDk0N0ZGRDEyRjgwQ0QyMDBBMEY2MzEgLyog
RG9jdW1lbnRPcmRlcmVkTWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0OTQ3RkZCMTJGODBDRDIwMEEwRjYzMSAvKiBEb2N1bWVudE9yZGVyZWRN
YXAuY3BwICovOyB9OwpAQCAtOTIzLDcgKzkyNCw2IEBACiAJCTMxOUU2OUI1MTMyOTlCQkQwMDRB
QzkxQSAvKiBXZWJLaXRBbmltYXRpb25MaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxOUU2OUFGMTMyOTlCQkQwMDRBQzkxQSAvKiBXZWJLaXRB
bmltYXRpb25MaXN0LmNwcCAqLzsgfTsKIAkJMzE5RTY5QjYxMzI5OUJCRDAwNEFDOTFBIC8qIFdl
YktpdEFuaW1hdGlvbkxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxOUU2OUIwMTMyOTlCQkQwMDRBQzkxQSAvKiBXZWJLaXRBbmltYXRpb25MaXN0
LmggKi87IH07CiAJCTMxOUZCRDVGMTVEMkY0NjQwMDk2NDBBNiAvKiBDYWNoZWRJbWFnZUNsaWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE5RkJE
NUQxNUQyRjQ0NDAwOTY0MEE2IC8qIENhY2hlZEltYWdlQ2xpZW50LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMzFCODAxQkIxNUVDNThDNzAwQ0U2
NDNEIC8qIExheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ4OTRDQTgxNUVDNDg5NzAwQTQwNDgxIC8qIExheW91
dFR5cGVzSW5saW5lTWV0aG9kcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTMxQzBGRjIxMEU0Q0VCNkUwMDdENkZFNSAvKiBXZWJLaXRBbmltYXRp
b25FdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMUMwRkYxQjBFNENFQjZFMDA3RDZGRTUgLyogV2ViS2l0QW5pbWF0aW9uRXZlbnQuY3BwICov
OyB9OwogCQkzMUMwRkYyMjBFNENFQjZFMDA3RDZGRTUgLyogV2ViS2l0QW5pbWF0aW9uRXZlbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQzBGRjFD
MEU0Q0VCNkUwMDdENkZFNSAvKiBXZWJLaXRBbmltYXRpb25FdmVudC5oICovOyB9OwogCQkzMUMw
RkYyNDBFNENFQjZFMDA3RDZGRTUgLyogV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQzBGRjFFMEU0Q0VCNkUw
MDdENkZFNSAvKiBXZWJLaXRUcmFuc2l0aW9uRXZlbnQuY3BwICovOyB9OwpAQCAtNTI4OCw4ICs1
Mjg4LDYgQEAKIAkJQjhEQkRCNEMxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1h
bmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJE
QjQ4MTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmggKi87IH07CiAJCUI4
REJEQjREMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ5MTMw
QjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCAqLzsgfTsKIAkJ
QjhEQkRCNEUxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjRBMTMw
QjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmggKi87IH07Ci0JCUJB
QjFDMDZBMTRGQzM2NzkwMDQyMzNGQyAvKiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NEZDRTU0MTRFQzc5RTcw
MDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlCQUNGMjkwMTEzQjJBMEQ1MDA3ODFGOTAgLyog
TGF5b3V0VHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJBQ0YyOTAwMTNCMkEwRDUwMDc4MUY5MCAvKiBMYXlvdXRUeXBlcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMDBGMDA0MEUwQTE4NTUw
MEZEMDRFMyAvKiBET01GaWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzAwRUZGRTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5oICovOyB9Owog
CQlCQzAwRjAwNTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDBFRkZGMEUwQTE4NTUwMEZEMDRFMyAv
KiBET01GaWxlLm1tICovOyB9OwogCQlCQzAwRjAwNjBFMEExODU1MDBGRDA0RTMgLyogRE9NRmls
ZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzAwRjAwMDBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZUludGVybmFsLmggKi87IH07CkBA
IC03Mzg4LDYgKzczODYsMTMgQEAKIAkJMTQxOUQyQzQwQ0VBNkY2MTAwRkY1MDdBIC8qIFRyZWVT
aGFyZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJlZVNoYXJlZC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDFCOTRFNTA5RUM0MjIzMDAwRTk0MTMgLyog
TW91c2VFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE1vdXNlRXZlbnQuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDFCOTRFRTA5RUM0MjVBMDAwRTk0MTMgLyog
VUlFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFVJRXZlbnQuaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkxNDFEQzA0NzE2NDgzNDhGMDAzNzFFNUEgLyogTGF5b3V0
VW5pdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRVbml0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0MURDMDQ5MTY0ODM0QjkwMDM3MUU1QSAvKiBM
YXlvdXRCb3hFeHRlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TGF5b3V0Qm94RXh0ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQxREMw
NEExNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dEJveEV4dGVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBMYXlvdXRCb3hFeHRlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMTQxREMwNEIxNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dFBvaW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dFBvaW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTE0MURDMDRDMTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRSZWN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dFJlY3QuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDFEQzA0RDE2NDgzNEI5MDAzNzFFNUEgLyog
TGF5b3V0UmVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRSZWN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0MURDMDRFMTY0ODM0QjkwMDM3MUU1
QSAvKiBMYXlvdXRTaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91
dFNpemUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQyMDExQUUwQTAwMzExNzAw
ODMwM0Y5IC8qIENTU1N0eWxlRGVjbGFyYXRpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBDU1NTdHlsZURlY2xhcmF0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MTQyMDExQjQwQTAwMzEzMzAwODMwM0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDU1NTdHlsZURlY2xhcmF0aW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQyMDExQjUwQTAwMzEzMzAwODMw
M0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNDU1NTdHlsZURlY2xhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC03Mzk4LDExICs3NDAzLDYgQEAKIAkJMTQ0NzZBQTcxNURDNEJCMTAwMzA1REIyIC8q
IFdyaXRpbmdNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRpbmdN
b2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NDlFMjRBMTA3RDRBODQwMEI1
NzkzRiAvKiBKU0NhbGxiYWNrRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0NhbGxiYWNrRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDQ5RTI4
NjEwN0Q0REI0MDBCNTc5M0YgLyogSlNDYWxsYmFja0RhdGEuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYWxsYmFja0RhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkxNDRGQ0U1MTE0RUM3OUJDMDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91
dFVuaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnJhY3Rpb25hbExheW91
dFVuaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTQ0RkNFNTQxNEVDNzlFNzAw
MEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRQb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMTQ0RkNFNTgxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRTaXpl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYWN0aW9uYWxMYXlvdXRTaXpl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0NEZDRkRFMTRFRjI1MDkwMDBEMTdB
MyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBGcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTE0NEZDRkRGMTRFRjI1MDkwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVj
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGcmFjdGlvbmFsTGF5b3V0UmVj
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDY0RTA2QjEzNUVDMTA2MDBGREIw
MEEgLyogSlNNZWRpYUxpc3RDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNNZWRpYUxpc3RDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxNDZDQzExMzE1Njk4OEJEMDAxMDlFMzcgLyogTGVuZ3RoQm94LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExlbmd0aEJveC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0NzdFNzc0MEJGNDEzNEEwMDE1Mjg3MiAvKiBQYWdlQ2FjaGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VDYWNoZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NDE2LDggKzc0MTYsNiBAQAogCQkxNDc5RkFF
QjEwOUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieVRleHQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyUnVieVRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDc5RkFFQzEwOUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieVRleHQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyUnVieVRleHQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4MTNCRjMwOUVERjg4RTAwRjc1N0UxIC8qIElE
TFBhcnNlci5wbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5wZXJsOyBuYW1lID0gSURMUGFyc2Vy
LnBtOyBwYXRoID0gc2NyaXB0cy9JRExQYXJzZXIucG07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTE0ODJFMEM0MTU2QzM2REUwMDk2NTA2NSAvKiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZyYWN0aW9uYWxM
YXlvdXRCb3hFeHRlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxNDgyRTBD
NTE1NkMzNkRFMDA5NjUwNjUgLyogRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0OEFGREEzMEFGNTgzNjAwMDhDQzcwMCAvKiBF
eGNlcHRpb25IYW5kbGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhj
ZXB0aW9uSGFuZGxlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4QUZEQTQw
QUY1ODM2MDAwOENDNzAwIC8qIEV4Y2VwdGlvbkhhbmRsZXJzLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEV4Y2VwdGlvbkhhbmRsZXJzLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNDk0N0ZGQjEyRjgwQ0QyMDBBMEY2MzEgLyogRG9jdW1lbnRP
cmRlcmVkTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERvY3Vt
ZW50T3JkZXJlZE1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05Mzg1LDcg
KzkzODMsNiBAQAogCQk4NDg1MjI4NzExOTAxNzNDMDA2RURDN0YgLyogU1ZHVktlcm5FbGVtZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1ZLZXJuRWxlbWVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0ODUyMjg4MTE5MDE3M0MwMDZF
REM3RiAvKiBTVkdWS2VybkVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1ZHVktlcm5FbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0ODUy
Mjg5MTE5MDE3M0MwMDZFREM3RiAvKiBTVkdWS2VybkVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IFNWR1ZLZXJuRWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTg0ODk0Q0E4MTVFQzQ4OTcwMEE0MDQ4MSAvKiBMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0VHlwZXNJbmxpbmVNZXRo
b2RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0OUY3Nzc1MEVGRUM2MjAwMDkw
ODQ5RCAvKiBTdHJva2VTdHlsZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3Ryb2tlU3R5bGVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTg0QTgxRjNCMEZDN0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VBbHBoYS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTb3VyY2VBbHBoYS5jcHA7IHBhdGggPSBmaWx0ZXJz
L1NvdXJjZUFscGhhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODRBODFGM0Mw
RkM3REZGMDAwOTU1MzAwIC8qIFNvdXJjZUFscGhhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFNvdXJjZUFscGhhLmg7IHBhdGggPSBmaWx0ZXJzL1NvdXJjZUFscGhhLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjYyMiw3ICsxMjYxOSw2IEBACiAJCUI4REJE
QjQ4MTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNldFNlbGVjdGlvbkNvbW1hbmQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjhEQkRCNDkxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUI4REJEQjRBMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5k
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwZWxsaW5nQ29ycmVjdGlvbkNv
bW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkFDRjI5MDAxM0IyQTBENTAw
NzgxRjkwIC8qIExheW91dFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IExheW91dFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDBFRkZFMEUw
QTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERPTUZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMEVGRkYwRTBB
MTg1NTAwRkQwNEUzIC8qIERPTUZpbGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBET01GaWxlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAw
RjAwMDBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERPTUZpbGVJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTk5ODUsMTIgKzE5OTgxLDEyIEBACiAJCQkJMzcyMDIxOTgxMDYyMTNDNjAw
RjI1QzRCIC8qIEZvbnRTbW9vdGhpbmdNb2RlLmggKi8sCiAJCQkJMzc4NEMzNEEwRTExQUEzNDAw
N0Q4RDQ4IC8qIEZvbnRUcmFpdHNNYXNrLmggKi8sCiAJCQkJQkNFNDQxMzUxMkY3NDkwQjAwOUI4
NEI4IC8qIEZvbnRXaWR0aFZhcmlhbnQuaCAqLywKLQkJCQkxNDgyRTBDNDE1NkMzNkRFMDA5NjUw
NjUgLyogRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5jcHAgKi8sCi0JCQkJMTQ4MkUwQzUxNTZD
MzZERTAwOTY1MDY1IC8qIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuaCAqLywKLQkJCQkxNDRG
Q0U1NDE0RUM3OUU3MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFBvaW50LmggKi8sCi0JCQkJ
MTQ0RkNGREUxNEVGMjUwOTAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcCAqLywK
LQkJCQkxNDRGQ0ZERjE0RUYyNTA5MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFJlY3QuaCAq
LywKLQkJCQkxNDRGQ0U1ODE0RUM3OUU3MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFNpemUu
aCAqLywKKwkJCQkxNDFEQzA0OTE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0Qm94RXh0ZW50LmNw
cCAqLywKKwkJCQkxNDFEQzA0QTE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0Qm94RXh0ZW50Lmgg
Ki8sCisJCQkJMTQxREMwNEIxNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dFBvaW50LmggKi8sCisJ
CQkJMTQxREMwNEMxNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dFJlY3QuY3BwICovLAorCQkJCTE0
MURDMDREMTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRSZWN0LmggKi8sCisJCQkJMTQxREMwNEUx
NjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dFNpemUuaCAqLywKIAkJCQk0RkIzOTBBQzE1RUY2MUYz
MDA3QUQ1MUYgLyogR2VuZXJhdGVkSW1hZ2UuY3BwICovLAogCQkJCUJDMjNGMERBMERBRkY0QTQw
MDlGREM5MSAvKiBHZW5lcmF0ZWRJbWFnZS5oICovLAogCQkJCUJDRTA0Qzg5MERBRkY3QTAwMDdB
MEY0MSAvKiBHZW5lcmF0b3IuaCAqLywKQEAgLTIwODg4LDcgKzIwODg0LDcgQEAKIAkJCQlDNTdG
RURFMDEyMTJFRTlDMDA5N0JFNjUgLyogRmlsZVN5c3RlbS5jcHAgKi8sCiAJCQkJNTE0QjNGNzIw
QzcyMjA0NzAwMDUzMERGIC8qIEZpbGVTeXN0ZW0uaCAqLywKIAkJCQlCQzA3M0JBOTBDMzk5QjFG
MDAwRjU5NzkgLyogRmxvYXRDb252ZXJzaW9uLmggKi8sCi0JCQkJMTQ0RkNFNTExNEVDNzlCQzAw
MEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRVbml0LmggKi8sCisJCQkJMTQxREMwNDcxNjQ4MzQ4
RjAwMzcxRTVBIC8qIExheW91dFVuaXQuaCAqLywKIAkJCQlBODc0OEJERjEyQ0JGMkRDMDAxRkJB
NDEgLyogSGFzaFRvb2xzLmggKi8sCiAJCQkJRDZGREFFRjIxNDlDMDYxOTAwMzdCMUUxIC8qIEhp
c3RvZ3JhbVN1cHBvcnQuY3BwICovLAogCQkJCUQ2MzBFMkFCMTQ5QkYzNDQwMDVCMkY5MyAvKiBI
aXN0b2dyYW1TdXBwb3J0LmggKi8sCkBAIC0yMTQ3MCw4ICsyMTQ2Niw2IEBACiAJCQkJQTEyMEFD
QTAxM0Y5OTgzNzAwRkU0QUM3IC8qIExheW91dFJlcGFpbnRlci5oICovLAogCQkJCTJEOTA2NjA0
MEJFMTQxRDQwMDk1Njk5OCAvKiBMYXlvdXRTdGF0ZS5jcHAgKi8sCiAJCQkJMkQ5MDY2MDUwQkUx
NDFENDAwOTU2OTk4IC8qIExheW91dFN0YXRlLmggKi8sCi0JCQkJQkFDRjI5MDAxM0IyQTBENTAw
NzgxRjkwIC8qIExheW91dFR5cGVzLmggKi8sCi0JCQkJODQ4OTRDQTgxNUVDNDg5NzAwQTQwNDgx
IC8qIExheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oICovLAogCQkJCTM3NzRBQkEzMEZBMjFFQjQw
MEFEN0RFOSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLywKIAkJCQk5Mzc3QUI5RjE1
REVGRUVGMDAzMUZEMDQgLyogUGFnaW5hdGlvbi5oICovLAogCQkJCTA4ODUwNjdEMTFEQTA0NUIw
MDE4MkI5OCAvKiBQYWludEluZm8uaCAqLywKQEAgLTIzNjA4LDExICsyMzYwMiw2IEBACiAJCQkJ
NjU2RDM3M0EwQURCQTVERTAwQTQ1NTREIC8qIEZvcm1TdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDE4ODVCOTMxMUI2RkRBNjAwMzM4M0JCIC8qIEZvcm1TdWJtaXNzaW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzVDNDc2RDA5QUM0RDYzMDBBNkFBQjQgLyogRm91bmRhdGlvbkV4dHJhcy5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMTQ4MkUwQzcxNTZDMzZERTAwOTY1MDY1IC8qIEZyYWN0aW9u
YWxMYXlvdXRCb3hFeHRlbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUJBQjFDMDZBMTRGQzM2Nzkw
MDQyMzNGQyAvKiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTE0
NEZDRkUxMTRFRjI1MDkwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMTQ0RkNFNUQxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRT
aXplLmggaW4gSGVhZGVycyAqLywKLQkJCQkxNDRGQ0U1MjE0RUM3OUJDMDAwRDE3QTMgLyogRnJh
Y3Rpb25hbExheW91dFVuaXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NTMxMjNEMTFEMDQ3MUIw
MEQ0RDA3NyAvKiBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCTY1QkYwMjJGMDk3NDgxNjMwMEM0MzE5NiAvKiBGcmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTdCMDcwRDMxMzBBNDA5QzAwQTM3NjNDIC8qIEZyYW1lQWN0aW9uU2NoZWR1bGVyLmggaW4g
SGVhZGVycyAqLywKQEAgLTI0NDkwLDggKzI0NDc5LDExIEBACiAJCQkJQTEyNTM4RDQxM0Y5QjYw
QTAwMDI0NzU0IC8qIExheW91dFJlcGFpbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ5MDY2
MDcwQkUxNDFENDAwOTU2OTk4IC8qIExheW91dFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlE
NjMwRTJBQzE0OUJGMzQ0MDA1QjJGOTMgLyogTGF5b3V0VGVzdFN1cHBvcnQuaCBpbiBIZWFkZXJz
ICovLAotCQkJCUJBQ0YyOTAxMTNCMkEwRDUwMDc4MUY5MCAvKiBMYXlvdXRUeXBlcy5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJMzFCODAxQkIxNUVDNThDNzAwQ0U2NDNEIC8qIExheW91dFR5cGVzSW5s
aW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTQxREMwNDgxNjQ4MzQ4RjAwMzcxRTVB
IC8qIExheW91dFVuaXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0MURDMDUwMTY0ODM0QjkwMDM3
MUU1QSAvKiBMYXlvdXRCb3hFeHRlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0MURDMDUxMTY0
ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRQb2ludC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTQxREMw
NTMxNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dFJlY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0
MURDMDU0MTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRTaXplLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MTJERDhGNTBEOTFFNkFGMDAwRjg5RUUgLyogTGVnYWN5V2ViQXJjaGl2ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNFNjVCRUIwRUFDREYxNjAwN0U0NTMzIC8qIExlbmd0aC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNGRjY0OTEwRUFEMTVDMjAwQzFENkY3IC8qIExlbmd0aEJveC5oIGluIEhl
YWRlcnMgKi8sCkBAIC0yNjgzNCw4ICsyNjgyNiw2IEBACiAJCQkJNTE0Qzc2NEYwQ0U5MjM0RTAw
N0VGM0NEIC8qIEZvcm1EYXRhU3RyZWFtTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU2RDM3
M0IwQURCQTVERTAwQTQ1NTREIC8qIEZvcm1TdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0
MTg4NUI5NDExQjZGREE2MDAzMzgzQkIgLyogRm9ybVN1Ym1pc3Npb24uY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJMTQ4MkUwQzYxNTZDMzZERTAwOTY1MDY1IC8qIEZyYWN0aW9uYWxMYXlvdXRCb3hF
eHRlbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMTQ0RkNGRTAxNEVGMjUwOTAwMEQxN0EzIC8q
IEZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1QkYwMjJFMDk3
NDgxNjMwMEM0MzE5NiAvKiBGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0IwNzBEMjEz
MEE0MDlDMDBBMzc2M0MgLyogRnJhbWVBY3Rpb25TY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTc0QTg2MjIxNEI3QURCQjAwM0ZEQzc2IC8qIEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZl
ci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3Nzk2LDYgKzI3Nzg2LDggQEAKIAkJCQk5MzUyMDg0
NTA5QkQ0M0I5MDBGMjAzOEQgLyogTGFuZ3VhZ2UubW0gaW4gU291cmNlcyAqLywKIAkJCQkyOTE3
QjU2MTE0NzM0OTZDMDA1MkM5RDAgLyogTGF5ZXJGbHVzaFNjaGVkdWxlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkyOTE3QjU2NjE0NzM0OTk1MDA1MkM5RDAgLyogTGF5ZXJGbHVzaFNjaGVkdWxl
ck1hYy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxNDFEQzA0RjE2NDgzNEI5MDAzNzFFNUEgLyog
TGF5b3V0Qm94RXh0ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE0MURDMDUyMTY0ODM0Qjkw
MDM3MUU1QSAvKiBMYXlvdXRSZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExMjBBQ0E0MTNG
OTk4Q0EwMEZFNEFDNyAvKiBMYXlvdXRSZXBhaW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MkQ5MDY2MDYwQkUxNDFENDAwOTU2OTk4IC8qIExheW91dFN0YXRlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUQ2RkRBRUYzMTQ5QzA2MTkwMDM3QjFFNSAvKiBMYXlvdXRUZXN0U3VwcG9ydC5jcHAg
aW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCShyZXZpc2lvbiAxMzM3NjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDcgKzIzNCw3IEBAIExheW91dFJlY3QgQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmJvdW4KICAgICBmb3IgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBvc2l0
aW9uUHJvdmlkZXIgPSBwYXJlbnRPYmplY3QoKTsgcG9zaXRpb25Qcm92aWRlcjsgcG9zaXRpb25Q
cm92aWRlciA9IHBvc2l0aW9uUHJvdmlkZXItPnBhcmVudE9iamVjdCgpKSB7CiAgICAgICAgIGlm
IChwb3NpdGlvblByb3ZpZGVyLT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkgewogICAg
ICAgICAgICAgTGF5b3V0UmVjdCBwYXJlbnRSZWN0ID0gcG9zaXRpb25Qcm92aWRlci0+ZWxlbWVu
dFJlY3QoKTsKLSAgICAgICAgICAgIGJvdW5kaW5nQm94LnNldFNpemUoTGF5b3V0U2l6ZShwYXJl
bnRSZWN0LndpZHRoKCksIEZyYWN0aW9uYWxMYXlvdXRVbml0KHN0ZDo6bWluKDEwLjBmLCBwYXJl
bnRSZWN0LmhlaWdodCgpLnRvRmxvYXQoKSkpKSk7CisgICAgICAgICAgICBib3VuZGluZ0JveC5z
ZXRTaXplKExheW91dFNpemUocGFyZW50UmVjdC53aWR0aCgpLCBMYXlvdXRVbml0KHN0ZDo6bWlu
KDEwLjBmLCBwYXJlbnRSZWN0LmhlaWdodCgpLnRvRmxvYXQoKSkpKSk7CiAgICAgICAgICAgICBi
b3VuZGluZ0JveC5zZXRMb2NhdGlvbihwYXJlbnRSZWN0LmxvY2F0aW9uKCkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmgJKHJldmlzaW9uIDEzMzc2NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2RlZmluZSBBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdF9oCiAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCi0jaW5jbHVk
ZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgJKHJldmlzaW9uIDEz
Mzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw3IEBACiAjZGVmaW5lIEFjY2Vzc2liaWxp
dHlPYmplY3RfaAogCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25h
bExheW91dFJlY3QuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91
dFJlY3QuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9z
aXRpb24uaCIKICNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuaAkocmV2aXNpb24gMTMzNzY0KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcg
QEAKICNkZWZpbmUgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdF9oCiAKICNpbmNsdWRlICJBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdC5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVk
ZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9MZW5ndGhGdW5jdGlvbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9MZW5ndGhGdW5jdGlvbnMuY3BwCShyZXZp
c2lvbiAxMzM3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvTGVuZ3RoRnVuY3Rpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgogCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNp
bmNsdWRlICJMYXlvdXRVbml0LmgiCiAjaW5jbHVkZSAiTGVuZ3RoLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVmlldy5oIgogCkBAIC01NSwyMCArNTUsMjAgQEAgTGF5b3V0VW5pdCBtaW5pbXVtVmFsdWVG
b3JMZW5ndGgoY29uc3QgTAogICAgIGNhc2UgVmlld3BvcnRQZXJjZW50YWdlV2lkdGg6CiAgICAg
ICAgIGlmIChyZW5kZXJWaWV3KQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PExheW91
dFVuaXQ+KHJlbmRlclZpZXctPnZpZXdwb3J0U2l6ZSgpLndpZHRoKCkgKiBsZW5ndGgudmlld3Bv
cnRQZXJjZW50YWdlTGVuZ3RoKCkgLyAxMDAuMGYpOwotICAgICAgICByZXR1cm4gWkVST19MQVlP
VVRfVU5JVDsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgY2FzZSBWaWV3cG9ydFBlcmNlbnRhZ2VI
ZWlnaHQ6CiAgICAgICAgIGlmIChyZW5kZXJWaWV3KQogICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PExheW91dFVuaXQ+KHJlbmRlclZpZXctPnZpZXdwb3J0U2l6ZSgpLmhlaWdodCgpICog
bGVuZ3RoLnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpIC8gMTAwLjBmKTsKLSAgICAgICAgcmV0
dXJuIFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAgIHJldHVybiAwOwogICAgIGNhc2UgVmlld3Bv
cnRQZXJjZW50YWdlTWluOgogICAgICAgICBpZiAocmVuZGVyVmlldykgewogICAgICAgICAgICAg
SW50U2l6ZSB2aWV3cG9ydFNpemUgPSByZW5kZXJWaWV3LT52aWV3cG9ydFNpemUoKTsKICAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PihzdGQ6Om1pbih2aWV3cG9ydFNp
emUud2lkdGgoKSwgdmlld3BvcnRTaXplLmhlaWdodCgpKSAqIGxlbmd0aC52aWV3cG9ydFBlcmNl
bnRhZ2VMZW5ndGgoKSAvIDEwMC4wZik7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFpFUk9f
TEFZT1VUX1VOSVQ7CisgICAgICAgIHJldHVybiAwOwogICAgIGNhc2UgRmlsbEF2YWlsYWJsZToK
ICAgICBjYXNlIEF1dG86Ci0gICAgICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOworICAgICAg
ICByZXR1cm4gMDsKICAgICBjYXNlIFJlbGF0aXZlOgogICAgIGNhc2UgSW50cmluc2ljOgogICAg
IGNhc2UgTWluSW50cmluc2ljOgpAQCAtNzcsMTAgKzc3LDEwIEBAIExheW91dFVuaXQgbWluaW11
bVZhbHVlRm9yTGVuZ3RoKGNvbnN0IEwKICAgICBjYXNlIEZpdENvbnRlbnQ6CiAgICAgY2FzZSBV
bmRlZmluZWQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4g
WkVST19MQVlPVVRfVU5JVDsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOworICAgIHJldHVybiAw
OwogfQogCiBMYXlvdXRVbml0IHZhbHVlRm9yTGVuZ3RoKGNvbnN0IExlbmd0aCYgbGVuZ3RoLCBM
YXlvdXRVbml0IG1heGltdW1WYWx1ZSwgUmVuZGVyVmlldyogcmVuZGVyVmlldywgYm9vbCByb3Vu
ZFBlcmNlbnRhZ2VzKQpAQCAtMTA0LDEwICsxMDQsMTAgQEAgTGF5b3V0VW5pdCB2YWx1ZUZvckxl
bmd0aChjb25zdCBMZW5ndGgmCiAgICAgY2FzZSBGaXRDb250ZW50OgogICAgIGNhc2UgVW5kZWZp
bmVkOgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIFpFUk9f
TEFZT1VUX1VOSVQ7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gWkVST19MQVlPVVRfVU5JVDsKKyAgICByZXR1cm4gMDsKIH0K
IAogLy8gRklYTUU6IHdoZW4gc3VicGl4ZWwgbGF5b3V0IGlzIHN1cHBvcnRlZCB0aGlzIGNvcHkg
b2YgZmxvYXRWYWx1ZUZvckxlbmd0aCgpIGNhbiBiZSByZW1vdmVkLiBTZWUgYnVnIDcxMTQzLgpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL0xlbmd0aEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9MZW5ndGhGdW5jdGlvbnMuaAkocmV2aXNpb24gMTMzNzY0KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL0xlbmd0aEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNCwxMCArMjQsOSBAQAogI2lmbmRlZiBMZW5ndGhGdW5jdGlvbnNfaAogI2RlZmluZSBMZW5n
dGhGdW5jdGlvbnNfaAogCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKLQogbmFtZXNwYWNlIFdl
YkNvcmUgewogCitjbGFzcyBMYXlvdXRVbml0OwogY2xhc3MgUmVuZGVyVmlldzsKIHN0cnVjdCBM
ZW5ndGg7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxMzM3NjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcs
NiBAQAogI2luY2x1ZGUgIkljb25VUkwuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb3VudGVycy5o
IgogI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgogI2luY2x1
ZGUgIk11dGF0aW9uT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJQYWdlVmlzaWJpbGl0eVN0YXRlLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKQEAgLTEwNiw2ICsxMDUsOCBAQCBjbGFzcyBI
VE1MTmFtZUNvbGxlY3Rpb247CiBjbGFzcyBIaXRUZXN0UmVxdWVzdDsKIGNsYXNzIEhpdFRlc3RS
ZXN1bHQ7CiBjbGFzcyBJbnRQb2ludDsKK2NsYXNzIExheW91dFBvaW50OworY2xhc3MgTGF5b3V0
UmVjdDsKIGNsYXNzIERPTVdyYXBwZXJXb3JsZDsKIGNsYXNzIEpTTm9kZTsKIGNsYXNzIExvY2Fs
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
LmgJKHJldmlzaW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTIgKzI5LDEzIEBACiAKICNpbmNs
dWRlICJEb2N1bWVudE1hcmtlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJM
YXlvdXRUeXBlcy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIExheW91dFBvaW50OworY2xh
c3MgTGF5b3V0UmVjdDsKIGNsYXNzIE5vZGU7CiBjbGFzcyBSYW5nZTsKIGNsYXNzIFJlbmRlcmVk
RG9jdW1lbnRNYXJrZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCShy
ZXZpc2lvbiAxMzM3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEyNSw3ICsxMjUsNyBAQCBwdWJsaWM6CiAKIGlubGluZSBJbnRT
aXplIGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkKIHsKLSAgICByZXR1cm4gSW50U2l6
ZShNQVhfTEFZT1VUX1VOSVQsIE1BWF9MQVlPVVRfVU5JVCk7CisgICAgcmV0dXJuIEludFNpemUo
TGF5b3V0VW5pdDo6bWF4KCksIExheW91dFVuaXQ6Om1heCgpKTsKIH0KIAogaW5saW5lIEVsZW1l
bnRSYXJlRGF0YTo6RWxlbWVudFJhcmVEYXRhKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9N
b3VzZVJlbGF0ZWRFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Nb3Vz
ZVJlbGF0ZWRFdmVudC5oCShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
TW91c2VSZWxhdGVkRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2lm
bmRlZiBNb3VzZVJlbGF0ZWRFdmVudF9oCiAjZGVmaW5lIE1vdXNlUmVsYXRlZEV2ZW50X2gKIAot
I2luY2x1ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dFBv
aW50LmgiCiAjaW5jbHVkZSAiVUlFdmVudFdpdGhLZXlTdGF0ZS5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDggQEAKIAogI2luY2x1
ZGUgIkVkaXRpbmdCb3VuZGFyeS5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVk
ZSAiRnJhY3Rpb25hbExheW91dFJlY3QuaCIKICNpbmNsdWRlICJLVVJMSGFzaC5oIgotI2luY2x1
ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIk11
dGF0aW9uT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgogI2lu
Y2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RvdWNo
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1RvdWNoLmgJKHJldmlzaW9uIDEz
Mzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw3ICsyOSw3IEBACiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKIAogI2luY2x1ZGUgIkV2ZW50
VGFyZ2V0LmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVk
ZSAiTGF5b3V0UG9pbnQuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDEzMzc2NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03NSw3ICs3NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIHN0YXRpYyBp
bmxpbmUgTGF5b3V0VW5pdCBOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbigpCiB7Ci0g
ICAgcmV0dXJuIE1JTl9MQVlPVVRfVU5JVDsKKyAgICByZXR1cm4gTGF5b3V0VW5pdDo6bWluKCk7
CiB9CiAKIENhcmV0QmFzZTo6Q2FyZXRCYXNlKENhcmV0VmlzaWJpbGl0eSB2aXNpYmlsaXR5KQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAkocmV2aXNpb24gMTMz
NzY0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJFZGl0aW5nU3R5bGUuaCIKICNp
bmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJM
YXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJTY3JvbGxCZWhhdmlv
ci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
bmRlcmVkUG9zaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
bmRlcmVkUG9zaXRpb24uaAkocmV2aXNpb24gMTMzNzY0KQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9SZW5kZXJlZFBvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDExICszMiwxMSBA
QAogI2RlZmluZSBSZW5kZXJlZFBvc2l0aW9uX2gKIAogI2luY2x1ZGUgIklubGluZUJveC5oIgot
I2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCiAjaW5jbHVkZSAiVGV4dEFmZmluaXR5LmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgTGF5b3V0VW5pdDsKIGNsYXNzIFBvc2l0aW9uOwog
Y2xhc3MgUmVuZGVyT2JqZWN0OwogY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5oCShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsy
NCw3IEBACiAjZGVmaW5lIEhUTUxBcmVhRWxlbWVudF9oCiAKICNpbmNsdWRlICJIVE1MQW5jaG9y
RWxlbWVudC5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVj
dC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmgJKHJl
dmlzaW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVy
bGF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkNvbG9y
LmgiCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNp
bmNsdWRlICJMYXlvdXRSZWN0LmgiCiAKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JUaW1lbGluZUFnZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaAkocmV2aXNpb24gMTMzNzY0KQorKysgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckJhc2VBZ2VudC5oIgogI2lu
Y2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgi
Ci0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1JbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJTY3JpcHRHQ0V2ZW50
LmgiCiAjaW5jbHVkZSAiU2NyaXB0R0NFdmVudExpc3RlbmVyLmgiCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcAkocmV2aXNp
b24gMTMzNzY0KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFj
dG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJFdmVu
dC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIK
LSNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJMYXlvdXRS
ZWN0LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VS
ZXNwb25zZS5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgpJbmRleDogU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaAkocmV2aXNpb24g
MTMzNzY0KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9y
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaWZuZGVmIFRpbWVsaW5lUmVj
b3JkRmFjdG9yeV9oCiAjZGVmaW5lIFRpbWVsaW5lUmVjb3JkRmFjdG9yeV9oCiAKLSNpbmNsdWRl
ICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAkocmV2aXNpb24gMTMzNzY0KQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDcgQEAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkltYWdlT2Jz
ZXJ2ZXIuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXNJbmxp
bmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgogI2luY2x1ZGUgIlNWR0ltYWdl
Q2FjaGUuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRm9jdXNDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9Gb2N1c0NvbnRyb2xsZXIuaAkocmV2aXNpb24gMTMzNzY0KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9Gb2N1c0NvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAog
I2RlZmluZSBGb2N1c0NvbnRyb2xsZXJfaAogCiAjaW5jbHVkZSAiRm9jdXNEaXJlY3Rpb24uaCIK
LSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkocmV2aXNpb24g
MTMzNzY0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIkFkanVzdFZpZXdTaXplT3JOb3QuaCIKICNp
bmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlw
ZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiUGFnaW5hdGlvbi5oIgog
I2luY2x1ZGUgIlBhaW50UGhhc2UuaCIKICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2UuaAkocmV2aXNpb24gMTMzNzY0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJGcmFtZUxvYWRl
clR5cGVzLmgiCiAjaW5jbHVkZSAiRmluZE9wdGlvbnMuaCIKICNpbmNsdWRlICJMYXlvdXRNaWxl
c3RvbmVzLmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0
LmgiCiAjaW5jbHVkZSAiUGFnZVZpc2liaWxpdHlTdGF0ZS5oIgogI2luY2x1ZGUgIlBhZ2luYXRp
b24uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvU3BhdGlhbE5hdmlnYXRpb24uaAkocmV2aXNpb24gMTMzNzY0KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3
IEBACiAKICNpbmNsdWRlICJGb2N1c0RpcmVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93
bmVyRWxlbWVudC5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0
UmVjdC5oIgogI2luY2x1ZGUgIk5vZGUuaCIKIAogI2luY2x1ZGUgPGxpbWl0cz4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuaAkocmV2aXNpb24gMTMzNzY0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAog
I2RlZmluZSBTY3JvbGxpbmdDb29yZGluYXRvcl9oCiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0j
aW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKICNpbmNs
dWRlICJUaW1lci5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRnJhY3Rpb25hbExh
eW91dFVuaXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GcmFjdGlv
bmFsTGF5b3V0VW5pdC5oCShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9GcmFjdGlvbmFsTGF5b3V0VW5pdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgyNSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgRnJhY3Rpb25hbExheW91dFVuaXRfaAotI2RlZmluZSBGcmFjdGlvbmFsTGF5
b3V0VW5pdF9oCi0KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5j
bHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1NhdHVyYXRlZEFyaXRobWV0aWMuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi0jaWZkZWYgTkRFQlVHCi0KLSNkZWZpbmUgUkVQT1JUX09WRVJGTE9XKGRv
ZXNPdmVyZmxvdykgKCh2b2lkKTApCi0KLSNlbHNlCi0KLSNkZWZpbmUgUkVQT1JUX09WRVJGTE9X
KGRvZXNPdmVyZmxvdykgZG8gXAotICAgIGlmICghKGRvZXNPdmVyZmxvdykpIHsgXAotICAgICAg
ICBXVEZSZXBvcnRFcnJvcihfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04s
ICIhKCVzKSIsICNkb2VzT3ZlcmZsb3cpOyBcCi0gICAgfSBcCi13aGlsZSAoMCkKLQotI2VuZGlm
Ci0KLSNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotc3RhdGljIGNvbnN0IGludCBrRml4ZWRQ
b2ludERlbm9taW5hdG9yID0gNjQ7Ci0jZWxzZQotc3RhdGljIGNvbnN0IGludCBrRml4ZWRQb2lu
dERlbm9taW5hdG9yID0gMTsKLSNlbmRpZgotY29uc3QgaW50IGludE1heEZvckxheW91dFVuaXQg
PSBJTlRfTUFYIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKLWNvbnN0IGludCBpbnRNaW5Gb3JM
YXlvdXRVbml0ID0gSU5UX01JTiAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0KLWNsYXNzIEZy
YWN0aW9uYWxMYXlvdXRVbml0IHsKLXB1YmxpYzoKLSAgICAvLyBGSVhNRTogSWRlYWxseSB3ZSB3
b3VsZCBoYXZlIHNpemVfdCB2ZXJzaW9ucyBvZiB0aGUgY29uc3RydWN0b3IgYW5kIG9wZXJhdG9y
cy4KLSAgICAvLyBIb3dldmVyIGR1ZSB0byBjb21waWxlciBhbmQgcGxhdGZvcm0gZGlmZmVyZW5j
ZXMgYWRkaW5nIHRob3NlIGFyZSBub24tdHJpdmlhbC4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgzODQ4IGZvciBkZXRhaWxzLgotICAgIAotICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0KCkgOiBtX3ZhbHVlKDApIHsgfQotI2lmIEVOQUJMRShTVUJQ
SVhFTF9MQVlPVVQpCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQoaW50IHZhbHVlKSB7IHNldFZh
bHVlKHZhbHVlKTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KHVuc2lnbmVkIHNob3J0IHZh
bHVlKSB7IHNldFZhbHVlKHZhbHVlKTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KHVuc2ln
bmVkIGludCB2YWx1ZSkgeyBzZXRWYWx1ZSh2YWx1ZSk7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0
VW5pdChmbG9hdCB2YWx1ZSkKLSAgICB7Ci0jaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJ
VEhNRVRJQykKLSAgICAgICAgbV92YWx1ZSA9IGNsYW1wVG88ZmxvYXQ+KHZhbHVlICoga0ZpeGVk
UG9pbnREZW5vbWluYXRvciwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KElOVF9NSU4pLCBzdGF0aWNfY2Fz
dDxmbG9hdD4oSU5UX01BWCkpOwotI2Vsc2UKLSAgICAgICAgUkVQT1JUX09WRVJGTE9XKGlzSW5C
b3VuZHModmFsdWUpKTsKLSAgICAgICAgbV92YWx1ZSA9IHZhbHVlICoga0ZpeGVkUG9pbnREZW5v
bWluYXRvcjsKLSNlbmRpZgotICAgIH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdChkb3VibGUg
dmFsdWUpCi0gICAgewotI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCi0g
ICAgICAgIG1fdmFsdWUgPSBjbGFtcFRvPGRvdWJsZT4odmFsdWUgKiBrRml4ZWRQb2ludERlbm9t
aW5hdG9yLCBzdGF0aWNfY2FzdDxkb3VibGU+KElOVF9NSU4pLCBzdGF0aWNfY2FzdDxkb3VibGU+
KElOVF9NQVgpKTsKLSNlbHNlCi0gICAgICAgIFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZh
bHVlKSk7Ci0gICAgICAgIG1fdmFsdWUgPSB2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3I7
Ci0jZW5kaWYKLSAgICB9Ci0jZWxzZQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KGludCB2YWx1
ZSkgeyBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFsdWU7
IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCh1bnNpZ25lZCBzaG9ydCB2YWx1ZSkgeyBSRVBP
UlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFsdWU7IH0KLSAgICBG
cmFjdGlvbmFsTGF5b3V0VW5pdCh1bnNpZ25lZCBpbnQgdmFsdWUpIHsgUkVQT1JUX09WRVJGTE9X
KGlzSW5Cb3VuZHModmFsdWUpKTsgbV92YWx1ZSA9IHZhbHVlOyB9Ci0gICAgRnJhY3Rpb25hbExh
eW91dFVuaXQoZmxvYXQgdmFsdWUpIHsgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUp
KTsgbV92YWx1ZSA9IHZhbHVlOyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQoZG91YmxlIHZh
bHVlKSB7IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7IG1fdmFsdWUgPSB2YWx1
ZTsgfQotI2VuZGlmCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQoY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIHZhbHVlKSB7IG1fdmFsdWUgPSB2YWx1ZS5yYXdWYWx1ZSgpOyB9Ci0KLSAgICBz
dGF0aWMgRnJhY3Rpb25hbExheW91dFVuaXQgZnJvbUZsb2F0Q2VpbChmbG9hdCB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHY7Ci0jaWYgRU5BQkxFKFNBVFVSQVRF
RF9MQVlPVVRfQVJJVEhNRVRJQykKLSAgICAgICAgdi5tX3ZhbHVlID0gY2xhbXBUb0ludGVnZXIo
Y2VpbGYodmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yKSk7Ci0jZWxzZQotICAgICAgICBS
RVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOwotICAgICAgICB2Lm1fdmFsdWUgPSBj
ZWlsZih2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3IpOwotI2VuZGlmCi0gICAgICAgIHJl
dHVybiB2OwotICAgIH0KLQotICAgIHN0YXRpYyBGcmFjdGlvbmFsTGF5b3V0VW5pdCBmcm9tRmxv
YXRGbG9vcihmbG9hdCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
IHY7Ci0jaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKLSAgICAgICAgdi5t
X3ZhbHVlID0gY2xhbXBUb0ludGVnZXIoZmxvb3JmKHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWlu
YXRvcikpOwotI2Vsc2UKLSAgICAgICAgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUp
KTsKLSAgICAgICAgdi5tX3ZhbHVlID0gZmxvb3JmKHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWlu
YXRvcik7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgfQotCi0gICAgc3RhdGljIEZy
YWN0aW9uYWxMYXlvdXRVbml0IGZyb21GbG9hdFJvdW5kKGZsb2F0IHZhbHVlKQotICAgIHsKLSNp
ZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQotICAgICAgICBpZiAodmFsdWUg
Pj0gMCkKLSAgICAgICAgICAgIHJldHVybiBjbGFtcCh2YWx1ZSArIGVwc2lsb24oKSAvIDIuMGYp
OwotICAgICAgICByZXR1cm4gY2xhbXAodmFsdWUgLSBlcHNpbG9uKCkgLyAyLjBmKTsKLSNlbHNl
Ci0gICAgICAgIGlmICh2YWx1ZSA+PSAwKSB7Ci0gICAgICAgICAgICBSRVBPUlRfT1ZFUkZMT1co
aXNJbkJvdW5kcyh2YWx1ZSArIGVwc2lsb24oKSAvIDIuMGYpKTsKLSAgICAgICAgICAgIHJldHVy
biBGcmFjdGlvbmFsTGF5b3V0VW5pdCh2YWx1ZSArIGVwc2lsb24oKSAvIDIuMGYpOwotICAgICAg
ICB9Ci0gICAgICAgIFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlIC0gZXBzaWxvbigp
IC8gMi4wZikpOwotICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQodmFsdWUgLSBl
cHNpbG9uKCkgLyAyLjBmKTsKLSNlbmRpZgotICAgIH0KLQotI2lmIEVOQUJMRShTVUJQSVhFTF9M
QVlPVVQpCi0gICAgaW50IHRvSW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSAvIGtGaXhlZFBv
aW50RGVub21pbmF0b3I7IH0KLSAgICBmbG9hdCB0b0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KG1fdmFsdWUpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsgfQotICAg
IGRvdWJsZSB0b0RvdWJsZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV92
YWx1ZSkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOyB9Ci0gICAgZmxvYXQgY2VpbFRvRmxvYXQo
KSBjb25zdAotICAgIHsKLSAgICAgICAgZmxvYXQgZmxvYXRWYWx1ZSA9IHRvRmxvYXQoKTsKLSAg
ICAgICAgaWYgKHN0YXRpY19jYXN0PGludD4oZmxvYXRWYWx1ZSAqIGtGaXhlZFBvaW50RGVub21p
bmF0b3IpID09IG1fdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gZmxvYXRWYWx1ZTsKLSAgICAg
ICAgaWYgKGZsb2F0VmFsdWUgPiAwKQotICAgICAgICAgICAgcmV0dXJuIG5leHRhZnRlcmYoZmxv
YXRWYWx1ZSwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpKTsKLSAgICAgICAgcmV0
dXJuIG5leHRhZnRlcmYoZmxvYXRWYWx1ZSwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1p
bigpKTsKLSAgICB9Ci0jZWxzZQotICAgIGludCB0b0ludCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWU7IH0KLSAgICBmbG9hdCB0b0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KG1fdmFsdWUpOyB9Ci0gICAgZG91YmxlIHRvRG91YmxlKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZG91YmxlPihtX3ZhbHVlKTsgfQotICAgIGZsb2F0IGNlaWxUb0Zsb2F0KCkgY29u
c3QgeyByZXR1cm4gdG9GbG9hdCgpOyB9Ci0jZW5kaWYKLSAgICB1bnNpZ25lZCB0b1Vuc2lnbmVk
KCkgY29uc3QgeyBSRVBPUlRfT1ZFUkZMT1cobV92YWx1ZSA+PSAwKTsgcmV0dXJuIHRvSW50KCk7
IH0KLQotICAgIG9wZXJhdG9yIGludCgpIGNvbnN0IHsgcmV0dXJuIHRvSW50KCk7IH0KLSAgICBv
cGVyYXRvciB1bnNpZ25lZCgpIGNvbnN0IHsgcmV0dXJuIHRvVW5zaWduZWQoKTsgfQotICAgIG9w
ZXJhdG9yIGZsb2F0KCkgY29uc3QgeyByZXR1cm4gdG9GbG9hdCgpOyB9Ci0gICAgb3BlcmF0b3Ig
ZG91YmxlKCkgY29uc3QgeyByZXR1cm4gdG9Eb3VibGUoKTsgfQotICAgIG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBv
cGVyYXRvcisrKGludCkKLSAgICB7Ci0gICAgICAgIG1fdmFsdWUgKz0ga0ZpeGVkUG9pbnREZW5v
bWluYXRvcjsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIGlubGluZSBpbnQg
cmF3VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0gICAgaW5saW5lIHZvaWQgc2V0
UmF3VmFsdWUoaW50IHZhbHVlKSB7IG1fdmFsdWUgPSB2YWx1ZTsgfQotICAgIHZvaWQgc2V0UmF3
VmFsdWUobG9uZyBsb25nIHZhbHVlKQotICAgIHsKLSAgICAgICAgUkVQT1JUX09WRVJGTE9XKHZh
bHVlID4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSAmJiB2YWx1ZSA8IHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpOwotICAgICAgICBtX3ZhbHVlID0gc3RhdGljX2Nhc3Q8
aW50Pih2YWx1ZSk7Ci0gICAgfQotCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgYWJzKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJldHVyblZhbHVlOwotICAg
ICAgICByZXR1cm5WYWx1ZS5zZXRSYXdWYWx1ZSg6OmFicyhtX3ZhbHVlKSk7Ci0gICAgICAgIHJl
dHVybiByZXR1cm5WYWx1ZTsKLSAgICB9Ci0jaWYgT1MoREFSV0lOKQotICAgIGludCB3dGZfY2Vp
bCgpIGNvbnN0Ci0jZWxzZQotICAgIGludCBjZWlsKCkgY29uc3QKLSNlbmRpZgotICAgIHsKLSNp
ZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAgICAgICBpZiAobV92YWx1ZSA+PSAwKQotICAg
ICAgICAgICAgcmV0dXJuIChtX3ZhbHVlICsga0ZpeGVkUG9pbnREZW5vbWluYXRvciAtIDEpIC8g
a0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKLSAgICAgICAgcmV0dXJuIHRvSW50KCk7Ci0jZWxzZQot
ICAgICAgICByZXR1cm4gbV92YWx1ZTsKLSNlbmRpZgotICAgIH0KLSAgICBpbnQgcm91bmQoKSBj
b25zdAotICAgIHsKLSNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKSAmJiBFTkFCTEUoU0FUVVJB
VEVEX0xBWU9VVF9BUklUSE1FVElDKQotICAgICAgICBpZiAobV92YWx1ZSA+IDApCi0gICAgICAg
ICAgICByZXR1cm4gc2F0dXJhdGVkQWRkaXRpb24ocmF3VmFsdWUoKSwga0ZpeGVkUG9pbnREZW5v
bWluYXRvciAvIDIpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKLSAgICAgICAgcmV0dXJuIHNh
dHVyYXRlZFN1YnRyYWN0aW9uKHJhd1ZhbHVlKCksIGtGaXhlZFBvaW50RGVub21pbmF0b3IgLyAy
KSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0jZWxpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VU
KQotICAgICAgICBpZiAobV92YWx1ZSA+IDApCi0gICAgICAgICAgICByZXR1cm4gKG1fdmFsdWUg
KyAoa0ZpeGVkUG9pbnREZW5vbWluYXRvciAvIDIpKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7
Ci0gICAgICAgIHJldHVybiAobV92YWx1ZSAtIChrRml4ZWRQb2ludERlbm9taW5hdG9yIC8gMikp
IC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKLSNlbHNlCi0gICAgICAgIHJldHVybiBtX3ZhbHVl
OwotI2VuZGlmCi0gICAgfQotCi0gICAgaW50IGZsb29yKCkgY29uc3QKLSAgICB7Ci0jaWYgRU5B
QkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICAgICAgaWYgKG1fdmFsdWUgPj0gMCkKLSAgICAgICAg
ICAgIHJldHVybiB0b0ludCgpOwotICAgICAgICByZXR1cm4gKG1fdmFsdWUgLSBrRml4ZWRQb2lu
dERlbm9taW5hdG9yICsgMSkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOwotI2Vsc2UKLSAgICAg
ICAgcmV0dXJuIG1fdmFsdWU7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBmcmFjdGlvbigpIGNvbnN0Ci0gICAgeyAgIAotICAgICAgICAvLyBBZGQgdGhlIGZyYWN0
aW9uIHRvIHRoZSBzaXplIChhcyBvcHBvc2VkIHRvIHRoZSBmdWxsIGxvY2F0aW9uKSB0byBhdm9p
ZCBvdmVyZmxvd3MuCi0gICAgICAgIC8vIENvbXB1dGUgZnJhY3Rpb24gdXNpbmcgdGhlIG1vZCBv
cGVyYXRvciB0byBwcmVzZXJ2ZSB0aGUgc2lnbiBvZiB0aGUgdmFsdWUgYXMgaXQgbWF5IGFmZmVj
dCByb3VuZGluZy4KLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZnJhY3Rpb247Ci0gICAg
ICAgIGZyYWN0aW9uLnNldFJhd1ZhbHVlKHJhd1ZhbHVlKCkgJSBrRml4ZWRQb2ludERlbm9taW5h
dG9yKTsKLSAgICAgICAgcmV0dXJuIGZyYWN0aW9uOwotICAgIH0KLQotI2lmIEVOQUJMRShTVUJQ
SVhFTF9MQVlPVVQpCi0gICAgc3RhdGljIGZsb2F0IGVwc2lsb24oKSB7IHJldHVybiAxLjBmIC8g
a0ZpeGVkUG9pbnREZW5vbWluYXRvcjsgfQotI2Vsc2UKLSAgICBzdGF0aWMgaW50IGVwc2lsb24o
KSB7IHJldHVybiAwOyB9Ci0jZW5kaWYKLSAgICBzdGF0aWMgY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQgbWF4KCkKLSAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG07Ci0gICAg
ICAgIG0ubV92YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7Ci0gICAgICAg
IHJldHVybiBtOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQg
bWluKCkKLSAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG07Ci0gICAgICAgIG0u
bV92YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCk7Ci0gICAgICAgIHJldHVy
biBtOwotICAgIH0KLQotICAgIC8vIFZlcnNpb25zIG9mIG1heC9taW4gdGhhdCBhcmUgc2xpZ2h0
bHkgc21hbGxlci9sYXJnZXIgdGhhbiBtYXgvbWluKCkgdG8gYWxsb3cgZm9yIHJvaW5kaW5nIHdp
dGhvdXQgb3ZlcmZsb3dpbmcuCi0gICAgc3RhdGljIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0
IG5lYXJseU1heCgpCi0gICAgewotICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtOwotICAg
ICAgICBtLm1fdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpIC0ga0ZpeGVk
UG9pbnREZW5vbWluYXRvciAvIDI7Ci0gICAgICAgIHJldHVybiBtOwotICAgIH0KLSAgICBzdGF0
aWMgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQgbmVhcmx5TWluKCkKLSAgICB7Ci0gICAgICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0IG07Ci0gICAgICAgIG0ubV92YWx1ZSA9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50Pjo6bWluKCkgKyBrRml4ZWRQb2ludERlbm9taW5hdG9yIC8gMjsKLSAgICAg
ICAgcmV0dXJuIG07Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBjbGFtcChkb3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY2xhbXBUbzxGcmFj
dGlvbmFsTGF5b3V0VW5pdD4odmFsdWUsIEZyYWN0aW9uYWxMYXlvdXRVbml0OjptaW4oKSwgRnJh
Y3Rpb25hbExheW91dFVuaXQ6Om1heCgpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGlj
IGJvb2wgaXNJbkJvdW5kcyhpbnQgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gOjphYnMo
dmFsdWUpIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkgLyBrRml4ZWRQb2ludERl
bm9taW5hdG9yOwotICAgIH0KLSAgICBzdGF0aWMgYm9vbCBpc0luQm91bmRzKHVuc2lnbmVkIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSAvIGtGaXhlZFBvaW50RGVub21pbmF0
b3I7Ci0gICAgfQotICAgIHN0YXRpYyBib29sIGlzSW5Cb3VuZHMoZG91YmxlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIDo6ZmFicyh2YWx1ZSkgPD0gc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ+OjptYXgoKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0gICAgfQotICAgIAotICAgIGlu
bGluZSB2b2lkIHNldFZhbHVlKGludCB2YWx1ZSkKLSAgICB7Ci0jaWYgRU5BQkxFKFNBVFVSQVRF
RF9MQVlPVVRfQVJJVEhNRVRJQykKLSAgICAgICAgaWYgKHZhbHVlID4gaW50TWF4Rm9yTGF5b3V0
VW5pdCkKLSAgICAgICAgICAgIG1fdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1h
eCgpOwotICAgICAgICBlbHNlIGlmICh2YWx1ZSA8IGludE1pbkZvckxheW91dFVuaXQpCi0gICAg
ICAgICAgICBtX3ZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbV92YWx1ZSA9IHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWlu
YXRvcjsKLSNlbHNlCi0gICAgICAgIFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7
Ci0gICAgICAgIG1fdmFsdWUgPSB2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0jZW5k
aWYKLSAgICB9Ci0gICAgaW5saW5lIHZvaWQgc2V0VmFsdWUodW5zaWduZWQgdmFsdWUpCi0gICAg
ewotI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCi0gICAgICAgIGlmICh2
YWx1ZSA+PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW50TWF4Rm9yTGF5b3V0VW5pdCkpCi0gICAg
ICAgICAgICBtX3ZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbV92YWx1ZSA9IHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWlu
YXRvcjsKLSNlbHNlCi0gICAgICAgIFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7
Ci0gICAgICAgIG1fdmFsdWUgPSB2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0jZW5k
aWYKLSAgICB9Ci0KLSAgICBpbnQgbV92YWx1ZTsKLX07Ci0KLWlubGluZSBib29sIG9wZXJhdG9y
PD0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBiKQotewotICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgPD0gYi5yYXdWYWx1ZSgpOwotfQot
Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBm
bG9hdCBiKQotewotICAgIHJldHVybiBhLnRvRmxvYXQoKSA8PSBiOwotfQotCi1pbmxpbmUgYm9v
bCBvcGVyYXRvcjw9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKLXsKLSAg
ICByZXR1cm4gYSA8PSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKLX0KLQotaW5saW5lIGJvb2wg
b3BlcmF0b3I8PShjb25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikK
LXsKLSAgICByZXR1cm4gYSA8PSBiLnRvRmxvYXQoKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0
b3I8PShjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAg
cmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpIDw9IGI7Ci19Ci0KLWlubGluZSBib29sIG9w
ZXJhdG9yPj0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgPj0gYi5yYXdWYWx1ZSgp
OwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBhLCBpbnQgYikKLXsKLSAgICByZXR1cm4gYSA+PSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsK
LX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gYSA+PSBiLnRvRmxvYXQoKTsKLX0KLQot
aW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxv
YXQgYikKLXsKLSAgICByZXR1cm4gYS50b0Zsb2F0KCkgPj0gYjsKLX0KLQotaW5saW5lIGJvb2wg
b3BlcmF0b3I+PShjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17
Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpID49IGI7Ci19Ci0KLWlubGluZSBi
b29sIG9wZXJhdG9yPChjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rp
b25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJuIGEucmF3VmFsdWUoKSA8IGIucmF3VmFs
dWUoKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBhLCBpbnQgYikKLXsKLSAgICByZXR1cm4gYSA8IEZyYWN0aW9uYWxMYXlvdXRVbml0KGIp
OwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGEsIGZsb2F0IGIpCi17Ci0gICAgcmV0dXJuIGEudG9GbG9hdCgpIDwgYjsKLX0KLQotaW5saW5l
IGJvb2wgb3BlcmF0b3I8KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBkb3VibGUgYikK
LXsKLSAgICByZXR1cm4gYS50b0RvdWJsZSgpIDwgYjsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0
b3I8KGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICBy
ZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgPCBiOwotfQotCi1pbmxpbmUgYm9vbCBvcGVy
YXRvcjwoY29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0g
ICAgcmV0dXJuIGEgPCBiLnRvRmxvYXQoKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
YikKLXsKLSAgICByZXR1cm4gYS5yYXdWYWx1ZSgpID4gYi5yYXdWYWx1ZSgpOwotfQotCi1pbmxp
bmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGRvdWJsZSBi
KQotewotICAgIHJldHVybiBhLnRvRG91YmxlKCkgPiBiOwotfQotCi1pbmxpbmUgYm9vbCBvcGVy
YXRvcj4oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCi17Ci0gICAgcmV0
dXJuIGEudG9GbG9hdCgpID4gYjsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKLXsKLSAgICByZXR1cm4gYSA+IEZyYWN0aW9u
YWxMYXlvdXRVbml0KGIpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgaW50IGEs
IGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBGcmFjdGlvbmFs
TGF5b3V0VW5pdChhKSA+IGI7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBmbG9h
dCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gYSA+IGIu
dG9GbG9hdCgpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgZG91YmxlIGEsIGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBhID4gYi50b0RvdWJs
ZSgpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gYS5y
YXdWYWx1ZSgpICE9IGIucmF3VmFsdWUoKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKLXsKLSAgICByZXR1cm4gYSAh
PSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJu
IEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpICE9IGI7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9y
IT0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQotewotICAgIHJldHVybiBh
ICE9IEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYikKLXsKLSAgICByZXR1cm4gYS5yYXdWYWx1ZSgpID09IGIucmF3VmFsdWUoKTsKLX0KLQot
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50
IGIpCi17Ci0gICAgcmV0dXJuIGEgPT0gRnJhY3Rpb25hbExheW91dFVuaXQoYik7Ci19Ci0KLWlu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBiKQotewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSA9PSBiOwotfQot
Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBm
bG9hdCBiKQotewotICAgIHJldHVybiBhLnRvRmxvYXQoKSA9PSBiOwotfQotCi1pbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBi
KQotewotICAgIHJldHVybiBhID09IGIudG9GbG9hdCgpOwotfQotCi0vLyBGb3IgbXVsdGlwbGlj
YXRpb24gdGhhdCdzIHByb25lIHRvIG92ZXJmbG93LCB0aGlzIGJvdW5kcyBpdCB0byBGcmFjdGlv
bmFsTGF5b3V0VW5pdDo6bWF4KCkgYW5kIDo6bWluKCkKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBib3VuZGVkTXVsdGlwbHkoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQp
Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOwotICAgIGxvbmcgbG9uZyByYXdW
YWwgPSBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGEucmF3VmFsdWUoKSkgKiBiLnJhd1ZhbHVlKCkg
LyBrRml4ZWRQb2ludERlbm9taW5hdG9yOwotICAgIGlmIChyYXdWYWwgPiBzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpKQotICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQ6
Om1heCgpOwotICAgIGlmIChyYXdWYWwgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigp
KQotICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQ6Om1pbigpOwotICAgIHJldHVy
blZhbC5zZXRSYXdWYWx1ZShyYXdWYWwpOwotICAgIHJldHVybiByZXR1cm5WYWw7Ci0jZWxzZQot
ICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgKiBiLnJhd1ZhbHVlKCk7Ci0jZW5kaWYKLX0KLQotaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKihjb25zdCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0jaWYgRU5BQkxFKFNV
QlBJWEVMX0xBWU9VVCkgJiYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKLSAg
ICByZXR1cm4gYm91bmRlZE11bHRpcGx5KGEsIGIpOwotI2VsaWYgRU5BQkxFKFNVQlBJWEVMX0xB
WU9VVCkKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7Ci0gICAgbG9uZyBsb25n
IHJhd1ZhbCA9IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oYS5yYXdWYWx1ZSgpKSAqIGIucmF3VmFs
dWUoKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7Ci0gICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVl
KHJhd1ZhbCk7Ci0gICAgcmV0dXJuIHJldHVyblZhbDsKLSNlbHNlCi0gICAgcmV0dXJuIGEucmF3
VmFsdWUoKSAqIGIucmF3VmFsdWUoKTsKLSNlbmRpZgotfSAgICAKLQotaW5saW5lIGRvdWJsZSBv
cGVyYXRvciooY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGRvdWJsZSBiKQotewotICAg
IHJldHVybiBhLnRvRG91YmxlKCkgKiBiOwotfQotCi1pbmxpbmUgZmxvYXQgb3BlcmF0b3IqKGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQotewotICAgIHJldHVybiBhLnRv
RmxvYXQoKSAqIGI7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvcioo
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQotewotICAgIHJldHVybiBhICog
RnJhY3Rpb25hbExheW91dFVuaXQoYik7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBvcGVyYXRvciooY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIHVuc2lnbmVkIGIpCi17
Ci0gICAgcmV0dXJuIGEgKiBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKLX0KLQotaW5saW5lIEZy
YWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKih1bnNpZ25lZCBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgKiBi
OwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IqKGNvbnN0IGludCBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gRnJhY3Rpb25h
bExheW91dFVuaXQoYSkgKiBiOwotfQotCi1pbmxpbmUgZmxvYXQgb3BlcmF0b3IqKGNvbnN0IGZs
b2F0IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBhICog
Yi50b0Zsb2F0KCk7Ci19Ci0KLWlubGluZSBkb3VibGUgb3BlcmF0b3IqKGNvbnN0IGRvdWJsZSBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gYSAqIGIudG9E
b3VibGUoKTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLyhjb25z
dCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIp
Ci17Ci0jaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5p
dCByZXR1cm5WYWw7Ci0gICAgbG9uZyBsb25nIHJhd1ZhbCA9IHN0YXRpY19jYXN0PGxvbmcgbG9u
Zz4oa0ZpeGVkUG9pbnREZW5vbWluYXRvcikgKiBhLnJhd1ZhbHVlKCkgLyBiLnJhd1ZhbHVlKCk7
Ci0gICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKHJhd1ZhbCk7Ci0gICAgcmV0dXJuIHJldHVyblZh
bDsKLSNlbHNlCi0gICAgcmV0dXJuIGEucmF3VmFsdWUoKSAvIGIucmF3VmFsdWUoKTsKLSNlbmRp
ZgotfSAgICAKLQotaW5saW5lIGZsb2F0IG9wZXJhdG9yLyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYSwgZmxvYXQgYikKLXsKLSAgICByZXR1cm4gYS50b0Zsb2F0KCkgLyBiOwotfQotCi1p
bmxpbmUgZG91YmxlIG9wZXJhdG9yLyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZG91
YmxlIGIpCi17Ci0gICAgcmV0dXJuIGEudG9Eb3VibGUoKSAvIGI7Ci19Ci0KLWlubGluZSBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci8oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEs
IGludCBiKQotewotICAgIHJldHVybiBhIC8gRnJhY3Rpb25hbExheW91dFVuaXQoYik7Ci19Ci0K
LWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci8oY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGEsIHVuc2lnbmVkIGludCBiKQotewotICAgIHJldHVybiBhIC8gRnJhY3Rpb25h
bExheW91dFVuaXQoYik7Ci19Ci0KLWlubGluZSBmbG9hdCBvcGVyYXRvci8oY29uc3QgZmxvYXQg
YSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJuIGEgLyBiLnRv
RmxvYXQoKTsKLX0KLQotaW5saW5lIGRvdWJsZSBvcGVyYXRvci8oY29uc3QgZG91YmxlIGEsIGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBhIC8gYi50b0RvdWJs
ZSgpOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IvKGNvbnN0IGlu
dCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gRnJhY3Rp
b25hbExheW91dFVuaXQoYSkgLyBiOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQg
b3BlcmF0b3IvKHVuc2lnbmVkIGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikK
LXsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgLyBiOwotfQotCi1pbmxpbmUg
RnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICBGcmFjdGlvbmFsTGF5
b3V0VW5pdCByZXR1cm5WYWw7Ci0jaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJ
QykKLSAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUoc2F0dXJhdGVkQWRkaXRpb24oYS5yYXdWYWx1
ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKLSNlbHNlCi0gICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKGEu
cmF3VmFsdWUoKSArIGIucmF3VmFsdWUoKSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gcmV0dXJuVmFs
OwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IrKGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKLXsKLSAgICByZXR1cm4gYSArIEZyYWN0aW9uYWxM
YXlvdXRVbml0KGIpOwotfQotCi1pbmxpbmUgZmxvYXQgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQotewotICAgIHJldHVybiBhLnRvRmxvYXQoKSArIGI7
Ci19Ci0KLWlubGluZSBkb3VibGUgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBhLCBkb3VibGUgYikKLXsKLSAgICByZXR1cm4gYS50b0RvdWJsZSgpICsgYjsKLX0KLQotaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKyhjb25zdCBpbnQgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0
KGEpICsgYjsKLX0KLQotaW5saW5lIGZsb2F0IG9wZXJhdG9yKyhjb25zdCBmbG9hdCBhLCBjb25z
dCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICByZXR1cm4gYSArIGIudG9GbG9hdCgp
OwotfQotCi1pbmxpbmUgZG91YmxlIG9wZXJhdG9yKyhjb25zdCBkb3VibGUgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgcmV0dXJuIGEgKyBiLnRvRG91YmxlKCk7Ci19
Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25h
bExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIEZy
YWN0aW9uYWxMYXlvdXRVbml0IHJldHVyblZhbDsKLSNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9V
VF9BUklUSE1FVElDKQotICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShzYXR1cmF0ZWRTdWJ0cmFj
dGlvbihhLnJhd1ZhbHVlKCksIGIucmF3VmFsdWUoKSkpOwotI2Vsc2UKLSAgICByZXR1cm5WYWwu
c2V0UmF3VmFsdWUoYS5yYXdWYWx1ZSgpIC0gYi5yYXdWYWx1ZSgpKTsKLSNlbmRpZgotICAgIHJl
dHVybiByZXR1cm5WYWw7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRv
ci0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQotewotICAgIHJldHVybiBh
IC0gRnJhY3Rpb25hbExheW91dFVuaXQoYik7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIHVuc2lnbmVkIGIp
Ci17Ci0gICAgcmV0dXJuIGEgLSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKLX0KLQotaW5saW5l
IGZsb2F0IG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikK
LXsKLSAgICByZXR1cm4gYS50b0Zsb2F0KCkgLSBiOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExh
eW91dFVuaXQgb3BlcmF0b3ItKGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYikKLXsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgLSBiOwotfQotCi1p
bmxpbmUgZmxvYXQgb3BlcmF0b3ItKGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBiKQotewotICAgIHJldHVybiBhIC0gYi50b0Zsb2F0KCk7Ci19Ci0KLWlubGluZSBG
cmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGEpCi17Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOwotICAgIHJldHVyblZh
bC5zZXRSYXdWYWx1ZSgtYS5yYXdWYWx1ZSgpKTsKLSAgICByZXR1cm4gcmV0dXJuVmFsOwotfQot
Ci0vLyBGb3IgcmV0dXJuaW5nIHRoZSByZW1haW5kZXIgYWZ0ZXIgYSBkaXZpc2lvbiB3aXRoIGlu
dGVnZXIgcmVzdWx0cy4KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBpbnRNb2QoY29uc3Qg
RnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQot
ewotI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCi0gICAgLy8gVGhpcyBjYWxjdWxhdGVzIHRo
ZSBtb2R1bG8gc28gdGhhdDogYSA9IHN0YXRpY19jYXN0PGludD4oYSAvIGIpICogYiArIGludE1v
ZChhLCBiKS4KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7Ci0gICAgcmV0dXJu
VmFsLnNldFJhd1ZhbHVlKGEucmF3VmFsdWUoKSAlIGIucmF3VmFsdWUoKSk7Ci0gICAgcmV0dXJu
IHJldHVyblZhbDsKLSNlbHNlCi0gICAgcmV0dXJuIGEucmF3VmFsdWUoKSAlIGIucmF3VmFsdWUo
KTsKLSNlbmRpZgotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IlKGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
YikKLXsKLSNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAgIC8vIFRoaXMgY2FsY3VsYXRl
cyB0aGUgbW9kdWxvIHNvIHRoYXQ6IGEgPSAoYSAvIGIpICogYiArIGEgJSBiLgotICAgIEZyYWN0
aW9uYWxMYXlvdXRVbml0IHJldHVyblZhbDsKLSAgICBsb25nIGxvbmcgcmF3VmFsID0gKHN0YXRp
Y19jYXN0PGxvbmcgbG9uZz4oa0ZpeGVkUG9pbnREZW5vbWluYXRvcikgKiBhLnJhd1ZhbHVlKCkp
ICUgYi5yYXdWYWx1ZSgpOwotICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShyYXdWYWwgLyBrRml4
ZWRQb2ludERlbm9taW5hdG9yKTsKLSAgICByZXR1cm4gcmV0dXJuVmFsOwotI2Vsc2UKLSAgICBy
ZXR1cm4gYS5yYXdWYWx1ZSgpICUgYi5yYXdWYWx1ZSgpOwotI2VuZGlmCi19Ci0KLWlubGluZSBG
cmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvciUoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGEsIGludCBiKQotewotICAgIHJldHVybiBhICUgRnJhY3Rpb25hbExheW91dFVuaXQoYik7Ci19
Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvciUoaW50IGEsIGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5p
dChhKSAlIGI7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3IrPShG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17
Ci0jaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKLSAgICBhLnNldFJhd1Zh
bHVlKHNhdHVyYXRlZEFkZGl0aW9uKGEucmF3VmFsdWUoKSwgYi5yYXdWYWx1ZSgpKSk7Ci0jZWxz
ZQotICAgIGEgPSBhICsgYjsKLSNlbmRpZgotICAgIHJldHVybiBhOwotfQotCi1pbmxpbmUgRnJh
Y3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yKz0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGlu
dCBiKQotewotICAgIGEgPSBhICsgYjsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5lIEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvcis9KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9h
dCBiKQotewotICAgIGEgPSBhICsgYjsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5lIGZsb2F0
JiBvcGVyYXRvcis9KGZsb2F0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKLXsK
LSAgICBhID0gYSArIGI7Ci0gICAgcmV0dXJuIGE7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgb3BlcmF0b3ItPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCi17Ci0g
ICAgYSA9IGEgLSBiOwotICAgIHJldHVybiBhOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91
dFVuaXQmIG9wZXJhdG9yLT0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBiKQotewotI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVU
SUMpCi0gICAgYS5zZXRSYXdWYWx1ZShzYXR1cmF0ZWRTdWJ0cmFjdGlvbihhLnJhd1ZhbHVlKCks
IGIucmF3VmFsdWUoKSkpOwotI2Vsc2UKLSAgICBhID0gYSAtIGI7Ci0jZW5kaWYKLSAgICByZXR1
cm4gYTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvci09KEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQotewotICAgIGEgPSBhIC0gYjsKLSAgICByZXR1
cm4gYTsKLX0KLQotaW5saW5lIGZsb2F0JiBvcGVyYXRvci09KGZsb2F0JiBhLCBjb25zdCBGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgYikKLXsKLSAgICBhID0gYSAtIGI7Ci0gICAgcmV0dXJuIGE7Ci19
Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3IqPShGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAgYSA9IGEg
KiBiOwotICAgIHJldHVybiBhOwotfQotLy8gb3BlcmF0b3IqPShGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYSwgaW50IGIpIGlzIHN1cHBvcnRlZCBieSB0aGUgb3BlcmF0b3IgYWJvdmUgcGx1cyBGcmFj
dGlvbmFsTGF5b3V0VW5pdChpbnQpLgotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9w
ZXJhdG9yKj0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCi17Ci0gICAgYSA9IGEg
KiBiOwotICAgIHJldHVybiBhOwotfQotCi1pbmxpbmUgZmxvYXQmIG9wZXJhdG9yKj0oZmxvYXQm
IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQotewotICAgIGEgPSBhICogYjsKLSAg
ICByZXR1cm4gYTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvci89
KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikK
LXsKLSAgICBhID0gYSAvIGI7Ci0gICAgcmV0dXJuIGE7Ci19Ci0vLyBvcGVyYXRvci89KEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikgaXMgc3VwcG9ydGVkIGJ5IHRoZSBvcGVyYXRvciBh
Ym92ZSBwbHVzIEZyYWN0aW9uYWxMYXlvdXRVbml0KGludCkuCi0KLWlubGluZSBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgb3BlcmF0b3IvPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikK
LXsKLSAgICBhID0gYSAvIGI7Ci0gICAgcmV0dXJuIGE7Ci19Ci0KLWlubGluZSBmbG9hdCYgb3Bl
cmF0b3IvPShmbG9hdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCi17Ci0gICAg
YSA9IGEgLyBiOwotICAgIHJldHVybiBhOwotfQotCi1pbmxpbmUgaW50IHNuYXBTaXplVG9QaXhl
bChGcmFjdGlvbmFsTGF5b3V0VW5pdCBzaXplLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBsb2NhdGlv
bikgCi17Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgZnJhY3Rpb24gPSBsb2NhdGlvbi5mcmFj
dGlvbigpOwotICAgIHJldHVybiAoZnJhY3Rpb24gKyBzaXplKS5yb3VuZCgpIC0gZnJhY3Rpb24u
cm91bmQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRnJhY3Rp
b25hbExheW91dFVuaXRfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGF5b3V0VW5p
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xheW91dFVuaXQuaAko
cmV2aXNpb24gMTMzNTE3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GcmFjdGlvbmFs
TGF5b3V0VW5pdC5oOjEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xheW91dFVu
aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgyNSBAQAorLyoKKyAqIENvcHlyaWdodCAo
YykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZyYWN0aW9uYWxM
YXlvdXRVbml0X2gKKyNkZWZpbmUgRnJhY3Rpb25hbExheW91dFVuaXRfaAorCisjaW5jbHVkZSA8
bGltaXRzLmg+CisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRl
IDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9T
YXR1cmF0ZWRBcml0aG1ldGljLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmZGVmIE5E
RUJVRworCisjZGVmaW5lIFJFUE9SVF9PVkVSRkxPVyhkb2VzT3ZlcmZsb3cpICgodm9pZCkwKQor
CisjZWxzZQorCisjZGVmaW5lIFJFUE9SVF9PVkVSRkxPVyhkb2VzT3ZlcmZsb3cpIGRvIFwKKyAg
ICBpZiAoIShkb2VzT3ZlcmZsb3cpKSB7IFwKKyAgICAgICAgV1RGUmVwb3J0RXJyb3IoX19GSUxF
X18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAiISglcykiLCAjZG9lc092ZXJmbG93
KTsgXAorICAgIH0gXAord2hpbGUgKDApCisKKyNlbmRpZgorCisjaWYgRU5BQkxFKFNVQlBJWEVM
X0xBWU9VVCkKK3N0YXRpYyBjb25zdCBpbnQga0ZpeGVkUG9pbnREZW5vbWluYXRvciA9IDY0Owor
I2Vsc2UKK3N0YXRpYyBjb25zdCBpbnQga0ZpeGVkUG9pbnREZW5vbWluYXRvciA9IDE7CisjZW5k
aWYKK2NvbnN0IGludCBpbnRNYXhGb3JMYXlvdXRVbml0ID0gSU5UX01BWCAvIGtGaXhlZFBvaW50
RGVub21pbmF0b3I7Citjb25zdCBpbnQgaW50TWluRm9yTGF5b3V0VW5pdCA9IElOVF9NSU4gLyBr
Rml4ZWRQb2ludERlbm9taW5hdG9yOworCitjbGFzcyBGcmFjdGlvbmFsTGF5b3V0VW5pdCB7Citw
dWJsaWM6CisgICAgLy8gRklYTUU6IElkZWFsbHkgd2Ugd291bGQgaGF2ZSBzaXplX3QgdmVyc2lv
bnMgb2YgdGhlIGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRvcnMuCisgICAgLy8gSG93ZXZlciBkdWUg
dG8gY29tcGlsZXIgYW5kIHBsYXRmb3JtIGRpZmZlcmVuY2VzIGFkZGluZyB0aG9zZSBhcmUgbm9u
LXRyaXZpYWwuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD04Mzg0OCBmb3IgZGV0YWlscy4KKyAgICAKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCgp
IDogbV92YWx1ZSgwKSB7IH0KKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIEZyYWN0
aW9uYWxMYXlvdXRVbml0KGludCB2YWx1ZSkgeyBzZXRWYWx1ZSh2YWx1ZSk7IH0KKyAgICBGcmFj
dGlvbmFsTGF5b3V0VW5pdCh1bnNpZ25lZCBzaG9ydCB2YWx1ZSkgeyBzZXRWYWx1ZSh2YWx1ZSk7
IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCh1bnNpZ25lZCBpbnQgdmFsdWUpIHsgc2V0VmFs
dWUodmFsdWUpOyB9CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQoZmxvYXQgdmFsdWUpCisgICAg
eworI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCisgICAgICAgIG1fdmFs
dWUgPSBjbGFtcFRvPGZsb2F0Pih2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3IsIHN0YXRp
Y19jYXN0PGZsb2F0PihJTlRfTUlOKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KElOVF9NQVgpKTsKKyNl
bHNlCisgICAgICAgIFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7CisgICAgICAg
IG1fdmFsdWUgPSB2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3I7CisjZW5kaWYKKyAgICB9
CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQoZG91YmxlIHZhbHVlKQorICAgIHsKKyNpZiBFTkFC
TEUoU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQorICAgICAgICBtX3ZhbHVlID0gY2xhbXBU
bzxkb3VibGU+KHZhbHVlICoga0ZpeGVkUG9pbnREZW5vbWluYXRvciwgc3RhdGljX2Nhc3Q8ZG91
YmxlPihJTlRfTUlOKSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihJTlRfTUFYKSk7CisjZWxzZQorICAg
ICAgICBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOworICAgICAgICBtX3ZhbHVl
ID0gdmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yOworI2VuZGlmCisgICAgfQorI2Vsc2UK
KyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdChpbnQgdmFsdWUpIHsgUkVQT1JUX09WRVJGTE9XKGlz
SW5Cb3VuZHModmFsdWUpKTsgbV92YWx1ZSA9IHZhbHVlOyB9CisgICAgRnJhY3Rpb25hbExheW91
dFVuaXQodW5zaWduZWQgc2hvcnQgdmFsdWUpIHsgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHMo
dmFsdWUpKTsgbV92YWx1ZSA9IHZhbHVlOyB9CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQodW5z
aWduZWQgaW50IHZhbHVlKSB7IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7IG1f
dmFsdWUgPSB2YWx1ZTsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KGZsb2F0IHZhbHVlKSB7
IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7IG1fdmFsdWUgPSB2YWx1ZTsgfQor
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KGRvdWJsZSB2YWx1ZSkgeyBSRVBPUlRfT1ZFUkZMT1co
aXNJbkJvdW5kcyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFsdWU7IH0KKyNlbmRpZgorICAgIEZyYWN0
aW9uYWxMYXlvdXRVbml0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiB2YWx1ZSkgeyBtX3Zh
bHVlID0gdmFsdWUucmF3VmFsdWUoKTsgfQorCisgICAgc3RhdGljIEZyYWN0aW9uYWxMYXlvdXRV
bml0IGZyb21GbG9hdENlaWwoZmxvYXQgdmFsdWUpCisgICAgeworICAgICAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCB2OworI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCisg
ICAgICAgIHYubV92YWx1ZSA9IGNsYW1wVG9JbnRlZ2VyKGNlaWxmKHZhbHVlICoga0ZpeGVkUG9p
bnREZW5vbWluYXRvcikpOworI2Vsc2UKKyAgICAgICAgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3Vu
ZHModmFsdWUpKTsKKyAgICAgICAgdi5tX3ZhbHVlID0gY2VpbGYodmFsdWUgKiBrRml4ZWRQb2lu
dERlbm9taW5hdG9yKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gdjsKKyAgICB9CisKKyAgICBz
dGF0aWMgRnJhY3Rpb25hbExheW91dFVuaXQgZnJvbUZsb2F0Rmxvb3IoZmxvYXQgdmFsdWUpCisg
ICAgeworICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB2OworI2lmIEVOQUJMRShTQVRVUkFU
RURfTEFZT1VUX0FSSVRITUVUSUMpCisgICAgICAgIHYubV92YWx1ZSA9IGNsYW1wVG9JbnRlZ2Vy
KGZsb29yZih2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3IpKTsKKyNlbHNlCisgICAgICAg
IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7CisgICAgICAgIHYubV92YWx1ZSA9
IGZsb29yZih2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3IpOworI2VuZGlmCisgICAgICAg
IHJldHVybiB2OworICAgIH0KKworICAgIHN0YXRpYyBGcmFjdGlvbmFsTGF5b3V0VW5pdCBmcm9t
RmxvYXRSb3VuZChmbG9hdCB2YWx1ZSkKKyAgICB7CisjaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlP
VVRfQVJJVEhNRVRJQykKKyAgICAgICAgaWYgKHZhbHVlID49IDApCisgICAgICAgICAgICByZXR1
cm4gY2xhbXAodmFsdWUgKyBlcHNpbG9uKCkgLyAyLjBmKTsKKyAgICAgICAgcmV0dXJuIGNsYW1w
KHZhbHVlIC0gZXBzaWxvbigpIC8gMi4wZik7CisjZWxzZQorICAgICAgICBpZiAodmFsdWUgPj0g
MCkgeworICAgICAgICAgICAgUkVQT1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUgKyBlcHNp
bG9uKCkgLyAyLjBmKSk7CisgICAgICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQo
dmFsdWUgKyBlcHNpbG9uKCkgLyAyLjBmKTsKKyAgICAgICAgfQorICAgICAgICBSRVBPUlRfT1ZF
UkZMT1coaXNJbkJvdW5kcyh2YWx1ZSAtIGVwc2lsb24oKSAvIDIuMGYpKTsKKyAgICAgICAgcmV0
dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KHZhbHVlIC0gZXBzaWxvbigpIC8gMi4wZik7CisjZW5k
aWYKKyAgICB9CisKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIGludCB0b0ludCgp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOyB9CisgICAg
ZmxvYXQgdG9GbG9hdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX3ZhbHVl
KSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7IH0KKyAgICBkb3VibGUgdG9Eb3VibGUoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdmFsdWUpIC8ga0ZpeGVkUG9pbnREZW5v
bWluYXRvcjsgfQorICAgIGZsb2F0IGNlaWxUb0Zsb2F0KCkgY29uc3QKKyAgICB7CisgICAgICAg
IGZsb2F0IGZsb2F0VmFsdWUgPSB0b0Zsb2F0KCk7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxp
bnQ+KGZsb2F0VmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yKSA9PSBtX3ZhbHVlKQorICAg
ICAgICAgICAgcmV0dXJuIGZsb2F0VmFsdWU7CisgICAgICAgIGlmIChmbG9hdFZhbHVlID4gMCkK
KyAgICAgICAgICAgIHJldHVybiBuZXh0YWZ0ZXJmKGZsb2F0VmFsdWUsIHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZmxvYXQ+OjptYXgoKSk7CisgICAgICAgIHJldHVybiBuZXh0YWZ0ZXJmKGZsb2F0VmFs
dWUsIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptaW4oKSk7CisgICAgfQorI2Vsc2UKKyAg
ICBpbnQgdG9JbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgZmxvYXQgdG9GbG9h
dCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX3ZhbHVlKTsgfQorICAgIGRv
dWJsZSB0b0RvdWJsZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV92YWx1
ZSk7IH0KKyAgICBmbG9hdCBjZWlsVG9GbG9hdCgpIGNvbnN0IHsgcmV0dXJuIHRvRmxvYXQoKTsg
fQorI2VuZGlmCisgICAgdW5zaWduZWQgdG9VbnNpZ25lZCgpIGNvbnN0IHsgUkVQT1JUX09WRVJG
TE9XKG1fdmFsdWUgPj0gMCk7IHJldHVybiB0b0ludCgpOyB9CisKKyAgICBvcGVyYXRvciBpbnQo
KSBjb25zdCB7IHJldHVybiB0b0ludCgpOyB9CisgICAgb3BlcmF0b3IgdW5zaWduZWQoKSBjb25z
dCB7IHJldHVybiB0b1Vuc2lnbmVkKCk7IH0KKyAgICBvcGVyYXRvciBmbG9hdCgpIGNvbnN0IHsg
cmV0dXJuIHRvRmxvYXQoKTsgfQorICAgIG9wZXJhdG9yIGRvdWJsZSgpIGNvbnN0IHsgcmV0dXJu
IHRvRG91YmxlKCk7IH0KKyAgICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZTsgfQorCisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IrKyhpbnQpCisgICAgewor
ICAgICAgICBtX3ZhbHVlICs9IGtGaXhlZFBvaW50RGVub21pbmF0b3I7CisgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICB9CisKKyAgICBpbmxpbmUgaW50IHJhd1ZhbHVlKCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZTsgfQorICAgIGlubGluZSB2b2lkIHNldFJhd1ZhbHVlKGludCB2YWx1ZSkgeyBt
X3ZhbHVlID0gdmFsdWU7IH0KKyAgICB2b2lkIHNldFJhd1ZhbHVlKGxvbmcgbG9uZyB2YWx1ZSkK
KyAgICB7CisgICAgICAgIFJFUE9SVF9PVkVSRkxPVyh2YWx1ZSA+IHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50Pjo6bWluKCkgJiYgdmFsdWUgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgp
KTsKKyAgICAgICAgbV92YWx1ZSA9IHN0YXRpY19jYXN0PGludD4odmFsdWUpOworICAgIH0KKwor
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGFicygpIGNvbnN0CisgICAgeworICAgICAgICBGcmFj
dGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWx1ZTsKKyAgICAgICAgcmV0dXJuVmFsdWUuc2V0UmF3
VmFsdWUoOjphYnMobV92YWx1ZSkpOworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAg
fQorI2lmIE9TKERBUldJTikKKyAgICBpbnQgd3RmX2NlaWwoKSBjb25zdAorI2Vsc2UKKyAgICBp
bnQgY2VpbCgpIGNvbnN0CisjZW5kaWYKKyAgICB7CisjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9V
VCkKKyAgICAgICAgaWYgKG1fdmFsdWUgPj0gMCkKKyAgICAgICAgICAgIHJldHVybiAobV92YWx1
ZSArIGtGaXhlZFBvaW50RGVub21pbmF0b3IgLSAxKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7
CisgICAgICAgIHJldHVybiB0b0ludCgpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fdmFsdWU7
CisjZW5kaWYKKyAgICB9CisgICAgaW50IHJvdW5kKCkgY29uc3QKKyAgICB7CisjaWYgRU5BQkxF
KFNVQlBJWEVMX0xBWU9VVCkgJiYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykK
KyAgICAgICAgaWYgKG1fdmFsdWUgPiAwKQorICAgICAgICAgICAgcmV0dXJuIHNhdHVyYXRlZEFk
ZGl0aW9uKHJhd1ZhbHVlKCksIGtGaXhlZFBvaW50RGVub21pbmF0b3IgLyAyKSAvIGtGaXhlZFBv
aW50RGVub21pbmF0b3I7CisgICAgICAgIHJldHVybiBzYXR1cmF0ZWRTdWJ0cmFjdGlvbihyYXdW
YWx1ZSgpLCBrRml4ZWRQb2ludERlbm9taW5hdG9yIC8gMikgLyBrRml4ZWRQb2ludERlbm9taW5h
dG9yOworI2VsaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKKyAgICAgICAgaWYgKG1fdmFsdWUg
PiAwKQorICAgICAgICAgICAgcmV0dXJuIChtX3ZhbHVlICsgKGtGaXhlZFBvaW50RGVub21pbmF0
b3IgLyAyKSkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOworICAgICAgICByZXR1cm4gKG1fdmFs
dWUgLSAoa0ZpeGVkUG9pbnREZW5vbWluYXRvciAvIDIpKSAvIGtGaXhlZFBvaW50RGVub21pbmF0
b3I7CisjZWxzZQorICAgICAgICByZXR1cm4gbV92YWx1ZTsKKyNlbmRpZgorICAgIH0KKworICAg
IGludCBmbG9vcigpIGNvbnN0CisgICAgeworI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisg
ICAgICAgIGlmIChtX3ZhbHVlID49IDApCisgICAgICAgICAgICByZXR1cm4gdG9JbnQoKTsKKyAg
ICAgICAgcmV0dXJuIChtX3ZhbHVlIC0ga0ZpeGVkUG9pbnREZW5vbWluYXRvciArIDEpIC8ga0Zp
eGVkUG9pbnREZW5vbWluYXRvcjsKKyNlbHNlCisgICAgICAgIHJldHVybiBtX3ZhbHVlOworI2Vu
ZGlmCisgICAgfQorCisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZnJhY3Rpb24oKSBjb25zdAor
ICAgIHsgICAKKyAgICAgICAgLy8gQWRkIHRoZSBmcmFjdGlvbiB0byB0aGUgc2l6ZSAoYXMgb3Bw
b3NlZCB0byB0aGUgZnVsbCBsb2NhdGlvbikgdG8gYXZvaWQgb3ZlcmZsb3dzLgorICAgICAgICAv
LyBDb21wdXRlIGZyYWN0aW9uIHVzaW5nIHRoZSBtb2Qgb3BlcmF0b3IgdG8gcHJlc2VydmUgdGhl
IHNpZ24gb2YgdGhlIHZhbHVlIGFzIGl0IG1heSBhZmZlY3Qgcm91bmRpbmcuCisgICAgICAgIEZy
YWN0aW9uYWxMYXlvdXRVbml0IGZyYWN0aW9uOworICAgICAgICBmcmFjdGlvbi5zZXRSYXdWYWx1
ZShyYXdWYWx1ZSgpICUga0ZpeGVkUG9pbnREZW5vbWluYXRvcik7CisgICAgICAgIHJldHVybiBm
cmFjdGlvbjsKKyAgICB9CisKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIHN0YXRp
YyBmbG9hdCBlcHNpbG9uKCkgeyByZXR1cm4gMS4wZiAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7
IH0KKyNlbHNlCisgICAgc3RhdGljIGludCBlcHNpbG9uKCkgeyByZXR1cm4gMDsgfQorI2VuZGlm
CisgICAgc3RhdGljIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0IG1heCgpCisgICAgeworICAg
ICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtOworICAgICAgICBtLm1fdmFsdWUgPSBzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1heCgpOworICAgICAgICByZXR1cm4gbTsKKyAgICB9CisgICAg
c3RhdGljIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0IG1pbigpCisgICAgeworICAgICAgICBG
cmFjdGlvbmFsTGF5b3V0VW5pdCBtOworICAgICAgICBtLm1fdmFsdWUgPSBzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1pbigpOworICAgICAgICByZXR1cm4gbTsKKyAgICB9CisKKyAgICAvLyBW
ZXJzaW9ucyBvZiBtYXgvbWluIHRoYXQgYXJlIHNsaWdodGx5IHNtYWxsZXIvbGFyZ2VyIHRoYW4g
bWF4L21pbigpIHRvIGFsbG93IGZvciByb2luZGluZyB3aXRob3V0IG92ZXJmbG93aW5nLgorICAg
IHN0YXRpYyBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBuZWFybHlNYXgoKQorICAgIHsKKyAg
ICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbTsKKyAgICAgICAgbS5tX3ZhbHVlID0gc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSAtIGtGaXhlZFBvaW50RGVub21pbmF0b3IgLyAyOwor
ICAgICAgICByZXR1cm4gbTsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0IG5lYXJseU1pbigpCisgICAgeworICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBt
OworICAgICAgICBtLm1fdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpICsg
a0ZpeGVkUG9pbnREZW5vbWluYXRvciAvIDI7CisgICAgICAgIHJldHVybiBtOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgRnJhY3Rpb25hbExheW91dFVuaXQgY2xhbXAoZG91YmxlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGNsYW1wVG88RnJhY3Rpb25hbExheW91dFVuaXQ+KHZhbHVl
LCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWluKCksIEZyYWN0aW9uYWxMYXlvdXRVbml0OjptYXgo
KSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIGlzSW5Cb3VuZHMoaW50IHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDo6YWJzKHZhbHVlKSA8PSBzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKKyAgICB9CisgICAg
c3RhdGljIGJvb2wgaXNJbkJvdW5kcyh1bnNpZ25lZCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiB2YWx1ZSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ+OjptYXgoKSkgLyBrRml4ZWRQb2ludERlbm9taW5hdG9yOworICAgIH0KKyAgICBzdGF0aWMg
Ym9vbCBpc0luQm91bmRzKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiA6OmZh
YnModmFsdWUpIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkgLyBrRml4ZWRQb2lu
dERlbm9taW5hdG9yOworICAgIH0KKyAgICAKKyAgICBpbmxpbmUgdm9pZCBzZXRWYWx1ZShpbnQg
dmFsdWUpCisgICAgeworI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCisg
ICAgICAgIGlmICh2YWx1ZSA+IGludE1heEZvckxheW91dFVuaXQpCisgICAgICAgICAgICBtX3Zh
bHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKKyAgICAgICAgZWxzZSBpZiAo
dmFsdWUgPCBpbnRNaW5Gb3JMYXlvdXRVbml0KQorICAgICAgICAgICAgbV92YWx1ZSA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1f
dmFsdWUgPSB2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3I7CisjZWxzZQorICAgICAgICBS
RVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOworICAgICAgICBtX3ZhbHVlID0gdmFs
dWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yOworI2VuZGlmCisgICAgfQorICAgIGlubGluZSB2
b2lkIHNldFZhbHVlKHVuc2lnbmVkIHZhbHVlKQorICAgIHsKKyNpZiBFTkFCTEUoU0FUVVJBVEVE
X0xBWU9VVF9BUklUSE1FVElDKQorICAgICAgICBpZiAodmFsdWUgPj0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGludE1heEZvckxheW91dFVuaXQpKQorICAgICAgICAgICAgbV92YWx1ZSA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1f
dmFsdWUgPSB2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3I7CisjZWxzZQorICAgICAgICBS
RVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOworICAgICAgICBtX3ZhbHVlID0gdmFs
dWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yOworI2VuZGlmCisgICAgfQorCisgICAgaW50IG1f
dmFsdWU7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4g
YS5yYXdWYWx1ZSgpIDw9IGIucmF3VmFsdWUoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I8
PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK3sKKyAgICByZXR1cm4g
YS50b0Zsb2F0KCkgPD0gYjsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCit7CisgICAgcmV0dXJuIGEgPD0gRnJhY3Rpb25h
bExheW91dFVuaXQoYik7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgZmxvYXQg
YSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEgPD0gYi50
b0Zsb2F0KCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgaW50IGEsIGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0
VW5pdChhKSA8PSBiOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICBy
ZXR1cm4gYS5yYXdWYWx1ZSgpID49IGIucmF3VmFsdWUoKTsKK30KKworaW5saW5lIGJvb2wgb3Bl
cmF0b3I+PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCit7CisgICAgcmV0
dXJuIGEgPj0gRnJhY3Rpb25hbExheW91dFVuaXQoYik7Cit9CisKK2lubGluZSBib29sIG9wZXJh
dG9yPj0oY29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7Cisg
ICAgcmV0dXJuIGEgPj0gYi50b0Zsb2F0KCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPj0o
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEu
dG9GbG9hdCgpID49IGI7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgaW50IGEs
IGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBGcmFjdGlvbmFs
TGF5b3V0VW5pdChhKSA+PSBiOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQorewor
ICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgPCBiLnJhd1ZhbHVlKCk7Cit9CisKK2lubGluZSBib29s
IG9wZXJhdG9yPChjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCit7CisgICAg
cmV0dXJuIGEgPCBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKK30KKworaW5saW5lIGJvb2wgb3Bl
cmF0b3I8KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQoreworICAgIHJl
dHVybiBhLnRvRmxvYXQoKSA8IGI7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZG91YmxlIGIpCit7CisgICAgcmV0dXJuIGEudG9Eb3Vi
bGUoKSA8IGI7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBpbnQgYSwgY29uc3Qg
RnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRV
bml0KGEpIDwgYjsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IGZsb2F0IGEsIGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBhIDwgYi50b0Zsb2F0
KCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEucmF3
VmFsdWUoKSA+IGIucmF3VmFsdWUoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBkb3VibGUgYikKK3sKKyAgICByZXR1cm4gYS50b0Rv
dWJsZSgpID4gYjsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRVbml0JiBhLCBmbG9hdCBiKQoreworICAgIHJldHVybiBhLnRvRmxvYXQoKSA+IGI7Cit9
CisKK2lubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwg
aW50IGIpCit7CisgICAgcmV0dXJuIGEgPiBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKK30KKwor
aW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYikKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgPiBiOworfQor
CitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEgPiBiLnRvRmxvYXQoKTsKK30KKworaW5saW5l
IGJvb2wgb3BlcmF0b3I+KGNvbnN0IGRvdWJsZSBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYikKK3sKKyAgICByZXR1cm4gYSA+IGIudG9Eb3VibGUoKTsKK30KKworaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25h
bExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEucmF3VmFsdWUoKSAhPSBiLnJhd1ZhbHVl
KCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJhY3Rpb25hbExheW91dFVu
aXQmIGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEgIT0gRnJhY3Rpb25hbExheW91dFVuaXQo
Yik7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgaW50IGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChh
KSAhPSBiOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBhLCBpbnQgYikKK3sKKyAgICByZXR1cm4gYSAhPSBGcmFjdGlvbmFsTGF5b3V0VW5p
dChiKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEu
cmF3VmFsdWUoKSA9PSBiLnJhd1ZhbHVlKCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQoreworICAgIHJldHVybiBhID09
IEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFVuaXQoYSkgPT0gYjsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK3sKKyAgICByZXR1cm4g
YS50b0Zsb2F0KCkgPT0gYjsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBmbG9h
dCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4gYSA9PSBi
LnRvRmxvYXQoKTsKK30KKworLy8gRm9yIG11bHRpcGxpY2F0aW9uIHRoYXQncyBwcm9uZSB0byBv
dmVyZmxvdywgdGhpcyBib3VuZHMgaXQgdG8gRnJhY3Rpb25hbExheW91dFVuaXQ6Om1heCgpIGFu
ZCA6Om1pbigpCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgYm91bmRlZE11bHRpcGx5KGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
YikKK3sKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIEZyYWN0aW9uYWxMYXlvdXRV
bml0IHJldHVyblZhbDsKKyAgICBsb25nIGxvbmcgcmF3VmFsID0gc3RhdGljX2Nhc3Q8bG9uZyBs
b25nPihhLnJhd1ZhbHVlKCkpICogYi5yYXdWYWx1ZSgpIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRv
cjsKKyAgICBpZiAocmF3VmFsID4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKKyAg
ICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0OjptYXgoKTsKKyAgICBpZiAocmF3VmFs
IDwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSkKKyAgICAgICAgcmV0dXJuIEZyYWN0
aW9uYWxMYXlvdXRVbml0OjptaW4oKTsKKyAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUocmF3VmFs
KTsKKyAgICByZXR1cm4gcmV0dXJuVmFsOworI2Vsc2UKKyAgICByZXR1cm4gYS5yYXdWYWx1ZSgp
ICogYi5yYXdWYWx1ZSgpOworI2VuZGlmCit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBvcGVyYXRvciooY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBiKQoreworI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpICYmIEVOQUJM
RShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCisgICAgcmV0dXJuIGJvdW5kZWRNdWx0aXBs
eShhLCBiKTsKKyNlbGlmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisgICAgRnJhY3Rpb25hbExh
eW91dFVuaXQgcmV0dXJuVmFsOworICAgIGxvbmcgbG9uZyByYXdWYWwgPSBzdGF0aWNfY2FzdDxs
b25nIGxvbmc+KGEucmF3VmFsdWUoKSkgKiBiLnJhd1ZhbHVlKCkgLyBrRml4ZWRQb2ludERlbm9t
aW5hdG9yOworICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShyYXdWYWwpOworICAgIHJldHVybiBy
ZXR1cm5WYWw7CisjZWxzZQorICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgKiBiLnJhd1ZhbHVlKCk7
CisjZW5kaWYKK30gICAgCisKK2lubGluZSBkb3VibGUgb3BlcmF0b3IqKGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBhLCBkb3VibGUgYikKK3sKKyAgICByZXR1cm4gYS50b0RvdWJsZSgpICog
YjsKK30KKworaW5saW5lIGZsb2F0IG9wZXJhdG9yKihjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYSwgZmxvYXQgYikKK3sKKyAgICByZXR1cm4gYS50b0Zsb2F0KCkgKiBiOworfQorCitpbmxp
bmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IqKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBhLCBpbnQgYikKK3sKKyAgICByZXR1cm4gYSAqIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIp
OworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IqKGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBhLCB1bnNpZ25lZCBiKQoreworICAgIHJldHVybiBhICogRnJhY3Rp
b25hbExheW91dFVuaXQoYik7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVy
YXRvcioodW5zaWduZWQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAg
cmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpICogYjsKK30KKworaW5saW5lIEZyYWN0aW9u
YWxMYXlvdXRVbml0IG9wZXJhdG9yKihjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpICogYjsKK30K
KworaW5saW5lIGZsb2F0IG9wZXJhdG9yKihjb25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4gYSAqIGIudG9GbG9hdCgpOworfQorCitpbmxp
bmUgZG91YmxlIG9wZXJhdG9yKihjb25zdCBkb3VibGUgYSwgY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEgKiBiLnRvRG91YmxlKCk7Cit9CisKK2lubGluZSBG
cmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci8oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworI2lmIEVOQUJMRShTVUJQSVhF
TF9MQVlPVVQpCisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOworICAgIGxvbmcg
bG9uZyByYXdWYWwgPSBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGtGaXhlZFBvaW50RGVub21pbmF0
b3IpICogYS5yYXdWYWx1ZSgpIC8gYi5yYXdWYWx1ZSgpOworICAgIHJldHVyblZhbC5zZXRSYXdW
YWx1ZShyYXdWYWwpOworICAgIHJldHVybiByZXR1cm5WYWw7CisjZWxzZQorICAgIHJldHVybiBh
LnJhd1ZhbHVlKCkgLyBiLnJhd1ZhbHVlKCk7CisjZW5kaWYKK30gICAgCisKK2lubGluZSBmbG9h
dCBvcGVyYXRvci8oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCit7Cisg
ICAgcmV0dXJuIGEudG9GbG9hdCgpIC8gYjsKK30KKworaW5saW5lIGRvdWJsZSBvcGVyYXRvci8o
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGRvdWJsZSBiKQoreworICAgIHJldHVybiBh
LnRvRG91YmxlKCkgLyBiOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0
b3IvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK3sKKyAgICByZXR1cm4g
YSAvIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91
dFVuaXQgb3BlcmF0b3IvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCB1bnNpZ25lZCBp
bnQgYikKK3sKKyAgICByZXR1cm4gYSAvIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworfQorCitp
bmxpbmUgZmxvYXQgb3BlcmF0b3IvKGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBiKQoreworICAgIHJldHVybiBhIC8gYi50b0Zsb2F0KCk7Cit9CisKK2lubGluZSBk
b3VibGUgb3BlcmF0b3IvKGNvbnN0IGRvdWJsZSBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYikKK3sKKyAgICByZXR1cm4gYSAvIGIudG9Eb3VibGUoKTsKK30KKworaW5saW5lIEZyYWN0
aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLyhjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpIC8gYjsK
K30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLyh1bnNpZ25lZCBpbnQg
YSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEZyYWN0aW9u
YWxMYXlvdXRVbml0KGEpIC8gYjsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9w
ZXJhdG9yKyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGIpCit7CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOworI2lm
IEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCisgICAgcmV0dXJuVmFsLnNldFJh
d1ZhbHVlKHNhdHVyYXRlZEFkZGl0aW9uKGEucmF3VmFsdWUoKSwgYi5yYXdWYWx1ZSgpKSk7Cisj
ZWxzZQorICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShhLnJhd1ZhbHVlKCkgKyBiLnJhd1ZhbHVl
KCkpOworI2VuZGlmCisgICAgcmV0dXJuIHJldHVyblZhbDsKK30KKworaW5saW5lIEZyYWN0aW9u
YWxMYXlvdXRVbml0IG9wZXJhdG9yKyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50
IGIpCit7CisgICAgcmV0dXJuIGEgKyBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKK30KKworaW5s
aW5lIGZsb2F0IG9wZXJhdG9yKyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQg
YikKK3sKKyAgICByZXR1cm4gYS50b0Zsb2F0KCkgKyBiOworfQorCitpbmxpbmUgZG91YmxlIG9w
ZXJhdG9yKyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZG91YmxlIGIpCit7CisgICAg
cmV0dXJuIGEudG9Eb3VibGUoKSArIGI7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBvcGVyYXRvcisoY29uc3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQor
eworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSArIGI7Cit9CisKK2lubGluZSBm
bG9hdCBvcGVyYXRvcisoY29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGIpCit7CisgICAgcmV0dXJuIGEgKyBiLnRvRmxvYXQoKTsKK30KKworaW5saW5lIGRvdWJsZSBv
cGVyYXRvcisoY29uc3QgZG91YmxlIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQor
eworICAgIHJldHVybiBhICsgYi50b0RvdWJsZSgpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExh
eW91dFVuaXQgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1
cm5WYWw7CisjaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKKyAgICByZXR1
cm5WYWwuc2V0UmF3VmFsdWUoc2F0dXJhdGVkU3VidHJhY3Rpb24oYS5yYXdWYWx1ZSgpLCBiLnJh
d1ZhbHVlKCkpKTsKKyNlbHNlCisgICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKGEucmF3VmFsdWUo
KSAtIGIucmF3VmFsdWUoKSk7CisjZW5kaWYKKyAgICByZXR1cm4gcmV0dXJuVmFsOworfQorCitp
bmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBhLCBpbnQgYikKK3sKKyAgICByZXR1cm4gYSAtIEZyYWN0aW9uYWxMYXlvdXRVbml0
KGIpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3ItKGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBhLCB1bnNpZ25lZCBiKQoreworICAgIHJldHVybiBhIC0gRnJh
Y3Rpb25hbExheW91dFVuaXQoYik7Cit9CisKK2lubGluZSBmbG9hdCBvcGVyYXRvci0oY29uc3Qg
RnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEudG9GbG9h
dCgpIC0gYjsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLShjb25z
dCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIEZy
YWN0aW9uYWxMYXlvdXRVbml0KGEpIC0gYjsKK30KKworaW5saW5lIGZsb2F0IG9wZXJhdG9yLShj
b25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1
cm4gYSAtIGIudG9GbG9hdCgpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3Bl
cmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhKQoreworICAgIEZyYWN0aW9uYWxM
YXlvdXRVbml0IHJldHVyblZhbDsKKyAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUoLWEucmF3VmFs
dWUoKSk7CisgICAgcmV0dXJuIHJldHVyblZhbDsKK30KKworLy8gRm9yIHJldHVybmluZyB0aGUg
cmVtYWluZGVyIGFmdGVyIGEgZGl2aXNpb24gd2l0aCBpbnRlZ2VyIHJlc3VsdHMuCitpbmxpbmUg
RnJhY3Rpb25hbExheW91dFVuaXQgaW50TW9kKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyNpZiBFTkFCTEUoU1VCUElYRUxf
TEFZT1VUKQorICAgIC8vIFRoaXMgY2FsY3VsYXRlcyB0aGUgbW9kdWxvIHNvIHRoYXQ6IGEgPSBz
dGF0aWNfY2FzdDxpbnQ+KGEgLyBiKSAqIGIgKyBpbnRNb2QoYSwgYikuCisgICAgRnJhY3Rpb25h
bExheW91dFVuaXQgcmV0dXJuVmFsOworICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZShhLnJhd1Zh
bHVlKCkgJSBiLnJhd1ZhbHVlKCkpOworICAgIHJldHVybiByZXR1cm5WYWw7CisjZWxzZQorICAg
IHJldHVybiBhLnJhd1ZhbHVlKCkgJSBiLnJhd1ZhbHVlKCk7CisjZW5kaWYKK30KKworaW5saW5l
IEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yJShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisjaWYgRU5BQkxFKFNVQlBJ
WEVMX0xBWU9VVCkKKyAgICAvLyBUaGlzIGNhbGN1bGF0ZXMgdGhlIG1vZHVsbyBzbyB0aGF0OiBh
ID0gKGEgLyBiKSAqIGIgKyBhICUgYi4KKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5W
YWw7CisgICAgbG9uZyBsb25nIHJhd1ZhbCA9IChzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGtGaXhl
ZFBvaW50RGVub21pbmF0b3IpICogYS5yYXdWYWx1ZSgpKSAlIGIucmF3VmFsdWUoKTsKKyAgICBy
ZXR1cm5WYWwuc2V0UmF3VmFsdWUocmF3VmFsIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcik7Cisg
ICAgcmV0dXJuIHJldHVyblZhbDsKKyNlbHNlCisgICAgcmV0dXJuIGEucmF3VmFsdWUoKSAlIGIu
cmF3VmFsdWUoKTsKKyNlbmRpZgorfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3Bl
cmF0b3IlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK3sKKyAgICByZXR1
cm4gYSAlIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExh
eW91dFVuaXQgb3BlcmF0b3IlKGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikK
K3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgJSBiOworfQorCitpbmxpbmUg
RnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yKz0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEs
IGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworI2lmIEVOQUJMRShTQVRVUkFURURf
TEFZT1VUX0FSSVRITUVUSUMpCisgICAgYS5zZXRSYXdWYWx1ZShzYXR1cmF0ZWRBZGRpdGlvbihh
LnJhd1ZhbHVlKCksIGIucmF3VmFsdWUoKSkpOworI2Vsc2UKKyAgICBhID0gYSArIGI7CisjZW5k
aWYKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVy
YXRvcis9KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK3sKKyAgICBhID0gYSArIGI7
CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0
b3IrPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikKK3sKKyAgICBhID0gYSArIGI7
CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBmbG9hdCYgb3BlcmF0b3IrPShmbG9hdCYgYSwg
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgYSA9IGEgKyBiOworICAgIHJl
dHVybiBhOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yLT0oRnJh
Y3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQoreworICAgIGEgPSBhIC0gYjsKKyAgICByZXR1
cm4gYTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvci09KEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyNp
ZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKQorICAgIGEuc2V0UmF3VmFsdWUo
c2F0dXJhdGVkU3VidHJhY3Rpb24oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKKyNlbHNl
CisgICAgYSA9IGEgLSBiOworI2VuZGlmCisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3ItPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxv
YXQgYikKK3sKKyAgICBhID0gYSAtIGI7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBmbG9h
dCYgb3BlcmF0b3ItPShmbG9hdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7
CisgICAgYSA9IGEgLSBiOworICAgIHJldHVybiBhOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExh
eW91dFVuaXQmIG9wZXJhdG9yKj0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIGEgPSBhICogYjsKKyAgICByZXR1cm4gYTsKK30K
Ky8vIG9wZXJhdG9yKj0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKSBpcyBzdXBwb3J0
ZWQgYnkgdGhlIG9wZXJhdG9yIGFib3ZlIHBsdXMgRnJhY3Rpb25hbExheW91dFVuaXQoaW50KS4K
KworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvcio9KEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBhLCBmbG9hdCBiKQoreworICAgIGEgPSBhICogYjsKKyAgICByZXR1cm4gYTsKK30K
KworaW5saW5lIGZsb2F0JiBvcGVyYXRvcio9KGZsb2F0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCYgYikKK3sKKyAgICBhID0gYSAqIGI7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGlu
ZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3IvPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
YSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCit7CisgICAgYSA9IGEgLyBiOworICAg
IHJldHVybiBhOworfQorLy8gb3BlcmF0b3IvPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50
IGIpIGlzIHN1cHBvcnRlZCBieSB0aGUgb3BlcmF0b3IgYWJvdmUgcGx1cyBGcmFjdGlvbmFsTGF5
b3V0VW5pdChpbnQpLgorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yLz0o
RnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIpCit7CisgICAgYSA9IGEgLyBiOworICAg
IHJldHVybiBhOworfQorCitpbmxpbmUgZmxvYXQmIG9wZXJhdG9yLz0oZmxvYXQmIGEsIGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoreworICAgIGEgPSBhIC8gYjsKKyAgICByZXR1cm4g
YTsKK30KKworaW5saW5lIGludCBzbmFwU2l6ZVRvUGl4ZWwoRnJhY3Rpb25hbExheW91dFVuaXQg
c2l6ZSwgRnJhY3Rpb25hbExheW91dFVuaXQgbG9jYXRpb24pIAoreworICAgIEZyYWN0aW9uYWxM
YXlvdXRVbml0IGZyYWN0aW9uID0gbG9jYXRpb24uZnJhY3Rpb24oKTsKKyAgICByZXR1cm4gKGZy
YWN0aW9uICsgc2l6ZSkucm91bmQoKSAtIGZyYWN0aW9uLnJvdW5kKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEZyYWN0aW9uYWxMYXlvdXRVbml0X2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xheW91dFVuaXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9MYXlvdXRVbml0LmgJKHJldmlzaW9uIDEzMzUxNykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xheW91dFVuaXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
OCArMjgsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEZyYWN0aW9uYWxMYXlv
dXRVbml0X2gKLSNkZWZpbmUgRnJhY3Rpb25hbExheW91dFVuaXRfaAorI2lmbmRlZiBMYXlvdXRV
bml0X2gKKyNkZWZpbmUgTGF5b3V0VW5pdF9oCiAKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNs
dWRlIDxsaW1pdHM+CkBAIC02MiwxOCArNjIsMTggQEAgc3RhdGljIGNvbnN0IGludCBrRml4ZWRQ
b2ludERlbm9taW5hdG9yCiBjb25zdCBpbnQgaW50TWF4Rm9yTGF5b3V0VW5pdCA9IElOVF9NQVgg
LyBrRml4ZWRQb2ludERlbm9taW5hdG9yOwogY29uc3QgaW50IGludE1pbkZvckxheW91dFVuaXQg
PSBJTlRfTUlOIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKIAotY2xhc3MgRnJhY3Rpb25hbExh
eW91dFVuaXQgeworY2xhc3MgTGF5b3V0VW5pdCB7CiBwdWJsaWM6CiAgICAgLy8gRklYTUU6IElk
ZWFsbHkgd2Ugd291bGQgaGF2ZSBzaXplX3QgdmVyc2lvbnMgb2YgdGhlIGNvbnN0cnVjdG9yIGFu
ZCBvcGVyYXRvcnMuCiAgICAgLy8gSG93ZXZlciBkdWUgdG8gY29tcGlsZXIgYW5kIHBsYXRmb3Jt
IGRpZmZlcmVuY2VzIGFkZGluZyB0aG9zZSBhcmUgbm9uLXRyaXZpYWwuCiAgICAgLy8gU2VlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mzg0OCBmb3IgZGV0YWlscy4K
ICAgICAKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCgpIDogbV92YWx1ZSgwKSB7IH0KKyAgICBM
YXlvdXRVbml0KCkgOiBtX3ZhbHVlKDApIHsgfQogI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQp
Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQoaW50IHZhbHVlKSB7IHNldFZhbHVlKHZhbHVlKTsg
fQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KHVuc2lnbmVkIHNob3J0IHZhbHVlKSB7IHNldFZh
bHVlKHZhbHVlKTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KHVuc2lnbmVkIGludCB2YWx1
ZSkgeyBzZXRWYWx1ZSh2YWx1ZSk7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdChmbG9hdCB2
YWx1ZSkKKyAgICBMYXlvdXRVbml0KGludCB2YWx1ZSkgeyBzZXRWYWx1ZSh2YWx1ZSk7IH0KKyAg
ICBMYXlvdXRVbml0KHVuc2lnbmVkIHNob3J0IHZhbHVlKSB7IHNldFZhbHVlKHZhbHVlKTsgfQor
ICAgIExheW91dFVuaXQodW5zaWduZWQgdmFsdWUpIHsgc2V0VmFsdWUodmFsdWUpOyB9CisgICAg
TGF5b3V0VW5pdChmbG9hdCB2YWx1ZSkKICAgICB7CiAjaWYgRU5BQkxFKFNBVFVSQVRFRF9MQVlP
VVRfQVJJVEhNRVRJQykKICAgICAgICAgbV92YWx1ZSA9IGNsYW1wVG88ZmxvYXQ+KHZhbHVlICog
a0ZpeGVkUG9pbnREZW5vbWluYXRvciwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KElOVF9NSU4pLCBzdGF0
aWNfY2FzdDxmbG9hdD4oSU5UX01BWCkpOwpAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fdmFsdWUgPSB2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0b3I7CiAjZW5kaWYKICAg
ICB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQoZG91YmxlIHZhbHVlKQorICAgIExheW91dFVu
aXQoZG91YmxlIHZhbHVlKQogICAgIHsKICNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklU
SE1FVElDKQogICAgICAgICBtX3ZhbHVlID0gY2xhbXBUbzxkb3VibGU+KHZhbHVlICoga0ZpeGVk
UG9pbnREZW5vbWluYXRvciwgc3RhdGljX2Nhc3Q8ZG91YmxlPihJTlRfTUlOKSwgc3RhdGljX2Nh
c3Q8ZG91YmxlPihJTlRfTUFYKSk7CkBAIC05MiwxNyArOTIsMTcgQEAgcHVibGljOgogI2VuZGlm
CiAgICAgfQogI2Vsc2UKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdChpbnQgdmFsdWUpIHsgUkVQ
T1JUX09WRVJGTE9XKGlzSW5Cb3VuZHModmFsdWUpKTsgbV92YWx1ZSA9IHZhbHVlOyB9Ci0gICAg
RnJhY3Rpb25hbExheW91dFVuaXQodW5zaWduZWQgc2hvcnQgdmFsdWUpIHsgUkVQT1JUX09WRVJG
TE9XKGlzSW5Cb3VuZHModmFsdWUpKTsgbV92YWx1ZSA9IHZhbHVlOyB9Ci0gICAgRnJhY3Rpb25h
bExheW91dFVuaXQodW5zaWduZWQgaW50IHZhbHVlKSB7IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91
bmRzKHZhbHVlKSk7IG1fdmFsdWUgPSB2YWx1ZTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
KGZsb2F0IHZhbHVlKSB7IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7IG1fdmFs
dWUgPSB2YWx1ZTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0KGRvdWJsZSB2YWx1ZSkgeyBS
RVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFsdWU7IH0KKyAg
ICBMYXlvdXRVbml0KGludCB2YWx1ZSkgeyBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1
ZSkpOyBtX3ZhbHVlID0gdmFsdWU7IH0KKyAgICBMYXlvdXRVbml0KHVuc2lnbmVkIHNob3J0IHZh
bHVlKSB7IFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlKSk7IG1fdmFsdWUgPSB2YWx1
ZTsgfQorICAgIExheW91dFVuaXQodW5zaWduZWQgdmFsdWUpIHsgUkVQT1JUX09WRVJGTE9XKGlz
SW5Cb3VuZHModmFsdWUpKTsgbV92YWx1ZSA9IHZhbHVlOyB9CisgICAgTGF5b3V0VW5pdChmbG9h
dCB2YWx1ZSkgeyBSRVBPUlRfT1ZFUkZMT1coaXNJbkJvdW5kcyh2YWx1ZSkpOyBtX3ZhbHVlID0g
dmFsdWU7IH0KKyAgICBMYXlvdXRVbml0KGRvdWJsZSB2YWx1ZSkgeyBSRVBPUlRfT1ZFUkZMT1co
aXNJbkJvdW5kcyh2YWx1ZSkpOyBtX3ZhbHVlID0gdmFsdWU7IH0KICNlbmRpZgotICAgIEZyYWN0
aW9uYWxMYXlvdXRVbml0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiB2YWx1ZSkgeyBtX3Zh
bHVlID0gdmFsdWUucmF3VmFsdWUoKTsgfQorICAgIExheW91dFVuaXQoY29uc3QgTGF5b3V0VW5p
dCYgdmFsdWUpIHsgbV92YWx1ZSA9IHZhbHVlLnJhd1ZhbHVlKCk7IH0KIAotICAgIHN0YXRpYyBG
cmFjdGlvbmFsTGF5b3V0VW5pdCBmcm9tRmxvYXRDZWlsKGZsb2F0IHZhbHVlKQorICAgIHN0YXRp
YyBMYXlvdXRVbml0IGZyb21GbG9hdENlaWwoZmxvYXQgdmFsdWUpCiAgICAgewotICAgICAgICBG
cmFjdGlvbmFsTGF5b3V0VW5pdCB2OworICAgICAgICBMYXlvdXRVbml0IHY7CiAjaWYgRU5BQkxF
KFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKICAgICAgICAgdi5tX3ZhbHVlID0gY2xhbXBU
b0ludGVnZXIoY2VpbGYodmFsdWUgKiBrRml4ZWRQb2ludERlbm9taW5hdG9yKSk7CiAjZWxzZQpA
QCAtMTEyLDkgKzExMiw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHY7CiAgICAgfQogCi0g
ICAgc3RhdGljIEZyYWN0aW9uYWxMYXlvdXRVbml0IGZyb21GbG9hdEZsb29yKGZsb2F0IHZhbHVl
KQorICAgIHN0YXRpYyBMYXlvdXRVbml0IGZyb21GbG9hdEZsb29yKGZsb2F0IHZhbHVlKQogICAg
IHsKLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgdjsKKyAgICAgICAgTGF5b3V0VW5pdCB2
OwogI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpCiAgICAgICAgIHYubV92
YWx1ZSA9IGNsYW1wVG9JbnRlZ2VyKGZsb29yZih2YWx1ZSAqIGtGaXhlZFBvaW50RGVub21pbmF0
b3IpKTsKICNlbHNlCkBAIC0xMjQsNyArMTI0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
djsKICAgICB9CiAKLSAgICBzdGF0aWMgRnJhY3Rpb25hbExheW91dFVuaXQgZnJvbUZsb2F0Um91
bmQoZmxvYXQgdmFsdWUpCisgICAgc3RhdGljIExheW91dFVuaXQgZnJvbUZsb2F0Um91bmQoZmxv
YXQgdmFsdWUpCiAgICAgewogI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMp
CiAgICAgICAgIGlmICh2YWx1ZSA+PSAwKQpAQCAtMTMzLDEwICsxMzMsMTAgQEAgcHVibGljOgog
I2Vsc2UKICAgICAgICAgaWYgKHZhbHVlID49IDApIHsKICAgICAgICAgICAgIFJFUE9SVF9PVkVS
RkxPVyhpc0luQm91bmRzKHZhbHVlICsgZXBzaWxvbigpIC8gMi4wZikpOwotICAgICAgICAgICAg
cmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KHZhbHVlICsgZXBzaWxvbigpIC8gMi4wZik7Cisg
ICAgICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCh2YWx1ZSArIGVwc2lsb24oKSAvIDIuMGYpOwog
ICAgICAgICB9CiAgICAgICAgIFJFUE9SVF9PVkVSRkxPVyhpc0luQm91bmRzKHZhbHVlIC0gZXBz
aWxvbigpIC8gMi4wZikpOwotICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQodmFs
dWUgLSBlcHNpbG9uKCkgLyAyLjBmKTsKKyAgICAgICAgcmV0dXJuIExheW91dFVuaXQodmFsdWUg
LSBlcHNpbG9uKCkgLyAyLjBmKTsKICNlbmRpZgogICAgIH0KIApAQCAtMTY3LDcgKzE2Nyw3IEBA
IHB1YmxpYzoKICAgICBvcGVyYXRvciBkb3VibGUoKSBjb25zdCB7IHJldHVybiB0b0RvdWJsZSgp
OyB9CiAgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KIAotICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKysoaW50KQorICAgIExheW91dFVuaXQgb3Bl
cmF0b3IrKyhpbnQpCiAgICAgewogICAgICAgICBtX3ZhbHVlICs9IGtGaXhlZFBvaW50RGVub21p
bmF0b3I7CiAgICAgICAgIHJldHVybiAqdGhpczsKQEAgLTE4MSw5ICsxODEsOSBAQCBwdWJsaWM6
CiAgICAgICAgIG1fdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKTsKICAgICB9CiAKLSAg
ICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBhYnMoKSBjb25zdAorICAgIExheW91dFVuaXQgYWJzKCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJldHVyblZhbHVlOwor
ICAgICAgICBMYXlvdXRVbml0IHJldHVyblZhbHVlOwogICAgICAgICByZXR1cm5WYWx1ZS5zZXRS
YXdWYWx1ZSg6OmFicyhtX3ZhbHVlKSk7CiAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKICAg
ICB9CkBAIC0yMjcsMTEgKzIyNywxMSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKLSAgICBG
cmFjdGlvbmFsTGF5b3V0VW5pdCBmcmFjdGlvbigpIGNvbnN0CisgICAgTGF5b3V0VW5pdCBmcmFj
dGlvbigpIGNvbnN0CiAgICAgeyAgIAogICAgICAgICAvLyBBZGQgdGhlIGZyYWN0aW9uIHRvIHRo
ZSBzaXplIChhcyBvcHBvc2VkIHRvIHRoZSBmdWxsIGxvY2F0aW9uKSB0byBhdm9pZCBvdmVyZmxv
d3MuCiAgICAgICAgIC8vIENvbXB1dGUgZnJhY3Rpb24gdXNpbmcgdGhlIG1vZCBvcGVyYXRvciB0
byBwcmVzZXJ2ZSB0aGUgc2lnbiBvZiB0aGUgdmFsdWUgYXMgaXQgbWF5IGFmZmVjdCByb3VuZGlu
Zy4KLSAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZnJhY3Rpb247CisgICAgICAgIExheW91
dFVuaXQgZnJhY3Rpb247CiAgICAgICAgIGZyYWN0aW9uLnNldFJhd1ZhbHVlKHJhd1ZhbHVlKCkg
JSBrRml4ZWRQb2ludERlbm9taW5hdG9yKTsKICAgICAgICAgcmV0dXJuIGZyYWN0aW9uOwogICAg
IH0KQEAgLTI0MSwzNiArMjQxLDM2IEBAIHB1YmxpYzoKICNlbHNlCiAgICAgc3RhdGljIGludCBl
cHNpbG9uKCkgeyByZXR1cm4gMDsgfQogI2VuZGlmCi0gICAgc3RhdGljIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0IG1heCgpCisgICAgc3RhdGljIGNvbnN0IExheW91dFVuaXQgbWF4KCkKICAg
ICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG07CisgICAgICAgIExheW91dFVuaXQg
bTsKICAgICAgICAgbS5tX3ZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsK
ICAgICAgICAgcmV0dXJuIG07CiAgICAgfQotICAgIHN0YXRpYyBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0VW5pdCBtaW4oKQorICAgIHN0YXRpYyBjb25zdCBMYXlvdXRVbml0IG1pbigpCiAgICAgewot
ICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtOworICAgICAgICBMYXlvdXRVbml0IG07CiAg
ICAgICAgIG0ubV92YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCk7CiAgICAg
ICAgIHJldHVybiBtOwogICAgIH0KIAogICAgIC8vIFZlcnNpb25zIG9mIG1heC9taW4gdGhhdCBh
cmUgc2xpZ2h0bHkgc21hbGxlci9sYXJnZXIgdGhhbiBtYXgvbWluKCkgdG8gYWxsb3cgZm9yIHJv
aW5kaW5nIHdpdGhvdXQgb3ZlcmZsb3dpbmcuCi0gICAgc3RhdGljIGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRVbml0IG5lYXJseU1heCgpCisgICAgc3RhdGljIGNvbnN0IExheW91dFVuaXQgbmVhcmx5
TWF4KCkKICAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG07CisgICAgICAgIExh
eW91dFVuaXQgbTsKICAgICAgICAgbS5tX3ZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptYXgoKSAtIGtGaXhlZFBvaW50RGVub21pbmF0b3IgLyAyOwogICAgICAgICByZXR1cm4gbTsK
ICAgICB9Ci0gICAgc3RhdGljIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0IG5lYXJseU1pbigp
CisgICAgc3RhdGljIGNvbnN0IExheW91dFVuaXQgbmVhcmx5TWluKCkKICAgICB7Ci0gICAgICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0IG07CisgICAgICAgIExheW91dFVuaXQgbTsKICAgICAgICAg
bS5tX3ZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSArIGtGaXhlZFBvaW50
RGVub21pbmF0b3IgLyAyOwogICAgICAgICByZXR1cm4gbTsKICAgICB9CiAgICAgCi0gICAgc3Rh
dGljIEZyYWN0aW9uYWxMYXlvdXRVbml0IGNsYW1wKGRvdWJsZSB2YWx1ZSkKKyAgICBzdGF0aWMg
TGF5b3V0VW5pdCBjbGFtcChkb3VibGUgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gY2xh
bXBUbzxGcmFjdGlvbmFsTGF5b3V0VW5pdD4odmFsdWUsIEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpt
aW4oKSwgRnJhY3Rpb25hbExheW91dFVuaXQ6Om1heCgpKTsKKyAgICAgICAgcmV0dXJuIGNsYW1w
VG88TGF5b3V0VW5pdD4odmFsdWUsIExheW91dFVuaXQ6Om1pbigpLCBMYXlvdXRVbml0OjptYXgo
KSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMzE3LDE3NiArMzE3LDE3NiBAQCBwcml2YXRlOgog
ICAgIGludCBtX3ZhbHVlOwogfTsKIAotaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxp
bmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IExheW91dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQm
IGIpCiB7CiAgICAgcmV0dXJuIGEucmF3VmFsdWUoKSA8PSBiLnJhd1ZhbHVlKCk7CiB9CiAKLWlu
bGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0
IGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IExheW91dFVuaXQmIGEsIGZsb2F0IGIp
CiB7CiAgICAgcmV0dXJuIGEudG9GbG9hdCgpIDw9IGI7CiB9CiAKLWlubGluZSBib29sIG9wZXJh
dG9yPD0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQoraW5saW5lIGJvb2wg
b3BlcmF0b3I8PShjb25zdCBMYXlvdXRVbml0JiBhLCBpbnQgYikKIHsKLSAgICByZXR1cm4gYSA8
PSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKKyAgICByZXR1cm4gYSA8PSBMYXlvdXRVbml0KGIp
OwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBmbG9hdCBh
LCBjb25zdCBMYXlvdXRVbml0JiBiKQogewogICAgIHJldHVybiBhIDw9IGIudG9GbG9hdCgpOwog
fQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYikKK2lubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgaW50IGEsIGNvbnN0
IExheW91dFVuaXQmIGIpCiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpIDw9
IGI7CisgICAgcmV0dXJuIExheW91dFVuaXQoYSkgPD0gYjsKIH0KIAotaW5saW5lIGJvb2wgb3Bl
cmF0b3I+PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IExheW91dFVuaXQmIGEs
IGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAgICAgcmV0dXJuIGEucmF3VmFsdWUoKSA+PSBiLnJh
d1ZhbHVlKCk7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGEsIGludCBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBMYXlvdXRV
bml0JiBhLCBpbnQgYikKIHsKLSAgICByZXR1cm4gYSA+PSBGcmFjdGlvbmFsTGF5b3V0VW5pdChi
KTsKKyAgICByZXR1cm4gYSA+PSBMYXlvdXRVbml0KGIpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVy
YXRvcj49KGNvbnN0IGZsb2F0IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5s
aW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBmbG9hdCBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQog
ewogICAgIHJldHVybiBhID49IGIudG9GbG9hdCgpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRv
cj49KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQoraW5saW5lIGJvb2wg
b3BlcmF0b3I+PShjb25zdCBMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQogewogICAgIHJldHVybiBh
LnRvRmxvYXQoKSA+PSBiOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IGludCBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBib29sIG9wZXJhdG9yPj0o
Y29uc3QgaW50IGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9u
YWxMYXlvdXRVbml0KGEpID49IGI7CisgICAgcmV0dXJuIExheW91dFVuaXQoYSkgPj0gYjsKIH0K
IAotaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBj
b25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBib29sIG9wZXJhdG9yPChjb25z
dCBMYXlvdXRVbml0JiBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewogICAgIHJldHVybiBhLnJh
d1ZhbHVlKCkgPCBiLnJhd1ZhbHVlKCk7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPChjb25z
dCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcjwo
Y29uc3QgTGF5b3V0VW5pdCYgYSwgaW50IGIpCiB7Ci0gICAgcmV0dXJuIGEgPCBGcmFjdGlvbmFs
TGF5b3V0VW5pdChiKTsKKyAgICByZXR1cm4gYSA8IExheW91dFVuaXQoYik7CiB9CiAKLWlubGlu
ZSBib29sIG9wZXJhdG9yPChjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZmxvYXQgYikK
K2lubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBMYXlvdXRVbml0JiBhLCBmbG9hdCBiKQogewog
ICAgIHJldHVybiBhLnRvRmxvYXQoKSA8IGI7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPChj
b25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgZG91YmxlIGIpCitpbmxpbmUgYm9vbCBvcGVy
YXRvcjwoY29uc3QgTGF5b3V0VW5pdCYgYSwgZG91YmxlIGIpCiB7CiAgICAgcmV0dXJuIGEudG9E
b3VibGUoKSA8IGI7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBpbnQgYSwgY29u
c3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3Qg
aW50IGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlv
dXRVbml0KGEpIDwgYjsKKyAgICByZXR1cm4gTGF5b3V0VW5pdChhKSA8IGI7CiB9CiAKLWlubGlu
ZSBib29sIG9wZXJhdG9yPChjb25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5p
dCYgYikKK2lubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBmbG9hdCBhLCBjb25zdCBMYXlvdXRV
bml0JiBiKQogewogICAgIHJldHVybiBhIDwgYi50b0Zsb2F0KCk7CiB9CiAKLWlubGluZSBib29s
IG9wZXJhdG9yPihjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25h
bExheW91dFVuaXQmIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgTGF5b3V0VW5pdCYg
YSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1cm4gYS5yYXdWYWx1ZSgpID4gYi5y
YXdWYWx1ZSgpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGEsIGRvdWJsZSBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IExheW91
dFVuaXQmIGEsIGRvdWJsZSBiKQogewogICAgIHJldHVybiBhLnRvRG91YmxlKCkgPiBiOwogfQog
Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZs
b2F0IGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgTGF5b3V0VW5pdCYgYSwgZmxvYXQg
YikKIHsKICAgICByZXR1cm4gYS50b0Zsb2F0KCkgPiBiOwogfQogCi1pbmxpbmUgYm9vbCBvcGVy
YXRvcj4oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQoraW5saW5lIGJvb2wg
b3BlcmF0b3I+KGNvbnN0IExheW91dFVuaXQmIGEsIGludCBiKQogewotICAgIHJldHVybiBhID4g
RnJhY3Rpb25hbExheW91dFVuaXQoYik7CisgICAgcmV0dXJuIGEgPiBMYXlvdXRVbml0KGIpOwog
fQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRVbml0JiBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IGludCBhLCBjb25zdCBM
YXlvdXRVbml0JiBiKQogewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSA+IGI7
CisgICAgcmV0dXJuIExheW91dFVuaXQoYSkgPiBiOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRv
cj4oY29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUg
Ym9vbCBvcGVyYXRvcj4oY29uc3QgZmxvYXQgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAg
ICByZXR1cm4gYSA+IGIudG9GbG9hdCgpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29u
c3QgZG91YmxlIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIGJvb2wg
b3BlcmF0b3I+KGNvbnN0IGRvdWJsZSBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewogICAgIHJl
dHVybiBhID4gYi50b0RvdWJsZSgpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikK
K2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgTGF5b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0
VW5pdCYgYikKIHsKICAgICByZXR1cm4gYS5yYXdWYWx1ZSgpICE9IGIucmF3VmFsdWUoKTsKIH0K
IAotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwg
ZmxvYXQgYikKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgTGF5b3V0VW5pdCYgYSwgZmxv
YXQgYikKIHsKLSAgICByZXR1cm4gYSAhPSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKKyAgICBy
ZXR1cm4gYSAhPSBMYXlvdXRVbml0KGIpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBib29sIG9w
ZXJhdG9yIT0oY29uc3QgaW50IGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7Ci0gICAgcmV0dXJu
IEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpICE9IGI7CisgICAgcmV0dXJuIExheW91dFVuaXQoYSkg
IT0gYjsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYSwgaW50IGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IExheW91dFVuaXQm
IGEsIGludCBiKQogewotICAgIHJldHVybiBhICE9IEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOwor
ICAgIHJldHVybiBhICE9IExheW91dFVuaXQoYik7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9y
PT0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBiKQoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMYXlvdXRVbml0JiBhLCBjb25z
dCBMYXlvdXRVbml0JiBiKQogewogICAgIHJldHVybiBhLnJhd1ZhbHVlKCkgPT0gYi5yYXdWYWx1
ZSgpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRV
bml0JiBhLCBpbnQgYikKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgTGF5b3V0VW5pdCYg
YSwgaW50IGIpCiB7Ci0gICAgcmV0dXJuIGEgPT0gRnJhY3Rpb25hbExheW91dFVuaXQoYik7Cisg
ICAgcmV0dXJuIGEgPT0gTGF5b3V0VW5pdChiKTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IGludCBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewotICAgIHJl
dHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSA9PSBiOworICAgIHJldHVybiBMYXlvdXRVbml0
KGEpID09IGI7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGEsIGZsb2F0IGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExheW91
dFVuaXQmIGEsIGZsb2F0IGIpCiB7CiAgICAgcmV0dXJuIGEudG9GbG9hdCgpID09IGI7CiB9CiAK
LWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgZmxvYXQgYSwgY29uc3QgRnJhY3Rpb25hbExh
eW91dFVuaXQmIGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGZsb2F0IGEsIGNvbnN0
IExheW91dFVuaXQmIGIpCiB7CiAgICAgcmV0dXJuIGEgPT0gYi50b0Zsb2F0KCk7CiB9CiAKLS8v
IEZvciBtdWx0aXBsaWNhdGlvbiB0aGF0J3MgcHJvbmUgdG8gb3ZlcmZsb3csIHRoaXMgYm91bmRz
IGl0IHRvIEZyYWN0aW9uYWxMYXlvdXRVbml0OjptYXgoKSBhbmQgOjptaW4oKQotaW5saW5lIEZy
YWN0aW9uYWxMYXlvdXRVbml0IGJvdW5kZWRNdWx0aXBseShjb25zdCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCisvLyBGb3IgbXVsdGlwbGlj
YXRpb24gdGhhdCdzIHByb25lIHRvIG92ZXJmbG93LCB0aGlzIGJvdW5kcyBpdCB0byBMYXlvdXRV
bml0OjptYXgoKSBhbmQgOjptaW4oKQoraW5saW5lIExheW91dFVuaXQgYm91bmRlZE11bHRpcGx5
KGNvbnN0IExheW91dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAjaWYgRU5BQkxF
KFNVQlBJWEVMX0xBWU9VVCkKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1cm5WYWw7Cisg
ICAgTGF5b3V0VW5pdCByZXR1cm5WYWw7CiAgICAgbG9uZyBsb25nIHJhd1ZhbCA9IHN0YXRpY19j
YXN0PGxvbmcgbG9uZz4oYS5yYXdWYWx1ZSgpKSAqIGIucmF3VmFsdWUoKSAvIGtGaXhlZFBvaW50
RGVub21pbmF0b3I7CiAgICAgaWYgKHJhd1ZhbCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6
bWF4KCkpCi0gICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWF4KCk7CisgICAg
ICAgIHJldHVybiBMYXlvdXRVbml0OjptYXgoKTsKICAgICBpZiAocmF3VmFsIDwgc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ+OjptaW4oKSkKLSAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRV
bml0OjptaW4oKTsKKyAgICAgICAgcmV0dXJuIExheW91dFVuaXQ6Om1pbigpOwogICAgIHJldHVy
blZhbC5zZXRSYXdWYWx1ZShyYXdWYWwpOwogICAgIHJldHVybiByZXR1cm5WYWw7CiAjZWxzZQpA
QCAtNDk0LDEyICs0OTQsMTIgQEAgaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IGJvdW5kZWRN
dWx0aQogI2VuZGlmCiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvcioo
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0
JiBiKQoraW5saW5lIExheW91dFVuaXQgb3BlcmF0b3IqKGNvbnN0IExheW91dFVuaXQmIGEsIGNv
bnN0IExheW91dFVuaXQmIGIpCiB7CiAjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkgJiYgRU5B
QkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKICAgICByZXR1cm4gYm91bmRlZE11bHRp
cGx5KGEsIGIpOwogI2VsaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCByZXR1cm5WYWw7CisgICAgTGF5b3V0VW5pdCByZXR1cm5WYWw7CiAgICAgbG9u
ZyBsb25nIHJhd1ZhbCA9IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oYS5yYXdWYWx1ZSgpKSAqIGIu
cmF3VmFsdWUoKSAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7CiAgICAgcmV0dXJuVmFsLnNldFJh
d1ZhbHVlKHJhd1ZhbCk7CiAgICAgcmV0dXJuIHJldHVyblZhbDsKQEAgLTUwOCw1MCArNTA4LDUw
IEBAIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvciooY28KICNlbmRpZgogfSAg
ICAKIAotaW5saW5lIGRvdWJsZSBvcGVyYXRvciooY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQm
IGEsIGRvdWJsZSBiKQoraW5saW5lIGRvdWJsZSBvcGVyYXRvciooY29uc3QgTGF5b3V0VW5pdCYg
YSwgZG91YmxlIGIpCiB7CiAgICAgcmV0dXJuIGEudG9Eb3VibGUoKSAqIGI7CiB9CiAKLWlubGlu
ZSBmbG9hdCBvcGVyYXRvciooY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGZsb2F0IGIp
CitpbmxpbmUgZmxvYXQgb3BlcmF0b3IqKGNvbnN0IExheW91dFVuaXQmIGEsIGZsb2F0IGIpCiB7
CiAgICAgcmV0dXJuIGEudG9GbG9hdCgpICogYjsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlv
dXRVbml0IG9wZXJhdG9yKihjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCitp
bmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvciooY29uc3QgTGF5b3V0VW5pdCYgYSwgaW50IGIpCiB7
Ci0gICAgcmV0dXJuIGEgKiBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKKyAgICByZXR1cm4gYSAq
IExheW91dFVuaXQoYik7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRv
ciooY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIHVuc2lnbmVkIGIpCitpbmxpbmUgTGF5
b3V0VW5pdCBvcGVyYXRvciooY29uc3QgTGF5b3V0VW5pdCYgYSwgdW5zaWduZWQgYikKIHsKLSAg
ICByZXR1cm4gYSAqIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworICAgIHJldHVybiBhICogTGF5
b3V0VW5pdChiKTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKih1
bnNpZ25lZCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBMYXlvdXRV
bml0IG9wZXJhdG9yKih1bnNpZ25lZCBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewotICAgIHJl
dHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSAqIGI7CisgICAgcmV0dXJuIExheW91dFVuaXQo
YSkgKiBiOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IqKGNvbnN0
IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBMYXlvdXRVbml0
IG9wZXJhdG9yKihjb25zdCBpbnQgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKLSAgICByZXR1
cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgKiBiOworICAgIHJldHVybiBMYXlvdXRVbml0KGEp
ICogYjsKIH0KIAotaW5saW5lIGZsb2F0IG9wZXJhdG9yKihjb25zdCBmbG9hdCBhLCBjb25zdCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBmbG9hdCBvcGVyYXRvciooY29uc3QgZmxv
YXQgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1cm4gYSAqIGIudG9GbG9hdCgp
OwogfQogCi1pbmxpbmUgZG91YmxlIG9wZXJhdG9yKihjb25zdCBkb3VibGUgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgZG91YmxlIG9wZXJhdG9yKihjb25zdCBkb3Vi
bGUgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1cm4gYSAqIGIudG9Eb3VibGUo
KTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLyhjb25zdCBGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxp
bmUgTGF5b3V0VW5pdCBvcGVyYXRvci8oY29uc3QgTGF5b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0
VW5pdCYgYikKIHsKICNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAgIEZyYWN0aW9uYWxM
YXlvdXRVbml0IHJldHVyblZhbDsKKyAgICBMYXlvdXRVbml0IHJldHVyblZhbDsKICAgICBsb25n
IGxvbmcgcmF3VmFsID0gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihrRml4ZWRQb2ludERlbm9taW5h
dG9yKSAqIGEucmF3VmFsdWUoKSAvIGIucmF3VmFsdWUoKTsKICAgICByZXR1cm5WYWwuc2V0UmF3
VmFsdWUocmF3VmFsKTsKICAgICByZXR1cm4gcmV0dXJuVmFsOwpAQCAtNTYwLDQ5ICs1NjAsNDkg
QEAgaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLyhjbwogI2VuZGlmCiB9ICAg
IAogCi1pbmxpbmUgZmxvYXQgb3BlcmF0b3IvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBh
LCBmbG9hdCBiKQoraW5saW5lIGZsb2F0IG9wZXJhdG9yLyhjb25zdCBMYXlvdXRVbml0JiBhLCBm
bG9hdCBiKQogewogICAgIHJldHVybiBhLnRvRmxvYXQoKSAvIGI7CiB9CiAKLWlubGluZSBkb3Vi
bGUgb3BlcmF0b3IvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBkb3VibGUgYikKK2lu
bGluZSBkb3VibGUgb3BlcmF0b3IvKGNvbnN0IExheW91dFVuaXQmIGEsIGRvdWJsZSBiKQogewog
ICAgIHJldHVybiBhLnRvRG91YmxlKCkgLyBiOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91
dFVuaXQgb3BlcmF0b3IvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQgYikKK2lu
bGluZSBMYXlvdXRVbml0IG9wZXJhdG9yLyhjb25zdCBMYXlvdXRVbml0JiBhLCBpbnQgYikKIHsK
LSAgICByZXR1cm4gYSAvIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworICAgIHJldHVybiBhIC8g
TGF5b3V0VW5pdChiKTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9y
Lyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgdW5zaWduZWQgaW50IGIpCitpbmxpbmUg
TGF5b3V0VW5pdCBvcGVyYXRvci8oY29uc3QgTGF5b3V0VW5pdCYgYSwgdW5zaWduZWQgYikKIHsK
LSAgICByZXR1cm4gYSAvIEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworICAgIHJldHVybiBhIC8g
TGF5b3V0VW5pdChiKTsKIH0KIAotaW5saW5lIGZsb2F0IG9wZXJhdG9yLyhjb25zdCBmbG9hdCBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBmbG9hdCBvcGVyYXRvci8o
Y29uc3QgZmxvYXQgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1cm4gYSAvIGIu
dG9GbG9hdCgpOwogfQogCi1pbmxpbmUgZG91YmxlIG9wZXJhdG9yLyhjb25zdCBkb3VibGUgYSwg
Y29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgZG91YmxlIG9wZXJhdG9yLyhj
b25zdCBkb3VibGUgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1cm4gYSAvIGIu
dG9Eb3VibGUoKTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yLyhj
b25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgTGF5b3V0
VW5pdCBvcGVyYXRvci8oY29uc3QgaW50IGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7Ci0gICAg
cmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpIC8gYjsKKyAgICByZXR1cm4gTGF5b3V0VW5p
dChhKSAvIGI7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci8odW5z
aWduZWQgaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIExheW91
dFVuaXQgb3BlcmF0b3IvKHVuc2lnbmVkIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7Ci0gICAg
cmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpIC8gYjsKKyAgICByZXR1cm4gTGF5b3V0VW5p
dChhKSAvIGI7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvcisoY29u
c3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBi
KQoraW5saW5lIExheW91dFVuaXQgb3BlcmF0b3IrKGNvbnN0IExheW91dFVuaXQmIGEsIGNvbnN0
IExheW91dFVuaXQmIGIpCiB7Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOwor
ICAgIExheW91dFVuaXQgcmV0dXJuVmFsOwogI2lmIEVOQUJMRShTQVRVUkFURURfTEFZT1VUX0FS
SVRITUVUSUMpCiAgICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKHNhdHVyYXRlZEFkZGl0aW9uKGEu
cmF3VmFsdWUoKSwgYi5yYXdWYWx1ZSgpKSk7CiAjZWxzZQpAQCAtNjExLDM5ICs2MTEsMzkgQEAg
aW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yKyhjbwogICAgIHJldHVybiByZXR1
cm5WYWw7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvcisoY29uc3Qg
RnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQoraW5saW5lIExheW91dFVuaXQgb3BlcmF0
b3IrKGNvbnN0IExheW91dFVuaXQmIGEsIGludCBiKQogewotICAgIHJldHVybiBhICsgRnJhY3Rp
b25hbExheW91dFVuaXQoYik7CisgICAgcmV0dXJuIGEgKyBMYXlvdXRVbml0KGIpOwogfQogCi1p
bmxpbmUgZmxvYXQgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9h
dCBiKQoraW5saW5lIGZsb2F0IG9wZXJhdG9yKyhjb25zdCBMYXlvdXRVbml0JiBhLCBmbG9hdCBi
KQogewogICAgIHJldHVybiBhLnRvRmxvYXQoKSArIGI7CiB9CiAKLWlubGluZSBkb3VibGUgb3Bl
cmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBkb3VibGUgYikKK2lubGluZSBk
b3VibGUgb3BlcmF0b3IrKGNvbnN0IExheW91dFVuaXQmIGEsIGRvdWJsZSBiKQogewogICAgIHJl
dHVybiBhLnRvRG91YmxlKCkgKyBiOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQg
b3BlcmF0b3IrKGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lu
bGluZSBMYXlvdXRVbml0IG9wZXJhdG9yKyhjb25zdCBpbnQgYSwgY29uc3QgTGF5b3V0VW5pdCYg
YikKIHsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQoYSkgKyBiOworICAgIHJldHVy
biBMYXlvdXRVbml0KGEpICsgYjsKIH0KIAotaW5saW5lIGZsb2F0IG9wZXJhdG9yKyhjb25zdCBm
bG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBmbG9hdCBvcGVy
YXRvcisoY29uc3QgZmxvYXQgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1cm4g
YSArIGIudG9GbG9hdCgpOwogfQogCi1pbmxpbmUgZG91YmxlIG9wZXJhdG9yKyhjb25zdCBkb3Vi
bGUgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxpbmUgZG91YmxlIG9wZXJh
dG9yKyhjb25zdCBkb3VibGUgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICByZXR1cm4g
YSArIGIudG9Eb3VibGUoKTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJh
dG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGIpCitpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvci0oY29uc3QgTGF5b3V0VW5pdCYg
YSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCByZXR1
cm5WYWw7CisgICAgTGF5b3V0VW5pdCByZXR1cm5WYWw7CiAjaWYgRU5BQkxFKFNBVFVSQVRFRF9M
QVlPVVRfQVJJVEhNRVRJQykKICAgICByZXR1cm5WYWwuc2V0UmF3VmFsdWUoc2F0dXJhdGVkU3Vi
dHJhY3Rpb24oYS5yYXdWYWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKICNlbHNlCkBAIC02NTIsNDQg
KzY1Miw0NCBAQCBpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3ItKGNvCiAgICAg
cmV0dXJuIHJldHVyblZhbDsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJh
dG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCitpbmxpbmUgTGF5b3V0
VW5pdCBvcGVyYXRvci0oY29uc3QgTGF5b3V0VW5pdCYgYSwgaW50IGIpCiB7Ci0gICAgcmV0dXJu
IGEgLSBGcmFjdGlvbmFsTGF5b3V0VW5pdChiKTsKKyAgICByZXR1cm4gYSAtIExheW91dFVuaXQo
Yik7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci0oY29uc3QgRnJh
Y3Rpb25hbExheW91dFVuaXQmIGEsIHVuc2lnbmVkIGIpCitpbmxpbmUgTGF5b3V0VW5pdCBvcGVy
YXRvci0oY29uc3QgTGF5b3V0VW5pdCYgYSwgdW5zaWduZWQgYikKIHsKLSAgICByZXR1cm4gYSAt
IEZyYWN0aW9uYWxMYXlvdXRVbml0KGIpOworICAgIHJldHVybiBhIC0gTGF5b3V0VW5pdChiKTsK
IH0KIAotaW5saW5lIGZsb2F0IG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
YSwgZmxvYXQgYikKK2lubGluZSBmbG9hdCBvcGVyYXRvci0oY29uc3QgTGF5b3V0VW5pdCYgYSwg
ZmxvYXQgYikKIHsKICAgICByZXR1cm4gYS50b0Zsb2F0KCkgLSBiOwogfQogCi1pbmxpbmUgRnJh
Y3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3ItKGNvbnN0IGludCBhLCBjb25zdCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCYgYikKK2lubGluZSBMYXlvdXRVbml0IG9wZXJhdG9yLShjb25zdCBpbnQgYSwg
Y29uc3QgTGF5b3V0VW5pdCYgYikKIHsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQo
YSkgLSBiOworICAgIHJldHVybiBMYXlvdXRVbml0KGEpIC0gYjsKIH0KIAotaW5saW5lIGZsb2F0
IG9wZXJhdG9yLShjb25zdCBmbG9hdCBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikK
K2lubGluZSBmbG9hdCBvcGVyYXRvci0oY29uc3QgZmxvYXQgYSwgY29uc3QgTGF5b3V0VW5pdCYg
YikKIHsKICAgICByZXR1cm4gYSAtIGIudG9GbG9hdCgpOwogfQogCi1pbmxpbmUgRnJhY3Rpb25h
bExheW91dFVuaXQgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhKQoraW5s
aW5lIExheW91dFVuaXQgb3BlcmF0b3ItKGNvbnN0IExheW91dFVuaXQmIGEpCiB7Ci0gICAgRnJh
Y3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOworICAgIExheW91dFVuaXQgcmV0dXJuVmFsOwog
ICAgIHJldHVyblZhbC5zZXRSYXdWYWx1ZSgtYS5yYXdWYWx1ZSgpKTsKICAgICByZXR1cm4gcmV0
dXJuVmFsOwogfQogCiAvLyBGb3IgcmV0dXJuaW5nIHRoZSByZW1haW5kZXIgYWZ0ZXIgYSBkaXZp
c2lvbiB3aXRoIGludGVnZXIgcmVzdWx0cy4KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBp
bnRNb2QoY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBiKQoraW5saW5lIExheW91dFVuaXQgaW50TW9kKGNvbnN0IExheW91dFVuaXQmIGEs
IGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKICAg
ICAvLyBUaGlzIGNhbGN1bGF0ZXMgdGhlIG1vZHVsbyBzbyB0aGF0OiBhID0gc3RhdGljX2Nhc3Q8
aW50PihhIC8gYikgKiBiICsgaW50TW9kKGEsIGIpLgotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
IHJldHVyblZhbDsKKyAgICBMYXlvdXRVbml0IHJldHVyblZhbDsKICAgICByZXR1cm5WYWwuc2V0
UmF3VmFsdWUoYS5yYXdWYWx1ZSgpICUgYi5yYXdWYWx1ZSgpKTsKICAgICByZXR1cm4gcmV0dXJu
VmFsOwogI2Vsc2UKQEAgLTY5NywxMSArNjk3LDExIEBAIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBpbnRNb2QoY29uc3QKICNlbmRpZgogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVu
aXQgb3BlcmF0b3IlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBMYXlvdXRVbml0IG9wZXJhdG9yJShjb25zdCBMYXlv
dXRVbml0JiBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQogewogI2lmIEVOQUJMRShTVUJQSVhFTF9M
QVlPVVQpCiAgICAgLy8gVGhpcyBjYWxjdWxhdGVzIHRoZSBtb2R1bG8gc28gdGhhdDogYSA9IChh
IC8gYikgKiBiICsgYSAlIGIuCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFsOwor
ICAgIExheW91dFVuaXQgcmV0dXJuVmFsOwogICAgIGxvbmcgbG9uZyByYXdWYWwgPSAoc3RhdGlj
X2Nhc3Q8bG9uZyBsb25nPihrRml4ZWRQb2ludERlbm9taW5hdG9yKSAqIGEucmF3VmFsdWUoKSkg
JSBiLnJhd1ZhbHVlKCk7CiAgICAgcmV0dXJuVmFsLnNldFJhd1ZhbHVlKHJhd1ZhbCAvIGtGaXhl
ZFBvaW50RGVub21pbmF0b3IpOwogICAgIHJldHVybiByZXR1cm5WYWw7CkBAIC03MTAsMTcgKzcx
MCwxNyBAQCBpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IlKGNvCiAjZW5kaWYK
IH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IG9wZXJhdG9yJShjb25zdCBGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgYSwgaW50IGIpCitpbmxpbmUgTGF5b3V0VW5pdCBvcGVyYXRvciUoY29u
c3QgTGF5b3V0VW5pdCYgYSwgaW50IGIpCiB7Ci0gICAgcmV0dXJuIGEgJSBGcmFjdGlvbmFsTGF5
b3V0VW5pdChiKTsKKyAgICByZXR1cm4gYSAlIExheW91dFVuaXQoYik7CiB9CiAKLWlubGluZSBG
cmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvciUoaW50IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBiKQoraW5saW5lIExheW91dFVuaXQgb3BlcmF0b3IlKGludCBhLCBjb25zdCBMYXlv
dXRVbml0JiBiKQogewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSAlIGI7Cisg
ICAgcmV0dXJuIExheW91dFVuaXQoYSkgJSBiOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91
dFVuaXQmIG9wZXJhdG9yKz0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBiKQoraW5saW5lIExheW91dFVuaXQmIG9wZXJhdG9yKz0oTGF5b3V0VW5p
dCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9V
VF9BUklUSE1FVElDKQogICAgIGEuc2V0UmF3VmFsdWUoc2F0dXJhdGVkQWRkaXRpb24oYS5yYXdW
YWx1ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKQEAgLTczMCwzMSArNzMwLDMxIEBAIGlubGluZSBGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3IrPSgKICAgICByZXR1cm4gYTsKIH0KIAotaW5saW5l
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvcis9KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBh
LCBpbnQgYikKK2lubGluZSBMYXlvdXRVbml0JiBvcGVyYXRvcis9KExheW91dFVuaXQmIGEsIGlu
dCBiKQogewogICAgIGEgPSBhICsgYjsKICAgICByZXR1cm4gYTsKIH0KIAotaW5saW5lIEZyYWN0
aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvcis9KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBmbG9h
dCBiKQoraW5saW5lIExheW91dFVuaXQmIG9wZXJhdG9yKz0oTGF5b3V0VW5pdCYgYSwgZmxvYXQg
YikKIHsKICAgICBhID0gYSArIGI7CiAgICAgcmV0dXJuIGE7CiB9CiAKLWlubGluZSBmbG9hdCYg
b3BlcmF0b3IrPShmbG9hdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIpCitpbmxp
bmUgZmxvYXQmIG9wZXJhdG9yKz0oZmxvYXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAg
ICAgYSA9IGEgKyBiOwogICAgIHJldHVybiBhOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91
dFVuaXQmIG9wZXJhdG9yLT0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGludCBiKQoraW5saW5l
IExheW91dFVuaXQmIG9wZXJhdG9yLT0oTGF5b3V0VW5pdCYgYSwgaW50IGIpCiB7CiAgICAgYSA9
IGEgLSBiOwogICAgIHJldHVybiBhOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQm
IG9wZXJhdG9yLT0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRVbml0JiBiKQoraW5saW5lIExheW91dFVuaXQmIG9wZXJhdG9yLT0oTGF5b3V0VW5pdCYgYSwg
Y29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICNpZiBFTkFCTEUoU0FUVVJBVEVEX0xBWU9VVF9BUklU
SE1FVElDKQogICAgIGEuc2V0UmF3VmFsdWUoc2F0dXJhdGVkU3VidHJhY3Rpb24oYS5yYXdWYWx1
ZSgpLCBiLnJhd1ZhbHVlKCkpKTsKQEAgLTc2NCw2MiArNzY0LDEwNSBAQCBpbmxpbmUgRnJhY3Rp
b25hbExheW91dFVuaXQmIG9wZXJhdG9yLT0oCiAgICAgcmV0dXJuIGE7CiB9CiAKLWlubGluZSBG
cmFjdGlvbmFsTGF5b3V0VW5pdCYgb3BlcmF0b3ItPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwg
ZmxvYXQgYikKK2lubGluZSBMYXlvdXRVbml0JiBvcGVyYXRvci09KExheW91dFVuaXQmIGEsIGZs
b2F0IGIpCiB7CiAgICAgYSA9IGEgLSBiOwogICAgIHJldHVybiBhOwogfQogCi1pbmxpbmUgZmxv
YXQmIG9wZXJhdG9yLT0oZmxvYXQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQor
aW5saW5lIGZsb2F0JiBvcGVyYXRvci09KGZsb2F0JiBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQog
ewogICAgIGEgPSBhIC0gYjsKICAgICByZXR1cm4gYTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxM
YXlvdXRVbml0JiBvcGVyYXRvcio9KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBjb25zdCBGcmFj
dGlvbmFsTGF5b3V0VW5pdCYgYikKK2lubGluZSBMYXlvdXRVbml0JiBvcGVyYXRvcio9KExheW91
dFVuaXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCiB7CiAgICAgYSA9IGEgKiBiOwogICAgIHJl
dHVybiBhOwogfQotLy8gb3BlcmF0b3IqPShGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgaW50IGIp
IGlzIHN1cHBvcnRlZCBieSB0aGUgb3BlcmF0b3IgYWJvdmUgcGx1cyBGcmFjdGlvbmFsTGF5b3V0
VW5pdChpbnQpLgorLy8gb3BlcmF0b3IqPShMYXlvdXRVbml0JiBhLCBpbnQgYikgaXMgc3VwcG9y
dGVkIGJ5IHRoZSBvcGVyYXRvciBhYm92ZSBwbHVzIExheW91dFVuaXQoaW50KS4KIAotaW5saW5l
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBvcGVyYXRvcio9KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBh
LCBmbG9hdCBiKQoraW5saW5lIExheW91dFVuaXQmIG9wZXJhdG9yKj0oTGF5b3V0VW5pdCYgYSwg
ZmxvYXQgYikKIHsKICAgICBhID0gYSAqIGI7CiAgICAgcmV0dXJuIGE7CiB9CiAKLWlubGluZSBm
bG9hdCYgb3BlcmF0b3IqPShmbG9hdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIp
CitpbmxpbmUgZmxvYXQmIG9wZXJhdG9yKj0oZmxvYXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIp
CiB7CiAgICAgYSA9IGEgKiBiOwogICAgIHJldHVybiBhOwogfQogCi1pbmxpbmUgRnJhY3Rpb25h
bExheW91dFVuaXQmIG9wZXJhdG9yLz0oRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBiKQoraW5saW5lIExheW91dFVuaXQmIG9wZXJhdG9yLz0oTGF5
b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKIHsKICAgICBhID0gYSAvIGI7CiAgICAg
cmV0dXJuIGE7CiB9Ci0vLyBvcGVyYXRvci89KEZyYWN0aW9uYWxMYXlvdXRVbml0JiBhLCBpbnQg
YikgaXMgc3VwcG9ydGVkIGJ5IHRoZSBvcGVyYXRvciBhYm92ZSBwbHVzIEZyYWN0aW9uYWxMYXlv
dXRVbml0KGludCkuCisvLyBvcGVyYXRvci89KExheW91dFVuaXQmIGEsIGludCBiKSBpcyBzdXBw
b3J0ZWQgYnkgdGhlIG9wZXJhdG9yIGFib3ZlIHBsdXMgTGF5b3V0VW5pdChpbnQpLgogCi1pbmxp
bmUgRnJhY3Rpb25hbExheW91dFVuaXQmIG9wZXJhdG9yLz0oRnJhY3Rpb25hbExheW91dFVuaXQm
IGEsIGZsb2F0IGIpCitpbmxpbmUgTGF5b3V0VW5pdCYgb3BlcmF0b3IvPShMYXlvdXRVbml0JiBh
LCBmbG9hdCBiKQogewogICAgIGEgPSBhIC8gYjsKICAgICByZXR1cm4gYTsKIH0KIAotaW5saW5l
IGZsb2F0JiBvcGVyYXRvci89KGZsb2F0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
YikKK2lubGluZSBmbG9hdCYgb3BlcmF0b3IvPShmbG9hdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYg
YikKIHsKICAgICBhID0gYSAvIGI7CiAgICAgcmV0dXJuIGE7CiB9CiAKLWlubGluZSBpbnQgc25h
cFNpemVUb1BpeGVsKEZyYWN0aW9uYWxMYXlvdXRVbml0IHNpemUsIEZyYWN0aW9uYWxMYXlvdXRV
bml0IGxvY2F0aW9uKSAKK2lubGluZSBpbnQgc25hcFNpemVUb1BpeGVsKExheW91dFVuaXQgc2l6
ZSwgTGF5b3V0VW5pdCBsb2NhdGlvbikgCiB7Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgZnJh
Y3Rpb24gPSBsb2NhdGlvbi5mcmFjdGlvbigpOworICAgIExheW91dFVuaXQgZnJhY3Rpb24gPSBs
b2NhdGlvbi5mcmFjdGlvbigpOwogICAgIHJldHVybiAoZnJhY3Rpb24gKyBzaXplKS5yb3VuZCgp
IC0gZnJhY3Rpb24ucm91bmQoKTsKIH0KIAoraW5saW5lIGludCByb3VuZFRvSW50KExheW91dFVu
aXQgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlLnJvdW5kKCk7Cit9CisKK2lubGluZSBpbnQg
Zmxvb3JUb0ludChMYXlvdXRVbml0IHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZS5mbG9vcigp
OworfQorCitpbmxpbmUgTGF5b3V0VW5pdCByb3VuZGVkTGF5b3V0VW5pdChmbG9hdCB2YWx1ZSkK
K3sKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIHJldHVybiBMYXlvdXRVbml0Ojpm
cm9tRmxvYXRSb3VuZCh2YWx1ZSk7CisjZWxzZQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+
KGxyb3VuZGYodmFsdWUpKTsKKyNlbmRpZgorfQorCitpbmxpbmUgTGF5b3V0VW5pdCBjZWlsZWRM
YXlvdXRVbml0KGZsb2F0IHZhbHVlKQoreworI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisg
ICAgcmV0dXJuIExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwodmFsdWUpOworI2Vsc2UKKyAgICBy
ZXR1cm4gY2VpbGYodmFsdWUpOworI2VuZGlmCit9CisKK2lubGluZSBMYXlvdXRVbml0IGFic29s
dXRlVmFsdWUoY29uc3QgTGF5b3V0VW5pdCYgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlLmFi
cygpOworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBsYXlvdXRNb2QoY29uc3QgTGF5b3V0VW5pdCYg
bnVtZXJhdG9yLCBjb25zdCBMYXlvdXRVbml0JiBkZW5vbWluYXRvcikKK3sKKyAgICByZXR1cm4g
bnVtZXJhdG9yICUgZGVub21pbmF0b3I7Cit9CisKK2lubGluZSBib29sIGlzSW50ZWdlclZhbHVl
KGNvbnN0IExheW91dFVuaXQgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlLnRvSW50KCkgPT0g
dmFsdWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEZyYWN0aW9u
YWxMYXlvdXRVbml0X2gKKyNlbmRpZiAvLyBMYXlvdXRVbml0X2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0xlbmd0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0xlbmd0aC5oCShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9MZW5ndGguaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIEFTU0VSVCh0ICE9IENhbGN1bGF0ZWQpOwogICAgIH0KICAgICAKLSAgICBMZW5ndGgoRnJh
Y3Rpb25hbExheW91dFVuaXQgdiwgTGVuZ3RoVHlwZSB0LCBib29sIHEgPSBmYWxzZSkKKyAgICBM
ZW5ndGgoTGF5b3V0VW5pdCB2LCBMZW5ndGhUeXBlIHQsIGJvb2wgcSA9IGZhbHNlKQogICAgICAg
ICA6IG1fZmxvYXRWYWx1ZSh2LnRvRmxvYXQoKSksIG1fcXVpcmsocSksIG1fdHlwZSh0KSwgbV9p
c0Zsb2F0KHRydWUpCiAgICAgewogICAgICAgICBBU1NFUlQodCAhPSBDYWxjdWxhdGVkKTsKQEAg
LTE3Miw3ICsxNzIsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1faXNGbG9hdCA9IHRydWU7ICAgIAog
ICAgIH0KIAotICAgIHZvaWQgc2V0VmFsdWUoTGVuZ3RoVHlwZSB0LCBGcmFjdGlvbmFsTGF5b3V0
VW5pdCB2YWx1ZSkKKyAgICB2b2lkIHNldFZhbHVlKExlbmd0aFR5cGUgdCwgTGF5b3V0VW5pdCB2
YWx1ZSkKICAgICB7CiAgICAgICAgIG1fdHlwZSA9IHQ7CiAgICAgICAgIG1fZmxvYXRWYWx1ZSA9
IHZhbHVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51Q2xpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51Q2xpZW50LmgJ
KHJldmlzaW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudUNs
aWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAjaWZuZGVmIFBvcHVwTWVu
dUNsaWVudF9oCiAjZGVmaW5lIFBvcHVwTWVudUNsaWVudF9oCiAKLSNpbmNsdWRlICJMYXlvdXRU
eXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKICNpbmNsdWRlICJQb3B1cE1lbnVTdHls
ZS5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb25VdGlsaXRp
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vQW5p
bWF0aW9uVXRpbGl0aWVzLmgJKHJldmlzaW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb25VdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsOCArMjYsOCBAQAogI2lmbmRlZiBBbmltYXRpb25VdGlsaXRpZXNfaAogI2RlZmluZSBBbmlt
YXRpb25VdGlsaXRpZXNfaAogCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFVuaXQuaCIKICNp
bmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01Miw3ICs1Miw3IEBA
IGlubGluZSBmbG9hdCBibGVuZChmbG9hdCBmcm9tLCBmbG9hdCB0bywKICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGZyb20gKyAodG8gLSBmcm9tKSAqIHByb2dyZXNzKTsKIH0KIAotaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IGJsZW5kKEZyYWN0aW9uYWxMYXlvdXRVbml0IGZyb20s
IEZyYWN0aW9uYWxMYXlvdXRVbml0IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitpbmxpbmUgTGF5b3V0
VW5pdCBibGVuZChMYXlvdXRVbml0IGZyb20sIExheW91dFVuaXQgdG8sIGRvdWJsZSBwcm9ncmVz
cykKIHsgIAogICAgIHJldHVybiBmcm9tICsgKHRvIC0gZnJvbSkgKiBwcm9ncmVzczsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3Bw
CShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDEwIEBACiAjaW5jbHVk
ZSAiRmxvYXRQb2ludC5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVk
ZSAiRnJhY3Rpb25hbExheW91dFBvaW50LmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgi
Ci0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFNpemUuaCIKICNpbmNsdWRlICJJbnRQb2ludC5o
IgorI2luY2x1ZGUgIkxheW91dFBvaW50LmgiCisjaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgogI2lu
Y2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1
ZGUgPG1hdGguaD4KQEAgLTQyLDcgKzQyLDcgQEAgRmxvYXRQb2ludDo6RmxvYXRQb2ludChjb25z
dCBJbnRQb2ludCYgcAogewogfQogCi1GbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRQb2ludCYgcCkgOiBtX3gocC54KCkpLCBtX3kocC55KCkpCitGbG9hdFBvaW50
OjpGbG9hdFBvaW50KGNvbnN0IExheW91dFBvaW50JiBwKSA6IG1feChwLngoKSksIG1feShwLnko
KSkKIHsKIH0KIApAQCAtNjEsMTMgKzYxLDEzIEBAIGZsb2F0IEZsb2F0UG9pbnQ6Omxlbmd0aCgp
IGNvbnN0CiAgICAgcmV0dXJuIHNxcnRmKGxlbmd0aFNxdWFyZWQoKSk7CiB9CiAKLXZvaWQgRmxv
YXRQb2ludDo6bW92ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkKK3ZvaWQgRmxv
YXRQb2ludDo6bW92ZShjb25zdCBMYXlvdXRTaXplJiBzaXplKQogewogICAgIG1feCArPSBzaXpl
LndpZHRoKCk7CiAgICAgbV95ICs9IHNpemUuaGVpZ2h0KCk7CiB9CiAKLXZvaWQgRmxvYXRQb2lu
dDo6bW92ZUJ5KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcG9pbnQpCit2b2lkIEZsb2F0
UG9pbnQ6Om1vdmVCeShjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCiB7CiAgICAgbV94ICs9IHBv
aW50LngoKTsKICAgICBtX3kgKz0gcG9pbnQueSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAkocmV2aXNpb24gMTMzNzY0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCSh3b3JraW5nIGNvcHkp
CkBAIC02OCwxNSArNjgsMTUgQEAgY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgVHJhbnNm
b3JtYXRpb25NYXRyaXg7CiBjbGFzcyBJbnRQb2ludDsKIGNsYXNzIEludFNpemU7Ci1jbGFzcyBG
cmFjdGlvbmFsTGF5b3V0UG9pbnQ7Ci1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0U2l6ZTsKK2NsYXNz
IExheW91dFBvaW50OworY2xhc3MgTGF5b3V0U2l6ZTsKIAogY2xhc3MgRmxvYXRQb2ludCB7CiBw
dWJsaWM6CiAgICAgRmxvYXRQb2ludCgpIDogbV94KDApLCBtX3koMCkgeyB9CiAgICAgRmxvYXRQ
b2ludChmbG9hdCB4LCBmbG9hdCB5KSA6IG1feCh4KSwgbV95KHkpIHsgfQogICAgIEZsb2F0UG9p
bnQoY29uc3QgSW50UG9pbnQmKTsKLSAgICBGbG9hdFBvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRQb2ludCYpOworICAgIEZsb2F0UG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmKTsKICAgICBleHBs
aWNpdCBGbG9hdFBvaW50KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgOiBtX3goc2l6ZS53aWR0aCgp
KSwgbV95KHNpemUuaGVpZ2h0KCkpIHsgfQogCiAgICAgc3RhdGljIEZsb2F0UG9pbnQgemVybygp
IHsgcmV0dXJuIEZsb2F0UG9pbnQoKTsgfQpAQCAtMTAzLDcgKzEwMyw3IEBAIHB1YmxpYzoKICAg
ICAgICAgbV94ICs9IGEud2lkdGgoKTsKICAgICAgICAgbV95ICs9IGEuaGVpZ2h0KCk7CiAgICAg
fQotICAgIHZvaWQgbW92ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYpOworICAgIHZvaWQg
bW92ZShjb25zdCBMYXlvdXRTaXplJik7CiAgICAgdm9pZCBtb3ZlKGNvbnN0IEZsb2F0U2l6ZSYg
YSkKICAgICB7CiAgICAgICAgIG1feCArPSBhLndpZHRoKCk7CkBAIC0xMTQsNyArMTE0LDcgQEAg
cHVibGljOgogICAgICAgICBtX3ggKz0gYS54KCk7CiAgICAgICAgIG1feSArPSBhLnkoKTsKICAg
ICB9Ci0gICAgdm9pZCBtb3ZlQnkoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50Jik7CisgICAg
dm9pZCBtb3ZlQnkoY29uc3QgTGF5b3V0UG9pbnQmKTsKICAgICB2b2lkIG1vdmVCeShjb25zdCBG
bG9hdFBvaW50JiBhKQogICAgIHsKICAgICAgICAgbV94ICs9IGEueCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCShyZXZpc2lvbiAx
MzM3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CiAKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5
b3V0UmVjdC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0Lmgi
CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgpAQCAtNDMsNyArNDMsNyBAQCBGbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25z
dCBJbnRSZWN0JiByKSA6CiB7CiB9CiAKLUZsb2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRSZWN0JiByKSA6IG1fbG9jYXRpb24oci5sb2NhdGlvbigpKSwgbV9zaXplKHIu
c2l6ZSgpKQorRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcikgOiBtX2xv
Y2F0aW9uKHIubG9jYXRpb24oKSksIG1fc2l6ZShyLnNpemUoKSkKIHsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgJKHJldmlzaW9uIDEz
Mzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IFZHUmVjdDsKICNlbmRpZgogCi1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0UmVjdDsKK2NsYXNzIExh
eW91dFJlY3Q7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgSW50UG9pbnQ7CiAKQEAgLTkxLDcgKzkx
LDcgQEAgcHVibGljOgogICAgIEZsb2F0UmVjdChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0
aCwgZmxvYXQgaGVpZ2h0KQogICAgICAgICA6IG1fbG9jYXRpb24oRmxvYXRQb2ludCh4LCB5KSks
IG1fc2l6ZShGbG9hdFNpemUod2lkdGgsIGhlaWdodCkpIHsgfQogICAgIEZsb2F0UmVjdChjb25z
dCBJbnRSZWN0Jik7Ci0gICAgRmxvYXRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0Jik7
CisgICAgRmxvYXRSZWN0KGNvbnN0IExheW91dFJlY3QmKTsKIAogICAgIHN0YXRpYyBGbG9hdFJl
Y3QgbmFycm93UHJlY2lzaW9uKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHdpZHRoLCBkb3Vi
bGUgaGVpZ2h0KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRTaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFNpemUuY3BwCShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNyw5
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAKLSNpbmNs
dWRlICJGcmFjdGlvbmFsTGF5b3V0U2l6ZS5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5o
IgogI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCiAjaW5jbHVk
ZSA8bGltaXRzPgogI2luY2x1ZGUgPG1hdGguaD4KIApAQCAtNDEsNyArNDEsNyBAQCBGbG9hdFNp
emU6OkZsb2F0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplCiB7CiB9CiAKLUZsb2F0U2l6ZTo6Rmxv
YXRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSA6IG1fd2lkdGgoc2l6ZS53
aWR0aCgpKSwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkKK0Zsb2F0U2l6ZTo6RmxvYXRTaXplKGNv
bnN0IExheW91dFNpemUmIHNpemUpIDogbV93aWR0aChzaXplLndpZHRoKCkpLCBtX2hlaWdodChz
aXplLmhlaWdodCgpKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFNpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFNpemUuaAkocmV2aXNpb24gMTMzNzY0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDE0ICs2
MCwxNCBAQCB0eXBlZGVmIHN0cnVjdCBfTlNTaXplIE5TU2l6ZTsKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgSW50U2l6ZTsKLWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRTaXplOworY2xhc3Mg
TGF5b3V0U2l6ZTsKIAogY2xhc3MgRmxvYXRTaXplIHsKIHB1YmxpYzoKICAgICBGbG9hdFNpemUo
KSA6IG1fd2lkdGgoMCksIG1faGVpZ2h0KDApIHsgfQogICAgIEZsb2F0U2l6ZShmbG9hdCB3aWR0
aCwgZmxvYXQgaGVpZ2h0KSA6IG1fd2lkdGgod2lkdGgpLCBtX2hlaWdodChoZWlnaHQpIHsgfQog
ICAgIEZsb2F0U2l6ZShjb25zdCBJbnRTaXplJik7Ci0gICAgRmxvYXRTaXplKGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRTaXplJik7CisgICAgRmxvYXRTaXplKGNvbnN0IExheW91dFNpemUmKTsKIAog
ICAgIHN0YXRpYyBGbG9hdFNpemUgbmFycm93UHJlY2lzaW9uKGRvdWJsZSB3aWR0aCwgZG91Ymxl
IGhlaWdodCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0
aW9uYWxMYXlvdXRCb3hFeHRlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuY3BwCShyZXZpc2lvbiAx
MzM3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5
b3V0Qm94RXh0ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxOTYgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlv
dXRCb3hFeHRlbnQ6OmxvZ2ljYWxUb3AoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fdG9w
IDogbV9sZWZ0OwotfQotCi1GcmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94
RXh0ZW50Ojpsb2dpY2FsQm90dG9tKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAotewot
ICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX2JvdHRv
bSA6IG1fcmlnaHQ7Ci19Ci0KLUZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRC
b3hFeHRlbnQ6OmxvZ2ljYWxMZWZ0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAotewot
ICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX2xlZnQg
OiBtX3RvcDsKLX0KLQotRnJhY3Rpb25hbExheW91dFVuaXQgRnJhY3Rpb25hbExheW91dEJveEV4
dGVudDo6bG9naWNhbFJpZ2h0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAotewotICAg
IHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX3JpZ2h0IDog
bV9ib3R0b207Ci19Ci0KLUZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hF
eHRlbnQ6OmJlZm9yZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QKLXsKLSAgICBzd2l0
Y2ggKHdyaXRpbmdNb2RlKSB7Ci0gICAgY2FzZSBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlOgotICAg
ICAgICByZXR1cm4gbV90b3A7Ci0gICAgY2FzZSBCb3R0b21Ub1RvcFdyaXRpbmdNb2RlOgotICAg
ICAgICByZXR1cm4gbV9ib3R0b207Ci0gICAgY2FzZSBMZWZ0VG9SaWdodFdyaXRpbmdNb2RlOgot
ICAgICAgICByZXR1cm4gbV9sZWZ0OwotICAgIGNhc2UgUmlnaHRUb0xlZnRXcml0aW5nTW9kZToK
LSAgICAgICAgcmV0dXJuIG1fcmlnaHQ7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiBtX3RvcDsKLX0KLQotRnJhY3Rpb25hbExheW91dFVuaXQgRnJhY3Rpb25h
bExheW91dEJveEV4dGVudDo6YWZ0ZXIoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0Ci17
Ci0gICAgc3dpdGNoICh3cml0aW5nTW9kZSkgewotICAgIGNhc2UgVG9wVG9Cb3R0b21Xcml0aW5n
TW9kZToKLSAgICAgICAgcmV0dXJuIG1fYm90dG9tOwotICAgIGNhc2UgQm90dG9tVG9Ub3BXcml0
aW5nTW9kZToKLSAgICAgICAgcmV0dXJuIG1fdG9wOwotICAgIGNhc2UgTGVmdFRvUmlnaHRXcml0
aW5nTW9kZToKLSAgICAgICAgcmV0dXJuIG1fcmlnaHQ7Ci0gICAgY2FzZSBSaWdodFRvTGVmdFdy
aXRpbmdNb2RlOgotICAgICAgICByZXR1cm4gbV9sZWZ0OwotICAgIH0KLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbV9ib3R0b207Ci19Ci0KLUZyYWN0aW9uYWxMYXlvdXRV
bml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OnN0YXJ0KFdyaXRpbmdNb2RlIHdyaXRpbmdN
b2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikgY29uc3QKLXsKLSAgICBpZiAoaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKQotICAgICAgICByZXR1cm4gaXNMZWZ0VG9SaWdo
dERpcmVjdGlvbihkaXJlY3Rpb24pID8gbV9sZWZ0IDogbV9yaWdodDsKLSAgICByZXR1cm4gaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24pID8gbV90b3AgOiBtX2JvdHRvbTsKLX0KLQot
RnJhY3Rpb25hbExheW91dFVuaXQgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6ZW5kKFdyaXRp
bmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikgY29uc3QKLXsKLSAg
ICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKQotICAgICAgICByZXR1
cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24pID8gbV9yaWdodCA6IG1fbGVmdDsK
LSAgICByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24pID8gbV9ib3R0b20g
OiBtX3RvcDsKLX0KLQotdm9pZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzZXRCZWZvcmUo
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKQotewot
ICAgIHN3aXRjaCAod3JpdGluZ01vZGUpIHsKLSAgICBjYXNlIFRvcFRvQm90dG9tV3JpdGluZ01v
ZGU6Ci0gICAgICAgIG1fdG9wID0gdmFsdWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQm90
dG9tVG9Ub3BXcml0aW5nTW9kZToKLSAgICAgICAgbV9ib3R0b20gPSB2YWx1ZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBMZWZ0VG9SaWdodFdyaXRpbmdNb2RlOgotICAgICAgICBtX2xlZnQg
PSB2YWx1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSaWdodFRvTGVmdFdyaXRpbmdNb2Rl
OgotICAgICAgICBtX3JpZ2h0ID0gdmFsdWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBtX3RvcCA9IHZhbHVlOwot
ICAgIH0KLX0KLQotdm9pZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzZXRBZnRlcihXcml0
aW5nTW9kZSB3cml0aW5nTW9kZSwgRnJhY3Rpb25hbExheW91dFVuaXQgdmFsdWUpCi17Ci0gICAg
c3dpdGNoICh3cml0aW5nTW9kZSkgewotICAgIGNhc2UgVG9wVG9Cb3R0b21Xcml0aW5nTW9kZToK
LSAgICAgICAgbV9ib3R0b20gPSB2YWx1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCb3R0
b21Ub1RvcFdyaXRpbmdNb2RlOgotICAgICAgICBtX3RvcCA9IHZhbHVlOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIExlZnRUb1JpZ2h0V3JpdGluZ01vZGU6Ci0gICAgICAgIG1fcmlnaHQgPSB2
YWx1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSaWdodFRvTGVmdFdyaXRpbmdNb2RlOgot
ICAgICAgICBtX2xlZnQgPSB2YWx1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIG1fYm90dG9tID0gdmFsdWU7Ci0g
ICAgfQotfQotCi12b2lkIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OnNldFN0YXJ0KFdyaXRp
bmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgRnJhY3Rpb25hbExh
eW91dFVuaXQgdmFsdWUpCi17Ci0gICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRp
bmdNb2RlKSkgewotICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24p
KQotICAgICAgICAgICAgbV9sZWZ0ID0gdmFsdWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG1fcmlnaHQgPSB2YWx1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoaXNMZWZ0VG9SaWdo
dERpcmVjdGlvbihkaXJlY3Rpb24pKQotICAgICAgICAgICAgbV90b3AgPSB2YWx1ZTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbV9ib3R0b20gPSB2YWx1ZTsKLSAgICB9Ci19Ci0KLXZvaWQg
RnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6c2V0RW5kKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2Rl
LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgRnJhY3Rpb25hbExheW91dFVuaXQgdmFsdWUpCi17
Ci0gICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkgewotICAgICAg
ICBpZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24pKQotICAgICAgICAgICAgbV9y
aWdodCA9IHZhbHVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2xlZnQgPSB2YWx1ZTsK
LSAgICB9IGVsc2UgewotICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rp
b24pKQotICAgICAgICAgICAgbV9ib3R0b20gPSB2YWx1ZTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgbV90b3AgPSB2YWx1ZTsKLSAgICB9Ci19Ci0KLUZyYWN0aW9uYWxMYXlvdXRVbml0JiBG
cmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjptdXRhYmxlTG9naWNhbExlZnQoV3JpdGluZ01vZGUg
d3JpdGluZ01vZGUpCi17Ci0gICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRp
bmdNb2RlKSA/IG1fbGVmdCA6IG1fdG9wOwotfQotCi1GcmFjdGlvbmFsTGF5b3V0VW5pdCYgRnJh
Y3Rpb25hbExheW91dEJveEV4dGVudDo6bXV0YWJsZUxvZ2ljYWxSaWdodChXcml0aW5nTW9kZSB3
cml0aW5nTW9kZSkKLXsKLSAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGlu
Z01vZGUpID8gbV9yaWdodCA6IG1fYm90dG9tOwotfQotCi1GcmFjdGlvbmFsTGF5b3V0VW5pdCYg
RnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6bXV0YWJsZUJlZm9yZShXcml0aW5nTW9kZSB3cml0
aW5nTW9kZSkKLXsKLSAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01v
ZGUpID8gKGlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fYm90dG9t
IDogbV90b3ApIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fcmlnaHQ6
IG1fbGVmdCk7Ci19Ci0KLUZyYWN0aW9uYWxMYXlvdXRVbml0JiBGcmFjdGlvbmFsTGF5b3V0Qm94
RXh0ZW50OjptdXRhYmxlQWZ0ZXIoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCi17Ci0gICAgcmV0
dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IChpc0ZsaXBwZWRCbG9j
a3NXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX3RvcCA6IG1fYm90dG9tKSA6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpc0ZsaXBwZWRCbG9j
a3NXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX2xlZnQ6IG1fcmlnaHQpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oCShyZXZpc2lv
biAxMzM3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFs
TGF5b3V0Qm94RXh0ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODYgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnRfaAotI2RlZmluZSBGcmFjdGlvbmFsTGF5b3V0Qm94
RXh0ZW50X2gKLQotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRVbml0LmgiCi0jaW5jbHVkZSAi
VGV4dERpcmVjdGlvbi5oIgotI2luY2x1ZGUgIldyaXRpbmdNb2RlLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgRnJhY3Rpb25hbExheW91dEJveEV4dGVudCB7Ci1wdWJsaWM6Ci0g
ICAgRnJhY3Rpb25hbExheW91dEJveEV4dGVudCgpIDogbV90b3AoMCksIG1fcmlnaHQoMCksIG1f
Ym90dG9tKDApLCBtX2xlZnQoMCkgeyB9Ci0gICAgRnJhY3Rpb25hbExheW91dEJveEV4dGVudChG
cmFjdGlvbmFsTGF5b3V0VW5pdCB0b3AsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJpZ2h0LCBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBib3R0b20sIEZyYWN0aW9uYWxMYXlvdXRVbml0IGxlZnQpCi0gICAg
ICAgIDogbV90b3AodG9wKSwgbV9yaWdodChyaWdodCksIG1fYm90dG9tKGJvdHRvbSksIG1fbGVm
dChsZWZ0KSB7IH0KLQotICAgIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCB0b3AoKSBjb25z
dCB7IHJldHVybiBtX3RvcDsgfQotICAgIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCByaWdo
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmlnaHQ7IH0KLSAgICBpbmxpbmUgRnJhY3Rpb25hbExheW91
dFVuaXQgYm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9ib3R0b207IH0KLSAgICBpbmxpbmUgRnJh
Y3Rpb25hbExheW91dFVuaXQgbGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVmdDsgfQotCi0gICAg
aW5saW5lIHZvaWQgc2V0VG9wKEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKSB7IG1fdG9wID0g
dmFsdWU7IH0KLSAgICBpbmxpbmUgdm9pZCBzZXRSaWdodChGcmFjdGlvbmFsTGF5b3V0VW5pdCB2
YWx1ZSkgeyBtX3JpZ2h0ID0gdmFsdWU7IH0KLSAgICBpbmxpbmUgdm9pZCBzZXRCb3R0b20oRnJh
Y3Rpb25hbExheW91dFVuaXQgdmFsdWUpIHsgbV9ib3R0b20gPSB2YWx1ZTsgfQotICAgIGlubGlu
ZSB2b2lkIHNldExlZnQoRnJhY3Rpb25hbExheW91dFVuaXQgdmFsdWUpIHsgbV9sZWZ0ID0gdmFs
dWU7IH0KLQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGxvZ2ljYWxUb3AoV3JpdGluZ01vZGUp
IGNvbnN0OwotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20oV3JpdGluZ01v
ZGUpIGNvbnN0OwotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KFdyaXRpbmdN
b2RlKSBjb25zdDsKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQoV3JpdGlu
Z01vZGUpIGNvbnN0OwotCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgYmVmb3JlKFdyaXRpbmdN
b2RlKSBjb25zdDsKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBhZnRlcihXcml0aW5nTW9kZSkg
Y29uc3Q7Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgc3RhcnQoV3JpdGluZ01vZGUsIFRleHRE
aXJlY3Rpb24pIGNvbnN0OwotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGVuZChXcml0aW5nTW9k
ZSwgVGV4dERpcmVjdGlvbikgY29uc3Q7Ci0KLSAgICB2b2lkIHNldEJlZm9yZShXcml0aW5nTW9k
ZSwgRnJhY3Rpb25hbExheW91dFVuaXQpOwotICAgIHZvaWQgc2V0QWZ0ZXIoV3JpdGluZ01vZGUs
IEZyYWN0aW9uYWxMYXlvdXRVbml0KTsKLSAgICB2b2lkIHNldFN0YXJ0KFdyaXRpbmdNb2RlLCBU
ZXh0RGlyZWN0aW9uLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCk7Ci0gICAgdm9pZCBzZXRFbmQoV3Jp
dGluZ01vZGUsIFRleHREaXJlY3Rpb24sIEZyYWN0aW9uYWxMYXlvdXRVbml0KTsKLQotICAgIEZy
YWN0aW9uYWxMYXlvdXRVbml0JiBtdXRhYmxlTG9naWNhbExlZnQoV3JpdGluZ01vZGUpOwotICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBtdXRhYmxlTG9naWNhbFJpZ2h0KFdyaXRpbmdNb2RlKTsK
LQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBtdXRhYmxlQmVmb3JlKFdyaXRpbmdNb2RlKTsK
LSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgbXV0YWJsZUFmdGVyKFdyaXRpbmdNb2RlKTsKLQot
cHJpdmF0ZToKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtX3RvcDsKLSAgICBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBtX3JpZ2h0OwotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1fYm90dG9tOwot
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1fbGVmdDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnRfaApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFBvaW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExh
eW91dFBvaW50LmgJKHJldmlzaW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRQb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5
MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0
OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgRnJhY3Rpb25hbExheW91dFBvaW50X2gKLSNkZWZpbmUgRnJhY3Rp
b25hbExheW91dFBvaW50X2gKLQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJG
cmFjdGlvbmFsTGF5b3V0U2l6ZS5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLSNp
ZiBQTEFURk9STShRVCkKLSNpbmNsdWRlIDxxZ2xvYmFsLmg+Ci1RVF9CRUdJTl9OQU1FU1BBQ0UK
LWNsYXNzIFFQb2ludDsKLWNsYXNzIFFQb2ludEY7Ci1RVF9FTkRfTkFNRVNQQUNFCi0jZW5kaWYK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgewot
cHVibGljOgotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCgpIDogbV94KDApLCBtX3koMCkgeyB9
Ci0gICAgRnJhY3Rpb25hbExheW91dFBvaW50KEZyYWN0aW9uYWxMYXlvdXRVbml0IHgsIEZyYWN0
aW9uYWxMYXlvdXRVbml0IHkpIDogbV94KHgpLCBtX3koeSkgeyB9Ci0gICAgRnJhY3Rpb25hbExh
eW91dFBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkgOiBtX3gocG9pbnQueCgpKSwgbV95KHBv
aW50LnkoKSkgeyB9Ci0gICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFBvaW50KGNvbnN0IEZs
b2F0UG9pbnQmIHNpemUpIDogbV94KHNpemUueCgpKSwgbV95KHNpemUueSgpKSB7IH0KLSAgICBl
eHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUm
IHNpemUpIDogbV94KHNpemUud2lkdGgoKSksIG1feShzaXplLmhlaWdodCgpKSB7IH0KLQotICAg
IHN0YXRpYyBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgemVybygpIHsgcmV0dXJuIEZyYWN0aW9uYWxM
YXlvdXRQb2ludCgpOyB9Ci0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB4KCkgY29uc3QgeyBy
ZXR1cm4gbV94OyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgeSgpIGNvbnN0IHsgcmV0dXJu
IG1feTsgfQotCi0gICAgdm9pZCBzZXRYKEZyYWN0aW9uYWxMYXlvdXRVbml0IHgpIHsgbV94ID0g
eDsgfQotICAgIHZvaWQgc2V0WShGcmFjdGlvbmFsTGF5b3V0VW5pdCB5KSB7IG1feSA9IHk7IH0K
LQotICAgIHZvaWQgbW92ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgcykgeyBtb3ZlKHMu
d2lkdGgoKSwgcy5oZWlnaHQoKSk7IH0gCi0gICAgdm9pZCBtb3ZlQnkoY29uc3QgRnJhY3Rpb25h
bExheW91dFBvaW50JiBvZmZzZXQpIHsgbW92ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsgfQot
ICAgIHZvaWQgbW92ZShGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeCwgRnJhY3Rpb25hbExheW91dFVu
aXQgZHkpIHsgbV94ICs9IGR4OyBtX3kgKz0gZHk7IH0KLSAgICB2b2lkIHNjYWxlKGZsb2F0IHN4
LCBmbG9hdCBzeSkKLSAgICB7Ci0gICAgICAgIG1feCAqPSBzeDsKLSAgICAgICAgbV95ICo9IHN5
OwotICAgIH0KLSAgICAKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgZXhwYW5kZWRUbyhjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChzdGQ6Om1heChtX3gsIG90aGVyLm1feCksIHN0ZDo6
bWF4KG1feSwgb3RoZXIubV95KSk7Ci0gICAgfQotCi0gICAgRnJhY3Rpb25hbExheW91dFBvaW50
IHNocnVua1RvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgb3RoZXIpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KHN0ZDo6bWluKG1feCwgb3Ro
ZXIubV94KSwgc3RkOjptaW4obV95LCBvdGhlci5tX3kpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNs
YW1wTmVnYXRpdmVUb1plcm8oKQotICAgIHsKLSAgICAgICAgKnRoaXMgPSBleHBhbmRlZFRvKHpl
cm8oKSk7Ci0gICAgfQotCi0gICAgRnJhY3Rpb25hbExheW91dFBvaW50IHRyYW5zcG9zZWRQb2lu
dCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KG1f
eSwgbV94KTsKLSAgICB9Ci0KLSNpZiBQTEFURk9STShRVCkKLSAgICBleHBsaWNpdCBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQoY29uc3QgUVBvaW50Jik7Ci0gICAgZXhwbGljaXQgRnJhY3Rpb25hbExh
eW91dFBvaW50KGNvbnN0IFFQb2ludEYmKTsKLSAgICBvcGVyYXRvciBRUG9pbnRGKCkgY29uc3Q7
Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtX3gsIG1feTsK
LX07Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIG9wZXJhdG9yKz0oRnJhY3Rpb25h
bExheW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKLXsKLSAgICBh
Lm1vdmUoYi53aWR0aCgpLCBiLmhlaWdodCgpKTsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5l
IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgb3BlcmF0b3ItPShGcmFjdGlvbmFsTGF5b3V0UG9pbnQm
IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQotewotICAgIGEubW92ZSgtYi53aWR0
aCgpLCAtYi5oZWlnaHQoKSk7Ci0gICAgcmV0dXJuIGE7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQgb3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29u
c3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlv
dXRQb2ludChhLngoKSArIGIud2lkdGgoKSwgYS55KCkgKyBiLmhlaWdodCgpKTsKLX0KLQotaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBvcGVyYXRvcisoY29uc3QgRnJhY3Rpb25hbExheW91
dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGIpCi17Ci0gICAgcmV0dXJu
IEZyYWN0aW9uYWxMYXlvdXRQb2ludChhLngoKSArIGIueCgpLCBhLnkoKSArIGIueSgpKTsKLX0K
LQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplIG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYikKLXsKLSAgICBy
ZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUoYS54KCkgLSBiLngoKSwgYS55KCkgLSBiLnkoKSk7
Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgb3BlcmF0b3ItKGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCi17Ci0g
ICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChhLngoKSAtIGIud2lkdGgoKSwgYS55KCkg
LSBiLmhlaWdodCgpKTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBvcGVyYXRv
ci0oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBwb2ludCkKLXsKLSAgICByZXR1cm4gRnJh
Y3Rpb25hbExheW91dFBvaW50KC1wb2ludC54KCksIC1wb2ludC55KCkpOwotfQotCi1pbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJh
Y3Rpb25hbExheW91dFBvaW50JiBiKQotewotICAgIHJldHVybiBhLngoKSA9PSBiLngoKSAmJiBh
LnkoKSA9PSBiLnkoKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYikKLXsKLSAg
ICByZXR1cm4gYS54KCkgIT0gYi54KCkgfHwgYS55KCkgIT0gYi55KCk7Ci19Ci0KLWlubGluZSBG
cmFjdGlvbmFsTGF5b3V0UG9pbnQgdG9Qb2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYg
c2l6ZSkKLXsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KHNpemUud2lkdGgoKSwg
c2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSB0b1NpemUo
Y29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBhKQotewotICAgIHJldHVybiBGcmFjdGlvbmFs
TGF5b3V0U2l6ZShhLngoKSwgYS55KCkpOwotfQotCi1pbmxpbmUgSW50UG9pbnQgZmxvb3JlZElu
dFBvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcG9pbnQpCi17Ci0gICAgcmV0dXJu
IEludFBvaW50KHBvaW50LngoKS5mbG9vcigpLCBwb2ludC55KCkuZmxvb3IoKSk7Ci19Ci0KLWlu
bGluZSBJbnRQb2ludCByb3VuZGVkSW50UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50
JiBwb2ludCkKLXsKLSAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpLnJvdW5kKCksIHBvaW50
LnkoKS5yb3VuZCgpKTsKLX0KLQotaW5saW5lIEludFBvaW50IHJvdW5kZWRJbnRQb2ludChjb25z
dCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkKLXsKLSAgICByZXR1cm4gSW50UG9pbnQoc2l6
ZS53aWR0aCgpLnJvdW5kKCksIHNpemUuaGVpZ2h0KCkucm91bmQoKSk7Ci19Ci0KLWlubGluZSBJ
bnRQb2ludCBjZWlsZWRJbnRQb2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50
KQotewotICAgIHJldHVybiBJbnRQb2ludChwb2ludC54KCkuY2VpbCgpLCBwb2ludC55KCkuY2Vp
bCgpKTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBmbG9vcmVkRnJhY3Rpb25h
bExheW91dFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApCi17Ci0gICAgcmV0dXJuIEZyYWN0aW9u
YWxMYXlvdXRQb2ludChGcmFjdGlvbmFsTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Rmxvb3IocC54KCkp
LCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Rmxvb3IocC55KCkpKTsKLX0KLQotaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBjZWlsZWRGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29u
c3QgRmxvYXRQb2ludCYgcCkKLXsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KEZy
YWN0aW9uYWxMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKHAueCgpKSwgRnJhY3Rpb25hbExheW91
dFVuaXQ6OmZyb21GbG9hdENlaWwocC55KCkpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRnJhY3Rpb25hbExheW91dFBvaW50X2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVj
dC5jcHAJKHJldmlzaW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNDkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAq
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFJlY3Qu
aCIKLQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRV
bml0LmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotCi11c2luZyBzdGQ6Om1heDsKLXVzaW5nIHN0
ZDo6bWluOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZyYWN0aW9uYWxMYXlvdXRSZWN0OjpG
cmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCi0gICAgOiBtX2xvY2F0aW9u
KEZyYWN0aW9uYWxMYXlvdXRQb2ludChyLmxvY2F0aW9uKCkpKQotICAgICwgbV9zaXplKEZyYWN0
aW9uYWxMYXlvdXRTaXplKHIuc2l6ZSgpKSkKLXsKLX0KLQotYm9vbCBGcmFjdGlvbmFsTGF5b3V0
UmVjdDo6aW50ZXJzZWN0cyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgb3RoZXIpIGNvbnN0
Ci17Ci0gICAgLy8gQ2hlY2tpbmcgZW1wdGluZXNzIGhhbmRsZXMgbmVnYXRpdmUgd2lkdGhzIGFz
IHdlbGwgYXMgemVyby4KLSAgICByZXR1cm4gIWlzRW1wdHkoKSAmJiAhb3RoZXIuaXNFbXB0eSgp
Ci0gICAgICAgICYmIHgoKSA8IG90aGVyLm1heFgoKSAmJiBvdGhlci54KCkgPCBtYXhYKCkKLSAg
ICAgICAgJiYgeSgpIDwgb3RoZXIubWF4WSgpICYmIG90aGVyLnkoKSA8IG1heFkoKTsKLX0KLQot
Ym9vbCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6Y29udGFpbnMoY29uc3QgRnJhY3Rpb25hbExheW91
dFJlY3QmIG90aGVyKSBjb25zdAotewotICAgIHJldHVybiB4KCkgPD0gb3RoZXIueCgpICYmIG1h
eFgoKSA+PSBvdGhlci5tYXhYKCkKLSAgICAgICAgJiYgeSgpIDw9IG90aGVyLnkoKSAmJiBtYXhZ
KCkgPj0gb3RoZXIubWF4WSgpOwotfQotCi12b2lkIEZyYWN0aW9uYWxMYXlvdXRSZWN0OjppbnRl
cnNlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90aGVyKQotewotICAgIEZyYWN0aW9u
YWxMYXlvdXRQb2ludCBuZXdMb2NhdGlvbihtYXgoeCgpLCBvdGhlci54KCkpLCBtYXgoeSgpLCBv
dGhlci55KCkpKTsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbmV3TWF4UG9pbnQobWluKG1h
eFgoKSwgb3RoZXIubWF4WCgpKSwgbWluKG1heFkoKSwgb3RoZXIubWF4WSgpKSk7Ci0KLSAgICAv
LyBSZXR1cm4gYSBjbGVhbiBlbXB0eSByZWN0YW5nbGUgZm9yIG5vbi1pbnRlcnNlY3RpbmcgY2Fz
ZXMuCi0gICAgaWYgKG5ld0xvY2F0aW9uLngoKSA+PSBuZXdNYXhQb2ludC54KCkgfHwgbmV3TG9j
YXRpb24ueSgpID49IG5ld01heFBvaW50LnkoKSkgewotICAgICAgICBuZXdMb2NhdGlvbiA9IEZy
YWN0aW9uYWxMYXlvdXRQb2ludCgwLCAwKTsKLSAgICAgICAgbmV3TWF4UG9pbnQgPSBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQoMCwgMCk7Ci0gICAgfQotCi0gICAgbV9sb2NhdGlvbiA9IG5ld0xvY2F0
aW9uOwotICAgIG1fc2l6ZSA9IG5ld01heFBvaW50IC0gbmV3TG9jYXRpb247Ci19Ci0KLXZvaWQg
RnJhY3Rpb25hbExheW91dFJlY3Q6OnVuaXRlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBv
dGhlcikKLXsKLSAgICAvLyBIYW5kbGUgZW1wdHkgc3BlY2lhbCBjYXNlcyBmaXJzdC4KLSAgICBp
ZiAob3RoZXIuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGlzRW1wdHkoKSkg
ewotICAgICAgICAqdGhpcyA9IG90aGVyOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
RnJhY3Rpb25hbExheW91dFBvaW50IG5ld0xvY2F0aW9uKG1pbih4KCksIG90aGVyLngoKSksIG1p
bih5KCksIG90aGVyLnkoKSkpOwotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdNYXhQb2lu
dChtYXgobWF4WCgpLCBvdGhlci5tYXhYKCkpLCBtYXgobWF4WSgpLCBvdGhlci5tYXhZKCkpKTsK
LQotICAgIG1fbG9jYXRpb24gPSBuZXdMb2NhdGlvbjsKLSAgICBtX3NpemUgPSBuZXdNYXhQb2lu
dCAtIG5ld0xvY2F0aW9uOwotfQotCi12b2lkIEZyYWN0aW9uYWxMYXlvdXRSZWN0Ojp1bml0ZUlm
Tm9uWmVybyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgb3RoZXIpCi17Ci0gICAgLy8gSGFu
ZGxlIGVtcHR5IHNwZWNpYWwgY2FzZXMgZmlyc3QuCi0gICAgaWYgKCFvdGhlci53aWR0aCgpICYm
ICFvdGhlci5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghd2lkdGgoKSAmJiAh
aGVpZ2h0KCkpIHsKLSAgICAgICAgKnRoaXMgPSBvdGhlcjsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdMb2NhdGlvbihtaW4oeCgpLCBvdGhl
ci54KCkpLCBtaW4oeSgpLCBvdGhlci55KCkpKTsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQg
bmV3TWF4UG9pbnQobWF4KG1heFgoKSwgb3RoZXIubWF4WCgpKSwgbWF4KG1heFkoKSwgb3RoZXIu
bWF4WSgpKSk7Ci0KLSAgICBtX2xvY2F0aW9uID0gbmV3TG9jYXRpb247Ci0gICAgbV9zaXplID0g
bmV3TWF4UG9pbnQgLSBuZXdMb2NhdGlvbjsKLX0KLQotdm9pZCBGcmFjdGlvbmFsTGF5b3V0UmVj
dDo6c2NhbGUoZmxvYXQgcykKLXsKLSAgICBtX2xvY2F0aW9uLnNjYWxlKHMsIHMpOwotICAgIG1f
c2l6ZS5zY2FsZShzKTsKLX0KLQotRnJhY3Rpb25hbExheW91dFJlY3QgdW5pb25SZWN0KGNvbnN0
IFZlY3RvcjxGcmFjdGlvbmFsTGF5b3V0UmVjdD4mIHJlY3RzKQotewotICAgIEZyYWN0aW9uYWxM
YXlvdXRSZWN0IHJlc3VsdDsKLQotICAgIHNpemVfdCBjb3VudCA9IHJlY3RzLnNpemUoKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIHJlc3VsdC51bml0
ZShyZWN0c1tpXSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1JbnRSZWN0IGVuY2xvc2lu
Z0ludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIHJlY3QpCi17Ci0gICAgSW50UG9p
bnQgbG9jYXRpb24gPSBmbG9vcmVkSW50UG9pbnQocmVjdC5taW5YTWluWUNvcm5lcigpKTsKLSAg
ICBJbnRQb2ludCBtYXhQb2ludCA9IGNlaWxlZEludFBvaW50KHJlY3QubWF4WE1heFlDb3JuZXIo
KSk7Ci0KLSAgICByZXR1cm4gSW50UmVjdChsb2NhdGlvbiwgbWF4UG9pbnQgLSBsb2NhdGlvbik7
Ci19Ci0KLUZyYWN0aW9uYWxMYXlvdXRSZWN0IGVuY2xvc2luZ0ZyYWN0aW9uYWxMYXlvdXRSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQot
ICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBsb2NhdGlvbiA9IGZsb29yZWRGcmFjdGlvbmFsTGF5
b3V0UG9pbnQocmVjdC5taW5YTWluWUNvcm5lcigpKTsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9p
bnQgbWF4UG9pbnQgPSBjZWlsZWRGcmFjdGlvbmFsTGF5b3V0UG9pbnQocmVjdC5tYXhYTWF4WUNv
cm5lcigpKTsKLQotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UmVjdChsb2NhdGlvbiwgbWF4
UG9pbnQgLSBsb2NhdGlvbik7Ci0jZWxzZQotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHJl
Y3QpOwotI2VuZGlmCi19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJl
Y3QuaAkocmV2aXNpb24gMTMzNzY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRnJhY3Rpb25hbExheW91dFJlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyMjcgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIEZyYWN0aW9uYWxMYXlvdXRSZWN0X2gKLSNkZWZpbmUgRnJhY3Rpb25hbExheW91
dFJlY3RfaAotCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oIgotI2luY2x1
ZGUgIkZyYWN0aW9uYWxMYXlvdXRQb2ludC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+Ci0KLSNpZiBQTEFURk9STShRVCkKLSNpbmNsdWRlIDxxZ2xvYmFs
Lmg+Ci1RVF9CRUdJTl9OQU1FU1BBQ0UKLWNsYXNzIFFSZWN0OwotY2xhc3MgUVJlY3RGOwotUVRf
RU5EX05BTUVTUEFDRQotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRmxv
YXRSZWN0OwotCi1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0UmVjdCB7Ci1wdWJsaWM6Ci0gICAgRnJh
Y3Rpb25hbExheW91dFJlY3QoKSB7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBG
cmFjdGlvbmFsTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6
ZSYgc2l6ZSkKLSAgICAgICAgOiBtX2xvY2F0aW9uKGxvY2F0aW9uKSwgbV9zaXplKHNpemUpIHsg
fQotICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0KEZyYWN0aW9uYWxMYXlvdXRVbml0IHgsIEZyYWN0
aW9uYWxMYXlvdXRVbml0IHksIEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoLCBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBoZWlnaHQpCi0gICAgICAgIDogbV9sb2NhdGlvbihGcmFjdGlvbmFsTGF5b3V0
UG9pbnQoeCwgeSkpLCBtX3NpemUoRnJhY3Rpb25hbExheW91dFNpemUod2lkdGgsIGhlaWdodCkp
IHsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UG9pbnQmIGxvY2F0aW9u
LCBjb25zdCBGbG9hdFNpemUmIHNpemUpCi0gICAgICAgIDogbV9sb2NhdGlvbihsb2NhdGlvbiks
IG1fc2l6ZShzaXplKSB7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBJbnRSZWN0
JiByZWN0KSA6IG1fbG9jYXRpb24ocmVjdC5sb2NhdGlvbigpKSwgbV9zaXplKHJlY3Quc2l6ZSgp
KSB7IH0KLQotICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQotICAgICAg
ICAKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBt
X2xvY2F0aW9uOyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZTsgfQotCi0gICAgSW50UG9pbnQgcGl4ZWxTbmFwcGVkTG9jYXRpb24oKSBjb25z
dCB7IHJldHVybiByb3VuZGVkSW50UG9pbnQobV9sb2NhdGlvbik7IH0KLSAgICBJbnRTaXplIHBp
eGVsU25hcHBlZFNpemUoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKHNuYXBTaXplVG9QaXhlbCht
X3NpemUud2lkdGgoKSwgbV9sb2NhdGlvbi54KCkpLCBzbmFwU2l6ZVRvUGl4ZWwobV9zaXplLmhl
aWdodCgpLCBtX2xvY2F0aW9uLnkoKSkpOyB9Ci0KLSAgICB2b2lkIHNldExvY2F0aW9uKGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgbG9jYXRpb24pIHsgbV9sb2NhdGlvbiA9IGxvY2F0aW9u
OyB9Ci0gICAgdm9pZCBzZXRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7
IG1fc2l6ZSA9IHNpemU7IH0KLQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHgoKSBjb25zdCB7
IHJldHVybiBtX2xvY2F0aW9uLngoKTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHkoKSBj
b25zdCB7IHJldHVybiBtX2xvY2F0aW9uLnkoKTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
IG1heFgoKSBjb25zdCB7IHJldHVybiB4KCkgKyB3aWR0aCgpOyB9Ci0gICAgRnJhY3Rpb25hbExh
eW91dFVuaXQgbWF4WSgpIGNvbnN0IHsgcmV0dXJuIHkoKSArIGhlaWdodCgpOyB9Ci0gICAgRnJh
Y3Rpb25hbExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3NpemUud2lkdGgoKTsg
fQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZS5oZWlnaHQoKTsgfQotCi0gICAgaW50IHBpeGVsU25hcHBlZFgoKSBjb25zdCB7IHJldHVybiB4
KCkucm91bmQoKTsgfQotICAgIGludCBwaXhlbFNuYXBwZWRZKCkgY29uc3QgeyByZXR1cm4geSgp
LnJvdW5kKCk7IH0KLSAgICBpbnQgcGl4ZWxTbmFwcGVkV2lkdGgoKSBjb25zdCB7IHJldHVybiBz
bmFwU2l6ZVRvUGl4ZWwod2lkdGgoKSwgeCgpKTsgfQotICAgIGludCBwaXhlbFNuYXBwZWRIZWln
aHQoKSBjb25zdCB7IHJldHVybiBzbmFwU2l6ZVRvUGl4ZWwoaGVpZ2h0KCksIHkoKSk7IH0KLSAg
ICBpbnQgcGl4ZWxTbmFwcGVkTWF4WCgpIGNvbnN0IHsgcmV0dXJuIChtX2xvY2F0aW9uLngoKSAr
IG1fc2l6ZS53aWR0aCgpKS5yb3VuZCgpOyB9Ci0gICAgaW50IHBpeGVsU25hcHBlZE1heFkoKSBj
b25zdCB7IHJldHVybiAobV9sb2NhdGlvbi55KCkgKyBtX3NpemUuaGVpZ2h0KCkpLnJvdW5kKCk7
IH0KLQotICAgIHZvaWQgc2V0WChGcmFjdGlvbmFsTGF5b3V0VW5pdCB4KSB7IG1fbG9jYXRpb24u
c2V0WCh4KTsgfQotICAgIHZvaWQgc2V0WShGcmFjdGlvbmFsTGF5b3V0VW5pdCB5KSB7IG1fbG9j
YXRpb24uc2V0WSh5KTsgfQotICAgIHZvaWQgc2V0V2lkdGgoRnJhY3Rpb25hbExheW91dFVuaXQg
d2lkdGgpIHsgbV9zaXplLnNldFdpZHRoKHdpZHRoKTsgfQotICAgIHZvaWQgc2V0SGVpZ2h0KEZy
YWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCkgeyBtX3NpemUuc2V0SGVpZ2h0KGhlaWdodCk7IH0K
LQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0K
LQotICAgIC8vIE5PVEU6IFRoZSByZXN1bHQgaXMgcm91bmRlZCB0byBpbnRlZ2VyIHZhbHVlcywg
YW5kIHRodXMgbWF5IGJlIG5vdCB0aGUgZXhhY3QKLSAgICAvLyBjZW50ZXIgcG9pbnQuCi0gICAg
RnJhY3Rpb25hbExheW91dFBvaW50IGNlbnRlcigpIGNvbnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxM
YXlvdXRQb2ludCh4KCkgKyB3aWR0aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAyKTsgfQotCi0g
ICAgdm9pZCBtb3ZlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1fbG9jYXRp
b24gKz0gc2l6ZTsgfSAKLSAgICB2b2lkIG1vdmVCeShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9p
bnQmIG9mZnNldCkgeyBtX2xvY2F0aW9uLm1vdmUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7IH0K
LSAgICB2b2lkIG1vdmUoRnJhY3Rpb25hbExheW91dFVuaXQgZHgsIEZyYWN0aW9uYWxMYXlvdXRV
bml0IGR5KSB7IG1fbG9jYXRpb24ubW92ZShkeCwgZHkpOyB9IAotCi0gICAgdm9pZCBleHBhbmQo
Y29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpIHsgbV9zaXplICs9IHNpemU7IH0KLSAg
ICB2b2lkIGV4cGFuZChjb25zdCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50JiBib3gpCi0gICAg
ewotICAgICAgICBtX2xvY2F0aW9uLm1vdmUoLWJveC5sZWZ0KCksIC1ib3gudG9wKCkpOwotICAg
ICAgICBtX3NpemUuZXhwYW5kKGJveC5sZWZ0KCkgKyBib3gucmlnaHQoKSwgYm94LnRvcCgpICsg
Ym94LmJvdHRvbSgpKTsKLSAgICB9Ci0gICAgdm9pZCBleHBhbmQoRnJhY3Rpb25hbExheW91dFVu
aXQgZHcsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRoKSB7IG1fc2l6ZS5leHBhbmQoZHcsIGRoKTsg
fQotICAgIHZvaWQgY29udHJhY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpIHsg
bV9zaXplIC09IHNpemU7IH0KLSAgICB2b2lkIGNvbnRyYWN0KEZyYWN0aW9uYWxMYXlvdXRVbml0
IGR3LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkaCkgeyBtX3NpemUuZXhwYW5kKC1kdywgLWRoKTsg
fQotCi0gICAgdm9pZCBzaGlmdFhFZGdlVG8oRnJhY3Rpb25hbExheW91dFVuaXQgZWRnZSkKLSAg
ICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRlbHRhID0gZWRnZSAtIHgoKTsKLSAg
ICAgICAgc2V0WChlZGdlKTsKLSAgICAgICAgc2V0V2lkdGgoc3RkOjptYXg8RnJhY3Rpb25hbExh
eW91dFVuaXQ+KDAsIHdpZHRoKCkgLSBkZWx0YSkpOwotICAgIH0KLSAgICB2b2lkIHNoaWZ0TWF4
WEVkZ2VUbyhGcmFjdGlvbmFsTGF5b3V0VW5pdCBlZGdlKQotICAgIHsKLSAgICAgICAgRnJhY3Rp
b25hbExheW91dFVuaXQgZGVsdGEgPSBlZGdlIC0gbWF4WCgpOwotICAgICAgICBzZXRXaWR0aChz
dGQ6Om1heDxGcmFjdGlvbmFsTGF5b3V0VW5pdD4oMCwgd2lkdGgoKSArIGRlbHRhKSk7Ci0gICAg
fQotICAgIHZvaWQgc2hpZnRZRWRnZVRvKEZyYWN0aW9uYWxMYXlvdXRVbml0IGVkZ2UpCi0gICAg
ewotICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkZWx0YSA9IGVkZ2UgLSB5KCk7Ci0gICAg
ICAgIHNldFkoZWRnZSk7Ci0gICAgICAgIHNldEhlaWdodChzdGQ6Om1heDxGcmFjdGlvbmFsTGF5
b3V0VW5pdD4oMCwgaGVpZ2h0KCkgLSBkZWx0YSkpOwotICAgIH0KLSAgICB2b2lkIHNoaWZ0TWF4
WUVkZ2VUbyhGcmFjdGlvbmFsTGF5b3V0VW5pdCBlZGdlKQotICAgIHsKLSAgICAgICAgRnJhY3Rp
b25hbExheW91dFVuaXQgZGVsdGEgPSBlZGdlIC0gbWF4WSgpOwotICAgICAgICBzZXRIZWlnaHQo
c3RkOjptYXg8RnJhY3Rpb25hbExheW91dFVuaXQ+KDAsIGhlaWdodCgpICsgZGVsdGEpKTsKLSAg
ICB9Ci0KLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbWluWE1pbllDb3JuZXIoKSBjb25zdCB7
IHJldHVybiBtX2xvY2F0aW9uOyB9IC8vIHR5cGljYWxseSB0b3BMZWZ0Ci0gICAgRnJhY3Rpb25h
bExheW91dFBvaW50IG1heFhNaW5ZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gRnJhY3Rpb25hbExh
eW91dFBvaW50KG1fbG9jYXRpb24ueCgpICsgbV9zaXplLndpZHRoKCksIG1fbG9jYXRpb24ueSgp
KTsgfSAvLyB0eXBpY2FsbHkgdG9wUmlnaHQKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbWlu
WE1heFlDb3JuZXIoKSBjb25zdCB7IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQobV9sb2Nh
dGlvbi54KCksIG1fbG9jYXRpb24ueSgpICsgbV9zaXplLmhlaWdodCgpKTsgfSAvLyB0eXBpY2Fs
bHkgYm90dG9tTGVmdAotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBtYXhYTWF4WUNvcm5lcigp
IGNvbnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChtX2xvY2F0aW9uLngoKSArIG1f
c2l6ZS53aWR0aCgpLCBtX2xvY2F0aW9uLnkoKSArIG1fc2l6ZS5oZWlnaHQoKSk7IH0gLy8gdHlw
aWNhbGx5IGJvdHRvbVJpZ2h0Ci0gICAgCi0gICAgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRSZWN0JikgY29uc3Q7Ci0gICAgYm9vbCBjb250YWlucyhjb25zdCBGcmFjdGlv
bmFsTGF5b3V0UmVjdCYpIGNvbnN0OwotCi0gICAgLy8gVGhpcyBjaGVja3MgdG8gc2VlIGlmIHRo
ZSByZWN0IGNvbnRhaW5zIHgseSBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuCi0gICAgLy8gRXF1
aXZhbGVudCB0byBjaGVja2luZyBpZiB0aGUgcmVjdCBjb250YWlucyBhIDF4MSByZWN0IGJlbG93
IGFuZCB0byB0aGUgcmlnaHQgb2YgKHB4LHB5KS4KLSAgICBib29sIGNvbnRhaW5zKEZyYWN0aW9u
YWxMYXlvdXRVbml0IHB4LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBweSkgY29uc3QKLSAgICAgICAg
eyByZXR1cm4gcHggPj0geCgpICYmIHB4IDwgbWF4WCgpICYmIHB5ID49IHkoKSAmJiBweSA8IG1h
eFkoKTsgfQotICAgIGJvb2wgY29udGFpbnMoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBw
b2ludCkgY29uc3QgeyByZXR1cm4gY29udGFpbnMocG9pbnQueCgpLCBwb2ludC55KCkpOyB9Ci0K
LSAgICB2b2lkIGludGVyc2VjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpOwotICAgIHZv
aWQgdW5pdGUoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKTsKLSAgICB2b2lkIHVuaXRlSWZO
b25aZXJvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0Jik7Ci0KLSAgICB2b2lkIGluZmxhdGVY
KEZyYWN0aW9uYWxMYXlvdXRVbml0IGR4KQotICAgIHsKLSAgICAgICAgbV9sb2NhdGlvbi5zZXRY
KG1fbG9jYXRpb24ueCgpIC0gZHgpOwotICAgICAgICBtX3NpemUuc2V0V2lkdGgobV9zaXplLndp
ZHRoKCkgKyBkeCArIGR4KTsKLSAgICB9Ci0gICAgdm9pZCBpbmZsYXRlWShGcmFjdGlvbmFsTGF5
b3V0VW5pdCBkeSkKLSAgICB7Ci0gICAgICAgIG1fbG9jYXRpb24uc2V0WShtX2xvY2F0aW9uLnko
KSAtIGR5KTsKLSAgICAgICAgbV9zaXplLnNldEhlaWdodChtX3NpemUuaGVpZ2h0KCkgKyBkeSAr
IGR5KTsKLSAgICB9Ci0gICAgdm9pZCBpbmZsYXRlKEZyYWN0aW9uYWxMYXlvdXRVbml0IGQpIHsg
aW5mbGF0ZVgoZCk7IGluZmxhdGVZKGQpOyB9Ci0gICAgdm9pZCBzY2FsZShmbG9hdCBzKTsKLQot
ICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0IHRyYW5zcG9zZWRSZWN0KCkgY29uc3QgeyByZXR1cm4g
RnJhY3Rpb25hbExheW91dFJlY3QobV9sb2NhdGlvbi50cmFuc3Bvc2VkUG9pbnQoKSwgbV9zaXpl
LnRyYW5zcG9zZWRTaXplKCkpOyB9Ci0KLSAgICBzdGF0aWMgRnJhY3Rpb25hbExheW91dFJlY3Qg
aW5maW5pdGVSZWN0KCkKLSAgICB7Ci0gICAgICAgIC8vIFJldHVybiBhIHJlY3QgdGhhdCBpcyBz
bGlnaHRseSBzbWFsbGVyIHRoYW4gdGhlIHRydWUgbWF4IHJlY3QgdG8gYWxsb3cgcGl4ZWxTbmFw
cGluZyB0byByb3VuZCB1cCB0byB0aGUgbmVhcmVzdCBJbnRSZWN0IHdpdGhvdXQgb3ZlcmZsb3dp
bmcuCi0gICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UmVjdChGcmFjdGlvbmFsTGF5b3V0
VW5pdDo6bmVhcmx5TWluKCkgLyAyLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bmVhcmx5TWluKCkg
LyAyLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bmVhcmx5TWF4KCksIEZyYWN0aW9uYWxMYXlvdXRV
bml0OjpuZWFybHlNYXgoKSk7Ci0gICAgfQotCi0jaWYgUExBVEZPUk0oUVQpCi0gICAgZXhwbGlj
aXQgRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgUVJlY3QmKTsKLSAgICBleHBsaWNpdCBGcmFj
dGlvbmFsTGF5b3V0UmVjdChjb25zdCBRUmVjdEYmKTsKLSAgICBvcGVyYXRvciBRUmVjdEYoKSBj
b25zdDsKLSNlbmRpZgotCi1wcml2YXRlOgotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBtX2xv
Y2F0aW9uOwotICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplIG1fc2l6ZTsKLX07Ci0KLWlubGluZSBG
cmFjdGlvbmFsTGF5b3V0UmVjdCBpbnRlcnNlY3Rpb24oY29uc3QgRnJhY3Rpb25hbExheW91dFJl
Y3QmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBiKQotewotICAgIEZyYWN0aW9uYWxM
YXlvdXRSZWN0IGMgPSBhOwotICAgIGMuaW50ZXJzZWN0KGIpOwotICAgIHJldHVybiBjOwotfQot
Ci1pbmxpbmUgRnJhY3Rpb25hbExheW91dFJlY3QgdW5pb25SZWN0KGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRSZWN0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYikKLXsKLSAgICBGcmFj
dGlvbmFsTGF5b3V0UmVjdCBjID0gYTsKLSAgICBjLnVuaXRlKGIpOwotICAgIHJldHVybiBjOwot
fQotCi1GcmFjdGlvbmFsTGF5b3V0UmVjdCB1bmlvblJlY3QoY29uc3QgVmVjdG9yPEZyYWN0aW9u
YWxMYXlvdXRSZWN0PiYpOwotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRSZWN0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYikKLXsKLSAgICBy
ZXR1cm4gYS5sb2NhdGlvbigpID09IGIubG9jYXRpb24oKSAmJiBhLnNpemUoKSA9PSBiLnNpemUo
KTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVj
dCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGIpCi17Ci0gICAgcmV0dXJuIGEubG9j
YXRpb24oKSAhPSBiLmxvY2F0aW9uKCkgfHwgYS5zaXplKCkgIT0gYi5zaXplKCk7Ci19Ci0KLWlu
bGluZSBJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJl
Y3QmIHJlY3QpCi17Ci0jaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICByZXR1cm4gSW50
UmVjdChyb3VuZGVkSW50UG9pbnQocmVjdC5sb2NhdGlvbigpKSwgSW50U2l6ZShzbmFwU2l6ZVRv
UGl4ZWwocmVjdC53aWR0aCgpLCByZWN0LngoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcFNpemVUb1BpeGVsKHJlY3Qu
aGVpZ2h0KCksIHJlY3QueSgpKSkpOwotCi0jZWxzZQotICAgIHJldHVybiBJbnRSZWN0KHJlY3Qp
OwotI2VuZGlmCi19Ci0KLUludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGcmFjdGlvbmFs
TGF5b3V0UmVjdCYpOwotRnJhY3Rpb25hbExheW91dFJlY3QgZW5jbG9zaW5nRnJhY3Rpb25hbExh
eW91dFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEZyYWN0aW9uYWxMYXlvdXRSZWN0X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRTaXplLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFNpemUuaAkocmV2
aXNpb24gMTMzNzY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rp
b25hbExheW91dFNpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxNzggKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IEZyYWN0aW9uYWxMYXlvdXRTaXplX2gKLSNkZWZpbmUgRnJhY3Rpb25hbExheW91dFNpemVfaAot
Ci0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFVuaXQu
aCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0KLSNpZiBQTEFURk9STShRVCkKLSNpbmNsdWRlIDxx
Z2xvYmFsLmg+Ci1RVF9CRUdJTl9OQU1FU1BBQ0UKLWNsYXNzIFFTaXplOwotY2xhc3MgUVNpemVG
OwotUVRfRU5EX05BTUVTUEFDRQotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgRnJhY3Rpb25hbExheW91dFBvaW50OwotCi1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0U2l6ZSB7
Ci1wdWJsaWM6Ci0gICAgRnJhY3Rpb25hbExheW91dFNpemUoKSA6IG1fd2lkdGgoMCksIG1faGVp
Z2h0KDApIHsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0IEludFNpemUmIHNpemUp
IDogbV93aWR0aChzaXplLndpZHRoKCkpLCBtX2hlaWdodChzaXplLmhlaWdodCgpKSB7IH0KLSAg
ICBGcmFjdGlvbmFsTGF5b3V0U2l6ZShGcmFjdGlvbmFsTGF5b3V0VW5pdCB3aWR0aCwgRnJhY3Rp
b25hbExheW91dFVuaXQgaGVpZ2h0KSA6IG1fd2lkdGgod2lkdGgpLCBtX2hlaWdodChoZWlnaHQp
IHsgfQotCi0gICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFNpemUoY29uc3QgRmxvYXRTaXpl
JiBzaXplKSA6IG1fd2lkdGgoc2l6ZS53aWR0aCgpKSwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkg
eyB9Ci0gICAgCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVy
biBtX3dpZHRoOyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gbV9oZWlnaHQ7IH0KLQotICAgIHZvaWQgc2V0V2lkdGgoRnJhY3Rpb25hbExheW91dFVu
aXQgd2lkdGgpIHsgbV93aWR0aCA9IHdpZHRoOyB9Ci0gICAgdm9pZCBzZXRIZWlnaHQoRnJhY3Rp
b25hbExheW91dFVuaXQgaGVpZ2h0KSB7IG1faGVpZ2h0ID0gaGVpZ2h0OyB9Ci0KLSAgICBib29s
IGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoIDw9IDAgfHwgbV9oZWlnaHQgPD0gMDsg
fQotICAgIGJvb2wgaXNaZXJvKCkgY29uc3QgeyByZXR1cm4gIW1fd2lkdGggJiYgIW1faGVpZ2h0
OyB9Ci0KLSAgICBmbG9hdCBhc3BlY3RSYXRpbygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PGZsb2F0PihtX3dpZHRoKSAvIHN0YXRpY19jYXN0PGZsb2F0PihtX2hlaWdodCk7IH0KLSAgICAK
LSAgICB2b2lkIGV4cGFuZChGcmFjdGlvbmFsTGF5b3V0VW5pdCB3aWR0aCwgRnJhY3Rpb25hbExh
eW91dFVuaXQgaGVpZ2h0KQotICAgIHsKLSAgICAgICAgbV93aWR0aCArPSB3aWR0aDsKLSAgICAg
ICAgbV9oZWlnaHQgKz0gaGVpZ2h0OwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNjYWxlKGZsb2F0
IHNjYWxlKQotICAgIHsKLSAgICAgICAgbV93aWR0aCAqPSBzY2FsZTsKLSAgICAgICAgbV9oZWln
aHQgKj0gc2NhbGU7Ci0gICAgfQotCi0gICAgdm9pZCBzY2FsZShmbG9hdCB3aWR0aFNjYWxlLCBm
bG9hdCBoZWlnaHRTY2FsZSkKLSAgICB7Ci0gICAgICAgIG1fd2lkdGggKj0gd2lkdGhTY2FsZTsK
LSAgICAgICAgbV9oZWlnaHQgKj0gaGVpZ2h0U2NhbGU7Ci0gICAgfQotICAgIAotICAgIEZyYWN0
aW9uYWxMYXlvdXRTaXplIGV4cGFuZGVkVG8oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIG90
aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKG1f
d2lkdGggPiBvdGhlci5tX3dpZHRoID8gbV93aWR0aCA6IG90aGVyLm1fd2lkdGgsCi0gICAgICAg
ICAgICBtX2hlaWdodCA+IG90aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdo
dCk7Ci0gICAgfQotCi0gICAgRnJhY3Rpb25hbExheW91dFNpemUgc2hydW5rVG8oY29uc3QgRnJh
Y3Rpb25hbExheW91dFNpemUmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIEZy
YWN0aW9uYWxMYXlvdXRTaXplKG1fd2lkdGggPCBvdGhlci5tX3dpZHRoID8gbV93aWR0aCA6IG90
aGVyLm1fd2lkdGgsCi0gICAgICAgICAgICBtX2hlaWdodCA8IG90aGVyLm1faGVpZ2h0ID8gbV9o
ZWlnaHQgOiBvdGhlci5tX2hlaWdodCk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGFtcE5lZ2F0aXZl
VG9aZXJvKCkKLSAgICB7Ci0gICAgICAgICp0aGlzID0gZXhwYW5kZWRUbyhGcmFjdGlvbmFsTGF5
b3V0U2l6ZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjbGFtcFRvTWluaW11bVNpemUoY29u
c3QgRnJhY3Rpb25hbExheW91dFNpemUmIG1pbmltdW1TaXplKQotICAgIHsKLSAgICAgICAgaWYg
KG1fd2lkdGggPCBtaW5pbXVtU2l6ZS53aWR0aCgpKQotICAgICAgICAgICAgbV93aWR0aCA9IG1p
bmltdW1TaXplLndpZHRoKCk7Ci0gICAgICAgIGlmIChtX2hlaWdodCA8IG1pbmltdW1TaXplLmhl
aWdodCgpKQotICAgICAgICAgICAgbV9oZWlnaHQgPSBtaW5pbXVtU2l6ZS5oZWlnaHQoKTsKLSAg
ICB9Ci0KLSAgICBGcmFjdGlvbmFsTGF5b3V0U2l6ZSB0cmFuc3Bvc2VkU2l6ZSgpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUobV9oZWlnaHQsIG1fd2lk
dGgpOwotICAgIH0KLQotI2lmIFBMQVRGT1JNKFFUKQotICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxM
YXlvdXRTaXplKGNvbnN0IFFTaXplJik7Ci0gICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFNp
emUoY29uc3QgUVNpemVGJik7Ci0gICAgb3BlcmF0b3IgUVNpemVGKCkgY29uc3Q7Ci0jZW5kaWYK
LQotcHJpdmF0ZToKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtX3dpZHRoLCBtX2hlaWdodDsK
LX07Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgb3BlcmF0b3IrPShGcmFjdGlvbmFs
TGF5b3V0U2l6ZSYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCi17Ci0gICAgYS5z
ZXRXaWR0aChhLndpZHRoKCkgKyBiLndpZHRoKCkpOwotICAgIGEuc2V0SGVpZ2h0KGEuaGVpZ2h0
KCkgKyBiLmhlaWdodCgpKTsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5lIEZyYWN0aW9uYWxM
YXlvdXRTaXplJiBvcGVyYXRvci09KEZyYWN0aW9uYWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFj
dGlvbmFsTGF5b3V0U2l6ZSYgYikKLXsKLSAgICBhLnNldFdpZHRoKGEud2lkdGgoKSAtIGIud2lk
dGgoKSk7Ci0gICAgYS5zZXRIZWlnaHQoYS5oZWlnaHQoKSAtIGIuaGVpZ2h0KCkpOwotICAgIHJl
dHVybiBhOwotfQotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFNpemUgb3BlcmF0b3IrKGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikK
LXsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUoYS53aWR0aCgpICsgYi53aWR0aCgp
LCBhLmhlaWdodCgpICsgYi5oZWlnaHQoKSk7Ci19Ci0KLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0
U2l6ZSBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRTaXplJiBiKQotewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShh
LndpZHRoKCkgLSBiLndpZHRoKCksIGEuaGVpZ2h0KCkgLSBiLmhlaWdodCgpKTsKLX0KLQotaW5s
aW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplIG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0
U2l6ZSYgc2l6ZSkKLXsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUoLXNpemUud2lk
dGgoKSwgLXNpemUuaGVpZ2h0KCkpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikK
LXsKLSAgICByZXR1cm4gYS53aWR0aCgpID09IGIud2lkdGgoKSAmJiBhLmhlaWdodCgpID09IGIu
aGVpZ2h0KCk7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJhY3Rpb25hbExh
eW91dFNpemUmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQotewotICAgIHJldHVy
biBhLndpZHRoKCkgIT0gYi53aWR0aCgpIHx8IGEuaGVpZ2h0KCkgIT0gYi5oZWlnaHQoKTsKLX0K
LQotaW5saW5lIEludFNpemUgZmxvb3JlZEludFNpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFNp
emUmIHMpCi17Ci0gICAgcmV0dXJuIEludFNpemUocy53aWR0aCgpLmZsb29yKCksIHMuaGVpZ2h0
KCkuZmxvb3IoKSk7Ci19Ci0KLWlubGluZSBJbnRTaXplIHJvdW5kZWRJbnRTaXplKGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRTaXplJiBzKQotewotICAgIHJldHVybiBJbnRTaXplKHMud2lkdGgoKS5y
b3VuZCgpLCBzLmhlaWdodCgpLnJvdW5kKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBGcmFjdGlvbmFsTGF5b3V0U2l6ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAkocmV2aXNpb24g
MTMzNzY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJGbG9hdFBv
aW50LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTGF5
b3V0UmVjdC5oIgogI2luY2x1ZGUgIlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgogI2luY2x1
ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ckFuaW1hdGlvbi5jcHAJKHJldmlzaW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMiw3ICsyMiw3IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1
ZGUgIkdyYXBoaWNzTGF5ZXJBbmltYXRpb24uaCIKIAotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlv
dXRTaXplLmgiCisjaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgogI2luY2x1ZGUgIlVuaXRCZXppZXIu
aCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAJKHJldmlzaW9uIDEzMzc2NCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw4ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW50UmVj
dC5oIgogCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFJlY3QuaCIKICNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgog
CiB1c2luZyBzdGQ6Om1heDsKQEAgLTQxLDcgKzQxLDcgQEAgSW50UmVjdDo6SW50UmVjdChjb25z
dCBGbG9hdFJlY3QmIHIpCiB7CiB9CiAKLUludFJlY3Q6OkludFJlY3QoY29uc3QgRnJhY3Rpb25h
bExheW91dFJlY3QmIHIpCitJbnRSZWN0OjpJbnRSZWN0KGNvbnN0IExheW91dFJlY3QmIHIpCiAg
ICAgOiBtX2xvY2F0aW9uKHIueCgpLCByLnkoKSkKICAgICAsIG1fc2l6ZShyLndpZHRoKCksIHIu
aGVpZ2h0KCkpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRS
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50
UmVjdC5oCShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbnRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgc3RydWN0IFNr
SVJlY3Q7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEZy
YWN0aW9uYWxMYXlvdXRSZWN0OworY2xhc3MgTGF5b3V0UmVjdDsKIAogY2xhc3MgSW50UmVjdCB7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgOiBtX2xvY2F0aW9uKEludFBvaW50KHgsIHkpKSwgbV9zaXplKEludFNpemUod2lk
dGgsIGhlaWdodCkpIHsgfQogCiAgICAgZXhwbGljaXQgSW50UmVjdChjb25zdCBGbG9hdFJlY3Qm
KTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKLSAgICBleHBs
aWNpdCBJbnRSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0Jik7IC8vIGRvbid0IGRvIHRo
aXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CisgICAgZXhwbGljaXQgSW50UmVjdChjb25z
dCBMYXlvdXRSZWN0Jik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxv
c3N5CiAgICAgICAgIAogICAgIEludFBvaW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9s
b2NhdGlvbjsgfQogICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRC
b3hFeHRlbnQuY3BwCShyZXZpc2lvbiAxMzM1MTcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuY3BwOjEzMzUxNykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dEJveEV4dGVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitG
cmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Ojpsb2dpY2FsVG9w
KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAoreworICAgIHJldHVybiBpc0hvcml6b250
YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX3RvcCA6IG1fbGVmdDsKK30KKworRnJhY3Rp
b25hbExheW91dFVuaXQgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6bG9naWNhbEJvdHRvbShX
cml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9ib3R0b20gOiBtX3JpZ2h0OworfQorCitGcmFj
dGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Ojpsb2dpY2FsTGVmdChX
cml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9sZWZ0IDogbV90b3A7Cit9CisKK0ZyYWN0aW9u
YWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmxvZ2ljYWxSaWdodChXcml0
aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9yaWdodCA6IG1fYm90dG9tOworfQorCitGcmFjdGlv
bmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpiZWZvcmUoV3JpdGluZ01v
ZGUgd3JpdGluZ01vZGUpIGNvbnN0Cit7CisgICAgc3dpdGNoICh3cml0aW5nTW9kZSkgeworICAg
IGNhc2UgVG9wVG9Cb3R0b21Xcml0aW5nTW9kZToKKyAgICAgICAgcmV0dXJuIG1fdG9wOworICAg
IGNhc2UgQm90dG9tVG9Ub3BXcml0aW5nTW9kZToKKyAgICAgICAgcmV0dXJuIG1fYm90dG9tOwor
ICAgIGNhc2UgTGVmdFRvUmlnaHRXcml0aW5nTW9kZToKKyAgICAgICAgcmV0dXJuIG1fbGVmdDsK
KyAgICBjYXNlIFJpZ2h0VG9MZWZ0V3JpdGluZ01vZGU6CisgICAgICAgIHJldHVybiBtX3JpZ2h0
OworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbV90b3A7Cit9
CisKK0ZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmFmdGVy
KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAoreworICAgIHN3aXRjaCAod3JpdGluZ01v
ZGUpIHsKKyAgICBjYXNlIFRvcFRvQm90dG9tV3JpdGluZ01vZGU6CisgICAgICAgIHJldHVybiBt
X2JvdHRvbTsKKyAgICBjYXNlIEJvdHRvbVRvVG9wV3JpdGluZ01vZGU6CisgICAgICAgIHJldHVy
biBtX3RvcDsKKyAgICBjYXNlIExlZnRUb1JpZ2h0V3JpdGluZ01vZGU6CisgICAgICAgIHJldHVy
biBtX3JpZ2h0OworICAgIGNhc2UgUmlnaHRUb0xlZnRXcml0aW5nTW9kZToKKyAgICAgICAgcmV0
dXJuIG1fbGVmdDsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IG1fYm90dG9tOworfQorCitGcmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94
RXh0ZW50OjpzdGFydChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJl
Y3Rpb24pIGNvbnN0Cit7CisgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdN
b2RlKSkKKyAgICAgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSA/
IG1fbGVmdCA6IG1fcmlnaHQ7CisgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGly
ZWN0aW9uKSA/IG1fdG9wIDogbV9ib3R0b207Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRVbml0IEZy
YWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmVuZChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4
dERpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0Cit7CisgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKHdyaXRpbmdNb2RlKSkKKyAgICAgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oZGlyZWN0aW9uKSA/IG1fcmlnaHQgOiBtX2xlZnQ7CisgICAgcmV0dXJuIGlzTGVmdFRvUmln
aHREaXJlY3Rpb24oZGlyZWN0aW9uKSA/IG1fYm90dG9tIDogbV90b3A7Cit9CisKK3ZvaWQgRnJh
Y3Rpb25hbExheW91dEJveEV4dGVudDo6c2V0QmVmb3JlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2Rl
LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCB2YWx1ZSkKK3sKKyAgICBzd2l0Y2ggKHdyaXRpbmdNb2Rl
KSB7CisgICAgY2FzZSBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlOgorICAgICAgICBtX3RvcCA9IHZh
bHVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJvdHRvbVRvVG9wV3JpdGluZ01vZGU6Cisg
ICAgICAgIG1fYm90dG9tID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGVmdFRv
UmlnaHRXcml0aW5nTW9kZToKKyAgICAgICAgbV9sZWZ0ID0gdmFsdWU7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUmlnaHRUb0xlZnRXcml0aW5nTW9kZToKKyAgICAgICAgbV9yaWdodCA9IHZh
bHVlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgbV90b3AgPSB2YWx1ZTsKKyAgICB9Cit9CisKK3ZvaWQgRnJhY3Rp
b25hbExheW91dEJveEV4dGVudDo6c2V0QWZ0ZXIoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIEZy
YWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKQoreworICAgIHN3aXRjaCAod3JpdGluZ01vZGUpIHsK
KyAgICBjYXNlIFRvcFRvQm90dG9tV3JpdGluZ01vZGU6CisgICAgICAgIG1fYm90dG9tID0gdmFs
dWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQm90dG9tVG9Ub3BXcml0aW5nTW9kZToKKyAg
ICAgICAgbV90b3AgPSB2YWx1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMZWZ0VG9SaWdo
dFdyaXRpbmdNb2RlOgorICAgICAgICBtX3JpZ2h0ID0gdmFsdWU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUmlnaHRUb0xlZnRXcml0aW5nTW9kZToKKyAgICAgICAgbV9sZWZ0ID0gdmFsdWU7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICBtX2JvdHRvbSA9IHZhbHVlOworICAgIH0KK30KKwordm9pZCBGcmFjdGlv
bmFsTGF5b3V0Qm94RXh0ZW50OjpzZXRTdGFydChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4
dERpcmVjdGlvbiBkaXJlY3Rpb24sIEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKQoreworICAg
IGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpIHsKKyAgICAgICAgaWYg
KGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSkKKyAgICAgICAgICAgIG1fbGVmdCA9
IHZhbHVlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3JpZ2h0ID0gdmFsdWU7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSkK
KyAgICAgICAgICAgIG1fdG9wID0gdmFsdWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1f
Ym90dG9tID0gdmFsdWU7CisgICAgfQorfQorCit2b2lkIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRl
bnQ6OnNldEVuZChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24sIEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKQoreworICAgIGlmIChpc0hvcml6b250YWxX
cml0aW5nTW9kZSh3cml0aW5nTW9kZSkpIHsKKyAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oZGlyZWN0aW9uKSkKKyAgICAgICAgICAgIG1fcmlnaHQgPSB2YWx1ZTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgbV9sZWZ0ID0gdmFsdWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
aWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSkKKyAgICAgICAgICAgIG1fYm90
dG9tID0gdmFsdWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fdG9wID0gdmFsdWU7Cisg
ICAgfQorfQorCitGcmFjdGlvbmFsTGF5b3V0VW5pdCYgRnJhY3Rpb25hbExheW91dEJveEV4dGVu
dDo6bXV0YWJsZUxvZ2ljYWxMZWZ0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQoreworICAgIHJl
dHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX2xlZnQgOiBtX3Rv
cDsKK30KKworRnJhY3Rpb25hbExheW91dFVuaXQmIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6
Om11dGFibGVMb2dpY2FsUmlnaHQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCit7CisgICAgcmV0
dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fcmlnaHQgOiBtX2Jv
dHRvbTsKK30KKworRnJhY3Rpb25hbExheW91dFVuaXQmIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRl
bnQ6Om11dGFibGVCZWZvcmUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCit7CisgICAgcmV0dXJu
IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IChpc0ZsaXBwZWRCbG9ja3NX
cml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX2JvdHRvbSA6IG1fdG9wKSA6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpc0ZsaXBwZWRCbG9ja3NX
cml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX3JpZ2h0OiBtX2xlZnQpOworfQorCitGcmFjdGlv
bmFsTGF5b3V0VW5pdCYgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6bXV0YWJsZUFmdGVyKFdy
aXRpbmdNb2RlIHdyaXRpbmdNb2RlKQoreworICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5n
TW9kZSh3cml0aW5nTW9kZSkgPyAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01v
ZGUpID8gbV90b3AgOiBtX2JvdHRvbSkgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01v
ZGUpID8gbV9sZWZ0OiBtX3JpZ2h0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0Qm94RXh0ZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRCb3hF
eHRlbnQuY3BwCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9MYXlvdXRCb3hFeHRlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwzMSArMjks
MzEgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExh
eW91dEJveEV4dGVudC5oIgorI2luY2x1ZGUgIkxheW91dEJveEV4dGVudC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hF
eHRlbnQ6OmxvZ2ljYWxUb3AoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0CitMYXlvdXRV
bml0IExheW91dEJveEV4dGVudDo6bG9naWNhbFRvcChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkg
Y29uc3QKIHsKICAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUp
ID8gbV90b3AgOiBtX2xlZnQ7CiB9CiAKLUZyYWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxM
YXlvdXRCb3hFeHRlbnQ6OmxvZ2ljYWxCb3R0b20oV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNv
bnN0CitMYXlvdXRVbml0IExheW91dEJveEV4dGVudDo6bG9naWNhbEJvdHRvbShXcml0aW5nTW9k
ZSB3cml0aW5nTW9kZSkgY29uc3QKIHsKICAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUod3JpdGluZ01vZGUpID8gbV9ib3R0b20gOiBtX3JpZ2h0OwogfQogCi1GcmFjdGlvbmFsTGF5
b3V0VW5pdCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Ojpsb2dpY2FsTGVmdChXcml0aW5nTW9k
ZSB3cml0aW5nTW9kZSkgY29uc3QKK0xheW91dFVuaXQgTGF5b3V0Qm94RXh0ZW50Ojpsb2dpY2Fs
TGVmdChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QKIHsKICAgICByZXR1cm4gaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gbV9sZWZ0IDogbV90b3A7CiB9CiAKLUZy
YWN0aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmxvZ2ljYWxSaWdo
dChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QKK0xheW91dFVuaXQgTGF5b3V0Qm94RXh0
ZW50Ojpsb2dpY2FsUmlnaHQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IG1fcmlnaHQgOiBt
X2JvdHRvbTsKIH0KIAotRnJhY3Rpb25hbExheW91dFVuaXQgRnJhY3Rpb25hbExheW91dEJveEV4
dGVudDo6YmVmb3JlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAorTGF5b3V0VW5pdCBM
YXlvdXRCb3hFeHRlbnQ6OmJlZm9yZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QKIHsK
ICAgICBzd2l0Y2ggKHdyaXRpbmdNb2RlKSB7CiAgICAgY2FzZSBUb3BUb0JvdHRvbVdyaXRpbmdN
b2RlOgpAQCAtNjksNyArNjksNyBAQCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFjdGlvbmFsTGF5
b3V0Qm94CiAgICAgcmV0dXJuIG1fdG9wOwogfQogCi1GcmFjdGlvbmFsTGF5b3V0VW5pdCBGcmFj
dGlvbmFsTGF5b3V0Qm94RXh0ZW50OjphZnRlcihXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29u
c3QKK0xheW91dFVuaXQgTGF5b3V0Qm94RXh0ZW50OjphZnRlcihXcml0aW5nTW9kZSB3cml0aW5n
TW9kZSkgY29uc3QKIHsKICAgICBzd2l0Y2ggKHdyaXRpbmdNb2RlKSB7CiAgICAgY2FzZSBUb3BU
b0JvdHRvbVdyaXRpbmdNb2RlOgpAQCAtODUsMjEgKzg1LDIxIEBAIEZyYWN0aW9uYWxMYXlvdXRV
bml0IEZyYWN0aW9uYWxMYXlvdXRCb3gKICAgICByZXR1cm4gbV9ib3R0b207CiB9CiAKLUZyYWN0
aW9uYWxMYXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OnN0YXJ0KFdyaXRpbmdN
b2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikgY29uc3QKK0xheW91dFVu
aXQgTGF5b3V0Qm94RXh0ZW50OjpzdGFydChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERp
cmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0CiB7CiAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKHdyaXRpbmdNb2RlKSkKICAgICAgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
ZGlyZWN0aW9uKSA/IG1fbGVmdCA6IG1fcmlnaHQ7CiAgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oZGlyZWN0aW9uKSA/IG1fdG9wIDogbV9ib3R0b207CiB9CiAKLUZyYWN0aW9uYWxM
YXlvdXRVbml0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6OmVuZChXcml0aW5nTW9kZSB3cml0
aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0CitMYXlvdXRVbml0IExheW91
dEJveEV4dGVudDo6ZW5kKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRp
cmVjdGlvbikgY29uc3QKIHsKICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGlu
Z01vZGUpKQogICAgICAgICByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbihkaXJlY3Rpb24p
ID8gbV9yaWdodCA6IG1fbGVmdDsKICAgICByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbihk
aXJlY3Rpb24pID8gbV9ib3R0b20gOiBtX3RvcDsKIH0KIAotdm9pZCBGcmFjdGlvbmFsTGF5b3V0
Qm94RXh0ZW50OjpzZXRCZWZvcmUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIEZyYWN0aW9uYWxM
YXlvdXRVbml0IHZhbHVlKQordm9pZCBMYXlvdXRCb3hFeHRlbnQ6OnNldEJlZm9yZShXcml0aW5n
TW9kZSB3cml0aW5nTW9kZSwgTGF5b3V0VW5pdCB2YWx1ZSkKIHsKICAgICBzd2l0Y2ggKHdyaXRp
bmdNb2RlKSB7CiAgICAgY2FzZSBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlOgpAQCAtMTIwLDcgKzEy
MCw3IEBAIHZvaWQgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6c2V0QmVmb3IKICAgICB9CiB9
CiAKLXZvaWQgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6c2V0QWZ0ZXIoV3JpdGluZ01vZGUg
d3JpdGluZ01vZGUsIEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKQordm9pZCBMYXlvdXRCb3hF
eHRlbnQ6OnNldEFmdGVyKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBMYXlvdXRVbml0IHZhbHVl
KQogewogICAgIHN3aXRjaCAod3JpdGluZ01vZGUpIHsKICAgICBjYXNlIFRvcFRvQm90dG9tV3Jp
dGluZ01vZGU6CkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0
ZW50OjpzZXRBZnRlcgogICAgIH0KIH0KIAotdm9pZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50
OjpzZXRTdGFydChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24sIEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlKQordm9pZCBMYXlvdXRCb3hFeHRlbnQ6OnNl
dFN0YXJ0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwg
TGF5b3V0VW5pdCB2YWx1ZSkKIHsKICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3Jp
dGluZ01vZGUpKSB7CiAgICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKGRpcmVjdGlv
bikpCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50Ojpz
ZXRTdGFydAogICAgIH0KIH0KIAotdm9pZCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjpzZXRF
bmQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBGcmFj
dGlvbmFsTGF5b3V0VW5pdCB2YWx1ZSkKK3ZvaWQgTGF5b3V0Qm94RXh0ZW50OjpzZXRFbmQoV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBMYXlvdXRVbml0
IHZhbHVlKQogewogICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkp
IHsKICAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oZGlyZWN0aW9uKSkKQEAgLTE3
MSwyMyArMTcxLDIzIEBAIHZvaWQgRnJhY3Rpb25hbExheW91dEJveEV4dGVudDo6c2V0RW5kKFcK
ICAgICB9CiB9CiAKLUZyYWN0aW9uYWxMYXlvdXRVbml0JiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0
ZW50OjptdXRhYmxlTG9naWNhbExlZnQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCitMYXlvdXRV
bml0JiBMYXlvdXRCb3hFeHRlbnQ6Om11dGFibGVMb2dpY2FsTGVmdChXcml0aW5nTW9kZSB3cml0
aW5nTW9kZSkKIHsKICAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01v
ZGUpID8gbV9sZWZ0IDogbV90b3A7CiB9CiAKLUZyYWN0aW9uYWxMYXlvdXRVbml0JiBGcmFjdGlv
bmFsTGF5b3V0Qm94RXh0ZW50OjptdXRhYmxlTG9naWNhbFJpZ2h0KFdyaXRpbmdNb2RlIHdyaXRp
bmdNb2RlKQorTGF5b3V0VW5pdCYgTGF5b3V0Qm94RXh0ZW50OjptdXRhYmxlTG9naWNhbFJpZ2h0
KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQogewogICAgIHJldHVybiBpc0hvcml6b250YWxXcml0
aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBtX3JpZ2h0IDogbV9ib3R0b207CiB9CiAKLUZyYWN0aW9u
YWxMYXlvdXRVbml0JiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50OjptdXRhYmxlQmVmb3JlKFdy
aXRpbmdNb2RlIHdyaXRpbmdNb2RlKQorTGF5b3V0VW5pdCYgTGF5b3V0Qm94RXh0ZW50OjptdXRh
YmxlQmVmb3JlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQogewogICAgIHJldHVybiBpc0hvcml6
b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01v
ZGUod3JpdGluZ01vZGUpID8gbV9ib3R0b20gOiBtX3RvcCkgOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01v
ZGUod3JpdGluZ01vZGUpID8gbV9yaWdodDogbV9sZWZ0KTsKIH0KIAotRnJhY3Rpb25hbExheW91
dFVuaXQmIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ6Om11dGFibGVBZnRlcihXcml0aW5nTW9k
ZSB3cml0aW5nTW9kZSkKK0xheW91dFVuaXQmIExheW91dEJveEV4dGVudDo6bXV0YWJsZUFmdGVy
KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQogewogICAgIHJldHVybiBpc0hvcml6b250YWxXcml0
aW5nTW9kZSh3cml0aW5nTW9kZSkgPyAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGlu
Z01vZGUpID8gbV90b3AgOiBtX2JvdHRvbSkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGlu
Z01vZGUpID8gbV9sZWZ0OiBtX3JpZ2h0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0xheW91dEJveEV4dGVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dEJveEV4dGVudC5oCShyZXZpc2lvbiAxMzM1MTcpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRCb3hF
eHRlbnQuaDoxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlv
dXRCb3hFeHRlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29w
eXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRnJh
Y3Rpb25hbExheW91dEJveEV4dGVudF9oCisjZGVmaW5lIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRl
bnRfaAorCisjaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFVuaXQuaCIKKyNpbmNsdWRlICJUZXh0
RGlyZWN0aW9uLmgiCisjaW5jbHVkZSAiV3JpdGluZ01vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50IHsKK3B1YmxpYzoKKyAgICBG
cmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50KCkgOiBtX3RvcCgwKSwgbV9yaWdodCgwKSwgbV9ib3R0
b20oMCksIG1fbGVmdCgwKSB7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50KEZyYWN0
aW9uYWxMYXlvdXRVbml0IHRvcCwgRnJhY3Rpb25hbExheW91dFVuaXQgcmlnaHQsIEZyYWN0aW9u
YWxMYXlvdXRVbml0IGJvdHRvbSwgRnJhY3Rpb25hbExheW91dFVuaXQgbGVmdCkKKyAgICAgICAg
OiBtX3RvcCh0b3ApLCBtX3JpZ2h0KHJpZ2h0KSwgbV9ib3R0b20oYm90dG9tKSwgbV9sZWZ0KGxl
ZnQpIHsgfQorCisgICAgaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IHRvcCgpIGNvbnN0IHsg
cmV0dXJuIG1fdG9wOyB9CisgICAgaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbV9yaWdodDsgfQorICAgIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5p
dCBib3R0b20oKSBjb25zdCB7IHJldHVybiBtX2JvdHRvbTsgfQorICAgIGlubGluZSBGcmFjdGlv
bmFsTGF5b3V0VW5pdCBsZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0OyB9CisKKyAgICBpbmxp
bmUgdm9pZCBzZXRUb3AoRnJhY3Rpb25hbExheW91dFVuaXQgdmFsdWUpIHsgbV90b3AgPSB2YWx1
ZTsgfQorICAgIGlubGluZSB2b2lkIHNldFJpZ2h0KEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVl
KSB7IG1fcmlnaHQgPSB2YWx1ZTsgfQorICAgIGlubGluZSB2b2lkIHNldEJvdHRvbShGcmFjdGlv
bmFsTGF5b3V0VW5pdCB2YWx1ZSkgeyBtX2JvdHRvbSA9IHZhbHVlOyB9CisgICAgaW5saW5lIHZv
aWQgc2V0TGVmdChGcmFjdGlvbmFsTGF5b3V0VW5pdCB2YWx1ZSkgeyBtX2xlZnQgPSB2YWx1ZTsg
fQorCisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbG9naWNhbFRvcChXcml0aW5nTW9kZSkgY29u
c3Q7CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbG9naWNhbEJvdHRvbShXcml0aW5nTW9kZSkg
Y29uc3Q7CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbG9naWNhbExlZnQoV3JpdGluZ01vZGUp
IGNvbnN0OworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGxvZ2ljYWxSaWdodChXcml0aW5nTW9k
ZSkgY29uc3Q7CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBiZWZvcmUoV3JpdGluZ01vZGUp
IGNvbnN0OworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGFmdGVyKFdyaXRpbmdNb2RlKSBjb25z
dDsKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBzdGFydChXcml0aW5nTW9kZSwgVGV4dERpcmVj
dGlvbikgY29uc3Q7CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgZW5kKFdyaXRpbmdNb2RlLCBU
ZXh0RGlyZWN0aW9uKSBjb25zdDsKKworICAgIHZvaWQgc2V0QmVmb3JlKFdyaXRpbmdNb2RlLCBG
cmFjdGlvbmFsTGF5b3V0VW5pdCk7CisgICAgdm9pZCBzZXRBZnRlcihXcml0aW5nTW9kZSwgRnJh
Y3Rpb25hbExheW91dFVuaXQpOworICAgIHZvaWQgc2V0U3RhcnQoV3JpdGluZ01vZGUsIFRleHRE
aXJlY3Rpb24sIEZyYWN0aW9uYWxMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNldEVuZChXcml0aW5n
TW9kZSwgVGV4dERpcmVjdGlvbiwgRnJhY3Rpb25hbExheW91dFVuaXQpOworCisgICAgRnJhY3Rp
b25hbExheW91dFVuaXQmIG11dGFibGVMb2dpY2FsTGVmdChXcml0aW5nTW9kZSk7CisgICAgRnJh
Y3Rpb25hbExheW91dFVuaXQmIG11dGFibGVMb2dpY2FsUmlnaHQoV3JpdGluZ01vZGUpOworCisg
ICAgRnJhY3Rpb25hbExheW91dFVuaXQmIG11dGFibGVCZWZvcmUoV3JpdGluZ01vZGUpOworICAg
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBtdXRhYmxlQWZ0ZXIoV3JpdGluZ01vZGUpOworCitwcml2
YXRlOgorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1fdG9wOworICAgIEZyYWN0aW9uYWxMYXlv
dXRVbml0IG1fcmlnaHQ7CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgbV9ib3R0b207CisgICAg
RnJhY3Rpb25hbExheW91dFVuaXQgbV9sZWZ0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRnJhY3Rpb25hbExheW91dEJveEV4dGVudF9oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRCb3hFeHRlbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRCb3hFeHRlbnQuaAkocmV2
aXNpb24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0
Qm94RXh0ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDU5ICsyOCw1OSBAQAogICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCi0jaWZuZGVmIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnRfaAotI2RlZmlu
ZSBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50X2gKKyNpZm5kZWYgTGF5b3V0Qm94RXh0ZW50X2gK
KyNkZWZpbmUgTGF5b3V0Qm94RXh0ZW50X2gKIAotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRV
bml0LmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgogI2luY2x1ZGUgIlRleHREaXJlY3Rpb24u
aCIKICNpbmNsdWRlICJXcml0aW5nTW9kZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQgeworY2xhc3MgTGF5b3V0Qm94RXh0ZW50IHsK
IHB1YmxpYzoKLSAgICBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50KCkgOiBtX3RvcCgwKSwgbV9y
aWdodCgwKSwgbV9ib3R0b20oMCksIG1fbGVmdCgwKSB7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0
Qm94RXh0ZW50KEZyYWN0aW9uYWxMYXlvdXRVbml0IHRvcCwgRnJhY3Rpb25hbExheW91dFVuaXQg
cmlnaHQsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGJvdHRvbSwgRnJhY3Rpb25hbExheW91dFVuaXQg
bGVmdCkKKyAgICBMYXlvdXRCb3hFeHRlbnQoKSA6IG1fdG9wKDApLCBtX3JpZ2h0KDApLCBtX2Jv
dHRvbSgwKSwgbV9sZWZ0KDApIHsgfQorICAgIExheW91dEJveEV4dGVudChMYXlvdXRVbml0IHRv
cCwgTGF5b3V0VW5pdCByaWdodCwgTGF5b3V0VW5pdCBib3R0b20sIExheW91dFVuaXQgbGVmdCkK
ICAgICAgICAgOiBtX3RvcCh0b3ApLCBtX3JpZ2h0KHJpZ2h0KSwgbV9ib3R0b20oYm90dG9tKSwg
bV9sZWZ0KGxlZnQpIHsgfQogCi0gICAgaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0IHRvcCgp
IGNvbnN0IHsgcmV0dXJuIG1fdG9wOyB9Ci0gICAgaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRVbml0
IHJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yaWdodDsgfQotICAgIGlubGluZSBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBib3R0b20oKSBjb25zdCB7IHJldHVybiBtX2JvdHRvbTsgfQotICAgIGlubGlu
ZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBsZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0OyB9Ci0K
LSAgICBpbmxpbmUgdm9pZCBzZXRUb3AoRnJhY3Rpb25hbExheW91dFVuaXQgdmFsdWUpIHsgbV90
b3AgPSB2YWx1ZTsgfQotICAgIGlubGluZSB2b2lkIHNldFJpZ2h0KEZyYWN0aW9uYWxMYXlvdXRV
bml0IHZhbHVlKSB7IG1fcmlnaHQgPSB2YWx1ZTsgfQotICAgIGlubGluZSB2b2lkIHNldEJvdHRv
bShGcmFjdGlvbmFsTGF5b3V0VW5pdCB2YWx1ZSkgeyBtX2JvdHRvbSA9IHZhbHVlOyB9Ci0gICAg
aW5saW5lIHZvaWQgc2V0TGVmdChGcmFjdGlvbmFsTGF5b3V0VW5pdCB2YWx1ZSkgeyBtX2xlZnQg
PSB2YWx1ZTsgfQotCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgbG9naWNhbFRvcChXcml0aW5n
TW9kZSkgY29uc3Q7Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgbG9naWNhbEJvdHRvbShXcml0
aW5nTW9kZSkgY29uc3Q7Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgbG9naWNhbExlZnQoV3Jp
dGluZ01vZGUpIGNvbnN0OwotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGxvZ2ljYWxSaWdodChX
cml0aW5nTW9kZSkgY29uc3Q7Ci0KLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBiZWZvcmUoV3Jp
dGluZ01vZGUpIGNvbnN0OwotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGFmdGVyKFdyaXRpbmdN
b2RlKSBjb25zdDsKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBzdGFydChXcml0aW5nTW9kZSwg
VGV4dERpcmVjdGlvbikgY29uc3Q7Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgZW5kKFdyaXRp
bmdNb2RlLCBUZXh0RGlyZWN0aW9uKSBjb25zdDsKLQotICAgIHZvaWQgc2V0QmVmb3JlKFdyaXRp
bmdNb2RlLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCk7Ci0gICAgdm9pZCBzZXRBZnRlcihXcml0aW5n
TW9kZSwgRnJhY3Rpb25hbExheW91dFVuaXQpOwotICAgIHZvaWQgc2V0U3RhcnQoV3JpdGluZ01v
ZGUsIFRleHREaXJlY3Rpb24sIEZyYWN0aW9uYWxMYXlvdXRVbml0KTsKLSAgICB2b2lkIHNldEVu
ZChXcml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiwgRnJhY3Rpb25hbExheW91dFVuaXQpOworICAg
IGlubGluZSBMYXlvdXRVbml0IHRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wOyB9CisgICAgaW5s
aW5lIExheW91dFVuaXQgcmlnaHQoKSBjb25zdCB7IHJldHVybiBtX3JpZ2h0OyB9CisgICAgaW5s
aW5lIExheW91dFVuaXQgYm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9ib3R0b207IH0KKyAgICBp
bmxpbmUgTGF5b3V0VW5pdCBsZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0OyB9CisKKyAgICBp
bmxpbmUgdm9pZCBzZXRUb3AoTGF5b3V0VW5pdCB2YWx1ZSkgeyBtX3RvcCA9IHZhbHVlOyB9Cisg
ICAgaW5saW5lIHZvaWQgc2V0UmlnaHQoTGF5b3V0VW5pdCB2YWx1ZSkgeyBtX3JpZ2h0ID0gdmFs
dWU7IH0KKyAgICBpbmxpbmUgdm9pZCBzZXRCb3R0b20oTGF5b3V0VW5pdCB2YWx1ZSkgeyBtX2Jv
dHRvbSA9IHZhbHVlOyB9CisgICAgaW5saW5lIHZvaWQgc2V0TGVmdChMYXlvdXRVbml0IHZhbHVl
KSB7IG1fbGVmdCA9IHZhbHVlOyB9CisKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3AoV3JpdGlu
Z01vZGUpIGNvbnN0OworICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbShXcml0aW5nTW9kZSkg
Y29uc3Q7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdChXcml0aW5nTW9kZSkgY29uc3Q7Cisg
ICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQoV3JpdGluZ01vZGUpIGNvbnN0OworCisgICAgTGF5
b3V0VW5pdCBiZWZvcmUoV3JpdGluZ01vZGUpIGNvbnN0OworICAgIExheW91dFVuaXQgYWZ0ZXIo
V3JpdGluZ01vZGUpIGNvbnN0OworICAgIExheW91dFVuaXQgc3RhcnQoV3JpdGluZ01vZGUsIFRl
eHREaXJlY3Rpb24pIGNvbnN0OworICAgIExheW91dFVuaXQgZW5kKFdyaXRpbmdNb2RlLCBUZXh0
RGlyZWN0aW9uKSBjb25zdDsKKworICAgIHZvaWQgc2V0QmVmb3JlKFdyaXRpbmdNb2RlLCBMYXlv
dXRVbml0KTsKKyAgICB2b2lkIHNldEFmdGVyKFdyaXRpbmdNb2RlLCBMYXlvdXRVbml0KTsKKyAg
ICB2b2lkIHNldFN0YXJ0KFdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uLCBMYXlvdXRVbml0KTsK
KyAgICB2b2lkIHNldEVuZChXcml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiwgTGF5b3V0VW5pdCk7
CiAKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgbXV0YWJsZUxvZ2ljYWxMZWZ0KFdyaXRpbmdN
b2RlKTsKLSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgbXV0YWJsZUxvZ2ljYWxSaWdodChXcml0
aW5nTW9kZSk7CisgICAgTGF5b3V0VW5pdCYgbXV0YWJsZUxvZ2ljYWxMZWZ0KFdyaXRpbmdNb2Rl
KTsKKyAgICBMYXlvdXRVbml0JiBtdXRhYmxlTG9naWNhbFJpZ2h0KFdyaXRpbmdNb2RlKTsKIAot
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0JiBtdXRhYmxlQmVmb3JlKFdyaXRpbmdNb2RlKTsKLSAg
ICBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgbXV0YWJsZUFmdGVyKFdyaXRpbmdNb2RlKTsKKyAgICBM
YXlvdXRVbml0JiBtdXRhYmxlQmVmb3JlKFdyaXRpbmdNb2RlKTsKKyAgICBMYXlvdXRVbml0JiBt
dXRhYmxlQWZ0ZXIoV3JpdGluZ01vZGUpOwogCiBwcml2YXRlOgotICAgIEZyYWN0aW9uYWxMYXlv
dXRVbml0IG1fdG9wOwotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1fcmlnaHQ7Ci0gICAgRnJh
Y3Rpb25hbExheW91dFVuaXQgbV9ib3R0b207Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgbV9s
ZWZ0OworICAgIExheW91dFVuaXQgbV90b3A7CisgICAgTGF5b3V0VW5pdCBtX3JpZ2h0OworICAg
IExheW91dFVuaXQgbV9ib3R0b207CisgICAgTGF5b3V0VW5pdCBtX2xlZnQ7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50
X2gKKyNlbmRpZiAvLyBMYXlvdXRCb3hFeHRlbnRfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTGF5b3V0UG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRQb2ludC5oCShyZXZpc2lvbiAxMzM1MTcpCShmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRQb2ludC5o
OjEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFBvaW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGcmFjdGlvbmFsTGF5
b3V0UG9pbnRfaAorI2RlZmluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnRfaAorCisjaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRTaXplLmgiCisjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KKworI2lmIFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgPHFnbG9i
YWwuaD4KK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUVBvaW50OworY2xhc3MgUVBvaW50RjsK
K1FUX0VORF9OQU1FU1BBQ0UKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEZyYWN0aW9uYWxMYXlvdXRQb2ludCB7CitwdWJsaWM6CisgICAgRnJhY3Rpb25hbExheW91dFBv
aW50KCkgOiBtX3goMCksIG1feSgwKSB7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoRnJh
Y3Rpb25hbExheW91dFVuaXQgeCwgRnJhY3Rpb25hbExheW91dFVuaXQgeSkgOiBtX3goeCksIG1f
eSh5KSB7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50
KSA6IG1feChwb2ludC54KCkpLCBtX3kocG9pbnQueSgpKSB7IH0KKyAgICBleHBsaWNpdCBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgc2l6ZSkgOiBtX3goc2l6ZS54KCkp
LCBtX3koc2l6ZS55KCkpIHsgfQorICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRQb2ludChj
b25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkgOiBtX3goc2l6ZS53aWR0aCgpKSwgbV95
KHNpemUuaGVpZ2h0KCkpIHsgfQorCisgICAgc3RhdGljIEZyYWN0aW9uYWxMYXlvdXRQb2ludCB6
ZXJvKCkgeyByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KCk7IH0KKworICAgIEZyYWN0aW9u
YWxMYXlvdXRVbml0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KKyAgICBGcmFjdGlvbmFsTGF5
b3V0VW5pdCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9CisKKyAgICB2b2lkIHNldFgoRnJhY3Rp
b25hbExheW91dFVuaXQgeCkgeyBtX3ggPSB4OyB9CisgICAgdm9pZCBzZXRZKEZyYWN0aW9uYWxM
YXlvdXRVbml0IHkpIHsgbV95ID0geTsgfQorCisgICAgdm9pZCBtb3ZlKGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRTaXplJiBzKSB7IG1vdmUocy53aWR0aCgpLCBzLmhlaWdodCgpKTsgfSAKKyAgICB2
b2lkIG1vdmVCeShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIG9mZnNldCkgeyBtb3ZlKG9m
ZnNldC54KCksIG9mZnNldC55KCkpOyB9CisgICAgdm9pZCBtb3ZlKEZyYWN0aW9uYWxMYXlvdXRV
bml0IGR4LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeSkgeyBtX3ggKz0gZHg7IG1feSArPSBkeTsg
fQorICAgIHZvaWQgc2NhbGUoZmxvYXQgc3gsIGZsb2F0IHN5KQorICAgIHsKKyAgICAgICAgbV94
ICo9IHN4OworICAgICAgICBtX3kgKj0gc3k7CisgICAgfQorICAgIAorICAgIEZyYWN0aW9uYWxM
YXlvdXRQb2ludCBleHBhbmRlZFRvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KHN0ZDo6
bWF4KG1feCwgb3RoZXIubV94KSwgc3RkOjptYXgobV95LCBvdGhlci5tX3kpKTsKKyAgICB9CisK
KyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgc2hydW5rVG8oY29uc3QgRnJhY3Rpb25hbExheW91
dFBvaW50JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQoc3RkOjptaW4obV94LCBvdGhlci5tX3gpLCBzdGQ6Om1pbihtX3ksIG90aGVyLm1f
eSkpOworICAgIH0KKworICAgIHZvaWQgY2xhbXBOZWdhdGl2ZVRvWmVybygpCisgICAgeworICAg
ICAgICAqdGhpcyA9IGV4cGFuZGVkVG8oemVybygpKTsKKyAgICB9CisKKyAgICBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQgdHJhbnNwb3NlZFBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBGcmFjdGlvbmFsTGF5b3V0UG9pbnQobV95LCBtX3gpOworICAgIH0KKworI2lmIFBMQVRGT1JN
KFFUKQorICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRQb2ludChjb25zdCBRUG9pbnQmKTsK
KyAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgUVBvaW50RiYpOworICAg
IG9wZXJhdG9yIFFQb2ludEYoKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIEZyYWN0
aW9uYWxMYXlvdXRVbml0IG1feCwgbV95OworfTsKKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCYgb3BlcmF0b3IrPShGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRTaXplJiBiKQoreworICAgIGEubW92ZShiLndpZHRoKCksIGIuaGVpZ2h0KCkpOwor
ICAgIHJldHVybiBhOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50JiBvcGVyYXRv
ci09KEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUm
IGIpCit7CisgICAgYS5tb3ZlKC1iLndpZHRoKCksIC1iLmhlaWdodCgpKTsKKyAgICByZXR1cm4g
YTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBvcGVyYXRvcisoY29uc3QgRnJh
Y3Rpb25hbExheW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK3sK
KyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KGEueCgpICsgYi53aWR0aCgpLCBhLnko
KSArIGIuaGVpZ2h0KCkpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50IG9wZXJh
dG9yKyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRQb2ludCYgYikKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KGEueCgpICsg
Yi54KCksIGEueSgpICsgYi55KCkpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFNpemUg
b3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25h
bExheW91dFBvaW50JiBiKQoreworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShhLngo
KSAtIGIueCgpLCBhLnkoKSAtIGIueSgpKTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBhLCBjb25zdCBGcmFj
dGlvbmFsTGF5b3V0U2l6ZSYgYikKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50
KGEueCgpIC0gYi53aWR0aCgpLCBhLnkoKSAtIGIuaGVpZ2h0KCkpOworfQorCitpbmxpbmUgRnJh
Y3Rpb25hbExheW91dFBvaW50IG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQm
IHBvaW50KQoreworICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoLXBvaW50LngoKSwg
LXBvaW50LnkoKSk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJhY3Rpb25h
bExheW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGIpCit7CisgICAg
cmV0dXJuIGEueCgpID09IGIueCgpICYmIGEueSgpID09IGIueSgpOworfQorCitpbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rp
b25hbExheW91dFBvaW50JiBiKQoreworICAgIHJldHVybiBhLngoKSAhPSBiLngoKSB8fCBhLnko
KSAhPSBiLnkoKTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCB0b1BvaW50KGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKQoreworICAgIHJldHVybiBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKK30KKworaW5saW5lIEZy
YWN0aW9uYWxMYXlvdXRTaXplIHRvU2l6ZShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEp
Cit7CisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKGEueCgpLCBhLnkoKSk7Cit9CisK
K2lubGluZSBJbnRQb2ludCBmbG9vcmVkSW50UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFBv
aW50JiBwb2ludCkKK3sKKyAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpLmZsb29yKCksIHBv
aW50LnkoKS5mbG9vcigpKTsKK30KKworaW5saW5lIEludFBvaW50IHJvdW5kZWRJbnRQb2ludChj
b25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50KQoreworICAgIHJldHVybiBJbnRQb2lu
dChwb2ludC54KCkucm91bmQoKSwgcG9pbnQueSgpLnJvdW5kKCkpOworfQorCitpbmxpbmUgSW50
UG9pbnQgcm91bmRlZEludFBvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKQor
eworICAgIHJldHVybiBJbnRQb2ludChzaXplLndpZHRoKCkucm91bmQoKSwgc2l6ZS5oZWlnaHQo
KS5yb3VuZCgpKTsKK30KKworaW5saW5lIEludFBvaW50IGNlaWxlZEludFBvaW50KGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRQb2ludCYgcG9pbnQpCit7CisgICAgcmV0dXJuIEludFBvaW50KHBvaW50
LngoKS5jZWlsKCksIHBvaW50LnkoKS5jZWlsKCkpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExh
eW91dFBvaW50IGZsb29yZWRGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYg
cCkKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KEZyYWN0aW9uYWxMYXlvdXRV
bml0Ojpmcm9tRmxvYXRGbG9vcihwLngoKSksIEZyYWN0aW9uYWxMYXlvdXRVbml0Ojpmcm9tRmxv
YXRGbG9vcihwLnkoKSkpOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFBvaW50IGNlaWxl
ZEZyYWN0aW9uYWxMYXlvdXRQb2ludChjb25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIHJldHVy
biBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoRnJhY3Rpb25hbExheW91dFVuaXQ6OmZyb21GbG9hdENl
aWwocC54KCkpLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChwLnkoKSkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBGcmFjdGlvbmFsTGF5b3V0
UG9pbnRfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UG9p
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlv
dXRQb2ludC5oCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9MYXlvdXRQb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMSArMjgsMTEgQEAK
ICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBGcmFjdGlvbmFsTGF5b3V0UG9pbnRfaAot
I2RlZmluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnRfaAorI2lmbmRlZiBMYXlvdXRQb2ludF9oCisj
ZGVmaW5lIExheW91dFBvaW50X2gKIAogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRl
ICJGcmFjdGlvbmFsTGF5b3V0U2l6ZS5oIgorI2luY2x1ZGUgIkxheW91dFNpemUuaCIKICNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiAjaWYgUExBVEZPUk0oUVQpCkBAIC00NSwzOSArNDUs
MzkgQEAgUVRfRU5EX05BTUVTUEFDRQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZy
YWN0aW9uYWxMYXlvdXRQb2ludCB7CitjbGFzcyBMYXlvdXRQb2ludCB7CiBwdWJsaWM6Ci0gICAg
RnJhY3Rpb25hbExheW91dFBvaW50KCkgOiBtX3goMCksIG1feSgwKSB7IH0KLSAgICBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQoRnJhY3Rpb25hbExheW91dFVuaXQgeCwgRnJhY3Rpb25hbExheW91dFVu
aXQgeSkgOiBtX3goeCksIG1feSh5KSB7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29u
c3QgSW50UG9pbnQmIHBvaW50KSA6IG1feChwb2ludC54KCkpLCBtX3kocG9pbnQueSgpKSB7IH0K
LSAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgc2l6
ZSkgOiBtX3goc2l6ZS54KCkpLCBtX3koc2l6ZS55KCkpIHsgfQotICAgIGV4cGxpY2l0IEZyYWN0
aW9uYWxMYXlvdXRQb2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkgOiBtX3go
c2l6ZS53aWR0aCgpKSwgbV95KHNpemUuaGVpZ2h0KCkpIHsgfQotCi0gICAgc3RhdGljIEZyYWN0
aW9uYWxMYXlvdXRQb2ludCB6ZXJvKCkgeyByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KCk7
IH0KLQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0K
LSAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9Ci0KLSAg
ICB2b2lkIHNldFgoRnJhY3Rpb25hbExheW91dFVuaXQgeCkgeyBtX3ggPSB4OyB9Ci0gICAgdm9p
ZCBzZXRZKEZyYWN0aW9uYWxMYXlvdXRVbml0IHkpIHsgbV95ID0geTsgfQotCi0gICAgdm9pZCBt
b3ZlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzKSB7IG1vdmUocy53aWR0aCgpLCBzLmhl
aWdodCgpKTsgfSAKLSAgICB2b2lkIG1vdmVCeShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQm
IG9mZnNldCkgeyBtb3ZlKG9mZnNldC54KCksIG9mZnNldC55KCkpOyB9Ci0gICAgdm9pZCBtb3Zl
KEZyYWN0aW9uYWxMYXlvdXRVbml0IGR4LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeSkgeyBtX3gg
Kz0gZHg7IG1feSArPSBkeTsgfQorICAgIExheW91dFBvaW50KCkgOiBtX3goMCksIG1feSgwKSB7
IH0KKyAgICBMYXlvdXRQb2ludChMYXlvdXRVbml0IHgsIExheW91dFVuaXQgeSkgOiBtX3goeCks
IG1feSh5KSB7IH0KKyAgICBMYXlvdXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpIDogbV94
KHBvaW50LngoKSksIG1feShwb2ludC55KCkpIHsgfQorICAgIGV4cGxpY2l0IExheW91dFBvaW50
KGNvbnN0IEZsb2F0UG9pbnQmIHNpemUpIDogbV94KHNpemUueCgpKSwgbV95KHNpemUueSgpKSB7
IH0KKyAgICBleHBsaWNpdCBMYXlvdXRQb2ludChjb25zdCBMYXlvdXRTaXplJiBzaXplKSA6IG1f
eChzaXplLndpZHRoKCkpLCBtX3koc2l6ZS5oZWlnaHQoKSkgeyB9CisKKyAgICBzdGF0aWMgTGF5
b3V0UG9pbnQgemVybygpIHsgcmV0dXJuIExheW91dFBvaW50KCk7IH0KKworICAgIExheW91dFVu
aXQgeCgpIGNvbnN0IHsgcmV0dXJuIG1feDsgfQorICAgIExheW91dFVuaXQgeSgpIGNvbnN0IHsg
cmV0dXJuIG1feTsgfQorCisgICAgdm9pZCBzZXRYKExheW91dFVuaXQgeCkgeyBtX3ggPSB4OyB9
CisgICAgdm9pZCBzZXRZKExheW91dFVuaXQgeSkgeyBtX3kgPSB5OyB9CisKKyAgICB2b2lkIG1v
dmUoY29uc3QgTGF5b3V0U2l6ZSYgcykgeyBtb3ZlKHMud2lkdGgoKSwgcy5oZWlnaHQoKSk7IH0g
CisgICAgdm9pZCBtb3ZlQnkoY29uc3QgTGF5b3V0UG9pbnQmIG9mZnNldCkgeyBtb3ZlKG9mZnNl
dC54KCksIG9mZnNldC55KCkpOyB9CisgICAgdm9pZCBtb3ZlKExheW91dFVuaXQgZHgsIExheW91
dFVuaXQgZHkpIHsgbV94ICs9IGR4OyBtX3kgKz0gZHk7IH0KICAgICB2b2lkIHNjYWxlKGZsb2F0
IHN4LCBmbG9hdCBzeSkKICAgICB7CiAgICAgICAgIG1feCAqPSBzeDsKICAgICAgICAgbV95ICo9
IHN5OwogICAgIH0KICAgICAKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgZXhwYW5kZWRUbyhj
b25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIG90aGVyKSBjb25zdAorICAgIExheW91dFBvaW50
IGV4cGFuZGVkVG8oY29uc3QgTGF5b3V0UG9pbnQmIG90aGVyKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChzdGQ6Om1heChtX3gsIG90aGVyLm1feCks
IHN0ZDo6bWF4KG1feSwgb3RoZXIubV95KSk7CisgICAgICAgIHJldHVybiBMYXlvdXRQb2ludChz
dGQ6Om1heChtX3gsIG90aGVyLm1feCksIHN0ZDo6bWF4KG1feSwgb3RoZXIubV95KSk7CiAgICAg
fQogCi0gICAgRnJhY3Rpb25hbExheW91dFBvaW50IHNocnVua1RvKGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRQb2ludCYgb3RoZXIpIGNvbnN0CisgICAgTGF5b3V0UG9pbnQgc2hydW5rVG8oY29uc3Qg
TGF5b3V0UG9pbnQmIG90aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIEZyYWN0aW9u
YWxMYXlvdXRQb2ludChzdGQ6Om1pbihtX3gsIG90aGVyLm1feCksIHN0ZDo6bWluKG1feSwgb3Ro
ZXIubV95KSk7CisgICAgICAgIHJldHVybiBMYXlvdXRQb2ludChzdGQ6Om1pbihtX3gsIG90aGVy
Lm1feCksIHN0ZDo6bWluKG1feSwgb3RoZXIubV95KSk7CiAgICAgfQogCiAgICAgdm9pZCBjbGFt
cE5lZ2F0aXZlVG9aZXJvKCkKQEAgLTg1LDEwOCArODUsMTM4IEBAIHB1YmxpYzoKICAgICAgICAg
KnRoaXMgPSBleHBhbmRlZFRvKHplcm8oKSk7CiAgICAgfQogCi0gICAgRnJhY3Rpb25hbExheW91
dFBvaW50IHRyYW5zcG9zZWRQb2ludCgpIGNvbnN0CisgICAgTGF5b3V0UG9pbnQgdHJhbnNwb3Nl
ZFBvaW50KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9p
bnQobV95LCBtX3gpOworICAgICAgICByZXR1cm4gTGF5b3V0UG9pbnQobV95LCBtX3gpOwogICAg
IH0KIAogI2lmIFBMQVRGT1JNKFFUKQotICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRQb2lu
dChjb25zdCBRUG9pbnQmKTsKLSAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29u
c3QgUVBvaW50RiYpOworICAgIGV4cGxpY2l0IExheW91dFBvaW50KGNvbnN0IFFQb2ludCYpOwor
ICAgIGV4cGxpY2l0IExheW91dFBvaW50KGNvbnN0IFFQb2ludEYmKTsKICAgICBvcGVyYXRvciBR
UG9pbnRGKCkgY29uc3Q7CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBtX3gsIG1feTsKKyAgICBMYXlvdXRVbml0IG1feCwgbV95OwogfTsKIAotaW5saW5lIEZy
YWN0aW9uYWxMYXlvdXRQb2ludCYgb3BlcmF0b3IrPShGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEs
IGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQoraW5saW5lIExheW91dFBvaW50JiBvcGVy
YXRvcis9KExheW91dFBvaW50JiBhLCBjb25zdCBMYXlvdXRTaXplJiBiKQogewogICAgIGEubW92
ZShiLndpZHRoKCksIGIuaGVpZ2h0KCkpOwogICAgIHJldHVybiBhOwogfQogCi1pbmxpbmUgRnJh
Y3Rpb25hbExheW91dFBvaW50JiBvcGVyYXRvci09KEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwg
Y29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIpCitpbmxpbmUgTGF5b3V0UG9pbnQmIG9wZXJh
dG9yLT0oTGF5b3V0UG9pbnQmIGEsIGNvbnN0IExheW91dFNpemUmIGIpCiB7CiAgICAgYS5tb3Zl
KC1iLndpZHRoKCksIC1iLmhlaWdodCgpKTsKICAgICByZXR1cm4gYTsKIH0KIAotaW5saW5lIEZy
YWN0aW9uYWxMYXlvdXRQb2ludCBvcGVyYXRvcisoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50
JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK2lubGluZSBMYXlvdXRQb2ludCBv
cGVyYXRvcisoY29uc3QgTGF5b3V0UG9pbnQmIGEsIGNvbnN0IExheW91dFNpemUmIGIpCiB7Ci0g
ICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChhLngoKSArIGIud2lkdGgoKSwgYS55KCkg
KyBiLmhlaWdodCgpKTsKKyAgICByZXR1cm4gTGF5b3V0UG9pbnQoYS54KCkgKyBiLndpZHRoKCks
IGEueSgpICsgYi5oZWlnaHQoKSk7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQg
b3BlcmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYSwgY29uc3QgRnJhY3Rpb25h
bExheW91dFBvaW50JiBiKQoraW5saW5lIExheW91dFBvaW50IG9wZXJhdG9yKyhjb25zdCBMYXlv
dXRQb2ludCYgYSwgY29uc3QgTGF5b3V0UG9pbnQmIGIpCiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9u
YWxMYXlvdXRQb2ludChhLngoKSArIGIueCgpLCBhLnkoKSArIGIueSgpKTsKKyAgICByZXR1cm4g
TGF5b3V0UG9pbnQoYS54KCkgKyBiLngoKSwgYS55KCkgKyBiLnkoKSk7CiB9CiAKLWlubGluZSBG
cmFjdGlvbmFsTGF5b3V0U2l6ZSBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50
JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGIpCitpbmxpbmUgTGF5b3V0U2l6ZSBv
cGVyYXRvci0oY29uc3QgTGF5b3V0UG9pbnQmIGEsIGNvbnN0IExheW91dFBvaW50JiBiKQogewot
ICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShhLngoKSAtIGIueCgpLCBhLnkoKSAtIGIu
eSgpKTsKKyAgICByZXR1cm4gTGF5b3V0U2l6ZShhLngoKSAtIGIueCgpLCBhLnkoKSAtIGIueSgp
KTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBvcGVyYXRvci0oY29uc3QgRnJh
Y3Rpb25hbExheW91dFBvaW50JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK2lu
bGluZSBMYXlvdXRQb2ludCBvcGVyYXRvci0oY29uc3QgTGF5b3V0UG9pbnQmIGEsIGNvbnN0IExh
eW91dFNpemUmIGIpCiB7Ci0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChhLngoKSAt
IGIud2lkdGgoKSwgYS55KCkgLSBiLmhlaWdodCgpKTsKKyAgICByZXR1cm4gTGF5b3V0UG9pbnQo
YS54KCkgLSBiLndpZHRoKCksIGEueSgpIC0gYi5oZWlnaHQoKSk7CiB9CiAKLWlubGluZSBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQgb3BlcmF0b3ItKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYg
cG9pbnQpCitpbmxpbmUgTGF5b3V0UG9pbnQgb3BlcmF0b3ItKGNvbnN0IExheW91dFBvaW50JiBw
b2ludCkKIHsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KC1wb2ludC54KCksIC1w
b2ludC55KCkpOworICAgIHJldHVybiBMYXlvdXRQb2ludCgtcG9pbnQueCgpLCAtcG9pbnQueSgp
KTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9p
bnQmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgYikKK2lubGluZSBib29sIG9wZXJh
dG9yPT0oY29uc3QgTGF5b3V0UG9pbnQmIGEsIGNvbnN0IExheW91dFBvaW50JiBiKQogewogICAg
IHJldHVybiBhLngoKSA9PSBiLngoKSAmJiBhLnkoKSA9PSBiLnkoKTsKIH0KIAotaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRQb2ludCYgYikKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgTGF5b3V0
UG9pbnQmIGEsIGNvbnN0IExheW91dFBvaW50JiBiKQogewogICAgIHJldHVybiBhLngoKSAhPSBi
LngoKSB8fCBhLnkoKSAhPSBiLnkoKTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRQb2lu
dCB0b1BvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKQoraW5saW5lIExheW91
dFBvaW50IHRvUG9pbnQoY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkKIHsKLSAgICByZXR1cm4gRnJh
Y3Rpb25hbExheW91dFBvaW50KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgcmV0
dXJuIExheW91dFBvaW50KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CiB9CiAKLWlubGlu
ZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSB0b1NpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50
JiBhKQoraW5saW5lIExheW91dFBvaW50IHRvTGF5b3V0UG9pbnQoY29uc3QgTGF5b3V0U2l6ZSYg
cCkKIHsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUoYS54KCksIGEueSgpKTsKKyAg
ICByZXR1cm4gTGF5b3V0UG9pbnQocC53aWR0aCgpLCBwLmhlaWdodCgpKTsKIH0KIAotaW5saW5l
IEludFBvaW50IGZsb29yZWRJbnRQb2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHBv
aW50KQoraW5saW5lIExheW91dFNpemUgdG9TaXplKGNvbnN0IExheW91dFBvaW50JiBhKQorewor
ICAgIHJldHVybiBMYXlvdXRTaXplKGEueCgpLCBhLnkoKSk7Cit9CisKK2lubGluZSBJbnRQb2lu
dCBmbG9vcmVkSW50UG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQogewogICAgIHJldHVy
biBJbnRQb2ludChwb2ludC54KCkuZmxvb3IoKSwgcG9pbnQueSgpLmZsb29yKCkpOwogfQogCi1p
bmxpbmUgSW50UG9pbnQgcm91bmRlZEludFBvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2lu
dCYgcG9pbnQpCitpbmxpbmUgSW50UG9pbnQgcm91bmRlZEludFBvaW50KGNvbnN0IExheW91dFBv
aW50JiBwb2ludCkKIHsKICAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpLnJvdW5kKCksIHBv
aW50LnkoKS5yb3VuZCgpKTsKIH0KIAotaW5saW5lIEludFBvaW50IHJvdW5kZWRJbnRQb2ludChj
b25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkKK2lubGluZSBJbnRQb2ludCByb3VuZGVk
SW50UG9pbnQoY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkKIHsKICAgICByZXR1cm4gSW50UG9pbnQo
c2l6ZS53aWR0aCgpLnJvdW5kKCksIHNpemUuaGVpZ2h0KCkucm91bmQoKSk7CiB9CiAKLWlubGlu
ZSBJbnRQb2ludCBjZWlsZWRJbnRQb2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHBv
aW50KQoraW5saW5lIEludFBvaW50IGNlaWxlZEludFBvaW50KGNvbnN0IExheW91dFBvaW50JiBw
b2ludCkKIHsKICAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpLmNlaWwoKSwgcG9pbnQueSgp
LmNlaWwoKSk7CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgZmxvb3JlZEZyYWN0
aW9uYWxMYXlvdXRQb2ludChjb25zdCBGbG9hdFBvaW50JiBwKQoraW5saW5lIExheW91dFBvaW50
IGZsb29yZWRMYXlvdXRQb2ludChjb25zdCBGbG9hdFBvaW50JiBwKQogewotICAgIHJldHVybiBG
cmFjdGlvbmFsTGF5b3V0UG9pbnQoRnJhY3Rpb25hbExheW91dFVuaXQ6OmZyb21GbG9hdEZsb29y
KHAueCgpKSwgRnJhY3Rpb25hbExheW91dFVuaXQ6OmZyb21GbG9hdEZsb29yKHAueSgpKSk7Cisg
ICAgcmV0dXJuIExheW91dFBvaW50KExheW91dFVuaXQ6OmZyb21GbG9hdEZsb29yKHAueCgpKSwg
TGF5b3V0VW5pdDo6ZnJvbUZsb2F0Rmxvb3IocC55KCkpKTsKIH0KIAotaW5saW5lIEZyYWN0aW9u
YWxMYXlvdXRQb2ludCBjZWlsZWRGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQb2lu
dCYgcCkKK2lubGluZSBMYXlvdXRQb2ludCBjZWlsZWRMYXlvdXRQb2ludChjb25zdCBGbG9hdFBv
aW50JiBwKQogewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoRnJhY3Rpb25hbExh
eW91dFVuaXQ6OmZyb21GbG9hdENlaWwocC54KCkpLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6ZnJv
bUZsb2F0Q2VpbChwLnkoKSkpOworICAgIHJldHVybiBMYXlvdXRQb2ludChMYXlvdXRVbml0Ojpm
cm9tRmxvYXRDZWlsKHAueCgpKSwgTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChwLnkoKSkpOwog
fQogCitpbmxpbmUgSW50U2l6ZSBwaXhlbFNuYXBwZWRJbnRTaXplKGNvbnN0IExheW91dFNpemUm
IHMsIGNvbnN0IExheW91dFBvaW50JiBwKQoreworICAgIHJldHVybiBJbnRTaXplKHNuYXBTaXpl
VG9QaXhlbChzLndpZHRoKCksIHAueCgpKSwgc25hcFNpemVUb1BpeGVsKHMuaGVpZ2h0KCksIHAu
eSgpKSk7Cit9CisKK2lubGluZSBMYXlvdXRQb2ludCByb3VuZGVkTGF5b3V0UG9pbnQoY29uc3Qg
RmxvYXRQb2ludCYgcCkKK3sKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIHJldHVy
biBMYXlvdXRQb2ludChwKTsKKyNlbHNlCisgICAgcmV0dXJuIHJvdW5kZWRJbnRQb2ludChwKTsK
KyNlbmRpZgorfQorCitpbmxpbmUgTGF5b3V0U2l6ZSB0b0xheW91dFNpemUoY29uc3QgTGF5b3V0
UG9pbnQmIHApCit7CisgICAgcmV0dXJuIExheW91dFNpemUocC54KCksIHAueSgpKTsKK30KKwor
aW5saW5lIExheW91dFBvaW50IGZsb29yZWRMYXlvdXRQb2ludChjb25zdCBGbG9hdFNpemUmIHMp
Cit7CisgICAgcmV0dXJuIGZsb29yZWRMYXlvdXRQb2ludChGbG9hdFBvaW50KHMpKTsKK30KKwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBGcmFjdGlvbmFsTGF5b3V0UG9p
bnRfaAorI2VuZGlmIC8vIExheW91dFBvaW50X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0xheW91dFJlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJlY3QuY3BwCShyZXZpc2lvbiAxMzM1MTcpCShmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmNw
cDoxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
YykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFJlY3QuaCIKKworI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgorI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRVbml0LmgiCisjaW5jbHVkZSA8YWxnb3Jp
dGhtPgorCit1c2luZyBzdGQ6Om1heDsKK3VzaW5nIHN0ZDo6bWluOworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0ZyYWN0aW9uYWxMYXlvdXRSZWN0OjpGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25z
dCBGbG9hdFJlY3QmIHIpCisgICAgOiBtX2xvY2F0aW9uKEZyYWN0aW9uYWxMYXlvdXRQb2ludChy
LmxvY2F0aW9uKCkpKQorICAgICwgbV9zaXplKEZyYWN0aW9uYWxMYXlvdXRTaXplKHIuc2l6ZSgp
KSkKK3sKK30KKworYm9vbCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6aW50ZXJzZWN0cyhjb25zdCBG
cmFjdGlvbmFsTGF5b3V0UmVjdCYgb3RoZXIpIGNvbnN0Cit7CisgICAgLy8gQ2hlY2tpbmcgZW1w
dGluZXNzIGhhbmRsZXMgbmVnYXRpdmUgd2lkdGhzIGFzIHdlbGwgYXMgemVyby4KKyAgICByZXR1
cm4gIWlzRW1wdHkoKSAmJiAhb3RoZXIuaXNFbXB0eSgpCisgICAgICAgICYmIHgoKSA8IG90aGVy
Lm1heFgoKSAmJiBvdGhlci54KCkgPCBtYXhYKCkKKyAgICAgICAgJiYgeSgpIDwgb3RoZXIubWF4
WSgpICYmIG90aGVyLnkoKSA8IG1heFkoKTsKK30KKworYm9vbCBGcmFjdGlvbmFsTGF5b3V0UmVj
dDo6Y29udGFpbnMoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90aGVyKSBjb25zdAorewor
ICAgIHJldHVybiB4KCkgPD0gb3RoZXIueCgpICYmIG1heFgoKSA+PSBvdGhlci5tYXhYKCkKKyAg
ICAgICAgJiYgeSgpIDw9IG90aGVyLnkoKSAmJiBtYXhZKCkgPj0gb3RoZXIubWF4WSgpOworfQor
Cit2b2lkIEZyYWN0aW9uYWxMYXlvdXRSZWN0OjppbnRlcnNlY3QoY29uc3QgRnJhY3Rpb25hbExh
eW91dFJlY3QmIG90aGVyKQoreworICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdMb2NhdGlv
bihtYXgoeCgpLCBvdGhlci54KCkpLCBtYXgoeSgpLCBvdGhlci55KCkpKTsKKyAgICBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQgbmV3TWF4UG9pbnQobWluKG1heFgoKSwgb3RoZXIubWF4WCgpKSwgbWlu
KG1heFkoKSwgb3RoZXIubWF4WSgpKSk7CisKKyAgICAvLyBSZXR1cm4gYSBjbGVhbiBlbXB0eSBy
ZWN0YW5nbGUgZm9yIG5vbi1pbnRlcnNlY3RpbmcgY2FzZXMuCisgICAgaWYgKG5ld0xvY2F0aW9u
LngoKSA+PSBuZXdNYXhQb2ludC54KCkgfHwgbmV3TG9jYXRpb24ueSgpID49IG5ld01heFBvaW50
LnkoKSkgeworICAgICAgICBuZXdMb2NhdGlvbiA9IEZyYWN0aW9uYWxMYXlvdXRQb2ludCgwLCAw
KTsKKyAgICAgICAgbmV3TWF4UG9pbnQgPSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQoMCwgMCk7Cisg
ICAgfQorCisgICAgbV9sb2NhdGlvbiA9IG5ld0xvY2F0aW9uOworICAgIG1fc2l6ZSA9IG5ld01h
eFBvaW50IC0gbmV3TG9jYXRpb247Cit9CisKK3ZvaWQgRnJhY3Rpb25hbExheW91dFJlY3Q6OnVu
aXRlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBvdGhlcikKK3sKKyAgICAvLyBIYW5kbGUg
ZW1wdHkgc3BlY2lhbCBjYXNlcyBmaXJzdC4KKyAgICBpZiAob3RoZXIuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKGlzRW1wdHkoKSkgeworICAgICAgICAqdGhpcyA9IG90aGVy
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRnJhY3Rpb25hbExheW91dFBvaW50IG5l
d0xvY2F0aW9uKG1pbih4KCksIG90aGVyLngoKSksIG1pbih5KCksIG90aGVyLnkoKSkpOworICAg
IEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdNYXhQb2ludChtYXgobWF4WCgpLCBvdGhlci5tYXhY
KCkpLCBtYXgobWF4WSgpLCBvdGhlci5tYXhZKCkpKTsKKworICAgIG1fbG9jYXRpb24gPSBuZXdM
b2NhdGlvbjsKKyAgICBtX3NpemUgPSBuZXdNYXhQb2ludCAtIG5ld0xvY2F0aW9uOworfQorCit2
b2lkIEZyYWN0aW9uYWxMYXlvdXRSZWN0Ojp1bml0ZUlmTm9uWmVybyhjb25zdCBGcmFjdGlvbmFs
TGF5b3V0UmVjdCYgb3RoZXIpCit7CisgICAgLy8gSGFuZGxlIGVtcHR5IHNwZWNpYWwgY2FzZXMg
Zmlyc3QuCisgICAgaWYgKCFvdGhlci53aWR0aCgpICYmICFvdGhlci5oZWlnaHQoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmICghd2lkdGgoKSAmJiAhaGVpZ2h0KCkpIHsKKyAgICAgICAgKnRo
aXMgPSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEZyYWN0aW9uYWxMYXlv
dXRQb2ludCBuZXdMb2NhdGlvbihtaW4oeCgpLCBvdGhlci54KCkpLCBtaW4oeSgpLCBvdGhlci55
KCkpKTsKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbmV3TWF4UG9pbnQobWF4KG1heFgoKSwg
b3RoZXIubWF4WCgpKSwgbWF4KG1heFkoKSwgb3RoZXIubWF4WSgpKSk7CisKKyAgICBtX2xvY2F0
aW9uID0gbmV3TG9jYXRpb247CisgICAgbV9zaXplID0gbmV3TWF4UG9pbnQgLSBuZXdMb2NhdGlv
bjsKK30KKwordm9pZCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6c2NhbGUoZmxvYXQgcykKK3sKKyAg
ICBtX2xvY2F0aW9uLnNjYWxlKHMsIHMpOworICAgIG1fc2l6ZS5zY2FsZShzKTsKK30KKworRnJh
Y3Rpb25hbExheW91dFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxGcmFjdGlvbmFsTGF5b3V0
UmVjdD4mIHJlY3RzKQoreworICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0IHJlc3VsdDsKKworICAg
IHNpemVfdCBjb3VudCA9IHJlY3RzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNvdW50OyArK2kpCisgICAgICAgIHJlc3VsdC51bml0ZShyZWN0c1tpXSk7CisKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitJbnRSZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgRnJhY3Rpb25h
bExheW91dFJlY3QmIHJlY3QpCit7CisgICAgSW50UG9pbnQgbG9jYXRpb24gPSBmbG9vcmVkSW50
UG9pbnQocmVjdC5taW5YTWluWUNvcm5lcigpKTsKKyAgICBJbnRQb2ludCBtYXhQb2ludCA9IGNl
aWxlZEludFBvaW50KHJlY3QubWF4WE1heFlDb3JuZXIoKSk7CisKKyAgICByZXR1cm4gSW50UmVj
dChsb2NhdGlvbiwgbWF4UG9pbnQgLSBsb2NhdGlvbik7Cit9CisKK0ZyYWN0aW9uYWxMYXlvdXRS
ZWN0IGVuY2xvc2luZ0ZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
K3sKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIEZyYWN0aW9uYWxMYXlvdXRQb2lu
dCBsb2NhdGlvbiA9IGZsb29yZWRGcmFjdGlvbmFsTGF5b3V0UG9pbnQocmVjdC5taW5YTWluWUNv
cm5lcigpKTsKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbWF4UG9pbnQgPSBjZWlsZWRGcmFj
dGlvbmFsTGF5b3V0UG9pbnQocmVjdC5tYXhYTWF4WUNvcm5lcigpKTsKKworICAgIHJldHVybiBG
cmFjdGlvbmFsTGF5b3V0UmVjdChsb2NhdGlvbiwgbWF4UG9pbnQgLSBsb2NhdGlvbik7CisjZWxz
ZQorICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHJlY3QpOworI2VuZGlmCit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0xheW91dFJlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0xheW91dFJlY3QuY3BwCShyZXZpc2lvbiAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjks
MTAgKzI5LDEwIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZyYWN0
aW9uYWxMYXlvdXRSZWN0LmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogCiAjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFVuaXQuaCIKKyNpbmNsdWRl
ICJMYXlvdXRVbml0LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogCiB1c2luZyBzdGQ6Om1heDsK
QEAgLTQwLDEzICs0MCwxMyBAQCB1c2luZyBzdGQ6Om1pbjsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1GcmFjdGlvbmFsTGF5b3V0UmVjdDo6RnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByKQotICAgIDogbV9sb2NhdGlvbihGcmFjdGlvbmFsTGF5b3V0UG9pbnQoci5sb2Nh
dGlvbigpKSkKLSAgICAsIG1fc2l6ZShGcmFjdGlvbmFsTGF5b3V0U2l6ZShyLnNpemUoKSkpCitM
YXlvdXRSZWN0OjpMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKKyAgICA6IG1fbG9jYXRp
b24oTGF5b3V0UG9pbnQoci5sb2NhdGlvbigpKSkKKyAgICAsIG1fc2l6ZShMYXlvdXRTaXplKHIu
c2l6ZSgpKSkKIHsKIH0KIAotYm9vbCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6aW50ZXJzZWN0cyhj
b25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgb3RoZXIpIGNvbnN0Citib29sIExheW91dFJlY3Q6
OmludGVyc2VjdHMoY29uc3QgTGF5b3V0UmVjdCYgb3RoZXIpIGNvbnN0CiB7CiAgICAgLy8gQ2hl
Y2tpbmcgZW1wdGluZXNzIGhhbmRsZXMgbmVnYXRpdmUgd2lkdGhzIGFzIHdlbGwgYXMgemVyby4K
ICAgICByZXR1cm4gIWlzRW1wdHkoKSAmJiAhb3RoZXIuaXNFbXB0eSgpCkBAIC01NCwyOCArNTQs
MjggQEAgYm9vbCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6aW50ZXJzZWN0cyhjbwogICAgICAgICAm
JiB5KCkgPCBvdGhlci5tYXhZKCkgJiYgb3RoZXIueSgpIDwgbWF4WSgpOwogfQogCi1ib29sIEZy
YWN0aW9uYWxMYXlvdXRSZWN0Ojpjb250YWlucyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYg
b3RoZXIpIGNvbnN0Citib29sIExheW91dFJlY3Q6OmNvbnRhaW5zKGNvbnN0IExheW91dFJlY3Qm
IG90aGVyKSBjb25zdAogewogICAgIHJldHVybiB4KCkgPD0gb3RoZXIueCgpICYmIG1heFgoKSA+
PSBvdGhlci5tYXhYKCkKICAgICAgICAgJiYgeSgpIDw9IG90aGVyLnkoKSAmJiBtYXhZKCkgPj0g
b3RoZXIubWF4WSgpOwogfQogCi12b2lkIEZyYWN0aW9uYWxMYXlvdXRSZWN0OjppbnRlcnNlY3Qo
Y29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIG90aGVyKQordm9pZCBMYXlvdXRSZWN0OjppbnRl
cnNlY3QoY29uc3QgTGF5b3V0UmVjdCYgb3RoZXIpCiB7Ci0gICAgRnJhY3Rpb25hbExheW91dFBv
aW50IG5ld0xvY2F0aW9uKG1heCh4KCksIG90aGVyLngoKSksIG1heCh5KCksIG90aGVyLnkoKSkp
OwotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdNYXhQb2ludChtaW4obWF4WCgpLCBvdGhl
ci5tYXhYKCkpLCBtaW4obWF4WSgpLCBvdGhlci5tYXhZKCkpKTsKKyAgICBMYXlvdXRQb2ludCBu
ZXdMb2NhdGlvbihtYXgoeCgpLCBvdGhlci54KCkpLCBtYXgoeSgpLCBvdGhlci55KCkpKTsKKyAg
ICBMYXlvdXRQb2ludCBuZXdNYXhQb2ludChtaW4obWF4WCgpLCBvdGhlci5tYXhYKCkpLCBtaW4o
bWF4WSgpLCBvdGhlci5tYXhZKCkpKTsKIAogICAgIC8vIFJldHVybiBhIGNsZWFuIGVtcHR5IHJl
Y3RhbmdsZSBmb3Igbm9uLWludGVyc2VjdGluZyBjYXNlcy4KICAgICBpZiAobmV3TG9jYXRpb24u
eCgpID49IG5ld01heFBvaW50LngoKSB8fCBuZXdMb2NhdGlvbi55KCkgPj0gbmV3TWF4UG9pbnQu
eSgpKSB7Ci0gICAgICAgIG5ld0xvY2F0aW9uID0gRnJhY3Rpb25hbExheW91dFBvaW50KDAsIDAp
OwotICAgICAgICBuZXdNYXhQb2ludCA9IEZyYWN0aW9uYWxMYXlvdXRQb2ludCgwLCAwKTsKKyAg
ICAgICAgbmV3TG9jYXRpb24gPSBMYXlvdXRQb2ludCgwLCAwKTsKKyAgICAgICAgbmV3TWF4UG9p
bnQgPSBMYXlvdXRQb2ludCgwLCAwKTsKICAgICB9CiAKICAgICBtX2xvY2F0aW9uID0gbmV3TG9j
YXRpb247CiAgICAgbV9zaXplID0gbmV3TWF4UG9pbnQgLSBuZXdMb2NhdGlvbjsKIH0KIAotdm9p
ZCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6dW5pdGUoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3Qm
IG90aGVyKQordm9pZCBMYXlvdXRSZWN0Ojp1bml0ZShjb25zdCBMYXlvdXRSZWN0JiBvdGhlcikK
IHsKICAgICAvLyBIYW5kbGUgZW1wdHkgc3BlY2lhbCBjYXNlcyBmaXJzdC4KICAgICBpZiAob3Ro
ZXIuaXNFbXB0eSgpKQpAQCAtODUsMTQgKzg1LDE0IEBAIHZvaWQgRnJhY3Rpb25hbExheW91dFJl
Y3Q6OnVuaXRlKGNvbnN0IEYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEZyYWN0aW9u
YWxMYXlvdXRQb2ludCBuZXdMb2NhdGlvbihtaW4oeCgpLCBvdGhlci54KCkpLCBtaW4oeSgpLCBv
dGhlci55KCkpKTsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbmV3TWF4UG9pbnQobWF4KG1h
eFgoKSwgb3RoZXIubWF4WCgpKSwgbWF4KG1heFkoKSwgb3RoZXIubWF4WSgpKSk7CisgICAgTGF5
b3V0UG9pbnQgbmV3TG9jYXRpb24obWluKHgoKSwgb3RoZXIueCgpKSwgbWluKHkoKSwgb3RoZXIu
eSgpKSk7CisgICAgTGF5b3V0UG9pbnQgbmV3TWF4UG9pbnQobWF4KG1heFgoKSwgb3RoZXIubWF4
WCgpKSwgbWF4KG1heFkoKSwgb3RoZXIubWF4WSgpKSk7CiAKICAgICBtX2xvY2F0aW9uID0gbmV3
TG9jYXRpb247CiAgICAgbV9zaXplID0gbmV3TWF4UG9pbnQgLSBuZXdMb2NhdGlvbjsKIH0KIAot
dm9pZCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6dW5pdGVJZk5vblplcm8oY29uc3QgRnJhY3Rpb25h
bExheW91dFJlY3QmIG90aGVyKQordm9pZCBMYXlvdXRSZWN0Ojp1bml0ZUlmTm9uWmVybyhjb25z
dCBMYXlvdXRSZWN0JiBvdGhlcikKIHsKICAgICAvLyBIYW5kbGUgZW1wdHkgc3BlY2lhbCBjYXNl
cyBmaXJzdC4KICAgICBpZiAoIW90aGVyLndpZHRoKCkgJiYgIW90aGVyLmhlaWdodCgpKQpAQCAt
MTAyLDIyICsxMDIsMjIgQEAgdm9pZCBGcmFjdGlvbmFsTGF5b3V0UmVjdDo6dW5pdGVJZk5vblpl
cgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgRnJhY3Rpb25hbExheW91dFBvaW50IG5l
d0xvY2F0aW9uKG1pbih4KCksIG90aGVyLngoKSksIG1pbih5KCksIG90aGVyLnkoKSkpOwotICAg
IEZyYWN0aW9uYWxMYXlvdXRQb2ludCBuZXdNYXhQb2ludChtYXgobWF4WCgpLCBvdGhlci5tYXhY
KCkpLCBtYXgobWF4WSgpLCBvdGhlci5tYXhZKCkpKTsKKyAgICBMYXlvdXRQb2ludCBuZXdMb2Nh
dGlvbihtaW4oeCgpLCBvdGhlci54KCkpLCBtaW4oeSgpLCBvdGhlci55KCkpKTsKKyAgICBMYXlv
dXRQb2ludCBuZXdNYXhQb2ludChtYXgobWF4WCgpLCBvdGhlci5tYXhYKCkpLCBtYXgobWF4WSgp
LCBvdGhlci5tYXhZKCkpKTsKIAogICAgIG1fbG9jYXRpb24gPSBuZXdMb2NhdGlvbjsKICAgICBt
X3NpemUgPSBuZXdNYXhQb2ludCAtIG5ld0xvY2F0aW9uOwogfQogCi12b2lkIEZyYWN0aW9uYWxM
YXlvdXRSZWN0OjpzY2FsZShmbG9hdCBzKQordm9pZCBMYXlvdXRSZWN0OjpzY2FsZShmbG9hdCBz
KQogewogICAgIG1fbG9jYXRpb24uc2NhbGUocywgcyk7CiAgICAgbV9zaXplLnNjYWxlKHMpOwog
fQogCi1GcmFjdGlvbmFsTGF5b3V0UmVjdCB1bmlvblJlY3QoY29uc3QgVmVjdG9yPEZyYWN0aW9u
YWxMYXlvdXRSZWN0PiYgcmVjdHMpCitMYXlvdXRSZWN0IHVuaW9uUmVjdChjb25zdCBWZWN0b3I8
TGF5b3V0UmVjdD4mIHJlY3RzKQogewotICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0IHJlc3VsdDsK
KyAgICBMYXlvdXRSZWN0IHJlc3VsdDsKIAogICAgIHNpemVfdCBjb3VudCA9IHJlY3RzLnNpemUo
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCkBAIC0xMjYsNyArMTI2
LDcgQEAgRnJhY3Rpb25hbExheW91dFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlYwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLUludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGcmFjdGlvbmFs
TGF5b3V0UmVjdCYgcmVjdCkKK0ludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBMYXlvdXRS
ZWN0JiByZWN0KQogewogICAgIEludFBvaW50IGxvY2F0aW9uID0gZmxvb3JlZEludFBvaW50KHJl
Y3QubWluWE1pbllDb3JuZXIoKSk7CiAgICAgSW50UG9pbnQgbWF4UG9pbnQgPSBjZWlsZWRJbnRQ
b2ludChyZWN0Lm1heFhNYXhZQ29ybmVyKCkpOwpAQCAtMTM0LDEzICsxMzQsMTMgQEAgSW50UmVj
dCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IEZyYWN0aW9uYQogICAgIHJldHVybiBJbnRSZWN0KGxv
Y2F0aW9uLCBtYXhQb2ludCAtIGxvY2F0aW9uKTsKIH0KIAotRnJhY3Rpb25hbExheW91dFJlY3Qg
ZW5jbG9zaW5nRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorTGF5
b3V0UmVjdCBlbmNsb3NpbmdMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICNp
ZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBsb2Nh
dGlvbiA9IGZsb29yZWRGcmFjdGlvbmFsTGF5b3V0UG9pbnQocmVjdC5taW5YTWluWUNvcm5lcigp
KTsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbWF4UG9pbnQgPSBjZWlsZWRGcmFjdGlvbmFs
TGF5b3V0UG9pbnQocmVjdC5tYXhYTWF4WUNvcm5lcigpKTsKKyAgICBMYXlvdXRQb2ludCBsb2Nh
dGlvbiA9IGZsb29yZWRMYXlvdXRQb2ludChyZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOworICAgIExh
eW91dFBvaW50IG1heFBvaW50ID0gY2VpbGVkTGF5b3V0UG9pbnQocmVjdC5tYXhYTWF4WUNvcm5l
cigpKTsKIAotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UmVjdChsb2NhdGlvbiwgbWF4UG9p
bnQgLSBsb2NhdGlvbik7CisgICAgcmV0dXJuIExheW91dFJlY3QobG9jYXRpb24sIG1heFBvaW50
IC0gbG9jYXRpb24pOwogI2Vsc2UKICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChyZWN0KTsK
ICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UmVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91
dFJlY3QuaAkocmV2aXNpb24gMTMzNTE3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5oOjEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDIyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIEZyYWN0aW9uYWxMYXlvdXRSZWN0X2gKKyNkZWZpbmUgRnJhY3Rpb25h
bExheW91dFJlY3RfaAorCisjaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oIgor
I2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRQb2ludC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIK
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlIDxx
Z2xvYmFsLmg+CitRVF9CRUdJTl9OQU1FU1BBQ0UKK2NsYXNzIFFSZWN0OworY2xhc3MgUVJlY3RG
OworUVRfRU5EX05BTUVTUEFDRQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgRmxvYXRSZWN0OworCitjbGFzcyBGcmFjdGlvbmFsTGF5b3V0UmVjdCB7CitwdWJsaWM6Cisg
ICAgRnJhY3Rpb25hbExheW91dFJlY3QoKSB7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdChj
b25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0U2l6ZSYgc2l6ZSkKKyAgICAgICAgOiBtX2xvY2F0aW9uKGxvY2F0aW9uKSwgbV9zaXplKHNp
emUpIHsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0KEZyYWN0aW9uYWxMYXlvdXRVbml0IHgs
IEZyYWN0aW9uYWxMYXlvdXRVbml0IHksIEZyYWN0aW9uYWxMYXlvdXRVbml0IHdpZHRoLCBGcmFj
dGlvbmFsTGF5b3V0VW5pdCBoZWlnaHQpCisgICAgICAgIDogbV9sb2NhdGlvbihGcmFjdGlvbmFs
TGF5b3V0UG9pbnQoeCwgeSkpLCBtX3NpemUoRnJhY3Rpb25hbExheW91dFNpemUod2lkdGgsIGhl
aWdodCkpIHsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UG9pbnQmIGxv
Y2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgICAgIDogbV9sb2NhdGlvbihsb2Nh
dGlvbiksIG1fc2l6ZShzaXplKSB7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBJ
bnRSZWN0JiByZWN0KSA6IG1fbG9jYXRpb24ocmVjdC5sb2NhdGlvbigpKSwgbV9zaXplKHJlY3Qu
c2l6ZSgpKSB7IH0KKworICAgIGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQor
ICAgICAgICAKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbG9jYXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2xvY2F0aW9uOyB9CisgICAgRnJhY3Rpb25hbExheW91dFNpemUgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2l6ZTsgfQorCisgICAgSW50UG9pbnQgcGl4ZWxTbmFwcGVkTG9jYXRpb24o
KSBjb25zdCB7IHJldHVybiByb3VuZGVkSW50UG9pbnQobV9sb2NhdGlvbik7IH0KKyAgICBJbnRT
aXplIHBpeGVsU25hcHBlZFNpemUoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKHNuYXBTaXplVG9Q
aXhlbChtX3NpemUud2lkdGgoKSwgbV9sb2NhdGlvbi54KCkpLCBzbmFwU2l6ZVRvUGl4ZWwobV9z
aXplLmhlaWdodCgpLCBtX2xvY2F0aW9uLnkoKSkpOyB9CisKKyAgICB2b2lkIHNldExvY2F0aW9u
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgbG9jYXRpb24pIHsgbV9sb2NhdGlvbiA9IGxv
Y2F0aW9uOyB9CisgICAgdm9pZCBzZXRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBz
aXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KKworICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHgoKSBj
b25zdCB7IHJldHVybiBtX2xvY2F0aW9uLngoKTsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0
IHkoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uLnkoKTsgfQorICAgIEZyYWN0aW9uYWxMYXlv
dXRVbml0IG1heFgoKSBjb25zdCB7IHJldHVybiB4KCkgKyB3aWR0aCgpOyB9CisgICAgRnJhY3Rp
b25hbExheW91dFVuaXQgbWF4WSgpIGNvbnN0IHsgcmV0dXJuIHkoKSArIGhlaWdodCgpOyB9Cisg
ICAgRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3NpemUud2lk
dGgoKTsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2l6ZS5oZWlnaHQoKTsgfQorCisgICAgaW50IHBpeGVsU25hcHBlZFgoKSBjb25zdCB7IHJl
dHVybiB4KCkucm91bmQoKTsgfQorICAgIGludCBwaXhlbFNuYXBwZWRZKCkgY29uc3QgeyByZXR1
cm4geSgpLnJvdW5kKCk7IH0KKyAgICBpbnQgcGl4ZWxTbmFwcGVkV2lkdGgoKSBjb25zdCB7IHJl
dHVybiBzbmFwU2l6ZVRvUGl4ZWwod2lkdGgoKSwgeCgpKTsgfQorICAgIGludCBwaXhlbFNuYXBw
ZWRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBzbmFwU2l6ZVRvUGl4ZWwoaGVpZ2h0KCksIHkoKSk7
IH0KKyAgICBpbnQgcGl4ZWxTbmFwcGVkTWF4WCgpIGNvbnN0IHsgcmV0dXJuIChtX2xvY2F0aW9u
LngoKSArIG1fc2l6ZS53aWR0aCgpKS5yb3VuZCgpOyB9CisgICAgaW50IHBpeGVsU25hcHBlZE1h
eFkoKSBjb25zdCB7IHJldHVybiAobV9sb2NhdGlvbi55KCkgKyBtX3NpemUuaGVpZ2h0KCkpLnJv
dW5kKCk7IH0KKworICAgIHZvaWQgc2V0WChGcmFjdGlvbmFsTGF5b3V0VW5pdCB4KSB7IG1fbG9j
YXRpb24uc2V0WCh4KTsgfQorICAgIHZvaWQgc2V0WShGcmFjdGlvbmFsTGF5b3V0VW5pdCB5KSB7
IG1fbG9jYXRpb24uc2V0WSh5KTsgfQorICAgIHZvaWQgc2V0V2lkdGgoRnJhY3Rpb25hbExheW91
dFVuaXQgd2lkdGgpIHsgbV9zaXplLnNldFdpZHRoKHdpZHRoKTsgfQorICAgIHZvaWQgc2V0SGVp
Z2h0KEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCkgeyBtX3NpemUuc2V0SGVpZ2h0KGhlaWdo
dCk7IH0KKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5pc0VtcHR5
KCk7IH0KKworICAgIC8vIE5PVEU6IFRoZSByZXN1bHQgaXMgcm91bmRlZCB0byBpbnRlZ2VyIHZh
bHVlcywgYW5kIHRodXMgbWF5IGJlIG5vdCB0aGUgZXhhY3QKKyAgICAvLyBjZW50ZXIgcG9pbnQu
CisgICAgRnJhY3Rpb25hbExheW91dFBvaW50IGNlbnRlcigpIGNvbnN0IHsgcmV0dXJuIEZyYWN0
aW9uYWxMYXlvdXRQb2ludCh4KCkgKyB3aWR0aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAyKTsg
fQorCisgICAgdm9pZCBtb3ZlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1f
bG9jYXRpb24gKz0gc2l6ZTsgfSAKKyAgICB2b2lkIG1vdmVCeShjb25zdCBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQmIG9mZnNldCkgeyBtX2xvY2F0aW9uLm1vdmUob2Zmc2V0LngoKSwgb2Zmc2V0Lnko
KSk7IH0KKyAgICB2b2lkIG1vdmUoRnJhY3Rpb25hbExheW91dFVuaXQgZHgsIEZyYWN0aW9uYWxM
YXlvdXRVbml0IGR5KSB7IG1fbG9jYXRpb24ubW92ZShkeCwgZHkpOyB9IAorCisgICAgdm9pZCBl
eHBhbmQoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpIHsgbV9zaXplICs9IHNpemU7
IH0KKyAgICB2b2lkIGV4cGFuZChjb25zdCBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50JiBib3gp
CisgICAgeworICAgICAgICBtX2xvY2F0aW9uLm1vdmUoLWJveC5sZWZ0KCksIC1ib3gudG9wKCkp
OworICAgICAgICBtX3NpemUuZXhwYW5kKGJveC5sZWZ0KCkgKyBib3gucmlnaHQoKSwgYm94LnRv
cCgpICsgYm94LmJvdHRvbSgpKTsKKyAgICB9CisgICAgdm9pZCBleHBhbmQoRnJhY3Rpb25hbExh
eW91dFVuaXQgZHcsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRoKSB7IG1fc2l6ZS5leHBhbmQoZHcs
IGRoKTsgfQorICAgIHZvaWQgY29udHJhY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNp
emUpIHsgbV9zaXplIC09IHNpemU7IH0KKyAgICB2b2lkIGNvbnRyYWN0KEZyYWN0aW9uYWxMYXlv
dXRVbml0IGR3LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkaCkgeyBtX3NpemUuZXhwYW5kKC1kdywg
LWRoKTsgfQorCisgICAgdm9pZCBzaGlmdFhFZGdlVG8oRnJhY3Rpb25hbExheW91dFVuaXQgZWRn
ZSkKKyAgICB7CisgICAgICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRlbHRhID0gZWRnZSAtIHgo
KTsKKyAgICAgICAgc2V0WChlZGdlKTsKKyAgICAgICAgc2V0V2lkdGgoc3RkOjptYXg8RnJhY3Rp
b25hbExheW91dFVuaXQ+KDAsIHdpZHRoKCkgLSBkZWx0YSkpOworICAgIH0KKyAgICB2b2lkIHNo
aWZ0TWF4WEVkZ2VUbyhGcmFjdGlvbmFsTGF5b3V0VW5pdCBlZGdlKQorICAgIHsKKyAgICAgICAg
RnJhY3Rpb25hbExheW91dFVuaXQgZGVsdGEgPSBlZGdlIC0gbWF4WCgpOworICAgICAgICBzZXRX
aWR0aChzdGQ6Om1heDxGcmFjdGlvbmFsTGF5b3V0VW5pdD4oMCwgd2lkdGgoKSArIGRlbHRhKSk7
CisgICAgfQorICAgIHZvaWQgc2hpZnRZRWRnZVRvKEZyYWN0aW9uYWxMYXlvdXRVbml0IGVkZ2Up
CisgICAgeworICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkZWx0YSA9IGVkZ2UgLSB5KCk7
CisgICAgICAgIHNldFkoZWRnZSk7CisgICAgICAgIHNldEhlaWdodChzdGQ6Om1heDxGcmFjdGlv
bmFsTGF5b3V0VW5pdD4oMCwgaGVpZ2h0KCkgLSBkZWx0YSkpOworICAgIH0KKyAgICB2b2lkIHNo
aWZ0TWF4WUVkZ2VUbyhGcmFjdGlvbmFsTGF5b3V0VW5pdCBlZGdlKQorICAgIHsKKyAgICAgICAg
RnJhY3Rpb25hbExheW91dFVuaXQgZGVsdGEgPSBlZGdlIC0gbWF4WSgpOworICAgICAgICBzZXRI
ZWlnaHQoc3RkOjptYXg8RnJhY3Rpb25hbExheW91dFVuaXQ+KDAsIGhlaWdodCgpICsgZGVsdGEp
KTsKKyAgICB9CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbWluWE1pbllDb3JuZXIoKSBj
b25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9IC8vIHR5cGljYWxseSB0b3BMZWZ0CisgICAgRnJh
Y3Rpb25hbExheW91dFBvaW50IG1heFhNaW5ZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gRnJhY3Rp
b25hbExheW91dFBvaW50KG1fbG9jYXRpb24ueCgpICsgbV9zaXplLndpZHRoKCksIG1fbG9jYXRp
b24ueSgpKTsgfSAvLyB0eXBpY2FsbHkgdG9wUmlnaHQKKyAgICBGcmFjdGlvbmFsTGF5b3V0UG9p
bnQgbWluWE1heFlDb3JuZXIoKSBjb25zdCB7IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQo
bV9sb2NhdGlvbi54KCksIG1fbG9jYXRpb24ueSgpICsgbV9zaXplLmhlaWdodCgpKTsgfSAvLyB0
eXBpY2FsbHkgYm90dG9tTGVmdAorICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBtYXhYTWF4WUNv
cm5lcigpIGNvbnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChtX2xvY2F0aW9uLngo
KSArIG1fc2l6ZS53aWR0aCgpLCBtX2xvY2F0aW9uLnkoKSArIG1fc2l6ZS5oZWlnaHQoKSk7IH0g
Ly8gdHlwaWNhbGx5IGJvdHRvbVJpZ2h0CisgICAgCisgICAgYm9vbCBpbnRlcnNlY3RzKGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRSZWN0JikgY29uc3Q7CisgICAgYm9vbCBjb250YWlucyhjb25zdCBG
cmFjdGlvbmFsTGF5b3V0UmVjdCYpIGNvbnN0OworCisgICAgLy8gVGhpcyBjaGVja3MgdG8gc2Vl
IGlmIHRoZSByZWN0IGNvbnRhaW5zIHgseSBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuCisgICAg
Ly8gRXF1aXZhbGVudCB0byBjaGVja2luZyBpZiB0aGUgcmVjdCBjb250YWlucyBhIDF4MSByZWN0
IGJlbG93IGFuZCB0byB0aGUgcmlnaHQgb2YgKHB4LHB5KS4KKyAgICBib29sIGNvbnRhaW5zKEZy
YWN0aW9uYWxMYXlvdXRVbml0IHB4LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBweSkgY29uc3QKKyAg
ICAgICAgeyByZXR1cm4gcHggPj0geCgpICYmIHB4IDwgbWF4WCgpICYmIHB5ID49IHkoKSAmJiBw
eSA8IG1heFkoKTsgfQorICAgIGJvb2wgY29udGFpbnMoY29uc3QgRnJhY3Rpb25hbExheW91dFBv
aW50JiBwb2ludCkgY29uc3QgeyByZXR1cm4gY29udGFpbnMocG9pbnQueCgpLCBwb2ludC55KCkp
OyB9CisKKyAgICB2b2lkIGludGVyc2VjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpOwor
ICAgIHZvaWQgdW5pdGUoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKTsKKyAgICB2b2lkIHVu
aXRlSWZOb25aZXJvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0Jik7CisKKyAgICB2b2lkIGlu
ZmxhdGVYKEZyYWN0aW9uYWxMYXlvdXRVbml0IGR4KQorICAgIHsKKyAgICAgICAgbV9sb2NhdGlv
bi5zZXRYKG1fbG9jYXRpb24ueCgpIC0gZHgpOworICAgICAgICBtX3NpemUuc2V0V2lkdGgobV9z
aXplLndpZHRoKCkgKyBkeCArIGR4KTsKKyAgICB9CisgICAgdm9pZCBpbmZsYXRlWShGcmFjdGlv
bmFsTGF5b3V0VW5pdCBkeSkKKyAgICB7CisgICAgICAgIG1fbG9jYXRpb24uc2V0WShtX2xvY2F0
aW9uLnkoKSAtIGR5KTsKKyAgICAgICAgbV9zaXplLnNldEhlaWdodChtX3NpemUuaGVpZ2h0KCkg
KyBkeSArIGR5KTsKKyAgICB9CisgICAgdm9pZCBpbmZsYXRlKEZyYWN0aW9uYWxMYXlvdXRVbml0
IGQpIHsgaW5mbGF0ZVgoZCk7IGluZmxhdGVZKGQpOyB9CisgICAgdm9pZCBzY2FsZShmbG9hdCBz
KTsKKworICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0IHRyYW5zcG9zZWRSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gRnJhY3Rpb25hbExheW91dFJlY3QobV9sb2NhdGlvbi50cmFuc3Bvc2VkUG9pbnQoKSwg
bV9zaXplLnRyYW5zcG9zZWRTaXplKCkpOyB9CisKKyAgICBzdGF0aWMgRnJhY3Rpb25hbExheW91
dFJlY3QgaW5maW5pdGVSZWN0KCkKKyAgICB7CisgICAgICAgIC8vIFJldHVybiBhIHJlY3QgdGhh
dCBpcyBzbGlnaHRseSBzbWFsbGVyIHRoYW4gdGhlIHRydWUgbWF4IHJlY3QgdG8gYWxsb3cgcGl4
ZWxTbmFwcGluZyB0byByb3VuZCB1cCB0byB0aGUgbmVhcmVzdCBJbnRSZWN0IHdpdGhvdXQgb3Zl
cmZsb3dpbmcuCisgICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UmVjdChGcmFjdGlvbmFs
TGF5b3V0VW5pdDo6bmVhcmx5TWluKCkgLyAyLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bmVhcmx5
TWluKCkgLyAyLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bmVhcmx5TWF4KCksIEZyYWN0aW9uYWxM
YXlvdXRVbml0OjpuZWFybHlNYXgoKSk7CisgICAgfQorCisjaWYgUExBVEZPUk0oUVQpCisgICAg
ZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgUVJlY3QmKTsKKyAgICBleHBsaWNp
dCBGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBRUmVjdEYmKTsKKyAgICBvcGVyYXRvciBRUmVj
dEYoKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIEZyYWN0aW9uYWxMYXlvdXRQb2lu
dCBtX2xvY2F0aW9uOworICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplIG1fc2l6ZTsKK307CisKK2lu
bGluZSBGcmFjdGlvbmFsTGF5b3V0UmVjdCBpbnRlcnNlY3Rpb24oY29uc3QgRnJhY3Rpb25hbExh
eW91dFJlY3QmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBiKQoreworICAgIEZyYWN0
aW9uYWxMYXlvdXRSZWN0IGMgPSBhOworICAgIGMuaW50ZXJzZWN0KGIpOworICAgIHJldHVybiBj
OworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFJlY3QgdW5pb25SZWN0KGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRSZWN0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYikKK3sKKyAg
ICBGcmFjdGlvbmFsTGF5b3V0UmVjdCBjID0gYTsKKyAgICBjLnVuaXRlKGIpOworICAgIHJldHVy
biBjOworfQorCitGcmFjdGlvbmFsTGF5b3V0UmVjdCB1bmlvblJlY3QoY29uc3QgVmVjdG9yPEZy
YWN0aW9uYWxMYXlvdXRSZWN0PiYpOworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRSZWN0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYikKK3sK
KyAgICByZXR1cm4gYS5sb2NhdGlvbigpID09IGIubG9jYXRpb24oKSAmJiBhLnNpemUoKSA9PSBi
LnNpemUoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGcmFjdGlvbmFsTGF5
b3V0UmVjdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGIpCit7CisgICAgcmV0dXJu
IGEubG9jYXRpb24oKSAhPSBiLmxvY2F0aW9uKCkgfHwgYS5zaXplKCkgIT0gYi5zaXplKCk7Cit9
CisKK2lubGluZSBJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3QoY29uc3QgRnJhY3Rpb25hbExh
eW91dFJlY3QmIHJlY3QpCit7CisjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKKyAgICByZXR1
cm4gSW50UmVjdChyb3VuZGVkSW50UG9pbnQocmVjdC5sb2NhdGlvbigpKSwgSW50U2l6ZShzbmFw
U2l6ZVRvUGl4ZWwocmVjdC53aWR0aCgpLCByZWN0LngoKSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcFNpemVUb1BpeGVs
KHJlY3QuaGVpZ2h0KCksIHJlY3QueSgpKSkpOworCisjZWxzZQorICAgIHJldHVybiBJbnRSZWN0
KHJlY3QpOworI2VuZGlmCit9CisKK0ludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UmVjdCYpOworRnJhY3Rpb25hbExheW91dFJlY3QgZW5jbG9zaW5nRnJhY3Rp
b25hbExheW91dFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEZyYWN0aW9uYWxMYXlvdXRSZWN0X2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0LmgJKHJldmlzaW9uIDEzMzUxNykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJlY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsMTIgKzI4LDEyIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5k
ZWYgRnJhY3Rpb25hbExheW91dFJlY3RfaAotI2RlZmluZSBGcmFjdGlvbmFsTGF5b3V0UmVjdF9o
CisjaWZuZGVmIExheW91dFJlY3RfaAorI2RlZmluZSBMYXlvdXRSZWN0X2gKIAotI2luY2x1ZGUg
IkZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0
UG9pbnQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94RXh0ZW50
LmgiCisjaW5jbHVkZSAiTGF5b3V0UG9pbnQuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
ICNpZiBQTEFURk9STShRVCkKQEAgLTQ4LDM0ICs0OCwzNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEZsb2F0UmVjdDsKIAotY2xhc3MgRnJhY3Rpb25hbExheW91dFJlY3QgeworY2xh
c3MgTGF5b3V0UmVjdCB7CiBwdWJsaWM6Ci0gICAgRnJhY3Rpb25hbExheW91dFJlY3QoKSB7IH0K
LSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIGxv
Y2F0aW9uLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkKKyAgICBMYXlvdXRSZWN0
KCkgeyB9CisgICAgTGF5b3V0UmVjdChjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIGNvbnN0
IExheW91dFNpemUmIHNpemUpCiAgICAgICAgIDogbV9sb2NhdGlvbihsb2NhdGlvbiksIG1fc2l6
ZShzaXplKSB7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdChGcmFjdGlvbmFsTGF5b3V0VW5p
dCB4LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCB5LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCB3aWR0aCwg
RnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KQotICAgICAgICA6IG1fbG9jYXRpb24oRnJhY3Rp
b25hbExheW91dFBvaW50KHgsIHkpKSwgbV9zaXplKEZyYWN0aW9uYWxMYXlvdXRTaXplKHdpZHRo
LCBoZWlnaHQpKSB7IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdChjb25zdCBGbG9hdFBvaW50
JiBsb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgIExheW91dFJlY3QoTGF5b3V0
VW5pdCB4LCBMYXlvdXRVbml0IHksIExheW91dFVuaXQgd2lkdGgsIExheW91dFVuaXQgaGVpZ2h0
KQorICAgICAgICA6IG1fbG9jYXRpb24oTGF5b3V0UG9pbnQoeCwgeSkpLCBtX3NpemUoTGF5b3V0
U2l6ZSh3aWR0aCwgaGVpZ2h0KSkgeyB9CisgICAgTGF5b3V0UmVjdChjb25zdCBGbG9hdFBvaW50
JiBsb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBzaXplKQogICAgICAgICA6IG1fbG9jYXRpb24o
bG9jYXRpb24pLCBtX3NpemUoc2l6ZSkgeyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFJlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkgOiBtX2xvY2F0aW9uKHJlY3QubG9jYXRpb24oKSksIG1fc2l6ZShy
ZWN0LnNpemUoKSkgeyB9CisgICAgTGF5b3V0UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSA6IG1f
bG9jYXRpb24ocmVjdC5sb2NhdGlvbigpKSwgbV9zaXplKHJlY3Quc2l6ZSgpKSB7IH0KIAotICAg
IGV4cGxpY2l0IEZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOyAvLyBkb24n
dCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQorICAgIGV4cGxpY2l0IExheW91
dFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5j
ZSBpdCdzIGxvc3N5CiAgICAgICAgIAotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBsb2NhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb247IH0KLSAgICBGcmFjdGlvbmFsTGF5b3V0U2l6
ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgTGF5b3V0UG9pbnQgbG9jYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9CisgICAgTGF5b3V0U2l6ZSBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAKICAgICBJbnRQb2ludCBwaXhlbFNuYXBwZWRMb2Nh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIHJvdW5kZWRJbnRQb2ludChtX2xvY2F0aW9uKTsgfQogICAg
IEludFNpemUgcGl4ZWxTbmFwcGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUoc25hcFNp
emVUb1BpeGVsKG1fc2l6ZS53aWR0aCgpLCBtX2xvY2F0aW9uLngoKSksIHNuYXBTaXplVG9QaXhl
bChtX3NpemUuaGVpZ2h0KCksIG1fbG9jYXRpb24ueSgpKSk7IH0KIAotICAgIHZvaWQgc2V0TG9j
YXRpb24oY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBsb2NhdGlvbikgeyBtX2xvY2F0aW9u
ID0gbG9jYXRpb247IH0KLSAgICB2b2lkIHNldFNpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFNp
emUmIHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQorICAgIHZvaWQgc2V0TG9jYXRpb24oY29uc3Qg
TGF5b3V0UG9pbnQmIGxvY2F0aW9uKSB7IG1fbG9jYXRpb24gPSBsb2NhdGlvbjsgfQorICAgIHZv
aWQgc2V0U2l6ZShjb25zdCBMYXlvdXRTaXplJiBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KIAot
ICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHgoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uLngo
KTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHkoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0
aW9uLnkoKTsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1heFgoKSBjb25zdCB7IHJldHVy
biB4KCkgKyB3aWR0aCgpOyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgbWF4WSgpIGNvbnN0
IHsgcmV0dXJuIHkoKSArIGhlaWdodCgpOyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgd2lk
dGgoKSBjb25zdCB7IHJldHVybiBtX3NpemUud2lkdGgoKTsgfQotICAgIEZyYWN0aW9uYWxMYXlv
dXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQorICAgIExh
eW91dFVuaXQgeCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb24ueCgpOyB9CisgICAgTGF5b3V0
VW5pdCB5KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi55KCk7IH0KKyAgICBMYXlvdXRVbml0
IG1heFgoKSBjb25zdCB7IHJldHVybiB4KCkgKyB3aWR0aCgpOyB9CisgICAgTGF5b3V0VW5pdCBt
YXhZKCkgY29uc3QgeyByZXR1cm4geSgpICsgaGVpZ2h0KCk7IH0KKyAgICBMYXlvdXRVbml0IHdp
ZHRoKCkgY29uc3QgeyByZXR1cm4gbV9zaXplLndpZHRoKCk7IH0KKyAgICBMYXlvdXRVbml0IGhl
aWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQogCiAgICAgaW50IHBpeGVs
U25hcHBlZFgoKSBjb25zdCB7IHJldHVybiB4KCkucm91bmQoKTsgfQogICAgIGludCBwaXhlbFNu
YXBwZWRZKCkgY29uc3QgeyByZXR1cm4geSgpLnJvdW5kKCk7IH0KQEAgLTg0LDEzMSArODQsMTMx
IEBAIHB1YmxpYzoKICAgICBpbnQgcGl4ZWxTbmFwcGVkTWF4WCgpIGNvbnN0IHsgcmV0dXJuICht
X2xvY2F0aW9uLngoKSArIG1fc2l6ZS53aWR0aCgpKS5yb3VuZCgpOyB9CiAgICAgaW50IHBpeGVs
U25hcHBlZE1heFkoKSBjb25zdCB7IHJldHVybiAobV9sb2NhdGlvbi55KCkgKyBtX3NpemUuaGVp
Z2h0KCkpLnJvdW5kKCk7IH0KIAotICAgIHZvaWQgc2V0WChGcmFjdGlvbmFsTGF5b3V0VW5pdCB4
KSB7IG1fbG9jYXRpb24uc2V0WCh4KTsgfQotICAgIHZvaWQgc2V0WShGcmFjdGlvbmFsTGF5b3V0
VW5pdCB5KSB7IG1fbG9jYXRpb24uc2V0WSh5KTsgfQotICAgIHZvaWQgc2V0V2lkdGgoRnJhY3Rp
b25hbExheW91dFVuaXQgd2lkdGgpIHsgbV9zaXplLnNldFdpZHRoKHdpZHRoKTsgfQotICAgIHZv
aWQgc2V0SGVpZ2h0KEZyYWN0aW9uYWxMYXlvdXRVbml0IGhlaWdodCkgeyBtX3NpemUuc2V0SGVp
Z2h0KGhlaWdodCk7IH0KKyAgICB2b2lkIHNldFgoTGF5b3V0VW5pdCB4KSB7IG1fbG9jYXRpb24u
c2V0WCh4KTsgfQorICAgIHZvaWQgc2V0WShMYXlvdXRVbml0IHkpIHsgbV9sb2NhdGlvbi5zZXRZ
KHkpOyB9CisgICAgdm9pZCBzZXRXaWR0aChMYXlvdXRVbml0IHdpZHRoKSB7IG1fc2l6ZS5zZXRX
aWR0aCh3aWR0aCk7IH0KKyAgICB2b2lkIHNldEhlaWdodChMYXlvdXRVbml0IGhlaWdodCkgeyBt
X3NpemUuc2V0SGVpZ2h0KGhlaWdodCk7IH0KIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0KIAogICAgIC8vIE5PVEU6IFRoZSByZXN1bHQgaXMg
cm91bmRlZCB0byBpbnRlZ2VyIHZhbHVlcywgYW5kIHRodXMgbWF5IGJlIG5vdCB0aGUgZXhhY3QK
ICAgICAvLyBjZW50ZXIgcG9pbnQuCi0gICAgRnJhY3Rpb25hbExheW91dFBvaW50IGNlbnRlcigp
IGNvbnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludCh4KCkgKyB3aWR0aCgpIC8gMiwg
eSgpICsgaGVpZ2h0KCkgLyAyKTsgfQorICAgIExheW91dFBvaW50IGNlbnRlcigpIGNvbnN0IHsg
cmV0dXJuIExheW91dFBvaW50KHgoKSArIHdpZHRoKCkgLyAyLCB5KCkgKyBoZWlnaHQoKSAvIDIp
OyB9CiAKLSAgICB2b2lkIG1vdmUoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpIHsg
bV9sb2NhdGlvbiArPSBzaXplOyB9IAotICAgIHZvaWQgbW92ZUJ5KGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRQb2ludCYgb2Zmc2V0KSB7IG1fbG9jYXRpb24ubW92ZShvZmZzZXQueCgpLCBvZmZzZXQu
eSgpKTsgfQotICAgIHZvaWQgbW92ZShGcmFjdGlvbmFsTGF5b3V0VW5pdCBkeCwgRnJhY3Rpb25h
bExheW91dFVuaXQgZHkpIHsgbV9sb2NhdGlvbi5tb3ZlKGR4LCBkeSk7IH0gCisgICAgdm9pZCBt
b3ZlKGNvbnN0IExheW91dFNpemUmIHNpemUpIHsgbV9sb2NhdGlvbiArPSBzaXplOyB9IAorICAg
IHZvaWQgbW92ZUJ5KGNvbnN0IExheW91dFBvaW50JiBvZmZzZXQpIHsgbV9sb2NhdGlvbi5tb3Zl
KG9mZnNldC54KCksIG9mZnNldC55KCkpOyB9CisgICAgdm9pZCBtb3ZlKExheW91dFVuaXQgZHgs
IExheW91dFVuaXQgZHkpIHsgbV9sb2NhdGlvbi5tb3ZlKGR4LCBkeSk7IH0gCiAKLSAgICB2b2lk
IGV4cGFuZChjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkgeyBtX3NpemUgKz0gc2l6
ZTsgfQotICAgIHZvaWQgZXhwYW5kKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQmIGJv
eCkKKyAgICB2b2lkIGV4cGFuZChjb25zdCBMYXlvdXRTaXplJiBzaXplKSB7IG1fc2l6ZSArPSBz
aXplOyB9CisgICAgdm9pZCBleHBhbmQoY29uc3QgTGF5b3V0Qm94RXh0ZW50JiBib3gpCiAgICAg
ewogICAgICAgICBtX2xvY2F0aW9uLm1vdmUoLWJveC5sZWZ0KCksIC1ib3gudG9wKCkpOwogICAg
ICAgICBtX3NpemUuZXhwYW5kKGJveC5sZWZ0KCkgKyBib3gucmlnaHQoKSwgYm94LnRvcCgpICsg
Ym94LmJvdHRvbSgpKTsKICAgICB9Ci0gICAgdm9pZCBleHBhbmQoRnJhY3Rpb25hbExheW91dFVu
aXQgZHcsIEZyYWN0aW9uYWxMYXlvdXRVbml0IGRoKSB7IG1fc2l6ZS5leHBhbmQoZHcsIGRoKTsg
fQotICAgIHZvaWQgY29udHJhY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpIHsg
bV9zaXplIC09IHNpemU7IH0KLSAgICB2b2lkIGNvbnRyYWN0KEZyYWN0aW9uYWxMYXlvdXRVbml0
IGR3LCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBkaCkgeyBtX3NpemUuZXhwYW5kKC1kdywgLWRoKTsg
fQorICAgIHZvaWQgZXhwYW5kKExheW91dFVuaXQgZHcsIExheW91dFVuaXQgZGgpIHsgbV9zaXpl
LmV4cGFuZChkdywgZGgpOyB9CisgICAgdm9pZCBjb250cmFjdChjb25zdCBMYXlvdXRTaXplJiBz
aXplKSB7IG1fc2l6ZSAtPSBzaXplOyB9CisgICAgdm9pZCBjb250cmFjdChMYXlvdXRVbml0IGR3
LCBMYXlvdXRVbml0IGRoKSB7IG1fc2l6ZS5leHBhbmQoLWR3LCAtZGgpOyB9CiAKLSAgICB2b2lk
IHNoaWZ0WEVkZ2VUbyhGcmFjdGlvbmFsTGF5b3V0VW5pdCBlZGdlKQorICAgIHZvaWQgc2hpZnRY
RWRnZVRvKExheW91dFVuaXQgZWRnZSkKICAgICB7Ci0gICAgICAgIEZyYWN0aW9uYWxMYXlvdXRV
bml0IGRlbHRhID0gZWRnZSAtIHgoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBkZWx0YSA9IGVkZ2Ug
LSB4KCk7CiAgICAgICAgIHNldFgoZWRnZSk7Ci0gICAgICAgIHNldFdpZHRoKHN0ZDo6bWF4PEZy
YWN0aW9uYWxMYXlvdXRVbml0PigwLCB3aWR0aCgpIC0gZGVsdGEpKTsKKyAgICAgICAgc2V0V2lk
dGgoc3RkOjptYXg8TGF5b3V0VW5pdD4oMCwgd2lkdGgoKSAtIGRlbHRhKSk7CiAgICAgfQotICAg
IHZvaWQgc2hpZnRNYXhYRWRnZVRvKEZyYWN0aW9uYWxMYXlvdXRVbml0IGVkZ2UpCisgICAgdm9p
ZCBzaGlmdE1heFhFZGdlVG8oTGF5b3V0VW5pdCBlZGdlKQogICAgIHsKLSAgICAgICAgRnJhY3Rp
b25hbExheW91dFVuaXQgZGVsdGEgPSBlZGdlIC0gbWF4WCgpOwotICAgICAgICBzZXRXaWR0aChz
dGQ6Om1heDxGcmFjdGlvbmFsTGF5b3V0VW5pdD4oMCwgd2lkdGgoKSArIGRlbHRhKSk7CisgICAg
ICAgIExheW91dFVuaXQgZGVsdGEgPSBlZGdlIC0gbWF4WCgpOworICAgICAgICBzZXRXaWR0aChz
dGQ6Om1heDxMYXlvdXRVbml0PigwLCB3aWR0aCgpICsgZGVsdGEpKTsKICAgICB9Ci0gICAgdm9p
ZCBzaGlmdFlFZGdlVG8oRnJhY3Rpb25hbExheW91dFVuaXQgZWRnZSkKKyAgICB2b2lkIHNoaWZ0
WUVkZ2VUbyhMYXlvdXRVbml0IGVkZ2UpCiAgICAgewotICAgICAgICBGcmFjdGlvbmFsTGF5b3V0
VW5pdCBkZWx0YSA9IGVkZ2UgLSB5KCk7CisgICAgICAgIExheW91dFVuaXQgZGVsdGEgPSBlZGdl
IC0geSgpOwogICAgICAgICBzZXRZKGVkZ2UpOwotICAgICAgICBzZXRIZWlnaHQoc3RkOjptYXg8
RnJhY3Rpb25hbExheW91dFVuaXQ+KDAsIGhlaWdodCgpIC0gZGVsdGEpKTsKKyAgICAgICAgc2V0
SGVpZ2h0KHN0ZDo6bWF4PExheW91dFVuaXQ+KDAsIGhlaWdodCgpIC0gZGVsdGEpKTsKICAgICB9
Ci0gICAgdm9pZCBzaGlmdE1heFlFZGdlVG8oRnJhY3Rpb25hbExheW91dFVuaXQgZWRnZSkKKyAg
ICB2b2lkIHNoaWZ0TWF4WUVkZ2VUbyhMYXlvdXRVbml0IGVkZ2UpCiAgICAgewotICAgICAgICBG
cmFjdGlvbmFsTGF5b3V0VW5pdCBkZWx0YSA9IGVkZ2UgLSBtYXhZKCk7Ci0gICAgICAgIHNldEhl
aWdodChzdGQ6Om1heDxGcmFjdGlvbmFsTGF5b3V0VW5pdD4oMCwgaGVpZ2h0KCkgKyBkZWx0YSkp
OworICAgICAgICBMYXlvdXRVbml0IGRlbHRhID0gZWRnZSAtIG1heFkoKTsKKyAgICAgICAgc2V0
SGVpZ2h0KHN0ZDo6bWF4PExheW91dFVuaXQ+KDAsIGhlaWdodCgpICsgZGVsdGEpKTsKICAgICB9
CiAKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbWluWE1pbllDb3JuZXIoKSBjb25zdCB7IHJl
dHVybiBtX2xvY2F0aW9uOyB9IC8vIHR5cGljYWxseSB0b3BMZWZ0Ci0gICAgRnJhY3Rpb25hbExh
eW91dFBvaW50IG1heFhNaW5ZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gRnJhY3Rpb25hbExheW91
dFBvaW50KG1fbG9jYXRpb24ueCgpICsgbV9zaXplLndpZHRoKCksIG1fbG9jYXRpb24ueSgpKTsg
fSAvLyB0eXBpY2FsbHkgdG9wUmlnaHQKLSAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbWluWE1h
eFlDb3JuZXIoKSBjb25zdCB7IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQobV9sb2NhdGlv
bi54KCksIG1fbG9jYXRpb24ueSgpICsgbV9zaXplLmhlaWdodCgpKTsgfSAvLyB0eXBpY2FsbHkg
Ym90dG9tTGVmdAotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBtYXhYTWF4WUNvcm5lcigpIGNv
bnN0IHsgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChtX2xvY2F0aW9uLngoKSArIG1fc2l6
ZS53aWR0aCgpLCBtX2xvY2F0aW9uLnkoKSArIG1fc2l6ZS5oZWlnaHQoKSk7IH0gLy8gdHlwaWNh
bGx5IGJvdHRvbVJpZ2h0CisgICAgTGF5b3V0UG9pbnQgbWluWE1pbllDb3JuZXIoKSBjb25zdCB7
IHJldHVybiBtX2xvY2F0aW9uOyB9IC8vIHR5cGljYWxseSB0b3BMZWZ0CisgICAgTGF5b3V0UG9p
bnQgbWF4WE1pbllDb3JuZXIoKSBjb25zdCB7IHJldHVybiBMYXlvdXRQb2ludChtX2xvY2F0aW9u
LngoKSArIG1fc2l6ZS53aWR0aCgpLCBtX2xvY2F0aW9uLnkoKSk7IH0gLy8gdHlwaWNhbGx5IHRv
cFJpZ2h0CisgICAgTGF5b3V0UG9pbnQgbWluWE1heFlDb3JuZXIoKSBjb25zdCB7IHJldHVybiBM
YXlvdXRQb2ludChtX2xvY2F0aW9uLngoKSwgbV9sb2NhdGlvbi55KCkgKyBtX3NpemUuaGVpZ2h0
KCkpOyB9IC8vIHR5cGljYWxseSBib3R0b21MZWZ0CisgICAgTGF5b3V0UG9pbnQgbWF4WE1heFlD
b3JuZXIoKSBjb25zdCB7IHJldHVybiBMYXlvdXRQb2ludChtX2xvY2F0aW9uLngoKSArIG1fc2l6
ZS53aWR0aCgpLCBtX2xvY2F0aW9uLnkoKSArIG1fc2l6ZS5oZWlnaHQoKSk7IH0gLy8gdHlwaWNh
bGx5IGJvdHRvbVJpZ2h0CiAgICAgCi0gICAgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRSZWN0JikgY29uc3Q7Ci0gICAgYm9vbCBjb250YWlucyhjb25zdCBGcmFjdGlvbmFs
TGF5b3V0UmVjdCYpIGNvbnN0OworICAgIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBMYXlvdXRSZWN0
JikgY29uc3Q7CisgICAgYm9vbCBjb250YWlucyhjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAK
ICAgICAvLyBUaGlzIGNoZWNrcyB0byBzZWUgaWYgdGhlIHJlY3QgY29udGFpbnMgeCx5IGluIHRo
ZSB0cmFkaXRpb25hbCBzZW5zZS4KICAgICAvLyBFcXVpdmFsZW50IHRvIGNoZWNraW5nIGlmIHRo
ZSByZWN0IGNvbnRhaW5zIGEgMXgxIHJlY3QgYmVsb3cgYW5kIHRvIHRoZSByaWdodCBvZiAocHgs
cHkpLgotICAgIGJvb2wgY29udGFpbnMoRnJhY3Rpb25hbExheW91dFVuaXQgcHgsIEZyYWN0aW9u
YWxMYXlvdXRVbml0IHB5KSBjb25zdAorICAgIGJvb2wgY29udGFpbnMoTGF5b3V0VW5pdCBweCwg
TGF5b3V0VW5pdCBweSkgY29uc3QKICAgICAgICAgeyByZXR1cm4gcHggPj0geCgpICYmIHB4IDwg
bWF4WCgpICYmIHB5ID49IHkoKSAmJiBweSA8IG1heFkoKTsgfQotICAgIGJvb2wgY29udGFpbnMo
Y29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBwb2ludCkgY29uc3QgeyByZXR1cm4gY29udGFp
bnMocG9pbnQueCgpLCBwb2ludC55KCkpOyB9CisgICAgYm9vbCBjb250YWlucyhjb25zdCBMYXlv
dXRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQu
eSgpKTsgfQogCi0gICAgdm9pZCBpbnRlcnNlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3Qm
KTsKLSAgICB2b2lkIHVuaXRlKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0Jik7Ci0gICAgdm9p
ZCB1bml0ZUlmTm9uWmVybyhjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYpOworICAgIHZvaWQg
aW50ZXJzZWN0KGNvbnN0IExheW91dFJlY3QmKTsKKyAgICB2b2lkIHVuaXRlKGNvbnN0IExheW91
dFJlY3QmKTsKKyAgICB2b2lkIHVuaXRlSWZOb25aZXJvKGNvbnN0IExheW91dFJlY3QmKTsKIAot
ICAgIHZvaWQgaW5mbGF0ZVgoRnJhY3Rpb25hbExheW91dFVuaXQgZHgpCisgICAgdm9pZCBpbmZs
YXRlWChMYXlvdXRVbml0IGR4KQogICAgIHsKICAgICAgICAgbV9sb2NhdGlvbi5zZXRYKG1fbG9j
YXRpb24ueCgpIC0gZHgpOwogICAgICAgICBtX3NpemUuc2V0V2lkdGgobV9zaXplLndpZHRoKCkg
KyBkeCArIGR4KTsKICAgICB9Ci0gICAgdm9pZCBpbmZsYXRlWShGcmFjdGlvbmFsTGF5b3V0VW5p
dCBkeSkKKyAgICB2b2lkIGluZmxhdGVZKExheW91dFVuaXQgZHkpCiAgICAgewogICAgICAgICBt
X2xvY2F0aW9uLnNldFkobV9sb2NhdGlvbi55KCkgLSBkeSk7CiAgICAgICAgIG1fc2l6ZS5zZXRI
ZWlnaHQobV9zaXplLmhlaWdodCgpICsgZHkgKyBkeSk7CiAgICAgfQotICAgIHZvaWQgaW5mbGF0
ZShGcmFjdGlvbmFsTGF5b3V0VW5pdCBkKSB7IGluZmxhdGVYKGQpOyBpbmZsYXRlWShkKTsgfQor
ICAgIHZvaWQgaW5mbGF0ZShMYXlvdXRVbml0IGQpIHsgaW5mbGF0ZVgoZCk7IGluZmxhdGVZKGQp
OyB9CiAgICAgdm9pZCBzY2FsZShmbG9hdCBzKTsKIAotICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0
IHRyYW5zcG9zZWRSZWN0KCkgY29uc3QgeyByZXR1cm4gRnJhY3Rpb25hbExheW91dFJlY3QobV9s
b2NhdGlvbi50cmFuc3Bvc2VkUG9pbnQoKSwgbV9zaXplLnRyYW5zcG9zZWRTaXplKCkpOyB9Cisg
ICAgTGF5b3V0UmVjdCB0cmFuc3Bvc2VkUmVjdCgpIGNvbnN0IHsgcmV0dXJuIExheW91dFJlY3Qo
bV9sb2NhdGlvbi50cmFuc3Bvc2VkUG9pbnQoKSwgbV9zaXplLnRyYW5zcG9zZWRTaXplKCkpOyB9
CiAKLSAgICBzdGF0aWMgRnJhY3Rpb25hbExheW91dFJlY3QgaW5maW5pdGVSZWN0KCkKKyAgICBz
dGF0aWMgTGF5b3V0UmVjdCBpbmZpbml0ZVJlY3QoKQogICAgIHsKICAgICAgICAgLy8gUmV0dXJu
IGEgcmVjdCB0aGF0IGlzIHNsaWdodGx5IHNtYWxsZXIgdGhhbiB0aGUgdHJ1ZSBtYXggcmVjdCB0
byBhbGxvdyBwaXhlbFNuYXBwaW5nIHRvIHJvdW5kIHVwIHRvIHRoZSBuZWFyZXN0IEludFJlY3Qg
d2l0aG91dCBvdmVyZmxvd2luZy4KLSAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRSZWN0
KEZyYWN0aW9uYWxMYXlvdXRVbml0OjpuZWFybHlNaW4oKSAvIDIsIEZyYWN0aW9uYWxMYXlvdXRV
bml0OjpuZWFybHlNaW4oKSAvIDIsIEZyYWN0aW9uYWxMYXlvdXRVbml0OjpuZWFybHlNYXgoKSwg
RnJhY3Rpb25hbExheW91dFVuaXQ6Om5lYXJseU1heCgpKTsKKyAgICAgICAgcmV0dXJuIExheW91
dFJlY3QoTGF5b3V0VW5pdDo6bmVhcmx5TWluKCkgLyAyLCBMYXlvdXRVbml0OjpuZWFybHlNaW4o
KSAvIDIsIExheW91dFVuaXQ6Om5lYXJseU1heCgpLCBMYXlvdXRVbml0OjpuZWFybHlNYXgoKSk7
CiAgICAgfQogCiAjaWYgUExBVEZPUk0oUVQpCi0gICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91
dFJlY3QoY29uc3QgUVJlY3QmKTsKLSAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0UmVjdChj
b25zdCBRUmVjdEYmKTsKKyAgICBleHBsaWNpdCBMYXlvdXRSZWN0KGNvbnN0IFFSZWN0Jik7Cisg
ICAgZXhwbGljaXQgTGF5b3V0UmVjdChjb25zdCBRUmVjdEYmKTsKICAgICBvcGVyYXRvciBRUmVj
dEYoKSBjb25zdDsKICNlbmRpZgogCiBwcml2YXRlOgotICAgIEZyYWN0aW9uYWxMYXlvdXRQb2lu
dCBtX2xvY2F0aW9uOwotICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplIG1fc2l6ZTsKKyAgICBMYXlv
dXRQb2ludCBtX2xvY2F0aW9uOworICAgIExheW91dFNpemUgbV9zaXplOwogfTsKIAotaW5saW5l
IEZyYWN0aW9uYWxMYXlvdXRSZWN0IGludGVyc2VjdGlvbihjb25zdCBGcmFjdGlvbmFsTGF5b3V0
UmVjdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIGIpCitpbmxpbmUgTGF5b3V0UmVj
dCBpbnRlcnNlY3Rpb24oY29uc3QgTGF5b3V0UmVjdCYgYSwgY29uc3QgTGF5b3V0UmVjdCYgYikK
IHsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCBjID0gYTsKKyAgICBMYXlvdXRSZWN0IGMgPSBh
OwogICAgIGMuaW50ZXJzZWN0KGIpOwogICAgIHJldHVybiBjOwogfQogCi1pbmxpbmUgRnJhY3Rp
b25hbExheW91dFJlY3QgdW5pb25SZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBhLCBj
b25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYikKK2lubGluZSBMYXlvdXRSZWN0IHVuaW9uUmVj
dChjb25zdCBMYXlvdXRSZWN0JiBhLCBjb25zdCBMYXlvdXRSZWN0JiBiKQogewotICAgIEZyYWN0
aW9uYWxMYXlvdXRSZWN0IGMgPSBhOworICAgIExheW91dFJlY3QgYyA9IGE7CiAgICAgYy51bml0
ZShiKTsKICAgICByZXR1cm4gYzsKIH0KIAotRnJhY3Rpb25hbExheW91dFJlY3QgdW5pb25SZWN0
KGNvbnN0IFZlY3RvcjxGcmFjdGlvbmFsTGF5b3V0UmVjdD4mKTsKK0xheW91dFJlY3QgdW5pb25S
ZWN0KGNvbnN0IFZlY3RvcjxMYXlvdXRSZWN0PiYpOwogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVj
dCYgYikKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgTGF5b3V0UmVjdCYgYSwgY29uc3Qg
TGF5b3V0UmVjdCYgYikKIHsKICAgICByZXR1cm4gYS5sb2NhdGlvbigpID09IGIubG9jYXRpb24o
KSAmJiBhLnNpemUoKSA9PSBiLnNpemUoKTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3Qm
IGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IExheW91dFJlY3QmIGEsIGNvbnN0IExh
eW91dFJlY3QmIGIpCiB7CiAgICAgcmV0dXJuIGEubG9jYXRpb24oKSAhPSBiLmxvY2F0aW9uKCkg
fHwgYS5zaXplKCkgIT0gYi5zaXplKCk7CiB9CiAKLWlubGluZSBJbnRSZWN0IHBpeGVsU25hcHBl
ZEludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmIHJlY3QpCitpbmxpbmUgSW50UmVj
dCBwaXhlbFNuYXBwZWRJbnRSZWN0KGNvbnN0IExheW91dFJlY3QmIHJlY3QpCiB7CiAjaWYgRU5B
QkxFKFNVQlBJWEVMX0xBWU9VVCkKICAgICByZXR1cm4gSW50UmVjdChyb3VuZGVkSW50UG9pbnQo
cmVjdC5sb2NhdGlvbigpKSwgSW50U2l6ZShzbmFwU2l6ZVRvUGl4ZWwocmVjdC53aWR0aCgpLCBy
ZWN0LngoKSksCkBAIC0yMTksOSArMjE5LDI1IEBAIGlubGluZSBJbnRSZWN0IHBpeGVsU25hcHBl
ZEludFJlY3QoY29uc3QKICNlbmRpZgogfQogCi1JbnRSZWN0IGVuY2xvc2luZ0ludFJlY3QoY29u
c3QgRnJhY3Rpb25hbExheW91dFJlY3QmKTsKLUZyYWN0aW9uYWxMYXlvdXRSZWN0IGVuY2xvc2lu
Z0ZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworSW50UmVjdCBlbmNsb3Np
bmdJbnRSZWN0KGNvbnN0IExheW91dFJlY3QmKTsKK0xheW91dFJlY3QgZW5jbG9zaW5nTGF5b3V0
UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKworCitpbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJ
bnRSZWN0KExheW91dFVuaXQgbGVmdCwgTGF5b3V0VW5pdCB0b3AsIExheW91dFVuaXQgd2lkdGgs
IExheW91dFVuaXQgaGVpZ2h0KQoreworICAgIHJldHVybiBJbnRSZWN0KGxlZnQucm91bmQoKSwg
dG9wLnJvdW5kKCksIHNuYXBTaXplVG9QaXhlbCh3aWR0aCwgbGVmdCksIHNuYXBTaXplVG9QaXhl
bChoZWlnaHQsIHRvcCkpOworfQorCitpbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0
RnJvbUVkZ2VzKExheW91dFVuaXQgbGVmdCwgTGF5b3V0VW5pdCB0b3AsIExheW91dFVuaXQgcmln
aHQsIExheW91dFVuaXQgYm90dG9tKQoreworICAgIHJldHVybiBJbnRSZWN0KGxlZnQucm91bmQo
KSwgdG9wLnJvdW5kKCksIHNuYXBTaXplVG9QaXhlbChyaWdodCAtIGxlZnQsIGxlZnQpLCBzbmFw
U2l6ZVRvUGl4ZWwoYm90dG9tIC0gdG9wLCB0b3ApKTsKK30KKworaW5saW5lIEludFJlY3QgcGl4
ZWxTbmFwcGVkSW50UmVjdChMYXlvdXRQb2ludCBsb2NhdGlvbiwgTGF5b3V0U2l6ZSBzaXplKQor
eworICAgIHJldHVybiBJbnRSZWN0KHJvdW5kZWRJbnRQb2ludChsb2NhdGlvbiksIHBpeGVsU25h
cHBlZEludFNpemUoc2l6ZSwgbG9jYXRpb24pKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCi0jZW5kaWYgLy8gRnJhY3Rpb25hbExheW91dFJlY3RfaAorI2VuZGlmIC8vIExheW91dFJl
Y3RfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0U2l6ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFNp
emUuaAkocmV2aXNpb24gMTMzNTE3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GcmFjdGlvbmFsTGF5b3V0U2l6ZS5oOjEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0xheW91dFNpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIEZyYWN0aW9uYWxMYXlvdXRTaXplX2gKKyNkZWZpbmUgRnJhY3Rpb25hbExh
eW91dFNpemVfaAorCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiRnJhY3Rpb25h
bExheW91dFVuaXQuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisKKyNpZiBQTEFURk9STShRVCkK
KyNpbmNsdWRlIDxxZ2xvYmFsLmg+CitRVF9CRUdJTl9OQU1FU1BBQ0UKK2NsYXNzIFFTaXplOwor
Y2xhc3MgUVNpemVGOworUVRfRU5EX05BTUVTUEFDRQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgRnJhY3Rpb25hbExheW91dFBvaW50OworCitjbGFzcyBGcmFjdGlvbmFs
TGF5b3V0U2l6ZSB7CitwdWJsaWM6CisgICAgRnJhY3Rpb25hbExheW91dFNpemUoKSA6IG1fd2lk
dGgoMCksIG1faGVpZ2h0KDApIHsgfQorICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0IElu
dFNpemUmIHNpemUpIDogbV93aWR0aChzaXplLndpZHRoKCkpLCBtX2hlaWdodChzaXplLmhlaWdo
dCgpKSB7IH0KKyAgICBGcmFjdGlvbmFsTGF5b3V0U2l6ZShGcmFjdGlvbmFsTGF5b3V0VW5pdCB3
aWR0aCwgRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KSA6IG1fd2lkdGgod2lkdGgpLCBtX2hl
aWdodChoZWlnaHQpIHsgfQorCisgICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFNpemUoY29u
c3QgRmxvYXRTaXplJiBzaXplKSA6IG1fd2lkdGgoc2l6ZS53aWR0aCgpKSwgbV9oZWlnaHQoc2l6
ZS5oZWlnaHQoKSkgeyB9CisgICAgCisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgoKSBj
b25zdCB7IHJldHVybiBtX3dpZHRoOyB9CisgICAgRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0
KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KKworICAgIHZvaWQgc2V0V2lkdGgoRnJhY3Rp
b25hbExheW91dFVuaXQgd2lkdGgpIHsgbV93aWR0aCA9IHdpZHRoOyB9CisgICAgdm9pZCBzZXRI
ZWlnaHQoRnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KSB7IG1faGVpZ2h0ID0gaGVpZ2h0OyB9
CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoIDw9IDAgfHwgbV9o
ZWlnaHQgPD0gMDsgfQorICAgIGJvb2wgaXNaZXJvKCkgY29uc3QgeyByZXR1cm4gIW1fd2lkdGgg
JiYgIW1faGVpZ2h0OyB9CisKKyAgICBmbG9hdCBhc3BlY3RSYXRpbygpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PGZsb2F0PihtX3dpZHRoKSAvIHN0YXRpY19jYXN0PGZsb2F0PihtX2hlaWdo
dCk7IH0KKyAgICAKKyAgICB2b2lkIGV4cGFuZChGcmFjdGlvbmFsTGF5b3V0VW5pdCB3aWR0aCwg
RnJhY3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KQorICAgIHsKKyAgICAgICAgbV93aWR0aCArPSB3
aWR0aDsKKyAgICAgICAgbV9oZWlnaHQgKz0gaGVpZ2h0OworICAgIH0KKyAgICAKKyAgICB2b2lk
IHNjYWxlKGZsb2F0IHNjYWxlKQorICAgIHsKKyAgICAgICAgbV93aWR0aCAqPSBzY2FsZTsKKyAg
ICAgICAgbV9oZWlnaHQgKj0gc2NhbGU7CisgICAgfQorCisgICAgdm9pZCBzY2FsZShmbG9hdCB3
aWR0aFNjYWxlLCBmbG9hdCBoZWlnaHRTY2FsZSkKKyAgICB7CisgICAgICAgIG1fd2lkdGggKj0g
d2lkdGhTY2FsZTsKKyAgICAgICAgbV9oZWlnaHQgKj0gaGVpZ2h0U2NhbGU7CisgICAgfQorICAg
IAorICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplIGV4cGFuZGVkVG8oY29uc3QgRnJhY3Rpb25hbExh
eW91dFNpemUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxM
YXlvdXRTaXplKG1fd2lkdGggPiBvdGhlci5tX3dpZHRoID8gbV93aWR0aCA6IG90aGVyLm1fd2lk
dGgsCisgICAgICAgICAgICBtX2hlaWdodCA+IG90aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBv
dGhlci5tX2hlaWdodCk7CisgICAgfQorCisgICAgRnJhY3Rpb25hbExheW91dFNpemUgc2hydW5r
VG8oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKG1fd2lkdGggPCBvdGhlci5tX3dpZHRoID8g
bV93aWR0aCA6IG90aGVyLm1fd2lkdGgsCisgICAgICAgICAgICBtX2hlaWdodCA8IG90aGVyLm1f
aGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdodCk7CisgICAgfQorCisgICAgdm9pZCBj
bGFtcE5lZ2F0aXZlVG9aZXJvKCkKKyAgICB7CisgICAgICAgICp0aGlzID0gZXhwYW5kZWRUbyhG
cmFjdGlvbmFsTGF5b3V0U2l6ZSgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGFtcFRvTWlu
aW11bVNpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIG1pbmltdW1TaXplKQorICAgIHsK
KyAgICAgICAgaWYgKG1fd2lkdGggPCBtaW5pbXVtU2l6ZS53aWR0aCgpKQorICAgICAgICAgICAg
bV93aWR0aCA9IG1pbmltdW1TaXplLndpZHRoKCk7CisgICAgICAgIGlmIChtX2hlaWdodCA8IG1p
bmltdW1TaXplLmhlaWdodCgpKQorICAgICAgICAgICAgbV9oZWlnaHQgPSBtaW5pbXVtU2l6ZS5o
ZWlnaHQoKTsKKyAgICB9CisKKyAgICBGcmFjdGlvbmFsTGF5b3V0U2l6ZSB0cmFuc3Bvc2VkU2l6
ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUobV9o
ZWlnaHQsIG1fd2lkdGgpOworICAgIH0KKworI2lmIFBMQVRGT1JNKFFUKQorICAgIGV4cGxpY2l0
IEZyYWN0aW9uYWxMYXlvdXRTaXplKGNvbnN0IFFTaXplJik7CisgICAgZXhwbGljaXQgRnJhY3Rp
b25hbExheW91dFNpemUoY29uc3QgUVNpemVGJik7CisgICAgb3BlcmF0b3IgUVNpemVGKCkgY29u
c3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBtX3dpZHRo
LCBtX2hlaWdodDsKK307CisKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgb3BlcmF0b3Ir
PShGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIp
Cit7CisgICAgYS5zZXRXaWR0aChhLndpZHRoKCkgKyBiLndpZHRoKCkpOworICAgIGEuc2V0SGVp
Z2h0KGEuaGVpZ2h0KCkgKyBiLmhlaWdodCgpKTsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5l
IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBvcGVyYXRvci09KEZyYWN0aW9uYWxMYXlvdXRTaXplJiBh
LCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikKK3sKKyAgICBhLnNldFdpZHRoKGEud2lk
dGgoKSAtIGIud2lkdGgoKSk7CisgICAgYS5zZXRIZWlnaHQoYS5oZWlnaHQoKSAtIGIuaGVpZ2h0
KCkpOworICAgIHJldHVybiBhOworfQorCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFNpemUgb3Bl
cmF0b3IrKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0U2l6ZSYgYikKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUoYS53aWR0aCgp
ICsgYi53aWR0aCgpLCBhLmhlaWdodCgpICsgYi5oZWlnaHQoKSk7Cit9CisKK2lubGluZSBGcmFj
dGlvbmFsTGF5b3V0U2l6ZSBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGEs
IGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQoreworICAgIHJldHVybiBGcmFjdGlvbmFs
TGF5b3V0U2l6ZShhLndpZHRoKCkgLSBiLndpZHRoKCksIGEuaGVpZ2h0KCkgLSBiLmhlaWdodCgp
KTsKK30KKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplIG9wZXJhdG9yLShjb25zdCBGcmFj
dGlvbmFsTGF5b3V0U2l6ZSYgc2l6ZSkKK3sKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNp
emUoLXNpemUud2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkpOworfQorCitpbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5
b3V0U2l6ZSYgYikKK3sKKyAgICByZXR1cm4gYS53aWR0aCgpID09IGIud2lkdGgoKSAmJiBhLmhl
aWdodCgpID09IGIuaGVpZ2h0KCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3Qg
RnJhY3Rpb25hbExheW91dFNpemUmIGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQor
eworICAgIHJldHVybiBhLndpZHRoKCkgIT0gYi53aWR0aCgpIHx8IGEuaGVpZ2h0KCkgIT0gYi5o
ZWlnaHQoKTsKK30KKworaW5saW5lIEludFNpemUgZmxvb3JlZEludFNpemUoY29uc3QgRnJhY3Rp
b25hbExheW91dFNpemUmIHMpCit7CisgICAgcmV0dXJuIEludFNpemUocy53aWR0aCgpLmZsb29y
KCksIHMuaGVpZ2h0KCkuZmxvb3IoKSk7Cit9CisKK2lubGluZSBJbnRTaXplIHJvdW5kZWRJbnRT
aXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzKQoreworICAgIHJldHVybiBJbnRTaXpl
KHMud2lkdGgoKS5yb3VuZCgpLCBzLmhlaWdodCgpLnJvdW5kKCkpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBGcmFjdGlvbmFsTGF5b3V0U2l6ZV9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRTaXplLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0U2l6ZS5oCShyZXZpc2lv
biAxMzM1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRTaXpl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEyICsyOCwxMiBAQAogICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCi0jaWZuZGVmIEZyYWN0aW9uYWxMYXlvdXRTaXplX2gKLSNkZWZpbmUgRnJhY3Rpb25hbExh
eW91dFNpemVfaAorI2lmbmRlZiBMYXlvdXRTaXplX2gKKyNkZWZpbmUgTGF5b3V0U2l6ZV9oCiAK
ICNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0VW5pdC5o
IgogI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJMYXlvdXRVbml0LmgiCiAKICNpZiBQ
TEFURk9STShRVCkKICNpbmNsdWRlIDxxZ2xvYmFsLmg+CkBAIC00NSwyOCArNDUsMjggQEAgUVRf
RU5EX05BTUVTUEFDRQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZyYWN0aW9uYWxM
YXlvdXRQb2ludDsKK2NsYXNzIExheW91dFBvaW50OwogCi1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0
U2l6ZSB7CitjbGFzcyBMYXlvdXRTaXplIHsKIHB1YmxpYzoKLSAgICBGcmFjdGlvbmFsTGF5b3V0
U2l6ZSgpIDogbV93aWR0aCgwKSwgbV9oZWlnaHQoMCkgeyB9Ci0gICAgRnJhY3Rpb25hbExheW91
dFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgOiBtX3dpZHRoKHNpemUud2lkdGgoKSksIG1faGVp
Z2h0KHNpemUuaGVpZ2h0KCkpIHsgfQotICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplKEZyYWN0aW9u
YWxMYXlvdXRVbml0IHdpZHRoLCBGcmFjdGlvbmFsTGF5b3V0VW5pdCBoZWlnaHQpIDogbV93aWR0
aCh3aWR0aCksIG1faGVpZ2h0KGhlaWdodCkgeyB9CisgICAgTGF5b3V0U2l6ZSgpIDogbV93aWR0
aCgwKSwgbV9oZWlnaHQoMCkgeyB9CisgICAgTGF5b3V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXpl
KSA6IG1fd2lkdGgoc2l6ZS53aWR0aCgpKSwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkgeyB9Cisg
ICAgTGF5b3V0U2l6ZShMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IGhlaWdodCkgOiBtX3dp
ZHRoKHdpZHRoKSwgbV9oZWlnaHQoaGVpZ2h0KSB7IH0KIAotICAgIGV4cGxpY2l0IEZyYWN0aW9u
YWxMYXlvdXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgOiBtX3dpZHRoKHNpemUud2lkdGgo
KSksIG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkpIHsgfQorICAgIGV4cGxpY2l0IExheW91dFNpemUo
Y29uc3QgRmxvYXRTaXplJiBzaXplKSA6IG1fd2lkdGgoc2l6ZS53aWR0aCgpKSwgbV9oZWlnaHQo
c2l6ZS5oZWlnaHQoKSkgeyB9CiAgICAgCi0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgd2lkdGgo
KSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9Ci0gICAgRnJhY3Rpb25hbExheW91dFVuaXQgaGVp
Z2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KKyAgICBMYXlvdXRVbml0IHdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQorICAgIExheW91dFVuaXQgaGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbV9oZWlnaHQ7IH0KIAotICAgIHZvaWQgc2V0V2lkdGgoRnJhY3Rpb25hbExheW91
dFVuaXQgd2lkdGgpIHsgbV93aWR0aCA9IHdpZHRoOyB9Ci0gICAgdm9pZCBzZXRIZWlnaHQoRnJh
Y3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KSB7IG1faGVpZ2h0ID0gaGVpZ2h0OyB9CisgICAgdm9p
ZCBzZXRXaWR0aChMYXlvdXRVbml0IHdpZHRoKSB7IG1fd2lkdGggPSB3aWR0aDsgfQorICAgIHZv
aWQgc2V0SGVpZ2h0KExheW91dFVuaXQgaGVpZ2h0KSB7IG1faGVpZ2h0ID0gaGVpZ2h0OyB9CiAK
ICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoIDw9IDAgfHwgbV9oZWln
aHQgPD0gMDsgfQogICAgIGJvb2wgaXNaZXJvKCkgY29uc3QgeyByZXR1cm4gIW1fd2lkdGggJiYg
IW1faGVpZ2h0OyB9CiAKICAgICBmbG9hdCBhc3BlY3RSYXRpbygpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PGZsb2F0PihtX3dpZHRoKSAvIHN0YXRpY19jYXN0PGZsb2F0PihtX2hlaWdodCk7
IH0KICAgICAKLSAgICB2b2lkIGV4cGFuZChGcmFjdGlvbmFsTGF5b3V0VW5pdCB3aWR0aCwgRnJh
Y3Rpb25hbExheW91dFVuaXQgaGVpZ2h0KQorICAgIHZvaWQgZXhwYW5kKExheW91dFVuaXQgd2lk
dGgsIExheW91dFVuaXQgaGVpZ2h0KQogICAgIHsKICAgICAgICAgbV93aWR0aCArPSB3aWR0aDsK
ICAgICAgICAgbV9oZWlnaHQgKz0gaGVpZ2h0OwpAQCAtODQsMjQgKzg0LDI0IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9oZWlnaHQgKj0gaGVpZ2h0U2NhbGU7CiAgICAgfQogICAgIAotICAgIEZyYWN0
aW9uYWxMYXlvdXRTaXplIGV4cGFuZGVkVG8oY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIG90
aGVyKSBjb25zdAorICAgIExheW91dFNpemUgZXhwYW5kZWRUbyhjb25zdCBMYXlvdXRTaXplJiBv
dGhlcikgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZSht
X3dpZHRoID4gb3RoZXIubV93aWR0aCA/IG1fd2lkdGggOiBvdGhlci5tX3dpZHRoLAorICAgICAg
ICByZXR1cm4gTGF5b3V0U2l6ZShtX3dpZHRoID4gb3RoZXIubV93aWR0aCA/IG1fd2lkdGggOiBv
dGhlci5tX3dpZHRoLAogICAgICAgICAgICAgbV9oZWlnaHQgPiBvdGhlci5tX2hlaWdodCA/IG1f
aGVpZ2h0IDogb3RoZXIubV9oZWlnaHQpOwogICAgIH0KIAotICAgIEZyYWN0aW9uYWxMYXlvdXRT
aXplIHNocnVua1RvKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBvdGhlcikgY29uc3QKKyAg
ICBMYXlvdXRTaXplIHNocnVua1RvKGNvbnN0IExheW91dFNpemUmIG90aGVyKSBjb25zdAogICAg
IHsKLSAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKG1fd2lkdGggPCBvdGhlci5t
X3dpZHRoID8gbV93aWR0aCA6IG90aGVyLm1fd2lkdGgsCisgICAgICAgIHJldHVybiBMYXlvdXRT
aXplKG1fd2lkdGggPCBvdGhlci5tX3dpZHRoID8gbV93aWR0aCA6IG90aGVyLm1fd2lkdGgsCiAg
ICAgICAgICAgICBtX2hlaWdodCA8IG90aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5t
X2hlaWdodCk7CiAgICAgfQogCiAgICAgdm9pZCBjbGFtcE5lZ2F0aXZlVG9aZXJvKCkKICAgICB7
Ci0gICAgICAgICp0aGlzID0gZXhwYW5kZWRUbyhGcmFjdGlvbmFsTGF5b3V0U2l6ZSgpKTsKKyAg
ICAgICAgKnRoaXMgPSBleHBhbmRlZFRvKExheW91dFNpemUoKSk7CiAgICAgfQogICAgIAotICAg
IHZvaWQgY2xhbXBUb01pbmltdW1TaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBtaW5p
bXVtU2l6ZSkKKyAgICB2b2lkIGNsYW1wVG9NaW5pbXVtU2l6ZShjb25zdCBMYXlvdXRTaXplJiBt
aW5pbXVtU2l6ZSkKICAgICB7CiAgICAgICAgIGlmIChtX3dpZHRoIDwgbWluaW11bVNpemUud2lk
dGgoKSkKICAgICAgICAgICAgIG1fd2lkdGggPSBtaW5pbXVtU2l6ZS53aWR0aCgpOwpAQCAtMTA5
LDcwICsxMDksNzkgQEAgcHVibGljOgogICAgICAgICAgICAgbV9oZWlnaHQgPSBtaW5pbXVtU2l6
ZS5oZWlnaHQoKTsKICAgICB9CiAKLSAgICBGcmFjdGlvbmFsTGF5b3V0U2l6ZSB0cmFuc3Bvc2Vk
U2l6ZSgpIGNvbnN0CisgICAgTGF5b3V0U2l6ZSB0cmFuc3Bvc2VkU2l6ZSgpIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUobV9oZWlnaHQsIG1fd2lkdGgp
OworICAgICAgICByZXR1cm4gTGF5b3V0U2l6ZShtX2hlaWdodCwgbV93aWR0aCk7CiAgICAgfQog
CiAjaWYgUExBVEZPUk0oUVQpCi0gICAgZXhwbGljaXQgRnJhY3Rpb25hbExheW91dFNpemUoY29u
c3QgUVNpemUmKTsKLSAgICBleHBsaWNpdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZShjb25zdCBRU2l6
ZUYmKTsKKyAgICBleHBsaWNpdCBMYXlvdXRTaXplKGNvbnN0IFFTaXplJik7CisgICAgZXhwbGlj
aXQgTGF5b3V0U2l6ZShjb25zdCBRU2l6ZUYmKTsKICAgICBvcGVyYXRvciBRU2l6ZUYoKSBjb25z
dDsKICNlbmRpZgogCiBwcml2YXRlOgotICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IG1fd2lkdGgs
IG1faGVpZ2h0OworICAgIExheW91dFVuaXQgbV93aWR0aCwgbV9oZWlnaHQ7CiB9OwogCi1pbmxp
bmUgRnJhY3Rpb25hbExheW91dFNpemUmIG9wZXJhdG9yKz0oRnJhY3Rpb25hbExheW91dFNpemUm
IGEsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBiKQoraW5saW5lIExheW91dFNpemUmIG9w
ZXJhdG9yKz0oTGF5b3V0U2l6ZSYgYSwgY29uc3QgTGF5b3V0U2l6ZSYgYikKIHsKICAgICBhLnNl
dFdpZHRoKGEud2lkdGgoKSArIGIud2lkdGgoKSk7CiAgICAgYS5zZXRIZWlnaHQoYS5oZWlnaHQo
KSArIGIuaGVpZ2h0KCkpOwogICAgIHJldHVybiBhOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExh
eW91dFNpemUmIG9wZXJhdG9yLT0oRnJhY3Rpb25hbExheW91dFNpemUmIGEsIGNvbnN0IEZyYWN0
aW9uYWxMYXlvdXRTaXplJiBiKQoraW5saW5lIExheW91dFNpemUmIG9wZXJhdG9yLT0oTGF5b3V0
U2l6ZSYgYSwgY29uc3QgTGF5b3V0U2l6ZSYgYikKIHsKICAgICBhLnNldFdpZHRoKGEud2lkdGgo
KSAtIGIud2lkdGgoKSk7CiAgICAgYS5zZXRIZWlnaHQoYS5oZWlnaHQoKSAtIGIuaGVpZ2h0KCkp
OwogICAgIHJldHVybiBhOwogfQogCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFNpemUgb3BlcmF0
b3IrKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0
U2l6ZSYgYikKK2lubGluZSBMYXlvdXRTaXplIG9wZXJhdG9yKyhjb25zdCBMYXlvdXRTaXplJiBh
LCBjb25zdCBMYXlvdXRTaXplJiBiKQogewotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6
ZShhLndpZHRoKCkgKyBiLndpZHRoKCksIGEuaGVpZ2h0KCkgKyBiLmhlaWdodCgpKTsKKyAgICBy
ZXR1cm4gTGF5b3V0U2l6ZShhLndpZHRoKCkgKyBiLndpZHRoKCksIGEuaGVpZ2h0KCkgKyBiLmhl
aWdodCgpKTsKIH0KIAotaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRTaXplIG9wZXJhdG9yLShjb25z
dCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIGIp
CitpbmxpbmUgTGF5b3V0U2l6ZSBvcGVyYXRvci0oY29uc3QgTGF5b3V0U2l6ZSYgYSwgY29uc3Qg
TGF5b3V0U2l6ZSYgYikKIHsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUoYS53aWR0
aCgpIC0gYi53aWR0aCgpLCBhLmhlaWdodCgpIC0gYi5oZWlnaHQoKSk7CisgICAgcmV0dXJuIExh
eW91dFNpemUoYS53aWR0aCgpIC0gYi53aWR0aCgpLCBhLmhlaWdodCgpIC0gYi5oZWlnaHQoKSk7
CiB9CiAKLWlubGluZSBGcmFjdGlvbmFsTGF5b3V0U2l6ZSBvcGVyYXRvci0oY29uc3QgRnJhY3Rp
b25hbExheW91dFNpemUmIHNpemUpCitpbmxpbmUgTGF5b3V0U2l6ZSBvcGVyYXRvci0oY29uc3Qg
TGF5b3V0U2l6ZSYgc2l6ZSkKIHsKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUoLXNp
emUud2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkpOworICAgIHJldHVybiBMYXlvdXRTaXplKC1zaXpl
LndpZHRoKCksIC1zaXplLmhlaWdodCgpKTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUm
IGIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExheW91dFNpemUmIGEsIGNvbnN0IExh
eW91dFNpemUmIGIpCiB7CiAgICAgcmV0dXJuIGEud2lkdGgoKSA9PSBiLndpZHRoKCkgJiYgYS5o
ZWlnaHQoKSA9PSBiLmhlaWdodCgpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0U2l6ZSYgYikK
K2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgTGF5b3V0U2l6ZSYgYSwgY29uc3QgTGF5b3V0
U2l6ZSYgYikKIHsKICAgICByZXR1cm4gYS53aWR0aCgpICE9IGIud2lkdGgoKSB8fCBhLmhlaWdo
dCgpICE9IGIuaGVpZ2h0KCk7CiB9CiAKLWlubGluZSBJbnRTaXplIGZsb29yZWRJbnRTaXplKGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzKQoraW5saW5lIEludFNpemUgZmxvb3JlZEludFNp
emUoY29uc3QgTGF5b3V0U2l6ZSYgcykKIHsKICAgICByZXR1cm4gSW50U2l6ZShzLndpZHRoKCku
Zmxvb3IoKSwgcy5oZWlnaHQoKS5mbG9vcigpKTsKIH0KIAotaW5saW5lIEludFNpemUgcm91bmRl
ZEludFNpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHMpCitpbmxpbmUgSW50U2l6ZSBy
b3VuZGVkSW50U2l6ZShjb25zdCBMYXlvdXRTaXplJiBzKQogewogICAgIHJldHVybiBJbnRTaXpl
KHMud2lkdGgoKS5yb3VuZCgpLCBzLmhlaWdodCgpLnJvdW5kKCkpOwogfQogCitpbmxpbmUgTGF5
b3V0U2l6ZSByb3VuZGVkTGF5b3V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHMpCit7CisjaWYgRU5B
QkxFKFNVQlBJWEVMX0xBWU9VVCkKKyAgICByZXR1cm4gTGF5b3V0U2l6ZShzKTsKKyNlbHNlCisg
ICAgcmV0dXJuIHJvdW5kZWRJbnRTaXplKHMpOworI2VuZGlmCit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAotI2VuZGlmIC8vIEZyYWN0aW9uYWxMYXlvdXRTaXplX2gKKyNlbmRpZiAvLyBM
YXlvdXRTaXplX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TWVkaWFQbGF5ZXIuaAkocmV2aXNpb24gMTMzNzY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBA
QAogCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJM
YXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5j
bHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0N1c3RvbUZpbHRlck9wZXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgJKHJldmlzaW9u
IDEzMzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKICNp
bmNsdWRlICJDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0LmgiCiAjaW5jbHVkZSAiQ3VzdG9tRmls
dGVyUHJvZ3JhbS5oIgogI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIkxh
eW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3Vz
dG9tRmlsdGVyUGFyYW1ldGVyTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdC5oCShyZXZp
c2lvbiAxMzM3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0N1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEs
NyBAQAogI2RlZmluZSBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0X2gKIAogI2lmIEVOQUJMRShD
U1NfU0hBREVSUykKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFNp
emUuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJPcGVyYXRpb24uaAkocmV2aXNpb24gMTMzNzY0KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJG
aWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91
dFNpemUuaCIKICNpbmNsdWRlICJMZW5ndGguaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5oCShy
ZXZpc2lvbiAxMzM3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlck9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAog
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKIAogI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbi5oIgot
I2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9WYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvVmFsaWRhdGVkQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uLmNwcAkocmV2aXNpb24gMTMzNzY0KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9WYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAKICNpbmNsdWRlICJDdXN0
b21GaWx0ZXJQYXJhbWV0ZXIuaCIKICNpbmNsdWRlICJDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9n
cmFtLmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFNpemUuaCIKKyNpbmNsdWRlICJMYXlv
dXRTaXplLmgiCiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvVmFs
aWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9WYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRp
b24uaAkocmV2aXNpb24gMTMzNzY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9WYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIkN1c3RvbUZpbHRlckNvbnN0YW50cy5oIgog
I2luY2x1ZGUgIkN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QuaCIKICNpbmNsdWRlICJGaWx0ZXJP
cGVyYXRpb24uaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFNp
emUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9GcmFjdGlvbmFsTGF5b3V0UG9pbnRRdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFBv
aW50UXQuY3BwCShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9GcmFjdGlvbmFsTGF5b3V0UG9pbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNDUgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRQb2ludC5oIgotCi0jaW5jbHVkZSA8UVBvaW50Pgot
I2luY2x1ZGUgPFFQb2ludEY+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRnJhY3Rpb25hbExh
eW91dFBvaW50OjpGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgUVBvaW50JiBwb2ludCkKLSAg
ICA6IG1feChwb2ludC54KCkpCi0gICAgLCBtX3kocG9pbnQueSgpKQotewotfQotCi1GcmFjdGlv
bmFsTGF5b3V0UG9pbnQ6OkZyYWN0aW9uYWxMYXlvdXRQb2ludChjb25zdCBRUG9pbnRGJiBwb2lu
dCkKLSAgICA6IG1feChwb2ludC54KCkpCi0gICAgLCBtX3kocG9pbnQueSgpKQotewotfQotCi1G
cmFjdGlvbmFsTGF5b3V0UG9pbnQ6Om9wZXJhdG9yIFFQb2ludEYoKSBjb25zdAotewotICAgIHJl
dHVybiBRUG9pbnRGKG1feCwgbV95KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0aW9uYWxMYXlvdXRSZWN0UXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZyYWN0
aW9uYWxMYXlvdXRSZWN0UXQuY3BwCShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9GcmFjdGlvbmFsTGF5b3V0UmVjdFF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw0NSArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAxMiBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFJlY3QuaCIKLQotI2luY2x1ZGUg
PFFSZWN0PgotI2luY2x1ZGUgPFFSZWN0Rj4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1GcmFj
dGlvbmFsTGF5b3V0UmVjdDo6RnJhY3Rpb25hbExheW91dFJlY3QoY29uc3QgUVJlY3QmIHIpCi0g
ICAgOiBtX2xvY2F0aW9uKHIudG9wTGVmdCgpKQotICAgICwgbV9zaXplKHIud2lkdGgoKSwgci5o
ZWlnaHQoKSkKLXsKLX0KLQotRnJhY3Rpb25hbExheW91dFJlY3Q6OkZyYWN0aW9uYWxMYXlvdXRS
ZWN0KGNvbnN0IFFSZWN0RiYgcikKLSAgICA6IG1fbG9jYXRpb24oci50b3BMZWZ0KCkpCi0gICAg
LCBtX3NpemUoci53aWR0aCgpLCByLmhlaWdodCgpKQotewotfQotCi1GcmFjdGlvbmFsTGF5b3V0
UmVjdDo6b3BlcmF0b3IgUVJlY3RGKCkgY29uc3QKLXsKLSAgICByZXR1cm4gUVJlY3RGKHgoKSwg
eSgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9GcmFjdGlvbmFsTGF5b3V0U2l6ZVF0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9GcmFj
dGlvbmFsTGF5b3V0U2l6ZVF0LmNwcAkocmV2aXNpb24gMTMzNzY0KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFNpemVRdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFNpemUuaCIKLQotI2luY2x1
ZGUgPFFTaXplPgotI2luY2x1ZGUgPFFTaXplRj4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1G
cmFjdGlvbmFsTGF5b3V0U2l6ZTo6RnJhY3Rpb25hbExheW91dFNpemUoY29uc3QgUVNpemUmIHNp
emUpCi0gICAgOiBtX3dpZHRoKHNpemUud2lkdGgoKSkKLSAgICAsIG1faGVpZ2h0KHNpemUuaGVp
Z2h0KCkpCi17Ci19Ci0KLUZyYWN0aW9uYWxMYXlvdXRTaXplOjpGcmFjdGlvbmFsTGF5b3V0U2l6
ZShjb25zdCBRU2l6ZUYmIHNpemUpCi0gICAgOiBtX3dpZHRoKHNpemUud2lkdGgoKSkKLSAgICAs
IG1faGVpZ2h0KHNpemUuaGVpZ2h0KCkpCi17Ci19Ci0KLUZyYWN0aW9uYWxMYXlvdXRTaXplOjpv
cGVyYXRvciBRU2l6ZUYoKSBjb25zdAotewotICAgIHJldHVybiBRU2l6ZUYod2lkdGgoKSwgaGVp
Z2h0KCkpOwotfQotCi19IC8vIG5hbWVzcGFjZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvTGF5b3V0UG9pbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTGF5b3V0UG9pbnRRdC5jcHAJKHJldmlzaW9uIDEz
MzUxNykJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRnJhY3Rpb25h
bExheW91dFBvaW50UXQuY3BwOjEzMzUxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0xheW91dFBvaW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUg
QEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
cmFjdGlvbmFsTGF5b3V0UG9pbnQuaCIKKworI2luY2x1ZGUgPFFQb2ludD4KKyNpbmNsdWRlIDxR
UG9pbnRGPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZyYWN0aW9uYWxMYXlvdXRQb2ludDo6
RnJhY3Rpb25hbExheW91dFBvaW50KGNvbnN0IFFQb2ludCYgcG9pbnQpCisgICAgOiBtX3gocG9p
bnQueCgpKQorICAgICwgbV95KHBvaW50LnkoKSkKK3sKK30KKworRnJhY3Rpb25hbExheW91dFBv
aW50OjpGcmFjdGlvbmFsTGF5b3V0UG9pbnQoY29uc3QgUVBvaW50RiYgcG9pbnQpCisgICAgOiBt
X3gocG9pbnQueCgpKQorICAgICwgbV95KHBvaW50LnkoKSkKK3sKK30KKworRnJhY3Rpb25hbExh
eW91dFBvaW50OjpvcGVyYXRvciBRUG9pbnRGKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUVBvaW50
RihtX3gsIG1feSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9MYXlvdXRQb2ludFF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9MYXlvdXRQb2ludFF0LmNwcAkocmV2aXNp
b24gMTMzNTE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTGF5b3V0
UG9pbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4LDI2ICsxOCwyNiBAQAogKi8KIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRQb2ludC5oIgorI2lu
Y2x1ZGUgIkxheW91dFBvaW50LmgiCiAKICNpbmNsdWRlIDxRUG9pbnQ+CiAjaW5jbHVkZSA8UVBv
aW50Rj4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GcmFjdGlvbmFsTGF5b3V0UG9pbnQ6OkZy
YWN0aW9uYWxMYXlvdXRQb2ludChjb25zdCBRUG9pbnQmIHBvaW50KQorTGF5b3V0UG9pbnQ6Okxh
eW91dFBvaW50KGNvbnN0IFFQb2ludCYgcG9pbnQpCiAgICAgOiBtX3gocG9pbnQueCgpKQogICAg
ICwgbV95KHBvaW50LnkoKSkKIHsKIH0KIAotRnJhY3Rpb25hbExheW91dFBvaW50OjpGcmFjdGlv
bmFsTGF5b3V0UG9pbnQoY29uc3QgUVBvaW50RiYgcG9pbnQpCitMYXlvdXRQb2ludDo6TGF5b3V0
UG9pbnQoY29uc3QgUVBvaW50RiYgcG9pbnQpCiAgICAgOiBtX3gocG9pbnQueCgpKQogICAgICwg
bV95KHBvaW50LnkoKSkKIHsKIH0KIAotRnJhY3Rpb25hbExheW91dFBvaW50OjpvcGVyYXRvciBR
UG9pbnRGKCkgY29uc3QKK0xheW91dFBvaW50OjpvcGVyYXRvciBRUG9pbnRGKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gUVBvaW50RihtX3gsIG1feSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9MYXlvdXRSZWN0UXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0xheW91dFJlY3RRdC5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9MYXlvdXRSZWN0UXQu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ1IEBACisvKgorICAgIENvcHlyaWdodCAoQykg
MjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgorCisjaW5jbHVkZSA8
UVJlY3Q+CisjaW5jbHVkZSA8UVJlY3RGPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0xheW91
dFJlY3Q6OkxheW91dFJlY3QoY29uc3QgUVJlY3QmIHIpCisgICAgOiBtX2xvY2F0aW9uKHIudG9w
TGVmdCgpKQorICAgICwgbV9zaXplKHIud2lkdGgoKSwgci5oZWlnaHQoKSkKK3sKK30KKworTGF5
b3V0UmVjdDo6TGF5b3V0UmVjdChjb25zdCBRUmVjdEYmIHIpCisgICAgOiBtX2xvY2F0aW9uKHIu
dG9wTGVmdCgpKQorICAgICwgbV9zaXplKHIud2lkdGgoKSwgci5oZWlnaHQoKSkKK3sKK30KKwor
TGF5b3V0UmVjdDo6b3BlcmF0b3IgUVJlY3RGKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUVJlY3RG
KHgoKSwgeSgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9MYXlvdXRTaXplUXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0xheW91dFNp
emVRdC5jcHAJKHJldmlzaW9uIDEzMzUxNykJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvRnJhY3Rpb25hbExheW91dFNpemVRdC5jcHA6MTMzNTE3KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTGF5b3V0U2l6ZVF0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0U2l6ZS5oIgorCisjaW5jbHVkZSA8
UVNpemU+CisjaW5jbHVkZSA8UVNpemVGPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZyYWN0
aW9uYWxMYXlvdXRTaXplOjpGcmFjdGlvbmFsTGF5b3V0U2l6ZShjb25zdCBRU2l6ZSYgc2l6ZSkK
KyAgICA6IG1fd2lkdGgoc2l6ZS53aWR0aCgpKQorICAgICwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQo
KSkKK3sKK30KKworRnJhY3Rpb25hbExheW91dFNpemU6OkZyYWN0aW9uYWxMYXlvdXRTaXplKGNv
bnN0IFFTaXplRiYgc2l6ZSkKKyAgICA6IG1fd2lkdGgoc2l6ZS53aWR0aCgpKQorICAgICwgbV9o
ZWlnaHQoc2l6ZS5oZWlnaHQoKSkKK3sKK30KKworRnJhY3Rpb25hbExheW91dFNpemU6Om9wZXJh
dG9yIFFTaXplRigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFFTaXplRih3aWR0aCgpLCBoZWlnaHQo
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9MYXlvdXRTaXplUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0xheW91dFNpemVRdC5jcHAJKHJldmlzaW9uIDEzMzUxNykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0xheW91dFNpemVRdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE5LDI2ICsxOSwyNiBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0U2l6ZS5oIgorI2luY2x1ZGUgIkxheW91dFNp
emUuaCIKIAogI2luY2x1ZGUgPFFTaXplPgogI2luY2x1ZGUgPFFTaXplRj4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1GcmFjdGlvbmFsTGF5b3V0U2l6ZTo6RnJhY3Rpb25hbExheW91dFNpemUo
Y29uc3QgUVNpemUmIHNpemUpCitMYXlvdXRTaXplOjpMYXlvdXRTaXplKGNvbnN0IFFTaXplJiBz
aXplKQogICAgIDogbV93aWR0aChzaXplLndpZHRoKCkpCiAgICAgLCBtX2hlaWdodChzaXplLmhl
aWdodCgpKQogewogfQogCi1GcmFjdGlvbmFsTGF5b3V0U2l6ZTo6RnJhY3Rpb25hbExheW91dFNp
emUoY29uc3QgUVNpemVGJiBzaXplKQorTGF5b3V0U2l6ZTo6TGF5b3V0U2l6ZShjb25zdCBRU2l6
ZUYmIHNpemUpCiAgICAgOiBtX3dpZHRoKHNpemUud2lkdGgoKSkKICAgICAsIG1faGVpZ2h0KHNp
emUuaGVpZ2h0KCkpCiB7CiB9CiAKLUZyYWN0aW9uYWxMYXlvdXRTaXplOjpvcGVyYXRvciBRU2l6
ZUYoKSBjb25zdAorTGF5b3V0U2l6ZTo6b3BlcmF0b3IgUVNpemVGKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gUVNpemVGKHdpZHRoKCksIGhlaWdodCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJh
bnNmb3JtT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogI2lmbmRlZiBUcmFuc2Zvcm1PcGVyYXRpb25zX2gK
ICNkZWZpbmUgVHJhbnNmb3JtT3BlcmF0aW9uc19oCiAKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5o
IgorI2luY2x1ZGUgIkxheW91dFNpemUuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1PcGVyYXRpb24u
aCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1T
dGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Ry
YW5zZm9ybXMvVHJhbnNmb3JtU3RhdGUuaAkocmV2aXNpb24gMTMzNzY0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2lu
Y2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJMYXlv
dXRUeXBlc0lubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCiAjaW5jbHVk
ZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3Jt
YXRpb25NYXRyaXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwCShyZXZpc2lvbiAxMzM3
NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5z
Zm9ybWF0aW9uTWF0cml4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsOCBAQAogI2lu
Y2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUg
IkZsb2F0UXVhZC5oIgotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRSZWN0LmgiCiAjaW5jbHVk
ZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKIAogI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTYxNywxMCArNjE3
LDEwIEBAIEZsb2F0UXVhZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cHJvamVjdFEKIHN0YXRpYyBm
bG9hdCBjbGFtcEVkZ2VWYWx1ZShmbG9hdCBmKQogewogICAgIEFTU0VSVCghaXNuYW4oZikpOwot
ICAgIHJldHVybiBtaW48ZmxvYXQ+KG1heDxmbG9hdD4oZiwgLUZyYWN0aW9uYWxMYXlvdXRVbml0
OjptYXgoKSAvIDIpLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWF4KCkgLyAyKTsKKyAgICByZXR1
cm4gbWluPGZsb2F0PihtYXg8ZmxvYXQ+KGYsIC1MYXlvdXRVbml0OjptYXgoKSAvIDIpLCBMYXlv
dXRVbml0OjptYXgoKSAvIDIpOwogfQogCi1GcmFjdGlvbmFsTGF5b3V0UmVjdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeDo6Y2xhbXBlZEJvdW5kc09mUHJvamVjdGVkUXVhZChjb25zdCBGbG9hdFF1YWQm
IHEpIGNvbnN0CitMYXlvdXRSZWN0IFRyYW5zZm9ybWF0aW9uTWF0cml4OjpjbGFtcGVkQm91bmRz
T2ZQcm9qZWN0ZWRRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcSkgY29uc3QKIHsKICAgICBGbG9hdFJl
Y3QgbWFwcGVkUXVhZEJvdW5kcyA9IHByb2plY3RRdWFkKHEpLmJvdW5kaW5nQm94KCk7CiAKQEAg
LTYyOSwxOCArNjI5LDE3IEBAIEZyYWN0aW9uYWxMYXlvdXRSZWN0IFRyYW5zZm9ybWF0aW9uTWF0
cmkKIAogICAgIGZsb2F0IHJpZ2h0OwogICAgIGlmIChpc2luZihtYXBwZWRRdWFkQm91bmRzLngo
KSkgJiYgaXNpbmYobWFwcGVkUXVhZEJvdW5kcy53aWR0aCgpKSkKLSAgICAgICAgcmlnaHQgPSBG
cmFjdGlvbmFsTGF5b3V0VW5pdDo6bWF4KCkgLyAyOworICAgICAgICByaWdodCA9IExheW91dFVu
aXQ6Om1heCgpIC8gMjsKICAgICBlbHNlCiAgICAgICAgIHJpZ2h0ID0gY2xhbXBFZGdlVmFsdWUo
Y2VpbGYobWFwcGVkUXVhZEJvdW5kcy5tYXhYKCkpKTsKIAogICAgIGZsb2F0IGJvdHRvbTsKICAg
ICBpZiAoaXNpbmYobWFwcGVkUXVhZEJvdW5kcy55KCkpICYmIGlzaW5mKG1hcHBlZFF1YWRCb3Vu
ZHMuaGVpZ2h0KCkpKQotICAgICAgICBib3R0b20gPSBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWF4
KCkgLyAyOworICAgICAgICBib3R0b20gPSBMYXlvdXRVbml0OjptYXgoKSAvIDI7CiAgICAgZWxz
ZQogICAgICAgICBib3R0b20gPSBjbGFtcEVkZ2VWYWx1ZShjZWlsZihtYXBwZWRRdWFkQm91bmRz
Lm1heFkoKSkpOwogCi0gICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRSZWN0KEZyYWN0aW9uYWxM
YXlvdXRVbml0OjpjbGFtcChsZWZ0KSwgRnJhY3Rpb25hbExheW91dFVuaXQ6OmNsYW1wKHRvcCks
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6
Y2xhbXAocmlnaHQgLSBsZWZ0KSwgRnJhY3Rpb25hbExheW91dFVuaXQ6OmNsYW1wKGJvdHRvbSAt
IHRvcCkpOworICAgIHJldHVybiBMYXlvdXRSZWN0KExheW91dFVuaXQ6OmNsYW1wKGxlZnQpLCBM
YXlvdXRVbml0OjpjbGFtcCh0b3ApLCAgTGF5b3V0VW5pdDo6Y2xhbXAocmlnaHQgLSBsZWZ0KSwg
TGF5b3V0VW5pdDo6Y2xhbXAoYm90dG9tIC0gdG9wKSk7CiB9CiAKIEZsb2F0UG9pbnQgVHJhbnNm
b3JtYXRpb25NYXRyaXg6Om1hcFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApIGNvbnN0CkBAIC02
NzAsOSArNjY5LDkgQEAgSW50UmVjdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUmVjdChjbwog
ICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KG1hcFJlY3QoRmxvYXRSZWN0KHJlY3QpKSk7CiB9
CiAKLUZyYWN0aW9uYWxMYXlvdXRSZWN0IFRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBSZWN0KGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiByKSBjb25zdAorTGF5b3V0UmVjdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeDo6bWFwUmVjdChjb25zdCBMYXlvdXRSZWN0JiByKSBjb25zdAogewotICAgIHJl
dHVybiBlbmNsb3NpbmdGcmFjdGlvbmFsTGF5b3V0UmVjdChtYXBSZWN0KEZsb2F0UmVjdChyKSkp
OworICAgIHJldHVybiBlbmNsb3NpbmdMYXlvdXRSZWN0KG1hcFJlY3QoRmxvYXRSZWN0KHIpKSk7
CiB9CiAKIEZsb2F0UmVjdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUmVjdChjb25zdCBGbG9h
dFJlY3QmIHIpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
CShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcg
KzY0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBj
bGFzcyBJbnRSZWN0OwotY2xhc3MgRnJhY3Rpb25hbExheW91dFJlY3Q7CitjbGFzcyBMYXlvdXRS
ZWN0OwogY2xhc3MgRmxvYXRQb2ludDNEOwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgRmxvYXRR
dWFkOwpAQCAtMTU3LDcgKzE1Nyw3IEBAIHB1YmxpYzoKICAgICAvLyBSb3VuZHMgdGhlIHJlc3Vs
dGluZyBtYXBwZWQgcmVjdGFuZ2xlIG91dC4gVGhpcyBpcyBoZWxwZnVsIGZvciBib3VuZGluZwog
ICAgIC8vIGJveCBjb21wdXRhdGlvbnMgYnV0IG1heSBub3QgYmUgd2hhdCBpcyB3YW50ZWQgaW4g
b3RoZXIgY29udGV4dHMuCiAgICAgSW50UmVjdCBtYXBSZWN0KGNvbnN0IEludFJlY3QmKSBjb25z
dDsKLSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCBtYXBSZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRSZWN0JikgY29uc3Q7CisgICAgTGF5b3V0UmVjdCBtYXBSZWN0KGNvbnN0IExheW91dFJlY3Qm
KSBjb25zdDsKIAogICAgIC8vIElmIHRoZSBtYXRyaXggaGFzIDNEIGNvbXBvbmVudHMsIHRoZSB6
IGNvbXBvbmVudCBvZiB0aGUgcmVzdWx0IGlzCiAgICAgLy8gZHJvcHBlZCwgZWZmZWN0aXZlbHkg
cHJvamVjdGluZyB0aGUgcXVhZCBpbnRvIHRoZSB6PTAgcGxhbmUKQEAgLTE3Myw3ICsxNzMsNyBA
QCBwdWJsaWM6CiAgICAgRmxvYXRRdWFkIHByb2plY3RRdWFkKGNvbnN0IEZsb2F0UXVhZCYsICBi
b29sKiBjbGFtcGVkID0gMCkgY29uc3Q7CiAgICAgLy8gUHJvamVjdHMgdGhlIGZvdXIgY29ybmVy
cyBvZiB0aGUgcXVhZCBhbmQgdGFrZXMgYSBib3VuZGluZyBib3gsCiAgICAgLy8gd2hpbGUgc2Fu
aXRpemluZyB2YWx1ZXMgY3JlYXRlZCB3aGVuIHRoZSB3IGNvbXBvbmVudCBpcyBuZWdhdGl2ZS4K
LSAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdCBjbGFtcGVkQm91bmRzT2ZQcm9qZWN0ZWRRdWFkKGNv
bnN0IEZsb2F0UXVhZCYpIGNvbnN0OworICAgIExheW91dFJlY3QgY2xhbXBlZEJvdW5kc09mUHJv
amVjdGVkUXVhZChjb25zdCBGbG9hdFF1YWQmKSBjb25zdDsKIAogICAgIGRvdWJsZSBtMTEoKSBj
b25zdCB7IHJldHVybiBtX21hdHJpeFswXVswXTsgfQogICAgIHZvaWQgc2V0TTExKGRvdWJsZSBm
KSB7IG1fbWF0cml4WzBdWzBdID0gZjsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0F1dG9UYWJsZUxheW91dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9BdXRvVGFibGVMYXlvdXQuaAkocmV2aXNpb24gMTMzNzY0KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3
IEBACiAjaWZuZGVmIEF1dG9UYWJsZUxheW91dF9oCiAjZGVmaW5lIEF1dG9UYWJsZUxheW91dF9o
CiAKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKICNp
bmNsdWRlICJMZW5ndGguaCIKICNpbmNsdWRlICJUYWJsZUxheW91dC5oIgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db2x1bW5JbmZvLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbHVtbkluZm8uaAkocmV2
aXNpb24gMTMzNzY0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbHVtbkluZm8uaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBDb2x1bW5JbmZvX2gKICNk
ZWZpbmUgQ29sdW1uSW5mb19oCiAKLSNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMu
aCIKKyNpbmNsdWRlICJMYXlvdXRVbml0LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oCShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlLmgiCiAj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXNJbmxpbmVNZXRob2Rz
LmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTc4
LDE0ICs3OCwxNCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgQVNTRVJUKG1fc2hhcGUpOwog
ICAgICAgICAvLyBVc2UgZnJvbUZsb2F0Q2VpbCgpIHRvIGVuc3VyZSB0aGF0IHRoZSByZXR1cm5l
ZCBMYXlvdXRVbml0IHZhbHVlIGlzIHdpdGhpbiB0aGUgc2hhcGUncyBib3VuZHMuCi0gICAgICAg
IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChtX3NoYXBlLT5zaGFw
ZUxvZ2ljYWxCb3VuZGluZ0JveCgpLnkoKSk7CisgICAgICAgIHJldHVybiBMYXlvdXRVbml0Ojpm
cm9tRmxvYXRDZWlsKG1fc2hhcGUtPnNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkueSgpKTsKICAg
ICB9CiAKICAgICBpbmxpbmUgTGF5b3V0VW5pdCBzaGFwZUxvZ2ljYWxCb3VuZHNNYXhZKCkgY29u
c3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3NoYXBlKTsKICAgICAgICAgLy8gVXNlIGZyb21G
bG9hdEZsb29yKCkgdG8gZW5zdXJlIHRoYXQgdGhlIHJldHVybmVkIExheW91dFVuaXQgdmFsdWUg
aXMgd2l0aGluIHRoZSBzaGFwZSdzIGJvdW5kcy4KLSAgICAgICAgcmV0dXJuIEZyYWN0aW9uYWxM
YXlvdXRVbml0Ojpmcm9tRmxvYXRGbG9vcihtX3NoYXBlLT5zaGFwZUxvZ2ljYWxCb3VuZGluZ0Jv
eCgpLm1heFkoKSk7CisgICAgICAgIHJldHVybiBMYXlvdXRVbml0Ojpmcm9tRmxvYXRGbG9vciht
X3NoYXBlLT5zaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpLm1heFkoKSk7CiAgICAgfQogCiAgICAg
UmVuZGVyQmxvY2sqIG1fYmxvY2s7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmls
dGVyRWZmZWN0UmVuZGVyZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaAkocmV2aXNpb24gMTMzNzY0KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDEwICszMiw5IEBACiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiRmls
dGVyT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZyYWN0
aW9uYWxMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCIK
KyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgog
I2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0ZpeGVkVGFibGVMYXlvdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvRml4ZWRUYWJsZUxheW91dC5oCShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3
ICsyMSw3IEBACiAjaWZuZGVmIEZpeGVkVGFibGVMYXlvdXRfaAogI2RlZmluZSBGaXhlZFRhYmxl
TGF5b3V0X2gKIAotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0VW5p
dC5oIgogI2luY2x1ZGUgIkxlbmd0aC5oIgogI2luY2x1ZGUgIlRhYmxlTGF5b3V0LmgiCiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dhcFJl
Y3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dhcFJlY3RzLmgJ
KHJldmlzaW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HYXBSZWN0cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiAjaWZuZGVmIEdhcFJlY3RzX2gKICNk
ZWZpbmUgR2FwUmVjdHNfaAogCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJM
YXlvdXRSZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3
ICsyNSw3IEBACiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGlu
ZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiVGV4dERpcmVj
dGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNo
U2V0Lmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdGluZ1RyYW5zZm9y
bVN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVz
dGluZ1RyYW5zZm9ybVN0YXRlLmNwcAkocmV2aXNpb24gMTMzNzY0KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0hpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIaXRUZXN0
aW5nVHJhbnNmb3JtU3RhdGUuaCIKIAotI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRSZWN0Lmgi
CisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTgwLDcgKzgwLDcgQEAgRmxvYXRRdWFkIEhpdFRlc3Rp
bmdUcmFuc2Zvcm1TdGF0ZTo6bWFwcAogICAgIHJldHVybiBtX2FjY3VtdWxhdGVkVHJhbnNmb3Jt
LmludmVyc2UoKS5wcm9qZWN0UXVhZChtX2xhc3RQbGFuYXJBcmVhKTsKIH0KIAotRnJhY3Rpb25h
bExheW91dFJlY3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlOjpib3VuZHNPZk1hcHBlZEFyZWEo
KSBjb25zdAorTGF5b3V0UmVjdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU6OmJvdW5kc09mTWFw
cGVkQXJlYSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fYWNjdW11bGF0ZWRUcmFuc2Zvcm0uaW52
ZXJzZSgpLmNsYW1wZWRCb3VuZHNPZlByb2plY3RlZFF1YWQobV9sYXN0UGxhbmFyQXJlYSk7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RpbmdUcmFu
c2Zvcm1TdGF0ZS5oCShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5
LDcgQEAgcHVibGljOgogICAgIEZsb2F0UG9pbnQgbWFwcGVkUG9pbnQoKSBjb25zdDsKICAgICBG
bG9hdFF1YWQgbWFwcGVkUXVhZCgpIGNvbnN0OwogICAgIEZsb2F0UXVhZCBtYXBwZWRBcmVhKCkg
Y29uc3Q7Ci0gICAgRnJhY3Rpb25hbExheW91dFJlY3QgYm91bmRzT2ZNYXBwZWRBcmVhKCkgY29u
c3Q7CisgICAgTGF5b3V0UmVjdCBib3VuZHNPZk1hcHBlZEFyZWEoKSBjb25zdDsKICAgICB2b2lk
IGZsYXR0ZW4oKTsKIAogICAgIEZsb2F0UG9pbnQgbV9sYXN0UGxhbmFyUG9pbnQ7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAxMzM3
NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY3Nyw4ICs2NzcsOCBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBsYWNlQm94
ZXNJbkJsb2NrRGlyCiAKICAgICAgICAgICAgICAgICBSZW5kZXJSdWJ5UnVuKiBydWJ5UnVuID0g
dG9SZW5kZXJSdWJ5UnVuKGN1cnItPnJlbmRlcmVyKCkpOwogICAgICAgICAgICAgICAgIGlmIChS
ZW5kZXJSdWJ5QmFzZSogcnVieUJhc2UgPSBydWJ5UnVuLT5ydWJ5QmFzZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIExheW91dFVuaXQgYm90dG9tUnVieUJhc2VMZWFkaW5nID0gKGN1cnItPmxv
Z2ljYWxIZWlnaHQoKSAtIHJ1YnlCYXNlLT5sb2dpY2FsQm90dG9tKCkpICsgcnVieUJhc2UtPmxv
Z2ljYWxIZWlnaHQoKSAtIChydWJ5QmFzZS0+bGFzdFJvb3RCb3goKSA/IHJ1YnlCYXNlLT5sYXN0
Um9vdEJveCgpLT5saW5lQm90dG9tKCkgOiBaRVJPX0xBWU9VVF9VTklUKTsKLSAgICAgICAgICAg
ICAgICAgICAgTGF5b3V0VW5pdCB0b3BSdWJ5QmFzZUxlYWRpbmcgPSBydWJ5QmFzZS0+bG9naWNh
bFRvcCgpICsgKHJ1YnlCYXNlLT5maXJzdFJvb3RCb3goKSA/IHJ1YnlCYXNlLT5maXJzdFJvb3RC
b3goKS0+bGluZVRvcCgpIDogWkVST19MQVlPVVRfVU5JVCk7CisgICAgICAgICAgICAgICAgICAg
IExheW91dFVuaXQgYm90dG9tUnVieUJhc2VMZWFkaW5nID0gKGN1cnItPmxvZ2ljYWxIZWlnaHQo
KSAtIHJ1YnlCYXNlLT5sb2dpY2FsQm90dG9tKCkpICsgcnVieUJhc2UtPmxvZ2ljYWxIZWlnaHQo
KSAtIChydWJ5QmFzZS0+bGFzdFJvb3RCb3goKSA/IHJ1YnlCYXNlLT5sYXN0Um9vdEJveCgpLT5s
aW5lQm90dG9tKCkgOiBMYXlvdXRVbml0KCkpOworICAgICAgICAgICAgICAgICAgICBMYXlvdXRV
bml0IHRvcFJ1YnlCYXNlTGVhZGluZyA9IHJ1YnlCYXNlLT5sb2dpY2FsVG9wKCkgKyAocnVieUJh
c2UtPmZpcnN0Um9vdEJveCgpID8gcnVieUJhc2UtPmZpcnN0Um9vdEJveCgpLT5saW5lVG9wKCkg
OiBMYXlvdXRVbml0KCkpOwogICAgICAgICAgICAgICAgICAgICBuZXdMb2dpY2FsVG9wICs9ICFy
ZW5kZXJlcigpLT5zdHlsZSgpLT5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkgPyB0b3BSdWJ5
QmFzZUxlYWRpbmcgOiBib3R0b21SdWJ5QmFzZUxlYWRpbmc7CiAgICAgICAgICAgICAgICAgICAg
IGJveEhlaWdodCAtPSAodG9wUnVieUJhc2VMZWFkaW5nICsgYm90dG9tUnVieUJhc2VMZWFkaW5n
KTsKICAgICAgICAgICAgICAgICB9CkBAIC03OTEsNyArNzkxLDcgQEAgaW5saW5lIHZvaWQgSW5s
aW5lRmxvd0JveDo6YWRkQm9yZGVyT3V0cwogICAgIGlmICghc3R5bGUtPmhhc0JvcmRlckltYWdl
T3V0c2V0cygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0
ZW50IGJvcmRlck91dHNldHMgPSBzdHlsZS0+Ym9yZGVySW1hZ2VPdXRzZXRzKCk7CisgICAgTGF5
b3V0Qm94RXh0ZW50IGJvcmRlck91dHNldHMgPSBzdHlsZS0+Ym9yZGVySW1hZ2VPdXRzZXRzKCk7
CiAKICAgICBMYXlvdXRVbml0IGJvcmRlck91dHNldExvZ2ljYWxUb3AgPSBib3JkZXJPdXRzZXRz
LmxvZ2ljYWxUb3Aoc3R5bGUtPndyaXRpbmdNb2RlKCkpOwogICAgIExheW91dFVuaXQgYm9yZGVy
T3V0c2V0TG9naWNhbEJvdHRvbSA9IGJvcmRlck91dHNldHMubG9naWNhbEJvdHRvbShzdHlsZS0+
d3JpdGluZ01vZGUoKSk7CkBAIC04MDYsOCArODA2LDggQEAgaW5saW5lIHZvaWQgSW5saW5lRmxv
d0JveDo6YWRkQm9yZGVyT3V0cwogICAgIExheW91dFVuaXQgbG9naWNhbFRvcFZpc3VhbE92ZXJm
bG93ID0gbWluKHBpeGVsU25hcHBlZExvZ2ljYWxUb3AoKSAtIG91dHNldExvZ2ljYWxUb3AsIGxv
Z2ljYWxWaXN1YWxPdmVyZmxvdy55KCkpOwogICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbVZp
c3VhbE92ZXJmbG93ID0gbWF4KHBpeGVsU25hcHBlZExvZ2ljYWxCb3R0b20oKSArIG91dHNldExv
Z2ljYWxCb3R0b20sIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy5tYXhZKCkpOwogCi0gICAgTGF5b3V0
VW5pdCBvdXRzZXRMb2dpY2FsTGVmdCA9IGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2UoKSA/IGJvcmRl
ck91dHNldExvZ2ljYWxMZWZ0IDogWkVST19MQVlPVVRfVU5JVDsKLSAgICBMYXlvdXRVbml0IG91
dHNldExvZ2ljYWxSaWdodCA9IGluY2x1ZGVMb2dpY2FsUmlnaHRFZGdlKCkgPyBib3JkZXJPdXRz
ZXRMb2dpY2FsUmlnaHQgOiBaRVJPX0xBWU9VVF9VTklUOworICAgIExheW91dFVuaXQgb3V0c2V0
TG9naWNhbExlZnQgPSBpbmNsdWRlTG9naWNhbExlZnRFZGdlKCkgPyBib3JkZXJPdXRzZXRMb2dp
Y2FsTGVmdCA6IExheW91dFVuaXQoKTsKKyAgICBMYXlvdXRVbml0IG91dHNldExvZ2ljYWxSaWdo
dCA9IGluY2x1ZGVMb2dpY2FsUmlnaHRFZGdlKCkgPyBib3JkZXJPdXRzZXRMb2dpY2FsUmlnaHQg
OiBMYXlvdXRVbml0KCk7CiAKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZs
b3cgPSBtaW4ocGl4ZWxTbmFwcGVkTG9naWNhbExlZnQoKSAtIG91dHNldExvZ2ljYWxMZWZ0LCBs
b2dpY2FsVmlzdWFsT3ZlcmZsb3cueCgpKTsKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodFZp
c3VhbE92ZXJmbG93ID0gbWF4KHBpeGVsU25hcHBlZExvZ2ljYWxSaWdodCgpICsgb3V0c2V0TG9n
aWNhbFJpZ2h0LCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cubWF4WCgpKTsKQEAgLTExNDIsOCArMTE0
Miw4IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGFpbnRGaWxsTGF5ZXIoY29uc3QKICAgICAgICAg
ICAgIGZvciAoSW5saW5lRmxvd0JveCogY3VyciA9IHRoaXM7IGN1cnI7IGN1cnIgPSBjdXJyLT5w
cmV2TGluZUJveCgpKQogICAgICAgICAgICAgICAgIHRvdGFsTG9naWNhbFdpZHRoICs9IGN1cnIt
PmxvZ2ljYWxXaWR0aCgpOwogICAgICAgICB9Ci0gICAgICAgIExheW91dFVuaXQgc3RyaXBYID0g
cmVjdC54KCkgLSAoaXNIb3Jpem9udGFsKCkgPyBsb2dpY2FsT2Zmc2V0T25MaW5lIDogWkVST19M
QVlPVVRfVU5JVCk7Ci0gICAgICAgIExheW91dFVuaXQgc3RyaXBZID0gcmVjdC55KCkgLSAoaXNI
b3Jpem9udGFsKCkgPyBaRVJPX0xBWU9VVF9VTklUIDogbG9naWNhbE9mZnNldE9uTGluZSk7Cisg
ICAgICAgIExheW91dFVuaXQgc3RyaXBYID0gcmVjdC54KCkgLSAoaXNIb3Jpem9udGFsKCkgPyBs
b2dpY2FsT2Zmc2V0T25MaW5lIDogTGF5b3V0VW5pdCgpKTsKKyAgICAgICAgTGF5b3V0VW5pdCBz
dHJpcFkgPSByZWN0LnkoKSAtIChpc0hvcml6b250YWwoKSA/IExheW91dFVuaXQoKSA6IGxvZ2lj
YWxPZmZzZXRPbkxpbmUpOwogICAgICAgICBMYXlvdXRVbml0IHN0cmlwV2lkdGggPSBpc0hvcml6
b250YWwoKSA/IHRvdGFsTG9naWNhbFdpZHRoIDogc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4od2lk
dGgoKSk7CiAgICAgICAgIExheW91dFVuaXQgc3RyaXBIZWlnaHQgPSBpc0hvcml6b250YWwoKSA/
IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KGhlaWdodCgpKSA6IHRvdGFsTG9naWNhbFdpZHRoOwog
CkBAIC0xMjY5LDggKzEyNjksOCBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50Qm94RGVjb3Jh
dGlvbnMoCiAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCB0b3RhbExvZ2ljYWxXaWR0aCA9IGxv
Z2ljYWxPZmZzZXRPbkxpbmU7CiAgICAgICAgICAgICAgICAgZm9yIChJbmxpbmVGbG93Qm94KiBj
dXJyID0gdGhpczsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkpCiAgICAgICAgICAg
ICAgICAgICAgIHRvdGFsTG9naWNhbFdpZHRoICs9IGN1cnItPmxvZ2ljYWxXaWR0aCgpOwotICAg
ICAgICAgICAgICAgIExheW91dFVuaXQgc3RyaXBYID0gYWRqdXN0ZWRQYWludG9mZnNldC54KCkg
LSAoaXNIb3Jpem9udGFsKCkgPyBsb2dpY2FsT2Zmc2V0T25MaW5lIDogWkVST19MQVlPVVRfVU5J
VCk7Ci0gICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFkgPSBhZGp1c3RlZFBhaW50b2Zm
c2V0LnkoKSAtIChpc0hvcml6b250YWwoKSA/IFpFUk9fTEFZT1VUX1VOSVQgOiBsb2dpY2FsT2Zm
c2V0T25MaW5lKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHN0cmlwWCA9IGFkanVzdGVk
UGFpbnRvZmZzZXQueCgpIC0gKGlzSG9yaXpvbnRhbCgpID8gbG9naWNhbE9mZnNldE9uTGluZSA6
IExheW91dFVuaXQoKSk7CisgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFkgPSBhZGp1
c3RlZFBhaW50b2Zmc2V0LnkoKSAtIChpc0hvcml6b250YWwoKSA/IExheW91dFVuaXQoKSA6IGxv
Z2ljYWxPZmZzZXRPbkxpbmUpOwogICAgICAgICAgICAgICAgIExheW91dFVuaXQgc3RyaXBXaWR0
aCA9IGlzSG9yaXpvbnRhbCgpID8gdG90YWxMb2dpY2FsV2lkdGggOiBmcmFtZVJlY3Qud2lkdGgo
KTsKICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHN0cmlwSGVpZ2h0ID0gaXNIb3Jpem9udGFs
KCkgPyBmcmFtZVJlY3QuaGVpZ2h0KCkgOiB0b3RhbExvZ2ljYWxXaWR0aDsKIApAQCAtMTM0MSw4
ICsxMzQxLDggQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludE1hc2soUGFpbnRJbmZvJgogICAg
ICAgICBMYXlvdXRVbml0IHRvdGFsTG9naWNhbFdpZHRoID0gbG9naWNhbE9mZnNldE9uTGluZTsK
ICAgICAgICAgZm9yIChJbmxpbmVGbG93Qm94KiBjdXJyID0gdGhpczsgY3VycjsgY3VyciA9IGN1
cnItPm5leHRMaW5lQm94KCkpCiAgICAgICAgICAgICB0b3RhbExvZ2ljYWxXaWR0aCArPSBjdXJy
LT5sb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFggPSBhZGp1c3RlZFBh
aW50T2Zmc2V0LngoKSAtIChpc0hvcml6b250YWwoKSA/IGxvZ2ljYWxPZmZzZXRPbkxpbmUgOiBa
RVJPX0xBWU9VVF9VTklUKTsKLSAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFkgPSBhZGp1c3RlZFBh
aW50T2Zmc2V0LnkoKSAtIChpc0hvcml6b250YWwoKSA/IFpFUk9fTEFZT1VUX1VOSVQgOiBsb2dp
Y2FsT2Zmc2V0T25MaW5lKTsKKyAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFggPSBhZGp1c3RlZFBh
aW50T2Zmc2V0LngoKSAtIChpc0hvcml6b250YWwoKSA/IGxvZ2ljYWxPZmZzZXRPbkxpbmUgOiBM
YXlvdXRVbml0KCkpOworICAgICAgICBMYXlvdXRVbml0IHN0cmlwWSA9IGFkanVzdGVkUGFpbnRP
ZmZzZXQueSgpIC0gKGlzSG9yaXpvbnRhbCgpID8gTGF5b3V0VW5pdCgpIDogbG9naWNhbE9mZnNl
dE9uTGluZSk7CiAgICAgICAgIExheW91dFVuaXQgc3RyaXBXaWR0aCA9IGlzSG9yaXpvbnRhbCgp
ID8gdG90YWxMb2dpY2FsV2lkdGggOiBmcmFtZVJlY3Qud2lkdGgoKTsKICAgICAgICAgTGF5b3V0
VW5pdCBzdHJpcEhlaWdodCA9IGlzSG9yaXpvbnRhbCgpID8gZnJhbWVSZWN0LmhlaWdodCgpIDog
dG90YWxMb2dpY2FsV2lkdGg7CiAKQEAgLTE0MzksNyArMTQzOSw3IEBAIExheW91dFVuaXQgSW5s
aW5lRmxvd0JveDo6Y29tcHV0ZU92ZXJBbm4KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFydWJ5UnVuLT5zdHlsZSgpLT5pc0ZsaXBwZWRM
aW5lc1dyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHRvcE9mRmly
c3RSdWJ5VGV4dExpbmUgPSBydWJ5VGV4dC0+bG9naWNhbFRvcCgpICsgKHJ1YnlUZXh0LT5maXJz
dFJvb3RCb3goKSA/IHJ1YnlUZXh0LT5maXJzdFJvb3RCb3goKS0+bGluZVRvcCgpIDogWkVST19M
QVlPVVRfVU5JVCk7CisgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCB0b3BPZkZpcnN0UnVieVRl
eHRMaW5lID0gcnVieVRleHQtPmxvZ2ljYWxUb3AoKSArIChydWJ5VGV4dC0+Zmlyc3RSb290Qm94
KCkgPyBydWJ5VGV4dC0+Zmlyc3RSb290Qm94KCktPmxpbmVUb3AoKSA6IExheW91dFVuaXQoKSk7
CiAgICAgICAgICAgICAgICAgaWYgKHRvcE9mRmlyc3RSdWJ5VGV4dExpbmUgPj0gMCkKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgdG9wT2ZGaXJzdFJ1YnlU
ZXh0TGluZSArPSBjdXJyLT5sb2dpY2FsVG9wKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw3ICsyMDks
NyBAQCBwdWJsaWM6CiAgICAgLy8gcmVzcGVjdGl2ZWx5IGFyZSBmbGlwcGVkIHdoZW4gY29tcGFy
ZWQgdG8gdGhlaXIgcGh5c2ljYWwgY291bnRlcnBhcnRzLiAgRm9yIGV4YW1wbGUgbWluWCBpcyBv
biB0aGUgbGVmdCBpbiB2ZXJ0aWNhbC1sciwgYnV0IGl0IGlzIG9uIHRoZSByaWdodCBpbiB2ZXJ0
aWNhbC1ybC4KICAgICBMYXlvdXRSZWN0IGxheW91dE92ZXJmbG93UmVjdChMYXlvdXRVbml0IGxp
bmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkgY29uc3QKICAgICB7IAotICAgICAgICByZXR1
cm4gbV9vdmVyZmxvdyA/IG1fb3ZlcmZsb3ctPmxheW91dE92ZXJmbG93UmVjdCgpIDogZW5jbG9z
aW5nTGF5b3V0UmVjdChmcmFtZVJlY3RJbmNsdWRpbmdMaW5lSGVpZ2h0KGxpbmVUb3AsIGxpbmVC
b3R0b20pKTsKKyAgICAgICAgcmV0dXJuIG1fb3ZlcmZsb3cgPyBtX292ZXJmbG93LT5sYXlvdXRP
dmVyZmxvd1JlY3QoKSA6IGVuY2xvc2luZ0ludFJlY3QoZnJhbWVSZWN0SW5jbHVkaW5nTGluZUhl
aWdodChsaW5lVG9wLCBsaW5lQm90dG9tKSk7CiAgICAgfQogICAgIExheW91dFVuaXQgbG9naWNh
bExlZnRMYXlvdXRPdmVyZmxvdygpIGNvbnN0CiAgICAgewpAQCAtMjQzLDcgKzI0Myw3IEBAIHB1
YmxpYzoKIAogICAgIExheW91dFJlY3QgdmlzdWFsT3ZlcmZsb3dSZWN0KExheW91dFVuaXQgbGlu
ZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKSBjb25zdAogICAgIHsgCi0gICAgICAgIHJldHVy
biBtX292ZXJmbG93ID8gbV9vdmVyZmxvdy0+dmlzdWFsT3ZlcmZsb3dSZWN0KCkgOiBlbmNsb3Np
bmdMYXlvdXRSZWN0KGZyYW1lUmVjdEluY2x1ZGluZ0xpbmVIZWlnaHQobGluZVRvcCwgbGluZUJv
dHRvbSkpOworICAgICAgICByZXR1cm4gbV9vdmVyZmxvdyA/IG1fb3ZlcmZsb3ctPnZpc3VhbE92
ZXJmbG93UmVjdCgpIDogZW5jbG9zaW5nSW50UmVjdChmcmFtZVJlY3RJbmNsdWRpbmdMaW5lSGVp
Z2h0KGxpbmVUb3AsIGxpbmVCb3R0b20pKTsKICAgICB9CiAgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
TGVmdFZpc3VhbE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdyA/IChpc0hvcml6
b250YWwoKSA/IG1fb3ZlcmZsb3ctPnZpc3VhbE92ZXJmbG93UmVjdCgpLngoKSA6IG1fb3ZlcmZs
b3ctPnZpc3VhbE92ZXJmbG93UmVjdCgpLnkoKSkgOiBzdGF0aWNfY2FzdDxMYXlvdXRVbml0Pihs
b2dpY2FsTGVmdCgpKTsgfQogICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0VmlzdWFsT3ZlcmZs
b3coKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93ID8gKGlzSG9yaXpvbnRhbCgpID8gbV9vdmVy
Zmxvdy0+dmlzdWFsT3ZlcmZsb3dSZWN0KCkubWF4WCgpIDogbV9vdmVyZmxvdy0+dmlzdWFsT3Zl
cmZsb3dSZWN0KCkubWF4WSgpKSA6IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KGNlaWxmKGxvZ2lj
YWxSaWdodCgpKSk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRSZXBh
aW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0UmVw
YWludGVyLmgJKHJldmlzaW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9M
YXlvdXRSZXBhaW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRl
ZiBMYXlvdXRSZXBhaW50ZXJfaAogI2RlZmluZSBMYXlvdXRSZXBhaW50ZXJfaAogCi0jaW5jbHVk
ZSAiTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9M
YXlvdXRTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlv
dXRTdGF0ZS5oCShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
TGF5b3V0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBM
YXlvdXRTdGF0ZV9oCiAKICNpbmNsdWRlICJDb2x1bW5JbmZvLmgiCi0jaW5jbHVkZSAiTGF5b3V0
VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0xheW91dFR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0xheW91dFR5cGVzLmgJKHJldmlzaW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9MYXlvdXRUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
ICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBUaGVzZSB0eXBlZGVmcyBhcmUgYmVpbmcgdXNlZCB0byBhYnN0cmFjdCBsYXlvdXQgYW5kIGhp
dCB0ZXN0aW5nIG9mZgotLy8gb2YgaW50ZWdlcnMgYW5kIGV2ZW50dWFsbHkgcmVwbGFjZSB0aGVt
IHdpdGggZmxvYXRzLiBPbmNlIHRoaXMgdHJhbnNpdGlvbgotLy8gaXMgY29tcGxldGUsIHRoZXNl
IHR5cGVzIHdpbGwgYmUgcmVtb3ZlZC4gUHJvZ3Jlc3MgY2FuIGJlIHRyYWNrZWQgYXQKLS8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDMxOAotCi0jaWZuZGVmIExh
eW91dFR5cGVzX2gKLSNkZWZpbmUgTGF5b3V0VHlwZXNfaAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQ7Ci1jbGFzcyBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQ7Ci1jbGFzcyBGcmFjdGlvbmFsTGF5b3V0UmVjdDsKLWNsYXNzIEZyYWN0aW9uYWxM
YXlvdXRTaXplOwotY2xhc3MgRnJhY3Rpb25hbExheW91dFVuaXQ7Ci0KLXR5cGVkZWYgRnJhY3Rp
b25hbExheW91dEJveEV4dGVudCBMYXlvdXRCb3hFeHRlbnQ7Ci10eXBlZGVmIEZyYWN0aW9uYWxM
YXlvdXRQb2ludCBMYXlvdXRQb2ludDsKLXR5cGVkZWYgRnJhY3Rpb25hbExheW91dFJlY3QgTGF5
b3V0UmVjdDsKLXR5cGVkZWYgRnJhY3Rpb25hbExheW91dFNpemUgTGF5b3V0U2l6ZTsKLXR5cGVk
ZWYgRnJhY3Rpb25hbExheW91dFVuaXQgTGF5b3V0VW5pdDsKLQotI2RlZmluZSBNQVhfTEFZT1VU
X1VOSVQgTGF5b3V0VW5pdDo6bWF4KCkKLSNkZWZpbmUgTUlOX0xBWU9VVF9VTklUIExheW91dFVu
aXQ6Om1pbigpCi0jZGVmaW5lIFpFUk9fTEFZT1VUX1VOSVQgTGF5b3V0VW5pdCgwKQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBMYXlvdXRUeXBlc19oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFR5cGVzSW5saW5lTWV0aG9kcy5o
CShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlw
ZXNJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTUzICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IExheW91dFR5cGVzSW5saW5lTWV0aG9kc19oCi0jZGVmaW5lIExheW91dFR5cGVzSW5saW5lTWV0
aG9kc19oCi0KLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5
b3V0Qm94RXh0ZW50LmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFJlY3QuaCIKLSNpbmNs
dWRlICJGcmFjdGlvbmFsTGF5b3V0VW5pdC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNs
dWRlICJMYXlvdXRUeXBlcy5oIgotCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1pbmxpbmUgRnJhY3Rpb25hbExheW91dFJlY3QgZW5jbG9zaW5n
TGF5b3V0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIGVuY2xvc2lu
Z0ludFJlY3QocmVjdCk7Ci19Ci0KLWlubGluZSBMYXlvdXRTaXplIHJvdW5kZWRMYXlvdXRTaXpl
KGNvbnN0IEZsb2F0U2l6ZSYgcykKLXsKLSNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAg
IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShzKTsKLSNlbHNlCi0gICAgcmV0dXJuIHJvdW5k
ZWRJbnRTaXplKHMpOwotI2VuZGlmCi19Ci0KLWlubGluZSBJbnRSZWN0IHBpeGVsU25hcHBlZElu
dFJlY3QoTGF5b3V0VW5pdCBsZWZ0LCBMYXlvdXRVbml0IHRvcCwgTGF5b3V0VW5pdCB3aWR0aCwg
TGF5b3V0VW5pdCBoZWlnaHQpCi17Ci0gICAgcmV0dXJuIEludFJlY3QobGVmdC5yb3VuZCgpLCB0
b3Aucm91bmQoKSwgc25hcFNpemVUb1BpeGVsKHdpZHRoLCBsZWZ0KSwgc25hcFNpemVUb1BpeGVs
KGhlaWdodCwgdG9wKSk7Ci19Ci0KLWlubGluZSBJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3RG
cm9tRWRnZXMoTGF5b3V0VW5pdCBsZWZ0LCBMYXlvdXRVbml0IHRvcCwgTGF5b3V0VW5pdCByaWdo
dCwgTGF5b3V0VW5pdCBib3R0b20pCi17Ci0gICAgcmV0dXJuIEludFJlY3QobGVmdC5yb3VuZCgp
LCB0b3Aucm91bmQoKSwgc25hcFNpemVUb1BpeGVsKHJpZ2h0IC0gbGVmdCwgbGVmdCksIHNuYXBT
aXplVG9QaXhlbChib3R0b20gLSB0b3AsIHRvcCkpOwotfQotCi1pbmxpbmUgTGF5b3V0UG9pbnQg
cm91bmRlZExheW91dFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApCi17Ci0jaWYgRU5BQkxFKFNV
QlBJWEVMX0xBWU9VVCkKLSAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KHApOwotI2Vs
c2UKLSAgICByZXR1cm4gcm91bmRlZEludFBvaW50KHApOwotI2VuZGlmCi19Ci0KLWlubGluZSBM
YXlvdXRQb2ludCBmbG9vcmVkTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkKLXsKLSAg
ICByZXR1cm4gZmxvb3JlZEZyYWN0aW9uYWxMYXlvdXRQb2ludChwKTsKLX0KLQotaW5saW5lIExh
eW91dFBvaW50IGZsb29yZWRMYXlvdXRQb2ludChjb25zdCBGbG9hdFNpemUmIHMpCi17Ci0gICAg
cmV0dXJuIGZsb29yZWRMYXlvdXRQb2ludChGbG9hdFBvaW50KHMpKTsKLX0KLQotaW5saW5lIGlu
dCByb3VuZFRvSW50KExheW91dFVuaXQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHZhbHVlLnJvdW5k
KCk7Ci19Ci0KLWlubGluZSBpbnQgZmxvb3JUb0ludChMYXlvdXRVbml0IHZhbHVlKQotewotICAg
IHJldHVybiB2YWx1ZS5mbG9vcigpOwotfQotCi1pbmxpbmUgTGF5b3V0VW5pdCByb3VuZGVkTGF5
b3V0VW5pdChmbG9hdCB2YWx1ZSkKLXsKLSNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAg
IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Um91bmQodmFsdWUpOwotI2Vs
c2UKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKHZhbHVlKSk7Ci0jZW5kaWYK
LX0KLQotaW5saW5lIExheW91dFVuaXQgY2VpbGVkTGF5b3V0VW5pdChmbG9hdCB2YWx1ZSkKLXsK
LSNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0
VW5pdDo6ZnJvbUZsb2F0Q2VpbCh2YWx1ZSk7Ci0jZWxzZQotICAgIHJldHVybiBjZWlsZih2YWx1
ZSk7Ci0jZW5kaWYKLX0KLQotaW5saW5lIExheW91dFVuaXQgYWJzb2x1dGVWYWx1ZShjb25zdCBM
YXlvdXRVbml0JiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdmFsdWUuYWJzKCk7Ci19Ci0KLWlubGlu
ZSBMYXlvdXRTaXplIHRvTGF5b3V0U2l6ZShjb25zdCBMYXlvdXRQb2ludCYgcCkKLXsKLSAgICBy
ZXR1cm4gTGF5b3V0U2l6ZShwLngoKSwgcC55KCkpOwotfQotCi1pbmxpbmUgTGF5b3V0UG9pbnQg
dG9MYXlvdXRQb2ludChjb25zdCBMYXlvdXRTaXplJiBwKQotewotICAgIHJldHVybiBMYXlvdXRQ
b2ludChwLndpZHRoKCksIHAuaGVpZ2h0KCkpOwotfQotCi1pbmxpbmUgTGF5b3V0VW5pdCBsYXlv
dXRNb2QoY29uc3QgTGF5b3V0VW5pdCYgbnVtZXJhdG9yLCBjb25zdCBMYXlvdXRVbml0JiBkZW5v
bWluYXRvcikKLXsKLSAgICByZXR1cm4gbnVtZXJhdG9yICUgZGVub21pbmF0b3I7Ci19Ci0KLWlu
bGluZSBJbnRTaXplIHBpeGVsU25hcHBlZEludFNpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFNp
emUmIHMsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcCkKLXsKLSAgICByZXR1cm4gSW50
U2l6ZShzbmFwU2l6ZVRvUGl4ZWwocy53aWR0aCgpLCBwLngoKSksIHNuYXBTaXplVG9QaXhlbChz
LmhlaWdodCgpLCBwLnkoKSkpOwotfQotCi1pbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRS
ZWN0KExheW91dFBvaW50IGxvY2F0aW9uLCBMYXlvdXRTaXplIHNpemUpCi17Ci0gICAgcmV0dXJu
IEludFJlY3Qocm91bmRlZEludFBvaW50KGxvY2F0aW9uKSwgcGl4ZWxTbmFwcGVkSW50U2l6ZShz
aXplLCBsb2NhdGlvbikpOwotfQotCi1pbmxpbmUgYm9vbCBpc0ludGVnZXJWYWx1ZShjb25zdCBM
YXlvdXRVbml0IHZhbHVlKQotewotICAgIHJldHVybiB2YWx1ZS50b0ludCgpID09IHZhbHVlOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBMYXlvdXRUeXBlc0lubGlu
ZU1ldGhvZHNfaApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1BhaW50SW5mby5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9QYWludEluZm8uaAkocmV2aXNp
b24gMTMzNzY0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1BhaW50SW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXNJbmxpbmVNZXRo
b2RzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlBhaW50UGhhc2UuaCIK
ICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTMzNzY0KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTgxLDggKzE4MSw4IEBAIFJlbmRlckJsb2NrOjpNYXJnaW5JbmZvOjpNYXJnaW5JbmZvKFJl
bmQKICAgICBtX3F1aXJrQ29udGFpbmVyID0gYmxvY2stPmlzVGFibGVDZWxsKCkgfHwgYmxvY2st
PmlzQm9keSgpIHx8IGJsb2NrU3R5bGUtPm1hcmdpbkJlZm9yZUNvbGxhcHNlKCkgPT0gTURJU0NB
UkQKICAgICAgICAgfHwgYmxvY2tTdHlsZS0+bWFyZ2luQWZ0ZXJDb2xsYXBzZSgpID09IE1ESVND
QVJEOwogCi0gICAgbV9wb3NpdGl2ZU1hcmdpbiA9IG1fY2FuQ29sbGFwc2VNYXJnaW5CZWZvcmVX
aXRoQ2hpbGRyZW4gPyBibG9jay0+bWF4UG9zaXRpdmVNYXJnaW5CZWZvcmUoKSA6IFpFUk9fTEFZ
T1VUX1VOSVQ7Ci0gICAgbV9uZWdhdGl2ZU1hcmdpbiA9IG1fY2FuQ29sbGFwc2VNYXJnaW5CZWZv
cmVXaXRoQ2hpbGRyZW4gPyBibG9jay0+bWF4TmVnYXRpdmVNYXJnaW5CZWZvcmUoKSA6IFpFUk9f
TEFZT1VUX1VOSVQ7CisgICAgbV9wb3NpdGl2ZU1hcmdpbiA9IG1fY2FuQ29sbGFwc2VNYXJnaW5C
ZWZvcmVXaXRoQ2hpbGRyZW4gPyBibG9jay0+bWF4UG9zaXRpdmVNYXJnaW5CZWZvcmUoKSA6IExh
eW91dFVuaXQoKTsKKyAgICBtX25lZ2F0aXZlTWFyZ2luID0gbV9jYW5Db2xsYXBzZU1hcmdpbkJl
Zm9yZVdpdGhDaGlsZHJlbiA/IGJsb2NrLT5tYXhOZWdhdGl2ZU1hcmdpbkJlZm9yZSgpIDogTGF5
b3V0VW5pdCgpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCkBAIC0xMjk0LDcgKzEyOTQsNyBAQCBib29sIFJlbmRlckJsb2NrOjppc1NlbGZD
b2xsYXBzaW5nQmxvY2soCiAgICAgLy8gKGMpIGhhdmUgYm9yZGVyL3BhZGRpbmcsCiAgICAgLy8g
KGQpIGhhdmUgYSBtaW4taGVpZ2h0CiAgICAgLy8gKGUpIGhhdmUgc3BlY2lmaWVkIHRoYXQgb25l
IG9mIG91ciBtYXJnaW5zIGNhbid0IGNvbGxhcHNlIHVzaW5nIGEgQ1NTIGV4dGVuc2lvbgotICAg
IGlmIChsb2dpY2FsSGVpZ2h0KCkgPiBaRVJPX0xBWU9VVF9VTklUCisgICAgaWYgKGxvZ2ljYWxI
ZWlnaHQoKSA+IDAKICAgICAgICAgfHwgaXNUYWJsZSgpIHx8IGJvcmRlckFuZFBhZGRpbmdMb2dp
Y2FsSGVpZ2h0KCkKICAgICAgICAgfHwgc3R5bGUoKS0+bG9naWNhbE1pbkhlaWdodCgpLmlzUG9z
aXRpdmUoKQogICAgICAgICB8fCBzdHlsZSgpLT5tYXJnaW5CZWZvcmVDb2xsYXBzZSgpID09IE1T
RVBBUkFURSB8fCBzdHlsZSgpLT5tYXJnaW5BZnRlckNvbGxhcHNlKCkgPT0gTVNFUEFSQVRFKQpA
QCAtMTQyNiw3ICsxNDI2LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlUmVnaW9uc0FuZEV4
Y2x1cwogCiAgICAgLy8gQ29tcHV0ZSB0aGUgbWF4aW11bSBsb2dpY2FsIGhlaWdodCBjb250ZW50
IG1heSBjYXVzZSB0aGlzIGJsb2NrIHRvIGV4cGFuZCB0bwogICAgIC8vIEZJWE1FOiBUaGVzZSBz
aG91bGQgZXZlbnR1YWxseSB1c2UgdGhlIGNvbnN0IGNvbXB1dGVMb2dpY2FsSGVpZ2h0IHJhdGhl
ciB0aGFuIHVwZGF0ZUxvZ2ljYWxIZWlnaHQKLSAgICBzZXRMb2dpY2FsSGVpZ2h0KE1BWF9MQVlP
VVRfVU5JVCAvIDIpOworICAgIHNldExvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdDo6bWF4KCkgLyAy
KTsKICAgICB1cGRhdGVMb2dpY2FsSGVpZ2h0KCk7CiAKICNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lP
TlMpCkBAIC0xNDQ3LDcgKzE0NDcsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlRXhjbHVz
aW9uU2hhcGVTCiAgICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleGNsdXNpb25TaGFwZUlu
c2lkZUluZm8gPSB0aGlzLT5leGNsdXNpb25TaGFwZUluc2lkZUluZm8oKTsKICAgICBpZiAoZXhj
bHVzaW9uU2hhcGVJbnNpZGVJbmZvKSB7CiAgICAgICAgIGJvb2wgcGVyY2VudGFnZUxvZ2ljYWxI
ZWlnaHRSZXNvbHZhYmxlID0gcGVyY2VudGFnZUxvZ2ljYWxIZWlnaHRJc1Jlc29sdmFibGVGcm9t
QmxvY2sodGhpcywgZmFsc2UpOwotICAgICAgICBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPmNv
bXB1dGVTaGFwZVNpemUobG9naWNhbFdpZHRoKCksIHBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0UmVz
b2x2YWJsZSA/IGxvZ2ljYWxIZWlnaHQoKSA6IFpFUk9fTEFZT1VUX1VOSVQpOworICAgICAgICBl
eGNsdXNpb25TaGFwZUluc2lkZUluZm8tPmNvbXB1dGVTaGFwZVNpemUobG9naWNhbFdpZHRoKCks
IHBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0UmVzb2x2YWJsZSA/IGxvZ2ljYWxIZWlnaHQoKSA6IExh
eW91dFVuaXQoKSk7CiAgICAgfQogfQogI2VuZGlmCkBAIC0xNDc4LDExICsxNDc4LDExIEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmNoZWNrRm9yUGFnaW5hdGlvbkxvZ2kKICAgICAgICAgICAgIC8vIGF2
b2lkIGRvaW5nIHR3byBsYXlvdXQgcGFzc2VzLgogICAgICAgICAgICAgdXBkYXRlTG9naWNhbEhl
aWdodCgpOwogICAgICAgICAgICAgTGF5b3V0VW5pdCBjb2x1bW5IZWlnaHQgPSBjb250ZW50TG9n
aWNhbEhlaWdodCgpOwotICAgICAgICAgICAgaWYgKGNvbHVtbkhlaWdodCA+IFpFUk9fTEFZT1VU
X1VOSVQpIHsKKyAgICAgICAgICAgIGlmIChjb2x1bW5IZWlnaHQgPiAwKSB7CiAgICAgICAgICAg
ICAgICAgcGFnZUxvZ2ljYWxIZWlnaHQgPSBjb2x1bW5IZWlnaHQ7CiAgICAgICAgICAgICAgICAg
aGFzU3BlY2lmaWVkUGFnZUxvZ2ljYWxIZWlnaHQgPSB0cnVlOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgc2V0TG9naWNhbEhlaWdodChaRVJPX0xBWU9VVF9VTklUKTsKKyAgICAgICAgICAg
IHNldExvZ2ljYWxIZWlnaHQoMCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGNvbEluZm8tPmNv
bHVtbkhlaWdodCgpICE9IHBhZ2VMb2dpY2FsSGVpZ2h0ICYmIGV2ZXJIYWRMYXlvdXQoKSkgewog
ICAgICAgICAgICAgY29sSW5mby0+c2V0Q29sdW1uSGVpZ2h0KHBhZ2VMb2dpY2FsSGVpZ2h0KTsK
QEAgLTE1MTksNyArMTUxOSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wg
cmVsYXkKICAgICBjbGVhckZsb2F0cygpOwogCiAgICAgTGF5b3V0VW5pdCBwcmV2aW91c0hlaWdo
dCA9IGxvZ2ljYWxIZWlnaHQoKTsKLSAgICBzZXRMb2dpY2FsSGVpZ2h0KFpFUk9fTEFZT1VUX1VO
SVQpOworICAgIHNldExvZ2ljYWxIZWlnaHQoMCk7CiAKICAgICBib29sIHBhZ2VMb2dpY2FsSGVp
Z2h0Q2hhbmdlZCA9IGZhbHNlOwogICAgIGJvb2wgaGFzU3BlY2lmaWVkUGFnZUxvZ2ljYWxIZWln
aHQgPSBmYWxzZTsKQEAgLTE1NTUsOSArMTU1NSw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91
dEJsb2NrKGJvb2wgcmVsYXkKICAgICAgICAgc2V0UGFnaW5hdGlvblN0cnV0KDApOwogICAgIH0K
IAotICAgIExheW91dFVuaXQgcmVwYWludExvZ2ljYWxUb3AgPSBaRVJPX0xBWU9VVF9VTklUOwot
ICAgIExheW91dFVuaXQgcmVwYWludExvZ2ljYWxCb3R0b20gPSBaRVJPX0xBWU9VVF9VTklUOwot
ICAgIExheW91dFVuaXQgbWF4RmxvYXRMb2dpY2FsQm90dG9tID0gWkVST19MQVlPVVRfVU5JVDsK
KyAgICBMYXlvdXRVbml0IHJlcGFpbnRMb2dpY2FsVG9wID0gMDsKKyAgICBMYXlvdXRVbml0IHJl
cGFpbnRMb2dpY2FsQm90dG9tID0gMDsKKyAgICBMYXlvdXRVbml0IG1heEZsb2F0TG9naWNhbEJv
dHRvbSA9IDA7CiAgICAgaWYgKCFmaXJzdENoaWxkKCkgJiYgIWlzQW5vbnltb3VzQmxvY2soKSkK
ICAgICAgICAgc2V0Q2hpbGRyZW5JbmxpbmUodHJ1ZSk7CiAgICAgaWYgKGNoaWxkcmVuSW5saW5l
KCkpCkBAIC0xNjk0LDkgKzE2OTQsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlT3ZlcmZs
b3coTGF5b3V0CiAgICAgICAgIExheW91dFJlY3QgY2xpZW50UmVjdChjbGllbnRCb3hSZWN0KCkp
OwogICAgICAgICBMYXlvdXRSZWN0IHJlY3RUb0FwcGx5OwogICAgICAgICBpZiAoaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAgIHJlY3RUb0FwcGx5ID0gTGF5b3V0UmVjdChj
bGllbnRSZWN0LngoKSwgY2xpZW50UmVjdC55KCksIDEsIG1heChaRVJPX0xBWU9VVF9VTklULCBv
bGRDbGllbnRBZnRlckVkZ2UgLSBjbGllbnRSZWN0LnkoKSkpOworICAgICAgICAgICAgcmVjdFRv
QXBwbHkgPSBMYXlvdXRSZWN0KGNsaWVudFJlY3QueCgpLCBjbGllbnRSZWN0LnkoKSwgMSwgbWF4
PExheW91dFVuaXQ+KDAsIG9sZENsaWVudEFmdGVyRWRnZSAtIGNsaWVudFJlY3QueSgpKSk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlY3RUb0FwcGx5ID0gTGF5b3V0UmVjdChjbGllbnRS
ZWN0LngoKSwgY2xpZW50UmVjdC55KCksIG1heChaRVJPX0xBWU9VVF9VTklULCBvbGRDbGllbnRB
ZnRlckVkZ2UgLSBjbGllbnRSZWN0LngoKSksIDEpOworICAgICAgICAgICAgcmVjdFRvQXBwbHkg
PSBMYXlvdXRSZWN0KGNsaWVudFJlY3QueCgpLCBjbGllbnRSZWN0LnkoKSwgbWF4PExheW91dFVu
aXQ+KDAsIG9sZENsaWVudEFmdGVyRWRnZSAtIGNsaWVudFJlY3QueCgpKSwgMSk7CiAgICAgICAg
IGFkZExheW91dE92ZXJmbG93KHJlY3RUb0FwcGx5KTsKICAgICB9CiAgICAgICAgIApAQCAtMTgw
OSw3ICsxODA5LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0RmxvYXRpbmdCbG9jayhjbwog
ICAgIC8vIGZvciBieSBzaW1wbHkgY2FsbGluZyBjYW5Db2xsYXBzZVdpdGhNYXJnaW5CZWZvcmUu
ICBTZWUKICAgICAvLyBodHRwOi8vd3d3LmhpeGllLmNoL3Rlc3RzL2FkaG9jL2Nzcy9ib3gvYmxv
Y2svbWFyZ2luLWNvbGxhcHNlLzA0Ni5odG1sIGZvcgogICAgIC8vIGFuIGV4YW1wbGUgb2YgdGhp
cyBzY2VuYXJpby4KLSAgICBMYXlvdXRVbml0IG1hcmdpbk9mZnNldCA9IG1hcmdpbkluZm8uY2Fu
Q29sbGFwc2VXaXRoTWFyZ2luQmVmb3JlKCkgPyBaRVJPX0xBWU9VVF9VTklUIDogbWFyZ2luSW5m
by5tYXJnaW4oKTsKKyAgICBMYXlvdXRVbml0IG1hcmdpbk9mZnNldCA9IG1hcmdpbkluZm8uY2Fu
Q29sbGFwc2VXaXRoTWFyZ2luQmVmb3JlKCkgPyBMYXlvdXRVbml0KCkgOiBtYXJnaW5JbmZvLm1h
cmdpbigpOwogICAgIHNldExvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCgpICsgbWFyZ2luT2Zm
c2V0KTsKICAgICBwb3NpdGlvbk5ld0Zsb2F0cygpOwogICAgIHNldExvZ2ljYWxIZWlnaHQobG9n
aWNhbEhlaWdodCgpIC0gbWFyZ2luT2Zmc2V0KTsKQEAgLTIyMDksOCArMjIwOSw4IEBAIExheW91
dFVuaXQgUmVuZGVyQmxvY2s6OmVzdGltYXRlTG9naWNhbFQKICAgICAvLyByZWxheW91dCBpZiB0
aGVyZSBhcmUgaW50cnVkaW5nIGZsb2F0cy4KICAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3BFc3Rp
bWF0ZSA9IGxvZ2ljYWxIZWlnaHQoKTsKICAgICBpZiAoIW1hcmdpbkluZm8uY2FuQ29sbGFwc2VX
aXRoTWFyZ2luQmVmb3JlKCkpIHsKLSAgICAgICAgTGF5b3V0VW5pdCBwb3NpdGl2ZU1hcmdpbkJl
Zm9yZSA9IFpFUk9fTEFZT1VUX1VOSVQ7Ci0gICAgICAgIExheW91dFVuaXQgbmVnYXRpdmVNYXJn
aW5CZWZvcmUgPSBaRVJPX0xBWU9VVF9VTklUOworICAgICAgICBMYXlvdXRVbml0IHBvc2l0aXZl
TWFyZ2luQmVmb3JlID0gMDsKKyAgICAgICAgTGF5b3V0VW5pdCBuZWdhdGl2ZU1hcmdpbkJlZm9y
ZSA9IDA7CiAgICAgICAgIGlmIChjaGlsZC0+c2VsZk5lZWRzTGF5b3V0KCkpIHsKICAgICAgICAg
ICAgIC8vIFRyeSB0byBkbyBhIGJhc2ljIGVzdGltYXRpb24gb2YgaG93IHRoZSBjb2xsYXBzZSBp
cyBnb2luZyB0byBnby4KICAgICAgICAgICAgIG1hcmdpbkJlZm9yZUVzdGltYXRlRm9yQ2hpbGQo
Y2hpbGQsIHBvc2l0aXZlTWFyZ2luQmVmb3JlLCBuZWdhdGl2ZU1hcmdpbkJlZm9yZSk7CkBAIC0y
Nzk5LDkgKzI3OTksOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENvbHVtblJ1bGVzKFBhaW50
CiAKICAgICBpZiAoY29sSW5mby0+cHJvZ3Jlc3Npb25BeGlzKCkgPT0gQ29sdW1uSW5mbzo6SW5s
aW5lQXhpcykgewogICAgICAgICBib29sIGxlZnRUb1JpZ2h0ID0gc3R5bGUoKS0+aXNMZWZ0VG9S
aWdodERpcmVjdGlvbigpIF4gY29sSW5mby0+cHJvZ3Jlc3Npb25Jc1JldmVyc2VkKCk7Ci0gICAg
ICAgIExheW91dFVuaXQgY3VyckxvZ2ljYWxMZWZ0T2Zmc2V0ID0gbGVmdFRvUmlnaHQgPyBaRVJP
X0xBWU9VVF9VTklUIDogY29udGVudExvZ2ljYWxXaWR0aCgpOworICAgICAgICBMYXlvdXRVbml0
IGN1cnJMb2dpY2FsTGVmdE9mZnNldCA9IGxlZnRUb1JpZ2h0ID8gTGF5b3V0VW5pdCgpIDogY29u
dGVudExvZ2ljYWxXaWR0aCgpOwogICAgICAgICBMYXlvdXRVbml0IHJ1bGVBZGQgPSBsb2dpY2Fs
TGVmdE9mZnNldEZvckNvbnRlbnQoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBydWxlTG9naWNhbExl
ZnQgPSBsZWZ0VG9SaWdodCA/IFpFUk9fTEFZT1VUX1VOSVQgOiBjb250ZW50TG9naWNhbFdpZHRo
KCk7CisgICAgICAgIExheW91dFVuaXQgcnVsZUxvZ2ljYWxMZWZ0ID0gbGVmdFRvUmlnaHQgPyBM
YXlvdXRVbml0KCkgOiBjb250ZW50TG9naWNhbFdpZHRoKCk7CiAgICAgICAgIExheW91dFVuaXQg
aW5saW5lRGlyZWN0aW9uU2l6ZSA9IGNvbEluZm8tPmRlc2lyZWRDb2x1bW5XaWR0aCgpOwogICAg
ICAgICBCb3hTaWRlIGJveFNpZGUgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpCiAgICAgICAg
ICAgICA/IGxlZnRUb1JpZ2h0ID8gQlNMZWZ0IDogQlNSaWdodApAQCAtMjk5MSw3ICsyOTkxLDcg
QEAgYm9vbCBSZW5kZXJCbG9jazo6cGFpbnRDaGlsZChSZW5kZXJCb3gqCiAgICAgaWYgKGNoZWNr
QWZ0ZXJBbHdheXMKICAgICAgICAgJiYgKGFic29sdXRlQ2hpbGRZICsgY2hpbGQtPmhlaWdodCgp
KSA+IHBhaW50SW5mby5yZWN0LnkoKQogICAgICAgICAmJiAoYWJzb2x1dGVDaGlsZFkgKyBjaGls
ZC0+aGVpZ2h0KCkpIDwgcGFpbnRJbmZvLnJlY3QubWF4WSgpKSB7Ci0gICAgICAgIHZpZXcoKS0+
c2V0QmVzdFRydW5jYXRlZEF0KGFic29sdXRlQ2hpbGRZICsgY2hpbGQtPmhlaWdodCgpICsgbWF4
KFpFUk9fTEFZT1VUX1VOSVQsIGNoaWxkLT5jb2xsYXBzZWRNYXJnaW5BZnRlcigpKSwgdGhpcywg
dHJ1ZSk7CisgICAgICAgIHZpZXcoKS0+c2V0QmVzdFRydW5jYXRlZEF0KGFic29sdXRlQ2hpbGRZ
ICsgY2hpbGQtPmhlaWdodCgpICsgbWF4PExheW91dFVuaXQ+KDAsIGNoaWxkLT5jb2xsYXBzZWRN
YXJnaW5BZnRlcigpKSwgdGhpcywgdHJ1ZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNTE3LDE0ICszNTE3LDE0IEBAIExheW91dFJlY3QgUmVu
ZGVyQmxvY2s6OmJsb2NrU2VsZWN0aW9uR2EKIHsKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3Ag
PSBsYXN0TG9naWNhbFRvcDsKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSBibG9ja0Rp
cmVjdGlvbk9mZnNldChyb290QmxvY2ssIG9mZnNldEZyb21Sb290QmxvY2spICsgbG9naWNhbEJv
dHRvbSAtIGxvZ2ljYWxUb3A7Ci0gICAgaWYgKGxvZ2ljYWxIZWlnaHQgPD0gWkVST19MQVlPVVRf
VU5JVCkKKyAgICBpZiAobG9naWNhbEhlaWdodCA8PSAwKQogICAgICAgICByZXR1cm4gTGF5b3V0
UmVjdCgpOwogCiAgICAgLy8gR2V0IHRoZSBzZWxlY3Rpb24gb2Zmc2V0cyBmb3IgdGhlIGJvdHRv
bSBvZiB0aGUgZ2FwCiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCA9IG1heChsYXN0TG9naWNh
bExlZnQsIGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbEJvdHRv
bSkpOwogICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0ID0gbWluKGxhc3RMb2dpY2FsUmlnaHQs
IGxvZ2ljYWxSaWdodFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIGxvZ2ljYWxCb3R0b20pKTsK
ICAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCA9IGxvZ2ljYWxSaWdodCAtIGxvZ2ljYWxMZWZ0
OwotICAgIGlmIChsb2dpY2FsV2lkdGggPD0gWkVST19MQVlPVVRfVU5JVCkKKyAgICBpZiAobG9n
aWNhbFdpZHRoIDw9IDApCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKICAgICBMYXlv
dXRSZWN0IGdhcFJlY3QgPSByb290QmxvY2stPmxvZ2ljYWxSZWN0VG9QaHlzaWNhbFJlY3Qocm9v
dEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgTGF5b3V0UmVjdChsb2dpY2FsTGVmdCwgbG9naWNhbFRv
cCwgbG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSk7CkBAIC0zNTQwLDcgKzM1NDAsNyBAQCBM
YXlvdXRSZWN0IFJlbmRlckJsb2NrOjpsb2dpY2FsTGVmdFNlbGVjCiAgICAgTGF5b3V0VW5pdCBy
b290QmxvY2tMb2dpY2FsTGVmdCA9IG1heChsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldChyb290
QmxvY2ssIGxvZ2ljYWxUb3ApLCBsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ss
IGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0KSk7CiAgICAgTGF5b3V0VW5pdCByb290QmxvY2tM
b2dpY2FsUmlnaHQgPSBtaW4oaW5saW5lRGlyZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgb2Zmc2V0
RnJvbVJvb3RCbG9jaykgKyBmbG9vclRvSW50KGxvZ2ljYWxMZWZ0KSwgbWluKGxvZ2ljYWxSaWdo
dFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIGxvZ2ljYWxUb3ApLCBsb2dpY2FsUmlnaHRTZWxl
Y3Rpb25PZmZzZXQocm9vdEJsb2NrLCBsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodCkpKTsKICAg
ICBMYXlvdXRVbml0IHJvb3RCbG9ja0xvZ2ljYWxXaWR0aCA9IHJvb3RCbG9ja0xvZ2ljYWxSaWdo
dCAtIHJvb3RCbG9ja0xvZ2ljYWxMZWZ0OwotICAgIGlmIChyb290QmxvY2tMb2dpY2FsV2lkdGgg
PD0gWkVST19MQVlPVVRfVU5JVCkKKyAgICBpZiAocm9vdEJsb2NrTG9naWNhbFdpZHRoIDw9IDAp
CiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKICAgICBMYXlvdXRSZWN0IGdhcFJlY3Qg
PSByb290QmxvY2stPmxvZ2ljYWxSZWN0VG9QaHlzaWNhbFJlY3Qocm9vdEJsb2NrUGh5c2ljYWxQ
b3NpdGlvbiwgTGF5b3V0UmVjdChyb290QmxvY2tMb2dpY2FsTGVmdCwgcm9vdEJsb2NrTG9naWNh
bFRvcCwgcm9vdEJsb2NrTG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSk7CkBAIC0zNTU2LDcg
KzM1NTYsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckJsb2NrOjpsb2dpY2FsUmlnaHRTZWxlCiAgICAg
TGF5b3V0VW5pdCByb290QmxvY2tMb2dpY2FsTGVmdCA9IG1heChpbmxpbmVEaXJlY3Rpb25PZmZz
ZXQocm9vdEJsb2NrLCBvZmZzZXRGcm9tUm9vdEJsb2NrKSArIGZsb29yVG9JbnQobG9naWNhbFJp
Z2h0KSwgbWF4KGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbFRv
cCksIGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbFRvcCArIGxv
Z2ljYWxIZWlnaHQpKSk7CiAgICAgTGF5b3V0VW5pdCByb290QmxvY2tMb2dpY2FsUmlnaHQgPSBt
aW4obG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbFRvcCksIGxv
Z2ljYWxSaWdodFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIGxvZ2ljYWxUb3AgKyBsb2dpY2Fs
SGVpZ2h0KSk7CiAgICAgTGF5b3V0VW5pdCByb290QmxvY2tMb2dpY2FsV2lkdGggPSByb290Qmxv
Y2tMb2dpY2FsUmlnaHQgLSByb290QmxvY2tMb2dpY2FsTGVmdDsKLSAgICBpZiAocm9vdEJsb2Nr
TG9naWNhbFdpZHRoIDw9IFpFUk9fTEFZT1VUX1VOSVQpCisgICAgaWYgKHJvb3RCbG9ja0xvZ2lj
YWxXaWR0aCA8PSAwKQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCiAgICAgTGF5b3V0
UmVjdCBnYXBSZWN0ID0gcm9vdEJsb2NrLT5sb2dpY2FsUmVjdFRvUGh5c2ljYWxSZWN0KHJvb3RC
bG9ja1BoeXNpY2FsUG9zaXRpb24sIExheW91dFJlY3Qocm9vdEJsb2NrTG9naWNhbExlZnQsIHJv
b3RCbG9ja0xvZ2ljYWxUb3AsIHJvb3RCbG9ja0xvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCkp
OwpAQCAtMzgxNiw4ICszODE2LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlRmxvYXRpbmdP
YmplY3QoUgogICAgICAgICAgICAgICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSA9IGxvZ2lj
YWxCb3R0b21Gb3JGbG9hdChyKTsKIAogICAgICAgICAgICAgICAgIC8vIEZpeCBmb3IgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0OTk1LgotICAgICAgICAgICAgICAg
IGlmIChsb2dpY2FsQm90dG9tIDwgMCB8fCBsb2dpY2FsQm90dG9tIDwgbG9naWNhbFRvcCB8fCBs
b2dpY2FsVG9wID09IE1BWF9MQVlPVVRfVU5JVCkKLSAgICAgICAgICAgICAgICAgICAgbG9naWNh
bEJvdHRvbSA9IE1BWF9MQVlPVVRfVU5JVDsKKyAgICAgICAgICAgICAgICBpZiAobG9naWNhbEJv
dHRvbSA8IDAgfHwgbG9naWNhbEJvdHRvbSA8IGxvZ2ljYWxUb3AgfHwgbG9naWNhbFRvcCA9PSBM
YXlvdXRVbml0OjptYXgoKSkKKyAgICAgICAgICAgICAgICAgICAgbG9naWNhbEJvdHRvbSA9IExh
eW91dFVuaXQ6Om1heCgpOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAvLyBTcGVjaWFsLWNhc2UgemVyby0gYW5kIGxlc3MtdGhhbi16ZXJvLWhlaWdodCBmbG9h
dHM6IHRob3NlIGRvbid0IHRvdWNoCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBsaW5lIHRo
YXQgdGhleSdyZSBvbiwgYnV0IGl0IHN0aWxsIG5lZWRzIHRvIGJlIGRpcnRpZWQuIFRoaXMgaXMK
QEAgLTQyNzAsNyArNDI3MCw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6Om5leHRGbG9hdExv
Z2ljYWwKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAgICByZXR1cm4gbG9naWNh
bEhlaWdodDsKIAotICAgIExheW91dFVuaXQgYm90dG9tID0gTUFYX0xBWU9VVF9VTklUOworICAg
IExheW91dFVuaXQgYm90dG9tID0gTGF5b3V0VW5pdDo6bWF4KCk7CiAgICAgY29uc3QgRmxvYXRp
bmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgp
OwogICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQu
ZW5kKCk7CiAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdP
YmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CkBAIC00MjgwLDE0ICs0MjgwLDE0
IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6Om5leHRGbG9hdExvZ2ljYWwKICAgICAgICAgICAg
IGJvdHRvbSA9IG1pbihmbG9hdEJvdHRvbSwgYm90dG9tKTsKICAgICB9CiAKLSAgICByZXR1cm4g
Ym90dG9tID09IE1BWF9MQVlPVVRfVU5JVCA/IFpFUk9fTEFZT1VUX1VOSVQgOiBib3R0b207Cisg
ICAgcmV0dXJuIGJvdHRvbSA9PSBMYXlvdXRVbml0OjptYXgoKSA/IExheW91dFVuaXQoKSA6IGJv
dHRvbTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bG93ZXN0RmxvYXRMb2dpY2FsQm90
dG9tKEZsb2F0aW5nT2JqZWN0OjpUeXBlIGZsb2F0VHlwZSkgY29uc3QKIHsKICAgICBpZiAoIW1f
ZmxvYXRpbmdPYmplY3RzKQotICAgICAgICByZXR1cm4gWkVST19MQVlPVVRfVU5JVDsKLSAgICBM
YXlvdXRVbml0IGxvd2VzdEZsb2F0Qm90dG9tID0gWkVST19MQVlPVVRfVU5JVDsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgTGF5b3V0VW5pdCBsb3dlc3RGbG9hdEJvdHRvbSA9IDA7CiAgICAgY29u
c3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVj
dHMtPnNldCgpOwogICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdP
YmplY3RTZXQuZW5kKCk7CiAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0g
ZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CkBAIC00MzA1LDcg
KzQzMDUsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjptYXJrTGluZXNEaXJ0eUluQmxvY2tSCiAKICAg
ICBSb290SW5saW5lQm94KiBsb3dlc3REaXJ0eUxpbmUgPSBsYXN0Um9vdEJveCgpOwogICAgIFJv
b3RJbmxpbmVCb3gqIGFmdGVyTG93ZXN0ID0gbG93ZXN0RGlydHlMaW5lOwotICAgIHdoaWxlIChs
b3dlc3REaXJ0eUxpbmUgJiYgbG93ZXN0RGlydHlMaW5lLT5saW5lQm90dG9tV2l0aExlYWRpbmco
KSA+PSBsb2dpY2FsQm90dG9tICYmIGxvZ2ljYWxCb3R0b20gPCBNQVhfTEFZT1VUX1VOSVQpIHsK
KyAgICB3aGlsZSAobG93ZXN0RGlydHlMaW5lICYmIGxvd2VzdERpcnR5TGluZS0+bGluZUJvdHRv
bVdpdGhMZWFkaW5nKCkgPj0gbG9naWNhbEJvdHRvbSAmJiBsb2dpY2FsQm90dG9tIDwgTGF5b3V0
VW5pdDo6bWF4KCkpIHsKICAgICAgICAgYWZ0ZXJMb3dlc3QgPSBsb3dlc3REaXJ0eUxpbmU7CiAg
ICAgICAgIGxvd2VzdERpcnR5TGluZSA9IGxvd2VzdERpcnR5TGluZS0+cHJldlJvb3RCb3goKTsK
ICAgICB9CkBAIC00Mzk2LDggKzQzOTYsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0
cygpCiAgICAgICAgIGFkZEludHJ1ZGluZ0Zsb2F0cyhibG9jaywgbG9naWNhbExlZnRPZmZzZXQs
IGxvZ2ljYWxUb3BPZmZzZXQpOwogCiAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpIHsKLSAgICAg
ICAgTGF5b3V0VW5pdCBjaGFuZ2VMb2dpY2FsVG9wID0gTUFYX0xBWU9VVF9VTklUOwotICAgICAg
ICBMYXlvdXRVbml0IGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBNSU5fTEFZT1VUX1VOSVQ7CisgICAg
ICAgIExheW91dFVuaXQgY2hhbmdlTG9naWNhbFRvcCA9IExheW91dFVuaXQ6Om1heCgpOworICAg
ICAgICBMYXlvdXRVbml0IGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBMYXlvdXRVbml0OjptaW4oKTsK
ICAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7CiAgICAgICAgICAgICBjb25zdCBGbG9h
dGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0
KCk7CiAgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5n
T2JqZWN0U2V0LmVuZCgpOwpAQCAtNDQ3OCw3ICs0NDc4LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJC
bG9jazo6YWRkT3ZlcmhhbmdpbmdGbAogICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgY2hp
bGRFbmQgPSBjaGlsZC0+bV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmVuZCgpOwogICAgIGZvciAo
RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBjaGlsZEl0ID0gY2hpbGQtPm1fZmxvYXRpbmdPYmpl
Y3RzLT5zZXQoKS5iZWdpbigpOyBjaGlsZEl0ICE9IGNoaWxkRW5kOyArK2NoaWxkSXQpIHsKICAg
ICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqY2hpbGRJdDsKLSAgICAgICAgTGF5b3V0VW5pdCBs
b2dpY2FsQm90dG9tRm9yRmxvYXQgPSBtaW4odGhpcy0+bG9naWNhbEJvdHRvbUZvckZsb2F0KHIp
LCBNQVhfTEFZT1VUX1VOSVQgLSBjaGlsZExvZ2ljYWxUb3ApOworICAgICAgICBMYXlvdXRVbml0
IGxvZ2ljYWxCb3R0b21Gb3JGbG9hdCA9IG1pbih0aGlzLT5sb2dpY2FsQm90dG9tRm9yRmxvYXQo
ciksIExheW91dFVuaXQ6Om1heCgpIC0gY2hpbGRMb2dpY2FsVG9wKTsKICAgICAgICAgTGF5b3V0
VW5pdCBsb2dpY2FsQm90dG9tID0gY2hpbGRMb2dpY2FsVG9wICsgbG9naWNhbEJvdHRvbUZvckZs
b2F0OwogICAgICAgICBsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20gPSBtYXgobG93ZXN0RmxvYXRM
b2dpY2FsQm90dG9tLCBsb2dpY2FsQm90dG9tKTsKIApAQCAtNDY2Myw3ICs0NjYzLDcgQEAgTGF5
b3V0VW5pdCBSZW5kZXJCbG9jazo6Z2V0Q2xlYXJEZWx0YShSZQogICAgIH0KIAogICAgIC8vIFdl
IGFsc28gY2xlYXIgZmxvYXRzIGlmIHdlIGFyZSB0b28gYmlnIHRvIHNpdCBvbiB0aGUgc2FtZSBs
aW5lIGFzIGEgZmxvYXQgKGFuZCB3aXNoIHRvIGF2b2lkIGZsb2F0cyBieSBkZWZhdWx0KS4KLSAg
ICBMYXlvdXRVbml0IHJlc3VsdCA9IGNsZWFyU2V0ID8gbWF4KFpFUk9fTEFZT1VUX1VOSVQsIGxv
Z2ljYWxCb3R0b20gLSBsb2dpY2FsVG9wKSA6IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgTGF5b3V0
VW5pdCByZXN1bHQgPSBjbGVhclNldCA/IG1heDxMYXlvdXRVbml0PigwLCBsb2dpY2FsQm90dG9t
IC0gbG9naWNhbFRvcCkgOiBMYXlvdXRVbml0KCk7CiAgICAgaWYgKCFyZXN1bHQgJiYgY2hpbGQt
PmF2b2lkc0Zsb2F0cygpKSB7CiAgICAgICAgIExheW91dFVuaXQgbmV3TG9naWNhbFRvcCA9IGxv
Z2ljYWxUb3A7CiAgICAgICAgIHdoaWxlICh0cnVlKSB7CkBAIC01NzgzLDcgKzU3ODMsNyBAQCB2
b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlSW5saW5lUHJlZmVycmVkCiAKICAgICBSZW5kZXJTdHls
ZSogc3R5bGVUb1VzZSA9IHN0eWxlKCk7CiAgICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9j
ayA9IHRoaXMtPmNvbnRhaW5pbmdCbG9jaygpOwotICAgIExheW91dFVuaXQgY3cgPSBjb250YWlu
aW5nQmxvY2sgPyBjb250YWluaW5nQmxvY2stPmNvbnRlbnRMb2dpY2FsV2lkdGgoKSA6IFpFUk9f
TEFZT1VUX1VOSVQ7CisgICAgTGF5b3V0VW5pdCBjdyA9IGNvbnRhaW5pbmdCbG9jayA/IGNvbnRh
aW5pbmdCbG9jay0+Y29udGVudExvZ2ljYWxXaWR0aCgpIDogTGF5b3V0VW5pdCgpOwogCiAgICAg
Ly8gSWYgd2UgYXJlIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUsIHdlIHdhbnQgdG8gaWdub3JlIGFs
bCB3aGl0ZS1zcGFjZS4KICAgICAvLyBBbHNvIHN0cmlwIHNwYWNlcyBpZiB3ZSBwcmV2aW91c2x5
IGhhZCB0ZXh0IHRoYXQgZW5kZWQgaW4gYSB0cmFpbGluZyBzcGFjZS4KQEAgLTYxNjAsOCArNjE2
MCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVCbG9ja1ByZWZlcnJlZEwKICAgICB9CiAK
ICAgICAvLyBBbHdheXMgbWFrZSBzdXJlIHRoZXNlIHZhbHVlcyBhcmUgbm9uLW5lZ2F0aXZlLgot
ICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4KFpFUk9fTEFZT1VUX1VOSVQsIG1f
bWluUHJlZmVycmVkTG9naWNhbFdpZHRoKTsKLSAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0
aCA9IG1heChaRVJPX0xBWU9VVF9VTklULCBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCk7Cisg
ICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtYXg8TGF5b3V0VW5pdD4oMCwgbV9taW5Q
cmVmZXJyZWRMb2dpY2FsV2lkdGgpOworICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0g
bWF4PExheW91dFVuaXQ+KDAsIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKTsKIAogICAgIG1f
bWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4KGZsb2F0TGVmdFdpZHRoICsgZmxvYXRSaWdo
dFdpZHRoLCBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCk7CiB9CkBAIC02NTkyLDcgKzY1OTIs
NyBAQCBzdGF0aWMgaW50IGdldEhlaWdodEZvckxpbmVDb3VudChSZW5kZXJCCiAgICAgICAgIGlm
IChibG9jay0+Y2hpbGRyZW5JbmxpbmUoKSkgewogICAgICAgICAgICAgZm9yIChSb290SW5saW5l
Qm94KiBib3ggPSBibG9jay0+Zmlyc3RSb290Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0Um9v
dEJveCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCsrY291bnQgPT0gbCkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGJveC0+bGluZUJvdHRvbSgpICsgKGluY2x1ZGVCb3R0b20gPyAoYmxv
Y2stPmJvcmRlckJvdHRvbSgpICsgYmxvY2stPnBhZGRpbmdCb3R0b20oKSkgOiBaRVJPX0xBWU9V
VF9VTklUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJveC0+bGluZUJvdHRvbSgpICsg
KGluY2x1ZGVCb3R0b20gPyAoYmxvY2stPmJvcmRlckJvdHRvbSgpICsgYmxvY2stPnBhZGRpbmdC
b3R0b20oKSkgOiBMYXlvdXRVbml0KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgIGVsc2UgewpAQCAtNjYwMSw3ICs2NjAxLDcgQEAgc3RhdGljIGludCBnZXRIZWlnaHRGb3JM
aW5lQ291bnQoUmVuZGVyQgogICAgICAgICAgICAgICAgIGlmIChzaG91bGRDaGVja0xpbmVzKG9i
aikpIHsKICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9IGdldEhlaWdodEZvckxpbmVD
b3VudCh0b1JlbmRlckJsb2NrKG9iaiksIGwsIGZhbHNlLCBjb3VudCk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChyZXN1bHQgIT0gLTEpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0ICsgb2JqLT55KCkgKyAoaW5jbHVkZUJvdHRvbSA/IChibG9jay0+Ym9yZGVyQm90dG9t
KCkgKyBibG9jay0+cGFkZGluZ0JvdHRvbSgpKSA6IFpFUk9fTEFZT1VUX1VOSVQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIG9iai0+eSgpICsgKGluY2x1ZGVCb3R0
b20gPyAoYmxvY2stPmJvcmRlckJvdHRvbSgpICsgYmxvY2stPnBhZGRpbmdCb3R0b20oKSkgOiBM
YXlvdXRVbml0KCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW9iai0+aXNGbG9hdGlu
Z09yT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmICFvYmotPmlzUnVuSW4oKSkKICAgICAgICAgICAg
ICAgICAgICAgbm9ybWFsRmxvd0NoaWxkV2l0aG91dExpbmVzID0gb2JqOwogICAgICAgICAgICAg
fQpAQCAtNjY5MCwxMSArNjY5MCwxMSBAQCB2b2lkIFJlbmRlckJsb2NrOjpib3JkZXJGaXRBZGp1
c3QoTGF5b3V0CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdhbGsgYW55IG5vcm1hbCBmbG93
IGxpbmVzIHRvIHNudWdseSBmaXQuCi0gICAgTGF5b3V0VW5pdCBsZWZ0ID0gTUFYX0xBWU9VVF9V
TklUOwotICAgIExheW91dFVuaXQgcmlnaHQgPSBNSU5fTEFZT1VUX1VOSVQ7CisgICAgTGF5b3V0
VW5pdCBsZWZ0ID0gTGF5b3V0VW5pdDo6bWF4KCk7CisgICAgTGF5b3V0VW5pdCByaWdodCA9IExh
eW91dFVuaXQ6Om1pbigpOwogICAgIExheW91dFVuaXQgb2xkV2lkdGggPSByZWN0LndpZHRoKCk7
CiAgICAgYWRqdXN0Rm9yQm9yZGVyRml0KDAsIGxlZnQsIHJpZ2h0KTsKLSAgICBpZiAobGVmdCAh
PSBNQVhfTEFZT1VUX1VOSVQpIHsKKyAgICBpZiAobGVmdCAhPSBMYXlvdXRVbml0OjptYXgoKSkg
ewogICAgICAgICBsZWZ0ID0gbWluKGxlZnQsIG9sZFdpZHRoIC0gKGJvcmRlclJpZ2h0KCkgKyBw
YWRkaW5nUmlnaHQoKSkpOwogCiAgICAgICAgIGxlZnQgLT0gKGJvcmRlckxlZnQoKSArIHBhZGRp
bmdMZWZ0KCkpOwpAQCAtNjcwMyw3ICs2NzAzLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Ym9yZGVy
Rml0QWRqdXN0KExheW91dAogICAgICAgICAgICAgcmVjdC5leHBhbmQoLWxlZnQsIDApOwogICAg
ICAgICB9CiAgICAgfQotICAgIGlmIChyaWdodCAhPSBNSU5fTEFZT1VUX1VOSVQpIHsKKyAgICBp
ZiAocmlnaHQgIT0gTGF5b3V0VW5pdDo6bWluKCkpIHsKICAgICAgICAgcmlnaHQgPSBtYXgocmln
aHQsIGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkpOwogCiAgICAgICAgIHJpZ2h0ICs9IChi
b3JkZXJSaWdodCgpICsgcGFkZGluZ1JpZ2h0KCkpOwpAQCAtNjg5MCw4ICs2ODkwLDggQEAgdm9p
ZCBSZW5kZXJCbG9jazo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdAogICAgICAgICAvLyBGSVhNRTog
VGhpcyBpcyB3cm9uZyBmb3IgYmxvY2stZmxvd3MgdGhhdCBhcmUgaG9yaXpvbnRhbC4KICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2NzgxCiAgICAg
ICAgIGJvb2wgcHJldklubGluZUhhc0xpbmVCb3ggPSB0b1JlbmRlcklubGluZShpbmxpbmVFbGVt
ZW50Q29udGludWF0aW9uKCktPm5vZGUoKS0+cmVuZGVyZXIoKSktPmZpcnN0TGluZUJveCgpOyAK
LSAgICAgICAgZmxvYXQgdG9wTWFyZ2luID0gcHJldklubGluZUhhc0xpbmVCb3ggPyBjb2xsYXBz
ZWRNYXJnaW5CZWZvcmUoKSA6IFpFUk9fTEFZT1VUX1VOSVQ7Ci0gICAgICAgIGZsb2F0IGJvdHRv
bU1hcmdpbiA9IG5leHRJbmxpbmVIYXNMaW5lQm94ID8gY29sbGFwc2VkTWFyZ2luQWZ0ZXIoKSA6
IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAgIGZsb2F0IHRvcE1hcmdpbiA9IHByZXZJbmxpbmVI
YXNMaW5lQm94ID8gY29sbGFwc2VkTWFyZ2luQmVmb3JlKCkgOiBMYXlvdXRVbml0KCk7CisgICAg
ICAgIGZsb2F0IGJvdHRvbU1hcmdpbiA9IG5leHRJbmxpbmVIYXNMaW5lQm94ID8gY29sbGFwc2Vk
TWFyZ2luQWZ0ZXIoKSA6IExheW91dFVuaXQoKTsKICAgICAgICAgTGF5b3V0UmVjdCByZWN0KGFk
ZGl0aW9uYWxPZmZzZXQueCgpLCBhZGRpdGlvbmFsT2Zmc2V0LnkoKSAtIHRvcE1hcmdpbiwgd2lk
dGgoKSwgaGVpZ2h0KCkgKyB0b3BNYXJnaW4gKyBib3R0b21NYXJnaW4pOwogICAgICAgICBpZiAo
IXJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmVjdHMuYXBwZW5kKHBpeGVsU25hcHBlZElu
dFJlY3QocmVjdCkpOwpAQCAtNjk5Niw3ICs2OTk2LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9j
azo6YXBwbHlCZWZvcmVCcmVhawogICAgICAgICBpZiAoY2hlY2tDb2x1bW5CcmVha3MpCiAgICAg
ICAgICAgICB2aWV3KCktPmxheW91dFN0YXRlKCktPmFkZEZvcmNlZENvbHVtbkJyZWFrKGNoaWxk
LCBsb2dpY2FsT2Zmc2V0KTsKICAgICAgICAgaWYgKGNoZWNrUmVnaW9uQnJlYWtzKSB7Ci0gICAg
ICAgICAgICBMYXlvdXRVbml0IG9mZnNldEJyZWFrQWRqdXN0bWVudCA9IFpFUk9fTEFZT1VUX1VO
SVQ7CisgICAgICAgICAgICBMYXlvdXRVbml0IG9mZnNldEJyZWFrQWRqdXN0bWVudCA9IDA7CiAg
ICAgICAgICAgICBpZiAoZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVhZCgpLT5hZGRGb3JjZWRSZWdp
b25CcmVhayhvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgKyBsb2dpY2FsT2Zmc2V0
LCBjaGlsZCwgdHJ1ZSwgJm9mZnNldEJyZWFrQWRqdXN0bWVudCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGxvZ2ljYWxPZmZzZXQgKyBvZmZzZXRCcmVha0FkanVzdG1lbnQ7CiAgICAgICAgIH0K
QEAgLTcwMTgsOCArNzAxOCw4IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmFwcGx5QWZ0ZXJC
cmVhaygKICAgICAgICAgaWYgKGNoZWNrQ29sdW1uQnJlYWtzKQogICAgICAgICAgICAgdmlldygp
LT5sYXlvdXRTdGF0ZSgpLT5hZGRGb3JjZWRDb2x1bW5CcmVhayhjaGlsZCwgbG9naWNhbE9mZnNl
dCk7CiAgICAgICAgIGlmIChjaGVja1JlZ2lvbkJyZWFrcykgewotICAgICAgICAgICAgTGF5b3V0
VW5pdCBtYXJnaW5PZmZzZXQgPSBtYXJnaW5JbmZvLmNhbkNvbGxhcHNlV2l0aE1hcmdpbkJlZm9y
ZSgpID8gWkVST19MQVlPVVRfVU5JVCA6IG1hcmdpbkluZm8ubWFyZ2luKCk7Ci0gICAgICAgICAg
ICBMYXlvdXRVbml0IG9mZnNldEJyZWFrQWRqdXN0bWVudCA9IFpFUk9fTEFZT1VUX1VOSVQ7Cisg
ICAgICAgICAgICBMYXlvdXRVbml0IG1hcmdpbk9mZnNldCA9IG1hcmdpbkluZm8uY2FuQ29sbGFw
c2VXaXRoTWFyZ2luQmVmb3JlKCkgPyBMYXlvdXRVbml0KCkgOiBtYXJnaW5JbmZvLm1hcmdpbigp
OworICAgICAgICAgICAgTGF5b3V0VW5pdCBvZmZzZXRCcmVha0FkanVzdG1lbnQgPSAwOwogICAg
ICAgICAgICAgaWYgKGVuY2xvc2luZ1JlbmRlckZsb3dUaHJlYWQoKS0+YWRkRm9yY2VkUmVnaW9u
QnJlYWsob2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpICsgbG9naWNhbE9mZnNldCAr
IG1hcmdpbk9mZnNldCwgY2hpbGQsIGZhbHNlLCAmb2Zmc2V0QnJlYWtBZGp1c3RtZW50KSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gbG9naWNhbE9mZnNldCArIG9mZnNldEJyZWFrQWRqdXN0bWVu
dDsKICAgICAgICAgfQpAQCAtNzA4MSw3ICs3MDgxLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9j
azo6YWRqdXN0Rm9yVW5zcGxpdAogICAgICAgICB8fCAoY2hlY2tSZWdpb25CcmVha3MgJiYgY2hp
bGQtPnN0eWxlKCktPnJlZ2lvbkJyZWFrSW5zaWRlKCkgPT0gUEJBVk9JRCk7CiAgICAgaWYgKCFp
c1Vuc3BsaXR0YWJsZSkKICAgICAgICAgcmV0dXJuIGxvZ2ljYWxPZmZzZXQ7Ci0gICAgTGF5b3V0
VW5pdCBjaGlsZExvZ2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoY2hpbGQpICsg
KGluY2x1ZGVNYXJnaW5zID8gbWFyZ2luQmVmb3JlRm9yQ2hpbGQoY2hpbGQpICsgbWFyZ2luQWZ0
ZXJGb3JDaGlsZChjaGlsZCkgOiBaRVJPX0xBWU9VVF9VTklUKTsKKyAgICBMYXlvdXRVbml0IGNo
aWxkTG9naWNhbEhlaWdodCA9IGxvZ2ljYWxIZWlnaHRGb3JDaGlsZChjaGlsZCkgKyAoaW5jbHVk
ZU1hcmdpbnMgPyBtYXJnaW5CZWZvcmVGb3JDaGlsZChjaGlsZCkgKyBtYXJnaW5BZnRlckZvckNo
aWxkKGNoaWxkKSA6IExheW91dFVuaXQoKSk7CiAgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRl
ID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpOwogICAgIGlmIChsYXlvdXRTdGF0ZS0+bV9jb2x1bW5J
bmZvKQogICAgICAgICBsYXlvdXRTdGF0ZS0+bV9jb2x1bW5JbmZvLT51cGRhdGVNaW5pbXVtQ29s
dW1uSGVpZ2h0KGNoaWxkTG9naWNhbEhlaWdodCk7CkBAIC03MTU5LDEyICs3MTU5LDEyIEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmFkanVzdExpbmVQb3NpdGlvbkZvclAKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgaWYgKGxpbmVIZWlnaHQgPiBwYWdlTG9naWNhbEhlaWdodCkgewogICAgICAg
ICAgICAgLy8gU3BsaXQgdGhlIHRvcCBtYXJnaW4gaW4gb3JkZXIgdG8gYXZvaWQgc3BsaXR0aW5n
IHRoZSB2aXNpYmxlIHBhcnQgb2YgdGhlIGxpbmUuCi0gICAgICAgICAgICByZW1haW5pbmdMb2dp
Y2FsSGVpZ2h0IC09IG1pbihsaW5lSGVpZ2h0IC0gcGFnZUxvZ2ljYWxIZWlnaHQsIG1heChaRVJP
X0xBWU9VVF9VTklULCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cueSgpIC0gbGluZUJveC0+bGluZVRv
cFdpdGhMZWFkaW5nKCkpKTsKKyAgICAgICAgICAgIHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQgLT0g
bWluKGxpbmVIZWlnaHQgLSBwYWdlTG9naWNhbEhlaWdodCwgbWF4PExheW91dFVuaXQ+KDAsIGxv
Z2ljYWxWaXN1YWxPdmVyZmxvdy55KCkgLSBsaW5lQm94LT5saW5lVG9wV2l0aExlYWRpbmcoKSkp
OwogICAgICAgICB9Ci0gICAgICAgIExheW91dFVuaXQgdG90YWxMb2dpY2FsSGVpZ2h0ID0gbGlu
ZUhlaWdodCArIG1heChaRVJPX0xBWU9VVF9VTklULCBsb2dpY2FsT2Zmc2V0KTsKKyAgICAgICAg
TGF5b3V0VW5pdCB0b3RhbExvZ2ljYWxIZWlnaHQgPSBsaW5lSGVpZ2h0ICsgbWF4PExheW91dFVu
aXQ+KDAsIGxvZ2ljYWxPZmZzZXQpOwogICAgICAgICBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVp
Z2h0QXROZXdPZmZzZXQgPSBoYXNVbmlmb3JtUGFnZUxvZ2ljYWxIZWlnaHQgPyBwYWdlTG9naWNh
bEhlaWdodCA6IHBhZ2VMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KGxvZ2ljYWxPZmZzZXQgKyByZW1h
aW5pbmdMb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgaWYgKGxpbmVCb3ggPT0gZmlyc3RSb290Qm94
KCkgJiYgdG90YWxMb2dpY2FsSGVpZ2h0IDwgcGFnZUxvZ2ljYWxIZWlnaHRBdE5ld09mZnNldCAm
JiAhaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgIWlzVGFibGVDZWxsKCkpCi0gICAgICAgICAg
ICBzZXRQYWdpbmF0aW9uU3RydXQocmVtYWluaW5nTG9naWNhbEhlaWdodCArIG1heChaRVJPX0xB
WU9VVF9VTklULCBsb2dpY2FsT2Zmc2V0KSk7CisgICAgICAgICAgICBzZXRQYWdpbmF0aW9uU3Ry
dXQocmVtYWluaW5nTG9naWNhbEhlaWdodCArIG1heDxMYXlvdXRVbml0PigwLCBsb2dpY2FsT2Zm
c2V0KSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgZGVsdGEgKz0gcmVtYWluaW5nTG9n
aWNhbEhlaWdodDsKICAgICAgICAgICAgIGxpbmVCb3gtPnNldFBhZ2luYXRpb25TdHJ1dChyZW1h
aW5pbmdMb2dpY2FsSGVpZ2h0KTsKQEAgLTcyNTIsNyArNzI1Miw3IEBAIExheW91dFVuaXQgUmVu
ZGVyQmxvY2s6Om9mZnNldEZyb21Mb2dpY2EKIHsKICAgICBMYXlvdXRTdGF0ZSogbGF5b3V0U3Rh
dGUgPSB2aWV3KCktPmxheW91dFN0YXRlKCk7CiAgICAgaWYgKGxheW91dFN0YXRlICYmICFsYXlv
dXRTdGF0ZS0+aXNQYWdpbmF0ZWQoKSkKLSAgICAgICAgcmV0dXJuIFpFUk9fTEFZT1VUX1VOSVQ7
CisgICAgICAgIHJldHVybiAwOwogICAgIGlmIChsYXlvdXRTdGF0ZSkgewogICAgICAgICAvLyBG
SVhNRTogU2FuaXR5IGNoZWNrIHRoYXQgdGhlIHJlbmRlcmVyIGluIHRoZSBsYXlvdXQgc3RhdGUg
aXMgb3Vycywgc2luY2Ugb3RoZXJ3aXNlIHRoZSBjb21wdXRhdGlvbiB3aWxsIGJlIG9mZi4KICAg
ICAgICAgLy8gUmlnaHQgbm93IHRoaXMgYXNzZXJ0IGdldHMgaGl0IGluc2lkZSBjb21wdXRlTG9n
aWNhbEhlaWdodCBmb3IgcGVyY2VudGFnZSBtYXJnaW5zLCBzaW5jZSB0aGV5J3JlIGNvbXB1dGVk
IHVzaW5nCkBAIC03MjY4LDcgKzcyNjgsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpvZmZz
ZXRGcm9tTG9naWNhCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgYSBzbG93ZXIgcGF0aCB0aGF0IGRv
ZXNuJ3QgdXNlIGxheW91dCBzdGF0ZSBhbmQgcmVsaWVzIG9uIGdldHRpbmcgeW91ciBsb2dpY2Fs
IHRvcCBpbnNpZGUgdGhlIGVuY2xvc2luZyBmbG93IHRocmVhZC4gSXQgZG9lc24ndAogICAgIC8v
IHdvcmsgd2l0aCBjb2x1bW5zIG9yIHBhZ2VzIGN1cnJlbnRseSwgYnV0IGl0IHNob3VsZCBvbmNl
IHRoZXkgaGF2ZSBiZWVuIHN3aXRjaGVkIG92ZXIgdG8gdXNpbmcgZmxvdyB0aHJlYWRzLgogICAg
IGlmICghaW5SZW5kZXJGbG93VGhyZWFkKCkpCi0gICAgICAgIHJldHVybiBaRVJPX0xBWU9VVF9V
TklUOworICAgICAgICByZXR1cm4gMDsKIAogICAgIGNvbnN0IFJlbmRlckJsb2NrKiBjdXJyZW50
QmxvY2sgPSB0aGlzOwogICAgIExheW91dFJlY3QgYmxvY2tSZWN0KDAsIDAsIHdpZHRoKCksIGhl
aWdodCgpKTsKQEAgLTcyNzcsNyArNzI3Nyw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6Om9m
ZnNldEZyb21Mb2dpY2EKICAgICAgICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5lckJsb2NrID0gY3Vy
cmVudEJsb2NrLT5jb250YWluaW5nQmxvY2soKTsKICAgICAgICAgQVNTRVJUKGNvbnRhaW5lckJs
b2NrKTsKICAgICAgICAgaWYgKCFjb250YWluZXJCbG9jaykKLSAgICAgICAgICAgIHJldHVybiBa
RVJPX0xBWU9VVF9VTklUOworICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIExheW91dFBv
aW50IGN1cnJlbnRCbG9ja0xvY2F0aW9uID0gY3VycmVudEJsb2NrLT5sb2NhdGlvbigpOwogCiAg
ICAgICAgIGlmIChjb250YWluZXJCbG9jay0+c3R5bGUoKS0+d3JpdGluZ01vZGUoKSAhPSBjdXJy
ZW50QmxvY2stPnN0eWxlKCktPndyaXRpbmdNb2RlKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3
IEBAIHB1YmxpYzoKICAgICAvLyBjb21wdXRlIHRoZSByZWdpb24gYWxsIG92ZXIgYWdhaW4gd2hl
biB5b3UgYWxyZWFkeSBrbm93IGl0LgogICAgIExheW91dFVuaXQgYXZhaWxhYmxlTG9naWNhbFdp
ZHRoRm9yTGluZShMYXlvdXRVbml0IHBvc2l0aW9uLCBib29sIGZpcnN0TGluZSwgUmVuZGVyUmVn
aW9uKiByZWdpb24sIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSwg
TGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVy
biBtYXgoWkVST19MQVlPVVRfVU5JVCwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShwb3NpdGlv
biwgZmlyc3RMaW5lLCByZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UsIGxv
Z2ljYWxIZWlnaHQpCisgICAgICAgIHJldHVybiBtYXg8TGF5b3V0VW5pdD4oMCwgbG9naWNhbFJp
Z2h0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgZmlyc3RMaW5lLCByZWdpb24sIG9mZnNldEZyb21M
b2dpY2FsVG9wT2ZGaXJzdFBhZ2UsIGxvZ2ljYWxIZWlnaHQpCiAgICAgICAgICAgICAtIGxvZ2lj
YWxMZWZ0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgZmlyc3RMaW5lLCByZWdpb24sIG9mZnNldEZy
b21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UsIGxvZ2ljYWxIZWlnaHQpKTsKICAgICB9CiAgICAgTGF5
b3V0VW5pdCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIGJv
b2wgZmlyc3RMaW5lLCBSZW5kZXJSZWdpb24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9t
TG9naWNhbFRvcE9mRmlyc3RQYWdlLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAwKSBjb25z
dCAKQEAgLTI5NywxMiArMjk3LDEyIEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBjb2x1bW5Db3Vu
dChDb2x1bW5JbmZvKikgY29uc3Q7CiAgICAgTGF5b3V0UmVjdCBjb2x1bW5SZWN0QXQoQ29sdW1u
SW5mbyosIHVuc2lnbmVkKSBjb25zdDsKIAotICAgIExheW91dFVuaXQgcGFnaW5hdGlvblN0cnV0
KCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fcGFnaW5hdGlvblN0
cnV0IDogWkVST19MQVlPVVRfVU5JVDsgfQorICAgIExheW91dFVuaXQgcGFnaW5hdGlvblN0cnV0
KCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fcGFnaW5hdGlvblN0
cnV0IDogTGF5b3V0VW5pdCgpOyB9CiAgICAgdm9pZCBzZXRQYWdpbmF0aW9uU3RydXQoTGF5b3V0
VW5pdCk7CiAgICAgCiAgICAgLy8gVGhlIHBhZ2UgbG9naWNhbCBvZmZzZXQgaXMgdGhlIG9iamVj
dCdzIG9mZnNldCBmcm9tIHRoZSB0b3Agb2YgdGhlIHBhZ2UgaW4gdGhlIHBhZ2UgcHJvZ3Jlc3Np
b24KICAgICAvLyBkaXJlY3Rpb24gKHNvIGFuIHgtb2Zmc2V0IGluIHZlcnRpY2FsIHRleHQgYW5k
IGEgeS1vZmZzZXQgZm9yIGhvcml6b250YWwgdGV4dCkuCi0gICAgTGF5b3V0VW5pdCBwYWdlTG9n
aWNhbE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3Bh
Z2VMb2dpY2FsT2Zmc2V0IDogWkVST19MQVlPVVRfVU5JVDsgfQorICAgIExheW91dFVuaXQgcGFn
ZUxvZ2ljYWxPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+
bV9wYWdlTG9naWNhbE9mZnNldCA6IExheW91dFVuaXQoKTsgfQogICAgIHZvaWQgc2V0UGFnZUxv
Z2ljYWxPZmZzZXQoTGF5b3V0VW5pdCk7CiAKICAgICBSb290SW5saW5lQm94KiBsaW5lR3JpZEJv
eCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX2xpbmVHcmlkQm94
IDogMDsgfQpAQCAtMzcxLDcgKzM3MSw3IEBAIHB1YmxpYzoKICAgICBMYXlvdXRVbml0IGxvZ2lj
YWxSaWdodE9mZnNldEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiwgTGF5b3V0VW5pdCBvZmZzZXRG
cm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSBjb25zdDsKICAgICBMYXlvdXRVbml0IGF2YWlsYWJs
ZUxvZ2ljYWxXaWR0aEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQg
b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgY29uc3QKICAgICB7IAotICAgICAgICBy
ZXR1cm4gbWF4KFpFUk9fTEFZT1VUX1VOSVQsIGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQo
cmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSAtCisgICAgICAgIHJldHVy
biBtYXg8TGF5b3V0VW5pdD4oMCwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChyZWdpb24s
IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIC0KICAgICAgICAgICAgIGxvZ2ljYWxM
ZWZ0T2Zmc2V0Rm9yQ29udGVudChyZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBh
Z2UpKTsgfQogICAgIExheW91dFVuaXQgc3RhcnRPZmZzZXRGb3JDb250ZW50KFJlbmRlclJlZ2lv
biogcmVnaW9uLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNv
bnN0CiAgICAgewpAQCAtMTE0NCwyMCArMTE0NCwyMCBAQCBwcm90ZWN0ZWQ6CiAKICAgICAgICAg
c3RhdGljIExheW91dFVuaXQgcG9zaXRpdmVNYXJnaW5CZWZvcmVEZWZhdWx0KGNvbnN0IFJlbmRl
ckJsb2NrKiBibG9jaykKICAgICAgICAgeyAKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1heChi
bG9jay0+bWFyZ2luQmVmb3JlKCksIFpFUk9fTEFZT1VUX1VOSVQpOworICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bWF4PExheW91dFVuaXQ+KGJsb2NrLT5tYXJnaW5CZWZvcmUoKSwgMCk7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBMYXlvdXRVbml0IG5lZ2F0aXZlTWFyZ2lu
QmVmb3JlRGVmYXVsdChjb25zdCBSZW5kZXJCbG9jayogYmxvY2spCiAgICAgICAgIHsgCi0gICAg
ICAgICAgICByZXR1cm4gc3RkOjptYXgoLWJsb2NrLT5tYXJnaW5CZWZvcmUoKSwgWkVST19MQVlP
VVRfVU5JVCk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYXg8TGF5b3V0VW5pdD4oLWJsb2Nr
LT5tYXJnaW5CZWZvcmUoKSwgMCk7CiAgICAgICAgIH0KICAgICAgICAgc3RhdGljIExheW91dFVu
aXQgcG9zaXRpdmVNYXJnaW5BZnRlckRlZmF1bHQoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrKQog
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYXgoYmxvY2stPm1hcmdpbkFmdGVy
KCksIFpFUk9fTEFZT1VUX1VOSVQpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4PExheW91
dFVuaXQ+KGJsb2NrLT5tYXJnaW5BZnRlcigpLCAwKTsKICAgICAgICAgfQogICAgICAgICBzdGF0
aWMgTGF5b3V0VW5pdCBuZWdhdGl2ZU1hcmdpbkFmdGVyRGVmYXVsdChjb25zdCBSZW5kZXJCbG9j
ayogYmxvY2spCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1heCgtYmxvY2st
Pm1hcmdpbkFmdGVyKCksIFpFUk9fTEFZT1VUX1VOSVQpOworICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bWF4PExheW91dFVuaXQ+KC1ibG9jay0+bWFyZ2luQWZ0ZXIoKSwgMCk7CiAgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIE1hcmdpblZhbHVlcyBtX21hcmdpbnM7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkocmV2
aXNpb24gMTMzNzY0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGlu
ZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNDgsOCArMTI0OCw4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHVwZGF0ZVJlcGFpbnRSYW5nZUZyb21Cb3goUm9vdElubGluZUJveCogYm94LCBM
YXlvdXRVbml0IHBhZ2luYXRpb25EZWx0YSA9IDApCiAgICAgewogICAgICAgICBtX3VzZXNSZXBh
aW50Qm91bmRzID0gdHJ1ZTsKLSAgICAgICAgbV9yZXBhaW50TG9naWNhbFRvcCA9IG1pbihtX3Jl
cGFpbnRMb2dpY2FsVG9wLCBib3gtPmxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdygpICsgbWluKHBh
Z2luYXRpb25EZWx0YSwgWkVST19MQVlPVVRfVU5JVCkpOwotICAgICAgICBtX3JlcGFpbnRMb2dp
Y2FsQm90dG9tID0gbWF4KG1fcmVwYWludExvZ2ljYWxCb3R0b20sIGJveC0+bG9naWNhbEJvdHRv
bVZpc3VhbE92ZXJmbG93KCkgKyBtYXgocGFnaW5hdGlvbkRlbHRhLCBaRVJPX0xBWU9VVF9VTklU
KSk7CisgICAgICAgIG1fcmVwYWludExvZ2ljYWxUb3AgPSBtaW4obV9yZXBhaW50TG9naWNhbFRv
cCwgYm94LT5sb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3coKSArIG1pbjxMYXlvdXRVbml0PihwYWdp
bmF0aW9uRGVsdGEsIDApKTsKKyAgICAgICAgbV9yZXBhaW50TG9naWNhbEJvdHRvbSA9IG1heCht
X3JlcGFpbnRMb2dpY2FsQm90dG9tLCBib3gtPmxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdygp
ICsgbWF4PExheW91dFVuaXQ+KHBhZ2luYXRpb25EZWx0YSwgMCkpOwogICAgIH0KICAgICAKICAg
ICBib29sIGVuZExpbmVNYXRjaGVkKCkgY29uc3QgeyByZXR1cm4gbV9lbmRMaW5lTWF0Y2hlZDsg
fQpAQCAtMTc1Myw3ICsxNzUzLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2hlY2tGbG9hdHNJbkNs
ZWFuTGluZQogICAgICAgICAgICAgTGF5b3V0VW5pdCBmbG9hdFRvcCA9IGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkgPyBmbG9hdHNbZmxvYXRJbmRleF0ucmVjdC55KCkgOiBmbG9hdHNbZmxvYXRJ
bmRleF0ucmVjdC54KCk7CiAgICAgICAgICAgICBMYXlvdXRVbml0IGZsb2F0SGVpZ2h0ID0gaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG1heChmbG9hdHNbZmxvYXRJbmRleF0ucmVjdC5oZWln
aHQoKSwgbmV3U2l6ZS5oZWlnaHQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtYXgoZmxvYXRzW2Zsb2F0SW5kZXhd
LnJlY3Qud2lkdGgoKSwgbmV3U2l6ZS53aWR0aCgpKTsKLSAgICAgICAgICAgIGZsb2F0SGVpZ2h0
ID0gbWluKGZsb2F0SGVpZ2h0LCBNQVhfTEFZT1VUX1VOSVQgLSBmbG9hdFRvcCk7CisgICAgICAg
ICAgICBmbG9hdEhlaWdodCA9IG1pbihmbG9hdEhlaWdodCwgTGF5b3V0VW5pdDo6bWF4KCkgLSBm
bG9hdFRvcCk7CiAgICAgICAgICAgICBsaW5lLT5tYXJrRGlydHkoKTsKICAgICAgICAgICAgIG1h
cmtMaW5lc0RpcnR5SW5CbG9ja1JhbmdlKGxpbmUtPmxpbmVCb3R0b21XaXRoTGVhZGluZygpLCBm
bG9hdFRvcCArIGZsb2F0SGVpZ2h0LCBsaW5lKTsKICAgICAgICAgICAgIGZsb2F0c1tmbG9hdElu
ZGV4XS5yZWN0LnNldFNpemUobmV3U2l6ZSk7CkBAIC0yOTE4LDcgKzI5MTgsNyBAQCBJbmxpbmVJ
dGVyYXRvciBSZW5kZXJCbG9jazo6TGluZUJyZWFrZXI6CiAKIHZvaWQgUmVuZGVyQmxvY2s6OmFk
ZE92ZXJmbG93RnJvbUlubGluZUNoaWxkcmVuKCkKIHsKLSAgICBMYXlvdXRVbml0IGVuZFBhZGRp
bmcgPSBoYXNPdmVyZmxvd0NsaXAoKSA/IHBhZGRpbmdFbmQoKSA6IFpFUk9fTEFZT1VUX1VOSVQ7
CisgICAgTGF5b3V0VW5pdCBlbmRQYWRkaW5nID0gaGFzT3ZlcmZsb3dDbGlwKCkgPyBwYWRkaW5n
RW5kKCkgOiBMYXlvdXRVbml0KCk7CiAgICAgLy8gRklYTUU6IE5lZWQgdG8gZmluZCBhbm90aGVy
IHdheSB0byBkbyB0aGlzLCBzaW5jZSBzY3JvbGxiYXJzIGNvdWxkIHNob3cgd2hlbiB3ZSBkb24n
dCB3YW50IHRoZW0gdG8uCiAgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmICFlbmRQYWRkaW5n
ICYmIG5vZGUoKSAmJiBub2RlKCktPmlzUm9vdEVkaXRhYmxlRWxlbWVudCgpICYmIHN0eWxlKCkt
PmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgZW5kUGFkZGluZyA9IDE7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gMTMzNzY0KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM2Myw3ICszNjMsNyBAQCBpbnQgUmVuZGVyQm94OjpzY3JvbGxXaWR0aCgpIGNvbnN0CiAg
ICAgLy8gRklYTUU6IE5lZWQgdG8gd29yayByaWdodCB3aXRoIHdyaXRpbmcgbW9kZXMuCiAgICAg
aWYgKHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgcmV0dXJuIHNu
YXBTaXplVG9QaXhlbChtYXgoY2xpZW50V2lkdGgoKSwgbGF5b3V0T3ZlcmZsb3dSZWN0KCkubWF4
WCgpIC0gYm9yZGVyTGVmdCgpKSwgeCgpICsgY2xpZW50TGVmdCgpKTsKLSAgICByZXR1cm4gY2xp
ZW50V2lkdGgoKSAtIG1pbihaRVJPX0xBWU9VVF9VTklULCBsYXlvdXRPdmVyZmxvd1JlY3QoKS54
KCkgLSBib3JkZXJMZWZ0KCkpOworICAgIHJldHVybiBjbGllbnRXaWR0aCgpIC0gbWluPExheW91
dFVuaXQ+KDAsIGxheW91dE92ZXJmbG93UmVjdCgpLngoKSAtIGJvcmRlckxlZnQoKSk7CiB9CiAK
IGludCBSZW5kZXJCb3g6OnNjcm9sbEhlaWdodCgpIGNvbnN0CkBAIC0xMTc5LDcgKzExNzksNyBA
QCBMYXlvdXRVbml0IFJlbmRlckJveDo6c2hyaW5rTG9naWNhbFdpZHRoCiAgICAgTGF5b3V0VW5p
dCBsb2dpY2FsVG9wUG9zaXRpb24gPSBsb2dpY2FsVG9wKCk7CiAgICAgTGF5b3V0VW5pdCBhZGp1
c3RlZFBhZ2VPZmZzZXRGb3JDb250YWluaW5nQmxvY2sgPSBvZmZzZXRGcm9tTG9naWNhbFRvcE9m
Rmlyc3RQYWdlIC0gbG9naWNhbFRvcCgpOwogICAgIGlmIChyZWdpb24pIHsKLSAgICAgICAgTGF5
b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mUmVnaW9uID0gcmVnaW9uID8gcmVnaW9uLT5s
b2dpY2FsVG9wRm9yRmxvd1RocmVhZENvbnRlbnQoKSAtIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZG
aXJzdFBhZ2UgOiBaRVJPX0xBWU9VVF9VTklUOworICAgICAgICBMYXlvdXRVbml0IG9mZnNldEZy
b21Mb2dpY2FsVG9wT2ZSZWdpb24gPSByZWdpb24gPyByZWdpb24tPmxvZ2ljYWxUb3BGb3JGbG93
VGhyZWFkQ29udGVudCgpIC0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSA6IExheW91
dFVuaXQoKTsKICAgICAgICAgbG9naWNhbFRvcFBvc2l0aW9uID0gbWF4KGxvZ2ljYWxUb3BQb3Np
dGlvbiwgbG9naWNhbFRvcFBvc2l0aW9uICsgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZlJlZ2lvbik7
CiAgICAgICAgIGNvbnRhaW5pbmdCbG9ja1JlZ2lvbiA9IGNiLT5jbGFtcFRvU3RhcnRBbmRFbmRS
ZWdpb25zKHJlZ2lvbik7CiAgICAgfQpAQCAtMTI0MSw3ICsxMjQxLDcgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0F2YQogICAgIExheW91dFVuaXQgbG9naWNhbFRvcFBv
c2l0aW9uID0gbG9naWNhbFRvcCgpOwogICAgIExheW91dFVuaXQgYWRqdXN0ZWRQYWdlT2Zmc2V0
Rm9yQ29udGFpbmluZ0Jsb2NrID0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSAtIGxv
Z2ljYWxUb3AoKTsKICAgICBpZiAocmVnaW9uKSB7Ci0gICAgICAgIExheW91dFVuaXQgb2Zmc2V0
RnJvbUxvZ2ljYWxUb3BPZlJlZ2lvbiA9IHJlZ2lvbiA/IHJlZ2lvbi0+bG9naWNhbFRvcEZvckZs
b3dUaHJlYWRDb250ZW50KCkgLSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlIDogWkVS
T19MQVlPVVRfVU5JVDsKKyAgICAgICAgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9m
UmVnaW9uID0gcmVnaW9uID8gcmVnaW9uLT5sb2dpY2FsVG9wRm9yRmxvd1RocmVhZENvbnRlbnQo
KSAtIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UgOiBMYXlvdXRVbml0KCk7CiAgICAg
ICAgIGxvZ2ljYWxUb3BQb3NpdGlvbiA9IG1heChsb2dpY2FsVG9wUG9zaXRpb24sIGxvZ2ljYWxU
b3BQb3NpdGlvbiArIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZSZWdpb24pOwogICAgICAgICBjb250
YWluaW5nQmxvY2tSZWdpb24gPSBjYi0+Y2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhyZWdpb24p
OwogICAgIH0KQEAgLTM1MzMsNyArMzUzMyw3IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJCb3g6
OnBvc2l0aW9uRm9yUG8KICAgICB9CiAKICAgICAvLyBQYXNzIG9mZiB0byB0aGUgY2xvc2VzdCBj
aGlsZC4KLSAgICBMYXlvdXRVbml0IG1pbkRpc3QgPSBNQVhfTEFZT1VUX1VOSVQ7CisgICAgTGF5
b3V0VW5pdCBtaW5EaXN0ID0gTGF5b3V0VW5pdDo6bWF4KCk7CiAgICAgUmVuZGVyQm94KiBjbG9z
ZXN0UmVuZGVyZXIgPSAwOwogICAgIExheW91dFBvaW50IGFkanVzdGVkUG9pbnQgPSBwb2ludDsK
ICAgICBpZiAoaXNUYWJsZVJvdygpKQpAQCAtMzU0OSw5ICszNTQ5LDkgQEAgVmlzaWJsZVBvc2l0
aW9uIFJlbmRlckJveDo6cG9zaXRpb25Gb3JQbwogICAgICAgICAKICAgICAgICAgUmVuZGVyQm94
KiByZW5kZXJlciA9IHRvUmVuZGVyQm94KHJlbmRlck9iamVjdCk7CiAKLSAgICAgICAgTGF5b3V0
VW5pdCB0b3AgPSByZW5kZXJlci0+Ym9yZGVyVG9wKCkgKyByZW5kZXJlci0+cGFkZGluZ1RvcCgp
ICsgKGlzVGFibGVSb3coKSA/IFpFUk9fTEFZT1VUX1VOSVQgOiByZW5kZXJlci0+eSgpKTsKKyAg
ICAgICAgTGF5b3V0VW5pdCB0b3AgPSByZW5kZXJlci0+Ym9yZGVyVG9wKCkgKyByZW5kZXJlci0+
cGFkZGluZ1RvcCgpICsgKGlzVGFibGVSb3coKSA/IExheW91dFVuaXQoKSA6IHJlbmRlcmVyLT55
KCkpOwogICAgICAgICBMYXlvdXRVbml0IGJvdHRvbSA9IHRvcCArIHJlbmRlcmVyLT5jb250ZW50
SGVpZ2h0KCk7Ci0gICAgICAgIExheW91dFVuaXQgbGVmdCA9IHJlbmRlcmVyLT5ib3JkZXJMZWZ0
KCkgKyByZW5kZXJlci0+cGFkZGluZ0xlZnQoKSArIChpc1RhYmxlUm93KCkgPyBaRVJPX0xBWU9V
VF9VTklUIDogcmVuZGVyZXItPngoKSk7CisgICAgICAgIExheW91dFVuaXQgbGVmdCA9IHJlbmRl
cmVyLT5ib3JkZXJMZWZ0KCkgKyByZW5kZXJlci0+cGFkZGluZ0xlZnQoKSArIChpc1RhYmxlUm93
KCkgPyBMYXlvdXRVbml0KCkgOiByZW5kZXJlci0+eCgpKTsKICAgICAgICAgTGF5b3V0VW5pdCBy
aWdodCA9IGxlZnQgKyByZW5kZXJlci0+Y29udGVudFdpZHRoKCk7CiAgICAgICAgIAogICAgICAg
ICBpZiAocG9pbnQueCgpIDw9IHJpZ2h0ICYmIHBvaW50LngoKSA+PSBsZWZ0ICYmIHBvaW50Lnko
KSA8PSB0b3AgJiYgcG9pbnQueSgpID49IGJvdHRvbSkgewpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guaAkocmV2aXNpb24gMTMzNzY0KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHB1Ymxp
YzoKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCkt
PmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyB3aWR0aCgpIDogaGVpZ2h0KCk7IH0KICAgICBM
YXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpID8gaGVpZ2h0KCkgOiB3aWR0aCgpOyB9CiAKLSAgICBMYXlvdXRV
bml0IGNvbnN0cmFpbkxvZ2ljYWxXaWR0aEluUmVnaW9uQnlNaW5NYXgoTGF5b3V0VW5pdCwgTGF5
b3V0VW5pdCwgUmVuZGVyQmxvY2sqLCBSZW5kZXJSZWdpb24qID0gMCwgTGF5b3V0VW5pdCBvZmZz
ZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlID0gWkVST19MQVlPVVRfVU5JVCkgY29uc3Q7Cisg
ICAgTGF5b3V0VW5pdCBjb25zdHJhaW5Mb2dpY2FsV2lkdGhJblJlZ2lvbkJ5TWluTWF4KExheW91
dFVuaXQsIExheW91dFVuaXQsIFJlbmRlckJsb2NrKiwgUmVuZGVyUmVnaW9uKiA9IDAsIExheW91
dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSA9IDApIGNvbnN0OwogICAgIExh
eW91dFVuaXQgY29uc3RyYWluTG9naWNhbEhlaWdodEJ5TWluTWF4KExheW91dFVuaXQpIGNvbnN0
OwogCiAgICAgaW50IHBpeGVsU25hcHBlZExvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBz
dHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gcGl4ZWxTbmFwcGVkSGVpZ2h0KCkg
OiBwaXhlbFNuYXBwZWRXaWR0aCgpOyB9CkBAIC0zNzUsNyArMzc1LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBjb21wdXRlTG9naWNhbEhlaWdodChMYXlvdXRVbml0IGxvZ2ljYWxIZWln
aHQsIExheW91dFVuaXQgbG9naWNhbFRvcCwgTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJikg
Y29uc3Q7CiAKICAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiByZW5kZXJCb3hSZWdpb25JbmZvKFJl
bmRlclJlZ2lvbiosIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSwg
UmVuZGVyQm94UmVnaW9uSW5mb0ZsYWdzID0gQ2FjaGVSZW5kZXJCb3hSZWdpb25JbmZvKSBjb25z
dDsKLSAgICB2b2lkIGNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvbihMb2dpY2FsRXh0ZW50Q29t
cHV0ZWRWYWx1ZXMmLCBSZW5kZXJSZWdpb24qID0gMCwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9n
aWNhbFRvcE9mRmlyc3RQYWdlID0gWkVST19MQVlPVVRfVU5JVCkgY29uc3Q7CisgICAgdm9pZCBj
b21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb24oTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJiwg
UmVuZGVyUmVnaW9uKiA9IDAsIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0
UGFnZSA9IDApIGNvbnN0OwogCiAgICAgYm9vbCBzdHJldGNoZXNUb1ZpZXdwb3J0KCkgY29uc3QK
ICAgICB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1Miw3ICs1
NTIsNyBAQCBpbnQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBpeGVsU25hcHBlZE9mCiAKIExheW91
dFVuaXQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVkQ1NTUGFkZGluZ1RvcCgpIGNvbnN0
CiB7Ci0gICAgTGF5b3V0VW5pdCB3ID0gWkVST19MQVlPVVRfVU5JVDsKKyAgICBMYXlvdXRVbml0
IHcgPSAwOwogICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSAwOwogICAgIExlbmd0aCBwYWRk
aW5nID0gc3R5bGUoKS0+cGFkZGluZ1RvcCgpOwogICAgIGlmIChwYWRkaW5nLmlzUGVyY2VudCgp
KQpAQCAtNTY0LDcgKzU2NCw3IEBAIExheW91dFVuaXQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNv
bXB1dGUKIAogTGF5b3V0VW5pdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0ZWRDU1NQYWRk
aW5nQm90dG9tKCkgY29uc3QKIHsKLSAgICBMYXlvdXRVbml0IHcgPSBaRVJPX0xBWU9VVF9VTklU
OworICAgIExheW91dFVuaXQgdyA9IDA7CiAgICAgUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IDA7
CiAgICAgTGVuZ3RoIHBhZGRpbmcgPSBzdHlsZSgpLT5wYWRkaW5nQm90dG9tKCk7CiAgICAgaWYg
KHBhZGRpbmcuaXNQZXJjZW50KCkpCkBAIC01NzYsNyArNTc2LDcgQEAgTGF5b3V0VW5pdCBSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0ZQogCiBMYXlvdXRVbml0IFJlbmRlckJveE1vZGVsT2Jq
ZWN0Ojpjb21wdXRlZENTU1BhZGRpbmdMZWZ0KCkgY29uc3QKIHsKLSAgICBMYXlvdXRVbml0IHcg
PSBaRVJPX0xBWU9VVF9VTklUOworICAgIExheW91dFVuaXQgdyA9IDA7CiAgICAgUmVuZGVyVmll
dyogcmVuZGVyVmlldyA9IDA7CiAgICAgTGVuZ3RoIHBhZGRpbmcgPSBzdHlsZSgpLT5wYWRkaW5n
TGVmdCgpOwogICAgIGlmIChwYWRkaW5nLmlzUGVyY2VudCgpKQpAQCAtNTg4LDcgKzU4OCw3IEBA
IExheW91dFVuaXQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGUKIAogTGF5b3V0VW5pdCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0ZWRDU1NQYWRkaW5nUmlnaHQoKSBjb25zdAogewot
ICAgIExheW91dFVuaXQgdyA9IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgTGF5b3V0VW5pdCB3ID0g
MDsKICAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gMDsKICAgICBMZW5ndGggcGFkZGluZyA9
IHN0eWxlKCktPnBhZGRpbmdSaWdodCgpOwogICAgIGlmIChwYWRkaW5nLmlzUGVyY2VudCgpKQpA
QCAtNjAwLDcgKzYwMCw3IEBAIExheW91dFVuaXQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1
dGUKIAogTGF5b3V0VW5pdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0ZWRDU1NQYWRkaW5n
QmVmb3JlKCkgY29uc3QKIHsKLSAgICBMYXlvdXRVbml0IHcgPSBaRVJPX0xBWU9VVF9VTklUOwor
ICAgIExheW91dFVuaXQgdyA9IDA7CiAgICAgUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IDA7CiAg
ICAgTGVuZ3RoIHBhZGRpbmcgPSBzdHlsZSgpLT5wYWRkaW5nQmVmb3JlKCk7CiAgICAgaWYgKHBh
ZGRpbmcuaXNQZXJjZW50KCkpCkBAIC02MTIsNyArNjEyLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJC
b3hNb2RlbE9iamVjdDo6Y29tcHV0ZQogCiBMYXlvdXRVbml0IFJlbmRlckJveE1vZGVsT2JqZWN0
Ojpjb21wdXRlZENTU1BhZGRpbmdBZnRlcigpIGNvbnN0CiB7Ci0gICAgTGF5b3V0VW5pdCB3ID0g
WkVST19MQVlPVVRfVU5JVDsKKyAgICBMYXlvdXRVbml0IHcgPSAwOwogICAgIFJlbmRlclZpZXcq
IHJlbmRlclZpZXcgPSAwOwogICAgIExlbmd0aCBwYWRkaW5nID0gc3R5bGUoKS0+cGFkZGluZ0Fm
dGVyKCk7CiAgICAgaWYgKHBhZGRpbmcuaXNQZXJjZW50KCkpCkBAIC02MjQsNyArNjI0LDcgQEAg
TGF5b3V0VW5pdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0ZQogCiBMYXlvdXRVbml0IFJl
bmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlZENTU1BhZGRpbmdTdGFydCgpIGNvbnN0CiB7Ci0g
ICAgTGF5b3V0VW5pdCB3ID0gWkVST19MQVlPVVRfVU5JVDsKKyAgICBMYXlvdXRVbml0IHcgPSAw
OwogICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSAwOwogICAgIExlbmd0aCBwYWRkaW5nID0g
c3R5bGUoKS0+cGFkZGluZ1N0YXJ0KCk7CiAgICAgaWYgKHBhZGRpbmcuaXNQZXJjZW50KCkpCkBA
IC02MzYsNyArNjM2LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0
ZQogCiBMYXlvdXRVbml0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlZENTU1BhZGRpbmdF
bmQoKSBjb25zdAogewotICAgIExheW91dFVuaXQgdyA9IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAg
TGF5b3V0VW5pdCB3ID0gMDsKICAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gMDsKICAgICBM
ZW5ndGggcGFkZGluZyA9IHN0eWxlKCktPnBhZGRpbmdFbmQoKTsKICAgICBpZiAocGFkZGluZy5p
c1BlcmNlbnQoKSkKQEAgLTgwMCw4ICs4MDAsOCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0
OjpwYWludEZpbGxMYXllCiAgICAgCiAgICAgaW50IGJMZWZ0ID0gaW5jbHVkZUxlZnRFZGdlID8g
Ym9yZGVyTGVmdCgpIDogMDsKICAgICBpbnQgYlJpZ2h0ID0gaW5jbHVkZVJpZ2h0RWRnZSA/IGJv
cmRlclJpZ2h0KCkgOiAwOwotICAgIExheW91dFVuaXQgcExlZnQgPSBpbmNsdWRlTGVmdEVkZ2Ug
PyBwYWRkaW5nTGVmdCgpIDogWkVST19MQVlPVVRfVU5JVDsKLSAgICBMYXlvdXRVbml0IHBSaWdo
dCA9IGluY2x1ZGVSaWdodEVkZ2UgPyBwYWRkaW5nUmlnaHQoKSA6IFpFUk9fTEFZT1VUX1VOSVQ7
CisgICAgTGF5b3V0VW5pdCBwTGVmdCA9IGluY2x1ZGVMZWZ0RWRnZSA/IHBhZGRpbmdMZWZ0KCkg
OiBMYXlvdXRVbml0KCk7CisgICAgTGF5b3V0VW5pdCBwUmlnaHQgPSBpbmNsdWRlUmlnaHRFZGdl
ID8gcGFkZGluZ1JpZ2h0KCkgOiBMYXlvdXRVbml0KCk7CiAKICAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIGNsaXBXaXRoU2Nyb2xsaW5nU3RhdGVTYXZlcigqY29udGV4dCwgY2xpcHBlZFdp
dGhMb2NhbFNjcm9sbGluZyk7CiAgICAgTGF5b3V0UmVjdCBzY3JvbGxlZFBhaW50UmVjdCA9IHJl
Y3Q7CkBAIC04MjUsMTAgKzgyNSwxMCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWlu
dEZpbGxMYXllCiAgICAgICAgIC8vIENsaXAgdG8gdGhlIHBhZGRpbmcgb3IgY29udGVudCBib3hl
cyBhcyBuZWNlc3NhcnkuCiAgICAgICAgIGlmICghY2xpcFRvQm9yZGVyUmFkaXVzKSB7CiAgICAg
ICAgICAgICBib29sIGluY2x1ZGVQYWRkaW5nID0gYmdMYXllci0+Y2xpcCgpID09IENvbnRlbnRG
aWxsQm94OwotICAgICAgICAgICAgTGF5b3V0UmVjdCBjbGlwUmVjdCA9IExheW91dFJlY3Qoc2Ny
b2xsZWRQYWludFJlY3QueCgpICsgYkxlZnQgKyAoaW5jbHVkZVBhZGRpbmcgPyBwTGVmdCA6IFpF
Uk9fTEFZT1VUX1VOSVQpLAotICAgICAgICAgICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LnkoKSAr
IGJvcmRlclRvcCgpICsgKGluY2x1ZGVQYWRkaW5nID8gcGFkZGluZ1RvcCgpIDogWkVST19MQVlP
VVRfVU5JVCksCi0gICAgICAgICAgICAgICAgc2Nyb2xsZWRQYWludFJlY3Qud2lkdGgoKSAtIGJM
ZWZ0IC0gYlJpZ2h0IC0gKGluY2x1ZGVQYWRkaW5nID8gcExlZnQgKyBwUmlnaHQgOiBaRVJPX0xB
WU9VVF9VTklUKSwKLSAgICAgICAgICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC5oZWlnaHQoKSAt
IGJvcmRlclRvcCgpIC0gYm9yZGVyQm90dG9tKCkgLSAoaW5jbHVkZVBhZGRpbmcgPyBwYWRkaW5n
VG9wKCkgKyBwYWRkaW5nQm90dG9tKCkgOiBaRVJPX0xBWU9VVF9VTklUKSk7CisgICAgICAgICAg
ICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0gTGF5b3V0UmVjdChzY3JvbGxlZFBhaW50UmVjdC54KCkg
KyBiTGVmdCArIChpbmNsdWRlUGFkZGluZyA/IHBMZWZ0IDogTGF5b3V0VW5pdCgpKSwKKyAgICAg
ICAgICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC55KCkgKyBib3JkZXJUb3AoKSArIChpbmNsdWRl
UGFkZGluZyA/IHBhZGRpbmdUb3AoKSA6IExheW91dFVuaXQoKSksCisgICAgICAgICAgICAgICAg
c2Nyb2xsZWRQYWludFJlY3Qud2lkdGgoKSAtIGJMZWZ0IC0gYlJpZ2h0IC0gKGluY2x1ZGVQYWRk
aW5nID8gcExlZnQgKyBwUmlnaHQgOiBMYXlvdXRVbml0KCkpLAorICAgICAgICAgICAgICAgIHNj
cm9sbGVkUGFpbnRSZWN0LmhlaWdodCgpIC0gYm9yZGVyVG9wKCkgLSBib3JkZXJCb3R0b20oKSAt
IChpbmNsdWRlUGFkZGluZyA/IHBhZGRpbmdUb3AoKSArIHBhZGRpbmdCb3R0b20oKSA6IExheW91
dFVuaXQoKSkpOwogICAgICAgICAgICAgYmFja2dyb3VuZENsaXBTdGF0ZVNhdmVyLnNhdmUoKTsK
ICAgICAgICAgICAgIGNvbnRleHQtPmNsaXAoY2xpcFJlY3QpOwogICAgICAgICB9CkBAIC0yNzI5
LDcgKzI3MjksNyBAQCBMYXlvdXRSZWN0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpsb2NhbENhCiAg
ICAgICAgICAgICB4IC09IHRleHRJbmRlbnRPZmZzZXQ7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
LSAgICB4ID0gbWluKHgsIG1heChtYXhYIC0gY2FyZXRXaWR0aCwgWkVST19MQVlPVVRfVU5JVCkp
OworICAgIHggPSBtaW4oeCwgbWF4PExheW91dFVuaXQ+KG1heFggLSBjYXJldFdpZHRoLCAwKSk7
CiAKICAgICBMYXlvdXRVbml0IHkgPSBwYWRkaW5nVG9wKCkgKyBib3JkZXJUb3AoKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgJ
KHJldmlzaW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAjaWZuZGVmIFJl
bmRlckJveE1vZGVsT2JqZWN0X2gKICNkZWZpbmUgUmVuZGVyQm94TW9kZWxPYmplY3RfaAogCi0j
aW5jbHVkZSAiTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVj
dC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyTW9kZWxPYmplY3QuaCIKICNpbmNsdWRlICJTaGFk
b3dEYXRhLmgiCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNh
dGVkRmxleGlibGVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwCShyZXZpc2lvbiAxMzM3NjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTMyLDcgKzUzMiw3IEBAIHZvaWQgUmVuZGVyRGVwcmVjYXRlZEZs
ZXhpYmxlQm94OjpsYXlvdXQKICAgICAgICAgICAgICAgICAgICAgZm9yIChSZW5kZXJCb3gqIGNo
aWxkID0gaXRlcmF0b3IuZmlyc3QoKTsgY2hpbGQ7IGNoaWxkID0gaXRlcmF0b3IubmV4dCgpKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGFsbG93ZWRGbGV4ID0gYWxsb3dl
ZENoaWxkRmxleChjaGlsZCwgZXhwYW5kaW5nLCBpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChhbGxvd2VkRmxleCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVu
aXQgcHJvamVjdGVkRmxleCA9IChhbGxvd2VkRmxleCA9PSBNQVhfTEFZT1VUX1VOSVQpID8gYWxs
b3dlZEZsZXggOiBMYXlvdXRVbml0KGFsbG93ZWRGbGV4ICogKHRvdGFsRmxleCAvIGNoaWxkLT5z
dHlsZSgpLT5ib3hGbGV4KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRV
bml0IHByb2plY3RlZEZsZXggPSAoYWxsb3dlZEZsZXggPT0gTGF5b3V0VW5pdDo6bWF4KCkpID8g
YWxsb3dlZEZsZXggOiBMYXlvdXRVbml0KGFsbG93ZWRGbGV4ICogKHRvdGFsRmxleCAvIGNoaWxk
LT5zdHlsZSgpLT5ib3hGbGV4KCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFj
ZUF2YWlsYWJsZVRoaXNQYXNzID0gZXhwYW5kaW5nID8gbWluKHNwYWNlQXZhaWxhYmxlVGhpc1Bh
c3MsIHByb2plY3RlZEZsZXgpIDogbWF4KHNwYWNlQXZhaWxhYmxlVGhpc1Bhc3MsIHByb2plY3Rl
ZEZsZXgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9
CkBAIC03ODYsNyArNzg2LDcgQEAgdm9pZCBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6Omxh
eW91dAogICAgICAgICAgICAgICAgICAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBpdGVyYXRv
ci5maXJzdCgpOyBjaGlsZDsgY2hpbGQgPSBpdGVyYXRvci5uZXh0KCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIExheW91dFVuaXQgYWxsb3dlZEZsZXggPSBhbGxvd2VkQ2hpbGRGbGV4KGNo
aWxkLCBleHBhbmRpbmcsIGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG93ZWRG
bGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBwcm9qZWN0ZWRG
bGV4ID0gKGFsbG93ZWRGbGV4ID09IE1BWF9MQVlPVVRfVU5JVCkgPyBhbGxvd2VkRmxleCA6IHN0
YXRpY19jYXN0PExheW91dFVuaXQ+KGFsbG93ZWRGbGV4ICogKHRvdGFsRmxleCAvIGNoaWxkLT5z
dHlsZSgpLT5ib3hGbGV4KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRV
bml0IHByb2plY3RlZEZsZXggPSAoYWxsb3dlZEZsZXggPT0gTGF5b3V0VW5pdDo6bWF4KCkpID8g
YWxsb3dlZEZsZXggOiBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PihhbGxvd2VkRmxleCAqICh0b3Rh
bEZsZXggLyBjaGlsZC0+c3R5bGUoKS0+Ym94RmxleCgpKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3BhY2VBdmFpbGFibGVUaGlzUGFzcyA9IGV4cGFuZGluZyA/IG1pbihzcGFjZUF2
YWlsYWJsZVRoaXNQYXNzLCBwcm9qZWN0ZWRGbGV4KSA6IG1heChzcGFjZUF2YWlsYWJsZVRoaXNQ
YXNzLCBwcm9qZWN0ZWRGbGV4KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgfQpAQCAtMTAzMiw3ICsxMDMyLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJEZXBy
ZWNhdGVkRmxleGlibGVCb3g6OgogICAgIGlmIChleHBhbmRpbmcpIHsKICAgICAgICAgaWYgKGlz
SG9yaXpvbnRhbCgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogRm9yIG5vdyBqdXN0IGhhbmRs
ZSBmaXhlZCB2YWx1ZXMuCi0gICAgICAgICAgICBMYXlvdXRVbml0IG1heFdpZHRoID0gTUFYX0xB
WU9VVF9VTklUOworICAgICAgICAgICAgTGF5b3V0VW5pdCBtYXhXaWR0aCA9IExheW91dFVuaXQ6
Om1heCgpOwogICAgICAgICAgICAgTGF5b3V0VW5pdCB3aWR0aCA9IGNvbnRlbnRXaWR0aEZvckNo
aWxkKGNoaWxkKTsKICAgICAgICAgICAgIGlmICghY2hpbGQtPnN0eWxlKCktPm1heFdpZHRoKCku
aXNVbmRlZmluZWQoKSAmJiBjaGlsZC0+c3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkpCiAg
ICAgICAgICAgICAgICAgbWF4V2lkdGggPSBjaGlsZC0+c3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1
ZSgpOwpAQCAtMTA0MCwxNiArMTA0MCwxNiBAQCBMYXlvdXRVbml0IFJlbmRlckRlcHJlY2F0ZWRG
bGV4aWJsZUJveDo6CiAgICAgICAgICAgICAgICAgbWF4V2lkdGggPSBjaGlsZC0+bWF4UHJlZmVy
cmVkTG9naWNhbFdpZHRoKCk7CiAgICAgICAgICAgICBlbHNlIGlmIChjaGlsZC0+c3R5bGUoKS0+
bWF4V2lkdGgoKS50eXBlKCkgPT0gTWluSW50cmluc2ljKQogICAgICAgICAgICAgICAgIG1heFdp
ZHRoID0gY2hpbGQtPm1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpOwotICAgICAgICAgICAgaWYg
KG1heFdpZHRoID09IE1BWF9MQVlPVVRfVU5JVCkKKyAgICAgICAgICAgIGlmIChtYXhXaWR0aCA9
PSBMYXlvdXRVbml0OjptYXgoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbWF4V2lkdGg7CiAg
ICAgICAgICAgICByZXR1cm4gbWF4PExheW91dFVuaXQ+KDAsIG1heFdpZHRoIC0gd2lkdGgpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gRklYTUU6IEZvciBub3cganVzdCBoYW5k
bGUgZml4ZWQgdmFsdWVzLgotICAgICAgICAgICAgTGF5b3V0VW5pdCBtYXhIZWlnaHQgPSBNQVhf
TEFZT1VUX1VOSVQ7CisgICAgICAgICAgICBMYXlvdXRVbml0IG1heEhlaWdodCA9IExheW91dFVu
aXQ6Om1heCgpOwogICAgICAgICAgICAgTGF5b3V0VW5pdCBoZWlnaHQgPSBjb250ZW50SGVpZ2h0
Rm9yQ2hpbGQoY2hpbGQpOwogICAgICAgICAgICAgaWYgKCFjaGlsZC0+c3R5bGUoKS0+bWF4SGVp
Z2h0KCkuaXNVbmRlZmluZWQoKSAmJiBjaGlsZC0+c3R5bGUoKS0+bWF4SGVpZ2h0KCkuaXNGaXhl
ZCgpKQogICAgICAgICAgICAgICAgIG1heEhlaWdodCA9IGNoaWxkLT5zdHlsZSgpLT5tYXhIZWln
aHQoKS52YWx1ZSgpOwotICAgICAgICAgICAgaWYgKG1heEhlaWdodCA9PSBNQVhfTEFZT1VUX1VO
SVQpCisgICAgICAgICAgICBpZiAobWF4SGVpZ2h0ID09IExheW91dFVuaXQ6Om1heCgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBtYXhIZWlnaHQ7CiAgICAgICAgICAgICByZXR1cm4gbWF4PExh
eW91dFVuaXQ+KDAsIG1heEhlaWdodCAtIGhlaWdodCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcAkocmV2aXNpb24gMTMzNzY0
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ5LDExICsxNDksMTEgQEAgdm9pZCBSZW5kZXJGaWVsZHNldDo6cGFpbnRC
b3hEZWNvcmF0aW9ucwogICAgIC8vIGNhc2VzIHRoZSBsZWdlbmQgaXMgZW1iZWRkZWQgaW4gdGhl
IHJpZ2h0IGFuZCBib3R0b20gYm9yZGVycyByZXNwZWN0aXZlbHkuCiAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3MjM2CiAgICAgaWYgKHN0eWxlKCktPmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgTGF5b3V0VW5pdCB5T2ZmID0gKGxl
Z2VuZC0+eSgpID4gMCkgPyBaRVJPX0xBWU9VVF9VTklUIDogKGxlZ2VuZC0+aGVpZ2h0KCkgLSBi
b3JkZXJUb3AoKSkgLyAyOworICAgICAgICBMYXlvdXRVbml0IHlPZmYgPSAobGVnZW5kLT55KCkg
PiAwKSA/IExheW91dFVuaXQoKSA6IChsZWdlbmQtPmhlaWdodCgpIC0gYm9yZGVyVG9wKCkpIC8g
MjsKICAgICAgICAgcGFpbnRSZWN0LnNldEhlaWdodChwYWludFJlY3QuaGVpZ2h0KCkgLSB5T2Zm
KTsKICAgICAgICAgcGFpbnRSZWN0LnNldFkocGFpbnRSZWN0LnkoKSArIHlPZmYpOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIExheW91dFVuaXQgeE9mZiA9IChsZWdlbmQtPngoKSA+IDApID8gWkVS
T19MQVlPVVRfVU5JVCA6IChsZWdlbmQtPndpZHRoKCkgLSBib3JkZXJMZWZ0KCkpIC8gMjsKKyAg
ICAgICAgTGF5b3V0VW5pdCB4T2ZmID0gKGxlZ2VuZC0+eCgpID4gMCkgPyBMYXlvdXRVbml0KCkg
OiAobGVnZW5kLT53aWR0aCgpIC0gYm9yZGVyTGVmdCgpKSAvIDI7CiAgICAgICAgIHBhaW50UmVj
dC5zZXRXaWR0aChwYWludFJlY3Qud2lkdGgoKSAtIHhPZmYpOwogICAgICAgICBwYWludFJlY3Qu
c2V0WChwYWludFJlY3QueCgpICsgeE9mZik7CiAgICAgfQpAQCAtMjAwLDExICsyMDAsMTEgQEAg
dm9pZCBSZW5kZXJGaWVsZHNldDo6cGFpbnRNYXNrKFBhaW50SW5mbwogICAgIC8vIGNhc2VzIHRo
ZSBsZWdlbmQgaXMgZW1iZWRkZWQgaW4gdGhlIHJpZ2h0IGFuZCBib3R0b20gYm9yZGVycyByZXNw
ZWN0aXZlbHkuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ3MjM2CiAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKLSAg
ICAgICAgTGF5b3V0VW5pdCB5T2ZmID0gKGxlZ2VuZC0+eSgpID4gMCkgPyBaRVJPX0xBWU9VVF9V
TklUIDogKGxlZ2VuZC0+aGVpZ2h0KCkgLSBib3JkZXJUb3AoKSkgLyAyOworICAgICAgICBMYXlv
dXRVbml0IHlPZmYgPSAobGVnZW5kLT55KCkgPiAwKSA/IExheW91dFVuaXQoKSA6IChsZWdlbmQt
PmhlaWdodCgpIC0gYm9yZGVyVG9wKCkpIC8gMjsKICAgICAgICAgcGFpbnRSZWN0LmV4cGFuZCgw
LCAteU9mZik7CiAgICAgICAgIHBhaW50UmVjdC5tb3ZlKDAsIHlPZmYpOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIExheW91dFVuaXQgeE9mZiA9IChsZWdlbmQtPngoKSA+IDApID8gWkVST19MQVlP
VVRfVU5JVCA6IChsZWdlbmQtPndpZHRoKCkgLSBib3JkZXJMZWZ0KCkpIC8gMjsKKyAgICAgICAg
TGF5b3V0VW5pdCB4T2ZmID0gKGxlZ2VuZC0+eCgpID4gMCkgPyBMYXlvdXRVbml0KCkgOiAobGVn
ZW5kLT53aWR0aCgpIC0gYm9yZGVyTGVmdCgpKSAvIDI7CiAgICAgICAgIHBhaW50UmVjdC5leHBh
bmQoLXhPZmYsIDApOwogICAgICAgICBwYWludFJlY3QubW92ZSh4T2ZmLCAwKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAJ
KHJldmlzaW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4
aWJsZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3MSw3ICszNzEsNyBAQCB2b2lkIFJlbmRl
ckZsZXhpYmxlQm94OjpwYWludENoaWxkcmVuKFBhCiAKIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6
OnJlcG9zaXRpb25Mb2dpY2FsSGVpZ2h0RGVwZW5kZW50RmxleEl0ZW1zKE9yZGVySXRlcmF0b3Im
IGl0ZXJhdG9yLCBXVEY6OlZlY3RvcjxMaW5lQ29udGV4dD4mIGxpbmVDb250ZXh0cywgTGF5b3V0
VW5pdCYgb2xkQ2xpZW50QWZ0ZXJFZGdlKQogewotICAgIExheW91dFVuaXQgY3Jvc3NBeGlzU3Rh
cnRFZGdlID0gbGluZUNvbnRleHRzLmlzRW1wdHkoKSA/IFpFUk9fTEFZT1VUX1VOSVQgOiBsaW5l
Q29udGV4dHNbMF0uY3Jvc3NBeGlzT2Zmc2V0OworICAgIExheW91dFVuaXQgY3Jvc3NBeGlzU3Rh
cnRFZGdlID0gbGluZUNvbnRleHRzLmlzRW1wdHkoKSA/IExheW91dFVuaXQoKSA6IGxpbmVDb250
ZXh0c1swXS5jcm9zc0F4aXNPZmZzZXQ7CiAgICAgYWxpZ25GbGV4TGluZXMoaXRlcmF0b3IsIGxp
bmVDb250ZXh0cyk7CiAKICAgICAvLyBJZiB3ZSBoYXZlIGEgc2luZ2xlIGxpbmUgZmxleGJveCwg
dGhlIGxpbmUgaGVpZ2h0IGlzIGFsbCB0aGUgYXZhaWxhYmxlIHNwYWNlLgpAQCAtODk0LDcgKzg5
NCw3IEBAIGJvb2wgUmVuZGVyRmxleGlibGVCb3g6OmNvbXB1dGVOZXh0RmxleEwKICAgICBpZiAo
IWl0ZXJhdG9yLmN1cnJlbnRDaGlsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBM
YXlvdXRVbml0IGxpbmVCcmVha0xlbmd0aCA9IG1haW5BeGlzQ29udGVudEV4dGVudChNQVhfTEFZ
T1VUX1VOSVQpOworICAgIExheW91dFVuaXQgbGluZUJyZWFrTGVuZ3RoID0gbWFpbkF4aXNDb250
ZW50RXh0ZW50KExheW91dFVuaXQ6Om1heCgpKTsKIAogICAgIGZvciAoUmVuZGVyQm94KiBjaGls
ZCA9IGl0ZXJhdG9yLmN1cnJlbnRDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBpdGVyYXRvci5uZXh0
KCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewpAQCAt
MTIzNCw3ICsxMjM0LDcgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6YWxpZ25DaGlsZHJlbihP
cgogCiAgICAgUmVuZGVyQm94KiBjaGlsZCA9IGl0ZXJhdG9yLmZpcnN0KCk7CiAgICAgZm9yIChz
aXplX3QgbGluZU51bWJlciA9IDA7IGxpbmVOdW1iZXIgPCBsaW5lQ29udGV4dHMuc2l6ZSgpOyAr
K2xpbmVOdW1iZXIpIHsKLSAgICAgICAgTGF5b3V0VW5pdCBtaW5NYXJnaW5BZnRlckJhc2VsaW5l
ID0gTUFYX0xBWU9VVF9VTklUOworICAgICAgICBMYXlvdXRVbml0IG1pbk1hcmdpbkFmdGVyQmFz
ZWxpbmUgPSBMYXlvdXRVbml0OjptYXgoKTsKICAgICAgICAgTGF5b3V0VW5pdCBsaW5lQ3Jvc3NB
eGlzRXh0ZW50ID0gbGluZUNvbnRleHRzW2xpbmVOdW1iZXJdLmNyb3NzQXhpc0V4dGVudDsKICAg
ICAgICAgTGF5b3V0VW5pdCBtYXhBc2NlbnQgPSBsaW5lQ29udGV4dHNbbGluZU51bWJlcl0ubWF4
QXNjZW50OwogCkBAIC0xMzE5LDcgKzEzMTksNyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94Ojph
cHBseVN0cmV0Y2hBbGlnCiAgICAgfSBlbHNlIGlmIChpc0NvbHVtbkZsb3coKSAmJiBjaGlsZC0+
c3R5bGUoKS0+bG9naWNhbFdpZHRoKCkuaXNBdXRvKCkpIHsKICAgICAgICAgLy8gRklYTUU6IElm
IHRoZSBjaGlsZCBkb2Vzbid0IGhhdmUgb3J0aG9nb25hbCBmbG93LCB0aGVuIGl0IGFscmVhZHkg
aGFzIGFuIG92ZXJyaWRlIHdpZHRoIHNldCwgc28gdXNlIGl0LgogICAgICAgICBpZiAoaGFzT3J0
aG9nb25hbEZsb3coY2hpbGQpKSB7Ci0gICAgICAgICAgICBMYXlvdXRVbml0IGNoaWxkV2lkdGgg
PSBzdGQ6Om1heChaRVJPX0xBWU9VVF9VTklULCBsaW5lQ3Jvc3NBeGlzRXh0ZW50IC0gY3Jvc3NB
eGlzTWFyZ2luRXh0ZW50Rm9yQ2hpbGQoY2hpbGQpKTsKKyAgICAgICAgICAgIExheW91dFVuaXQg
Y2hpbGRXaWR0aCA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KDAsIGxpbmVDcm9zc0F4aXNFeHRlbnQg
LSBjcm9zc0F4aXNNYXJnaW5FeHRlbnRGb3JDaGlsZChjaGlsZCkpOwogICAgICAgICAgICAgY2hp
bGRXaWR0aCA9IGNoaWxkLT5jb25zdHJhaW5Mb2dpY2FsV2lkdGhJblJlZ2lvbkJ5TWluTWF4KGNo
aWxkV2lkdGgsIGNoaWxkV2lkdGgsIHRoaXMpOwogCiAgICAgICAgICAgICBpZiAoY2hpbGRXaWR0
aCAhPSBjaGlsZC0+bG9naWNhbFdpZHRoKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAJKHJldmlzaW9uIDEzMzc2NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjAwLDcgKzIwMCw3IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6dXBkYXRlTG9naWNhbFdp
ZHQKICAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSAqaXRlcjsKICAgICAgICAgTGF5b3V0
VW5pdCByZWdpb25Mb2dpY2FsV2lkdGggPSByZWdpb24tPnBhZ2VMb2dpY2FsV2lkdGgoKTsKICAg
ICAgICAgaWYgKHJlZ2lvbkxvZ2ljYWxXaWR0aCAhPSBsb2dpY2FsV2lkdGgpIHsKLSAgICAgICAg
ICAgIExheW91dFVuaXQgbG9naWNhbExlZnQgPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIg
PyBaRVJPX0xBWU9VVF9VTklUIDogbG9naWNhbFdpZHRoIC0gcmVnaW9uTG9naWNhbFdpZHRoOwor
ICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCA9IHN0eWxlKCktPmRpcmVjdGlvbigp
ID09IExUUiA/IExheW91dFVuaXQoKSA6IGxvZ2ljYWxXaWR0aCAtIHJlZ2lvbkxvZ2ljYWxXaWR0
aDsKICAgICAgICAgICAgIHJlZ2lvbi0+c2V0UmVuZGVyQm94UmVnaW9uSW5mbyh0aGlzLCBsb2dp
Y2FsTGVmdCwgcmVnaW9uTG9naWNhbFdpZHRoLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CkBA
IC0zMjYsNyArMzI2LDcgQEAgUmVuZGVyUmVnaW9uKiBSZW5kZXJGbG93VGhyZWFkOjpyZWdpb25B
dAogICAgIC8vIHRoZSBsYXN0IHZhbGlkIHJlZ2lvbi4gSXQgaXMgc2ltaWxhciB0byBhdXRvIGV4
dGVuZGluZyB0aGUgc2l6ZSBvZiB0aGUgbGFzdCByZWdpb24uIAogICAgIFJlbmRlclJlZ2lvbiog
bGFzdFZhbGlkUmVnaW9uID0gMDsKIAotICAgIExheW91dFVuaXQgYWNjdW11bGF0ZWRMb2dpY2Fs
SGVpZ2h0ID0gWkVST19MQVlPVVRfVU5JVDsKKyAgICBMYXlvdXRVbml0IGFjY3VtdWxhdGVkTG9n
aWNhbEhlaWdodCA9IDA7CiAgICAgCiAgICAgLy8gRklYTUU6IFRoZSByZWdpb25zIGFyZSBhbHdh
eXMgaW4gb3JkZXIsIG9wdGltaXplIHRoaXMgc2VhcmNoLgogICAgIGZvciAoUmVuZGVyUmVnaW9u
TGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fcmVnaW9uTGlzdC5iZWdpbigpOyBpdGVyICE9
IG1fcmVnaW9uTGlzdC5lbmQoKTsgKytpdGVyKSB7CkBAIC0zNjIsNyArMzYyLDcgQEAgUmVuZGVy
UmVnaW9uKiBSZW5kZXJGbG93VGhyZWFkOjpyZWdpb25BdAogTGF5b3V0VW5pdCBSZW5kZXJGbG93
VGhyZWFkOjpwYWdlTG9naWNhbFRvcEZvck9mZnNldChMYXlvdXRVbml0IG9mZnNldCkgY29uc3QK
IHsKICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9IHJlZ2lvbkF0QmxvY2tPZmZzZXQob2Zmc2V0
KTsKLSAgICByZXR1cm4gcmVnaW9uID8gcmVnaW9uLT5wYWdlTG9naWNhbFRvcEZvck9mZnNldChv
ZmZzZXQpIDogWkVST19MQVlPVVRfVU5JVDsKKyAgICByZXR1cm4gcmVnaW9uID8gcmVnaW9uLT5w
YWdlTG9naWNhbFRvcEZvck9mZnNldChvZmZzZXQpIDogTGF5b3V0VW5pdCgpOwogfQogCiBMYXlv
dXRVbml0IFJlbmRlckZsb3dUaHJlYWQ6OnBhZ2VMb2dpY2FsV2lkdGhGb3JPZmZzZXQoTGF5b3V0
VW5pdCBvZmZzZXQpIGNvbnN0CkBAIC0zNzUsOSArMzc1LDkgQEAgTGF5b3V0VW5pdCBSZW5kZXJG
bG93VGhyZWFkOjpwYWdlTG9naWNhbAogewogICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gcmVn
aW9uQXRCbG9ja09mZnNldChvZmZzZXQpOwogICAgIGlmICghcmVnaW9uKQotICAgICAgICByZXR1
cm4gWkVST19MQVlPVVRfVU5JVDsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKHJlZ2lvbi0+
bmVlZHNPdmVycmlkZUxvZ2ljYWxDb250ZW50SGVpZ2h0Q29tcHV0YXRpb24oKSkKLSAgICAgICAg
cmV0dXJuIE1BWF9MQVlPVVRfVU5JVCAvIDI7CisgICAgICAgIHJldHVybiBMYXlvdXRVbml0Ojpt
YXgoKSAvIDI7CiAgICAgcmV0dXJuIHJlZ2lvbi0+cGFnZUxvZ2ljYWxIZWlnaHQoKTsKIH0KIApA
QCAtMzg1LDkgKzM4NSw5IEBAIExheW91dFVuaXQgUmVuZGVyRmxvd1RocmVhZDo6cGFnZVJlbWFp
bmkKIHsKICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9IHJlZ2lvbkF0QmxvY2tPZmZzZXQob2Zm
c2V0KTsKICAgICBpZiAoIXJlZ2lvbikKLSAgICAgICAgcmV0dXJuIFpFUk9fTEFZT1VUX1VOSVQ7
CisgICAgICAgIHJldHVybiAwOwogICAgIGlmIChyZWdpb24tPm5lZWRzT3ZlcnJpZGVMb2dpY2Fs
Q29udGVudEhlaWdodENvbXB1dGF0aW9uKCkpCi0gICAgICAgIHJldHVybiBNQVhfTEFZT1VUX1VO
SVQgLyAyOworICAgICAgICByZXR1cm4gTGF5b3V0VW5pdDo6bWF4KCkgLyAyOwogCiAgICAgTGF5
b3V0VW5pdCBwYWdlTG9naWNhbFRvcCA9IHJlZ2lvbi0+cGFnZUxvZ2ljYWxUb3BGb3JPZmZzZXQo
b2Zmc2V0KTsKICAgICBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gcmVnaW9uLT5wYWdl
TG9naWNhbEhlaWdodCgpOwpAQCAtNDg2LDcgKzQ4Niw3IEBAIExheW91dFVuaXQgUmVuZGVyRmxv
d1RocmVhZDo6Y29udGVudExvZ2kKIHsKICAgICBSZW5kZXJSZWdpb24qIGZpcnN0VmFsaWRSZWdp
b25JbkZsb3cgPSBmaXJzdFJlZ2lvbigpOwogICAgIGlmICghZmlyc3RWYWxpZFJlZ2lvbkluRmxv
dykKLSAgICAgICAgcmV0dXJuIFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAgIHJldHVybiAwOwog
ICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gZmlyc3RWYWxpZFJlZ2lvbklu
Rmxvdy0+Y29udGVudFdpZHRoKCkgOiBmaXJzdFZhbGlkUmVnaW9uSW5GbG93LT5jb250ZW50SGVp
Z2h0KCk7CiB9CiAKQEAgLTQ5NCw3ICs0OTQsNyBAQCBMYXlvdXRVbml0IFJlbmRlckZsb3dUaHJl
YWQ6OmNvbnRlbnRMb2dpCiB7CiAgICAgUmVuZGVyUmVnaW9uKiBmaXJzdFZhbGlkUmVnaW9uSW5G
bG93ID0gZmlyc3RSZWdpb24oKTsKICAgICBpZiAoIWZpcnN0VmFsaWRSZWdpb25JbkZsb3cpCi0g
ICAgICAgIHJldHVybiBaRVJPX0xBWU9VVF9VTklUOworICAgICAgICByZXR1cm4gMDsKICAgICBy
ZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGZpcnN0VmFsaWRSZWdpb25JbkZsb3ct
PmNvbnRlbnRIZWlnaHQoKSA6IGZpcnN0VmFsaWRSZWdpb25JbkZsb3ctPmNvbnRlbnRXaWR0aCgp
OwogfQogCkBAIC01MDIsNyArNTAyLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJGbG93VGhyZWFkOjpj
b250ZW50TG9naQogewogICAgIFJlbmRlclJlZ2lvbiogZmlyc3RWYWxpZFJlZ2lvbkluRmxvdyA9
IGZpcnN0UmVnaW9uKCk7CiAgICAgaWYgKCFmaXJzdFZhbGlkUmVnaW9uSW5GbG93KQotICAgICAg
ICByZXR1cm4gWkVST19MQVlPVVRfVU5JVDsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJu
IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmaXJzdFZhbGlkUmVnaW9uSW5GbG93LT5mbG93
VGhyZWFkUG9ydGlvblJlY3QoKS54KCkgOiBmaXJzdFZhbGlkUmVnaW9uSW5GbG93LT5mbG93VGhy
ZWFkUG9ydGlvblJlY3QoKS55KCk7CiB9CiAKQEAgLTc4Niw3ICs3ODYsNyBAQCB2b2lkIFJlbmRl
ckZsb3dUaHJlYWQ6OnVwZGF0ZVJlZ2lvbnNGbG93CiAgICAgICAgIExheW91dFVuaXQgcmVnaW9u
TG9naWNhbFdpZHRoID0gcmVnaW9uLT5wYWdlTG9naWNhbFdpZHRoKCk7CiAgICAgICAgIExheW91
dFVuaXQgcmVnaW9uTG9naWNhbEhlaWdodCA9IHJlZ2lvbi0+bG9naWNhbEhlaWdodE9mQWxsRmxv
d1RocmVhZENvbnRlbnQoKTsKIAotICAgICAgICBMYXlvdXRSZWN0IHJlZ2lvblJlY3Qoc3R5bGUo
KS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gWkVST19MQVlPVVRfVU5JVCA6IGxvZ2ljYWxXaWR0aCgp
IC0gcmVnaW9uTG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0LCByZWdpb25Mb2dpY2FsV2lkdGgs
IHJlZ2lvbkxvZ2ljYWxIZWlnaHQpOworICAgICAgICBMYXlvdXRSZWN0IHJlZ2lvblJlY3Qoc3R5
bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gTGF5b3V0VW5pdCgpIDogbG9naWNhbFdpZHRoKCkg
LSByZWdpb25Mb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQsIHJlZ2lvbkxvZ2ljYWxXaWR0aCwg
cmVnaW9uTG9naWNhbEhlaWdodCk7CiAKICAgICAgICAgLy8gV2hlbiBhIGZsb3cgdGhyZWFkIGhh
cyBtb3JlIHRoYW4gb25lIGF1dG8gbG9naWNhbCBoZWlnaHQgcmVnaW9uLAogICAgICAgICAvLyB3
ZSBoYXZlIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSBvdmVycmlkZSBsb2dpY2FsIGNvbnRlbnQg
aGVpZ2h0IHZhbHVlLApAQCAtODgyLDcgKzg4Miw3IEBAIGJvb2wgUmVuZGVyRmxvd1RocmVhZDo6
YWRkRm9yY2VkUmVnaW9uQnIKICAgICAgICAgdXBkYXRlUmVnaW9uc0Zsb3dUaHJlYWRQb3J0aW9u
UmVjdCgpOwogCiAgICAgaWYgKG9mZnNldEJyZWFrQWRqdXN0bWVudCkKLSAgICAgICAgKm9mZnNl
dEJyZWFrQWRqdXN0bWVudCA9IG1heDxMYXlvdXRVbml0PihaRVJPX0xBWU9VVF9VTklULCBjdXJy
ZW50UmVnaW9uT2Zmc2V0SW5GbG93VGhyZWFkIC0gb2Zmc2V0QnJlYWtJbkZsb3dUaHJlYWQpOwor
ICAgICAgICAqb2Zmc2V0QnJlYWtBZGp1c3RtZW50ID0gbWF4PExheW91dFVuaXQ+KDAsIGN1cnJl
bnRSZWdpb25PZmZzZXRJbkZsb3dUaHJlYWQgLSBvZmZzZXRCcmVha0luRmxvd1RocmVhZCk7CiAK
ICAgICByZXR1cm4gb3ZlcnJpZGVMb2dpY2FsQ29udGVudEhlaWdodENvbXB1dGVkOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdlb21ldHJ5TWFwLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdlb21ldHJ5TWFwLmgJKHJldmlz
aW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHZW9tZXRyeU1h
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiRmxvYXRQb2lu
dC5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNs
dWRlICJMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJMYXlvdXRTaXplLmgi
CiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlUmVz
b3VyY2UuaAkocmV2aXNpb24gMTMzNzY0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckltYWdlUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2lu
Y2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIK
ICNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5o
IgorI2luY2x1ZGUgIkxheW91dFNpemUuaCIKICNpbmNsdWRlICJTdHlsZUltYWdlLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bmxpbmUuY3BwCShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQ5LDggKzk0OSw4IEBAIExheW91
dFJlY3QgUmVuZGVySW5saW5lOjpsaW5lc1Zpc3VhbE92ZXIKICAgICAgICAgcmV0dXJuIExheW91
dFJlY3QoKTsKIAogICAgIC8vIFJldHVybiB0aGUgd2lkdGggb2YgdGhlIG1pbmltYWwgbGVmdCBz
aWRlIGFuZCB0aGUgbWF4aW1hbCByaWdodCBzaWRlLgotICAgIExheW91dFVuaXQgbG9naWNhbExl
ZnRTaWRlID0gTUFYX0xBWU9VVF9VTklUOwotICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0U2lk
ZSA9IE1JTl9MQVlPVVRfVU5JVDsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0U2lkZSA9IExh
eW91dFVuaXQ6Om1heCgpOworICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0U2lkZSA9IExheW91
dFVuaXQ6Om1pbigpOwogICAgIGZvciAoSW5saW5lRmxvd0JveCogY3VyciA9IGZpcnN0TGluZUJv
eCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkgewogICAgICAgICBsb2dpY2Fs
TGVmdFNpZGUgPSBtaW4obG9naWNhbExlZnRTaWRlLCBjdXJyLT5sb2dpY2FsTGVmdFZpc3VhbE92
ZXJmbG93KCkpOwogICAgICAgICBsb2dpY2FsUmlnaHRTaWRlID0gbWF4KGxvZ2ljYWxSaWdodFNp
ZGUsIGN1cnItPmxvZ2ljYWxSaWdodFZpc3VhbE92ZXJmbG93KCkpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MDU3LDcgKzIwNTcsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXNpemUoY29uc3QgUGxhdGZvcm1N
CiAgICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5TWFyZ2luTGVmdCwgU3RyaW5nOjpudW1iZXIocmVuZGVyZXItPm1hcmdpbkxlZnQoKSAv
IHpvb21GYWN0b3IpICsgInB4IiwgZmFsc2UpOwogICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+
c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCBTdHJpbmc6Om51
bWJlcihyZW5kZXJlci0+bWFyZ2luUmlnaHQoKSAvIHpvb21GYWN0b3IpICsgInB4IiwgZmFsc2Up
OwogICAgICAgICB9Ci0gICAgICAgIExheW91dFVuaXQgYmFzZVdpZHRoID0gcmVuZGVyZXItPndp
ZHRoKCkgLSAoaXNCb3hTaXppbmdCb3JkZXIgPyBaRVJPX0xBWU9VVF9VTklUIDogcmVuZGVyZXIt
PmJvcmRlckFuZFBhZGRpbmdXaWR0aCgpKTsKKyAgICAgICAgTGF5b3V0VW5pdCBiYXNlV2lkdGgg
PSByZW5kZXJlci0+d2lkdGgoKSAtIChpc0JveFNpemluZ0JvcmRlciA/IExheW91dFVuaXQoKSA6
IHJlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nV2lkdGgoKSk7CiAgICAgICAgIGJhc2VXaWR0aCA9
IGJhc2VXaWR0aCAvIHpvb21GYWN0b3I7CiAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGlu
ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgU3RyaW5nOjpudW1iZXIocm91bmRUb0lu
dChiYXNlV2lkdGggKyBkaWZmZXJlbmNlLndpZHRoKCkpKSArICJweCIsIGZhbHNlKTsKICAgICB9
CkBAIC0yMDY4LDcgKzIwNjgsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXNpemUoY29uc3QgUGxh
dGZvcm1NCiAgICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5TWFyZ2luVG9wLCBTdHJpbmc6Om51bWJlcihyZW5kZXJlci0+bWFyZ2luVG9w
KCkgLyB6b29tRmFjdG9yKSArICJweCIsIGZhbHNlKTsKICAgICAgICAgICAgIHN0eWxlZEVsZW1l
bnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b20sIFN0cmlu
Zzo6bnVtYmVyKHJlbmRlcmVyLT5tYXJnaW5Cb3R0b20oKSAvIHpvb21GYWN0b3IpICsgInB4Iiwg
ZmFsc2UpOwogICAgICAgICB9Ci0gICAgICAgIExheW91dFVuaXQgYmFzZUhlaWdodCA9IHJlbmRl
cmVyLT5oZWlnaHQoKSAtIChpc0JveFNpemluZ0JvcmRlciA/IFpFUk9fTEFZT1VUX1VOSVQgOiBy
ZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ0hlaWdodCgpKTsKKyAgICAgICAgTGF5b3V0VW5pdCBi
YXNlSGVpZ2h0ID0gcmVuZGVyZXItPmhlaWdodCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gTGF5
b3V0VW5pdCgpIDogcmVuZGVyZXItPmJvcmRlckFuZFBhZGRpbmdIZWlnaHQoKSk7CiAgICAgICAg
IGJhc2VIZWlnaHQgPSBiYXNlSGVpZ2h0IC8gem9vbUZhY3RvcjsKICAgICAgICAgc3R5bGVkRWxl
bWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgU3RyaW5nOjpu
dW1iZXIocm91bmRUb0ludChiYXNlSGVpZ2h0ICsgZGlmZmVyZW5jZS5oZWlnaHQoKSkpICsgInB4
IiwgZmFsc2UpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckZpbHRlckluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmgJKHJldmlzaW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlckluZm8uaAkod29ya2luZyBjb3B5KQpAQCAt
MzYsOCArMzYsNyBAQAogI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50LmgiCiAjZW5kaWYKICNp
bmNsdWRlICJGaWx0ZXJPcGVyYXRpb24uaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UmVj
dC5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RNYXJrZXIuY3BwCShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MDUs
NyArMTUwNSw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6dXBkYXRlTWFyZ2lucygpCiAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgTm9uZUxpc3RTdHlsZToKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
ICAgICAgICAgbWFyZ2luU3RhcnQgPSBtX3RleHQuaXNFbXB0eSgpID8gWkVST19MQVlPVVRfVU5J
VCA6IC1taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSAtIG9mZnNldCAvIDI7CisgICAgICAgICAg
ICAgICAgICAgICAgICBtYXJnaW5TdGFydCA9IG1fdGV4dC5pc0VtcHR5KCkgPyBMYXlvdXRVbml0
KCkgOiAtbWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCkgLSBvZmZzZXQgLyAyOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1hcmdpbkVuZCA9IC1tYXJnaW5T
dGFydCAtIG1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAkocmV2aXNpb24gMTMzNzY0KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjUsMTMgKzEyNSwxMyBAQCBpbnQgUmVuZGVyTWFycXVlZTo6Y29tcHV0ZVBvc2l0aW9uKEVNYXJx
CiAgICAgICAgIH0KICAgICAgICAgaWYgKGRpciA9PSBNUklHSFQpIHsKICAgICAgICAgICAgIGlm
IChzdG9wQXRDb250ZW50RWRnZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWF4KFpFUk9fTEFZ
T1VUX1VOSVQsIGx0ciA/IChjb250ZW50V2lkdGggLSBjbGllbnRXaWR0aCkgOiAoY2xpZW50V2lk
dGggLSBjb250ZW50V2lkdGgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF4PExheW91dFVu
aXQ+KDAsIGx0ciA/IChjb250ZW50V2lkdGggLSBjbGllbnRXaWR0aCkgOiAoY2xpZW50V2lkdGgg
LSBjb250ZW50V2lkdGgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1
cm4gbHRyID8gY29udGVudFdpZHRoIDogY2xpZW50V2lkdGg7CiAgICAgICAgIH0KICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICBpZiAoc3RvcEF0Q29udGVudEVkZ2UpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIG1pbihaRVJPX0xBWU9VVF9VTklULCBsdHIgPyAoY29udGVudFdpZHRoIC0gY2xp
ZW50V2lkdGgpIDogKGNsaWVudFdpZHRoIC0gY29udGVudFdpZHRoKSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1pbjxMYXlvdXRVbml0PigwLCBsdHIgPyAoY29udGVudFdpZHRoIC0gY2xpZW50
V2lkdGgpIDogKGNsaWVudFdpZHRoIC0gY29udGVudFdpZHRoKSk7CiAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGx0ciA/IC1jbGllbnRXaWR0aCA6IC1jb250ZW50V2lk
dGg7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51
TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51
TGlzdC5oCShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTWVudUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2lmbmRlZiBS
ZW5kZXJNZW51TGlzdF9oCiAjZGVmaW5lIFJlbmRlck1lbnVMaXN0X2gKIAotI2luY2x1ZGUgIkxh
eW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlBvcHVwTWVu
dS5oIgogI2luY2x1ZGUgIlBvcHVwTWVudUNsaWVudC5oIgogI2luY2x1ZGUgIlJlbmRlckRlcHJl
Y2F0ZWRGbGV4aWJsZUJveC5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck11bHRpQ29sdW1uQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmNwcAkocmV2aXNpb24gMTMzNzY0KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNyw4ICszNyw4IEBAIFJlbmRlck11bHRpQ29sdW1uQmxvY2s6OlJlbmRlck11
bHRpQ29sdW0KICAgICA6IFJlbmRlckJsb2NrKG5vZGUpCiAgICAgLCBtX2Zsb3dUaHJlYWQoMCkK
ICAgICAsIG1fY29sdW1uQ291bnQoMSkKLSAgICAsIG1fY29sdW1uV2lkdGgoWkVST19MQVlPVVRf
VU5JVCkKLSAgICAsIG1fY29sdW1uSGVpZ2h0KFpFUk9fTEFZT1VUX1VOSVQpCisgICAgLCBtX2Nv
bHVtbldpZHRoKDApCisgICAgLCBtX2NvbHVtbkhlaWdodCgwKQogewogfQogCkBAIC04MywxMyAr
ODMsMTMgQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjpjaGVja0ZvclBhZwogICAgIC8v
IFdlIGRvbid0IGFjdHVhbGx5IHVwZGF0ZSBhbnkgb2YgdGhlIHZhcmlhYmxlcy4gV2UganVzdCBz
dWJjbGFzc2VkIHRvIGFkanVzdCBvdXIgY29sdW1uIGhlaWdodC4KICAgICB1cGRhdGVMb2dpY2Fs
SGVpZ2h0KCk7CiAgICAgTGF5b3V0VW5pdCBuZXdDb250ZW50TG9naWNhbEhlaWdodCA9IGNvbnRl
bnRMb2dpY2FsSGVpZ2h0KCk7Ci0gICAgaWYgKG5ld0NvbnRlbnRMb2dpY2FsSGVpZ2h0ID4gWkVS
T19MQVlPVVRfVU5JVCkgeworICAgIGlmIChuZXdDb250ZW50TG9naWNhbEhlaWdodCA+IDApIHsK
ICAgICAgICAgLy8gVGhlIHJlZ2lvbnMgd2lsbCBiZSBpbnZhbGlkYXRlZCB3aGVuIHdlIGxheSB0
aGVtIG91dCBhbmQgdGhleSBjaGFuZ2Ugc2l6ZSB0bwogICAgICAgICAvLyB0aGUgbmV3IGNvbHVt
biBoZWlnaHQuCiAgICAgICAgIGlmIChjb2x1bW5IZWlnaHQoKSAhPSBuZXdDb250ZW50TG9naWNh
bEhlaWdodCkKICAgICAgICAgICAgIHNldENvbHVtbkhlaWdodChuZXdDb250ZW50TG9naWNhbEhl
aWdodCk7CiAgICAgfQotICAgIHNldExvZ2ljYWxIZWlnaHQoWkVST19MQVlPVVRfVU5JVCk7Cisg
ICAgc2V0TG9naWNhbEhlaWdodCgwKTsKIAogICAgIC8vIFNldCB1cCBvdXIgY29sdW1uIHNldHMu
CiAgICAgZW5zdXJlQ29sdW1uU2V0cygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck11bHRpQ29sdW1uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwCShyZXZpc2lvbiAxMzM3NjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSw4ICszOSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFJlbmRlck11bHRp
Q29sdW1uU2V0OjpSZW5kZXJNdWx0aUNvbHVtblNldChOb2RlKiBub2RlLCBSZW5kZXJGbG93VGhy
ZWFkKiBmbG93VGhyZWFkKQogICAgIDogUmVuZGVyUmVnaW9uU2V0KG5vZGUsIGZsb3dUaHJlYWQp
CiAgICAgLCBtX2NvbXB1dGVkQ29sdW1uQ291bnQoMSkKLSAgICAsIG1fY29tcHV0ZWRDb2x1bW5X
aWR0aChaRVJPX0xBWU9VVF9VTklUKQotICAgICwgbV9jb21wdXRlZENvbHVtbkhlaWdodChaRVJP
X0xBWU9VVF9VTklUKQorICAgICwgbV9jb21wdXRlZENvbHVtbldpZHRoKDApCisgICAgLCBtX2Nv
bXB1dGVkQ29sdW1uSGVpZ2h0KDApCiB7CiB9CiAKQEAgLTIyOCw5ICsyMjgsOSBAQCB2b2lkIFJl
bmRlck11bHRpQ29sdW1uU2V0OjpwYWludENvbHVtblJ1CiAgICAgYm9vbCBhbnRpYWxpYXMgPSBz
aG91bGRBbnRpYWxpYXNMaW5lcyhwYWludEluZm8uY29udGV4dCk7CiAKICAgICBib29sIGxlZnRU
b1JpZ2h0ID0gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwotICAgIExheW91dFVu
aXQgY3VyckxvZ2ljYWxMZWZ0T2Zmc2V0ID0gbGVmdFRvUmlnaHQgPyBaRVJPX0xBWU9VVF9VTklU
IDogY29udGVudExvZ2ljYWxXaWR0aCgpOworICAgIExheW91dFVuaXQgY3VyckxvZ2ljYWxMZWZ0
T2Zmc2V0ID0gbGVmdFRvUmlnaHQgPyBMYXlvdXRVbml0KCkgOiBjb250ZW50TG9naWNhbFdpZHRo
KCk7CiAgICAgTGF5b3V0VW5pdCBydWxlQWRkID0gYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxMZWZ0
KCk7Ci0gICAgTGF5b3V0VW5pdCBydWxlTG9naWNhbExlZnQgPSBsZWZ0VG9SaWdodCA/IFpFUk9f
TEFZT1VUX1VOSVQgOiBjb250ZW50TG9naWNhbFdpZHRoKCk7CisgICAgTGF5b3V0VW5pdCBydWxl
TG9naWNhbExlZnQgPSBsZWZ0VG9SaWdodCA/IExheW91dFVuaXQoKSA6IGNvbnRlbnRMb2dpY2Fs
V2lkdGgoKTsKICAgICBMYXlvdXRVbml0IGlubGluZURpcmVjdGlvblNpemUgPSBjb21wdXRlZENv
bHVtbldpZHRoKCk7CiAgICAgQm94U2lkZSBib3hTaWRlID0gaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKQogICAgICAgICA/IGxlZnRUb1JpZ2h0ID8gQlNMZWZ0IDogQlNSaWdodApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAJ
KHJldmlzaW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1l
ZEZsb3dUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzQsNyArNDM0LDcgQEAgc3RhdGlj
IGJvb2wgaXNDb250YWluZWRJbk5vZGVzKFZlY3RvcjxObwogCiBzdGF0aWMgYm9vbCBib3hJbnRl
cnNlY3RzUmVnaW9uKExheW91dFVuaXQgbG9naWNhbFRvcEZvckJveCwgTGF5b3V0VW5pdCBsb2dp
Y2FsQm90dG9tRm9yQm94LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3BGb3JSZWdpb24sIExheW91dFVu
aXQgbG9naWNhbEJvdHRvbUZvclJlZ2lvbikKIHsKLSAgICBib29sIHJlZ2lvbklzRW1wdHkgPSBs
b2dpY2FsQm90dG9tRm9yUmVnaW9uICE9IE1BWF9MQVlPVVRfVU5JVCAmJiBsb2dpY2FsVG9wRm9y
UmVnaW9uICE9IE1JTl9MQVlPVVRfVU5JVAorICAgIGJvb2wgcmVnaW9uSXNFbXB0eSA9IGxvZ2lj
YWxCb3R0b21Gb3JSZWdpb24gIT0gTGF5b3V0VW5pdDo6bWF4KCkgJiYgbG9naWNhbFRvcEZvclJl
Z2lvbiAhPSBMYXlvdXRVbml0OjptaW4oKQogICAgICAgICAmJiAobG9naWNhbEJvdHRvbUZvclJl
Z2lvbiAtIGxvZ2ljYWxUb3BGb3JSZWdpb24pIDw9IDA7CiAgICAgcmV0dXJuICAobG9naWNhbEJv
dHRvbUZvckJveCAtIGxvZ2ljYWxUb3BGb3JCb3gpID4gMAogICAgICAgICAmJiAhcmVnaW9uSXNF
bXB0eQpAQCAtNDQ4LDEzICs0NDgsMTMgQEAgdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6Omdl
dFJhbmdlcyhWZQogCiAgICAgLy8gZXh0ZW5kIHRoZSBmaXJzdCByZWdpb24gdG9wIHRvIGNvbnRh
aW4gZXZlcnl0aGluZyB1cCB0byBpdHMgbG9naWNhbCBoZWlnaHQKICAgICBpZiAocmVnaW9uLT5p
c0ZpcnN0UmVnaW9uKCkpCi0gICAgICAgIGxvZ2ljYWxUb3BGb3JSZWdpb24gPSBNSU5fTEFZT1VU
X1VOSVQ7CisgICAgICAgIGxvZ2ljYWxUb3BGb3JSZWdpb24gPSBMYXlvdXRVbml0OjptaW4oKTsK
ICAgICBlbHNlCiAgICAgICAgIGxvZ2ljYWxUb3BGb3JSZWdpb24gPSAgcmVnaW9uLT5sb2dpY2Fs
VG9wRm9yRmxvd1RocmVhZENvbnRlbnQoKTsKIAogICAgIC8vIGV4dGVuZCB0aGUgbGFzdCByZWdp
b24gdG8gY29udGFpbiBldmVyeXRoaW5nIGFib3ZlIGl0cyB5KCkKICAgICBpZiAocmVnaW9uLT5p
c0xhc3RSZWdpb24oKSkKLSAgICAgICAgbG9naWNhbEJvdHRvbUZvclJlZ2lvbiA9IE1BWF9MQVlP
VVRfVU5JVDsKKyAgICAgICAgbG9naWNhbEJvdHRvbUZvclJlZ2lvbiA9IExheW91dFVuaXQ6Om1h
eCgpOwogICAgIGVsc2UKICAgICAgICAgbG9naWNhbEJvdHRvbUZvclJlZ2lvbiA9IHJlZ2lvbi0+
bG9naWNhbEJvdHRvbUZvckZsb3dUaHJlYWRDb250ZW50KCk7CiAKQEAgLTQ5Niw4ICs0OTYsOCBA
QCB2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6Z2V0UmFuZ2VzKFZlCiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIExheW91dFVuaXQgb2Zmc2V0VG9wID0gcmVuZGVyZXItPmNvbnRhaW5p
bmdCbG9jaygpLT5vZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCk7Ci0gICAgICAgICAg
ICBjb25zdCBMYXlvdXRQb2ludCBsb2dpY2FsT2Zmc2V0RnJvbVRvcChpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gWkVST19MQVlPVVRfVU5JVCA6ICBvZmZzZXRUb3AsCi0gICAgICAgICAgICAg
ICAgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG9mZnNldFRvcCA6IFpFUk9fTEFZT1VUX1VO
SVQpOworICAgICAgICAgICAgY29uc3QgTGF5b3V0UG9pbnQgbG9naWNhbE9mZnNldEZyb21Ub3Ao
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IExheW91dFVuaXQoKSA6ICBvZmZzZXRUb3AsCisg
ICAgICAgICAgICAgICAgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG9mZnNldFRvcCA6IExh
eW91dFVuaXQoKSk7CiAKICAgICAgICAgICAgIGJvdW5kaW5nQm94Lm1vdmVCeShsb2dpY2FsT2Zm
c2V0RnJvbVRvcCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1MCw3ICsxNDUwLDcgQEAgYm9vbCBS
ZW5kZXJPYmplY3Q6OnJlcGFpbnRBZnRlckxheW91dElmTgogICAgICAgICBMYXlvdXRVbml0IHNo
YWRvd1JpZ2h0OwogICAgICAgICBzdHlsZSgpLT5nZXRCb3hTaGFkb3dIb3Jpem9udGFsRXh0ZW50
KHNoYWRvd0xlZnQsIHNoYWRvd1JpZ2h0KTsKICAgICAgICAgaW50IGJvcmRlclJpZ2h0ID0gaXNC
b3goKSA/IHRvUmVuZGVyQm94KHRoaXMpLT5ib3JkZXJSaWdodCgpIDogMDsKLSAgICAgICAgTGF5
b3V0VW5pdCBib3hXaWR0aCA9IGlzQm94KCkgPyB0b1JlbmRlckJveCh0aGlzKS0+d2lkdGgoKSA6
IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAgIExheW91dFVuaXQgYm94V2lkdGggPSBpc0JveCgp
ID8gdG9SZW5kZXJCb3godGhpcyktPndpZHRoKCkgOiBMYXlvdXRVbml0KCk7CiAgICAgICAgIExh
eW91dFVuaXQgbWluSW5zZXRSaWdodFNoYWRvd0V4dGVudCA9IG1pbjxMYXlvdXRVbml0PigtaW5z
ZXRTaGFkb3dFeHRlbnQucmlnaHQoKSwgbWluPExheW91dFVuaXQ+KG5ld0JvdW5kcy53aWR0aCgp
LCBvbGRCb3VuZHMud2lkdGgoKSkpOwogICAgICAgICBMYXlvdXRVbml0IGJvcmRlcldpZHRoID0g
bWF4PExheW91dFVuaXQ+KGJvcmRlclJpZ2h0LCBtYXg8TGF5b3V0VW5pdD4odmFsdWVGb3JMZW5n
dGgoc3R5bGUoKS0+Ym9yZGVyVG9wUmlnaHRSYWRpdXMoKS53aWR0aCgpLCBib3hXaWR0aCwgdiks
IHZhbHVlRm9yTGVuZ3RoKHN0eWxlKCktPmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCkud2lkdGgo
KSwgYm94V2lkdGgsIHYpKSk7CiAgICAgICAgIExheW91dFVuaXQgZGVjb3JhdGlvbnNXaWR0aCA9
IG1heDxMYXlvdXRVbml0Pigtb3V0bGluZVN0eWxlLT5vdXRsaW5lT2Zmc2V0KCksIGJvcmRlcldp
ZHRoICsgbWluSW5zZXRSaWdodFNoYWRvd0V4dGVudCkgKyBtYXg8TGF5b3V0VW5pdD4ob3V0bGlu
ZVdpZHRoLCBzaGFkb3dSaWdodCk7CkBAIC0xNDcwLDcgKzE0NzAsNyBAQCBib29sIFJlbmRlck9i
amVjdDo6cmVwYWludEFmdGVyTGF5b3V0SWZOCiAgICAgICAgIExheW91dFVuaXQgc2hhZG93Qm90
dG9tOwogICAgICAgICBzdHlsZSgpLT5nZXRCb3hTaGFkb3dWZXJ0aWNhbEV4dGVudChzaGFkb3dU
b3AsIHNoYWRvd0JvdHRvbSk7CiAgICAgICAgIGludCBib3JkZXJCb3R0b20gPSBpc0JveCgpID8g
dG9SZW5kZXJCb3godGhpcyktPmJvcmRlckJvdHRvbSgpIDogMDsKLSAgICAgICAgTGF5b3V0VW5p
dCBib3hIZWlnaHQgPSBpc0JveCgpID8gdG9SZW5kZXJCb3godGhpcyktPmhlaWdodCgpIDogWkVS
T19MQVlPVVRfVU5JVDsKKyAgICAgICAgTGF5b3V0VW5pdCBib3hIZWlnaHQgPSBpc0JveCgpID8g
dG9SZW5kZXJCb3godGhpcyktPmhlaWdodCgpIDogTGF5b3V0VW5pdCgpOwogICAgICAgICBMYXlv
dXRVbml0IG1pbkluc2V0Qm90dG9tU2hhZG93RXh0ZW50ID0gbWluPExheW91dFVuaXQ+KC1pbnNl
dFNoYWRvd0V4dGVudC5ib3R0b20oKSwgbWluPExheW91dFVuaXQ+KG5ld0JvdW5kcy5oZWlnaHQo
KSwgb2xkQm91bmRzLmhlaWdodCgpKSk7CiAgICAgICAgIExheW91dFVuaXQgYm9yZGVySGVpZ2h0
ID0gbWF4PExheW91dFVuaXQ+KGJvcmRlckJvdHRvbSwgbWF4PExheW91dFVuaXQ+KHZhbHVlRm9y
TGVuZ3RoKHN0eWxlKCktPmJvcmRlckJvdHRvbUxlZnRSYWRpdXMoKS5oZWlnaHQoKSwgYm94SGVp
Z2h0LCB2KSwgdmFsdWVGb3JMZW5ndGgoc3R5bGUoKS0+Ym9yZGVyQm90dG9tUmlnaHRSYWRpdXMo
KS5oZWlnaHQoKSwgYm94SGVpZ2h0LCB2KSkpOwogICAgICAgICBMYXlvdXRVbml0IGRlY29yYXRp
b25zSGVpZ2h0ID0gbWF4PExheW91dFVuaXQ+KC1vdXRsaW5lU3R5bGUtPm91dGxpbmVPZmZzZXQo
KSwgYm9yZGVySGVpZ2h0ICsgbWluSW5zZXRCb3R0b21TaGFkb3dFeHRlbnQpICsgbWF4PExheW91
dFVuaXQ+KG91dGxpbmVXaWR0aCwgc2hhZG93Qm90dG9tKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAs
NyBAQAogI2luY2x1ZGUgIkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uaCIKICNpbmNsdWRl
ICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiRnJhY3Rpb25h
bExheW91dFVuaXQuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91
dFJlY3QuaCIKICNpbmNsdWRlICJQYWludFBoYXNlLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0
Q2hpbGRMaXN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPdmVyZmxvdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPdmVyZmxvdy5oCShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT3ZlcmZsb3cuaAkod29ya2luZyBjb3B5KQpAQCAt
MjEsNyArMjEsNyBAQAogI2lmbmRlZiBSZW5kZXJPdmVyZmxvd19oCiAjZGVmaW5lIFJlbmRlck92
ZXJmbG93X2gKIAotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVj
dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJlZ2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJlZ2lvbi5jcHAJKHJldmlzaW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzAsMTQgKzM3
MCwxNCBAQCB2b2lkIFJlbmRlclJlZ2lvbjo6ZGVsZXRlQWxsUmVuZGVyQm94UmVnCiBMYXlvdXRV
bml0IFJlbmRlclJlZ2lvbjo6bG9naWNhbFRvcE9mRmxvd1RocmVhZENvbnRlbnRSZWN0KGNvbnN0
IExheW91dFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2lzVmFsaWQgfHwgIWZsb3dU
aHJlYWQoKSkKLSAgICAgICAgcmV0dXJuIFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAgIHJldHVy
biAwOwogICAgIHJldHVybiBmbG93VGhyZWFkKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyByZWN0LnkoKSA6IHJlY3QueCgpOwogfQogCiBMYXlvdXRVbml0IFJlbmRlclJlZ2lvbjo6bG9n
aWNhbEJvdHRvbU9mRmxvd1RocmVhZENvbnRlbnRSZWN0KGNvbnN0IExheW91dFJlY3QmIHJlY3Qp
IGNvbnN0CiB7CiAgICAgaWYgKCFtX2lzVmFsaWQgfHwgIWZsb3dUaHJlYWQoKSkKLSAgICAgICAg
cmV0dXJuIFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBm
bG93VGhyZWFkKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyByZWN0Lm1heFkoKSA6IHJl
Y3QubWF4WCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVw
bGFjZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJS
ZXBsYWNlZC5jcHAJKHJldmlzaW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSZXBsYWNlZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4Miw3ICszODIsNyBAQCBM
YXlvdXRVbml0IFJlbmRlclJlcGxhY2VkOjpjb21wdXRlUmVwbGFjCiAgICAgICAgICAgICAgICAg
Ly8gVGhpcyBzb2x2ZXMgYWJvdmUgZXF1YXRpb24gZm9yICd3aWR0aCcgKD09IGxvZ2ljYWxXaWR0
aCkuCiAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBtYXJnaW5TdGFydCA9IG1pbmltdW1WYWx1
ZUZvckxlbmd0aChzdHlsZSgpLT5tYXJnaW5TdGFydCgpLCBsb2dpY2FsV2lkdGgpOwogICAgICAg
ICAgICAgICAgIExheW91dFVuaXQgbWFyZ2luRW5kID0gbWluaW11bVZhbHVlRm9yTGVuZ3RoKHN0
eWxlKCktPm1hcmdpbkVuZCgpLCBsb2dpY2FsV2lkdGgpOwotICAgICAgICAgICAgICAgIGxvZ2lj
YWxXaWR0aCA9IG1heChaRVJPX0xBWU9VVF9VTklULCBsb2dpY2FsV2lkdGggLSAobWFyZ2luU3Rh
cnQgKyBtYXJnaW5FbmQgKyAod2lkdGgoKSAtIGNsaWVudFdpZHRoKCkpKSk7CisgICAgICAgICAg
ICAgICAgbG9naWNhbFdpZHRoID0gbWF4PExheW91dFVuaXQ+KDAsIGxvZ2ljYWxXaWR0aCAtICht
YXJnaW5TdGFydCArIG1hcmdpbkVuZCArICh3aWR0aCgpIC0gY2xpZW50V2lkdGgoKSkpKTsKICAg
ICAgICAgICAgICAgICBpZiAoaXNQZXJjZW50YWdlSW50cmluc2ljU2l6ZSkKICAgICAgICAgICAg
ICAgICAgICAgbG9naWNhbFdpZHRoID0gbG9naWNhbFdpZHRoICogY29uc3RyYWluZWRTaXplLndp
ZHRoKCkgLyAxMDA7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVSZXBsYWNlZExvZ2lj
YWxXaWR0aFJlc3BlY3RpbmdNaW5NYXhXaWR0aChsb2dpY2FsV2lkdGgsIGluY2x1ZGVNYXhXaWR0
aCk7CkBAIC00NjAsNyArNDYwLDcgQEAgdm9pZCBSZW5kZXJSZXBsYWNlZDo6Y29tcHV0ZVByZWZl
cnJlZExvZwogICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gY29tcHV0ZU1heFByZWZl
cnJlZExvZ2ljYWxXaWR0aCgpICsgYm9yZGVyQW5kUGFkZGluZzsKIAogICAgIGlmIChzdHlsZSgp
LT5tYXhXaWR0aCgpLmlzRml4ZWQoKSkKLSAgICAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lk
dGggPSBtaW48TGF5b3V0VW5pdD4obV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgsIHN0eWxlKCkt
Pm1heFdpZHRoKCkudmFsdWUoKSArIChzdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JP
WCA/IGJvcmRlckFuZFBhZGRpbmcgOiBaRVJPX0xBWU9VVF9VTklUKSk7CisgICAgICAgIG1fbWF4
UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWluPExheW91dFVuaXQ+KG1fbWF4UHJlZmVycmVkTG9n
aWNhbFdpZHRoLCBzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgKyAoc3R5bGUoKS0+Ym94U2l6
aW5nKCkgPT0gQ09OVEVOVF9CT1ggPyBib3JkZXJBbmRQYWRkaW5nIDogTGF5b3V0VW5pdCgpKSk7
CiAKICAgICBpZiAoaGFzUmVsYXRpdmVEaW1lbnNpb25zKCkpCiAgICAgICAgIG1fbWluUHJlZmVy
cmVkTG9naWNhbFdpZHRoID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlLmNwcAkocmV2aXNpb24gMTMzNzY0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIxLDcgKzMyMSw3IEBAIExheW91
dFVuaXQgUmVuZGVyVGFibGU6OmNvbnZlcnRTdHlsZUxvZ2kKICAgICBpZiAoaXNDU1NUYWJsZSAm
JiBzdHlsZUxvZ2ljYWxXaWR0aC5pc0ZpeGVkKCkgJiYgc3R5bGVMb2dpY2FsV2lkdGguaXNQb3Np
dGl2ZSgpKSB7CiAgICAgICAgIHJlY2FsY0JvcmRlcnNJblJvd0RpcmVjdGlvbigpOwogICAgICAg
ICBpZiAoc3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1gpCi0gICAgICAgICAgICBi
b3JkZXJzID0gYm9yZGVyU3RhcnQoKSArIGJvcmRlckVuZCgpICsgKGNvbGxhcHNlQm9yZGVycygp
ID8gWkVST19MQVlPVVRfVU5JVCA6IHBhZGRpbmdTdGFydCgpICsgcGFkZGluZ0VuZCgpKTsKKyAg
ICAgICAgICAgIGJvcmRlcnMgPSBib3JkZXJTdGFydCgpICsgYm9yZGVyRW5kKCkgKyAoY29sbGFw
c2VCb3JkZXJzKCkgPyBMYXlvdXRVbml0KCkgOiBwYWRkaW5nU3RhcnQoKSArIHBhZGRpbmdFbmQo
KSk7CiAgICAgfQogICAgIHJldHVybiBtaW5pbXVtVmFsdWVGb3JMZW5ndGgoc3R5bGVMb2dpY2Fs
V2lkdGgsIGF2YWlsYWJsZVdpZHRoLCB2aWV3KCkpICsgYm9yZGVyczsKIH0KQEAgLTQzNCw4ICs0
MzQsOCBAQCB2b2lkIFJlbmRlclRhYmxlOjpsYXlvdXQoKQogICAgICAgICB9CiAgICAgfQogCi0g
ICAgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nQmVmb3JlID0gYm9yZGVyQmVmb3JlKCkgKyAo
Y29sbGFwc2luZyA/IFpFUk9fTEFZT1VUX1VOSVQgOiBwYWRkaW5nQmVmb3JlKCkpOwotICAgIExh
eW91dFVuaXQgYm9yZGVyQW5kUGFkZGluZ0FmdGVyID0gYm9yZGVyQWZ0ZXIoKSArIChjb2xsYXBz
aW5nID8gWkVST19MQVlPVVRfVU5JVCA6IHBhZGRpbmdBZnRlcigpKTsKKyAgICBMYXlvdXRVbml0
IGJvcmRlckFuZFBhZGRpbmdCZWZvcmUgPSBib3JkZXJCZWZvcmUoKSArIChjb2xsYXBzaW5nID8g
TGF5b3V0VW5pdCgpIDogcGFkZGluZ0JlZm9yZSgpKTsKKyAgICBMYXlvdXRVbml0IGJvcmRlckFu
ZFBhZGRpbmdBZnRlciA9IGJvcmRlckFmdGVyKCkgKyAoY29sbGFwc2luZyA/IExheW91dFVuaXQo
KSA6IHBhZGRpbmdBZnRlcigpKTsKIAogICAgIHNldExvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdo
dCgpICsgYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSk7CiAKQEAgLTQ0Niw3ICs0NDYsNyBAQCB2b2lk
IFJlbmRlclRhYmxlOjpsYXlvdXQoKQogICAgIExheW91dFVuaXQgY29tcHV0ZWRMb2dpY2FsSGVp
Z2h0ID0gMDsKICAgICBpZiAobG9naWNhbEhlaWdodExlbmd0aC5pc0ZpeGVkKCkpIHsKICAgICAg
ICAgLy8gSFRNTCB0YWJsZXMgc2l6ZSBhcyB0aG91Z2ggQ1NTIGhlaWdodCBpbmNsdWRlcyBib3Jk
ZXIvcGFkZGluZywgQ1NTIHRhYmxlcyBkbyBub3QuCi0gICAgICAgIExheW91dFVuaXQgYm9yZGVy
cyA9IFpFUk9fTEFZT1VUX1VOSVQ7CisgICAgICAgIExheW91dFVuaXQgYm9yZGVycyA9IDA7CiAg
ICAgICAgIC8vIEZJWE1FOiBXZSBjYW5ub3QgYXBwbHkgYm94LXNpemluZzogY29udGVudC1ib3gg
b24gPHRhYmxlPiB3aGljaCBvdGhlciBicm93c2VycyBhbGxvdy4KICAgICAgICAgaWYgKChub2Rl
KCkgJiYgbm9kZSgpLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSkgfHwgc3R5bGUoKS0+Ym94U2l6aW5n
KCkgPT0gQk9SREVSX0JPWCkKICAgICAgICAgICAgIGJvcmRlcnMgPSBib3JkZXJBbmRQYWRkaW5n
QmVmb3JlICsgYm9yZGVyQW5kUGFkZGluZ0FmdGVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlLmgJKHJldmlzaW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsMTQgKzE5MSwxMyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmICh1bnNpZ25lZCBlZmZlY3RpdmVDb2x1bW5Db3VudCA9IG51
bUVmZkNvbHMoKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxMYXlvdXRVbml0Pihl
ZmZlY3RpdmVDb2x1bW5Db3VudCArIDEpICogaEJvcmRlclNwYWNpbmcoKTsKIAotICAgICAgICBy
ZXR1cm4gWkVST19MQVlPVVRfVU5JVDsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAg
TGF5b3V0VW5pdCBib3JkZXJzUGFkZGluZ0FuZFNwYWNpbmdJblJvd0RpcmVjdGlvbigpIGNvbnN0
CiAgICAgewogICAgICAgICAvLyAnYm9yZGVyLXNwYWNpbmcnIG9ubHkgYXBwbGllcyB0byBzZXBh
cmF0ZSBib3JkZXJzIChzZWUgMTcuNi4xIFRoZSBzZXBhcmF0ZWQgYm9yZGVycyBtb2RlbCkuCi0g
ICAgICAgIHJldHVybiBib3JkZXJTdGFydCgpICsgYm9yZGVyRW5kKCkgKwotICAgICAgICAgICAg
ICAgKGNvbGxhcHNlQm9yZGVycygpID8gWkVST19MQVlPVVRfVU5JVCA6IChwYWRkaW5nU3RhcnQo
KSArIHBhZGRpbmdFbmQoKSArIGJvcmRlclNwYWNpbmdJblJvd0RpcmVjdGlvbigpKSk7CisgICAg
ICAgIHJldHVybiBib3JkZXJTdGFydCgpICsgYm9yZGVyRW5kKCkgKyAoY29sbGFwc2VCb3JkZXJz
KCkgPyBMYXlvdXRVbml0KCkgOiAocGFkZGluZ1N0YXJ0KCkgKyBwYWRkaW5nRW5kKCkgKyBib3Jk
ZXJTcGFjaW5nSW5Sb3dEaXJlY3Rpb24oKSkpOwogICAgIH0KIAogICAgIC8vIFJldHVybiB0aGUg
Zmlyc3QgY29sdW1uIG9yIGNvbHVtbi1ncm91cC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYxNSw4ICsxNjE1LDgg
QEAgTGF5b3V0UmVjdCBSZW5kZXJUZXh0OjpsaW5lc1Zpc3VhbE92ZXJmbAogICAgICAgICByZXR1
cm4gTGF5b3V0UmVjdCgpOwogCiAgICAgLy8gUmV0dXJuIHRoZSB3aWR0aCBvZiB0aGUgbWluaW1h
bCBsZWZ0IHNpZGUgYW5kIHRoZSBtYXhpbWFsIHJpZ2h0IHNpZGUuCi0gICAgTGF5b3V0VW5pdCBs
b2dpY2FsTGVmdFNpZGUgPSBNQVhfTEFZT1VUX1VOSVQ7Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2Fs
UmlnaHRTaWRlID0gTUlOX0xBWU9VVF9VTklUOworICAgIExheW91dFVuaXQgbG9naWNhbExlZnRT
aWRlID0gTGF5b3V0VW5pdDo6bWF4KCk7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRTaWRl
ID0gTGF5b3V0VW5pdDo6bWluKCk7CiAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBjdXJyID0gZmly
c3RUZXh0Qm94KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0VGV4dEJveCgpKSB7CiAgICAgICAg
IGxvZ2ljYWxMZWZ0U2lkZSA9IG1pbihsb2dpY2FsTGVmdFNpZGUsIGN1cnItPmxvZ2ljYWxMZWZ0
VmlzdWFsT3ZlcmZsb3coKSk7CiAgICAgICAgIGxvZ2ljYWxSaWdodFNpZGUgPSBtYXgobG9naWNh
bFJpZ2h0U2lkZSwgY3Vyci0+bG9naWNhbFJpZ2h0VmlzdWFsT3ZlcmZsb3coKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUNvbW1vbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1D
b21tb24uY3BwCShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVDaHJvbWl1bUNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2
LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZUNocm9taXVt
Q29tbW9uLmgiCiAKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0VW5pdC5oIgogI2luY2x1ZGUg
IklucHV0VHlwZU5hbWVzLmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNo
cm9taXVtQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lQ2hyb21pdW1Db21tb24uaAkocmV2aXNpb24gMTMzNzY0KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Db21tb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNyArMjcsNyBAQAogI2lmbmRlZiBSZW5kZXJUaGVtZUNocm9taXVtQ29tbW9uX2gK
ICNkZWZpbmUgUmVuZGVyVGhlbWVDaHJvbWl1bUNvbW1vbl9oCiAKLSNpbmNsdWRlICJMYXlvdXRU
eXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9t
aWNTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNpb24gMTMzNzY0KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04OSw3ICs4OSw3IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGMKICAgICByZXR1cm4gdHMgPDwgIigiIDw8IHAueCgpIDw8ICIsIiA8PCBwLnkoKSA8PCAi
KSI7CiB9CiAKLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZy
YWN0aW9uYWxMYXlvdXRQb2ludCYgcCkKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IExheW91dFBvaW50JiBwKQogewogICAgIC8vIEZJWE1FOiBUaGVzZSBzaG91
bGQgYmUgcHJpbnRlZCBhcyBmbG9hdHMuIEtlZXBpbmcgdGhlbSBpbnRzIGZvciBjb25zaXN0ZW5j
eSB3aXRoIHBlcnZpb3VzIHRlc3QgZXhwZWN0YXRpb25zLgogICAgIHJldHVybiB0cyA8PCAiKCIg
PDwgcC54KCkudG9JbnQoKSA8PCAiLCIgPDwgcC55KCkudG9JbnQoKSA8PCAiKSI7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmgJKHJldmlzaW9uIDEz
Mzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDEyICszMiwxMiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBFbGVtZW50OwotY2xhc3MgRnJhY3Rpb25hbExheW91dFBvaW50OwogY2xhc3MgRmxvYXRQ
b2ludDsKIGNsYXNzIEZsb2F0U2l6ZTsKIGNsYXNzIEZyYW1lOwogY2xhc3MgSW50UG9pbnQ7CiBj
bGFzcyBJbnRSZWN0OworY2xhc3MgTGF5b3V0UG9pbnQ7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBj
bGFzcyBUZXh0U3RyZWFtOwogCkBAIC03MCw3ICs3MCw3IEBAIHN0YXRpYyB2b2lkIHdyaXRlUmVu
ZGVyT2JqZWN0KFRleHRTdHJlYW0KIAogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiwgY29uc3QgSW50UG9pbnQmKTsKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYs
IGNvbnN0IEludFJlY3QmKTsKLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYpOworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYsIGNvbnN0IEZsb2F0U2l6ZSYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWV3LmgJKHJldmlzaW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw4ICsxMjcsOCBAQCBwdWJs
aWM6CiAgICAgICAgIGlmIChtX2xheW91dFN0YXRlKSB7CiAgICAgICAgICAgICBtX2xheW91dFN0
YXRlLT5tX2xheW91dERlbHRhICs9IGRlbHRhOwogI2lmICFBU1NFUlRfRElTQUJMRUQgJiYgRU5B
QkxFKFNBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykKLSAgICAgICAgICAgIG1fbGF5b3V0U3Rh
dGUtPm1fbGF5b3V0RGVsdGFYU2F0dXJhdGVkIHw9IG1fbGF5b3V0U3RhdGUtPm1fbGF5b3V0RGVs
dGEud2lkdGgoKSA9PSBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWF4KCkgfHwgbV9sYXlvdXRTdGF0
ZS0+bV9sYXlvdXREZWx0YS53aWR0aCgpID09IEZyYWN0aW9uYWxMYXlvdXRVbml0OjptaW4oKTsK
LSAgICAgICAgICAgIG1fbGF5b3V0U3RhdGUtPm1fbGF5b3V0RGVsdGFZU2F0dXJhdGVkIHw9IG1f
bGF5b3V0U3RhdGUtPm1fbGF5b3V0RGVsdGEuaGVpZ2h0KCkgPT0gRnJhY3Rpb25hbExheW91dFVu
aXQ6Om1heCgpIHx8IG1fbGF5b3V0U3RhdGUtPm1fbGF5b3V0RGVsdGEuaGVpZ2h0KCkgPT0gRnJh
Y3Rpb25hbExheW91dFVuaXQ6Om1pbigpOworICAgICAgICAgICAgbV9sYXlvdXRTdGF0ZS0+bV9s
YXlvdXREZWx0YVhTYXR1cmF0ZWQgfD0gbV9sYXlvdXRTdGF0ZS0+bV9sYXlvdXREZWx0YS53aWR0
aCgpID09IExheW91dFVuaXQ6Om1heCgpIHx8IG1fbGF5b3V0U3RhdGUtPm1fbGF5b3V0RGVsdGEu
d2lkdGgoKSA9PSBMYXlvdXRVbml0OjptaW4oKTsKKyAgICAgICAgICAgIG1fbGF5b3V0U3RhdGUt
Pm1fbGF5b3V0RGVsdGFZU2F0dXJhdGVkIHw9IG1fbGF5b3V0U3RhdGUtPm1fbGF5b3V0RGVsdGEu
aGVpZ2h0KCkgPT0gTGF5b3V0VW5pdDo6bWF4KCkgfHwgbV9sYXlvdXRTdGF0ZS0+bV9sYXlvdXRE
ZWx0YS5oZWlnaHQoKSA9PSBMYXlvdXRVbml0OjptaW4oKTsKICNlbmRpZgogICAgICAgICB9CiAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVjZUltYWdl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVj
ZUltYWdlLmgJKHJldmlzaW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9OaW5lUGllY2VJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAj
aWZuZGVmIE5pbmVQaWVjZUltYWdlX2gKICNkZWZpbmUgTmluZVBpZWNlSW1hZ2VfaAogCi0jaW5j
bHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRVbml0LmgiCiAjaW5jbHVkZSAi
TGVuZ3RoQm94LmgiCiAjaW5jbHVkZSAiU3R5bGVJbWFnZS5oIgogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gMTMzNzY0KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJGb250QmFzZWxpbmUuaCIKICNpbmNs
dWRlICJGb250RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCi0jaW5j
bHVkZSAiTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94RXh0
ZW50LmgiCiAjaW5jbHVkZSAiTGVuZ3RoLmgiCiAjaW5jbHVkZSAiTGVuZ3RoQm94LmgiCiAjaW5j
bHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvU2hhZG93RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1NoYWRvd0RhdGEuY3BwCShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvU2hhZG93RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDcgKzIyLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTaGFkb3dEYXRhLmgi
CiAKLSNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJMYXlv
dXRSZWN0LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TaGFkb3dEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuaAkocmV2aXNpb24gMTMzNzY0KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIK
ICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2VTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNo
ZWRJbWFnZVNldC5oCShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICsz
MCw3IEBACiAKICNpbmNsdWRlICJDYWNoZWRJbWFnZUNsaWVudC5oIgogI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlSGFuZGxlLmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJM
YXlvdXRTaXplLmgiCiAjaW5jbHVkZSAiU3R5bGVJbWFnZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlLmgJ
KHJldmlzaW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHls
ZUltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJDU1NW
YWx1ZS5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1
ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgogI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
clN1cHBvcnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlclN1cHBvcnQuaAkocmV2aXNpb24gMTMzNzY0KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1
LDYgQEAKICNkZWZpbmUgU1ZHUmVuZGVyU3VwcG9ydF9oCiAKICNpZiBFTkFCTEUoU1ZHKQotI2lu
Y2x1ZGUgIkxheW91dFR5cGVzLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTMzLDYgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
RmxvYXRQb2ludDsKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEltYWdlQnVmZmVyOworY2xhc3Mg
TGF5b3V0UmVjdDsKIGNsYXNzIFJlbmRlckJveE1vZGVsT2JqZWN0OwogY2xhc3MgUmVuZGVyR2Vv
bWV0cnlNYXA7CiBjbGFzcyBSZW5kZXJMYXllck1vZGVsT2JqZWN0OwpJbmRleDogU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzc2NCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTItMTEtMDUg
IEVtaWwgQSBFa2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlbW92ZSBMYXlv
dXRUeXBlcyBhYnN0cmFjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTMwNTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBSZW1vdmUgTGF5b3V0VHlwZXMgYWJzdHJhY3Rpb24gYW5kIHJlbmFtZSBGcmFj
dGlvbmFsTGF5b3V0KiB0bworICAgICAgICBMYXlvdXQqIG5vdyB0aGF0IGFsbCBwbGF0Zm9ybXMg
dXNlIHRoZSBGcmFjdGlvbmFsTGF5b3V0IHZlcnNpb24KKyAgICAgICAgKGFsYmVpdCB3aXRoIGRp
ZmZlcmVudCBmcmFjdGlvbnMpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gY2hhbmdlIGlu
IGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBzcmMvTGlua0hpZ2hsaWdodC5jcHA6CisKIDIw
MTItMTEtMDcgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQuICBSb2xsZWQgREVQUy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0xpbmtIaWdobGlnaHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0xpbmtIaWdobGlnaHQuY3BwCShyZXZpc2lvbiAxMzM3NjQpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9MaW5rSGlnaGxpZ2h0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgogI2luY2x1
ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJOb25Db21wb3NpdGVkQ29udGVudEhvc3QuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>