<?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>53898</bug_id>
          
          <creation_ts>2011-02-06 18:43:10 -0800</creation_ts>
          <short_desc>Add built-in decoder for UTF-8 for improved performance</short_desc>
          <delta_ts>2011-02-15 03:27:34 -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>Text</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>54382</dependson>
    
    <dependson>54418</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>abarth</cc>
    
    <cc>alex</cc>
    
    <cc>ap</cc>
    
    <cc>dbates</cc>
    
    <cc>eric</cc>
    
    <cc>koivisto</cc>
    
    <cc>mario</cc>
    
    <cc>mjs</cc>
    
    <cc>ossy</cc>
    
    <cc>psolanki</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>346429</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-06 18:43:10 -0800</bug_when>
    <thetext>Add built-in decoder for UTF-8 for improved performance</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346431</commentid>
    <comment_count>1</comment_count>
      <attachid>81441</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-06 18:49:03 -0800</bug_when>
    <thetext>Created attachment 81441
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346432</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-06 18:50:45 -0800</bug_when>
    <thetext>&lt;rdar://problem/8955789&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346433</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-06 18:51:14 -0800</bug_when>
    <thetext>Attachment 81441 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h:83:  Missing spaces around &lt;=  [whitespace/operators] [3]
Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h:83:  Missing space before ( in if(  [whitespace/parens] [5]
Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h:86:  Missing spaces around &lt;=  [whitespace/operators] [3]
Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h:86:  Missing space before ( in if(  [whitespace/parens] [5]
Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h:87:  Missing spaces around &gt;&gt;  [whitespace/operators] [3]
Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h:89:  Missing spaces around &lt;=  [whitespace/operators] [3]
Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h:89:  Missing space before ( in if(  [whitespace/parens] [5]
Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h:90:  Missing spaces around &gt;&gt;  [whitespace/operators] [3]
Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h:92:  Missing spaces around &gt;&gt;  [whitespace/operators] [3]
Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h:93:  Missing spaces around &gt;&gt;  [whitespace/operators] [3]
Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h:95:  Missing spaces around &gt;&gt;  [whitespace/operators] [3]
Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h:97:  Missing spaces around |  [whitespace/operators] [3]
Total errors found: 12 in 20 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>346435</commentid>
    <comment_count>4</comment_count>
      <attachid>81441</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-06 19:07:52 -0800</bug_when>
    <thetext>Comment on attachment 81441
Patch

Some regression tests are failing. The patch isn’t quite ready yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346446</commentid>
    <comment_count>5</comment_count>
      <attachid>81443</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-06 20:18:05 -0800</bug_when>
    <thetext>Created attachment 81443
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346447</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-06 20:19:17 -0800</bug_when>
    <thetext>OK. New patch should be better. I had some or operators where I should have had addition operators.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346448</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-06 20:21:08 -0800</bug_when>
    <thetext>Attachment 81443 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h:83:  Missing spaces around &lt;=  [whitespace/operators] [3]
Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h:83:  Missing space before ( in if(  [whitespace/parens] [5]
Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h:86:  Missing spaces around &lt;=  [whitespace/operators] [3]
Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h:86:  Missing space before ( in if(  [whitespace/parens] [5]
Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h:87:  Missing spaces around &gt;&gt;  [whitespace/operators] [3]
Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h:89:  Missing spaces around &lt;=  [whitespace/operators] [3]
Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h:89:  Missing space before ( in if(  [whitespace/parens] [5]
Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h:90:  Missing spaces around &gt;&gt;  [whitespace/operators] [3]
Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h:92:  Missing spaces around &gt;&gt;  [whitespace/operators] [3]
Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h:93:  Missing spaces around &gt;&gt;  [whitespace/operators] [3]
Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h:95:  Missing spaces around &gt;&gt;  [whitespace/operators] [3]
Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h:97:  Missing spaces around |  [whitespace/operators] [3]
Total errors found: 12 in 20 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>346536</commentid>
    <comment_count>8</comment_count>
      <attachid>81443</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-02-07 03:59:01 -0800</bug_when>
    <thetext>Comment on attachment 81443
Patch

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

Very nice, r=me.

It certainly looks fast. Did you measure the performance against ICU?

&gt; Source/WebCore/platform/text/TextCodecUTF8.cpp:155
&gt; +    const uint8_t* alignedEnd = reinterpret_cast&lt;const uint8_t*&gt;(reinterpret_cast&lt;uintptr_t&gt;(end) &amp; ~(sizeof(uintptr_t) - 1));

This would be less magical as inline function.

&gt; Source/WebCore/platform/text/TextCodecUTF8.cpp:183
&gt; +            if (!(reinterpret_cast&lt;uintptr_t&gt;(source) &amp; (sizeof(uintptr_t) - 1))) {

As would this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346537</commentid>
    <comment_count>9</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-02-07 04:02:20 -0800</bug_when>
    <thetext>...and sizeof(uintptr_t) - 1) would be less magical as a named constant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346600</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-07 08:25:16 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; It certainly looks fast. Did you measure the performance against ICU?

Not yet; I plan to. There are various places where we may want to do additional tuning. I don’t know how badly the goto screws up the compiler optimization, for one thing.

&gt; &gt; Source/WebCore/platform/text/TextCodecUTF8.cpp:155
&gt; &gt; +    const uint8_t* alignedEnd = reinterpret_cast&lt;const uint8_t*&gt;(reinterpret_cast&lt;uintptr_t&gt;(end) &amp; ~(sizeof(uintptr_t) - 1));
&gt; 
&gt; This would be less magical as inline function.
&gt; 
&gt; &gt; Source/WebCore/platform/text/TextCodecUTF8.cpp:183
&gt; &gt; +            if (!(reinterpret_cast&lt;uintptr_t&gt;(source) &amp; (sizeof(uintptr_t) - 1))) {
&gt; 
&gt; As would this.
&gt;
&gt; ...and sizeof(uintptr_t) - 1) would be less magical as a named constant.

I’ll make changes like these before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346605</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-07 08:35:45 -0800</bug_when>
    <thetext>Committed r77819: &lt;http://trac.webkit.org/changeset/77819&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346612</commentid>
    <comment_count>12</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-02-07 09:01:40 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Committed r77819: &lt;http://trac.webkit.org/changeset/77819&gt;

It broke Qt build:

In file included from ../../../Source/WebCore/platform/text/TextCodecUTF8.cpp:27:
../../../Source/WebCore/platform/text/TextCodecUTF8.h:46: error: ‘U8_MAX_LENGTH’ was not declared in this scope
../../../Source/WebCore/platform/text/TextCodecUTF8.cpp: In member function ‘virtual WTF::String WebCore::TextCodecUTF8::decode(const char*, size_t, bool, bool, bool&amp;)’:
../../../Source/WebCore/platform/text/TextCodecUTF8.cpp:180: error: ‘m_partialSequence’ was not declared in this scope
../../../Source/WebCore/platform/text/TextCodecUTF8.cpp:187: error: ‘U8_MAX_LENGTH’ was not declared in this scope
../../../Source/WebCore/platform/text/TextCodecUTF8.cpp:188: error: ‘completeSequence’ was not declared in this scope
../../../Source/WebCore/platform/text/TextCodecUTF8.cpp:225: error: ‘m_partialSequence’ was not declared in this scope
../../../Source/WebCore/platform/text/TextCodecUTF8.cpp: In member function ‘virtual WTF::CString WebCore::TextCodecUTF8::encode(const UChar*, size_t, WebCore::UnencodableHandling)’:
../../../Source/WebCore/platform/text/TextCodecUTF8.cpp:270: error: ‘U8_APPEND_UNSAFE’ was not declared in this scope
In file included from ../../../Source/WebCore/platform/text/TextEncodingRegistry.cpp:33:
../../../Source/WebCore/platform/text/TextCodecUTF8.h:46: error: ‘U8_MAX_LENGTH’ was not declared in this scope</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346625</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-07 09:30:40 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/77819 might have broken Qt Linux Release, Qt Linux Release minimal, Qt Linux ARMv5 Release, Qt Linux ARMv7 Release, Qt Windows 32-bit Release, and Qt Windows 32-bit Debug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346637</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-07 09:59:11 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; Committed r77819: &lt;http://trac.webkit.org/changeset/77819&gt;
&gt; 
&gt; It broke Qt build:

OK, but how does reopening this bug help? I would suggest reopening only if the patch is rolled out, and otherwise using a new bug report.

&gt; In file included from ../../../Source/WebCore/platform/text/TextCodecUTF8.cpp:27:
&gt; ../../../Source/WebCore/platform/text/TextCodecUTF8.h:46: error: ‘U8_MAX_LENGTH’ was not declared in this scope
&gt; ../../../Source/WebCore/platform/text/TextCodecUTF8.cpp: In member function ‘virtual WTF::String WebCore::TextCodecUTF8::decode(const char*, size_t, bool, bool, bool&amp;)’:
&gt; ../../../Source/WebCore/platform/text/TextCodecUTF8.cpp:180: error: ‘m_partialSequence’ was not declared in this scope
&gt; ../../../Source/WebCore/platform/text/TextCodecUTF8.cpp:187: error: ‘U8_MAX_LENGTH’ was not declared in this scope
&gt; ../../../Source/WebCore/platform/text/TextCodecUTF8.cpp:188: error: ‘completeSequence’ was not declared in this scope
&gt; ../../../Source/WebCore/platform/text/TextCodecUTF8.cpp:225: error: ‘m_partialSequence’ was not declared in this scope
&gt; ../../../Source/WebCore/platform/text/TextCodecUTF8.cpp: In member function ‘virtual WTF::CString WebCore::TextCodecUTF8::encode(const UChar*, size_t, WebCore::UnencodableHandling)’:
&gt; ../../../Source/WebCore/platform/text/TextCodecUTF8.cpp:270: error: ‘U8_APPEND_UNSAFE’ was not declared in this scope
&gt; In file included from ../../../Source/WebCore/platform/text/TextEncodingRegistry.cpp:33:
&gt; ../../../Source/WebCore/platform/text/TextCodecUTF8.h:46: error: ‘U8_MAX_LENGTH’ was not declared in this scope

I’ll fix this right now. Given this failure seems that Qt doesn’t use ICU and also doesn’t use UnicodeMacrosFromICU.h, which is surpising.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346640</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-07 10:01:18 -0800</bug_when>
    <thetext>I see what’s wrong. webkit-patch didn’t land the changes in JavaScriptCore!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346650</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-07 10:21:44 -0800</bug_when>
    <thetext>Landed the additional changes in &lt;http://trac.webkit.org/changeset/77823&gt;, but now it seems there are some failing regression tests. May need to roll this out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346668</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-07 10:46:45 -0800</bug_when>
    <thetext>Left codec compiling, but not turned on, while I investigate regressions.

http://trac.webkit.org/changeset/77831</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346669</commentid>
    <comment_count>18</comment_count>
      <attachid>81443</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-07 10:47:16 -0800</bug_when>
    <thetext>Comment on attachment 81443
Patch

Clear review flag since this patch is landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346674</commentid>
    <comment_count>19</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-07 10:48:46 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; I see what’s wrong. webkit-patch didn’t land the changes in JavaScriptCore!

This is likely the result of Maciej&apos;s change to make webkit-patch only look at the current directory when using SVN.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346773</commentid>
    <comment_count>20</comment_count>
      <attachid>81443</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-07 13:38:25 -0800</bug_when>
    <thetext>Comment on attachment 81443
Patch

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

&gt; Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h:-22
&gt; - *  Copyright (C) 2006 George Staikos &lt;staikos@kde.org&gt;
&gt; - *  Copyright (C) 2006 Alexey Proskuryakov &lt;ap@nypop.com&gt;
&gt; - *  Copyright (C) 2007 Apple Computer, Inc. All rights reserved.
&gt; - *  Copyright (C) 2008 JÃ¼rg Billeter &lt;j@bitron.ch&gt;
&gt; - *  Copyright (C) 2008 Dominik RÃ¶ttsches &lt;dominik.roettsches@access-company.com&gt;
&gt; - *
&gt; - *  This library is free software; you can redistribute it and/or
&gt; - *  modify it under the terms of the GNU Library General Public
&gt; - *  License as published by the Free Software Foundation; either
&gt; - *  version 2 of the License, or (at your option) any later version.
&gt; - *
&gt; - *  This library is distributed in the hope that it will be useful,
&gt; - *  but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt; - *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
&gt; - *  Library General Public License for more details.
&gt; - *
&gt; - *  You should have received a copy of the GNU Library General Public License
&gt; - *  along with this library; see the file COPYING.LIB.  If not, write to
&gt; - *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
&gt; - *  Boston, MA 02110-1301, USA.

did you mean to take the license header out of this file?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346823</commentid>
    <comment_count>21</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-07 14:49:43 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81443&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h:-22
&gt; &gt; - *  Copyright (C) 2006 George Staikos &lt;staikos@kde.org&gt;
&gt; &gt; - *  Copyright (C) 2006 Alexey Proskuryakov &lt;ap@nypop.com&gt;
&gt; &gt; - *  Copyright (C) 2007 Apple Computer, Inc. All rights reserved.
&gt; &gt; - *  Copyright (C) 2008 JÃ¼rg Billeter &lt;j@bitron.ch&gt;
&gt; &gt; - *  Copyright (C) 2008 Dominik RÃ¶ttsches &lt;dominik.roettsches@access-company.com&gt;
&gt; &gt; - *
&gt; &gt; - *  This library is free software; you can redistribute it and/or
&gt; &gt; - *  modify it under the terms of the GNU Library General Public
&gt; &gt; - *  License as published by the Free Software Foundation; either
&gt; &gt; - *  version 2 of the License, or (at your option) any later version.
&gt; &gt; - *
&gt; &gt; - *  This library is distributed in the hope that it will be useful,
&gt; &gt; - *  but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt; &gt; - *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
&gt; &gt; - *  Library General Public License for more details.
&gt; &gt; - *
&gt; &gt; - *  You should have received a copy of the GNU Library General Public License
&gt; &gt; - *  along with this library; see the file COPYING.LIB.  If not, write to
&gt; &gt; - *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
&gt; &gt; - *  Boston, MA 02110-1301, USA.
&gt; 
&gt; did you mean to take the license header out of this file?

Yes. The copyright on that code is not held by any of those people listed in the lines I deleted, it’s held by IBM, as expressed in the line I did not delete. Since we don’t hold copyright I don’t think we can attach a license to this source file that wasn’t on the original source file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350339</commentid>
    <comment_count>22</comment_count>
      <attachid>82247</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-12 17:16:18 -0800</bug_when>
    <thetext>Created attachment 82247
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350340</commentid>
    <comment_count>23</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-12 17:17:40 -0800</bug_when>
    <thetext>New patch improves error handling in the codec and turns it back on. Also some small coding style tweaks to the ICU codec, but no substantive changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350346</commentid>
    <comment_count>24</comment_count>
      <attachid>82247</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-02-12 21:25:29 -0800</bug_when>
    <thetext>Comment on attachment 82247
Patch

&gt; -
&gt; } // namespace WebCore

Please feel free to remove these noisy comments as well. This has been discussed on webkit-dev, and i don&apos;t remember any disagreement expressed.

I&apos;m also very curious what the win over ICU is, especially on content that isn&apos;t all ASCII.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350358</commentid>
    <comment_count>25</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-12 23:39:30 -0800</bug_when>
    <thetext>As a matter of curiosity, would it make sense to contribute this change to ICU so that all users of the library would benefit?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350507</commentid>
    <comment_count>26</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-13 19:12:39 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; I&apos;m also very curious what the win over ICU is, especially on content that isn&apos;t all ASCII.

I did some timings. These are on a brand new top of the line iMac so times are very short.

nytimes.com, front page

    ICU decoder: .57ms
    new decoder: .15ms
    3.8X faster

worldjournal.com, front page (most text is Chinese, includes largely ASCII markup and scripts)

    ICU decoder: .58ms
    new decoder: .17ms
    3.4X faster

wikipedia.org, front page (many non-ASCII characters; little markup and scripts)

    ICU decoder: .35ms
    new decoder: .19ms
    1.8X faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350508</commentid>
    <comment_count>27</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-13 19:25:32 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; As a matter of curiosity, would it make sense to contribute this change to ICU so that all users of the library would benefit?

I don’t know.

I believe that much of the speed-up provided by the code I am adding here comes from removing overhead. The code wouldn’t work in ICU as-is. I’m not sure the concept of contributing the change to ICU applies in a direct fashion.

Someone familiar enough with ICU to make changes there might be able to apply some of the same techniques used to optimize our Latin-1 codec and this new UTF-8 one. I suspect, though, that the built-in codecs for these will remain at least a bit faster.

ICU has many features we do not need here, including a general purpose callback mechanism when an illegal sequence is encountered.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350509</commentid>
    <comment_count>28</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-13 19:28:44 -0800</bug_when>
    <thetext>Committed r78451: &lt;http://trac.webkit.org/changeset/78451&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350510</commentid>
    <comment_count>29</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-13 19:30:47 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 82247 [details])
&gt; &gt; } // namespace WebCore
&gt; 
&gt; Please feel free to remove these noisy comments as well.

Oops, forgot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350512</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-13 20:29:59 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/78451 might have broken SnowLeopard Intel Release (Tests)
The following tests are not passing:
http/tests/xmlhttprequest/cache-override.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350556</commentid>
    <comment_count>31</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-14 01:10:54 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; http://trac.webkit.org/changeset/78451 might have broken SnowLeopard Intel Release (Tests)
&gt; The following tests are not passing:
&gt; http/tests/xmlhttprequest/cache-override.html

It&apos;s a crash:
http://build.webkit.org/results/SnowLeopard%20Intel%20Release%20(Tests)/r78451%20(25286)/http/tests/xmlhttprequest/cache-override-crash-log.txt

Thread 0 Crashed:  Dispatch queue: com.apple.main-thread
0   libSystem.B.dylib             	0x00007fffffe00951 __memcpy + 433
1   com.apple.WebCore             	0x0000000101396685 WebCore::TextCodecUTF8::decode(char const*, unsigned long, bool, bool, bool&amp;) + 773 (TextCodecUTF8.cpp:245)
2   com.apple.WebCore             	0x0000000101301294 WebCore::TextResourceDecoder::flush() + 100 (Vector.h:574)
3   com.apple.WebCore             	0x00000001013742ca WebCore::XMLHttpRequest::didFinishLoading(unsigned long) + 90 (XMLHttpRequest.cpp:999)
4   com.apple.WebCore             	0x00000001008c564f WebCore::DocumentThreadableLoader::loadRequest(WebCore::ResourceRequest const&amp;, WebCore::SecurityCheckPolicy) + 623 (RetainPtr.h:69)
5   com.apple.WebCore             	0x00000001008c7450 WebCore::DocumentThreadableLoader::DocumentThreadableLoader(WebCore::Document*, WebCore::ThreadableLoaderClient*, WebCore::DocumentThreadableLoader::BlockingBehavior, WebCore::ResourceRequest const&amp;, WebCore::ThreadableLoaderOptions const&amp;) + 496 (DocumentThreadableLoader.cpp:101)
6   com.apple.WebCore             	0x00000001008c7b9b WebCore::DocumentThreadableLoader::loadResourceSynchronously(WebCore::Document*, WebCore::ResourceRequest const&amp;, WebCore::ThreadableLoaderClient&amp;, WebCore::ThreadableLoaderOptions const&amp;) + 75 (PassRefPtr.h:58)
7   com.apple.WebCore             	0x000000010137279e WebCore::XMLHttpRequest::createRequest(int&amp;) + 1646 (XMLHttpRequest.cpp:673)
8   com.apple.WebCore             	0x00000001013738b5 WebCore::XMLHttpRequest::send(WTF::String const&amp;, int&amp;) + 69 (XMLHttpRequest.cpp:544)
9   com.apple.WebCore             	0x0000000101373d80 WebCore::XMLHttpRequest::send(int&amp;) + 32 (RefPtr.h:58)
10  com.apple.WebCore             	0x0000000100fa22cd WebCore::JSXMLHttpRequest::send(JSC::ExecState*) + 365 (RefPtr.h:42)
11  com.apple.WebCore             	0x0000000100f9e557 WebCore::jsXMLHttpRequestPrototypeFunctionSend(JSC::ExecState*) + 119 (JSXMLHttpRequest.cpp:487)
12  ???                           	0x000059b0ca4001b8 0 + 98615842308536
13  com.apple.JavaScriptCore      	0x000000010016ed4a JSC::Interpreter::execute(JSC::ProgramExecutable*, JSC::ExecState*, JSC::ScopeChainNode*, JSC::JSObject*) + 538 (WriteBarrier.h:68)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350586</commentid>
    <comment_count>32</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-14 04:32:17 -0800</bug_when>
    <thetext>Reverted r78451 for reason:

It is causing crashes in some bots

Committed r78465: &lt;http://trac.webkit.org/changeset/78465&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350589</commentid>
    <comment_count>33</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-14 04:33:49 -0800</bug_when>
    <thetext>*** Bug 54386 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350590</commentid>
    <comment_count>34</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-14 04:34:38 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; *** Bug 54386 has been marked as a duplicate of this bug. ***

You can check more information about the crashes in the duplicated bug 54386.

I hope it helps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350610</commentid>
    <comment_count>35</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-02-14 05:27:43 -0800</bug_when>
    <thetext>WebCore::TextCodecUTF8::decode (this=0x119923b40, bytes=0x0, length=0, flush=true, stopOnError=false, sawError=@0x11992b554) at /Users/antti/webkit/OpenSource/Source/WebCore/platform/text/TextCodecUTF8.cpp:217
217	            ASSERT(count &gt; m_partialSequenceSize);

This simple missing null check breaking one test did not require a rollout. I was just about to fix when this got rolled out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350614</commentid>
    <comment_count>36</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-14 05:44:38 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; WebCore::TextCodecUTF8::decode (this=0x119923b40, bytes=0x0, length=0, flush=true, stopOnError=false, sawError=@0x11992b554) at /Users/antti/webkit/OpenSource/Source/WebCore/platform/text/TextCodecUTF8.cpp:217
&gt; 217                ASSERT(count &gt; m_partialSequenceSize);
&gt; 
&gt; This simple missing null check breaking one test did not require a rollout. I was just about to fix when this got rolled out.

It breaks more than 1 test and with more than 1 assertion. I tried to reproduce it without success locally, and after that I tried to find the authors in the IRC, and just after that opened a but and rolled out; because I&apos;m sure Darin could find the issue faster than anyone, which is the better option in this cases in my opinion.

So if this is not the way to handle this situations I&apos;m sorry, I&apos;m ok with Anttik&apos;s proposal of just rolling out if the patch causes a major pain to other developers, we would have to decide if red bots are a major pain in this case though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350625</commentid>
    <comment_count>37</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-02-14 06:10:29 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; WebCore::TextCodecUTF8::decode (this=0x119923b40, bytes=0x0, length=0, flush=true, stopOnError=false, sawError=@0x11992b554) at /Users/antti/webkit/OpenSource/Source/WebCore/platform/text/TextCodecUTF8.cpp:217
&gt; 217                ASSERT(count &gt; m_partialSequenceSize);
&gt; 
&gt; This simple missing null check breaking one test did not require a rollout. I was just about to fix when this got rolled out.

There are other assertions here: https://bugs.webkit.org/show_bug.cgi?id=54382 .

As far as I remember, we have a &quot;green tree policy&quot; for core buildbots. If the regression reporter and/or the author of the original bug can&apos;t fix the redness immediately, rolling out the patch is absolutely accepted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350692</commentid>
    <comment_count>38</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-02-14 09:02:16 -0800</bug_when>
    <thetext>&gt; As far as I remember, we have a &quot;green tree policy&quot; for core buildbots. If the regression reporter and/or the author of the original bug can&apos;t fix the redness immediately, rolling out the patch is absolutely accepted.

This is generally incorrect. If a bot can&apos;t be green most of the time, it&apos;s removed from core bots - this is why we easily accept new bots as core ones. See e.g. &lt;http://www.mail-archive.com/webkit-dev@lists.webkit.org/msg14352.html&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350693</commentid>
    <comment_count>39</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-02-14 09:04:10 -0800</bug_when>
    <thetext>Or bug 51804 comment 11.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350696</commentid>
    <comment_count>40</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-14 09:14:50 -0800</bug_when>
    <thetext>(In reply to comment #38)
&gt; &gt; As far as I remember, we have a &quot;green tree policy&quot; for core buildbots. If the regression reporter and/or the author of the original bug can&apos;t fix the redness immediately, rolling out the patch is absolutely accepted.
&gt; 
&gt; This is generally incorrect. If a bot can&apos;t be green most of the time, it&apos;s removed from core bots - this is why we easily accept new bots as core ones. See e.g. &lt;http://www.mail-archive.com/webkit-dev@lists.webkit.org/msg14352.html&gt;.

Could you clarify what does this mean in this situation? What would the committer/reviewer and gardener do?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350700</commentid>
    <comment_count>41</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-02-14 09:21:17 -0800</bug_when>
    <thetext>I didn&apos;t make any comments about this specific situation. I was answering a general statement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350706</commentid>
    <comment_count>42</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2011-02-14 09:31:46 -0800</bug_when>
    <thetext>(In reply to comment #38)
&gt; &gt; As far as I remember, we have a &quot;green tree policy&quot; for core buildbots. If the regression reporter and/or the author of the original bug can&apos;t fix the redness immediately, rolling out the patch is absolutely accepted.
&gt; 
&gt; This is generally incorrect. If a bot can&apos;t be green most of the time, it&apos;s removed from core bots - this is why we easily accept new bots as core ones. See e.g. &lt;http://www.mail-archive.com/webkit-dev@lists.webkit.org/msg14352.html&gt;.

These are orthogonal issues. Bots (core or not), should be green as much as possible, and one widely accepted way of keeping them that way is to rollout changes that break them if the author is neither around nor trying to fix the issue (or if the maintainer of the bot cannot know this because that person is not online). Core bots are removed from the core set when their maintainers cannot or do not want to keep them green, which is a completely different issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350708</commentid>
    <comment_count>43</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-02-14 09:36:05 -0800</bug_when>
    <thetext>(In reply to comment #38)
&gt; &gt; As far as I remember, we have a &quot;green tree policy&quot; for core buildbots. If the regression reporter and/or the author of the original bug can&apos;t fix the redness immediately, rolling out the patch is absolutely accepted.
&gt; 
&gt; This is generally incorrect. If a bot can&apos;t be green most of the time, it&apos;s removed from core bots - this is why we easily accept new bots as core ones. See e.g. &lt;http://www.mail-archive.com/webkit-dev@lists.webkit.org/msg14352.html&gt;.

I agree, this is generally incorrect, but imho in this situation it&apos;s correct.
It wasn&apos;t a port specific error, but a general regression which broke GTK Linux
32-bit Debug and GTK Linux 64-bit Debug core builders. And it would have broken
Leopard Intel Debug (Tests) bot if the Leopard build wouldn&apos;t have been broken.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350718</commentid>
    <comment_count>44</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-14 09:52:44 -0800</bug_when>
    <thetext>Guys, with all the debating back and forth I’ve lost track of what the bug is. Where can I find information about the bug so I can re-land this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350725</commentid>
    <comment_count>45</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-14 09:58:49 -0800</bug_when>
    <thetext>(In reply to comment #43)
&gt; It wasn&apos;t a port specific error, but a general regression which broke GTK Linux
&gt; 32-bit Debug and GTK Linux 64-bit Debug core builders. And it would have broken
&gt; Leopard Intel Debug (Tests) bot if the Leopard build wouldn&apos;t have been broken.

How do you know that? Are you trying to say it affects all debug builds?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350726</commentid>
    <comment_count>46</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-14 10:00:23 -0800</bug_when>
    <thetext>I do think folks might have been a little quick to roll out. As far as I can tell nobody tried to contact me so I could fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350728</commentid>
    <comment_count>47</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-02-14 10:04:49 -0800</bug_when>
    <thetext>(In reply to comment #45)
&gt; How do you know that? Are you trying to say it affects all debug builds?
Yes, I think, it affects all debug builds:
-  Comment #31 - Snow Leopard (relase bot)
- https://bugs.webkit.org/show_bug.cgi?id=54386 - GTK debug bot
- https://bugs.webkit.org/show_bug.cgi?id=54382 - Qt debug bot</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350732</commentid>
    <comment_count>48</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-14 10:09:04 -0800</bug_when>
    <thetext>(In reply to comment #46)
&gt; I do think folks might have been a little quick to roll out. As far as I can tell nobody tried to contact me so I could fix it.

I tried to contact you and ap in the IRC after checking the issue, anyway, sorry for the noise about the rollout policy.

Going back to the issue, it caused assertions in Qt, Gtk and SnowLeopard, you can check the stack traces here:

http://webkit-bots.igalia.com/amd64/svn_78458.core-when_1297677236-_-who_DumpRenderTree-_-why_11.trace.html

http://webkit-bots.igalia.com/amd64/svn_78458.core-when_1297677247-_-who_DumpRenderTree-_-why_11.trace.html

http://build.webkit.org/results/SnowLeopard%20Intel%20Release%20(Tests)/r78464%20(25297)/http/tests/xmlhttprequest/cache-override-crash-log.txt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350735</commentid>
    <comment_count>49</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-02-14 10:15:55 -0800</bug_when>
    <thetext>(In reply to comment #46)
&gt; I do think folks might have been a little quick to roll out. As far as I can tell nobody tried to contact me so I could fix it.

Comment #30 was the first feedback about this bug at 2011-02-13 20:29:59 PST and Alejandro reverted the patch at 2011-02-14 04:32:17 PST. Of course, you
can&apos;t answer in the middle of the night. So I think rolling out was better 
than waiting for morning.

But now let&apos;s go to the bug. ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350749</commentid>
    <comment_count>50</comment_count>
      <attachid>82333</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-02-14 10:30:18 -0800</bug_when>
    <thetext>Created attachment 82333
Qt crash log of http/tests/security/xssAuditor/img-onerror-non-ASCII-char2-default-encoding.html (r78451) on 32 bit in debug mode

I attached Qt crash log to help debugging.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350846</commentid>
    <comment_count>51</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-14 13:23:53 -0800</bug_when>
    <thetext>Committed r78499: &lt;http://trac.webkit.org/changeset/78499&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350849</commentid>
    <comment_count>52</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-14 13:26:16 -0800</bug_when>
    <thetext>Turns out there was just a single line of code missing. I caused the regression with a code change I made after my last run of tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350905</commentid>
    <comment_count>53</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-14 14:58:05 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/78499 might have broken GTK Linux 64-bit Debug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350956</commentid>
    <comment_count>54</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-14 16:06:33 -0800</bug_when>
    <thetext>I&apos;m afraid it is still causing crashes in GTK+, you can check them here:

http://webkit-bots.igalia.com/amd64/svn_78515.core-when_1297727606-_-who_DumpRenderTree-_-why_11.trace.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351143</commentid>
    <comment_count>55</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-02-15 01:17:05 -0800</bug_when>
    <thetext>And on Chromium bots: https://bugs.webkit.org/show_bug.cgi?id=54418</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351151</commentid>
    <comment_count>56</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2011-02-15 02:03:50 -0800</bug_when>
    <thetext>Now it&apos;s also causing crashes on SnowLeopard bots:

SnowLeopard Intel Release (WebKit2 Tests):
http://build.webkit.org/builders/SnowLeopard%20Intel%20Release%20(Tests)/builds/25337/steps/layout-test/logs/stdio

SnowLeopard Intel Release (WebKit2 Tests):
http://build.webkit.org/builders/SnowLeopard%20Intel%20Release%20(WebKit2%20Tests)/builds/8540/steps/layout-test/logs/stdio

In case it helps, I&apos;m pasting right here the full backtrace as got from the GTK 32-bit Debug bot:

warning: Can&apos;t read pathname for load map: Input/output error.
Core was generated by `/home/slave/webkitgtk/gtk-linux-32-debug/build/WebKitBuild/Debug/Programs/DumpR&apos;.
Program terminated with signal 11, Segmentation fault.
#0  0xf5dd8356 in WebCore::TextCodecUTF8::decode (this=0xe81fff8, bytes=0x0, length=0, flush=true, stopOnError=false, sawError=@0xe882690) at ../../Source/WebCore/platform/text/TextCodecUTF8.cpp:217
217	            ASSERT(count &gt; m_partialSequenceSize);

Thread 1 (Thread 32238):
#0  0xf5dd8356 in WebCore::TextCodecUTF8::decode (this=0xe81fff8, bytes=0x0, length=0, flush=true, stopOnError=false, sawError=@0xe882690) at ../../Source/WebCore/platform/text/TextCodecUTF8.cpp:217
#1  0xf5ca547e in WebCore::TextResourceDecoder::flush (this=0xe882660) at ../../Source/WebCore/loader/TextResourceDecoder.cpp:687
#2  0xf60c8432 in WebCore::XMLHttpRequest::didFinishLoading (this=0xe873368, identifier=5518) at ../../Source/WebCore/xml/XMLHttpRequest.cpp:999
#3  0xf5c55220 in WebCore::DocumentThreadableLoader::didFinishLoading (this=0xe8860e8, identifier=5518) at ../../Source/WebCore/loader/DocumentThreadableLoader.cpp:248
#4  0xf5c55bd5 in WebCore::DocumentThreadableLoader::loadRequest (this=0xe8860e8, request=..., securityCheck=WebCore::DoSecurityCheck) at ../../Source/WebCore/loader/DocumentThreadableLoader.cpp:362
#5  0xf5c53e2f in WebCore::DocumentThreadableLoader::DocumentThreadableLoader (this=0xe8860e8, document=0xe6e53e0, client=0xe873374, blockingBehavior=WebCore::DocumentThreadableLoader::LoadSynchronously, request=..., options=...) at ../../Source/WebCore/loader/DocumentThreadableLoader.cpp:76
#6  0xf5c5365f in WebCore::DocumentThreadableLoader::loadResourceSynchronously (document=0xe6e53e0, request=..., client=..., options=...) at ../../Source/WebCore/loader/DocumentThreadableLoader.cpp:53
#7  0xf5ca5e6a in WebCore::ThreadableLoader::loadResourceSynchronously (context=0xe6e5418, request=..., client=..., options=...) at ../../Source/WebCore/loader/ThreadableLoader.cpp:69
#8  0xf60c6eed in WebCore::XMLHttpRequest::createRequest (this=0xe873368, ec=@0xffaab3c0) at ../../Source/WebCore/xml/XMLHttpRequest.cpp:671
#9  0xf60c64c4 in WebCore::XMLHttpRequest::send (this=0xe873368, body=..., ec=@0xffaab3c0) at ../../Source/WebCore/xml/XMLHttpRequest.cpp:543
#10 0xf60c5f68 in WebCore::XMLHttpRequest::send (this=0xe873368, ec=@0xffaab3c0) at ../../Source/WebCore/xml/XMLHttpRequest.cpp:483
#11 0xf58144bd in WebCore::JSXMLHttpRequest::send (this=0xf1e0a240, exec=0xf1e8b080) at ../../Source/WebCore/bindings/js/JSXMLHttpRequestCustom.cpp:120
#12 0xf62da9ac in WebCore::jsXMLHttpRequestPrototypeFunctionSend (exec=0xf1e8b080) at DerivedSources/WebCore/JSXMLHttpRequest.cpp:486
#13 0xf253e8f6 in ?? ()
#14 0xf6466976 in JSC::JITCode::execute(JSC::RegisterFile*, JSC::ExecState*, JSC::JSGlobalData*) () from /home/slave/webkitgtk/gtk-linux-32-debug/build/WebKitBuild/Debug/.libs/libwebkitgtk-1.0.so.0
#15 0xf64637fe in JSC::Interpreter::execute (this=0x8d8ea70, program=0xe7ec858, callFrame=0xe867bb4, scopeChain=0xe8266a0, thisObj=0xf1e00000) at ../../Source/JavaScriptCore/interpreter/Interpreter.cpp:780
#16 0xf6502c09 in JSC::evaluate (exec=0xe867bb4, scopeChain=..., source=..., thisValue=...) at ../../Source/JavaScriptCore/runtime/Completion.cpp:62
#17 0xf57f65f9 in WebCore::JSMainThreadExecState::evaluate (exec=0xe867bb4, chain=..., source=..., thisValue=...) at ../../Source/WebCore/bindings/js/JSMainThreadExecState.h:54
#18 0xf581bd3a in WebCore::ScriptController::evaluateInWorld (this=0x8a386bc, sourceCode=..., world=0x8d8f450) at ../../Source/WebCore/bindings/js/ScriptController.cpp:141
#19 0xf581becc in WebCore::ScriptController::evaluate (this=0x8a386bc, sourceCode=...) at ../../Source/WebCore/bindings/js/ScriptController.cpp:164
#20 0xf584512b in WebCore::ScriptController::executeScript (this=0x8a386bc, sourceCode=...) at ../../Source/WebCore/bindings/ScriptControllerBase.cpp:59
#21 0xf59f8f05 in WebCore::ScriptElement::executeScript (this=0xe851604, sourceCode=...) at ../../Source/WebCore/dom/ScriptElement.cpp:216
#22 0xf5b678da in WebCore::HTMLScriptRunner::runScript (this=0xe7eca40, script=0xe8515c0, scriptStartPosition=...) at ../../Source/WebCore/html/parser/HTMLScriptRunner.cpp:317
#23 0xf5b66cf1 in WebCore::HTMLScriptRunner::execute (this=0xe7eca40, scriptElement=..., scriptStartPosition=...) at ../../Source/WebCore/html/parser/HTMLScriptRunner.cpp:173
#24 0xf5b5b357 in WebCore::HTMLDocumentParser::runScriptsForPausedTreeBuilder (this=0xe8573f8) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:200
#25 0xf5b5b6ce in WebCore::HTMLDocumentParser::pumpTokenizer (this=0xe8573f8, mode=WebCore::HTMLDocumentParser::AllowYield) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:250
#26 0xf5b5b193 in WebCore::HTMLDocumentParser::pumpTokenizerIfPossible (this=0xe8573f8, mode=WebCore::HTMLDocumentParser::AllowYield) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:170
#27 0xf5b5bad9 in WebCore::HTMLDocumentParser::append (this=0xe8573f8, source=...) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:331
#28 0xf596046c in WebCore::DecodedDataDocumentParser::appendBytes (this=0xe8573f8, writer=0xe7a6720, data=0xe831680 &quot;ply.xml\&quot;, true);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.setRequestHeader(\&quot;If-Range\&quot;, eTag);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.setRequestHeader(\&quot;Range\&quot;, \&quot;bytes=52-59\&quot;);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.send(null);\n          } else if (asyncStep == 10) {\n     &quot;..., length=1294, shouldFlush=false) at ../../Source/WebCore/dom/DecodedDataDocumentParser.cpp:54
#29 0xf5c572f9 in WebCore::DocumentWriter::addData (this=0xe7a6720, str=0xe831680 &quot;ply.xml\&quot;, true);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.setRequestHeader(\&quot;If-Range\&quot;, eTag);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.setRequestHeader(\&quot;Range\&quot;, \&quot;bytes=52-59\&quot;);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.send(null);\n          } else if (asyncStep == 10) {\n     &quot;..., len=1294, flush=false) at ../../Source/WebCore/loader/DocumentWriter.cpp:201
#30 0xf5c4d5b8 in WebCore::DocumentLoader::commitData (this=0xe7a6678, bytes=0xe831680 &quot;ply.xml\&quot;, true);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.setRequestHeader(\&quot;If-Range\&quot;, eTag);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.setRequestHeader(\&quot;Range\&quot;, \&quot;bytes=52-59\&quot;);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.send(null);\n          } else if (asyncStep == 10) {\n     &quot;..., length=1294) at ../../Source/WebCore/loader/DocumentLoader.cpp:316
#31 0xf56a68dd in WebKit::FrameLoaderClient::committedLoad (this=0x8a37400, loader=0xe7a6678, data=0xe831680 &quot;ply.xml\&quot;, true);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.setRequestHeader(\&quot;If-Range\&quot;, eTag);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.setRequestHeader(\&quot;Range\&quot;, \&quot;bytes=52-59\&quot;);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.send(null);\n          } else if (asyncStep == 10) {\n     &quot;..., length=1294) at ../../Source/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp:267
#32 0xf5c4d49c in WebCore::DocumentLoader::commitLoad (this=0xe7a6678, data=0xe831680 &quot;ply.xml\&quot;, true);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.setRequestHeader(\&quot;If-Range\&quot;, eTag);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.setRequestHeader(\&quot;Range\&quot;, \&quot;bytes=52-59\&quot;);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.send(null);\n          } else if (asyncStep == 10) {\n     &quot;..., length=1294) at ../../Source/WebCore/loader/DocumentLoader.cpp:302
#33 0xf5c4d67a in WebCore::DocumentLoader::receivedData (this=0xe7a6678, data=0xe831680 &quot;ply.xml\&quot;, true);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.setRequestHeader(\&quot;If-Range\&quot;, eTag);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.setRequestHeader(\&quot;Range\&quot;, \&quot;bytes=52-59\&quot;);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.send(null);\n          } else if (asyncStep == 10) {\n     &quot;..., length=1294) at ../../Source/WebCore/loader/DocumentLoader.cpp:328
#34 0xf5c8e408 in WebCore::MainResourceLoader::addData (this=0xe84ee90, data=0xe831680 &quot;ply.xml\&quot;, true);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.setRequestHeader(\&quot;If-Range\&quot;, eTag);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.setRequestHeader(\&quot;Range\&quot;, \&quot;bytes=52-59\&quot;);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.send(null);\n          } else if (asyncStep == 10) {\n     &quot;..., length=1294, allAtOnce=false) at ../../Source/WebCore/loader/MainResourceLoader.cpp:158
#35 0xf5c9a249 in WebCore::ResourceLoader::didReceiveData (this=0xe84ee90, data=0xe831680 &quot;ply.xml\&quot;, true);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.setRequestHeader(\&quot;If-Range\&quot;, eTag);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.setRequestHeader(\&quot;Range\&quot;, \&quot;bytes=52-59\&quot;);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.send(null);\n          } else if (asyncStep == 10) {\n     &quot;..., length=1294, lengthReceived=9186, allAtOnce=false) at ../../Source/WebCore/loader/ResourceLoader.cpp:279
#36 0xf5c8f548 in WebCore::MainResourceLoader::didReceiveData (this=0xe84ee90, data=0xe831680 &quot;ply.xml\&quot;, true);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.setRequestHeader(\&quot;If-Range\&quot;, eTag);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.setRequestHeader(\&quot;Range\&quot;, \&quot;bytes=52-59\&quot;);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.send(null);\n          } else if (asyncStep == 10) {\n     &quot;..., length=1294, lengthReceived=9186, allAtOnce=false) at ../../Source/WebCore/loader/MainResourceLoader.cpp:443
#37 0xf5c9ab74 in WebCore::ResourceLoader::didReceiveData (this=0xe84ee90, data=0xe831680 &quot;ply.xml\&quot;, true);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.setRequestHeader(\&quot;If-Range\&quot;, eTag);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.setRequestHeader(\&quot;Range\&quot;, \&quot;bytes=52-59\&quot;);\n&quot;, &apos; &apos; &lt;repeats 12 times&gt;, &quot;req.send(null);\n          } else if (asyncStep == 10) {\n     &quot;..., length=1294, lengthReceived=9186) at ../../Source/WebCore/loader/ResourceLoader.cpp:430
#38 0xf56712c5 in WebCore::readCallback (source=0x9ba0598, asyncResult=0xe4d84010, data=0x0) at ../../Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:788
#39 0xf4c8e245 in async_ready_callback_wrapper (source_object=0x9ba0598, res=0xe4d84010, user_data=0x0) at /build/buildd-glib2.0_2.27.91-1-i386-BodI3i/glib2.0-2.27.91/./gio/ginputstream.c:470
#40 0xf4ca0050 in g_simple_async_result_complete (simple=0xe4d84010) at /build/buildd-glib2.0_2.27.91-1-i386-BodI3i/glib2.0-2.27.91/./gio/gsimpleasyncresult.c:747
#41 0xf4d74b58 in read_async_done (stream=0x9ba0598) at soup-http-input-stream.c:723
#42 0xf4d7417a in soup_http_input_stream_got_chunk (msg=0xb872f68, chunk_buffer=0xe859560, stream=0x9ba0598) at soup-http-input-stream.c:299
#43 0xf4c1508c in g_cclosure_marshal_VOID__BOXED (closure=0xe8226f0, return_value=0x0, n_param_values=2, param_values=0xb093850, invocation_hint=0xffaabf10, marshal_data=0xf4d74090) at /build/buildd-glib2.0_2.27.91-1-i386-BodI3i/glib2.0-2.27.91/./gobject/gmarshal.c:568
#44 0xf4c04d02 in g_closure_invoke (closure=0xe8226f0, return_value=0x0, n_param_values=2, param_values=0xb093850, invocation_hint=0xffaabf10) at /build/buildd-glib2.0_2.27.91-1-i386-BodI3i/glib2.0-2.27.91/./gobject/gclosure.c:767
#45 0xf4c1e48d in signal_emit_unlocked_R (node=&lt;value optimized out&gt;, detail=&lt;value optimized out&gt;, instance=0xb872f68, emission_return=0x0, instance_and_params=0xb093850) at /build/buildd-glib2.0_2.27.91-1-i386-BodI3i/glib2.0-2.27.91/./gobject/gsignal.c:3252
#46 0xf4c1fafc in g_signal_emit_valist (instance=0xb872f68, signal_id=224, detail=0, var_args=0xffaac0e0 &quot;\231a\327\364\244\274\331\364\270\341\252\377&apos;\303\327\364h/\207\v`\225\205\016\016\005&quot;) at /build/buildd-glib2.0_2.27.91-1-i386-BodI3i/glib2.0-2.27.91/./gobject/gsignal.c:2983
#47 0xf4c20212 in g_signal_emit (instance=0xb872f68, signal_id=224, detail=0) at /build/buildd-glib2.0_2.27.91-1-i386-BodI3i/glib2.0-2.27.91/./gobject/gsignal.c:3040
#48 0xf4d761c6 in soup_message_got_chunk (msg=0xb872f68, chunk=0xe859560) at soup-message.c:1011
#49 0xf4d7c327 in read_body_chunk (msg=&lt;value optimized out&gt;) at soup-message-io.c:487
#50 0xf4d7ca7f in io_read (sock=0x8e6ed68, msg=0xb872f68) at soup-message-io.c:958
#51 0xf4d7d500 in io_unpause_internal (msg=0xb872f68) at soup-message-io.c:1207
#52 0xf4b504e1 in g_idle_dispatch (source=0xe83ab28, callback=0xbbadbeef, user_data=0xb872f68) at /build/buildd-glib2.0_2.27.91-1-i386-BodI3i/glib2.0-2.27.91/./glib/gmain.c:4536
#53 0xf4b527a5 in g_main_dispatch (context=0x89f0e20) at /build/buildd-glib2.0_2.27.91-1-i386-BodI3i/glib2.0-2.27.91/./glib/gmain.c:2440
#54 g_main_context_dispatch (context=0x89f0e20) at /build/buildd-glib2.0_2.27.91-1-i386-BodI3i/glib2.0-2.27.91/./glib/gmain.c:3013
#55 0xf4b56d58 in g_main_context_iterate (context=0x89f0e20, block=&lt;value optimized out&gt;, dispatch=1, self=0x89cb0a8) at /build/buildd-glib2.0_2.27.91-1-i386-BodI3i/glib2.0-2.27.91/./glib/gmain.c:3091
#56 0xf4b57297 in g_main_loop_run (loop=0xe754888) at /build/buildd-glib2.0_2.27.91-1-i386-BodI3i/glib2.0-2.27.91/./glib/gmain.c:3299
#57 0xf5014dc9 in IA__gtk_main () at /build/buildd-gtk+2.0_2.20.1-1-i386-Ixfflh/gtk+2.0-2.20.1/gtk/gtkmain.c:1219
#58 0x0806128e in runTest (testPathOrURL=...) at ../../Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:659
#59 0x080609ad in runTestingServerLoop () at ../../Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:473
#60 0x08062796 in main (argc=2, argv=0xffaaeda4) at ../../Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:1111


As for GTK, I&apos;m skipping the test while it&apos;s not fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351178</commentid>
    <comment_count>57</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-02-15 03:27:04 -0800</bug_when>
    <thetext>I fixed the crash in http/tests/xmlhttprequest/cache-override.html

There is a followup in https://bugs.webkit.org/show_bug.cgi?id=54444 which Darin might want consider.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351181</commentid>
    <comment_count>58</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-02-15 03:27:34 -0800</bug_when>
    <thetext>In http://trac.webkit.org/changeset/78541 I mean.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81441</attachid>
            <date>2011-02-06 18:49:03 -0800</date>
            <delta_ts>2011-02-06 20:18:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53898-20110206184901.patch</filename>
            <type>text/plain</type>
            <size>39100</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzc3ODIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTEtMDItMDYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBidWlsdC1pbiBkZWNvZGVy
IGZvciBVVEYtOCBmb3IgaW1wcm92ZWQgcGVyZm9ybWFuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzODk4CisKKyAgICAgICAgKiB3dGYvdW5pY29k
ZS9Vbmljb2RlTWFjcm9zRnJvbUlDVS5oOiBBZGRlZCBVOF9NQVhfTEVOR1RIIGFuZAorICAgICAg
ICBVOF9BUFBFTkRfVU5TQUZFLiBBbHNvIGZpeGVkIGhlYWRlci4KKwogMjAxMS0wMi0wNiAgQW50
dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFj
aWVqIFN0YWNob3dpYWsuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUv
VW5pY29kZU1hY3Jvc0Zyb21JQ1UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL3VuaWNvZGUvVW5pY29kZU1hY3Jvc0Zyb21JQ1UuaAkocmV2aXNpb24gNzc3NzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvVW5pY29kZU1hY3Jvc0Zyb21JQ1Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMSwyNSArMSw1IEBACiAvKgogICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDA0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFu
ZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogIENvcHlyaWdodCAoQykgMjAwNiBH
ZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgotICogIENvcHlyaWdodCAoQykgMjAwNiBB
bGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA3
IEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDA4IErDvHJnIEJpbGxldGVyIDxqQGJpdHJvbi5jaD4KLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDggRG9taW5payBSw7Z0dHNjaGVzIDxkb21pbmlrLnJvZXR0c2NoZXNAYWNjZXNzLWNvbXBh
bnkuY29tPgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KICAqCiAgKi8KIApAQCAtOTcsNCArNzcsMjUgQEAKIAogI2RlZmluZSBVX01B
U0soeCkgKCh1aW50MzJfdCkxPDwoeCkpCiAKKyNkZWZpbmUgVThfTUFYX0xFTkdUSCA0CisKKyNk
ZWZpbmUgVThfQVBQRU5EX1VOU0FGRShzLCBpLCBjKSB7IFwKKyAgICBpZigodWludDMyX3QpKGMp
PD0weDdmKSB7IFwKKyAgICAgICAgKHMpWyhpKSsrXT0odWludDhfdCkoYyk7IFwKKyAgICB9IGVs
c2UgeyBcCisgICAgICAgIGlmKCh1aW50MzJfdCkoYyk8PTB4N2ZmKSB7IFwKKyAgICAgICAgICAg
IChzKVsoaSkrK109KHVpbnQ4X3QpKCgoYyk+PjYpfDB4YzApOyBcCisgICAgICAgIH0gZWxzZSB7
IFwKKyAgICAgICAgICAgIGlmKCh1aW50MzJfdCkoYyk8PTB4ZmZmZikgeyBcCisgICAgICAgICAg
ICAgICAgKHMpWyhpKSsrXT0odWludDhfdCkoKChjKT4+MTIpfDB4ZTApOyBcCisgICAgICAgICAg
ICB9IGVsc2UgeyBcCisgICAgICAgICAgICAgICAgKHMpWyhpKSsrXT0odWludDhfdCkoKChjKT4+
MTgpfDB4ZjApOyBcCisgICAgICAgICAgICAgICAgKHMpWyhpKSsrXT0odWludDhfdCkoKCgoYyk+
PjEyKSYweDNmKXwweDgwKTsgXAorICAgICAgICAgICAgfSBcCisgICAgICAgICAgICAocylbKGkp
KytdPSh1aW50OF90KSgoKChjKT4+NikmMHgzZil8MHg4MCk7IFwKKyAgICAgICAgfSBcCisgICAg
ICAgIChzKVsoaSkrK109KHVpbnQ4X3QpKCgoYykmMHgzZil8MHg4MCk7IFwKKyAgICB9IFwKK30K
KwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA3Nzc4MikKKysrIFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDExLTAyLTA2
ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYnVpbHQtaW4gZGVjb2RlciBmb3IgVVRGLTgg
Zm9yIGltcHJvdmVkIHBlcmZvcm1hbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01Mzg5OAorCisgICAgICAgIENvcnJlY3QgYmVoYXZpb3IgaXMgY292
ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIEFuZHJvaWQubWs6IEFkZGVkIFRl
eHRDb2RlY1VURjguCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IERpdHRvLgorICAgICAgICAq
IEdOVW1ha2VmaWxlLmFtOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IERpdHRvLgor
ICAgICAgICAqIFdlYkNvcmUucHJvOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvajogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNV
LmNwcDogUmVtb3ZlZCByZWdpc3RyYXRpb24gb2YgVVRGLTgKKyAgICAgICAgc2luY2UgdGhhdCdz
IG5vdyBoYW5kbGVkIGJ5IHRoZSBidWlsdC1pbiBVVEYtOCBjb2RlYy4KKyAgICAgICAgKFdlYkNv
cmU6OlRleHRDb2RlY0lDVTo6cmVnaXN0ZXJFbmNvZGluZ05hbWVzKTogUmVuYW1lZCB0byByZW1v
dmUKKyAgICAgICAgdGhlIHdvcmQgImV4dGVuZGVkIiBzaW5jZSBhbGwgY29kZWNzIGZyb20gSUNV
IGFyZSBub3cgZXh0ZW5kZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNJQ1U6OnJlZ2lz
dGVyQ29kZWNzKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1Uu
aDogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1VURjE2OjpkZWNvZGUpOiBBZGRlZCBhIEZJWE1F
IGFib3V0IG1pc3NpbmcKKyAgICAgICAgZXJyb3IgaGFuZGxpbmcuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L1RleHRDb2RlY1VURjguY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS90
ZXh0L1RleHRDb2RlY1VURjguaDogQWRkZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1Rl
eHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkQmFzZVRleHRD
b2RlY01hcHMpOiBBZGRlZCBUZXh0Q29kZWNVVEY4LCBhbmQKKyAgICAgICAgcmVtb3ZlZCBUZXh0
Q29kZWNJQ1UsIFRleHRDb2RlY0JyZXcsIGFuZCBUZXh0Q29kZWNXaW5DRS4KKyAgICAgICAgKFdl
YkNvcmU6OmV4dGVuZFRleHRDb2RlY01hcHMpOiBVcGRhdGVkIG5hbWVzIGZvcgorICAgICAgICBU
ZXh0Q29kZWNJQ1UgYW5kIFRleHRDb2RlY1dpbkNFLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4
dC9icmV3L1RleHRDb2RlY0JyZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjQnJl
dzo6cmVnaXN0ZXJFbmNvZGluZ05hbWVzKTogUmVuYW1lZCB0byByZW1vdmUKKyAgICAgICAgdGhl
IHdvcmQgImV4dGVuZGVkIiBzaW5jZSBhbGwgY29kZWNzIGZyb20gQnJldyBhcmUgbm93IGV4dGVu
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjQnJldzo6cmVnaXN0ZXJDb2RlY3MpOiBE
aXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L2JyZXcvVGV4dENvZGVjQnJldy5oOiBEaXR0
by4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQmFzZUVuY29kaW5nTmFtZXMpOiBS
ZW1vdmVkCisgICAgICAgIHJlZ2lzdHJhdGlvbiBvZiBVVEYtOC4gSXQncyBxdWVzdGlvbmFibGUg
d2hldGhlciB0aGUgb3RoZXIgY29kZWNzCisgICAgICAgIGhlcmUgYXJlIHJlYWxseSBiYXNpYy4g
SWYgd2UgdGhpbmsgdGhleSBxdWFsaWZ5LCB0aGVuIHdlIHNob3VsZAorICAgICAgICByZWdpc3Rl
ciB0aGVtIG9uIG90aGVyIHBsYXRmb3Jtcywgbm90IGp1c3QgR1RLLgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dENvZGVjR3RrOjpyZWdpc3RlckJhc2VDb2RlY3MpOiBEaXR0by4KKworICAgICAgICAq
IHBsYXRmb3JtL3RleHQvd2luY2UvVGV4dENvZGVjV2luQ0UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Z2V0Q29kZVBhZ2UpOiBSZW1vdmVkIHNwZWNpYWwgY2FzZSBmb3IgVVRGLTggc2luY2Ugd2UK
KyAgICAgICAgbm8gbG9uZ2VyIHVzZSB0aGlzIGNvZGVjIGZvciBVVEYtOC4KKyAgICAgICAgKFdl
YkNvcmU6OlRleHRDb2RlY1dpbkNFOjpyZWdpc3RlckVuY29kaW5nTmFtZXMpOiBSZW5hbWVkIHRv
IHJlbW92ZQorICAgICAgICB0aGUgd29yZCAiZXh0ZW5kZWQiIHNpbmNlIGFsbCBjb2RlY3MgZnJv
bSBXaW5DRSBhcmUgbm93IGV4dGVuZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjV2lu
Q0U6OnJlZ2lzdGVyQ29kZWNzKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vdGV4dC93aW5j
ZS9UZXh0Q29kZWNXaW5DRS5oOiBEaXR0by4KKwogMjAxMS0wMi0wMyAgRG9taW5pYyBDb29uZXkg
IDxkb21pbmljY0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xh
emtvdi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvQW5kcm9pZC5tawkocmV2aXNpb24gNzc3NzgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9BbmRyb2lkLm1rCSh3b3JraW5nIGNvcHkpCkBAIC02MjgsNiArNjI4LDcgQEAgTE9DQUxfU1JD
X0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJ
Q1UuY3BwIFwKIAlwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHAgXAogCXBsYXRmb3Jt
L3RleHQvVGV4dENvZGVjVVRGMTYuY3BwIFwKKwlwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjgu
Y3BwIFwKIAlwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VzZXJEZWZpbmVkLmNwcCBcCiAJcGxhdGZv
cm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwIFwKIAlwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0Rl
dGVjdG9ySUNVLmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gNzc3Nzgp
CisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTI5
OSw2ICsxMjk5LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL3RleHQvVGV4
dENvZGVjLmNwcAogICAgIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcAogICAgIHBs
YXRmb3JtL3RleHQvVGV4dENvZGVjVVRGMTYuY3BwCisgICAgcGxhdGZvcm0vdGV4dC9UZXh0Q29k
ZWNVVEY4LmNwcAogICAgIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuY3BwCiAg
ICAgcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwCiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0
RW5jb2RpbmdSZWdpc3RyeS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA3
Nzc3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjQ1LDYgKzI2NDUsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dENvZGVjVVRGMTYuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0Q29kZWNVVEY4LmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
Q29kZWNVVEY4LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dERpcmVjdGlv
bi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0b3IuaCBcCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA3Nzc3OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzM0OCw2ICszMzQ4LDggQEAKICAgICAgICAg
ICAgICdwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vdGV4
dC9UZXh0Q29kZWNVVEYxNi5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L1RleHRDb2Rl
Y1VURjguY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjguaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vdGV4dC9UZXh0RGlyZWN0aW9uLmgnLApJbmRleDogU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5w
cm8JKHJldmlzaW9uIDc3Nzc4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtp
bmcgY29weSkKQEAgLTEyNzMsNiArMTI3Myw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3Jt
L3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcCBcCiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNV
c2VyRGVmaW5lZC5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGMTYuY3BwIFwK
KyAgICBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjguY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0
L1RleHRFbmNvZGluZy5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0
b3JOb25lLmNwcCBcCiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAg
XApAQCAtMjIyOCw2ICsyMjI5LDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGxhdGZvcm0vdGV4dC9U
ZXh0Q29kZWNMYXRpbjEuaCBcCiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5l
ZC5oIFwKICAgICBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmggXAorICAgIHBsYXRmb3Jt
L3RleHQvVGV4dENvZGVjVVRGOC5oIFwKICAgICBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5o
IFwKICAgICBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmggXAogICAgIHBsYXRm
b3JtL3RleHQvVGV4dFN0cmVhbS5oIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA3Nzc3OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMDM2OSw2
ICszMDM2OSwxNCBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCisJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cdGV4dFxUZXh0Q29kZWNVVEY4LmgiCisJCQkJCT4KKwkJCQk8
L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVx0ZXh0XFRl
eHRDb2RlY1VURjguY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cdGV4dFxUZXh0Q29kZWNVVEYxNi5oIgogCQkJCQk+CiAJ
CQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNzc3NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI4NjQsNiAr
Mjg2NCw4IEBACiAJCTkzM0ExNEFBMEI3RDFEMDkwMEE1M0ZGRCAvKiBET01UZXh0RXZlbnQubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzNBMTRBOTBC
N0QxRDA5MDBBNTNGRkQgLyogRE9NVGV4dEV2ZW50Lm1tICovOyB9OwogCQk5MzNBMTRCODBCN0Qx
RDUyMDBBNTNGRkQgLyogSlNUZXh0RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzQTE0QjYwQjdEMUQ1MjAwQTUzRkZEIC8qIEpTVGV4dEV2
ZW50LmNwcCAqLzsgfTsKIAkJOTMzQTE0QjkwQjdEMUQ1MjAwQTUzRkZEIC8qIEpTVGV4dEV2ZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzNBMTRC
NzBCN0QxRDUyMDBBNTNGRkQgLyogSlNUZXh0RXZlbnQuaCAqLzsgfTsKKwkJOTM0M0NCODExMkYy
NUU1MTAwMzNDNUVFIC8qIFRleHRDb2RlY1VURjguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM0M0NCN0YxMkYyNUU1MTAwMzNDNUVFIC8qIFRleHRD
b2RlY1VURjguY3BwICovOyB9OworCQk5MzQzQ0I4MjEyRjI1RTUxMDAzM0M1RUUgLyogVGV4dENv
ZGVjVVRGOC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTM0M0NCODAxMkYyNUU1MTAwMzNDNUVFIC8qIFRleHRDb2RlY1VURjguaCAqLzsgfTsKIAkJOTM0
NDJDOUUwRDJCMzM1QzAwMzM4RkY5IC8qIEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzQ0MkM5RDBEMkIzMzVD
MDAzMzhGRjkgLyogSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24uaCAqLzsgfTsKIAkJOTM0NDJDQTAw
RDJCMzM2MDAwMzM4RkY5IC8qIEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNDQyQzlGMEQyQjMzNjAwMDMz
OEZGOSAvKiBIVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5jcHAgKi87IH07CiAJCTkzNDkwN0U0MTI1
QkJCQzgwMDdGMjNBMCAvKiBHcmFwaGljc0NvbnRleHRDRy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM0OTA3RTMxMjVCQkJDODAwN0YyM0EwIC8qIEdy
YXBoaWNzQ29udGV4dENHLmggKi87IH07CkBAIC05Mjc5LDYgKzkyODEsOCBAQAogCQk5MzNBMTRB
OTBCN0QxRDA5MDBBNTNGRkQgLyogRE9NVGV4dEV2ZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NVGV4dEV2ZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5MzNBMTRCNjBCN0QxRDUyMDBBNTNGRkQgLyogSlNUZXh0RXZlbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUZXh0RXZlbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzNBMTRCNzBCN0QxRDUyMDBBNTNGRkQgLyogSlNU
ZXh0RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNUZXh0RXZlbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTM0M0NCN0YxMkYyNUU1MTAwMzNDNUVF
IC8qIFRleHRDb2RlY1VURjguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVGV4dENvZGVjVVRGOC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzNDND
QjgwMTJGMjVFNTEwMDMzQzVFRSAvKiBUZXh0Q29kZWNVVEY4LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRleHRDb2RlY1VURjguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTM0NDJDOUQwRDJCMzM1QzAwMzM4RkY5IC8qIEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxUYWJsZVJvd3NDb2xsZWN0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNDQyQzlGMEQyQjMzNjAwMDMz
OEZGOSAvKiBIVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBIVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTkzNDkwN0UzMTI1QkJCQzgwMDdGMjNBMCAvKiBHcmFwaGljc0Nv
bnRleHRDRy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRl
eHRDRy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc2MjksNiArMTc2MzMsOCBA
QAogCQkJCUIyQzNEQTEwMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNVc2VyRGVmaW5lZC5o
ICovLAogCQkJCUIyQzNEQTExMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNVVEYxNi5jcHAg
Ki8sCiAJCQkJQjJDM0RBMTIwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY1VURjE2LmggKi8s
CisJCQkJOTM0M0NCN0YxMkYyNUU1MTAwMzNDNUVFIC8qIFRleHRDb2RlY1VURjguY3BwICovLAor
CQkJCTkzNDNDQjgwMTJGMjVFNTEwMDMzQzVFRSAvKiBUZXh0Q29kZWNVVEY4LmggKi8sCiAJCQkJ
QjJDM0RBMTUwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHREaXJlY3Rpb24uaCAqLywKIAkJCQlCMkMz
REExNjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nLmNwcCAqLywKIAkJCQlCMkMzREEx
NzBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nLmggKi8sCkBAIC0yMjQ4MSw2ICsyMjQ4
Nyw3IEBACiAJCQkJQkM5NTg1RTExMkYwOTg5NTAwNzU1ODIxIC8qIFBsYXRmb3JtR2VzdHVyZUV2
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTM0RjVBQjEyRUUzNDNGMDA0RUM1OEQgLyogSW50
UmVjdEhhc2guaCBpbiBIZWFkZXJzICovLAogCQkJCTk3N0UyRENFMTJGMEUyODMwMEMxMzM3OSAv
KiBIVE1MU291cmNlVHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTM0M0NCODIxMkYyNUU1
MTAwMzNDNUVFIC8qIFRleHRDb2RlY1VURjguaCBpbiBIZWFkZXJzICovLAogCQkJCTk3N0UyRTBG
MTJGMEZDOUMwMEMxMzM3OSAvKiBYU1NGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGM0RE
NDUwMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0U0NDEzNDEyRjc0OEUyMDA5Qjg0QjggLyogUmVuZGVyQ29tYmluZVRleHQuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjUxODQsNiArMjUxOTEsNyBAQAogCQkJCUJDOEFFMzRFMTJFQTA5NkEwMEVCM0FF
NiAvKiBTY3JvbGxhYmxlQXJlYS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0RjJEMjA1NTEyRUFF
N0IzMDA1QzI4NzQgLyogSW5zcGVjdG9yQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc3
RTJEQ0QxMkYwRTI4MzAwQzEzMzc5IC8qIEhUTUxTb3VyY2VUcmFja2VyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTkzNDNDQjgxMTJGMjVFNTEwMDMzQzVFRSAvKiBUZXh0Q29kZWNVVEY4LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTk3N0UyRTBFMTJGMEZDOUMwMEMxMzM3OSAvKiBYU1NGaWx0ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzREQ0NEYxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRv
d0JsdXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFNDQxMzMxMkY3NDhFMjAwOUI4NEI4IC8q
IFJlbmRlckNvbWJpbmVUZXh0LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcAkocmV2aXNpb24gNzc3NzgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYwLDE3ICs2MCw3IEBAIHN0YXRpYyBQYXNzT3duUHRyPFRleHRDb2RlYz4gbmV3
VGV4dENvZGUKICAgICByZXR1cm4gbmV3IFRleHRDb2RlY0lDVShlbmNvZGluZyk7CiB9CiAKLXZv
aWQgVGV4dENvZGVjSUNVOjpyZWdpc3RlckJhc2VFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJl
Z2lzdHJhciByZWdpc3RyYXIpCi17Ci0gICAgcmVnaXN0cmFyKCJVVEYtOCIsICJVVEYtOCIpOwot
fQotCi12b2lkIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJCYXNlQ29kZWNzKFRleHRDb2RlY1JlZ2lz
dHJhciByZWdpc3RyYXIpCi17Ci0gICAgcmVnaXN0cmFyKCJVVEYtOCIsIG5ld1RleHRDb2RlY0lD
VSwgMCk7Ci19Ci0KLXZvaWQgVGV4dENvZGVjSUNVOjpyZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdO
YW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQordm9pZCBUZXh0Q29kZWNJQ1U6
OnJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQog
ewogICAgIC8vIFdlIHJlZ2lzdGVyIEhlYnJldyB3aXRoIGxvZ2ljYWwgb3JkZXJpbmcgdXNpbmcg
YSBzZXBhcmF0ZSBuYW1lLgogICAgIC8vIE90aGVyd2lzZSwgdGhpcyB3b3VsZCBzaGFyZSB0aGUg
c2FtZSBjYW5vbmljYWwgbmFtZSBhcyB0aGUKQEAgLTE2Myw3ICsxNTMsNiBAQCB2b2lkIFRleHRD
b2RlY0lDVTo6cmVnaXN0ZXJFeHRlbmRlZEVuY29kCiAgICAgcmVnaXN0cmFyKCJ4LWV1YyIsICJF
VUMtSlAiKTsKICAgICByZWdpc3RyYXIoIngtd2luZG93cy05NDkiLCAid2luZG93cy05NDkiKTsK
ICAgICByZWdpc3RyYXIoIngtdWhjIiwgIndpbmRvd3MtOTQ5Iik7Ci0gICAgcmVnaXN0cmFyKCJ1
dGY4IiwgIlVURi04Iik7CiAgICAgcmVnaXN0cmFyKCJzaGlmdC1qaXMiLCAiU2hpZnRfSklTIik7
CiAKICAgICAvLyBUaGVzZSBhbGlhc2VzIGFyZSBwcmVzZW50IGluIG1vZGVybiB2ZXJzaW9ucyBv
ZiBJQ1UsIGJ1dCB1c2UgZGlmZmVyZW50IGNvZGVjcywgYW5kIGhhdmUgbm8gc3RhbmRhcmQgbmFt
ZXMuCkBAIC0xOTAsNyArMTc5LDcgQEAgdm9pZCBUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyRXh0ZW5k
ZWRFbmNvZAogICAgIC8vIGFuZCBiZWNhdXNlIG9sZGVyIHZlcnNpb25zIG9mIElDVSBkb24ndCBz
dXBwb3J0IElTTy04ODU5LTE2IGVuY29kaW5nIGF0IGFsbC4KIH0KIAotdm9pZCBUZXh0Q29kZWNJ
Q1U6OnJlZ2lzdGVyRXh0ZW5kZWRDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikK
K3ZvaWQgVGV4dENvZGVjSUNVOjpyZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVn
aXN0cmFyKQogewogICAgIC8vIFNlZSBjb21tZW50IGFib3ZlIGluIHJlZ2lzdGVyRW5jb2RpbmdO
YW1lcy4KICAgICByZWdpc3RyYXIoIklTTy04ODU5LTgtSSIsIG5ld1RleHRDb2RlY0lDVSwgMCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmgJKHJl
dmlzaW9uIDc3Nzc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJ
Q1UuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTEgKzM4LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgY2xhc3MgVGV4dENvZGVjSUNVIDogcHVibGljIFRleHRDb2RlYyB7CiAgICAgcHVi
bGljOgotICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckJhc2VFbmNvZGluZ05hbWVzKEVuY29k
aW5nTmFtZVJlZ2lzdHJhcik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmFzZUNvZGVj
cyhUZXh0Q29kZWNSZWdpc3RyYXIpOwotCi0gICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRXh0
ZW5kZWRFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhcik7Ci0gICAgICAgIHN0YXRp
YyB2b2lkIHJlZ2lzdGVyRXh0ZW5kZWRDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKKyAgICAg
ICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJh
cik7CisgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJh
cik7CiAKICAgICAgICAgVGV4dENvZGVjSUNVKGNvbnN0IFRleHRFbmNvZGluZyYpOwogICAgICAg
ICB2aXJ0dWFsIH5UZXh0Q29kZWNJQ1UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dENvZGVjVVRGOC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9UZXh0Q29kZWNVVEY4LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGOC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4LCAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlRleHRDb2RlY1VURjguaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYv
dW5pY29kZS9VVEY4Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY6OlVuaWNvZGU7Cit1c2luZyBu
YW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHNpemVfdCBz
aXplPiBzdHJ1Y3QgTm9uQVNDSUlNYXNrOwordGVtcGxhdGU8PiBzdHJ1Y3QgTm9uQVNDSUlNYXNr
PDQ+IHsKKyAgICBzdGF0aWMgdW5zaWduZWQgdmFsdWUoKSB7IHJldHVybiAweDgwODA4MDgwVTsg
fQorfTsKK3RlbXBsYXRlPD4gc3RydWN0IE5vbkFTQ0lJTWFzazw4PiB7CisgICAgc3RhdGljIHVu
c2lnbmVkIGxvbmcgbG9uZyB2YWx1ZSgpIHsgcmV0dXJuIDB4ODA4MDgwODA4MDgwODA4MFVMTDsg
fQorfTsKKwordGVtcGxhdGU8c2l6ZV90IHNpemU+IHN0cnVjdCBVQ2hhckJ5dGVGaWxsZXI7Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBVQ2hhckJ5dGVGaWxsZXI8ND4geworICAgIHN0YXRpYyB2b2lkIGNv
cHkoVUNoYXIqIGRlc3RpbmF0aW9uLCBjb25zdCB1aW50OF90KiBzb3VyY2UpCisgICAgeworICAg
ICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVswXTsKKyAgICAgICAgZGVzdGluYXRpb25bMV0g
PSBzb3VyY2VbMV07CisgICAgICAgIGRlc3RpbmF0aW9uWzJdID0gc291cmNlWzJdOworICAgICAg
ICBkZXN0aW5hdGlvblszXSA9IHNvdXJjZVszXTsKKyAgICB9Cit9OwordGVtcGxhdGU8PiBzdHJ1
Y3QgVUNoYXJCeXRlRmlsbGVyPDg+IHsKKyAgICBzdGF0aWMgdm9pZCBjb3B5KFVDaGFyKiBkZXN0
aW5hdGlvbiwgY29uc3QgdWludDhfdCogc291cmNlKQorICAgIHsKKyAgICAgICAgZGVzdGluYXRp
b25bMF0gPSBzb3VyY2VbMF07CisgICAgICAgIGRlc3RpbmF0aW9uWzFdID0gc291cmNlWzFdOwor
ICAgICAgICBkZXN0aW5hdGlvblsyXSA9IHNvdXJjZVsyXTsKKyAgICAgICAgZGVzdGluYXRpb25b
M10gPSBzb3VyY2VbM107CisgICAgICAgIGRlc3RpbmF0aW9uWzRdID0gc291cmNlWzRdOworICAg
ICAgICBkZXN0aW5hdGlvbls1XSA9IHNvdXJjZVs1XTsKKyAgICAgICAgZGVzdGluYXRpb25bNl0g
PSBzb3VyY2VbNl07CisgICAgICAgIGRlc3RpbmF0aW9uWzddID0gc291cmNlWzddOworICAgIH0K
K307CisKK1Bhc3NPd25QdHI8VGV4dENvZGVjPiBUZXh0Q29kZWNVVEY4OjpjcmVhdGUoY29uc3Qg
VGV4dEVuY29kaW5nJiwgY29uc3Qgdm9pZCopCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBU
ZXh0Q29kZWNVVEY4KTsKK30KKwordm9pZCBUZXh0Q29kZWNVVEY4OjpyZWdpc3RlckVuY29kaW5n
TmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICByZWdpc3RyYXIo
IlVURi04IiwgIlVURi04Iik7Cit9CisKK3ZvaWQgVGV4dENvZGVjVVRGODo6cmVnaXN0ZXJDb2Rl
Y3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICByZWdpc3RyYXIoIlVURi04
IiwgY3JlYXRlLCAwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbm9uQVNDSUlTZXF1ZW5jZUxl
bmd0aCh1bnNpZ25lZCBjaGFyIGZpcnN0Qnl0ZSkKK3sKKyAgICBBU1NFUlQoIWlzQVNDSUkoZmly
c3RCeXRlKSk7CisgICAgc3dpdGNoIChmaXJzdEJ5dGUgPj4gNCkgeworICAgIGNhc2UgMHhGOgor
ICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIDB4RToKKyAgICAgICAgcmV0dXJuIDM7CisgICAg
fQorICAgIHJldHVybiAyOworfQorCitzdGF0aWMgaW5saW5lIGludCBkZWNvZGVOb25BU0NJSVNl
cXVlbmNlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNlcXVlbmNlLCB1bnNpZ25lZCBsZW5ndGgpCit7
CisgICAgQVNTRVJUKCFpc0FTQ0lJKHNlcXVlbmNlWzBdKSk7CisgICAgaWYgKGxlbmd0aCA9PSAy
KSB7CisgICAgICAgIEFTU0VSVChzZXF1ZW5jZVswXSA8PSAweERGKTsKKyAgICAgICAgaWYgKHNl
cXVlbmNlWzBdIDwgMHhDMikKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKHNl
cXVlbmNlWzFdIDwgMHg4MCB8fCBzZXF1ZW5jZVsxXSA+IDB4QkYpCisgICAgICAgICAgICByZXR1
cm4gLTE7CisgICAgICAgIHJldHVybiAoKHNlcXVlbmNlWzBdIDw8IDYpIHwgc2VxdWVuY2VbMV0p
IC0gMHgwMDAwMzA4MDsKKyAgICB9CisgICAgaWYgKGxlbmd0aCA9PSAzKSB7CisgICAgICAgIEFT
U0VSVChzZXF1ZW5jZVswXSA+PSAweEUwICYmIHNlcXVlbmNlWzBdIDw9IDB4RUYpOworICAgICAg
ICBzd2l0Y2ggKHNlcXVlbmNlWzBdKSB7CisgICAgICAgIGNhc2UgMHhFMDoKKyAgICAgICAgICAg
IGlmIChzZXF1ZW5jZVsxXSA8IDB4QTAgfHwgc2VxdWVuY2VbMV0gPiAweEJGKQorICAgICAgICAg
ICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4RUQ6
CisgICAgICAgICAgICBpZiAoc2VxdWVuY2VbMV0gPCAweDgwIHx8IHNlcXVlbmNlWzFdID4gMHg5
RikKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmIChzZXF1ZW5jZVsxXSA8IDB4ODAgfHwgc2VxdWVu
Y2VbMV0gPiAweEJGKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoc2VxdWVuY2VbMl0gPCAweDgwIHx8IHNlcXVlbmNlWzJdID4gMHhCRikKKyAgICAg
ICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuICgoc2VxdWVuY2VbMF0gPDwgMTIpIHwg
KHNlcXVlbmNlWzFdIDw8IDYpIHwgc2VxdWVuY2VbMl0pIC0gMHgwMDBFMjA4MDsKKyAgICB9Cisg
ICAgQVNTRVJUKGxlbmd0aCA9PSA0KTsKKyAgICBBU1NFUlQoc2VxdWVuY2VbMF0gPj0gMHhGMCAm
JiBzZXF1ZW5jZVswXSA8PSAweEY0KTsKKyAgICBzd2l0Y2ggKHNlcXVlbmNlWzBdKSB7CisgICAg
Y2FzZSAweEYwOgorICAgICAgICBpZiAoc2VxdWVuY2VbMV0gPCAweDkwIHx8IHNlcXVlbmNlWzFd
ID4gMHhCRikKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSAweEY0OgorICAgICAgICBpZiAoc2VxdWVuY2VbMV0gPCAweDgwIHx8IHNlcXVlbmNlWzFdID4g
MHg4RikKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgaWYgKHNlcXVlbmNlWzFdIDwgMHg4MCB8fCBzZXF1ZW5jZVsxXSA+IDB4QkYp
CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmIChzZXF1ZW5jZVsyXSA8IDB4
ODAgfHwgc2VxdWVuY2VbMl0gPiAweEJGKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKHNl
cXVlbmNlWzNdIDwgMHg4MCB8fCBzZXF1ZW5jZVszXSA+IDB4QkYpCisgICAgICAgIHJldHVybiAt
MTsKKyAgICByZXR1cm4gKChzZXF1ZW5jZVswXSA8PCAxOCkgfCAoc2VxdWVuY2VbMV0gPDwgMTIp
IHwgKHNlcXVlbmNlWzJdIDw8IDYpIHwgc2VxdWVuY2VbM10pIC0gMHgwM0M4MjA4MDsKK30KKwor
U3RyaW5nIFRleHRDb2RlY1VURjg6OmRlY29kZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxl
bmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpCit7Cisg
ICAgU3RyaW5nQnVmZmVyIGJ1ZmZlcihsZW5ndGgpOworCisgICAgY29uc3QgdWludDhfdCogc291
cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYnl0ZXMpOworICAgIGNvbnN0
IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZSArIGxlbmd0aDsKKyAgICBjb25zdCB1aW50OF90KiBhbGln
bmVkRW5kID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4ocmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KGVuZCkgJiB+KHNpemVvZih1aW50cHRyX3QpIC0gMSkpOworICAgIFVDaGFy
KiBkZXN0aW5hdGlvbiA9IGJ1ZmZlci5jaGFyYWN0ZXJzKCk7CisKKyAgICBpbnQgY291bnQ7Cisg
ICAgaW50IGNoYXJhY3RlcjsKKworICAgIGlmIChtX3BhcnRpYWxTZXF1ZW5jZVNpemUpIHsKKyAg
ICAgICAgY291bnQgPSBub25BU0NJSVNlcXVlbmNlTGVuZ3RoKG1fcGFydGlhbFNlcXVlbmNlWzBd
KTsKKyAgICAgICAgQVNTRVJUKGNvdW50ID4gbV9wYXJ0aWFsU2VxdWVuY2VTaXplKTsKKyAgICAg
ICAgaWYgKGNvdW50IC0gbV9wYXJ0aWFsU2VxdWVuY2VTaXplID4gZW5kIC0gc291cmNlKSB7Cisg
ICAgICAgICAgICBtZW1jcHkobV9wYXJ0aWFsU2VxdWVuY2UgKyBtX3BhcnRpYWxTZXF1ZW5jZVNp
emUsIHNvdXJjZSwgZW5kIC0gc291cmNlKTsKKyAgICAgICAgICAgIG1fcGFydGlhbFNlcXVlbmNl
U2l6ZSArPSBlbmQgLSBzb3VyY2U7CisgICAgICAgICAgICBzb3VyY2UgPSBlbmQ7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICB1aW50OF90IGNvbXBsZXRlU2VxdWVuY2VbVThfTUFYX0xF
TkdUSF07CisgICAgICAgICAgICBtZW1jcHkoY29tcGxldGVTZXF1ZW5jZSwgbV9wYXJ0aWFsU2Vx
dWVuY2UsIG1fcGFydGlhbFNlcXVlbmNlU2l6ZSk7CisgICAgICAgICAgICBtZW1jcHkoY29tcGxl
dGVTZXF1ZW5jZSArIG1fcGFydGlhbFNlcXVlbmNlU2l6ZSwgc291cmNlLCBjb3VudCAtIG1fcGFy
dGlhbFNlcXVlbmNlU2l6ZSk7CisgICAgICAgICAgICBzb3VyY2UgKz0gY291bnQgLSBtX3BhcnRp
YWxTZXF1ZW5jZVNpemU7CisgICAgICAgICAgICBtX3BhcnRpYWxTZXF1ZW5jZVNpemUgPSAwOwor
ICAgICAgICAgICAgY2hhcmFjdGVyID0gZGVjb2RlTm9uQVNDSUlTZXF1ZW5jZShjb21wbGV0ZVNl
cXVlbmNlLCBjb3VudCk7CisgICAgICAgICAgICBnb3RvIGRlY29kZWROb25BU0NJSTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHdoaWxlIChzb3VyY2UgPCBlbmQpIHsKKyAgICAgICAgaWYgKGlz
QVNDSUkoKnNvdXJjZSkpIHsKKyAgICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgQVNDSUkuIE1v
c3QgVVRGLTggdGV4dCB3aWxsIGFjdHVhbGx5IGJlIEFTQ0lJLgorICAgICAgICAgICAgLy8gV2hl
biB3ZSdyZSBhdCBhIHByb3Blcmx5IGFsaWduZWQgYWRkcmVzcywgcmVhZCBmdWxsIENQVSB3b3Jk
cy4KKyAgICAgICAgICAgIGlmICghKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihzb3VyY2Up
ICYgKHNpemVvZih1aW50cHRyX3QpIC0gMSkpKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKHNv
dXJjZSA8IGFsaWduZWRFbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgdWludHB0cl90IGNodW5r
ID0gKnJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IHVpbnRwdHJfdCo+KHNvdXJjZSk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChjaHVuayAmIE5vbkFTQ0lJTWFzazxzaXplb2YodWludHB0cl90
KT46OnZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FTQ0lJKCpzb3Vy
Y2UpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgZ290byBub25BU0NJSTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBVQ2hhckJ5dGVGaWxsZXI8c2l6ZW9mKHVpbnRwdHJfdCk+Ojpjb3B5KGRlc3Rp
bmF0aW9uLCBzb3VyY2UpOworICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc2l6ZW9mKHVp
bnRwdHJfdCk7CisgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uICs9IHNpemVvZih1aW50
cHRyX3QpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc291cmNlID09
IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAqZGVzdGluYXRpb24rKyA9ICpzb3VyY2UrKzsKKyAgICAgICAgfSBlbHNlIHsKK25vbkFT
Q0lJOgorICAgICAgICAgICAgY291bnQgPSBub25BU0NJSVNlcXVlbmNlTGVuZ3RoKCpzb3VyY2Up
OworICAgICAgICAgICAgQVNTRVJUKGNvdW50ID49IDIpOworICAgICAgICAgICAgQVNTRVJUKGNv
dW50IDw9IDQpOworICAgICAgICAgICAgaWYgKGNvdW50ID4gZW5kIC0gc291cmNlKSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGVuZCAtIHNvdXJjZSA8PSBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KHNpemVvZihtX3BhcnRpYWxTZXF1ZW5jZSkpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW1f
cGFydGlhbFNlcXVlbmNlU2l6ZSk7CisgICAgICAgICAgICAgICAgbV9wYXJ0aWFsU2VxdWVuY2VT
aXplID0gZW5kIC0gc291cmNlOworICAgICAgICAgICAgICAgIG1lbWNweShtX3BhcnRpYWxTZXF1
ZW5jZSwgc291cmNlLCBtX3BhcnRpYWxTZXF1ZW5jZVNpemUpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2hhcmFjdGVyID0gZGVjb2RlTm9uQVND
SUlTZXF1ZW5jZShzb3VyY2UsIGNvdW50KTsKKyAgICAgICAgICAgIHNvdXJjZSArPSBjb3VudDsK
K2RlY29kZWROb25BU0NJSToKKyAgICAgICAgICAgIGlmIChjaGFyYWN0ZXIgPCAwKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHN0b3BPbkVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIHNhd0Vy
cm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIVVfSVNfU1VS
Uk9HQVRFKGNoYXJhY3RlcikpOworICAgICAgICAgICAgICAgIGlmIChVX0lTX0JNUChjaGFyYWN0
ZXIpKQorICAgICAgICAgICAgICAgICAgICAqZGVzdGluYXRpb24rKyA9IGNoYXJhY3RlcjsKKyAg
ICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uKysg
PSBVMTZfTEVBRChjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgICAgICAqZGVzdGluYXRpb24r
KyA9IFUxNl9UUkFJTChjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGJ1ZmZlci5zaHJpbmsoZGVzdGluYXRpb24gLSBi
dWZmZXIuY2hhcmFjdGVycygpKTsKKworICAgIGlmIChmbHVzaCAmJiBtX3BhcnRpYWxTZXF1ZW5j
ZVNpemUpCisgICAgICAgIHNhd0Vycm9yID0gdHJ1ZTsKKworICAgIHJldHVybiBTdHJpbmc6OmFk
b3B0KGJ1ZmZlcik7Cit9CisKK0NTdHJpbmcgVGV4dENvZGVjVVRGODo6ZW5jb2RlKGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nKQorewor
ICAgIC8vIFRoZSBtYXhpbXVtIG51bWJlciBvZiBVVEYtOCBieXRlcyBuZWVkZWQgcGVyIFVURi0x
NiBjb2RlIHVuaXQgaXMgMy4KKyAgICAvLyBCTVAgY2hhcmFjdGVycyB0YWtlIG9ubHkgb25lIFVU
Ri0xNiBjb2RlIHVuaXQgYW5kIGNhbiB0YWtlIHVwIHRvIDMgYnl0ZXMgKDN4KS4KKyAgICAvLyBO
b24tQk1QIGNoYXJhY3RlcnMgdGFrZSB0d28gVVRGLTE2IGNvZGUgdW5pdHMgYW5kIGNhbiB0YWtl
IHVwIHRvIDQgYnl0ZXMgKDJ4KS4KKyAgICBpZiAobGVuZ3RoID4gbnVtZXJpY19saW1pdHM8c2l6
ZV90Pjo6bWF4KCkgLyAzKQorICAgICAgICBDUkFTSCgpOworICAgIFZlY3Rvcjx1aW50OF90PiBi
eXRlcyhsZW5ndGggKiAzKTsKKworICAgIHNpemVfdCBpID0gMDsKKyAgICBzaXplX3QgYnl0ZXNX
cml0dGVuID0gMDsKKyAgICB3aGlsZSAoaSA8IGxlbmd0aCkgeworICAgICAgICBVQ2hhcjMyIGNo
YXJhY3RlcjsKKyAgICAgICAgVTE2X05FWFQoY2hhcmFjdGVycywgaSwgbGVuZ3RoLCBjaGFyYWN0
ZXIpOworICAgICAgICBVOF9BUFBFTkRfVU5TQUZFKGJ5dGVzLmRhdGEoKSwgYnl0ZXNXcml0dGVu
LCBjaGFyYWN0ZXIpOworICAgIH0KKworICAgIHJldHVybiBDU3RyaW5nKHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KGJ5dGVzLmRhdGEoKSksIGJ5dGVzV3JpdHRlbik7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dENvZGVjVVRGOC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQog
ICArIG5hdGl2ZQoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVj
VVRGOC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENv
ZGVjVVRGOC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0Q29kZWNVVEY4LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIFRleHRDb2RlY1VURjhfaAorI2RlZmluZSBUZXh0Q29kZWNVVEY4X2gKKworI2luY2x1
ZGUgIlRleHRDb2RlYy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRleHRDb2Rl
Y1VURjggOiBwdWJsaWMgVGV4dENvZGVjIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCByZWdp
c3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyKTsKKyAgICBzdGF0aWMgdm9p
ZCByZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIpOworCisgICAgdmlydHVhbCBTdHJp
bmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0
b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcik7CisgICAgdmlydHVhbCBDU3RyaW5nIGVuY29kZShj
b25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcpOworCitwcml2
YXRlOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHRDb2RlYz4gY3JlYXRlKGNvbnN0IFRleHRF
bmNvZGluZyYsIGNvbnN0IHZvaWQqKTsKKyAgICBUZXh0Q29kZWNVVEY4KCkgOiBtX3BhcnRpYWxT
ZXF1ZW5jZVNpemUoMCkgeyB9CisKKyAgICBpbnQgbV9wYXJ0aWFsU2VxdWVuY2VTaXplOworICAg
IGNoYXIgbV9wYXJ0aWFsU2VxdWVuY2VbVThfTUFYX0xFTkdUSCAtIDFdOworICAgIAorfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVGV4dENvZGVjVVRGOF9oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcAko
cmV2aXNpb24gNzc3NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2Rl
Y1VURjE2LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsOCBAQCBTdHJpbmcgVGV4dENv
ZGVjVVRGMTY6OmRlY29kZShjb25zdCBjaGFyCiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKIAorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBnZW5lcmF0ZSBhbiBl
cnJvciBpZiB0aGVyZSBpcyBhbiB1bnBhaXJlZCBzdXJyb2dhdGUuCisKICAgICBjb25zdCB1bnNp
Z25lZCBjaGFyKiBwID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oYnl0
ZXMpOwogICAgIHNpemVfdCBudW1CeXRlcyA9IGxlbmd0aCArIG1faGF2ZUJ1ZmZlcmVkQnl0ZTsK
ICAgICBzaXplX3QgbnVtQ2hhcnMgPSBudW1CeXRlcyAvIDI7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAkocmV2
aXNpb24gNzc3NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGlu
Z1JlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTQgKzI3LDEyIEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nUmVnaXN0cnkuaCIKIAotI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiVGV4dENvZGVjTGF0aW4xLmgiCiAjaW5j
bHVkZSAiVGV4dENvZGVjVXNlckRlZmluZWQuaCIKICNpbmNsdWRlICJUZXh0Q29kZWNVVEYxNi5o
IgorI2luY2x1ZGUgIlRleHRDb2RlY1VURjguaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIK
ICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
Ci0jaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgpAQCAtNTMsOSArNTEsNiBAQAogI2lmIFVTRShHTElCX1VOSUNPREUpCiAjaW5jbHVkZSAiZ3Rr
L1RleHRDb2RlY0d0ay5oIgogI2VuZGlmCi0jaWYgVVNFKEJSRVdNUF9VTklDT0RFKQotI2luY2x1
ZGUgImJyZXcvVGV4dENvZGVjQnJldy5oIgotI2VuZGlmCiAjaWYgT1MoV0lOQ0UpICYmICFQTEFU
Rk9STShRVCkKICNpbmNsdWRlICJUZXh0Q29kZWNXaW5DRS5oIgogI2VuZGlmCkBAIC02OCw3ICs2
Myw2IEBAIGNvbnN0IHNpemVfdCBtYXhFbmNvZGluZ05hbWVMZW5ndGggPSA2MzsKIAogLy8gSGFz
aCBmb3IgYWxsLUFTQ0lJIHN0cmluZ3MgdGhhdCBkb2VzIGNhc2UgZm9sZGluZy4KIHN0cnVjdCBU
ZXh0RW5jb2RpbmdOYW1lSGFzaCB7Ci0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBjaGFy
KiBzMSwgY29uc3QgY2hhciogczIpCiAgICAgewogICAgICAgICBjaGFyIGMxOwpAQCAtMTI5LDkg
KzEyMyw3IEBAIHN0YXRpYyBib29sIGRpZEV4dGVuZFRleHRDb2RlY01hcHM7CiBzdGF0aWMgSGFz
aFNldDxjb25zdCBjaGFyKj4qIGphcGFuZXNlRW5jb2RpbmdzOwogc3RhdGljIEhhc2hTZXQ8Y29u
c3QgY2hhcio+KiBub25CYWNrc2xhc2hFbmNvZGluZ3M7CiAKLXN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCB0ZXh0RW5jb2RpbmdOYW1lQmxhY2tsaXN0W10gPSB7Ci0gICAgIlVURi03IgotfTsKK3N0
YXRpYyBjb25zdCBjaGFyKiBjb25zdCB0ZXh0RW5jb2RpbmdOYW1lQmxhY2tsaXN0W10gPSB7ICJV
VEYtNyIgfTsKIAogI2lmIEVSUk9SX0RJU0FCTEVECiAKQEAgLTIyNSwzMSArMjE3LDE5IEBAIHN0
YXRpYyB2b2lkIGJ1aWxkQmFzZVRleHRDb2RlY01hcHMoKQogICAgIFRleHRDb2RlY0xhdGluMTo6
cmVnaXN0ZXJFbmNvZGluZ05hbWVzKGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcCk7CiAgICAgVGV4
dENvZGVjTGF0aW4xOjpyZWdpc3RlckNvZGVjcyhhZGRUb1RleHRDb2RlY01hcCk7CiAKKyAgICBU
ZXh0Q29kZWNVVEY4OjpyZWdpc3RlckVuY29kaW5nTmFtZXMoYWRkVG9UZXh0RW5jb2RpbmdOYW1l
TWFwKTsKKyAgICBUZXh0Q29kZWNVVEY4OjpyZWdpc3RlckNvZGVjcyhhZGRUb1RleHRDb2RlY01h
cCk7CisKICAgICBUZXh0Q29kZWNVVEYxNjo6cmVnaXN0ZXJFbmNvZGluZ05hbWVzKGFkZFRvVGV4
dEVuY29kaW5nTmFtZU1hcCk7CiAgICAgVGV4dENvZGVjVVRGMTY6OnJlZ2lzdGVyQ29kZWNzKGFk
ZFRvVGV4dENvZGVjTWFwKTsKIAogICAgIFRleHRDb2RlY1VzZXJEZWZpbmVkOjpyZWdpc3RlckVu
Y29kaW5nTmFtZXMoYWRkVG9UZXh0RW5jb2RpbmdOYW1lTWFwKTsKICAgICBUZXh0Q29kZWNVc2Vy
RGVmaW5lZDo6cmVnaXN0ZXJDb2RlY3MoYWRkVG9UZXh0Q29kZWNNYXApOwogCi0jaWYgVVNFKElD
VV9VTklDT0RFKQotICAgIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1lcyhh
ZGRUb1RleHRFbmNvZGluZ05hbWVNYXApOwotICAgIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJCYXNl
Q29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKLSNlbmRpZgotCiAjaWYgVVNFKEdMSUJfVU5JQ09E
RSkKICAgICBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQmFzZUVuY29kaW5nTmFtZXMoYWRkVG9UZXh0
RW5jb2RpbmdOYW1lTWFwKTsKICAgICBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQmFzZUNvZGVjcyhh
ZGRUb1RleHRDb2RlY01hcCk7CiAjZW5kaWYKLQotI2lmIFVTRShCUkVXTVBfVU5JQ09ERSkKLSAg
ICBUZXh0Q29kZWNCcmV3OjpyZWdpc3RlckJhc2VFbmNvZGluZ05hbWVzKGFkZFRvVGV4dEVuY29k
aW5nTmFtZU1hcCk7Ci0gICAgVGV4dENvZGVjQnJldzo6cmVnaXN0ZXJCYXNlQ29kZWNzKGFkZFRv
VGV4dENvZGVjTWFwKTsKLSNlbmRpZgotCi0jaWYgT1MoV0lOQ0UpICYmICFQTEFURk9STShRVCkK
LSAgICBUZXh0Q29kZWNXaW5DRTo6cmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1lcyhhZGRUb1RleHRF
bmNvZGluZ05hbWVNYXApOwotICAgIFRleHRDb2RlY1dpbkNFOjpyZWdpc3RlckJhc2VDb2RlY3Mo
YWRkVG9UZXh0Q29kZWNNYXApOwotI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIGFkZEVuY29kaW5n
TmFtZShIYXNoU2V0PGNvbnN0IGNoYXIqPiogc2V0LCBjb25zdCBjaGFyKiBuYW1lKQpAQCAtMjY4
LDcgKzI0OCw3IEBAIHN0YXRpYyB2b2lkIGJ1aWxkUXVpcmtzU2V0cygpCiAgICAgQVNTRVJUKCFq
YXBhbmVzZUVuY29kaW5ncyk7CiAgICAgQVNTRVJUKCFub25CYWNrc2xhc2hFbmNvZGluZ3MpOwog
Ci0gICAgamFwYW5lc2VFbmNvZGluZ3MgPSBuZXcgSGFzaFNldDxjb25zdCBjaGFyKj4oKTsKKyAg
ICBqYXBhbmVzZUVuY29kaW5ncyA9IG5ldyBIYXNoU2V0PGNvbnN0IGNoYXIqPjsKICAgICBhZGRF
bmNvZGluZ05hbWUoamFwYW5lc2VFbmNvZGluZ3MsICJFVUMtSlAiKTsKICAgICBhZGRFbmNvZGlu
Z05hbWUoamFwYW5lc2VFbmNvZGluZ3MsICJJU08tMjAyMi1KUCIpOwogICAgIGFkZEVuY29kaW5n
TmFtZShqYXBhbmVzZUVuY29kaW5ncywgIklTTy0yMDIyLUpQLTEiKTsKQEAgLTI4NCw3ICsyNjQs
NyBAQCBzdGF0aWMgdm9pZCBidWlsZFF1aXJrc1NldHMoKQogICAgIGFkZEVuY29kaW5nTmFtZShq
YXBhbmVzZUVuY29kaW5ncywgImNwOTMyIik7CiAgICAgYWRkRW5jb2RpbmdOYW1lKGphcGFuZXNl
RW5jb2RpbmdzLCAieC1tYWMtamFwYW5lc2UiKTsKIAotICAgIG5vbkJhY2tzbGFzaEVuY29kaW5n
cyA9IG5ldyBIYXNoU2V0PGNvbnN0IGNoYXIqPigpOworICAgIG5vbkJhY2tzbGFzaEVuY29kaW5n
cyA9IG5ldyBIYXNoU2V0PGNvbnN0IGNoYXIqPjsKICAgICAvLyBUaGUgdGV4dCBlbmNvZGluZ3Mg
YmVsb3cgdHJlYXQgYmFja3NsYXNoIGFzIGEgY3VycmVuY3kgc3ltYm9sIGZvciBJRSBjb21wYXRp
YmlsaXR5LgogICAgIC8vIFNlZSBodHRwOi8vYmxvZ3MubXNkbi5jb20vbWljaGthcC9hcmNoaXZl
LzIwMDUvMDkvMTcvNDY5OTQxLmFzcHggZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgYWRkRW5j
b2RpbmdOYW1lKG5vbkJhY2tzbGFzaEVuY29kaW5ncywgIngtbWFjLWphcGFuZXNlIik7CkBAIC0z
MDgsOCArMjg4LDggQEAgYm9vbCBzaG91bGRTaG93QmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbAog
c3RhdGljIHZvaWQgZXh0ZW5kVGV4dENvZGVjTWFwcygpCiB7CiAjaWYgVVNFKElDVV9VTklDT0RF
KQotICAgIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJFeHRlbmRlZEVuY29kaW5nTmFtZXMoYWRkVG9U
ZXh0RW5jb2RpbmdOYW1lTWFwKTsKLSAgICBUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyRXh0ZW5kZWRD
b2RlY3MoYWRkVG9UZXh0Q29kZWNNYXApOworICAgIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJFbmNv
ZGluZ05hbWVzKGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcCk7CisgICAgVGV4dENvZGVjSUNVOjpy
ZWdpc3RlckNvZGVjcyhhZGRUb1RleHRDb2RlY01hcCk7CiAjZW5kaWYKIAogI2lmIFVTRShRVDRf
VU5JQ09ERSkKQEAgLTMyOCw4ICszMDgsOCBAQCBzdGF0aWMgdm9pZCBleHRlbmRUZXh0Q29kZWNN
YXBzKCkKICNlbmRpZgogCiAjaWYgT1MoV0lOQ0UpICYmICFQTEFURk9STShRVCkKLSAgICBUZXh0
Q29kZWNXaW5DRTo6cmVnaXN0ZXJFeHRlbmRlZEVuY29kaW5nTmFtZXMoYWRkVG9UZXh0RW5jb2Rp
bmdOYW1lTWFwKTsKLSAgICBUZXh0Q29kZWNXaW5DRTo6cmVnaXN0ZXJFeHRlbmRlZENvZGVjcyhh
ZGRUb1RleHRDb2RlY01hcCk7CisgICAgVGV4dENvZGVjV2luQ0U6OnJlZ2lzdGVyRW5jb2RpbmdO
YW1lcyhhZGRUb1RleHRFbmNvZGluZ05hbWVNYXApOworICAgIFRleHRDb2RlY1dpbkNFOjpyZWdp
c3RlckNvZGVjcyhhZGRUb1RleHRDb2RlY01hcCk7CiAjZW5kaWYKIAogICAgIHBydW5lQmxhY2ts
aXN0ZWRDb2RlY3MoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvYnJldy9U
ZXh0Q29kZWNCcmV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L2JyZXcvVGV4dENvZGVjQnJldy5jcHAJKHJldmlzaW9uIDc3Nzc4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9icmV3L1RleHRDb2RlY0JyZXcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MywyMyArNDMsMTMgQEAgc3RhdGljIFBhc3NPd25QdHI8VGV4dENvZGVjPiBuZXdUZXh0
Q29kZQogICAgIHJldHVybiBuZXcgVGV4dENvZGVjQnJldyhlbmNvZGluZyk7CiB9CiAKLXZvaWQg
VGV4dENvZGVjQnJldzo6cmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdp
c3RyYXIgcmVnaXN0cmFyKQotewotICAgIHJlZ2lzdHJhcigiVVRGLTgiLCAiVVRGLTgiKTsKLX0K
LQotdm9pZCBUZXh0Q29kZWNCcmV3OjpyZWdpc3RlckJhc2VDb2RlY3MoVGV4dENvZGVjUmVnaXN0
cmFyIHJlZ2lzdHJhcikKLXsKLSAgICByZWdpc3RyYXIoIlVURi04IiwgbmV3VGV4dENvZGVjQnJl
dywgMCk7Ci19Ci0KLXZvaWQgVGV4dENvZGVjQnJldzo6cmVnaXN0ZXJFeHRlbmRlZEVuY29kaW5n
TmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3ZvaWQgVGV4dENvZGVjQnJl
dzo6cmVnaXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIp
CiB7CiAgICAgLy8gRklYTUU6IE5vdCBzdXJlIGhvdyB0byBlbnVtZXJhdGUgYWxsIGF2YWlsYWJs
ZSBlbmNvZGluZ3MuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBUZXh0Q29kZWNC
cmV3OjpyZWdpc3RlckV4dGVuZGVkQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdpc3RyYXIp
Cit2b2lkIFRleHRDb2RlY0JyZXc6OnJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciBy
ZWdpc3RyYXIpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvYnJldy9UZXh0Q29kZWNCcmV3LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9icmV3L1RleHRDb2RlY0JyZXcuaAkocmV2aXNpb24g
Nzc3NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2JyZXcvVGV4dENvZGVjQnJl
dy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMSArMzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIFRleHRDb2RlY0JyZXcgOiBwdWJsaWMgVGV4dENvZGVjIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgdm9pZCByZWdpc3RlckJhc2VFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lz
dHJhcik7Ci0gICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCYXNlQ29kZWNzKFRleHRDb2RlY1JlZ2lz
dHJhcik7Ci0KLSAgICBzdGF0aWMgdm9pZCByZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhF
bmNvZGluZ05hbWVSZWdpc3RyYXIpOwotICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRXh0ZW5kZWRD
b2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckVuY29k
aW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyKTsKKyAgICBzdGF0aWMgdm9pZCByZWdpc3Rl
ckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIpOwogCiAgICAgVGV4dENvZGVjQnJldyhjb25zdCBU
ZXh0RW5jb2RpbmcmKTsKICAgICB2aXJ0dWFsIH5UZXh0Q29kZWNCcmV3KCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5jcHAJKHJl
dmlzaW9uIDc3Nzc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENv
ZGVjR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw2IEBAIHN0YXRpYyB2b2lk
IHJlZ2lzdGVyQ29kZWNJZkF2YWlsYWJsZShUZXgKIHZvaWQgVGV4dENvZGVjR3RrOjpyZWdpc3Rl
ckJhc2VFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIpCiB7CiAg
ICAgLy8gVW5pY29kZQotICAgIHJlZ2lzdGVyRW5jb2RpbmdOYW1lSWZBdmFpbGFibGUocmVnaXN0
cmFyLCAiVVRGLTgiKTsKICAgICByZWdpc3RlckVuY29kaW5nTmFtZUlmQXZhaWxhYmxlKHJlZ2lz
dHJhciwgIlVURi0zMiIpOwogICAgIHJlZ2lzdGVyRW5jb2RpbmdOYW1lSWZBdmFpbGFibGUocmVn
aXN0cmFyLCAiVVRGLTMyQkUiKTsKICAgICByZWdpc3RlckVuY29kaW5nTmFtZUlmQXZhaWxhYmxl
KHJlZ2lzdHJhciwgIlVURi0zMkxFIik7CkBAIC0xMjcsNyArMTI2LDYgQEAgdm9pZCBUZXh0Q29k
ZWNHdGs6OnJlZ2lzdGVyQmFzZUVuY29kaW5nTgogdm9pZCBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVy
QmFzZUNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyKQogewogICAgIC8vIFVuaWNv
ZGUKLSAgICByZWdpc3RlckNvZGVjSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiVVRGLTgiKTsKICAg
ICByZWdpc3RlckNvZGVjSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiVVRGLTMyIik7CiAgICAgcmVn
aXN0ZXJDb2RlY0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIlVURi0zMkJFIik7CiAgICAgcmVnaXN0
ZXJDb2RlY0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIlVURi0zMkxFIik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbmNlL1RleHRDb2RlY1dpbkNFLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbmNlL1RleHRDb2RlY1dpbkNFLmNw
cAkocmV2aXNpb24gNzc3NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbmNl
L1RleHRDb2RlY1dpbkNFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDkgKzEyMiw2IEBAIExh
bmd1YWdlTWFuYWdlcjo6TGFuZ3VhZ2VNYW5hZ2VyKCkKIAogc3RhdGljIFVJTlQgZ2V0Q29kZVBh
Z2UoY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICBpZiAoIXN0cmNtcChuYW1lLCAiVVRGLTgiKSkK
LSAgICAgICAgcmV0dXJuIENQX1VURjg7Ci0KICAgICAvLyBFeHBsaWNpdGx5IHVzZSBhICJjb25z
dCIgcmVmZXJlbmNlIHRvIGZpeCB0aGUgc2lsbHkgVlMgYnVpbGQgZXJyb3IKICAgICAvLyBzYXlp
bmcgIj09IiBpcyBub3QgZm91bmQgZm9yIGNvbnN0X2l0ZXJhdG9yIGFuZCBpdGVyYXRvcgogICAg
IGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz4mIGNoYXJzZXRzID0ga25vd25DaGFy
c2V0cygpOwpAQCAtMTQ2LDE3ICsxNDMsNyBAQCBUZXh0Q29kZWNXaW5DRTo6flRleHRDb2RlY1dp
bkNFKCkKIHsKIH0KIAotdm9pZCBUZXh0Q29kZWNXaW5DRTo6cmVnaXN0ZXJCYXNlRW5jb2RpbmdO
YW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQotewotICAgIHJlZ2lzdHJhcigi
VVRGLTgiLCAiVVRGLTgiKTsKLX0KLQotdm9pZCBUZXh0Q29kZWNXaW5DRTo6cmVnaXN0ZXJCYXNl
Q29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdpc3RyYXIpCi17Ci0gICAgcmVnaXN0cmFyKCJV
VEYtOCIsIG5ld1RleHRDb2RlY1dpbkNFLCAwKTsKLX0KLQotdm9pZCBUZXh0Q29kZWNXaW5DRTo6
cmVnaXN0ZXJFeHRlbmRlZEVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lz
dHJhcikKK3ZvaWQgVGV4dENvZGVjV2luQ0U6OnJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGlu
Z05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQogewogICAgIGxhbmd1YWdlTWFuYWdlcigpOwogICAg
IGZvciAoQ2hhcnNldFNldDo6aXRlcmF0b3IgaSA9IHN1cHBvcnRlZENoYXJzZXRzKCkuYmVnaW4o
KTsgaSAhPSBzdXBwb3J0ZWRDaGFyc2V0cygpLmVuZCgpOyArK2kpIHsKQEAgLTE2OSw3ICsxNTYs
NyBAQCB2b2lkIFRleHRDb2RlY1dpbkNFOjpyZWdpc3RlckV4dGVuZGVkRW5jCiAgICAgfQogfQog
Ci12b2lkIFRleHRDb2RlY1dpbkNFOjpyZWdpc3RlckV4dGVuZGVkQ29kZWNzKFRleHRDb2RlY1Jl
Z2lzdHJhciByZWdpc3RyYXIpCit2b2lkIFRleHRDb2RlY1dpbkNFOjpyZWdpc3RlckNvZGVjcyhU
ZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyKQogewogICAgIGxhbmd1YWdlTWFuYWdlcigpOwog
ICAgIGZvciAoQ2hhcnNldFNldDo6aXRlcmF0b3IgaSA9IHN1cHBvcnRlZENoYXJzZXRzKCkuYmVn
aW4oKTsgaSAhPSBzdXBwb3J0ZWRDaGFyc2V0cygpLmVuZCgpOyArK2kpIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luY2UvVGV4dENvZGVjV2luQ0UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbmNlL1RleHRDb2RlY1dpbkNFLmgJ
KHJldmlzaW9uIDc3Nzc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93aW5jZS9U
ZXh0Q29kZWNXaW5DRS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMSArMzksOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIFRleHRDb2RlY1dpbkNFIDogcHVibGljIFRleHRDb2RlYyB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1lcyhFbmNv
ZGluZ05hbWVSZWdpc3RyYXIpOwotICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmFzZUNvZGVjcyhU
ZXh0Q29kZWNSZWdpc3RyYXIpOwotCi0gICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJFeHRlbmRlZEVu
Y29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyKTsKLSAgICBzdGF0aWMgdm9pZCByZWdp
c3RlckV4dGVuZGVkQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7CisgICAgc3RhdGljIHZvaWQg
cmVnaXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhcik7CisgICAgc3RhdGlj
IHZvaWQgcmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKIAogICAgIFRleHRDb2Rl
Y1dpbkNFKFVJTlQgY29kZVBhZ2UpOwogICAgIHZpcnR1YWwgflRleHRDb2RlY1dpbkNFKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81443</attachid>
            <date>2011-02-06 20:18:05 -0800</date>
            <delta_ts>2011-02-12 17:16:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53898-20110206201804.patch</filename>
            <type>text/plain</type>
            <size>39100</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzc3ODIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTEtMDItMDYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBidWlsdC1pbiBkZWNvZGVy
IGZvciBVVEYtOCBmb3IgaW1wcm92ZWQgcGVyZm9ybWFuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzODk4CisKKyAgICAgICAgKiB3dGYvdW5pY29k
ZS9Vbmljb2RlTWFjcm9zRnJvbUlDVS5oOiBBZGRlZCBVOF9NQVhfTEVOR1RIIGFuZAorICAgICAg
ICBVOF9BUFBFTkRfVU5TQUZFLiBBbHNvIGZpeGVkIGhlYWRlci4KKwogMjAxMS0wMi0wNiAgQW50
dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFj
aWVqIFN0YWNob3dpYWsuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUv
VW5pY29kZU1hY3Jvc0Zyb21JQ1UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL3VuaWNvZGUvVW5pY29kZU1hY3Jvc0Zyb21JQ1UuaAkocmV2aXNpb24gNzc3ODIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvVW5pY29kZU1hY3Jvc0Zyb21JQ1Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMSwyNSArMSw1IEBACiAvKgogICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDA0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFu
ZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogIENvcHlyaWdodCAoQykgMjAwNiBH
ZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgotICogIENvcHlyaWdodCAoQykgMjAwNiBB
bGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA3
IEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDA4IErDvHJnIEJpbGxldGVyIDxqQGJpdHJvbi5jaD4KLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDggRG9taW5payBSw7Z0dHNjaGVzIDxkb21pbmlrLnJvZXR0c2NoZXNAYWNjZXNzLWNvbXBh
bnkuY29tPgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KICAqCiAgKi8KIApAQCAtOTcsNCArNzcsMjUgQEAKIAogI2RlZmluZSBVX01B
U0soeCkgKCh1aW50MzJfdCkxPDwoeCkpCiAKKyNkZWZpbmUgVThfTUFYX0xFTkdUSCA0CisKKyNk
ZWZpbmUgVThfQVBQRU5EX1VOU0FGRShzLCBpLCBjKSB7IFwKKyAgICBpZigodWludDMyX3QpKGMp
PD0weDdmKSB7IFwKKyAgICAgICAgKHMpWyhpKSsrXT0odWludDhfdCkoYyk7IFwKKyAgICB9IGVs
c2UgeyBcCisgICAgICAgIGlmKCh1aW50MzJfdCkoYyk8PTB4N2ZmKSB7IFwKKyAgICAgICAgICAg
IChzKVsoaSkrK109KHVpbnQ4X3QpKCgoYyk+PjYpfDB4YzApOyBcCisgICAgICAgIH0gZWxzZSB7
IFwKKyAgICAgICAgICAgIGlmKCh1aW50MzJfdCkoYyk8PTB4ZmZmZikgeyBcCisgICAgICAgICAg
ICAgICAgKHMpWyhpKSsrXT0odWludDhfdCkoKChjKT4+MTIpfDB4ZTApOyBcCisgICAgICAgICAg
ICB9IGVsc2UgeyBcCisgICAgICAgICAgICAgICAgKHMpWyhpKSsrXT0odWludDhfdCkoKChjKT4+
MTgpfDB4ZjApOyBcCisgICAgICAgICAgICAgICAgKHMpWyhpKSsrXT0odWludDhfdCkoKCgoYyk+
PjEyKSYweDNmKXwweDgwKTsgXAorICAgICAgICAgICAgfSBcCisgICAgICAgICAgICAocylbKGkp
KytdPSh1aW50OF90KSgoKChjKT4+NikmMHgzZil8MHg4MCk7IFwKKyAgICAgICAgfSBcCisgICAg
ICAgIChzKVsoaSkrK109KHVpbnQ4X3QpKCgoYykmMHgzZil8MHg4MCk7IFwKKyAgICB9IFwKK30K
KwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA3Nzc4MikKKysrIFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDExLTAyLTA2
ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYnVpbHQtaW4gZGVjb2RlciBmb3IgVVRGLTgg
Zm9yIGltcHJvdmVkIHBlcmZvcm1hbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01Mzg5OAorCisgICAgICAgIENvcnJlY3QgYmVoYXZpb3IgaXMgY292
ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIEFuZHJvaWQubWs6IEFkZGVkIFRl
eHRDb2RlY1VURjguCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IERpdHRvLgorICAgICAgICAq
IEdOVW1ha2VmaWxlLmFtOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IERpdHRvLgor
ICAgICAgICAqIFdlYkNvcmUucHJvOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvajogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNV
LmNwcDogUmVtb3ZlZCByZWdpc3RyYXRpb24gb2YgVVRGLTgKKyAgICAgICAgc2luY2UgdGhhdCdz
IG5vdyBoYW5kbGVkIGJ5IHRoZSBidWlsdC1pbiBVVEYtOCBjb2RlYy4KKyAgICAgICAgKFdlYkNv
cmU6OlRleHRDb2RlY0lDVTo6cmVnaXN0ZXJFbmNvZGluZ05hbWVzKTogUmVuYW1lZCB0byByZW1v
dmUKKyAgICAgICAgdGhlIHdvcmQgImV4dGVuZGVkIiBzaW5jZSBhbGwgY29kZWNzIGZyb20gSUNV
IGFyZSBub3cgZXh0ZW5kZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNJQ1U6OnJlZ2lz
dGVyQ29kZWNzKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1Uu
aDogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1VURjE2OjpkZWNvZGUpOiBBZGRlZCBhIEZJWE1F
IGFib3V0IG1pc3NpbmcKKyAgICAgICAgZXJyb3IgaGFuZGxpbmcuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L1RleHRDb2RlY1VURjguY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS90
ZXh0L1RleHRDb2RlY1VURjguaDogQWRkZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1Rl
eHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkQmFzZVRleHRD
b2RlY01hcHMpOiBBZGRlZCBUZXh0Q29kZWNVVEY4LCBhbmQKKyAgICAgICAgcmVtb3ZlZCBUZXh0
Q29kZWNJQ1UsIFRleHRDb2RlY0JyZXcsIGFuZCBUZXh0Q29kZWNXaW5DRS4KKyAgICAgICAgKFdl
YkNvcmU6OmV4dGVuZFRleHRDb2RlY01hcHMpOiBVcGRhdGVkIG5hbWVzIGZvcgorICAgICAgICBU
ZXh0Q29kZWNJQ1UgYW5kIFRleHRDb2RlY1dpbkNFLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4
dC9icmV3L1RleHRDb2RlY0JyZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjQnJl
dzo6cmVnaXN0ZXJFbmNvZGluZ05hbWVzKTogUmVuYW1lZCB0byByZW1vdmUKKyAgICAgICAgdGhl
IHdvcmQgImV4dGVuZGVkIiBzaW5jZSBhbGwgY29kZWNzIGZyb20gQnJldyBhcmUgbm93IGV4dGVu
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjQnJldzo6cmVnaXN0ZXJDb2RlY3MpOiBE
aXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L2JyZXcvVGV4dENvZGVjQnJldy5oOiBEaXR0
by4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQmFzZUVuY29kaW5nTmFtZXMpOiBS
ZW1vdmVkCisgICAgICAgIHJlZ2lzdHJhdGlvbiBvZiBVVEYtOC4gSXQncyBxdWVzdGlvbmFibGUg
d2hldGhlciB0aGUgb3RoZXIgY29kZWNzCisgICAgICAgIGhlcmUgYXJlIHJlYWxseSBiYXNpYy4g
SWYgd2UgdGhpbmsgdGhleSBxdWFsaWZ5LCB0aGVuIHdlIHNob3VsZAorICAgICAgICByZWdpc3Rl
ciB0aGVtIG9uIG90aGVyIHBsYXRmb3Jtcywgbm90IGp1c3QgR1RLLgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dENvZGVjR3RrOjpyZWdpc3RlckJhc2VDb2RlY3MpOiBEaXR0by4KKworICAgICAgICAq
IHBsYXRmb3JtL3RleHQvd2luY2UvVGV4dENvZGVjV2luQ0UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Z2V0Q29kZVBhZ2UpOiBSZW1vdmVkIHNwZWNpYWwgY2FzZSBmb3IgVVRGLTggc2luY2Ugd2UK
KyAgICAgICAgbm8gbG9uZ2VyIHVzZSB0aGlzIGNvZGVjIGZvciBVVEYtOC4KKyAgICAgICAgKFdl
YkNvcmU6OlRleHRDb2RlY1dpbkNFOjpyZWdpc3RlckVuY29kaW5nTmFtZXMpOiBSZW5hbWVkIHRv
IHJlbW92ZQorICAgICAgICB0aGUgd29yZCAiZXh0ZW5kZWQiIHNpbmNlIGFsbCBjb2RlY3MgZnJv
bSBXaW5DRSBhcmUgbm93IGV4dGVuZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjV2lu
Q0U6OnJlZ2lzdGVyQ29kZWNzKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vdGV4dC93aW5j
ZS9UZXh0Q29kZWNXaW5DRS5oOiBEaXR0by4KKwogMjAxMS0wMi0wMyAgRG9taW5pYyBDb29uZXkg
IDxkb21pbmljY0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xh
emtvdi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvQW5kcm9pZC5tawkocmV2aXNpb24gNzc3ODIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9BbmRyb2lkLm1rCSh3b3JraW5nIGNvcHkpCkBAIC02MjgsNiArNjI4LDcgQEAgTE9DQUxfU1JD
X0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJ
Q1UuY3BwIFwKIAlwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHAgXAogCXBsYXRmb3Jt
L3RleHQvVGV4dENvZGVjVVRGMTYuY3BwIFwKKwlwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjgu
Y3BwIFwKIAlwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VzZXJEZWZpbmVkLmNwcCBcCiAJcGxhdGZv
cm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwIFwKIAlwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0Rl
dGVjdG9ySUNVLmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gNzc3ODIp
CisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTI5
OSw2ICsxMjk5LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL3RleHQvVGV4
dENvZGVjLmNwcAogICAgIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcAogICAgIHBs
YXRmb3JtL3RleHQvVGV4dENvZGVjVVRGMTYuY3BwCisgICAgcGxhdGZvcm0vdGV4dC9UZXh0Q29k
ZWNVVEY4LmNwcAogICAgIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuY3BwCiAg
ICAgcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwCiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0
RW5jb2RpbmdSZWdpc3RyeS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA3
Nzc4MikKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjQ1LDYgKzI2NDUsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dENvZGVjVVRGMTYuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0Q29kZWNVVEY4LmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
Q29kZWNVVEY4LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dERpcmVjdGlv
bi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0b3IuaCBcCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA3Nzc4MikKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzM0OCw2ICszMzQ4LDggQEAKICAgICAgICAg
ICAgICdwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vdGV4
dC9UZXh0Q29kZWNVVEYxNi5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L1RleHRDb2Rl
Y1VURjguY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjguaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vdGV4dC9UZXh0RGlyZWN0aW9uLmgnLApJbmRleDogU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5w
cm8JKHJldmlzaW9uIDc3NzgyKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtp
bmcgY29weSkKQEAgLTEyNzMsNiArMTI3Myw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3Jt
L3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcCBcCiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNV
c2VyRGVmaW5lZC5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGMTYuY3BwIFwK
KyAgICBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjguY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0
L1RleHRFbmNvZGluZy5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0
b3JOb25lLmNwcCBcCiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAg
XApAQCAtMjIyOCw2ICsyMjI5LDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGxhdGZvcm0vdGV4dC9U
ZXh0Q29kZWNMYXRpbjEuaCBcCiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5l
ZC5oIFwKICAgICBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmggXAorICAgIHBsYXRmb3Jt
L3RleHQvVGV4dENvZGVjVVRGOC5oIFwKICAgICBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5o
IFwKICAgICBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmggXAogICAgIHBsYXRm
b3JtL3RleHQvVGV4dFN0cmVhbS5oIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA3Nzc4MikKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMDM2OSw2
ICszMDM2OSwxNCBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCisJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cdGV4dFxUZXh0Q29kZWNVVEY4LmgiCisJCQkJCT4KKwkJCQk8
L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVx0ZXh0XFRl
eHRDb2RlY1VURjguY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cdGV4dFxUZXh0Q29kZWNVVEYxNi5oIgogCQkJCQk+CiAJ
CQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNzc3ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI4NjQsNiAr
Mjg2NCw4IEBACiAJCTkzM0ExNEFBMEI3RDFEMDkwMEE1M0ZGRCAvKiBET01UZXh0RXZlbnQubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzNBMTRBOTBC
N0QxRDA5MDBBNTNGRkQgLyogRE9NVGV4dEV2ZW50Lm1tICovOyB9OwogCQk5MzNBMTRCODBCN0Qx
RDUyMDBBNTNGRkQgLyogSlNUZXh0RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzQTE0QjYwQjdEMUQ1MjAwQTUzRkZEIC8qIEpTVGV4dEV2
ZW50LmNwcCAqLzsgfTsKIAkJOTMzQTE0QjkwQjdEMUQ1MjAwQTUzRkZEIC8qIEpTVGV4dEV2ZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzNBMTRC
NzBCN0QxRDUyMDBBNTNGRkQgLyogSlNUZXh0RXZlbnQuaCAqLzsgfTsKKwkJOTM0M0NCODExMkYy
NUU1MTAwMzNDNUVFIC8qIFRleHRDb2RlY1VURjguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM0M0NCN0YxMkYyNUU1MTAwMzNDNUVFIC8qIFRleHRD
b2RlY1VURjguY3BwICovOyB9OworCQk5MzQzQ0I4MjEyRjI1RTUxMDAzM0M1RUUgLyogVGV4dENv
ZGVjVVRGOC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTM0M0NCODAxMkYyNUU1MTAwMzNDNUVFIC8qIFRleHRDb2RlY1VURjguaCAqLzsgfTsKIAkJOTM0
NDJDOUUwRDJCMzM1QzAwMzM4RkY5IC8qIEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzQ0MkM5RDBEMkIzMzVD
MDAzMzhGRjkgLyogSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24uaCAqLzsgfTsKIAkJOTM0NDJDQTAw
RDJCMzM2MDAwMzM4RkY5IC8qIEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNDQyQzlGMEQyQjMzNjAwMDMz
OEZGOSAvKiBIVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5jcHAgKi87IH07CiAJCTkzNDkwN0U0MTI1
QkJCQzgwMDdGMjNBMCAvKiBHcmFwaGljc0NvbnRleHRDRy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM0OTA3RTMxMjVCQkJDODAwN0YyM0EwIC8qIEdy
YXBoaWNzQ29udGV4dENHLmggKi87IH07CkBAIC05Mjc5LDYgKzkyODEsOCBAQAogCQk5MzNBMTRB
OTBCN0QxRDA5MDBBNTNGRkQgLyogRE9NVGV4dEV2ZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NVGV4dEV2ZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5MzNBMTRCNjBCN0QxRDUyMDBBNTNGRkQgLyogSlNUZXh0RXZlbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUZXh0RXZlbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzNBMTRCNzBCN0QxRDUyMDBBNTNGRkQgLyogSlNU
ZXh0RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNUZXh0RXZlbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTM0M0NCN0YxMkYyNUU1MTAwMzNDNUVF
IC8qIFRleHRDb2RlY1VURjguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVGV4dENvZGVjVVRGOC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzNDND
QjgwMTJGMjVFNTEwMDMzQzVFRSAvKiBUZXh0Q29kZWNVVEY4LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRleHRDb2RlY1VURjguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTM0NDJDOUQwRDJCMzM1QzAwMzM4RkY5IC8qIEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxUYWJsZVJvd3NDb2xsZWN0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNDQyQzlGMEQyQjMzNjAwMDMz
OEZGOSAvKiBIVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBIVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTkzNDkwN0UzMTI1QkJCQzgwMDdGMjNBMCAvKiBHcmFwaGljc0Nv
bnRleHRDRy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRl
eHRDRy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc2MjksNiArMTc2MzMsOCBA
QAogCQkJCUIyQzNEQTEwMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNVc2VyRGVmaW5lZC5o
ICovLAogCQkJCUIyQzNEQTExMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNVVEYxNi5jcHAg
Ki8sCiAJCQkJQjJDM0RBMTIwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY1VURjE2LmggKi8s
CisJCQkJOTM0M0NCN0YxMkYyNUU1MTAwMzNDNUVFIC8qIFRleHRDb2RlY1VURjguY3BwICovLAor
CQkJCTkzNDNDQjgwMTJGMjVFNTEwMDMzQzVFRSAvKiBUZXh0Q29kZWNVVEY4LmggKi8sCiAJCQkJ
QjJDM0RBMTUwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHREaXJlY3Rpb24uaCAqLywKIAkJCQlCMkMz
REExNjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nLmNwcCAqLywKIAkJCQlCMkMzREEx
NzBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nLmggKi8sCkBAIC0yMjQ4MSw2ICsyMjQ4
Nyw3IEBACiAJCQkJQkM5NTg1RTExMkYwOTg5NTAwNzU1ODIxIC8qIFBsYXRmb3JtR2VzdHVyZUV2
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTM0RjVBQjEyRUUzNDNGMDA0RUM1OEQgLyogSW50
UmVjdEhhc2guaCBpbiBIZWFkZXJzICovLAogCQkJCTk3N0UyRENFMTJGMEUyODMwMEMxMzM3OSAv
KiBIVE1MU291cmNlVHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTM0M0NCODIxMkYyNUU1
MTAwMzNDNUVFIC8qIFRleHRDb2RlY1VURjguaCBpbiBIZWFkZXJzICovLAogCQkJCTk3N0UyRTBG
MTJGMEZDOUMwMEMxMzM3OSAvKiBYU1NGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGM0RE
NDUwMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0U0NDEzNDEyRjc0OEUyMDA5Qjg0QjggLyogUmVuZGVyQ29tYmluZVRleHQuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjUxODQsNiArMjUxOTEsNyBAQAogCQkJCUJDOEFFMzRFMTJFQTA5NkEwMEVCM0FF
NiAvKiBTY3JvbGxhYmxlQXJlYS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0RjJEMjA1NTEyRUFF
N0IzMDA1QzI4NzQgLyogSW5zcGVjdG9yQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc3
RTJEQ0QxMkYwRTI4MzAwQzEzMzc5IC8qIEhUTUxTb3VyY2VUcmFja2VyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTkzNDNDQjgxMTJGMjVFNTEwMDMzQzVFRSAvKiBUZXh0Q29kZWNVVEY4LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTk3N0UyRTBFMTJGMEZDOUMwMEMxMzM3OSAvKiBYU1NGaWx0ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzREQ0NEYxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRv
d0JsdXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFNDQxMzMxMkY3NDhFMjAwOUI4NEI4IC8q
IFJlbmRlckNvbWJpbmVUZXh0LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcAkocmV2aXNpb24gNzc3ODIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYwLDE3ICs2MCw3IEBAIHN0YXRpYyBQYXNzT3duUHRyPFRleHRDb2RlYz4gbmV3
VGV4dENvZGUKICAgICByZXR1cm4gbmV3IFRleHRDb2RlY0lDVShlbmNvZGluZyk7CiB9CiAKLXZv
aWQgVGV4dENvZGVjSUNVOjpyZWdpc3RlckJhc2VFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJl
Z2lzdHJhciByZWdpc3RyYXIpCi17Ci0gICAgcmVnaXN0cmFyKCJVVEYtOCIsICJVVEYtOCIpOwot
fQotCi12b2lkIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJCYXNlQ29kZWNzKFRleHRDb2RlY1JlZ2lz
dHJhciByZWdpc3RyYXIpCi17Ci0gICAgcmVnaXN0cmFyKCJVVEYtOCIsIG5ld1RleHRDb2RlY0lD
VSwgMCk7Ci19Ci0KLXZvaWQgVGV4dENvZGVjSUNVOjpyZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdO
YW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQordm9pZCBUZXh0Q29kZWNJQ1U6
OnJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQog
ewogICAgIC8vIFdlIHJlZ2lzdGVyIEhlYnJldyB3aXRoIGxvZ2ljYWwgb3JkZXJpbmcgdXNpbmcg
YSBzZXBhcmF0ZSBuYW1lLgogICAgIC8vIE90aGVyd2lzZSwgdGhpcyB3b3VsZCBzaGFyZSB0aGUg
c2FtZSBjYW5vbmljYWwgbmFtZSBhcyB0aGUKQEAgLTE2Myw3ICsxNTMsNiBAQCB2b2lkIFRleHRD
b2RlY0lDVTo6cmVnaXN0ZXJFeHRlbmRlZEVuY29kCiAgICAgcmVnaXN0cmFyKCJ4LWV1YyIsICJF
VUMtSlAiKTsKICAgICByZWdpc3RyYXIoIngtd2luZG93cy05NDkiLCAid2luZG93cy05NDkiKTsK
ICAgICByZWdpc3RyYXIoIngtdWhjIiwgIndpbmRvd3MtOTQ5Iik7Ci0gICAgcmVnaXN0cmFyKCJ1
dGY4IiwgIlVURi04Iik7CiAgICAgcmVnaXN0cmFyKCJzaGlmdC1qaXMiLCAiU2hpZnRfSklTIik7
CiAKICAgICAvLyBUaGVzZSBhbGlhc2VzIGFyZSBwcmVzZW50IGluIG1vZGVybiB2ZXJzaW9ucyBv
ZiBJQ1UsIGJ1dCB1c2UgZGlmZmVyZW50IGNvZGVjcywgYW5kIGhhdmUgbm8gc3RhbmRhcmQgbmFt
ZXMuCkBAIC0xOTAsNyArMTc5LDcgQEAgdm9pZCBUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyRXh0ZW5k
ZWRFbmNvZAogICAgIC8vIGFuZCBiZWNhdXNlIG9sZGVyIHZlcnNpb25zIG9mIElDVSBkb24ndCBz
dXBwb3J0IElTTy04ODU5LTE2IGVuY29kaW5nIGF0IGFsbC4KIH0KIAotdm9pZCBUZXh0Q29kZWNJ
Q1U6OnJlZ2lzdGVyRXh0ZW5kZWRDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikK
K3ZvaWQgVGV4dENvZGVjSUNVOjpyZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVn
aXN0cmFyKQogewogICAgIC8vIFNlZSBjb21tZW50IGFib3ZlIGluIHJlZ2lzdGVyRW5jb2RpbmdO
YW1lcy4KICAgICByZWdpc3RyYXIoIklTTy04ODU5LTgtSSIsIG5ld1RleHRDb2RlY0lDVSwgMCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmgJKHJl
dmlzaW9uIDc3NzgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJ
Q1UuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTEgKzM4LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgY2xhc3MgVGV4dENvZGVjSUNVIDogcHVibGljIFRleHRDb2RlYyB7CiAgICAgcHVi
bGljOgotICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckJhc2VFbmNvZGluZ05hbWVzKEVuY29k
aW5nTmFtZVJlZ2lzdHJhcik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmFzZUNvZGVj
cyhUZXh0Q29kZWNSZWdpc3RyYXIpOwotCi0gICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRXh0
ZW5kZWRFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhcik7Ci0gICAgICAgIHN0YXRp
YyB2b2lkIHJlZ2lzdGVyRXh0ZW5kZWRDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKKyAgICAg
ICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJh
cik7CisgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJh
cik7CiAKICAgICAgICAgVGV4dENvZGVjSUNVKGNvbnN0IFRleHRFbmNvZGluZyYpOwogICAgICAg
ICB2aXJ0dWFsIH5UZXh0Q29kZWNJQ1UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dENvZGVjVVRGOC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9UZXh0Q29kZWNVVEY4LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGOC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4LCAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlRleHRDb2RlY1VURjguaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYv
dW5pY29kZS9VVEY4Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY6OlVuaWNvZGU7Cit1c2luZyBu
YW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHNpemVfdCBz
aXplPiBzdHJ1Y3QgTm9uQVNDSUlNYXNrOwordGVtcGxhdGU8PiBzdHJ1Y3QgTm9uQVNDSUlNYXNr
PDQ+IHsKKyAgICBzdGF0aWMgdW5zaWduZWQgdmFsdWUoKSB7IHJldHVybiAweDgwODA4MDgwVTsg
fQorfTsKK3RlbXBsYXRlPD4gc3RydWN0IE5vbkFTQ0lJTWFzazw4PiB7CisgICAgc3RhdGljIHVu
c2lnbmVkIGxvbmcgbG9uZyB2YWx1ZSgpIHsgcmV0dXJuIDB4ODA4MDgwODA4MDgwODA4MFVMTDsg
fQorfTsKKwordGVtcGxhdGU8c2l6ZV90IHNpemU+IHN0cnVjdCBVQ2hhckJ5dGVGaWxsZXI7Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBVQ2hhckJ5dGVGaWxsZXI8ND4geworICAgIHN0YXRpYyB2b2lkIGNv
cHkoVUNoYXIqIGRlc3RpbmF0aW9uLCBjb25zdCB1aW50OF90KiBzb3VyY2UpCisgICAgeworICAg
ICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVswXTsKKyAgICAgICAgZGVzdGluYXRpb25bMV0g
PSBzb3VyY2VbMV07CisgICAgICAgIGRlc3RpbmF0aW9uWzJdID0gc291cmNlWzJdOworICAgICAg
ICBkZXN0aW5hdGlvblszXSA9IHNvdXJjZVszXTsKKyAgICB9Cit9OwordGVtcGxhdGU8PiBzdHJ1
Y3QgVUNoYXJCeXRlRmlsbGVyPDg+IHsKKyAgICBzdGF0aWMgdm9pZCBjb3B5KFVDaGFyKiBkZXN0
aW5hdGlvbiwgY29uc3QgdWludDhfdCogc291cmNlKQorICAgIHsKKyAgICAgICAgZGVzdGluYXRp
b25bMF0gPSBzb3VyY2VbMF07CisgICAgICAgIGRlc3RpbmF0aW9uWzFdID0gc291cmNlWzFdOwor
ICAgICAgICBkZXN0aW5hdGlvblsyXSA9IHNvdXJjZVsyXTsKKyAgICAgICAgZGVzdGluYXRpb25b
M10gPSBzb3VyY2VbM107CisgICAgICAgIGRlc3RpbmF0aW9uWzRdID0gc291cmNlWzRdOworICAg
ICAgICBkZXN0aW5hdGlvbls1XSA9IHNvdXJjZVs1XTsKKyAgICAgICAgZGVzdGluYXRpb25bNl0g
PSBzb3VyY2VbNl07CisgICAgICAgIGRlc3RpbmF0aW9uWzddID0gc291cmNlWzddOworICAgIH0K
K307CisKK1Bhc3NPd25QdHI8VGV4dENvZGVjPiBUZXh0Q29kZWNVVEY4OjpjcmVhdGUoY29uc3Qg
VGV4dEVuY29kaW5nJiwgY29uc3Qgdm9pZCopCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBU
ZXh0Q29kZWNVVEY4KTsKK30KKwordm9pZCBUZXh0Q29kZWNVVEY4OjpyZWdpc3RlckVuY29kaW5n
TmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICByZWdpc3RyYXIo
IlVURi04IiwgIlVURi04Iik7Cit9CisKK3ZvaWQgVGV4dENvZGVjVVRGODo6cmVnaXN0ZXJDb2Rl
Y3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICByZWdpc3RyYXIoIlVURi04
IiwgY3JlYXRlLCAwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbm9uQVNDSUlTZXF1ZW5jZUxl
bmd0aCh1bnNpZ25lZCBjaGFyIGZpcnN0Qnl0ZSkKK3sKKyAgICBBU1NFUlQoIWlzQVNDSUkoZmly
c3RCeXRlKSk7CisgICAgc3dpdGNoIChmaXJzdEJ5dGUgPj4gNCkgeworICAgIGNhc2UgMHhGOgor
ICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIDB4RToKKyAgICAgICAgcmV0dXJuIDM7CisgICAg
fQorICAgIHJldHVybiAyOworfQorCitzdGF0aWMgaW5saW5lIGludCBkZWNvZGVOb25BU0NJSVNl
cXVlbmNlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNlcXVlbmNlLCB1bnNpZ25lZCBsZW5ndGgpCit7
CisgICAgQVNTRVJUKCFpc0FTQ0lJKHNlcXVlbmNlWzBdKSk7CisgICAgaWYgKGxlbmd0aCA9PSAy
KSB7CisgICAgICAgIEFTU0VSVChzZXF1ZW5jZVswXSA8PSAweERGKTsKKyAgICAgICAgaWYgKHNl
cXVlbmNlWzBdIDwgMHhDMikKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKHNl
cXVlbmNlWzFdIDwgMHg4MCB8fCBzZXF1ZW5jZVsxXSA+IDB4QkYpCisgICAgICAgICAgICByZXR1
cm4gLTE7CisgICAgICAgIHJldHVybiAoKHNlcXVlbmNlWzBdIDw8IDYpICsgc2VxdWVuY2VbMV0p
IC0gMHgwMDAwMzA4MDsKKyAgICB9CisgICAgaWYgKGxlbmd0aCA9PSAzKSB7CisgICAgICAgIEFT
U0VSVChzZXF1ZW5jZVswXSA+PSAweEUwICYmIHNlcXVlbmNlWzBdIDw9IDB4RUYpOworICAgICAg
ICBzd2l0Y2ggKHNlcXVlbmNlWzBdKSB7CisgICAgICAgIGNhc2UgMHhFMDoKKyAgICAgICAgICAg
IGlmIChzZXF1ZW5jZVsxXSA8IDB4QTAgfHwgc2VxdWVuY2VbMV0gPiAweEJGKQorICAgICAgICAg
ICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4RUQ6
CisgICAgICAgICAgICBpZiAoc2VxdWVuY2VbMV0gPCAweDgwIHx8IHNlcXVlbmNlWzFdID4gMHg5
RikKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmIChzZXF1ZW5jZVsxXSA8IDB4ODAgfHwgc2VxdWVu
Y2VbMV0gPiAweEJGKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoc2VxdWVuY2VbMl0gPCAweDgwIHx8IHNlcXVlbmNlWzJdID4gMHhCRikKKyAgICAg
ICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuICgoc2VxdWVuY2VbMF0gPDwgMTIpICsg
KHNlcXVlbmNlWzFdIDw8IDYpICsgc2VxdWVuY2VbMl0pIC0gMHgwMDBFMjA4MDsKKyAgICB9Cisg
ICAgQVNTRVJUKGxlbmd0aCA9PSA0KTsKKyAgICBBU1NFUlQoc2VxdWVuY2VbMF0gPj0gMHhGMCAm
JiBzZXF1ZW5jZVswXSA8PSAweEY0KTsKKyAgICBzd2l0Y2ggKHNlcXVlbmNlWzBdKSB7CisgICAg
Y2FzZSAweEYwOgorICAgICAgICBpZiAoc2VxdWVuY2VbMV0gPCAweDkwIHx8IHNlcXVlbmNlWzFd
ID4gMHhCRikKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSAweEY0OgorICAgICAgICBpZiAoc2VxdWVuY2VbMV0gPCAweDgwIHx8IHNlcXVlbmNlWzFdID4g
MHg4RikKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgaWYgKHNlcXVlbmNlWzFdIDwgMHg4MCB8fCBzZXF1ZW5jZVsxXSA+IDB4QkYp
CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmIChzZXF1ZW5jZVsyXSA8IDB4
ODAgfHwgc2VxdWVuY2VbMl0gPiAweEJGKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKHNl
cXVlbmNlWzNdIDwgMHg4MCB8fCBzZXF1ZW5jZVszXSA+IDB4QkYpCisgICAgICAgIHJldHVybiAt
MTsKKyAgICByZXR1cm4gKChzZXF1ZW5jZVswXSA8PCAxOCkgKyAoc2VxdWVuY2VbMV0gPDwgMTIp
ICsgKHNlcXVlbmNlWzJdIDw8IDYpICsgc2VxdWVuY2VbM10pIC0gMHgwM0M4MjA4MDsKK30KKwor
U3RyaW5nIFRleHRDb2RlY1VURjg6OmRlY29kZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxl
bmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpCit7Cisg
ICAgU3RyaW5nQnVmZmVyIGJ1ZmZlcihsZW5ndGgpOworCisgICAgY29uc3QgdWludDhfdCogc291
cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYnl0ZXMpOworICAgIGNvbnN0
IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZSArIGxlbmd0aDsKKyAgICBjb25zdCB1aW50OF90KiBhbGln
bmVkRW5kID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4ocmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KGVuZCkgJiB+KHNpemVvZih1aW50cHRyX3QpIC0gMSkpOworICAgIFVDaGFy
KiBkZXN0aW5hdGlvbiA9IGJ1ZmZlci5jaGFyYWN0ZXJzKCk7CisKKyAgICBpbnQgY291bnQ7Cisg
ICAgaW50IGNoYXJhY3RlcjsKKworICAgIGlmIChtX3BhcnRpYWxTZXF1ZW5jZVNpemUpIHsKKyAg
ICAgICAgY291bnQgPSBub25BU0NJSVNlcXVlbmNlTGVuZ3RoKG1fcGFydGlhbFNlcXVlbmNlWzBd
KTsKKyAgICAgICAgQVNTRVJUKGNvdW50ID4gbV9wYXJ0aWFsU2VxdWVuY2VTaXplKTsKKyAgICAg
ICAgaWYgKGNvdW50IC0gbV9wYXJ0aWFsU2VxdWVuY2VTaXplID4gZW5kIC0gc291cmNlKSB7Cisg
ICAgICAgICAgICBtZW1jcHkobV9wYXJ0aWFsU2VxdWVuY2UgKyBtX3BhcnRpYWxTZXF1ZW5jZVNp
emUsIHNvdXJjZSwgZW5kIC0gc291cmNlKTsKKyAgICAgICAgICAgIG1fcGFydGlhbFNlcXVlbmNl
U2l6ZSArPSBlbmQgLSBzb3VyY2U7CisgICAgICAgICAgICBzb3VyY2UgPSBlbmQ7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICB1aW50OF90IGNvbXBsZXRlU2VxdWVuY2VbVThfTUFYX0xF
TkdUSF07CisgICAgICAgICAgICBtZW1jcHkoY29tcGxldGVTZXF1ZW5jZSwgbV9wYXJ0aWFsU2Vx
dWVuY2UsIG1fcGFydGlhbFNlcXVlbmNlU2l6ZSk7CisgICAgICAgICAgICBtZW1jcHkoY29tcGxl
dGVTZXF1ZW5jZSArIG1fcGFydGlhbFNlcXVlbmNlU2l6ZSwgc291cmNlLCBjb3VudCAtIG1fcGFy
dGlhbFNlcXVlbmNlU2l6ZSk7CisgICAgICAgICAgICBzb3VyY2UgKz0gY291bnQgLSBtX3BhcnRp
YWxTZXF1ZW5jZVNpemU7CisgICAgICAgICAgICBtX3BhcnRpYWxTZXF1ZW5jZVNpemUgPSAwOwor
ICAgICAgICAgICAgY2hhcmFjdGVyID0gZGVjb2RlTm9uQVNDSUlTZXF1ZW5jZShjb21wbGV0ZVNl
cXVlbmNlLCBjb3VudCk7CisgICAgICAgICAgICBnb3RvIGRlY29kZWROb25BU0NJSTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHdoaWxlIChzb3VyY2UgPCBlbmQpIHsKKyAgICAgICAgaWYgKGlz
QVNDSUkoKnNvdXJjZSkpIHsKKyAgICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgQVNDSUkuIE1v
c3QgVVRGLTggdGV4dCB3aWxsIGFjdHVhbGx5IGJlIEFTQ0lJLgorICAgICAgICAgICAgLy8gV2hl
biB3ZSdyZSBhdCBhIHByb3Blcmx5IGFsaWduZWQgYWRkcmVzcywgcmVhZCBmdWxsIENQVSB3b3Jk
cy4KKyAgICAgICAgICAgIGlmICghKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihzb3VyY2Up
ICYgKHNpemVvZih1aW50cHRyX3QpIC0gMSkpKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKHNv
dXJjZSA8IGFsaWduZWRFbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgdWludHB0cl90IGNodW5r
ID0gKnJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IHVpbnRwdHJfdCo+KHNvdXJjZSk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChjaHVuayAmIE5vbkFTQ0lJTWFzazxzaXplb2YodWludHB0cl90
KT46OnZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FTQ0lJKCpzb3Vy
Y2UpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgZ290byBub25BU0NJSTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBVQ2hhckJ5dGVGaWxsZXI8c2l6ZW9mKHVpbnRwdHJfdCk+Ojpjb3B5KGRlc3Rp
bmF0aW9uLCBzb3VyY2UpOworICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc2l6ZW9mKHVp
bnRwdHJfdCk7CisgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uICs9IHNpemVvZih1aW50
cHRyX3QpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc291cmNlID09
IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAqZGVzdGluYXRpb24rKyA9ICpzb3VyY2UrKzsKKyAgICAgICAgfSBlbHNlIHsKK25vbkFT
Q0lJOgorICAgICAgICAgICAgY291bnQgPSBub25BU0NJSVNlcXVlbmNlTGVuZ3RoKCpzb3VyY2Up
OworICAgICAgICAgICAgQVNTRVJUKGNvdW50ID49IDIpOworICAgICAgICAgICAgQVNTRVJUKGNv
dW50IDw9IDQpOworICAgICAgICAgICAgaWYgKGNvdW50ID4gZW5kIC0gc291cmNlKSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGVuZCAtIHNvdXJjZSA8PSBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KHNpemVvZihtX3BhcnRpYWxTZXF1ZW5jZSkpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW1f
cGFydGlhbFNlcXVlbmNlU2l6ZSk7CisgICAgICAgICAgICAgICAgbV9wYXJ0aWFsU2VxdWVuY2VT
aXplID0gZW5kIC0gc291cmNlOworICAgICAgICAgICAgICAgIG1lbWNweShtX3BhcnRpYWxTZXF1
ZW5jZSwgc291cmNlLCBtX3BhcnRpYWxTZXF1ZW5jZVNpemUpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2hhcmFjdGVyID0gZGVjb2RlTm9uQVND
SUlTZXF1ZW5jZShzb3VyY2UsIGNvdW50KTsKKyAgICAgICAgICAgIHNvdXJjZSArPSBjb3VudDsK
K2RlY29kZWROb25BU0NJSToKKyAgICAgICAgICAgIGlmIChjaGFyYWN0ZXIgPCAwKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHN0b3BPbkVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIHNhd0Vy
cm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIVVfSVNfU1VS
Uk9HQVRFKGNoYXJhY3RlcikpOworICAgICAgICAgICAgICAgIGlmIChVX0lTX0JNUChjaGFyYWN0
ZXIpKQorICAgICAgICAgICAgICAgICAgICAqZGVzdGluYXRpb24rKyA9IGNoYXJhY3RlcjsKKyAg
ICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uKysg
PSBVMTZfTEVBRChjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgICAgICAqZGVzdGluYXRpb24r
KyA9IFUxNl9UUkFJTChjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGJ1ZmZlci5zaHJpbmsoZGVzdGluYXRpb24gLSBi
dWZmZXIuY2hhcmFjdGVycygpKTsKKworICAgIGlmIChmbHVzaCAmJiBtX3BhcnRpYWxTZXF1ZW5j
ZVNpemUpCisgICAgICAgIHNhd0Vycm9yID0gdHJ1ZTsKKworICAgIHJldHVybiBTdHJpbmc6OmFk
b3B0KGJ1ZmZlcik7Cit9CisKK0NTdHJpbmcgVGV4dENvZGVjVVRGODo6ZW5jb2RlKGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nKQorewor
ICAgIC8vIFRoZSBtYXhpbXVtIG51bWJlciBvZiBVVEYtOCBieXRlcyBuZWVkZWQgcGVyIFVURi0x
NiBjb2RlIHVuaXQgaXMgMy4KKyAgICAvLyBCTVAgY2hhcmFjdGVycyB0YWtlIG9ubHkgb25lIFVU
Ri0xNiBjb2RlIHVuaXQgYW5kIGNhbiB0YWtlIHVwIHRvIDMgYnl0ZXMgKDN4KS4KKyAgICAvLyBO
b24tQk1QIGNoYXJhY3RlcnMgdGFrZSB0d28gVVRGLTE2IGNvZGUgdW5pdHMgYW5kIGNhbiB0YWtl
IHVwIHRvIDQgYnl0ZXMgKDJ4KS4KKyAgICBpZiAobGVuZ3RoID4gbnVtZXJpY19saW1pdHM8c2l6
ZV90Pjo6bWF4KCkgLyAzKQorICAgICAgICBDUkFTSCgpOworICAgIFZlY3Rvcjx1aW50OF90PiBi
eXRlcyhsZW5ndGggKiAzKTsKKworICAgIHNpemVfdCBpID0gMDsKKyAgICBzaXplX3QgYnl0ZXNX
cml0dGVuID0gMDsKKyAgICB3aGlsZSAoaSA8IGxlbmd0aCkgeworICAgICAgICBVQ2hhcjMyIGNo
YXJhY3RlcjsKKyAgICAgICAgVTE2X05FWFQoY2hhcmFjdGVycywgaSwgbGVuZ3RoLCBjaGFyYWN0
ZXIpOworICAgICAgICBVOF9BUFBFTkRfVU5TQUZFKGJ5dGVzLmRhdGEoKSwgYnl0ZXNXcml0dGVu
LCBjaGFyYWN0ZXIpOworICAgIH0KKworICAgIHJldHVybiBDU3RyaW5nKHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KGJ5dGVzLmRhdGEoKSksIGJ5dGVzV3JpdHRlbik7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dENvZGVjVVRGOC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQog
ICArIG5hdGl2ZQoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVj
VVRGOC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENv
ZGVjVVRGOC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0Q29kZWNVVEY4LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIFRleHRDb2RlY1VURjhfaAorI2RlZmluZSBUZXh0Q29kZWNVVEY4X2gKKworI2luY2x1
ZGUgIlRleHRDb2RlYy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRleHRDb2Rl
Y1VURjggOiBwdWJsaWMgVGV4dENvZGVjIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCByZWdp
c3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyKTsKKyAgICBzdGF0aWMgdm9p
ZCByZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIpOworCisgICAgdmlydHVhbCBTdHJp
bmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0
b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcik7CisgICAgdmlydHVhbCBDU3RyaW5nIGVuY29kZShj
b25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcpOworCitwcml2
YXRlOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHRDb2RlYz4gY3JlYXRlKGNvbnN0IFRleHRF
bmNvZGluZyYsIGNvbnN0IHZvaWQqKTsKKyAgICBUZXh0Q29kZWNVVEY4KCkgOiBtX3BhcnRpYWxT
ZXF1ZW5jZVNpemUoMCkgeyB9CisKKyAgICBpbnQgbV9wYXJ0aWFsU2VxdWVuY2VTaXplOworICAg
IGNoYXIgbV9wYXJ0aWFsU2VxdWVuY2VbVThfTUFYX0xFTkdUSCAtIDFdOworICAgIAorfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVGV4dENvZGVjVVRGOF9oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcAko
cmV2aXNpb24gNzc3ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2Rl
Y1VURjE2LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsOCBAQCBTdHJpbmcgVGV4dENv
ZGVjVVRGMTY6OmRlY29kZShjb25zdCBjaGFyCiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKIAorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBnZW5lcmF0ZSBhbiBl
cnJvciBpZiB0aGVyZSBpcyBhbiB1bnBhaXJlZCBzdXJyb2dhdGUuCisKICAgICBjb25zdCB1bnNp
Z25lZCBjaGFyKiBwID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oYnl0
ZXMpOwogICAgIHNpemVfdCBudW1CeXRlcyA9IGxlbmd0aCArIG1faGF2ZUJ1ZmZlcmVkQnl0ZTsK
ICAgICBzaXplX3QgbnVtQ2hhcnMgPSBudW1CeXRlcyAvIDI7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAkocmV2
aXNpb24gNzc3ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGlu
Z1JlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTQgKzI3LDEyIEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nUmVnaXN0cnkuaCIKIAotI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiVGV4dENvZGVjTGF0aW4xLmgiCiAjaW5j
bHVkZSAiVGV4dENvZGVjVXNlckRlZmluZWQuaCIKICNpbmNsdWRlICJUZXh0Q29kZWNVVEYxNi5o
IgorI2luY2x1ZGUgIlRleHRDb2RlY1VURjguaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIK
ICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
Ci0jaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgpAQCAtNTMsOSArNTEsNiBAQAogI2lmIFVTRShHTElCX1VOSUNPREUpCiAjaW5jbHVkZSAiZ3Rr
L1RleHRDb2RlY0d0ay5oIgogI2VuZGlmCi0jaWYgVVNFKEJSRVdNUF9VTklDT0RFKQotI2luY2x1
ZGUgImJyZXcvVGV4dENvZGVjQnJldy5oIgotI2VuZGlmCiAjaWYgT1MoV0lOQ0UpICYmICFQTEFU
Rk9STShRVCkKICNpbmNsdWRlICJUZXh0Q29kZWNXaW5DRS5oIgogI2VuZGlmCkBAIC02OCw3ICs2
Myw2IEBAIGNvbnN0IHNpemVfdCBtYXhFbmNvZGluZ05hbWVMZW5ndGggPSA2MzsKIAogLy8gSGFz
aCBmb3IgYWxsLUFTQ0lJIHN0cmluZ3MgdGhhdCBkb2VzIGNhc2UgZm9sZGluZy4KIHN0cnVjdCBU
ZXh0RW5jb2RpbmdOYW1lSGFzaCB7Ci0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBjaGFy
KiBzMSwgY29uc3QgY2hhciogczIpCiAgICAgewogICAgICAgICBjaGFyIGMxOwpAQCAtMTI5LDkg
KzEyMyw3IEBAIHN0YXRpYyBib29sIGRpZEV4dGVuZFRleHRDb2RlY01hcHM7CiBzdGF0aWMgSGFz
aFNldDxjb25zdCBjaGFyKj4qIGphcGFuZXNlRW5jb2RpbmdzOwogc3RhdGljIEhhc2hTZXQ8Y29u
c3QgY2hhcio+KiBub25CYWNrc2xhc2hFbmNvZGluZ3M7CiAKLXN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCB0ZXh0RW5jb2RpbmdOYW1lQmxhY2tsaXN0W10gPSB7Ci0gICAgIlVURi03IgotfTsKK3N0
YXRpYyBjb25zdCBjaGFyKiBjb25zdCB0ZXh0RW5jb2RpbmdOYW1lQmxhY2tsaXN0W10gPSB7ICJV
VEYtNyIgfTsKIAogI2lmIEVSUk9SX0RJU0FCTEVECiAKQEAgLTIyNSwzMSArMjE3LDE5IEBAIHN0
YXRpYyB2b2lkIGJ1aWxkQmFzZVRleHRDb2RlY01hcHMoKQogICAgIFRleHRDb2RlY0xhdGluMTo6
cmVnaXN0ZXJFbmNvZGluZ05hbWVzKGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcCk7CiAgICAgVGV4
dENvZGVjTGF0aW4xOjpyZWdpc3RlckNvZGVjcyhhZGRUb1RleHRDb2RlY01hcCk7CiAKKyAgICBU
ZXh0Q29kZWNVVEY4OjpyZWdpc3RlckVuY29kaW5nTmFtZXMoYWRkVG9UZXh0RW5jb2RpbmdOYW1l
TWFwKTsKKyAgICBUZXh0Q29kZWNVVEY4OjpyZWdpc3RlckNvZGVjcyhhZGRUb1RleHRDb2RlY01h
cCk7CisKICAgICBUZXh0Q29kZWNVVEYxNjo6cmVnaXN0ZXJFbmNvZGluZ05hbWVzKGFkZFRvVGV4
dEVuY29kaW5nTmFtZU1hcCk7CiAgICAgVGV4dENvZGVjVVRGMTY6OnJlZ2lzdGVyQ29kZWNzKGFk
ZFRvVGV4dENvZGVjTWFwKTsKIAogICAgIFRleHRDb2RlY1VzZXJEZWZpbmVkOjpyZWdpc3RlckVu
Y29kaW5nTmFtZXMoYWRkVG9UZXh0RW5jb2RpbmdOYW1lTWFwKTsKICAgICBUZXh0Q29kZWNVc2Vy
RGVmaW5lZDo6cmVnaXN0ZXJDb2RlY3MoYWRkVG9UZXh0Q29kZWNNYXApOwogCi0jaWYgVVNFKElD
VV9VTklDT0RFKQotICAgIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1lcyhh
ZGRUb1RleHRFbmNvZGluZ05hbWVNYXApOwotICAgIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJCYXNl
Q29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKLSNlbmRpZgotCiAjaWYgVVNFKEdMSUJfVU5JQ09E
RSkKICAgICBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQmFzZUVuY29kaW5nTmFtZXMoYWRkVG9UZXh0
RW5jb2RpbmdOYW1lTWFwKTsKICAgICBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQmFzZUNvZGVjcyhh
ZGRUb1RleHRDb2RlY01hcCk7CiAjZW5kaWYKLQotI2lmIFVTRShCUkVXTVBfVU5JQ09ERSkKLSAg
ICBUZXh0Q29kZWNCcmV3OjpyZWdpc3RlckJhc2VFbmNvZGluZ05hbWVzKGFkZFRvVGV4dEVuY29k
aW5nTmFtZU1hcCk7Ci0gICAgVGV4dENvZGVjQnJldzo6cmVnaXN0ZXJCYXNlQ29kZWNzKGFkZFRv
VGV4dENvZGVjTWFwKTsKLSNlbmRpZgotCi0jaWYgT1MoV0lOQ0UpICYmICFQTEFURk9STShRVCkK
LSAgICBUZXh0Q29kZWNXaW5DRTo6cmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1lcyhhZGRUb1RleHRF
bmNvZGluZ05hbWVNYXApOwotICAgIFRleHRDb2RlY1dpbkNFOjpyZWdpc3RlckJhc2VDb2RlY3Mo
YWRkVG9UZXh0Q29kZWNNYXApOwotI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIGFkZEVuY29kaW5n
TmFtZShIYXNoU2V0PGNvbnN0IGNoYXIqPiogc2V0LCBjb25zdCBjaGFyKiBuYW1lKQpAQCAtMjY4
LDcgKzI0OCw3IEBAIHN0YXRpYyB2b2lkIGJ1aWxkUXVpcmtzU2V0cygpCiAgICAgQVNTRVJUKCFq
YXBhbmVzZUVuY29kaW5ncyk7CiAgICAgQVNTRVJUKCFub25CYWNrc2xhc2hFbmNvZGluZ3MpOwog
Ci0gICAgamFwYW5lc2VFbmNvZGluZ3MgPSBuZXcgSGFzaFNldDxjb25zdCBjaGFyKj4oKTsKKyAg
ICBqYXBhbmVzZUVuY29kaW5ncyA9IG5ldyBIYXNoU2V0PGNvbnN0IGNoYXIqPjsKICAgICBhZGRF
bmNvZGluZ05hbWUoamFwYW5lc2VFbmNvZGluZ3MsICJFVUMtSlAiKTsKICAgICBhZGRFbmNvZGlu
Z05hbWUoamFwYW5lc2VFbmNvZGluZ3MsICJJU08tMjAyMi1KUCIpOwogICAgIGFkZEVuY29kaW5n
TmFtZShqYXBhbmVzZUVuY29kaW5ncywgIklTTy0yMDIyLUpQLTEiKTsKQEAgLTI4NCw3ICsyNjQs
NyBAQCBzdGF0aWMgdm9pZCBidWlsZFF1aXJrc1NldHMoKQogICAgIGFkZEVuY29kaW5nTmFtZShq
YXBhbmVzZUVuY29kaW5ncywgImNwOTMyIik7CiAgICAgYWRkRW5jb2RpbmdOYW1lKGphcGFuZXNl
RW5jb2RpbmdzLCAieC1tYWMtamFwYW5lc2UiKTsKIAotICAgIG5vbkJhY2tzbGFzaEVuY29kaW5n
cyA9IG5ldyBIYXNoU2V0PGNvbnN0IGNoYXIqPigpOworICAgIG5vbkJhY2tzbGFzaEVuY29kaW5n
cyA9IG5ldyBIYXNoU2V0PGNvbnN0IGNoYXIqPjsKICAgICAvLyBUaGUgdGV4dCBlbmNvZGluZ3Mg
YmVsb3cgdHJlYXQgYmFja3NsYXNoIGFzIGEgY3VycmVuY3kgc3ltYm9sIGZvciBJRSBjb21wYXRp
YmlsaXR5LgogICAgIC8vIFNlZSBodHRwOi8vYmxvZ3MubXNkbi5jb20vbWljaGthcC9hcmNoaXZl
LzIwMDUvMDkvMTcvNDY5OTQxLmFzcHggZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgYWRkRW5j
b2RpbmdOYW1lKG5vbkJhY2tzbGFzaEVuY29kaW5ncywgIngtbWFjLWphcGFuZXNlIik7CkBAIC0z
MDgsOCArMjg4LDggQEAgYm9vbCBzaG91bGRTaG93QmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbAog
c3RhdGljIHZvaWQgZXh0ZW5kVGV4dENvZGVjTWFwcygpCiB7CiAjaWYgVVNFKElDVV9VTklDT0RF
KQotICAgIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJFeHRlbmRlZEVuY29kaW5nTmFtZXMoYWRkVG9U
ZXh0RW5jb2RpbmdOYW1lTWFwKTsKLSAgICBUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyRXh0ZW5kZWRD
b2RlY3MoYWRkVG9UZXh0Q29kZWNNYXApOworICAgIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJFbmNv
ZGluZ05hbWVzKGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcCk7CisgICAgVGV4dENvZGVjSUNVOjpy
ZWdpc3RlckNvZGVjcyhhZGRUb1RleHRDb2RlY01hcCk7CiAjZW5kaWYKIAogI2lmIFVTRShRVDRf
VU5JQ09ERSkKQEAgLTMyOCw4ICszMDgsOCBAQCBzdGF0aWMgdm9pZCBleHRlbmRUZXh0Q29kZWNN
YXBzKCkKICNlbmRpZgogCiAjaWYgT1MoV0lOQ0UpICYmICFQTEFURk9STShRVCkKLSAgICBUZXh0
Q29kZWNXaW5DRTo6cmVnaXN0ZXJFeHRlbmRlZEVuY29kaW5nTmFtZXMoYWRkVG9UZXh0RW5jb2Rp
bmdOYW1lTWFwKTsKLSAgICBUZXh0Q29kZWNXaW5DRTo6cmVnaXN0ZXJFeHRlbmRlZENvZGVjcyhh
ZGRUb1RleHRDb2RlY01hcCk7CisgICAgVGV4dENvZGVjV2luQ0U6OnJlZ2lzdGVyRW5jb2RpbmdO
YW1lcyhhZGRUb1RleHRFbmNvZGluZ05hbWVNYXApOworICAgIFRleHRDb2RlY1dpbkNFOjpyZWdp
c3RlckNvZGVjcyhhZGRUb1RleHRDb2RlY01hcCk7CiAjZW5kaWYKIAogICAgIHBydW5lQmxhY2ts
aXN0ZWRDb2RlY3MoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvYnJldy9U
ZXh0Q29kZWNCcmV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L2JyZXcvVGV4dENvZGVjQnJldy5jcHAJKHJldmlzaW9uIDc3NzgyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9icmV3L1RleHRDb2RlY0JyZXcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MywyMyArNDMsMTMgQEAgc3RhdGljIFBhc3NPd25QdHI8VGV4dENvZGVjPiBuZXdUZXh0
Q29kZQogICAgIHJldHVybiBuZXcgVGV4dENvZGVjQnJldyhlbmNvZGluZyk7CiB9CiAKLXZvaWQg
VGV4dENvZGVjQnJldzo6cmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdp
c3RyYXIgcmVnaXN0cmFyKQotewotICAgIHJlZ2lzdHJhcigiVVRGLTgiLCAiVVRGLTgiKTsKLX0K
LQotdm9pZCBUZXh0Q29kZWNCcmV3OjpyZWdpc3RlckJhc2VDb2RlY3MoVGV4dENvZGVjUmVnaXN0
cmFyIHJlZ2lzdHJhcikKLXsKLSAgICByZWdpc3RyYXIoIlVURi04IiwgbmV3VGV4dENvZGVjQnJl
dywgMCk7Ci19Ci0KLXZvaWQgVGV4dENvZGVjQnJldzo6cmVnaXN0ZXJFeHRlbmRlZEVuY29kaW5n
TmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3ZvaWQgVGV4dENvZGVjQnJl
dzo6cmVnaXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIp
CiB7CiAgICAgLy8gRklYTUU6IE5vdCBzdXJlIGhvdyB0byBlbnVtZXJhdGUgYWxsIGF2YWlsYWJs
ZSBlbmNvZGluZ3MuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBUZXh0Q29kZWNC
cmV3OjpyZWdpc3RlckV4dGVuZGVkQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdpc3RyYXIp
Cit2b2lkIFRleHRDb2RlY0JyZXc6OnJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciBy
ZWdpc3RyYXIpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvYnJldy9UZXh0Q29kZWNCcmV3LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9icmV3L1RleHRDb2RlY0JyZXcuaAkocmV2aXNpb24g
Nzc3ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2JyZXcvVGV4dENvZGVjQnJl
dy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMSArMzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIFRleHRDb2RlY0JyZXcgOiBwdWJsaWMgVGV4dENvZGVjIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgdm9pZCByZWdpc3RlckJhc2VFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lz
dHJhcik7Ci0gICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCYXNlQ29kZWNzKFRleHRDb2RlY1JlZ2lz
dHJhcik7Ci0KLSAgICBzdGF0aWMgdm9pZCByZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhF
bmNvZGluZ05hbWVSZWdpc3RyYXIpOwotICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRXh0ZW5kZWRD
b2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckVuY29k
aW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyKTsKKyAgICBzdGF0aWMgdm9pZCByZWdpc3Rl
ckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIpOwogCiAgICAgVGV4dENvZGVjQnJldyhjb25zdCBU
ZXh0RW5jb2RpbmcmKTsKICAgICB2aXJ0dWFsIH5UZXh0Q29kZWNCcmV3KCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5jcHAJKHJl
dmlzaW9uIDc3NzgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENv
ZGVjR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw2IEBAIHN0YXRpYyB2b2lk
IHJlZ2lzdGVyQ29kZWNJZkF2YWlsYWJsZShUZXgKIHZvaWQgVGV4dENvZGVjR3RrOjpyZWdpc3Rl
ckJhc2VFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIpCiB7CiAg
ICAgLy8gVW5pY29kZQotICAgIHJlZ2lzdGVyRW5jb2RpbmdOYW1lSWZBdmFpbGFibGUocmVnaXN0
cmFyLCAiVVRGLTgiKTsKICAgICByZWdpc3RlckVuY29kaW5nTmFtZUlmQXZhaWxhYmxlKHJlZ2lz
dHJhciwgIlVURi0zMiIpOwogICAgIHJlZ2lzdGVyRW5jb2RpbmdOYW1lSWZBdmFpbGFibGUocmVn
aXN0cmFyLCAiVVRGLTMyQkUiKTsKICAgICByZWdpc3RlckVuY29kaW5nTmFtZUlmQXZhaWxhYmxl
KHJlZ2lzdHJhciwgIlVURi0zMkxFIik7CkBAIC0xMjcsNyArMTI2LDYgQEAgdm9pZCBUZXh0Q29k
ZWNHdGs6OnJlZ2lzdGVyQmFzZUVuY29kaW5nTgogdm9pZCBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVy
QmFzZUNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyKQogewogICAgIC8vIFVuaWNv
ZGUKLSAgICByZWdpc3RlckNvZGVjSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiVVRGLTgiKTsKICAg
ICByZWdpc3RlckNvZGVjSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiVVRGLTMyIik7CiAgICAgcmVn
aXN0ZXJDb2RlY0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIlVURi0zMkJFIik7CiAgICAgcmVnaXN0
ZXJDb2RlY0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIlVURi0zMkxFIik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbmNlL1RleHRDb2RlY1dpbkNFLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbmNlL1RleHRDb2RlY1dpbkNFLmNw
cAkocmV2aXNpb24gNzc3ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbmNl
L1RleHRDb2RlY1dpbkNFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDkgKzEyMiw2IEBAIExh
bmd1YWdlTWFuYWdlcjo6TGFuZ3VhZ2VNYW5hZ2VyKCkKIAogc3RhdGljIFVJTlQgZ2V0Q29kZVBh
Z2UoY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICBpZiAoIXN0cmNtcChuYW1lLCAiVVRGLTgiKSkK
LSAgICAgICAgcmV0dXJuIENQX1VURjg7Ci0KICAgICAvLyBFeHBsaWNpdGx5IHVzZSBhICJjb25z
dCIgcmVmZXJlbmNlIHRvIGZpeCB0aGUgc2lsbHkgVlMgYnVpbGQgZXJyb3IKICAgICAvLyBzYXlp
bmcgIj09IiBpcyBub3QgZm91bmQgZm9yIGNvbnN0X2l0ZXJhdG9yIGFuZCBpdGVyYXRvcgogICAg
IGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz4mIGNoYXJzZXRzID0ga25vd25DaGFy
c2V0cygpOwpAQCAtMTQ2LDE3ICsxNDMsNyBAQCBUZXh0Q29kZWNXaW5DRTo6flRleHRDb2RlY1dp
bkNFKCkKIHsKIH0KIAotdm9pZCBUZXh0Q29kZWNXaW5DRTo6cmVnaXN0ZXJCYXNlRW5jb2RpbmdO
YW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQotewotICAgIHJlZ2lzdHJhcigi
VVRGLTgiLCAiVVRGLTgiKTsKLX0KLQotdm9pZCBUZXh0Q29kZWNXaW5DRTo6cmVnaXN0ZXJCYXNl
Q29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdpc3RyYXIpCi17Ci0gICAgcmVnaXN0cmFyKCJV
VEYtOCIsIG5ld1RleHRDb2RlY1dpbkNFLCAwKTsKLX0KLQotdm9pZCBUZXh0Q29kZWNXaW5DRTo6
cmVnaXN0ZXJFeHRlbmRlZEVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lz
dHJhcikKK3ZvaWQgVGV4dENvZGVjV2luQ0U6OnJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGlu
Z05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQogewogICAgIGxhbmd1YWdlTWFuYWdlcigpOwogICAg
IGZvciAoQ2hhcnNldFNldDo6aXRlcmF0b3IgaSA9IHN1cHBvcnRlZENoYXJzZXRzKCkuYmVnaW4o
KTsgaSAhPSBzdXBwb3J0ZWRDaGFyc2V0cygpLmVuZCgpOyArK2kpIHsKQEAgLTE2OSw3ICsxNTYs
NyBAQCB2b2lkIFRleHRDb2RlY1dpbkNFOjpyZWdpc3RlckV4dGVuZGVkRW5jCiAgICAgfQogfQog
Ci12b2lkIFRleHRDb2RlY1dpbkNFOjpyZWdpc3RlckV4dGVuZGVkQ29kZWNzKFRleHRDb2RlY1Jl
Z2lzdHJhciByZWdpc3RyYXIpCit2b2lkIFRleHRDb2RlY1dpbkNFOjpyZWdpc3RlckNvZGVjcyhU
ZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyKQogewogICAgIGxhbmd1YWdlTWFuYWdlcigpOwog
ICAgIGZvciAoQ2hhcnNldFNldDo6aXRlcmF0b3IgaSA9IHN1cHBvcnRlZENoYXJzZXRzKCkuYmVn
aW4oKTsgaSAhPSBzdXBwb3J0ZWRDaGFyc2V0cygpLmVuZCgpOyArK2kpIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luY2UvVGV4dENvZGVjV2luQ0UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbmNlL1RleHRDb2RlY1dpbkNFLmgJ
KHJldmlzaW9uIDc3NzgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93aW5jZS9U
ZXh0Q29kZWNXaW5DRS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMSArMzksOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIFRleHRDb2RlY1dpbkNFIDogcHVibGljIFRleHRDb2RlYyB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1lcyhFbmNv
ZGluZ05hbWVSZWdpc3RyYXIpOwotICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmFzZUNvZGVjcyhU
ZXh0Q29kZWNSZWdpc3RyYXIpOwotCi0gICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJFeHRlbmRlZEVu
Y29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyKTsKLSAgICBzdGF0aWMgdm9pZCByZWdp
c3RlckV4dGVuZGVkQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7CisgICAgc3RhdGljIHZvaWQg
cmVnaXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhcik7CisgICAgc3RhdGlj
IHZvaWQgcmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKIAogICAgIFRleHRDb2Rl
Y1dpbkNFKFVJTlQgY29kZVBhZ2UpOwogICAgIHZpcnR1YWwgflRleHRDb2RlY1dpbkNFKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82247</attachid>
            <date>2011-02-12 17:16:18 -0800</date>
            <delta_ts>2011-02-14 04:35:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53898-20110212171617.patch</filename>
            <type>text/plain</type>
            <size>29063</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4NDI1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTYgQEAKKzIwMTEtMDItMTIgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCBidWlsdC1pbiBkZWNvZGVyIGZvciBVVEYtOCBmb3IgaW1wcm92
ZWQgcGVyZm9ybWFuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUzODk4CisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0czsgbm90IGFk
ZGluZyBuZXcgdGVzdHMgYXQgdGhpcyB0aW1lLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbm93IGhh
bmRsZXMgZXJyb3JzIGluIHRoZSBzYW1lIHdheSB0aGUgZXhpc3RpbmcgY29kZWNzIGRvLAorICAg
ICAgICBhbmQgc28gcGFzc2VzIG91ciB0ZXN0cy4gVGhlIHByZXZpb3VzIHZlcnNpb24gZmFpbGVk
IHNvbWUgdGVzdHMgYmVjYXVzZQorICAgICAgICBvZiBpbmNvcnJlY3QgZXJyb3IgaGFuZGxpbmcu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGUpOiBSZW5hbWVkIGZyb20gbmV3VGV4dENvZGVjSUNVLCBtYWRlIGEgc3Rh
dGljIG1lbWJlcgorICAgICAgICBmdW5jdGlvbiwgYW5kIGFkZGVkIGEgY2FsbCB0byBhZG9wdFB0
ci4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0lDVTo6cmVnaXN0ZXJFbmNvZGluZ05hbWVz
KTogUmVuYW1lZCBmcm9tCisgICAgICAgIHJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVzIHNp
bmNlIHRoaXMgY2xhc3MgaXMgbm8gbG9uZ2VyIHVzZWQgZm9yCisgICAgICAgIGJhc2UgY29kZWNz
LiBSZW1vdmVkIGFsaWFzZXMgZm9yIFVURi04OyBub3cgaGFuZGxlZCBieSBUZXh0Q29kZWNVVEY4
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjSUNVOjpyZWdpc3RlckNvZGVjcyk6IFJlbmFt
ZWQuCisgICAgICAgIChXZWJDb3JlOjpmYWxsYmFja0ZvckdCSyk6IFJlbmFtZWQgdG8gY29uZm9y
bSB0byBvdXIgY3VycmVudCBzdHlsZS4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENv
ZGVjSUNVLmg6IFVwZGF0ZWQgZm9yIGFib3ZlIGNoYW5nZXMuIENoYW5nZWQKKyAgICAgICAgaW5k
ZW50YXRpb24uIE1hZGUgbW9zdCBmdW5jdGlvbnMgcHJpdmF0ZSwgaW5jbHVkaW5nIHZpcnR1YWwg
ZnVuY3Rpb24KKyAgICAgICAgb3ZlcnJpZGVzLiBNYXJrZWQgSUNVQ29udmVydGVyV3JhcHBlciBu
b25jb3B5YWJsZS4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGOC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNVVEY4OjpyZWdpc3RlckVuY29kaW5nTmFtZXMp
OiBBZGRlZCB0aGUgVVRGLTggYWxpYXNlcworICAgICAgICB0aGF0IHdlcmUgZm9ybWVybHkgYWRk
ZWQgYnkgVGV4dENvZGVjSUNVLgorICAgICAgICAoV2ViQ29yZTo6bm9uQVNDSUlTZXF1ZW5jZUxl
bmd0aCk6IEZpeGVkIGJ1ZyB3aGVyZSB0aGlzIHdvdWxkIHJldHVybiA0IGZvcgorICAgICAgICBi
eXRlcyBGNS1GRiBpbnN0ZWFkIG9mIGZhaWxpbmcuCisgICAgICAgIChXZWJDb3JlOjpkZWNvZGVO
b25BU0NJSVNlcXVlbmNlKTogVHdlYWtlZCBjb2Rpbmcgc3R5bGUuCisgICAgICAgIChXZWJDb3Jl
OjphcHBlbmRDaGFyYWN0ZXIpOiBBZGRlZC4gTWFrZXMgaXQgZWFzaWVyIHRvIHNoYXJlIGNvZGUg
YmV0d2VlbgorICAgICAgICB0aGUgcGFydGlhbC1jaGFyYWN0ZXIgaGFuZGxpbmcgYW5kIG1haW4g
bG9vcC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1VURjg6OmRlY29kZSk6IEZpeGVkIGJ1
ZmZlciBzaXplIGNvbXB1dGF0aW9uIGZvciBjYXNlCisgICAgICAgIHdoZXJlIHRoZXJlIGlzIGEg
cGFydGlhbCBzZXF1ZW5jZS4gRml4ZWQgcGFydGlhbCBzZXF1ZW5jZSBoYW5kbGluZyBzbyB0aGF0
CisgICAgICAgIGdvdG8gaXMgbm8gbG9uZ2VyIG5lZWRlZCwgc2luY2UgY29tcGlsZXJzIHNvbWV0
aW1lcyBtYWtlIHBvb3IgY29kZSB3aGVuCisgICAgICAgIGdvdG8gaXMgaW52b2x2ZWQuIEFkZGVk
IGEgbG9vcCBmb3IgcGFydGlhbCBzZXF1ZW5jZXMgc2luY2Ugd2UgY29uc3VtZSBvbmx5CisgICAg
ICAgIG9uZSBieXRlIHdoZW4gYSBwYXJ0aWFsIHNlcXVlbmNlIGlzIGludmFsaWQuIEZpeGVkIGxv
Z2ljIGluIG1haW4gZGVjb2RpbmcKKyAgICAgICAgbG9vcCBzbyBnb3RvIGlzIG5vdCBuZWVkZWQu
IFVzZWQgZWFybHktZXhpdCBzdHlsZSBpbiBib3RoIGxvb3BzIHNvIHRoZSBtYWluCisgICAgICAg
IGZsb3cgaXMgbm90IG5lc3RlZCBpbnNpZGUgaWYgc3RhdGVtZW50cy4gQWRkZWQgY29ycmVjdCBl
cnJvciBoYW5kbGluZyBmb3IKKyAgICAgICAgZmx1c2ggd2hlbiBhIHBhcnRpYWwgc2VxdWVuY2Ug
cmVtYWlucywgd2hpY2ggaW52b2x2ZWQgd3JhcHBpbmcgdGhlIGZ1bmN0aW9uCisgICAgICAgIGlu
IHlldCBhbm90aGVyIGxvb3AuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VU
RjguaDogTWFkZSB2aXJ0dWFsIGZ1bmN0aW9uIG92ZXJyaWRlcyBwcml2YXRlLgorCisgICAgICAg
ICogcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpidWlsZEJhc2VUZXh0Q29kZWNNYXBzKTogQWRkZWQgY2FsbHMgdG8gVGV4dENvZGVjVVRG
OC4gUmVtb3ZlZAorICAgICAgICBjYWxscyB0byBUZXh0Q29kZWNJQ1UuIEFkZGVkIEZJWE1FcyBm
b3Igb3RoZXIgY29kZWNzIHRoYXQgbm8gbG9uZ2VyIG5lZWQKKyAgICAgICAgdG8gYmUgaW5jbHVk
ZWQgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OmV4dGVuZFRleHRDb2RlY01hcHMpOiBVcGRhdGVk
IGZvciB0aGUgbmFtZSBjaGFuZ2Ugb2YgdGhlCisgICAgICAgIFRleHRDb2RlY0lDVSBmdW5jdGlv
bnMuCisKIDIwMTEtMDItMTIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcAkocmV2aXNpb24gNzg0MjUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNiwgMjAwNywgMjAwOCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dApAQCAtMjcsMTUgKzI3LDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiVGV4dENvZGVjSUNVLmgiCiAKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgogI2luY2x1ZGUgIlRocmVhZEdsb2JhbERhdGEuaCIKICNpbmNsdWRlIDx1bmljb2RlL3VjbnYu
aD4KICNpbmNsdWRlIDx1bmljb2RlL3VjbnZfY2IuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi91
bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAKIHVzaW5nIHN0ZDo6bWluOwpAQCAtNTUsMjIgKzUz
LDEyIEBAIHN0YXRpYyBVQ29udmVydGVyKiYgY2FjaGVkQ29udmVydGVySUNVKCkKICAgICByZXR1
cm4gdGhyZWFkR2xvYmFsRGF0YSgpLmNhY2hlZENvbnZlcnRlcklDVSgpLmNvbnZlcnRlcjsKIH0K
IAotc3RhdGljIFBhc3NPd25QdHI8VGV4dENvZGVjPiBuZXdUZXh0Q29kZWNJQ1UoY29uc3QgVGV4
dEVuY29kaW5nJiBlbmNvZGluZywgY29uc3Qgdm9pZCopCi17Ci0gICAgcmV0dXJuIG5ldyBUZXh0
Q29kZWNJQ1UoZW5jb2RpbmcpOwotfQotCi12b2lkIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJCYXNl
RW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQorUGFzc093blB0
cjxUZXh0Q29kZWM+IFRleHRDb2RlY0lDVTo6Y3JlYXRlKGNvbnN0IFRleHRFbmNvZGluZyYgZW5j
b2RpbmcsIGNvbnN0IHZvaWQqKQogewotICAgIHJlZ2lzdHJhcigiVVRGLTgiLCAiVVRGLTgiKTsK
KyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRleHRDb2RlY0lDVShlbmNvZGluZykpOwogfQogCi12
b2lkIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJCYXNlQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciBy
ZWdpc3RyYXIpCi17Ci0gICAgcmVnaXN0cmFyKCJVVEYtOCIsIG5ld1RleHRDb2RlY0lDVSwgMCk7
Ci19Ci0KLXZvaWQgVGV4dENvZGVjSUNVOjpyZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhF
bmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQordm9pZCBUZXh0Q29kZWNJQ1U6OnJlZ2lz
dGVyRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQogewogICAg
IC8vIFdlIHJlZ2lzdGVyIEhlYnJldyB3aXRoIGxvZ2ljYWwgb3JkZXJpbmcgdXNpbmcgYSBzZXBh
cmF0ZSBuYW1lLgogICAgIC8vIE90aGVyd2lzZSwgdGhpcyB3b3VsZCBzaGFyZSB0aGUgc2FtZSBj
YW5vbmljYWwgbmFtZSBhcyB0aGUKQEAgLTE0Myw5ICsxMzEsNiBAQCB2b2lkIFRleHRDb2RlY0lD
VTo6cmVnaXN0ZXJFeHRlbmRlZEVuY29kCiAgICAgcmVnaXN0cmFyKCJjc0lTTzg4NTk4SSIsICJJ
U08tODg1OS04LUkiKTsKICAgICByZWdpc3RyYXIoImtvaSIsICJLT0k4LVIiKTsKICAgICByZWdp
c3RyYXIoImxvZ2ljYWwiLCAiSVNPLTg4NTktOC1JIik7Ci0gICAgcmVnaXN0cmFyKCJ1bmljb2Rl
MTF1dGY4IiwgIlVURi04Iik7Ci0gICAgcmVnaXN0cmFyKCJ1bmljb2RlMjB1dGY4IiwgIlVURi04
Iik7Ci0gICAgcmVnaXN0cmFyKCJ4LXVuaWNvZGUyMHV0ZjgiLCAiVVRGLTgiKTsKICAgICByZWdp
c3RyYXIoInZpc3VhbCIsICJJU08tODg1OS04Iik7CiAgICAgcmVnaXN0cmFyKCJ3aW5hcmFiaWMi
LCAid2luZG93cy0xMjU2Iik7CiAgICAgcmVnaXN0cmFyKCJ3aW5iYWx0aWMiLCAid2luZG93cy0x
MjU3Iik7CkBAIC0xNjMsNyArMTQ4LDYgQEAgdm9pZCBUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyRXh0
ZW5kZWRFbmNvZAogICAgIHJlZ2lzdHJhcigieC1ldWMiLCAiRVVDLUpQIik7CiAgICAgcmVnaXN0
cmFyKCJ4LXdpbmRvd3MtOTQ5IiwgIndpbmRvd3MtOTQ5Iik7CiAgICAgcmVnaXN0cmFyKCJ4LXVo
YyIsICJ3aW5kb3dzLTk0OSIpOwotICAgIHJlZ2lzdHJhcigidXRmOCIsICJVVEYtOCIpOwogICAg
IHJlZ2lzdHJhcigic2hpZnQtamlzIiwgIlNoaWZ0X0pJUyIpOwogCiAgICAgLy8gVGhlc2UgYWxp
YXNlcyBhcmUgcHJlc2VudCBpbiBtb2Rlcm4gdmVyc2lvbnMgb2YgSUNVLCBidXQgdXNlIGRpZmZl
cmVudCBjb2RlY3MsIGFuZCBoYXZlIG5vIHN0YW5kYXJkIG5hbWVzLgpAQCAtMTkwLDEwICsxNzQs
MTAgQEAgdm9pZCBUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyRXh0ZW5kZWRFbmNvZAogICAgIC8vIGFu
ZCBiZWNhdXNlIG9sZGVyIHZlcnNpb25zIG9mIElDVSBkb24ndCBzdXBwb3J0IElTTy04ODU5LTE2
IGVuY29kaW5nIGF0IGFsbC4KIH0KIAotdm9pZCBUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyRXh0ZW5k
ZWRDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3ZvaWQgVGV4dENvZGVjSUNV
OjpyZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyKQogewogICAgIC8v
IFNlZSBjb21tZW50IGFib3ZlIGluIHJlZ2lzdGVyRW5jb2RpbmdOYW1lcy4KLSAgICByZWdpc3Ry
YXIoIklTTy04ODU5LTgtSSIsIG5ld1RleHRDb2RlY0lDVSwgMCk7CisgICAgcmVnaXN0cmFyKCJJ
U08tODg1OS04LUkiLCBjcmVhdGUsIDApOwogCiAgICAgaW50MzJfdCBudW1FbmNvZGluZ3MgPSB1
Y252X2NvdW50QXZhaWxhYmxlKCk7CiAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbnVtRW5j
b2RpbmdzOyArK2kpIHsKQEAgLTIwNiw3ICsxOTAsNyBAQCB2b2lkIFRleHRDb2RlY0lDVTo6cmVn
aXN0ZXJFeHRlbmRlZENvZGVjCiAgICAgICAgICAgICBpZiAoIVVfU1VDQ0VTUyhlcnJvcikgfHwg
IXN0YW5kYXJkTmFtZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAg
ICAgICByZWdpc3RyYXIoc3RhbmRhcmROYW1lLCBuZXdUZXh0Q29kZWNJQ1UsIDApOworICAgICAg
ICByZWdpc3RyYXIoc3RhbmRhcmROYW1lLCBjcmVhdGUsIDApOwogICAgIH0KIH0KIApAQCAtMzAw
LDYgKzI4NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEFTU0VSVChlcnIgPT0gVV9aRVJPX0VS
Uk9SKTsKICAgICAgICAgfQogICAgIH0KKwogcHJpdmF0ZToKICAgICBVQ29udmVydGVyKiBtX2Nv
bnZlcnRlcjsKICAgICBib29sIG1fc2hvdWxkU3RvcE9uRW5jb2RpbmdFcnJvcnM7CkBAIC0zNTQs
MjggKzMzOSwyNyBAQCBTdHJpbmcgVGV4dENvZGVjSUNVOjpkZWNvZGUoY29uc3QgY2hhciogCiB9
CiAKIC8vIFdlIG5lZWQgdG8gYXBwbHkgdGhlc2UgZmFsbGJhY2tzIG91cnNlbHZlcyBhcyB0aGV5
IGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZCBieSBJQ1UgYW5kCi0vLyB0aGV5IHdlcmUgcHJv
dmlkZWQgYnkgdGhlIG9sZCBURUMgZW5jb2RpbmcgcGF0aAotLy8gTmVlZGVkIHRvIGZpeCA8cmRh
cjovL3Byb2JsZW0vNDcwODY4OT4KLXN0YXRpYyBVQ2hhciBnZXRHYmtFc2NhcGUoVUNoYXIzMiBj
b2RlUG9pbnQpCi17Ci0gICAgc3dpdGNoIChjb2RlUG9pbnQpIHsKLSAgICAgICAgY2FzZSAweDAx
Rjk6Ci0gICAgICAgICAgICByZXR1cm4gMHhFN0M4OwotICAgICAgICBjYXNlIDB4MUUzRjoKLSAg
ICAgICAgICAgIHJldHVybiAweEU3Qzc7Ci0gICAgICAgIGNhc2UgMHgyMkVGOgotICAgICAgICAg
ICAgcmV0dXJuIDB4MjAyNjsKLSAgICAgICAgY2FzZSAweDMwMUM6Ci0gICAgICAgICAgICByZXR1
cm4gMHhGRjVFOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIDA7CisvLyB0
aGV5IHdlcmUgcHJvdmlkZWQgYnkgdGhlIG9sZCBURUMgZW5jb2RpbmcgcGF0aC4KKy8vIE5lZWRl
ZCB0byBmaXggPHJkYXI6Ly9wcm9ibGVtLzQ3MDg2ODk+Lgorc3RhdGljIFVDaGFyIGZhbGxiYWNr
Rm9yR0JLKFVDaGFyMzIgY2hhcmFjdGVyKQoreworICAgIHN3aXRjaCAoY2hhcmFjdGVyKSB7Cisg
ICAgY2FzZSAweDAxRjk6CisgICAgICAgIHJldHVybiAweEU3Qzg7CisgICAgY2FzZSAweDFFM0Y6
CisgICAgICAgIHJldHVybiAweEU3Qzc7CisgICAgY2FzZSAweDIyRUY6CisgICAgICAgIHJldHVy
biAweDIwMjY7CisgICAgY2FzZSAweDMwMUM6CisgICAgICAgIHJldHVybiAweEZGNUU7CiAgICAg
fQorICAgIHJldHVybiAwOwogfQogCiAvLyBJbnZhbGlkIGNoYXJhY3RlciBoYW5kbGVyIHdoZW4g
d3JpdGluZyBlc2NhcGVkIGVudGl0aWVzIGZvciB1bnJlcHJlc2VudGFibGUKIC8vIGNoYXJhY3Rl
cnMuIFNlZSB0aGUgZGVjbGFyYXRpb24gb2YgVGV4dENvZGVjOjplbmNvZGUgZm9yIG1vcmUuCiBz
dGF0aWMgdm9pZCB1cmxFc2NhcGVkRW50aXR5Q2FsbGJhY2soY29uc3Qgdm9pZCogY29udGV4dCwg
VUNvbnZlcnRlckZyb21Vbmljb2RlQXJncyogZnJvbVVBcmdzLCBjb25zdCBVQ2hhciogY29kZVVu
aXRzLCBpbnQzMl90IGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBVQ2hhcjMyIGNvZGVQb2ludCwgVUNvbnZlcnRlckNhbGxiYWNrUmVhc29uIHJlYXNvbiwgVUVy
cm9yQ29kZSogZXJyKQorICAgIFVDaGFyMzIgY29kZVBvaW50LCBVQ29udmVydGVyQ2FsbGJhY2tS
ZWFzb24gcmVhc29uLCBVRXJyb3JDb2RlKiBlcnIpCiB7CiAgICAgaWYgKHJlYXNvbiA9PSBVQ05W
X1VOQVNTSUdORUQpIHsKICAgICAgICAgKmVyciA9IFVfWkVST19FUlJPUjsKQEAgLTM4OSwxMCAr
MzczLDEwIEBAIHN0YXRpYyB2b2lkIHVybEVzY2FwZWRFbnRpdHlDYWxsYmFjayhjb24KIAogLy8g
U3Vic3RpdHV0ZXMgc3BlY2lhbCBHQksgY2hhcmFjdGVycywgZXNjYXBpbmcgYWxsIG90aGVyIHVu
YXNzaWduZWQgZW50aXRpZXMuCiBzdGF0aWMgdm9pZCBnYmtDYWxsYmFja0VzY2FwZShjb25zdCB2
b2lkKiBjb250ZXh0LCBVQ29udmVydGVyRnJvbVVuaWNvZGVBcmdzKiBmcm9tVUFyZ3MsIGNvbnN0
IFVDaGFyKiBjb2RlVW5pdHMsIGludDMyX3QgbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVUNoYXIzMiBjb2RlUG9pbnQsIFVDb252ZXJ0ZXJDYWxsYmFja1JlYXNvbiByZWFz
b24sIFVFcnJvckNvZGUqIGVycikgCisgICAgVUNoYXIzMiBjb2RlUG9pbnQsIFVDb252ZXJ0ZXJD
YWxsYmFja1JlYXNvbiByZWFzb24sIFVFcnJvckNvZGUqIGVycikgCiB7CiAgICAgVUNoYXIgb3V0
Q2hhcjsKLSAgICBpZiAocmVhc29uID09IFVDTlZfVU5BU1NJR05FRCAmJiAob3V0Q2hhciA9IGdl
dEdia0VzY2FwZShjb2RlUG9pbnQpKSkgeworICAgIGlmIChyZWFzb24gPT0gVUNOVl9VTkFTU0lH
TkVEICYmIChvdXRDaGFyID0gZmFsbGJhY2tGb3JHQksoY29kZVBvaW50KSkpIHsKICAgICAgICAg
Y29uc3QgVUNoYXIqIHNvdXJjZSA9ICZvdXRDaGFyOwogICAgICAgICAqZXJyID0gVV9aRVJPX0VS
Uk9SOwogICAgICAgICB1Y252X2NiRnJvbVVXcml0ZVVDaGFycyhmcm9tVUFyZ3MsICZzb3VyY2Us
IHNvdXJjZSArIDEsIDAsIGVycik7CkBAIC00MDMsMTAgKzM4NywxMCBAQCBzdGF0aWMgdm9pZCBn
YmtDYWxsYmFja0VzY2FwZShjb25zdCB2b2lkCiAKIC8vIENvbWJpbmVzIGJvdGggZ2JrVXJsRXNj
YXBlZEVudGl0eUNhbGxiYWNrIGFuZCBHQksgY2hhcmFjdGVyIHN1YnN0aXR1dGlvbi4KIHN0YXRp
YyB2b2lkIGdia1VybEVzY2FwZWRFbnRpdHlDYWxsYWNrKGNvbnN0IHZvaWQqIGNvbnRleHQsIFVD
b252ZXJ0ZXJGcm9tVW5pY29kZUFyZ3MqIGZyb21VQXJncywgY29uc3QgVUNoYXIqIGNvZGVVbml0
cywgaW50MzJfdCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBVQ2hhcjMyIGNvZGVQb2ludCwgVUNvbnZlcnRlckNhbGxiYWNrUmVhc29uIHJlYXNvbiwgVUVy
cm9yQ29kZSogZXJyKSAKKyAgICBVQ2hhcjMyIGNvZGVQb2ludCwgVUNvbnZlcnRlckNhbGxiYWNr
UmVhc29uIHJlYXNvbiwgVUVycm9yQ29kZSogZXJyKSAKIHsKICAgICBpZiAocmVhc29uID09IFVD
TlZfVU5BU1NJR05FRCkgewotICAgICAgICBpZiAoVUNoYXIgb3V0Q2hhciA9IGdldEdia0VzY2Fw
ZShjb2RlUG9pbnQpKSB7CisgICAgICAgIGlmIChVQ2hhciBvdXRDaGFyID0gZmFsbGJhY2tGb3JH
QksoY29kZVBvaW50KSkgewogICAgICAgICAgICAgY29uc3QgVUNoYXIqIHNvdXJjZSA9ICZvdXRD
aGFyOwogICAgICAgICAgICAgKmVyciA9IFVfWkVST19FUlJPUjsKICAgICAgICAgICAgIHVjbnZf
Y2JGcm9tVVdyaXRlVUNoYXJzKGZyb21VQXJncywgJnNvdXJjZSwgc291cmNlICsgMSwgMCwgZXJy
KTsKQEAgLTQxOSwxMCArNDAzLDEwIEBAIHN0YXRpYyB2b2lkIGdia1VybEVzY2FwZWRFbnRpdHlD
YWxsYWNrKGMKIH0KIAogc3RhdGljIHZvaWQgZ2JrQ2FsbGJhY2tTdWJzdGl0dXRlKGNvbnN0IHZv
aWQqIGNvbnRleHQsIFVDb252ZXJ0ZXJGcm9tVW5pY29kZUFyZ3MqIGZyb21VQXJncywgY29uc3Qg
VUNoYXIqIGNvZGVVbml0cywgaW50MzJfdCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVUNoYXIzMiBjb2RlUG9pbnQsIFVDb252ZXJ0ZXJDYWxsYmFja1JlYXNvbiBy
ZWFzb24sIFVFcnJvckNvZGUqIGVycikgCisgICAgVUNoYXIzMiBjb2RlUG9pbnQsIFVDb252ZXJ0
ZXJDYWxsYmFja1JlYXNvbiByZWFzb24sIFVFcnJvckNvZGUqIGVycikgCiB7CiAgICAgVUNoYXIg
b3V0Q2hhcjsKLSAgICBpZiAocmVhc29uID09IFVDTlZfVU5BU1NJR05FRCAmJiAob3V0Q2hhciA9
IGdldEdia0VzY2FwZShjb2RlUG9pbnQpKSkgeworICAgIGlmIChyZWFzb24gPT0gVUNOVl9VTkFT
U0lHTkVEICYmIChvdXRDaGFyID0gZmFsbGJhY2tGb3JHQksoY29kZVBvaW50KSkpIHsKICAgICAg
ICAgY29uc3QgVUNoYXIqIHNvdXJjZSA9ICZvdXRDaGFyOwogICAgICAgICAqZXJyID0gVV9aRVJP
X0VSUk9SOwogICAgICAgICB1Y252X2NiRnJvbVVXcml0ZVVDaGFycyhmcm9tVUFyZ3MsICZzb3Vy
Y2UsIHNvdXJjZSArIDEsIDAsIGVycik7CkBAIC00ODYsNSArNDcwLDQgQEAgQ1N0cmluZyBUZXh0
Q29kZWNJQ1U6OmVuY29kZShjb25zdCBVQ2hhcgogICAgIHJldHVybiBDU3RyaW5nKHJlc3VsdC5k
YXRhKCksIHNpemUpOwogfQogCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuaAkocmV2aXNpb24gNzg0MjUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwg
MjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDYsIDIwMDcsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKQEAgLTI5LDcgKzI5LDYgQEAKIAogI2luY2x1ZGUgIlRleHRDb2RlYy5o
IgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgotCiAjaW5jbHVkZSA8dW5pY29kZS91dHlwZXMu
aD4KIAogdHlwZWRlZiBzdHJ1Y3QgVUNvbnZlcnRlciBVQ29udmVydGVyOwpAQCAtMzgsMTkgKzM3
LDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFRleHRDb2RlY0lDVSA6IHB1
YmxpYyBUZXh0Q29kZWMgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0
ZXJCYXNlRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIpOwotICAgICAgICBzdGF0
aWMgdm9pZCByZWdpc3RlckJhc2VDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKKyAgICAgICAg
c3RhdGljIHZvaWQgcmVnaXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhcik7
CisgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7
CiAKLSAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJFeHRlbmRlZEVuY29kaW5nTmFtZXMoRW5j
b2RpbmdOYW1lUmVnaXN0cmFyKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJFeHRlbmRl
ZENvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIpOworICAgICAgICB2aXJ0dWFsIH5UZXh0Q29kZWNJ
Q1UoKTsKIAorICAgIHByaXZhdGU6CiAgICAgICAgIFRleHRDb2RlY0lDVShjb25zdCBUZXh0RW5j
b2RpbmcmKTsKLSAgICAgICAgdmlydHVhbCB+VGV4dENvZGVjSUNVKCk7CisgICAgICAgIHN0YXRp
YyBQYXNzT3duUHRyPFRleHRDb2RlYz4gY3JlYXRlKGNvbnN0IFRleHRFbmNvZGluZyYsIGNvbnN0
IHZvaWQqKTsKIAogICAgICAgICB2aXJ0dWFsIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNp
emVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9y
KTsKICAgICAgICAgdmlydHVhbCBDU3RyaW5nIGVuY29kZShjb25zdCBVQ2hhciosIHNpemVfdCBs
ZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcpOwogCi0gICAgcHJpdmF0ZToKICAgICAgICAgdm9p
ZCBjcmVhdGVJQ1VDb252ZXJ0ZXIoKSBjb25zdDsKICAgICAgICAgdm9pZCByZWxlYXNlSUNVQ29u
dmVydGVyKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgbmVlZHNHQktGYWxsYmFja3MoKSBjb25zdCB7
IHJldHVybiBtX25lZWRzR0JLRmFsbGJhY2tzOyB9CkBAIC02NywxMyArNjUsMTIgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIH07CiAKICAgICBzdHJ1Y3QgSUNVQ29udmVydGVyV3JhcHBlciB7
Ci0gICAgICAgIElDVUNvbnZlcnRlcldyYXBwZXIoKQotICAgICAgICAgICAgOiBjb252ZXJ0ZXIo
MCkKLSAgICAgICAgewotICAgICAgICB9CisgICAgICAgIElDVUNvbnZlcnRlcldyYXBwZXIoKSA6
IGNvbnZlcnRlcigwKSB7IH0KICAgICAgICAgfklDVUNvbnZlcnRlcldyYXBwZXIoKTsKIAogICAg
ICAgICBVQ29udmVydGVyKiBjb252ZXJ0ZXI7CisKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoSUNVQ29udmVydGVyV3JhcHBlcik7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEY4LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjgu
Y3BwCShyZXZpc2lvbiA3ODQyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dENvZGVjVVRGOC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEzICsyOCwxNSBAQAogCiAjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1ZmZl
ci5oPgotI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VURjguaD4KKyNpbmNsdWRlIDx3dGYvdW5pY29k
ZS9DaGFyYWN0ZXJOYW1lcy5oPgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOjpVbmljb2RlOwogdXNp
bmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjb25zdCBpbnQgbm9u
Q2hhcmFjdGVyID0gLTE7CisKIC8vIEFzc3VtaW5nIHRoYXQgYSBwb2ludGVyIGlzIHRoZSBzaXpl
IG9mIGEgIm1hY2hpbmUgd29yZCIsIHRoZW4KIC8vIHVpbnRwdHJfdCBpcyBhbiBpbnRlZ2VyIHR5
cGUgdGhhdCBpcyBhbHNvIGEgbWFjaGluZSB3b3JkLgogdHlwZWRlZiB1aW50cHRyX3QgTWFjaGlu
ZVdvcmQ7CkBAIC05Myw2ICs5NSwxNSBAQCBQYXNzT3duUHRyPFRleHRDb2RlYz4gVGV4dENvZGVj
VVRGODo6Y3JlCiB2b2lkIFRleHRDb2RlY1VURjg6OnJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNv
ZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQogewogICAgIHJlZ2lzdHJhcigiVVRGLTgiLCAi
VVRGLTgiKTsKKworICAgIC8vIEFkZGl0aW9uYWwgYWxpYXNlcyB0aGF0IG9yaWdpbmFsbHkgd2Vy
ZSBwcmVzZW50IGluIHRoZSBlbmNvZGluZworICAgIC8vIHRhYmxlIGluIFdlYktpdCBvbiBNYWNp
bnRvc2gsIGFuZCBzdWJzZXF1ZW50bHkgYWRkZWQgYnkKKyAgICAvLyBUZXh0Q29kZWNJQ1UuIFBl
cmhhcHMgd2UgY2FuIHByb3ZlIHNvbWUgYXJlIG5vdCB1c2VkIG9uIHRoZSB3ZWIKKyAgICAvLyBh
bmQgcmVtb3ZlIHRoZW0uCisgICAgcmVnaXN0cmFyKCJ1bmljb2RlMTF1dGY4IiwgIlVURi04Iik7
CisgICAgcmVnaXN0cmFyKCJ1bmljb2RlMjB1dGY4IiwgIlVURi04Iik7CisgICAgcmVnaXN0cmFy
KCJ1dGY4IiwgIlVURi04Iik7CisgICAgcmVnaXN0cmFyKCJ4LXVuaWNvZGUyMHV0ZjgiLCAiVVRG
LTgiKTsKIH0KIAogdm9pZCBUZXh0Q29kZWNVVEY4OjpyZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNS
ZWdpc3RyYXIgcmVnaXN0cmFyKQpAQCAtMTAwLDI3ICsxMTEsMzggQEAgdm9pZCBUZXh0Q29kZWNV
VEY4OjpyZWdpc3RlckNvZGVjcyhUZXh0QwogICAgIHJlZ2lzdHJhcigiVVRGLTgiLCBjcmVhdGUs
IDApOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBub25BU0NJSVNlcXVlbmNlTGVuZ3RoKHVuc2ln
bmVkIGNoYXIgZmlyc3RCeXRlKQorc3RhdGljIGlubGluZSBpbnQgbm9uQVNDSUlTZXF1ZW5jZUxl
bmd0aCh1aW50OF90IGZpcnN0Qnl0ZSkKIHsKLSAgICBBU1NFUlQoIWlzQVNDSUkoZmlyc3RCeXRl
KSk7Ci0gICAgc3dpdGNoIChmaXJzdEJ5dGUgPj4gNCkgewotICAgIGNhc2UgMHhGOgotICAgICAg
ICByZXR1cm4gNDsKLSAgICBjYXNlIDB4RToKLSAgICAgICAgcmV0dXJuIDM7Ci0gICAgfQotICAg
IHJldHVybiAyOworICAgIHN0YXRpYyBjb25zdCB1aW50OF90IGxlbmd0aHNbMjU2XSA9IHsKKyAg
ICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAg
ICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAg
ICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAg
ICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAg
ICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAg
ICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAg
ICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAg
ICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAg
ICAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwKKyAg
ICAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwKKyAg
ICAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwKKyAg
ICAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwKKyAg
ICAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwKKyAg
ICAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwKKyAg
ICAgICAgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywKKyAg
ICAgICAgNCwgNCwgNCwgNCwgNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAorICAg
IH07CisgICAgcmV0dXJuIGxlbmd0aHNbZmlyc3RCeXRlXTsKIH0KIAotc3RhdGljIGlubGluZSBp
bnQgZGVjb2RlTm9uQVNDSUlTZXF1ZW5jZShjb25zdCB1bnNpZ25lZCBjaGFyKiBzZXF1ZW5jZSwg
dW5zaWduZWQgbGVuZ3RoKQorc3RhdGljIGlubGluZSBpbnQgZGVjb2RlTm9uQVNDSUlTZXF1ZW5j
ZShjb25zdCB1aW50OF90KiBzZXF1ZW5jZSwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIEFTU0VS
VCghaXNBU0NJSShzZXF1ZW5jZVswXSkpOwogICAgIGlmIChsZW5ndGggPT0gMikgewogICAgICAg
ICBBU1NFUlQoc2VxdWVuY2VbMF0gPD0gMHhERik7CiAgICAgICAgIGlmIChzZXF1ZW5jZVswXSA8
IDB4QzIpCi0gICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICByZXR1cm4gbm9uQ2hh
cmFjdGVyOwogICAgICAgICBpZiAoc2VxdWVuY2VbMV0gPCAweDgwIHx8IHNlcXVlbmNlWzFdID4g
MHhCRikKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHJldHVybiBub25DaGFy
YWN0ZXI7CiAgICAgICAgIHJldHVybiAoKHNlcXVlbmNlWzBdIDw8IDYpICsgc2VxdWVuY2VbMV0p
IC0gMHgwMDAwMzA4MDsKICAgICB9CiAgICAgaWYgKGxlbmd0aCA9PSAzKSB7CkBAIC0xMjgsMTgg
KzE1MCwxOCBAQCBzdGF0aWMgaW5saW5lIGludCBkZWNvZGVOb25BU0NJSVNlcXVlbmNlCiAgICAg
ICAgIHN3aXRjaCAoc2VxdWVuY2VbMF0pIHsKICAgICAgICAgY2FzZSAweEUwOgogICAgICAgICAg
ICAgaWYgKHNlcXVlbmNlWzFdIDwgMHhBMCB8fCBzZXF1ZW5jZVsxXSA+IDB4QkYpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIHJldHVybiBub25DaGFyYWN0ZXI7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAweEVEOgogICAgICAgICAgICAgaWYg
KHNlcXVlbmNlWzFdIDwgMHg4MCB8fCBzZXF1ZW5jZVsxXSA+IDB4OUYpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIHJldHVybiBub25DaGFyYWN0ZXI7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGlmIChzZXF1ZW5j
ZVsxXSA8IDB4ODAgfHwgc2VxdWVuY2VbMV0gPiAweEJGKQotICAgICAgICAgICAgICAgIHJldHVy
biAtMTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9uQ2hhcmFjdGVyOwogICAgICAgICB9CiAg
ICAgICAgIGlmIChzZXF1ZW5jZVsyXSA8IDB4ODAgfHwgc2VxdWVuY2VbMl0gPiAweEJGKQotICAg
ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgcmV0dXJuIG5vbkNoYXJhY3RlcjsKICAg
ICAgICAgcmV0dXJuICgoc2VxdWVuY2VbMF0gPDwgMTIpICsgKHNlcXVlbmNlWzFdIDw8IDYpICsg
c2VxdWVuY2VbMl0pIC0gMHgwMDBFMjA4MDsKICAgICB9CiAgICAgQVNTRVJUKGxlbmd0aCA9PSA0
KTsKQEAgLTE0NywxMDkgKzE2OSwxNDkgQEAgc3RhdGljIGlubGluZSBpbnQgZGVjb2RlTm9uQVND
SUlTZXF1ZW5jZQogICAgIHN3aXRjaCAoc2VxdWVuY2VbMF0pIHsKICAgICBjYXNlIDB4RjA6CiAg
ICAgICAgIGlmIChzZXF1ZW5jZVsxXSA8IDB4OTAgfHwgc2VxdWVuY2VbMV0gPiAweEJGKQotICAg
ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgcmV0dXJuIG5vbkNoYXJhY3RlcjsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSAweEY0OgogICAgICAgICBpZiAoc2VxdWVuY2VbMV0gPCAw
eDgwIHx8IHNlcXVlbmNlWzFdID4gMHg4RikKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAg
ICAgICAgIHJldHVybiBub25DaGFyYWN0ZXI7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIGlmIChzZXF1ZW5jZVsxXSA8IDB4ODAgfHwgc2VxdWVuY2VbMV0gPiAweEJGKQot
ICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgcmV0dXJuIG5vbkNoYXJhY3RlcjsK
ICAgICB9CiAgICAgaWYgKHNlcXVlbmNlWzJdIDwgMHg4MCB8fCBzZXF1ZW5jZVsyXSA+IDB4QkYp
Ci0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIG5vbkNoYXJhY3RlcjsKICAgICBp
ZiAoc2VxdWVuY2VbM10gPCAweDgwIHx8IHNlcXVlbmNlWzNdID4gMHhCRikKLSAgICAgICAgcmV0
dXJuIC0xOworICAgICAgICByZXR1cm4gbm9uQ2hhcmFjdGVyOwogICAgIHJldHVybiAoKHNlcXVl
bmNlWzBdIDw8IDE4KSArIChzZXF1ZW5jZVsxXSA8PCAxMikgKyAoc2VxdWVuY2VbMl0gPDwgNikg
KyBzZXF1ZW5jZVszXSkgLSAweDAzQzgyMDgwOwogfQogCitzdGF0aWMgaW5saW5lIFVDaGFyKiBh
cHBlbmRDaGFyYWN0ZXIoVUNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgY2hhcmFjdGVyKQoreworICAg
IEFTU0VSVChjaGFyYWN0ZXIgIT0gbm9uQ2hhcmFjdGVyKTsKKyAgICBBU1NFUlQoIVVfSVNfU1VS
Uk9HQVRFKGNoYXJhY3RlcikpOworICAgIGlmIChVX0lTX0JNUChjaGFyYWN0ZXIpKQorICAgICAg
ICAqZGVzdGluYXRpb24rKyA9IGNoYXJhY3RlcjsKKyAgICBlbHNlIHsKKyAgICAgICAgKmRlc3Rp
bmF0aW9uKysgPSBVMTZfTEVBRChjaGFyYWN0ZXIpOworICAgICAgICAqZGVzdGluYXRpb24rKyA9
IFUxNl9UUkFJTChjaGFyYWN0ZXIpOworICAgIH0KKyAgICByZXR1cm4gZGVzdGluYXRpb247Cit9
CisKIFN0cmluZyBUZXh0Q29kZWNVVEY4OjpkZWNvZGUoY29uc3QgY2hhciogYnl0ZXMsIHNpemVf
dCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKQog
ewotICAgIFN0cmluZ0J1ZmZlciBidWZmZXIobGVuZ3RoKTsKKyAgICAvLyBFYWNoIGlucHV0IGJ5
dGUgbWlnaHQgdHVybiBpbnRvIGEgY2hhcmFjdGVyLgorICAgIC8vIFRoYXQgaW5jbHVkZXMgYWxs
IGJ5dGVzIGluIHRoZSBwYXJ0aWFsLXNlcXVlbmNlIGJ1ZmZlciBiZWNhdXNlCisgICAgLy8gZWFj
aCBieXRlIGluIGFuIGludmFsaWQgc2VxdWVuY2Ugd2lsbCB0dXJuIGludG8gYSByZXBsYWNlbWVu
dCBjaGFyYWN0ZXIuCisgICAgU3RyaW5nQnVmZmVyIGJ1ZmZlcihtX3BhcnRpYWxTZXF1ZW5jZVNp
emUgKyBsZW5ndGgpOwogCiAgICAgY29uc3QgdWludDhfdCogc291cmNlID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50OF90Kj4oYnl0ZXMpOwogICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHNv
dXJjZSArIGxlbmd0aDsKICAgICBjb25zdCB1aW50OF90KiBhbGlnbmVkRW5kID0gYWxpZ25Ub01h
Y2hpbmVXb3JkKGVuZCk7CiAgICAgVUNoYXIqIGRlc3RpbmF0aW9uID0gYnVmZmVyLmNoYXJhY3Rl
cnMoKTsKIAotICAgIGludCBjb3VudDsKLSAgICBpbnQgY2hhcmFjdGVyOwotCi0gICAgaWYgKG1f
cGFydGlhbFNlcXVlbmNlU2l6ZSkgewotICAgICAgICBjb3VudCA9IG5vbkFTQ0lJU2VxdWVuY2VM
ZW5ndGgobV9wYXJ0aWFsU2VxdWVuY2VbMF0pOwotICAgICAgICBBU1NFUlQoY291bnQgPiBtX3Bh
cnRpYWxTZXF1ZW5jZVNpemUpOwotICAgICAgICBpZiAoY291bnQgLSBtX3BhcnRpYWxTZXF1ZW5j
ZVNpemUgPiBlbmQgLSBzb3VyY2UpIHsKLSAgICAgICAgICAgIG1lbWNweShtX3BhcnRpYWxTZXF1
ZW5jZSArIG1fcGFydGlhbFNlcXVlbmNlU2l6ZSwgc291cmNlLCBlbmQgLSBzb3VyY2UpOwotICAg
ICAgICAgICAgbV9wYXJ0aWFsU2VxdWVuY2VTaXplICs9IGVuZCAtIHNvdXJjZTsKLSAgICAgICAg
ICAgIHNvdXJjZSA9IGVuZDsKLSAgICAgICAgfSBlbHNlIHsKKyAgICBkbyB7CisgICAgICAgIHdo
aWxlIChtX3BhcnRpYWxTZXF1ZW5jZVNpemUpIHsKKyAgICAgICAgICAgIGludCBjb3VudCA9IG5v
bkFTQ0lJU2VxdWVuY2VMZW5ndGgobV9wYXJ0aWFsU2VxdWVuY2VbMF0pOworICAgICAgICAgICAg
QVNTRVJUKGNvdW50ID4gbV9wYXJ0aWFsU2VxdWVuY2VTaXplKTsKKyAgICAgICAgICAgIEFTU0VS
VChjb3VudCA+PSAyKTsKKyAgICAgICAgICAgIEFTU0VSVChjb3VudCA8PSA0KTsKKyAgICAgICAg
ICAgIGlmIChjb3VudCAtIG1fcGFydGlhbFNlcXVlbmNlU2l6ZSA+IGVuZCAtIHNvdXJjZSkgewor
ICAgICAgICAgICAgICAgIGlmICghZmx1c2gpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2Ug
aGF2ZSBhbiBpbmNvbXBsZXRlIHBhcnRpYWwgc2VxdWVuY2UsIHNvIHB1dCBpdCBhbGwgaW4gdGhl
IHBhcnRpYWwKKyAgICAgICAgICAgICAgICAgICAgLy8gc2VxdWVuY2UgYnVmZmVyLCBhbmQgYnJl
YWsgb3V0IG9mIHRoaXMgbG9vcCBzbyB3ZSBjYW4gZXhpdCB0aGUgZnVuY3Rpb24uCisgICAgICAg
ICAgICAgICAgICAgIG1lbWNweShtX3BhcnRpYWxTZXF1ZW5jZSArIG1fcGFydGlhbFNlcXVlbmNl
U2l6ZSwgc291cmNlLCBlbmQgLSBzb3VyY2UpOworICAgICAgICAgICAgICAgICAgICBtX3BhcnRp
YWxTZXF1ZW5jZVNpemUgKz0gZW5kIC0gc291cmNlOworICAgICAgICAgICAgICAgICAgICBzb3Vy
Y2UgPSBlbmQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIGFuIGluY29tcGxldGUgcGFydGlhbCBzZXF1ZW5j
ZSBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCisgICAgICAgICAgICAgICAgLy8gVGhhdCBpcyBh
biBlcnJvci4KKyAgICAgICAgICAgICAgICBzYXdFcnJvciA9IHRydWU7CisgICAgICAgICAgICAg
ICAgaWYgKHN0b3BPbkVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9IGVuZDsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIC8vIEVhY2ggZXJyb3IgY29uc3VtZXMgb25lIGJ5dGUgYW5kIGdlbmVyYXRlcyBvbmUg
cmVwbGFjZW1lbnQgY2hhcmFjdGVyLgorICAgICAgICAgICAgICAgIC0tbV9wYXJ0aWFsU2VxdWVu
Y2VTaXplOworICAgICAgICAgICAgICAgIG1lbW1vdmUobV9wYXJ0aWFsU2VxdWVuY2UsIG1fcGFy
dGlhbFNlcXVlbmNlICsgMSwgbV9wYXJ0aWFsU2VxdWVuY2VTaXplKTsKKyAgICAgICAgICAgICAg
ICAqZGVzdGluYXRpb24rKyA9IHJlcGxhY2VtZW50Q2hhcmFjdGVyOworICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQogICAgICAgICAgICAgdWludDhfdCBjb21wbGV0ZVNl
cXVlbmNlW1U4X01BWF9MRU5HVEhdOwogICAgICAgICAgICAgbWVtY3B5KGNvbXBsZXRlU2VxdWVu
Y2UsIG1fcGFydGlhbFNlcXVlbmNlLCBtX3BhcnRpYWxTZXF1ZW5jZVNpemUpOwogICAgICAgICAg
ICAgbWVtY3B5KGNvbXBsZXRlU2VxdWVuY2UgKyBtX3BhcnRpYWxTZXF1ZW5jZVNpemUsIHNvdXJj
ZSwgY291bnQgLSBtX3BhcnRpYWxTZXF1ZW5jZVNpemUpOwogICAgICAgICAgICAgc291cmNlICs9
IGNvdW50IC0gbV9wYXJ0aWFsU2VxdWVuY2VTaXplOworICAgICAgICAgICAgaW50IGNoYXJhY3Rl
ciA9IGRlY29kZU5vbkFTQ0lJU2VxdWVuY2UoY29tcGxldGVTZXF1ZW5jZSwgY291bnQpOworICAg
ICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBub25DaGFyYWN0ZXIpIHsKKyAgICAgICAgICAgICAg
ICBzYXdFcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKHN0b3BPbkVycm9yKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9IGVuZDsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIEVhY2ggZXJyb3IgY29u
c3VtZXMgb25lIGJ5dGUgYW5kIGdlbmVyYXRlcyBvbmUgcmVwbGFjZW1lbnQgY2hhcmFjdGVyLgor
ICAgICAgICAgICAgICAgIG1lbWNweShtX3BhcnRpYWxTZXF1ZW5jZSwgY29tcGxldGVTZXF1ZW5j
ZSArIDEsIGNvdW50IC0gMSk7CisgICAgICAgICAgICAgICAgbV9wYXJ0aWFsU2VxdWVuY2VTaXpl
ID0gY291bnQgLSAxOworICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvbisrID0gcmVwbGFjZW1l
bnRDaGFyYWN0ZXI7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBtX3BhcnRpYWxTZXF1ZW5jZVNpemUgPSAwOwotICAgICAgICAgICAgY2hhcmFj
dGVyID0gZGVjb2RlTm9uQVNDSUlTZXF1ZW5jZShjb21wbGV0ZVNlcXVlbmNlLCBjb3VudCk7Ci0g
ICAgICAgICAgICBnb3RvIGRlY29kZWROb25BU0NJSTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9u
ID0gYXBwZW5kQ2hhcmFjdGVyKGRlc3RpbmF0aW9uLCBjaGFyYWN0ZXIpOwogICAgICAgICB9Ci0g
ICAgfQogCi0gICAgd2hpbGUgKHNvdXJjZSA8IGVuZCkgewotICAgICAgICBpZiAoaXNBU0NJSSgq
c291cmNlKSkgewotICAgICAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBBU0NJSS4gTW9zdCBVVEYt
OCB0ZXh0IHdpbGwgYmUgQVNDSUkuCi0gICAgICAgICAgICBpZiAoaXNBbGlnbmVkVG9NYWNoaW5l
V29yZChzb3VyY2UpKSB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKHNvdXJjZSA8IGFsaWduZWRF
bmQpIHsKLSAgICAgICAgICAgICAgICAgICAgTWFjaGluZVdvcmQgY2h1bmsgPSAqcmVpbnRlcnBy
ZXRfY2FzdF9wdHI8Y29uc3QgTWFjaGluZVdvcmQqPihzb3VyY2UpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoY2h1bmsgJiBOb25BU0NJSU1hc2s8c2l6ZW9mKE1hY2hpbmVXb3JkKT46OnZhbHVl
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FTQ0lJKCpzb3VyY2UpKQorICAg
ICAgICB3aGlsZSAoc291cmNlIDwgZW5kKSB7CisgICAgICAgICAgICBpZiAoaXNBU0NJSSgqc291
cmNlKSkgeworICAgICAgICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgQVNDSUkuIE1vc3QgVVRG
LTggdGV4dCB3aWxsIGJlIEFTQ0lJLgorICAgICAgICAgICAgICAgIGlmIChpc0FsaWduZWRUb01h
Y2hpbmVXb3JkKHNvdXJjZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHNvdXJjZSA8
IGFsaWduZWRFbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmVXb3JkIGNodW5r
ID0gKnJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IE1hY2hpbmVXb3JkKj4oc291cmNlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChjaHVuayAmIE5vbkFTQ0lJTWFzazxzaXplb2YoTWFj
aGluZVdvcmQpPjo6dmFsdWUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbm9uQVNDSUk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBVQ2hhckJ5dGVGaWxsZXI8c2l6ZW9mKE1hY2hpbmVXb3JkKT46OmNvcHkoZGVzdGlu
YXRpb24sIHNvdXJjZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc2l6ZW9m
KE1hY2hpbmVXb3JkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uICs9IHNp
emVvZihNYWNoaW5lV29yZCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgVUNoYXJCeXRlRmlsbGVyPHNpemVvZihNYWNoaW5lV29yZCk+Ojpjb3B5KGRlc3RpbmF0
aW9uLCBzb3VyY2UpOwotICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc2l6ZW9mKE1hY2hp
bmVXb3JkKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24gKz0gc2l6ZW9mKE1hY2hp
bmVXb3JkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSA9PSBlbmQpCisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0FTQ0lJ
KCpzb3VyY2UpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChzb3VyY2UgPT0gZW5kKQotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpkZXN0aW5hdGlvbisr
ID0gKnNvdXJjZSsrOwotICAgICAgICB9IGVsc2Ugewotbm9uQVNDSUk6Ci0gICAgICAgICAgICBj
b3VudCA9IG5vbkFTQ0lJU2VxdWVuY2VMZW5ndGgoKnNvdXJjZSk7Ci0gICAgICAgICAgICBBU1NF
UlQoY291bnQgPj0gMik7Ci0gICAgICAgICAgICBBU1NFUlQoY291bnQgPD0gNCk7Ci0gICAgICAg
ICAgICBpZiAoY291bnQgPiBlbmQgLSBzb3VyY2UpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
ZW5kIC0gc291cmNlIDw9IHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKG1fcGFydGlhbFNl
cXVlbmNlKSkpOwotICAgICAgICAgICAgICAgIEFTU0VSVCghbV9wYXJ0aWFsU2VxdWVuY2VTaXpl
KTsKLSAgICAgICAgICAgICAgICBtX3BhcnRpYWxTZXF1ZW5jZVNpemUgPSBlbmQgLSBzb3VyY2U7
Ci0gICAgICAgICAgICAgICAgbWVtY3B5KG1fcGFydGlhbFNlcXVlbmNlLCBzb3VyY2UsIG1fcGFy
dGlhbFNlcXVlbmNlU2l6ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgKmRlc3RpbmF0aW9uKysgPSAqc291cmNlKys7CisgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjaGFyYWN0ZXIgPSBkZWNvZGVOb25BU0NJSVNl
cXVlbmNlKHNvdXJjZSwgY291bnQpOwotICAgICAgICAgICAgc291cmNlICs9IGNvdW50OwotZGVj
b2RlZE5vbkFTQ0lJOgotICAgICAgICAgICAgaWYgKGNoYXJhY3RlciA8IDApIHsKLSAgICAgICAg
ICAgICAgICBpZiAoc3RvcE9uRXJyb3IpIHsKLSAgICAgICAgICAgICAgICAgICAgc2F3RXJyb3Ig
PSB0cnVlOworICAgICAgICAgICAgaW50IGNvdW50ID0gbm9uQVNDSUlTZXF1ZW5jZUxlbmd0aCgq
c291cmNlKTsKKyAgICAgICAgICAgIGludCBjaGFyYWN0ZXI7CisgICAgICAgICAgICBpZiAoIWNv
dW50KQorICAgICAgICAgICAgICAgIGNoYXJhY3RlciA9IG5vbkNoYXJhY3RlcjsKKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChjb3VudCA+PSAyKTsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoY291bnQgPD0gNCk7CisgICAgICAgICAgICAgICAgaWYgKGNvdW50ID4g
ZW5kIC0gc291cmNlKSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChlbmQgLSBzb3VyY2Ug
PD0gc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YobV9wYXJ0aWFsU2VxdWVuY2UpKSk7Cisg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbV9wYXJ0aWFsU2VxdWVuY2VTaXplKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9wYXJ0aWFsU2VxdWVuY2VTaXplID0gZW5kIC0gc291cmNlOworICAg
ICAgICAgICAgICAgICAgICBtZW1jcHkobV9wYXJ0aWFsU2VxdWVuY2UsIHNvdXJjZSwgbV9wYXJ0
aWFsU2VxdWVuY2VTaXplKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIVVf
SVNfU1VSUk9HQVRFKGNoYXJhY3RlcikpOwotICAgICAgICAgICAgICAgIGlmIChVX0lTX0JNUChj
aGFyYWN0ZXIpKQotICAgICAgICAgICAgICAgICAgICAqZGVzdGluYXRpb24rKyA9IGNoYXJhY3Rl
cjsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgKmRlc3RpbmF0
aW9uKysgPSBVMTZfTEVBRChjaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAgICAgICAqZGVzdGlu
YXRpb24rKyA9IFUxNl9UUkFJTChjaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBjaGFyYWN0ZXIgPSBkZWNvZGVOb25BU0NJSVNlcXVlbmNlKHNvdXJjZSwgY291
bnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBub25DaGFy
YWN0ZXIpIHsKKyAgICAgICAgICAgICAgICBzYXdFcnJvciA9IHRydWU7CisgICAgICAgICAgICAg
ICAgaWYgKHN0b3BPbkVycm9yKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAvLyBFYWNoIGVycm9yIGNvbnN1bWVzIG9uZSBieXRlIGFuZCBnZW5lcmF0ZXMgb25l
IHJlcGxhY2VtZW50IGNoYXJhY3Rlci4KKyAgICAgICAgICAgICAgICArK3NvdXJjZTsKKyAgICAg
ICAgICAgICAgICAqZGVzdGluYXRpb24rKyA9IHJlcGxhY2VtZW50Q2hhcmFjdGVyOworICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgc291cmNlICs9
IGNvdW50OworICAgICAgICAgICAgZGVzdGluYXRpb24gPSBhcHBlbmRDaGFyYWN0ZXIoZGVzdGlu
YXRpb24sIGNoYXJhY3Rlcik7CiAgICAgICAgIH0KLSAgICB9CisgICAgfSB3aGlsZSAoZmx1c2gg
JiYgbV9wYXJ0aWFsU2VxdWVuY2VTaXplKTsKIAogICAgIGJ1ZmZlci5zaHJpbmsoZGVzdGluYXRp
b24gLSBidWZmZXIuY2hhcmFjdGVycygpKTsKIAotICAgIGlmIChmbHVzaCAmJiBtX3BhcnRpYWxT
ZXF1ZW5jZVNpemUpCi0gICAgICAgIHNhd0Vycm9yID0gdHJ1ZTsKLQogICAgIHJldHVybiBTdHJp
bmc6OmFkb3B0KGJ1ZmZlcik7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dENvZGVjVVRGOC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dENvZGVjVVRGOC5oCShyZXZpc2lvbiA3ODQyNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGOC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyAr
MzUsMTMgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhF
bmNvZGluZ05hbWVSZWdpc3RyYXIpOwogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ29kZWNzKFRl
eHRDb2RlY1JlZ2lzdHJhcik7CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBkZWNvZGUoY29uc3QgY2hh
ciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNh
d0Vycm9yKTsKLSAgICB2aXJ0dWFsIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwgc2l6ZV90
IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZyk7Ci0KIHByaXZhdGU6CiAgICAgc3RhdGljIFBh
c3NPd25QdHI8VGV4dENvZGVjPiBjcmVhdGUoY29uc3QgVGV4dEVuY29kaW5nJiwgY29uc3Qgdm9p
ZCopOwogICAgIFRleHRDb2RlY1VURjgoKSA6IG1fcGFydGlhbFNlcXVlbmNlU2l6ZSgwKSB7IH0K
IAorICAgIHZpcnR1YWwgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwg
Ym9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpOworICAgIHZpcnR1
YWwgQ1N0cmluZyBlbmNvZGUoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJs
ZUhhbmRsaW5nKTsKKwogICAgIGludCBtX3BhcnRpYWxTZXF1ZW5jZVNpemU7CiAgICAgY2hhciBt
X3BhcnRpYWxTZXF1ZW5jZVtVOF9NQVhfTEVOR1RIIC0gMV07CiAgICAgCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNw
cAkocmV2aXNpb24gNzg0MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRF
bmNvZGluZ1JlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIwLDI4ICsyMjAsMjkgQEAg
c3RhdGljIHZvaWQgYnVpbGRCYXNlVGV4dENvZGVjTWFwcygpCiAgICAgVGV4dENvZGVjTGF0aW4x
OjpyZWdpc3RlckVuY29kaW5nTmFtZXMoYWRkVG9UZXh0RW5jb2RpbmdOYW1lTWFwKTsKICAgICBU
ZXh0Q29kZWNMYXRpbjE6OnJlZ2lzdGVyQ29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKIAorICAg
IFRleHRDb2RlY1VURjg6OnJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhhZGRUb1RleHRFbmNvZGluZ05h
bWVNYXApOworICAgIFRleHRDb2RlY1VURjg6OnJlZ2lzdGVyQ29kZWNzKGFkZFRvVGV4dENvZGVj
TWFwKTsKKwogICAgIFRleHRDb2RlY1VURjE2OjpyZWdpc3RlckVuY29kaW5nTmFtZXMoYWRkVG9U
ZXh0RW5jb2RpbmdOYW1lTWFwKTsKICAgICBUZXh0Q29kZWNVVEYxNjo6cmVnaXN0ZXJDb2RlY3Mo
YWRkVG9UZXh0Q29kZWNNYXApOwogCiAgICAgVGV4dENvZGVjVXNlckRlZmluZWQ6OnJlZ2lzdGVy
RW5jb2RpbmdOYW1lcyhhZGRUb1RleHRFbmNvZGluZ05hbWVNYXApOwogICAgIFRleHRDb2RlY1Vz
ZXJEZWZpbmVkOjpyZWdpc3RlckNvZGVjcyhhZGRUb1RleHRDb2RlY01hcCk7CiAKLSNpZiBVU0Uo
SUNVX1VOSUNPREUpCi0gICAgVGV4dENvZGVjSUNVOjpyZWdpc3RlckJhc2VFbmNvZGluZ05hbWVz
KGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcCk7Ci0gICAgVGV4dENvZGVjSUNVOjpyZWdpc3RlckJh
c2VDb2RlY3MoYWRkVG9UZXh0Q29kZWNNYXApOwotI2VuZGlmCi0KICNpZiBVU0UoR0xJQl9VTklD
T0RFKQorICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBuZWVkZWQuIFRoZSBjb2RlIGFib3ZlIGNv
dmVycyBhbGwgdGhlIGJhc2UgY29kZWNzLgogICAgIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJCYXNl
RW5jb2RpbmdOYW1lcyhhZGRUb1RleHRFbmNvZGluZ05hbWVNYXApOwogICAgIFRleHRDb2RlY0d0
azo6cmVnaXN0ZXJCYXNlQ29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKICNlbmRpZgogCiAjaWYg
VVNFKEJSRVdNUF9VTklDT0RFKQorICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBuZWVkZWQuIFRo
ZSBjb2RlIGFib3ZlIGNvdmVycyBhbGwgdGhlIGJhc2UgY29kZWNzLgogICAgIFRleHRDb2RlY0Jy
ZXc6OnJlZ2lzdGVyQmFzZUVuY29kaW5nTmFtZXMoYWRkVG9UZXh0RW5jb2RpbmdOYW1lTWFwKTsK
ICAgICBUZXh0Q29kZWNCcmV3OjpyZWdpc3RlckJhc2VDb2RlY3MoYWRkVG9UZXh0Q29kZWNNYXAp
OwogI2VuZGlmCiAKICNpZiBPUyhXSU5DRSkgJiYgIVBMQVRGT1JNKFFUKQorICAgIC8vIEZJWE1F
OiBUaGlzIGlzIG5vdCBuZWVkZWQuIFRoZSBjb2RlIGFib3ZlIGNvdmVycyBhbGwgdGhlIGJhc2Ug
Y29kZWNzLgogICAgIFRleHRDb2RlY1dpbkNFOjpyZWdpc3RlckJhc2VFbmNvZGluZ05hbWVzKGFk
ZFRvVGV4dEVuY29kaW5nTmFtZU1hcCk7CiAgICAgVGV4dENvZGVjV2luQ0U6OnJlZ2lzdGVyQmFz
ZUNvZGVjcyhhZGRUb1RleHRDb2RlY01hcCk7CiAjZW5kaWYKQEAgLTMwMyw4ICszMDQsOCBAQCBi
b29sIHNob3VsZFNob3dCYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sCiBzdGF0aWMgdm9pZCBleHRl
bmRUZXh0Q29kZWNNYXBzKCkKIHsKICNpZiBVU0UoSUNVX1VOSUNPREUpCi0gICAgVGV4dENvZGVj
SUNVOjpyZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhhZGRUb1RleHRFbmNvZGluZ05hbWVN
YXApOwotICAgIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJFeHRlbmRlZENvZGVjcyhhZGRUb1RleHRD
b2RlY01hcCk7CisgICAgVGV4dENvZGVjSUNVOjpyZWdpc3RlckVuY29kaW5nTmFtZXMoYWRkVG9U
ZXh0RW5jb2RpbmdOYW1lTWFwKTsKKyAgICBUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyQ29kZWNzKGFk
ZFRvVGV4dENvZGVjTWFwKTsKICNlbmRpZgogCiAjaWYgVVNFKFFUNF9VTklDT0RFKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>82333</attachid>
            <date>2011-02-14 10:30:18 -0800</date>
            <delta_ts>2011-02-14 10:30:18 -0800</delta_ts>
            <desc>Qt crash log of http/tests/security/xssAuditor/img-onerror-non-ASCII-char2-default-encoding.html (r78451) on 32 bit in debug mode</desc>
            <filename>1.txt</filename>
            <type>text/plain</type>
            <size>6579</size>
            <attacher name="Csaba Osztrogonác">ossy</attacher>
            
              <data encoding="base64">QVNTRVJUSU9OIEZBSUxFRDogbmV3TGVuZ3RoIDw9IG1fbGVuZ3RoCi4uLy4uLy4uL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdCdWZmZXIuaCg1NikgOiB2b2lkIFdURjo6U3Ry
aW5nQnVmZmVyOjpzaHJpbmsodW5zaWduZWQgaW50KQpTZWdtZW50YXRpb24gZmF1bHQKMDogL2hv
bWUvb3N6aS9XZWJLaXQvV2ViS2l0QnVpbGQvRGVidWcvYmluL0R1bXBSZW5kZXJUcmVlIFsweDgw
N2Q2MDBdCjE6IC9ob21lL29zemkvV2ViS2l0L1dlYktpdEJ1aWxkL0RlYnVnL2Jpbi9EdW1wUmVu
ZGVyVHJlZSBbMHg4MDdkYTEzXQoyOiBbMHhmNzc0YTQwMF0KMzogL2hvbWUvb3N6aS9XZWJLaXQv
V2ViS2l0QnVpbGQvRGVidWcvbGliL2xpYlF0V2ViS2l0LnNvLjQgWzB4ZjVlNWI0ZTJdCjQ6IC9o
b21lL29zemkvV2ViS2l0L1dlYktpdEJ1aWxkL0RlYnVnL2xpYi9saWJRdFdlYktpdC5zby40KFdl
YkNvcmU6OlRleHRDb2RlY1VURjg6OmRlY29kZShjaGFyIGNvbnN0KiwgdW5zaWduZWQgaW50LCBi
b29sLCBib29sLCBib29sJikrMHg2MDEpIFsweGY2Mzk0MDkzXQo1OiAvaG9tZS9vc3ppL1dlYktp
dC9XZWJLaXRCdWlsZC9EZWJ1Zy9saWIvbGliUXRXZWJLaXQuc28uNChXZWJDb3JlOjpUZXh0RW5j
b2Rpbmc6OmRlY29kZShjaGFyIGNvbnN0KiwgdW5zaWduZWQgaW50LCBib29sLCBib29sJikgY29u
c3QrMHg5MykgWzB4ZjYzOTRkNDNdCjY6IC9ob21lL29zemkvV2ViS2l0L1dlYktpdEJ1aWxkL0Rl
YnVnL2xpYi9saWJRdFdlYktpdC5zby40KFdlYkNvcmU6OlRleHRFbmNvZGluZzo6ZGVjb2RlKGNo
YXIgY29uc3QqLCB1bnNpZ25lZCBpbnQpIGNvbnN0KzB4NDQpIFsweGY2MTA4Yzc0XQo3OiAvaG9t
ZS9vc3ppL1dlYktpdC9XZWJLaXRCdWlsZC9EZWJ1Zy9saWIvbGliUXRXZWJLaXQuc28uNChXZWJD
b3JlOjpkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoV1RGOjpTdHJpbmcgY29uc3QmLCBXZWJDb3Jl
OjpUZXh0RW5jb2RpbmcgY29uc3QmKSsweDI0OCkgWzB4ZjYzNGZjZTBdCjg6IC9ob21lL29zemkv
V2ViS2l0L1dlYktpdEJ1aWxkL0RlYnVnL2xpYi9saWJRdFdlYktpdC5zby40KFdlYkNvcmU6OmRl
Y29kZVVSTEVzY2FwZVNlcXVlbmNlcyhXVEY6OlN0cmluZyBjb25zdCYpKzB4MzEpIFsweGY2MzRm
ZWY2XQo5OiAvaG9tZS9vc3ppL1dlYktpdC9XZWJLaXRCdWlsZC9EZWJ1Zy9saWIvbGliUXRXZWJL
aXQuc28uNCBbMHhmNjEwYTdiZF0KMTA6IC9ob21lL29zemkvV2ViS2l0L1dlYktpdEJ1aWxkL0Rl
YnVnL2xpYi9saWJRdFdlYktpdC5zby40KFdlYkNvcmU6OlhTU0ZpbHRlcjo6aW5pdCgpKzB4MTJm
KSBbMHhmNjEwYWE1OV0KMTE6IC9ob21lL29zemkvV2ViS2l0L1dlYktpdEJ1aWxkL0RlYnVnL2xp
Yi9saWJRdFdlYktpdC5zby40KFdlYkNvcmU6OlhTU0ZpbHRlcjo6ZmlsdGVyVG9rZW4oV2ViQ29y
ZTo6SFRNTFRva2VuJikrMHgyOSkgWzB4ZjYxMGFmY2ZdCjEyOiAvaG9tZS9vc3ppL1dlYktpdC9X
ZWJLaXRCdWlsZC9EZWJ1Zy9saWIvbGliUXRXZWJLaXQuc28uNChXZWJDb3JlOjpIVE1MRG9jdW1l
bnRQYXJzZXI6OnB1bXBUb2tlbml6ZXIoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpTeW5j
aHJvbm91c01vZGUpKzB4MmVkKSBbMHhmNjBkNWI5OV0KMTM6IC9ob21lL29zemkvV2ViS2l0L1dl
YktpdEJ1aWxkL0RlYnVnL2xpYi9saWJRdFdlYktpdC5zby40KFdlYkNvcmU6OkhUTUxEb2N1bWVu
dFBhcnNlcjo6cHVtcFRva2VuaXplcklmUG9zc2libGUoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFy
c2VyOjpTeW5jaHJvbm91c01vZGUpKzB4YjkpIFsweGY2MGQ1Zjg3XQoxNDogL2hvbWUvb3N6aS9X
ZWJLaXQvV2ViS2l0QnVpbGQvRGVidWcvbGliL2xpYlF0V2ViS2l0LnNvLjQoV2ViQ29yZTo6SFRN
TERvY3VtZW50UGFyc2VyOjphcHBlbmQoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nIGNvbnN0Jikr
MHhjYSkgWzB4ZjYwZDY1NzhdCjE1OiAvaG9tZS9vc3ppL1dlYktpdC9XZWJLaXRCdWlsZC9EZWJ1
Zy9saWIvbGliUXRXZWJLaXQuc28uNChXZWJDb3JlOjpEZWNvZGVkRGF0YURvY3VtZW50UGFyc2Vy
OjphcHBlbmRCeXRlcyhXZWJDb3JlOjpEb2N1bWVudFdyaXRlciosIGNoYXIgY29uc3QqLCBpbnQs
IGJvb2wpKzB4MTExKSBbMHhmNWU0NjJkZl0KMTY6IC9ob21lL29zemkvV2ViS2l0L1dlYktpdEJ1
aWxkL0RlYnVnL2xpYi9saWJRdFdlYktpdC5zby40KFdlYkNvcmU6OkRvY3VtZW50V3JpdGVyOjph
ZGREYXRhKGNoYXIgY29uc3QqLCBpbnQsIGJvb2wpKzB4NzkpIFsweGY2MWU2ZjQxXQoxNzogL2hv
bWUvb3N6aS9XZWJLaXQvV2ViS2l0QnVpbGQvRGVidWcvbGliL2xpYlF0V2ViS2l0LnNvLjQoV2Vi
Q29yZTo6RG9jdW1lbnRXcml0ZXI6OmVuZElmTm90TG9hZGluZ01haW5SZXNvdXJjZSgpKzB4OTgp
IFsweGY2MWU2ZmUwXQoxODogL2hvbWUvb3N6aS9XZWJLaXQvV2ViS2l0QnVpbGQvRGVidWcvbGli
L2xpYlF0V2ViS2l0LnNvLjQoV2ViQ29yZTo6RG9jdW1lbnRXcml0ZXI6OmVuZCgpKzB4MzIpIFsw
eGY2MWU3MDYwXQoxOTogL2hvbWUvb3N6aS9XZWJLaXQvV2ViS2l0QnVpbGQvRGVidWcvbGliL2xp
YlF0V2ViS2l0LnNvLjQoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OmZpbmlzaGVkTG9hZGluZygp
KzB4NWIpIFsweGY2MWRmMmMzXQoyMDogL2hvbWUvb3N6aS9XZWJLaXQvV2ViS2l0QnVpbGQvRGVi
dWcvbGliL2xpYlF0V2ViS2l0LnNvLjQoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmZpbmlzaGVkTG9h
ZGluZygpKzB4NTUpIFsweGY2MWZiZjQxXQoyMTogL2hvbWUvb3N6aS9XZWJLaXQvV2ViS2l0QnVp
bGQvRGVidWcvbGliL2xpYlF0V2ViS2l0LnNvLjQoV2ViQ29yZTo6TWFpblJlc291cmNlTG9hZGVy
OjpkaWRGaW5pc2hMb2FkaW5nKGRvdWJsZSkrMHgxOWUpIFsweGY2MjEwMmYyXQoyMjogL2hvbWUv
b3N6aS9XZWJLaXQvV2ViS2l0QnVpbGQvRGVidWcvbGliL2xpYlF0V2ViS2l0LnNvLjQoV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGUqLCBkb3VibGUpKzB4MmIpIFsweGY2MjFkNmViXQoyMzogL2hvbWUvb3N6aS9XZWJLaXQvV2Vi
S2l0QnVpbGQvRGVidWcvbGliL2xpYlF0V2ViS2l0LnNvLjQoV2ViQ29yZTo6UU5ldHdvcmtSZXBs
eUhhbmRsZXI6OmZpbmlzaCgpKzB4MTEzKSBbMHhmNjU5OTRhYl0KMjQ6IC9ob21lL29zemkvV2Vi
S2l0L1dlYktpdEJ1aWxkL0RlYnVnL2xpYi9saWJRdFdlYktpdC5zby40KFdlYkNvcmU6OlFOZXR3
b3JrUmVwbHlIYW5kbGVyOjpxdF9tZXRhY2FsbChRTWV0YU9iamVjdDo6Q2FsbCwgaW50LCB2b2lk
KiopKzB4YTQpIFsweGY2NTk5ZDgwXQoyNTogL3Vzci9sb2NhbC9Ucm9sbHRlY2gvUXQtNC43LjEv
bGliL2xpYlF0Q29yZS5zby40KFFNZXRhT2JqZWN0OjptZXRhY2FsbChRT2JqZWN0KiwgUU1ldGFP
YmplY3Q6OkNhbGwsIGludCwgdm9pZCoqKSsweDU1KSBbMHhmMzkwMmVjNV0KMjY6IC91c3IvbG9j
YWwvVHJvbGx0ZWNoL1F0LTQuNy4xL2xpYi9saWJRdENvcmUuc28uNChRTWV0YU9iamVjdDo6YWN0
aXZhdGUoUU9iamVjdCosIFFNZXRhT2JqZWN0IGNvbnN0KiwgaW50LCB2b2lkKiopKzB4MjgzKSBb
MHhmMzkxNTljM10KMjc6IC9ob21lL29zemkvV2ViS2l0L1dlYktpdEJ1aWxkL0RlYnVnL2xpYi9s
aWJRdFdlYktpdC5zby40KFdlYkNvcmU6OlF0TmV0d29ya1JlcGx5VGhyZWFkU2FmZVByb3h5Ojpm
aW5pc2hlZCgpKzB4MzcpIFsweGY2OGUxODM1XQoyODogL2hvbWUvb3N6aS9XZWJLaXQvV2ViS2l0
QnVpbGQvRGVidWcvbGliL2xpYlF0V2ViS2l0LnNvLjQoV2ViQ29yZTo6UXROZXR3b3JrUmVwbHlU
aHJlYWRTYWZlUHJveHk6OnF0X21ldGFjYWxsKFFNZXRhT2JqZWN0OjpDYWxsLCBpbnQsIHZvaWQq
KikrMHgxZGYpIFsweGY2OGUxZTRiXQoyOTogL3Vzci9sb2NhbC9Ucm9sbHRlY2gvUXQtNC43LjEv
bGliL2xpYlF0Q29yZS5zby40KFFNZXRhT2JqZWN0OjptZXRhY2FsbChRT2JqZWN0KiwgUU1ldGFP
YmplY3Q6OkNhbGwsIGludCwgdm9pZCoqKSsweDU1KSBbMHhmMzkwMmVjNV0KMzA6IC91c3IvbG9j
YWwvVHJvbGx0ZWNoL1F0LTQuNy4xL2xpYi9saWJRdENvcmUuc28uNChRTWV0YU9iamVjdDo6YWN0
aXZhdGUoUU9iamVjdCosIFFNZXRhT2JqZWN0IGNvbnN0KiwgaW50LCB2b2lkKiopKzB4MjgzKSBb
MHhmMzkxNTljM10KMzE6IC91c3IvbG9jYWwvVHJvbGx0ZWNoL1F0LTQuNy4xL2xpYi9saWJRdE5l
dHdvcmsuc28uNChRTmV0d29ya1JlcGx5OjpmaW5pc2hlZCgpKzB4MzcpIFsweGY0NjM3MDM3XQoz
MjogL3Vzci9sb2NhbC9Ucm9sbHRlY2gvUXQtNC43LjEvbGliL2xpYlF0TmV0d29yay5zby40IFsw
eGY0NWM1ZmRmXQozMzogL3Vzci9sb2NhbC9Ucm9sbHRlY2gvUXQtNC43LjEvbGliL2xpYlF0TmV0
d29yay5zby40IFsweGY0NWE5OTEwXQozNDogL3Vzci9sb2NhbC9Ucm9sbHRlY2gvUXQtNC43LjEv
bGliL2xpYlF0TmV0d29yay5zby40IFsweGY0NWIwM2IxXQozNTogL3Vzci9sb2NhbC9Ucm9sbHRl
Y2gvUXQtNC43LjEvbGliL2xpYlF0TmV0d29yay5zby40IFsweGY0NWIwOWE0XQozNjogL3Vzci9s
b2NhbC9Ucm9sbHRlY2gvUXQtNC43LjEvbGliL2xpYlF0TmV0d29yay5zby40IFsweGY0NWM1ZDI5
XQozNzogL3Vzci9sb2NhbC9Ucm9sbHRlY2gvUXQtNC43LjEvbGliL2xpYlF0TmV0d29yay5zby40
IFsweGY0NWM1ZGM2XQozODogL3Vzci9sb2NhbC9Ucm9sbHRlY2gvUXQtNC43LjEvbGliL2xpYlF0
R3VpLnNvLjQoUUFwcGxpY2F0aW9uUHJpdmF0ZTo6bm90aWZ5X2hlbHBlcihRT2JqZWN0KiwgUUV2
ZW50KikrMHhiYykgWzB4ZjNiOTVmMGNdCjM5OiAvdXNyL2xvY2FsL1Ryb2xsdGVjaC9RdC00Ljcu
MS9saWIvbGliUXRHdWkuc28uNChRQXBwbGljYXRpb246Om5vdGlmeShRT2JqZWN0KiwgUUV2ZW50
KikrMHgxODIpIFsweGYzYjlmMzcyXQo0MDogL3Vzci9sb2NhbC9Ucm9sbHRlY2gvUXQtNC43LjEv
bGliL2xpYlF0Q29yZS5zby40KFFDb3JlQXBwbGljYXRpb246Om5vdGlmeUludGVybmFsKFFPYmpl
Y3QqLCBRRXZlbnQqKSsweDdiKSBbMHhmMzhmZDAyYl0KNDE6IC91c3IvbG9jYWwvVHJvbGx0ZWNo
L1F0LTQuNy4xL2xpYi9saWJRdENvcmUuc28uNChRQ29yZUFwcGxpY2F0aW9uUHJpdmF0ZTo6c2Vu
ZFBvc3RlZEV2ZW50cyhRT2JqZWN0KiwgaW50LCBRVGhyZWFkRGF0YSopKzB4MmQ4KSBbMHhmMzhm
ZmU1OF0KNDI6IC91c3IvbG9jYWwvVHJvbGx0ZWNoL1F0LTQuNy4xL2xpYi9saWJRdENvcmUuc28u
NChRQ29yZUFwcGxpY2F0aW9uOjpzZW5kUG9zdGVkRXZlbnRzKFFPYmplY3QqLCBpbnQpKzB4MmQp
IFsweGYzOGZmZmVkXQo0MzogL3Vzci9sb2NhbC9Ucm9sbHRlY2gvUXQtNC43LjEvbGliL2xpYlF0
Q29yZS5zby40IFsweGYzOTJjOWY0XQo0NDogL3Vzci9saWIvbGliZ2xpYi0yLjAuc28uMChnX21h
aW5fY29udGV4dF9kaXNwYXRjaCsweDFlOCkgWzB4ZjJjODMxZDhdCjQ1OiAvdXNyL2xpYi9saWJn
bGliLTIuMC5zby4wIFsweGYyYzg2ODczXQo0NjogL3Vzci9saWIvbGliZ2xpYi0yLjAuc28uMChn
X21haW5fY29udGV4dF9pdGVyYXRpb24rMHg3MSkgWzB4ZjJjODZhMzFdCjQ3OiAvdXNyL2xvY2Fs
L1Ryb2xsdGVjaC9RdC00LjcuMS9saWIvbGliUXRDb3JlLnNvLjQoUUV2ZW50RGlzcGF0Y2hlckds
aWI6OnByb2Nlc3NFdmVudHMoUUZsYWdzPFFFdmVudExvb3A6OlByb2Nlc3NFdmVudHNGbGFnPikr
MHg2MSkgWzB4ZjM5MmM1MDFdCjQ4OiAvdXNyL2xvY2FsL1Ryb2xsdGVjaC9RdC00LjcuMS9saWIv
bGliUXRHdWkuc28uNCBbMHhmM2M1MDNmNV0KNDk6IC91c3IvbG9jYWwvVHJvbGx0ZWNoL1F0LTQu
Ny4xL2xpYi9saWJRdENvcmUuc28uNChRRXZlbnRMb29wOjpwcm9jZXNzRXZlbnRzKFFGbGFnczxR
RXZlbnRMb29wOjpQcm9jZXNzRXZlbnRzRmxhZz4pKzB4NGEpIFsweGYzOGZiYTVhXQo1MDogL3Vz
ci9sb2NhbC9Ucm9sbHRlY2gvUXQtNC43LjEvbGliL2xpYlF0Q29yZS5zby40KFFFdmVudExvb3A6
OmV4ZWMoUUZsYWdzPFFFdmVudExvb3A6OlByb2Nlc3NFdmVudHNGbGFnPikrMHhmMikgWzB4ZjM4
ZmJlZTJdCjUxOiAvdXNyL2xvY2FsL1Ryb2xsdGVjaC9RdC00LjcuMS9saWIvbGliUXRDb3JlLnNv
LjQoUUNvcmVBcHBsaWNhdGlvbjo6ZXhlYygpKzB4YjkpIFsweGYzOTAwMGI5XQo1MjogL3Vzci9s
b2NhbC9Ucm9sbHRlY2gvUXQtNC43LjEvbGliL2xpYlF0R3VpLnNvLjQoUUFwcGxpY2F0aW9uOjpl
eGVjKCkrMHgyNykgWzB4ZjNiOTUwMzddCjUzOiAvaG9tZS9vc3ppL1dlYktpdC9XZWJLaXRCdWls
ZC9EZWJ1Zy9iaW4vRHVtcFJlbmRlclRyZWUgWzB4ODA3ZDQwZV0KNTQ6IC9saWIvbGliYy5zby42
KF9fbGliY19zdGFydF9tYWluKzB4ZTUpIFsweGYzNTI0NDU1XQo1NTogL2hvbWUvb3N6aS9XZWJL
aXQvV2ViS2l0QnVpbGQvRGVidWcvYmluL0R1bXBSZW5kZXJUcmVlKFFHcmFwaGljc1ZpZXc6OmRy
YWdFbnRlckV2ZW50KFFEcmFnRW50ZXJFdmVudCopKzB4NDkpIFsweDgwNjMzYzFdCgpMRUFLOiAx
NSBXZWJDb3JlTm9kZQpMRUFLOiAyIEZyYW1lCkxFQUs6IDEgUGFnZQpMRUFLOiA2IFJlbmRlck9i
amVjdApMRUFLOiA3OCBTdHJ1Y3R1cmUK
</data>

          </attachment>
      

    </bug>

</bugzilla>