<?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>71337</bug_id>
          
          <creation_ts>2011-11-01 16:34:50 -0700</creation_ts>
          <short_desc>Enable 8 Bit Strings in JavaScriptCore</short_desc>
          <delta_ts>2011-11-17 23:46:12 -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>JavaScriptCore</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>71761</dependson>
    
    <dependson>71862</dependson>
    
    <dependson>72288</dependson>
    
    <dependson>72289</dependson>
    
    <dependson>72290</dependson>
    
    <dependson>72317</dependson>
    
    <dependson>72323</dependson>
    
    <dependson>72326</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>loki</cc>
    
    <cc>macpherson</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>494287</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-01 16:34:50 -0700</bug_when>
    <thetext>This bug is to track other changes made or yet to be made in order to enable 8 bit strings in JavaScriptCore. There are several small changes that need to be made to &quot;turn on&quot; the 8 bit path in code that has been or will be checked in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494341</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-01 17:26:35 -0700</bug_when>
    <thetext>There are several &quot;FIXME&quot; occurrences in Source/JavaScriptCore/parser/Lexer.cpp that need to be changed as part of turning on 8 bit strings.

These are in the methods append8(), parseIdentifier() and parseString().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497688</commentid>
    <comment_count>2</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-07 19:39:44 -0800</bug_when>
    <thetext>In Lexer.cpp, parseIdentifier() was refactored and now only the #if 0 needs to be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504010</commentid>
    <comment_count>3</comment_count>
      <attachid>115402</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-16 10:09:02 -0800</bug_when>
    <thetext>Created attachment 115402
Patch for review

This patch may have export issues building on windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504149</commentid>
    <comment_count>4</comment_count>
      <attachid>115402</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-11-16 12:35:42 -0800</bug_when>
    <thetext>Comment on attachment 115402
Patch for review

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:13
&gt; +        type.  This change riplled into WebCore code as well.

Typo: riplled.

&gt; Source/JavaScriptCore/runtime/Identifier.cpp:172
&gt; +    if (string.is8Bit()) {

Would be nice to have a template helper for this, to achieve only one copy of the code vs two.

&gt; Source/JavaScriptCore/wtf/text/StringImpl.cpp:540
&gt; +        const LChar* from = characters8();

This is another candidate for a template helper function.

&gt; Source/JavaScriptCore/wtf/text/StringImpl.cpp:-1351
&gt; -            if (!bc)

This is another candidate for a template helper function -- would have only needed to fix this bug in one place instead of two.

&gt; Source/JavaScriptCore/wtf/text/StringImpl.cpp:1579
&gt; +PassRefPtr&lt;StringImpl&gt; StringImpl::adopt(StringBuffer&lt;LChar&gt;&amp; buffer)

This is another candidate for templatization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504272</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-16 14:42:45 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 115402 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=115402&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:13
&gt; &gt; +        type.  This change riplled into WebCore code as well.
&gt; 
&gt; Typo: riplled.

Fixed.
 
&gt; &gt; Source/JavaScriptCore/runtime/Identifier.cpp:172
&gt; &gt; +    if (string.is8Bit()) {
&gt; 
&gt; Would be nice to have a template helper for this, to achieve only one copy of the code vs two.

Done.

&gt; &gt; Source/JavaScriptCore/wtf/text/StringImpl.cpp:540
&gt; &gt; +        const LChar* from = characters8();
&gt; 
&gt; This is another candidate for a template helper function.

Done.

&gt; &gt; Source/JavaScriptCore/wtf/text/StringImpl.cpp:-1351
&gt; &gt; -            if (!bc)
&gt; 
&gt; This is another candidate for a template helper function -- would have only needed to fix this bug in one place instead of two.

Done.

&gt; &gt; Source/JavaScriptCore/wtf/text/StringImpl.cpp:1579
&gt; &gt; +PassRefPtr&lt;StringImpl&gt; StringImpl::adopt(StringBuffer&lt;LChar&gt;&amp; buffer)
&gt; 
&gt; This is another candidate for templatization.

Didn&apos;t template this case due to making StringImpl.h dependent on StringBuffer.h.  Tried putting only declaration in StringImpl.h and the implementation in StringImpl.cpp and then explicitly instatiate the two flavors, but that creates symbols with Weak references that doesn&apos;t compile.  Given these various issues, felt that the implementation in the original patch was preferred.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504280</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-16 14:46:48 -0800</bug_when>
    <thetext>Committed r100510: &lt;http://trac.webkit.org/changeset/100510&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504587</commentid>
    <comment_count>7</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-11-16 23:16:35 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Committed r100510: &lt;http://trac.webkit.org/changeset/100510&gt;

I don&apos;t know how, but it broke 4 tests on the Qt bot:

--- /ramdisk/qt-linux-64-release/build/layout-test-results/editing/selection/find-yensign-and-backslash-expected.txt 
+++ /ramdisk/qt-linux-64-release/build/layout-test-results/editing/selection/find-yensign-and-backslash-actual.txt 
@@ -2,12 +2,12 @@
    
 Results
 
-We can find a backslash in EUC-JP page by finding a yen sign: PASS
-We can find a backslash in EUC-JP text control by finding a yen sign: PASS
-We can find a backslash in Shift_JIS page by finding a yen sign: PASS
-We can find a backslash in Shift_JIS text control by finding a yen sign: PASS
-We can find a backslash in ISO-2022-JP page by finding a yen sign: PASS
-We can find a backslash in ISO-2022-JP text control by finding a yen sign: PASS
+We can find a backslash in EUC-JP page by finding a yen sign: FAIL
+We can find a backslash in EUC-JP text control by finding a yen sign: FAIL
+We can find a backslash in Shift_JIS page by finding a yen sign: FAIL
+We can find a backslash in Shift_JIS text control by finding a yen sign: FAIL
+We can find a backslash in ISO-2022-JP page by finding a yen sign: FAIL
+We can find a backslash in ISO-2022-JP text control by finding a yen sign: FAIL
 We can NOT find a backslash in UTF8 page by finding a yen sign: PASS
 We can NOT find a backslash in UTF8 text control by finding a yen sign: PASS
 

--- /ramdisk/qt-linux-64-release/build/layout-test-results/editing/selection/find-yensign-and-backslash-with-japanese-fonts-expected.txt 
+++ /ramdisk/qt-linux-64-release/build/layout-test-results/editing/selection/find-yensign-and-backslash-with-japanese-fonts-actual.txt 
@@ -1,24 +1,24 @@
 No specified font + yen sign: PASS
 No specified font + backslash: PASS
-MS PGothic + yen sign: PASS
+MS PGothic + yen sign: FAIL
 MS PGothic + backslash: PASS
-MS Gothic + yen sign: PASS
+MS Gothic + yen sign: FAIL
 MS Gothic + backslash: PASS
-MS PMincho + yen sign: PASS
+MS PMincho + yen sign: FAIL
 MS PMincho + backslash: PASS
-MS Mincho + yen sign: PASS
+MS Mincho + yen sign: FAIL
 MS Mincho + backslash: PASS
-Meiryo + yen sign: PASS
+Meiryo + yen sign: FAIL
 Meiryo + backslash: PASS
-ďź­ďźł ďź°ă�´ă�ˇă��ă�Ż + yen sign: PASS
+ďź­ďźł ďź°ă�´ă�ˇă��ă�Ż + yen sign: FAIL
 ďź­ďźł ďź°ă�´ă�ˇă��ă�Ż + backslash: PASS
-ďź­ďźł ă�´ă�ˇă��ă�Ż + yen sign: PASS
+ďź­ďźł ă�´ă�ˇă��ă�Ż + yen sign: FAIL
 ďź­ďźł ă�´ă�ˇă��ă�Ż + backslash: PASS
-ďź­ďźł ďź°ć��ć�� + yen sign: PASS
+ďź­ďźł ďź°ć��ć�� + yen sign: FAIL
 ďź­ďźł ďź°ć��ć�� + backslash: PASS
-ďź­ďźł ć��ć�� + yen sign: PASS
+ďź­ďźł ć��ć�� + yen sign: FAIL
 ďź­ďźł ć��ć�� + backslash: PASS
-ă�Ąă�¤ă�Şă�Ş + yen sign: PASS
+ă�Ąă�¤ă�Şă�Ş + yen sign: FAIL
 ă�Ąă�¤ă�Şă�Ş + backslash: PASS
 Times + yen sign: PASS
 Times + backslash: PASS


--- /ramdisk/qt-linux-64-release/build/layout-test-results/fast/text/find-kana-expected.txt 
+++ /ramdisk/qt-linux-64-release/build/layout-test-results/fast/text/find-kana-actual.txt 
@@ -27,7 +27,7 @@
 PASS canFind(katakanaLetterGa, katakanaLetterGa) is true
 PASS canFind(katakanaLetterKa, katakanaLetterKa) is true
 PASS canFind(katakanaLetterSmallA, katakanaLetterSmallA) is true
-PASS canFind(latinCapitalLetterAWithGrave, latinCapitalLetterAWithGrave) is true
+FAIL canFind(latinCapitalLetterAWithGrave, latinCapitalLetterAWithGrave) should be true. Was false.
 
 Hiragana, katakana, and half width katakana: Must be treated as equal
 


--- /ramdisk/qt-linux-64-release/build/layout-test-results/fast/text/find-spaces-expected.txt 
+++ /ramdisk/qt-linux-64-release/build/layout-test-results/fast/text/find-spaces-actual.txt 
@@ -1,1 +1,1 @@
-SUCCESS: Found all the spaces as expected.
+FAILURE: Cannot find space. Cannot find two spaces in a &lt;pre&gt; element. Cannot find an &amp;nbsp; when searching for a space. Cannot find a space followed by &amp;nbsp; when searching for two spaces. Cannot find an &amp;nbsp; followed by a space when searching for two spaces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505543</commentid>
    <comment_count>8</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2011-11-17 23:46:12 -0800</bug_when>
    <thetext>&gt; &gt; Committed r100510: &lt;http://trac.webkit.org/changeset/100510&gt;
&gt; 
&gt; I don&apos;t know how, but it broke 4 tests on the Qt bot:

The problem was fixed in bug 72602.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115402</attachid>
            <date>2011-11-16 10:09:02 -0800</date>
            <delta_ts>2011-11-16 12:35:42 -0800</delta_ts>
            <desc>Patch for review</desc>
            <filename>71337-8.patch</filename>
            <type>text/plain</type>
            <size>31265</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAwNDA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBA
CisyMDExLTExLTE1ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIEVuYWJsZSA4IEJpdCBTdHJpbmdzIGluIEphdmFTY3JpcHRDb3JlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTMzNworCisgICAgICAgIFRoaXMg
cGF0Y2ggdHVybnMgb24gOCBiaXQgc3RyaW5ncyBpbiBTdHJpbmdJbXBsIGFuZCBlbmFibGVzCisg
ICAgICAgIHRoZWlyIHVzZSBpbiBKYXZhU2NyaXB0Q29yZS4gU29tZSBvZiB0aGUgY2hhbmdlcyBh
cmUgdG8KKyAgICAgICAgdHVybiBvbiBjb2RlIHRoYXQgaGFkIGJlZW4gc3RhZ2VkIChMZXhlci5j
cHAsIElkZW50aWZpZXIuY3BwLAorICAgICAgICBTbWFsbFN0cmluZ3MuY3BwIGFuZCBzb21lIG9m
IFN0cmluZ0ltcGwue2gsY3BwfSkuCisgICAgICAgIE90aGVyIGNoYW5nZXMgYXJlIG1pbm9yIGZp
eGVzIHRvIG1ha2UgOCBiaXQgc3RyaW5ncyB3b3JrCisgICAgICAgIChVU3RyaW5nLmgsIFN0cmlu
Z0ltcGw6OmdldERhdGExNlNsb3dDYXNlKCkpLgorICAgICAgICBDaGFuZ2VkIFN0cmluZ0J1ZmZl
ciB0byBiZSBhIHRlbXBsYXRlZCBjbGFzcyBiYXNlZCBvbiBjaGFyYWN0ZXIKKyAgICAgICAgdHlw
ZS4gIFRoaXMgY2hhbmdlIHJpcGxsZWQgaW50byBXZWJDb3JlIGNvZGUgYXMgd2VsbC4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLmV4cDoKKyAgICAgICAgKiBwYXJzZXIvTGV4ZXIuY3BwOgorICAgICAgICAoSlNDOjo6OmFw
cGVuZDgpOiBDaGFuZ2VkIHRvIHVzZSA4IGJpdCBidWZmZXJzLgorICAgICAgICAoSlNDOjo6OnBh
cnNlSWRlbnRpZmllcik6IENoYW5nZWQgdG8gdXNlIDggYml0IGJ1ZmZlcnMuCisgICAgICAgIChK
U0M6Ojo6cGFyc2VTdHJpbmcpOiBDaGFuZ2VkIHRvIHVzZSA4IGJpdCBidWZmZXJzLgorICAgICAg
ICAqIHJ1bnRpbWUvSWRlbnRpZmllci5jcHA6CisgICAgICAgIChKU0M6OklkZW50aWZpZXJDU3Ry
aW5nVHJhbnNsYXRvcjo6dHJhbnNsYXRlKTogOCBiaXQgdmVyc2lvbiBrZWVwcyBkYXRhIDggYml0
CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OnRvVUludDMyKTogQWRkZWQgOCBiaXQgb3B0aW1p
emVkIHBhdGguCisgICAgICAgICogcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwOgorICAgICAgICAo
SlNDOjpTbWFsbFN0cmluZ3NTdG9yYWdlOjpTbWFsbFN0cmluZ3NTdG9yYWdlKTogQ2hhbmdlZCB0
byBiZSA4IGJpdCBzdHJpbmdzCisgICAgICAgICogcnVudGltZS9VU3RyaW5nLmg6CisgICAgICAg
IChKU0M6OlVTdHJpbmc6OmNoYXJhY3RlcnMpOiBOb3cgY2FsbHMgU3RyaW5nSW1wbDo6Y2hhcmFj
dGVycygpCisgICAgICAgICogd3RmL0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJp
bmdCdWZmZXIuaDogTWFkZSBTdHJpbmdCdWZmZXIgYSB0ZW1wbGF0ZSBiYXNlIG9uIGNoYXJhY3Rl
ciB0eXBlLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWZmZXI6OlN0cmluZ0J1ZmZlcik6CisgICAg
ICAgIChXVEY6OlN0cmluZ0J1ZmZlcjo6Y2hhcmFjdGVycyk6CisgICAgICAgIChXVEY6OlN0cmlu
Z0J1ZmZlcjo6cmVsZWFzZSk6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1wbC5jcHA6Cisg
ICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6OlN0cmluZ0lt
cGw6OmdldERhdGExNlNsb3dDYXNlKTogRml4ZWQgbnVsbCB0ZXJtaW5hdGVkIGNhc2UuCisgICAg
ICAgIChXVEY6OlN0cmluZ0ltcGw6OnJlbW92ZUNoYXJhY3RlcnMpOiBBZGRlZCA4IGJpdCBwYXRo
LgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpzaW1wbGlmeU1hdGNoZWRDaGFyYWN0ZXJzVG9T
cGFjZSk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnNpbXBsaWZ5V2hpdGVTcGFjZSk6Cisg
ICAgICAgIChXVEY6OmVxdWFsKTogUmVtb3ZlZCBidWcgZnJvbSBjb2RlIGNvcGllZCBmcm9tIG51
bGwgdGVybWluYXRlZCB2ZXJzaW9uLgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjphZG9wdCk6
IEFkZGVkIDggYml0IHBhdGguCisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNyZWF0ZVdpdGhU
ZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIpOiBGaXhlZCA4IGJpIGZsYWcgcHJvcGFnYXRpb24uCisg
ICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1wbC5oOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBs
OjpTdHJpbmdJbXBsKTogQWRkZWQgbmV3IDggYml0IGNvbnN0cnVjdG9yLgorICAgICAgICAoV1RG
OjpTdHJpbmdJbXBsOjpjaGFyYWN0ZXJzOCk6IFJlbW92ZWQgQVNTRVJUX05PVF9SRUFDSEVEKCku
CisgICAgICAgIChXVEY6OmdldENoYXJhY3RlcnM8TENoYXI+KTogQWRkZWQgdGVtcGxhdGVkIGFj
Y2Vzc29yIGZvciA4IGJpdCBzdHJpbmdzLgorICAgICAgICAoV1RGOjpnZXRDaGFyYWN0ZXJzPFVD
aGFyPik6IEFkZGVkIHRlbXBsYXRlZCBhY2Nlc3NvciBmb3IgMTYgYml0IHN0cmluZ3MuCisgICAg
ICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmg6CisgICAgICAgIChXVEY6OlN0cmluZzo6YWRvcHQp
OiBDaGFuZ2VkIHRvIHVzZSBTdHJpbmdCdWZmZXIgdGVtcGxhdGUuCisKIDIwMTEtMTEtMTUgIEdl
b3JnZSBTdGFpa29zICA8c3RhaWtvc0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSB0aGUg
Z3VhcmQgcGFnZSBmcm9tIHRoZSBhZGRyZXNzYWJsZSBzdGFjayByZWdpb24gb24gUU5YLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCShyZXZpc2lvbiAxMDA0
MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNjcsNyArMzY3LDcgQEAgX19aTjNXVEYxMFN0cmluZ0ltcGw0ZmlsbEV0CiBf
X1pOM1dURjEwU3RyaW5nSW1wbDRmaW5kRVBGYnRFagogX19aTjNXVEYxMFN0cmluZ0ltcGw0Zmlu
ZEVQUzBfagogX19aTjNXVEYxMFN0cmluZ0ltcGw0ZmluZEV0agotX19aTjNXVEYxMFN0cmluZ0lt
cGw1YWRvcHRFUk5TXzEyU3RyaW5nQnVmZmVyRQorX19aTjNXVEYxMFN0cmluZ0ltcGw1YWRvcHRF
Uk5TXzEyU3RyaW5nQnVmZmVySXRFRQogX19aTjNXVEYxMFN0cmluZ0ltcGw1ZW1wdHlFdgogX19a
TjNXVEYxMFN0cmluZ0ltcGw1bG93ZXJFdgogX19aTjNXVEYxMFN0cmluZ0ltcGw1dG9JbnRFUGIK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCShyZXZpc2lvbiAxMDA0
MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDQ4LDExICs0NDgsOSBAQCBpbmxpbmUgdm9pZCBhc3NlcnRDaGFySXNJbjhCaXRS
YW5nZShMQ2hhCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIGlubGluZSB2b2lkIExleGVyPFQ+Ojph
cHBlbmQ4KGNvbnN0IFQqIHAsIHNpemVfdCBsZW5ndGgpCiB7Ci0gICAgLy8gRklYTUU6IENoYW5n
ZSB0aHJlZSBvY2N1cnJhbmNlcyBvZiBtX2J1ZmZlcjE2IHRvIG1fYnVmZmVyOCBhbmQKLSAgICAv
LyBVQ2hhciB0byBMQ2hhciB3aGVuIDggYml0IHN0cmluZ3MgYXJlIHR1cm5lZCBvbi4KLSAgICBz
aXplX3QgY3VycmVudFNpemUgPSBtX2J1ZmZlcjE2LnNpemUoKTsKLSAgICBtX2J1ZmZlcjE2Lmdy
b3coY3VycmVudFNpemUgKyBsZW5ndGgpOwotICAgIFVDaGFyKiByYXdCdWZmZXIgPSBtX2J1ZmZl
cjE2LmRhdGEoKSArIGN1cnJlbnRTaXplOworICAgIHNpemVfdCBjdXJyZW50U2l6ZSA9IG1fYnVm
ZmVyOC5zaXplKCk7CisgICAgbV9idWZmZXI4Lmdyb3coY3VycmVudFNpemUgKyBsZW5ndGgpOwor
ICAgIExDaGFyKiByYXdCdWZmZXIgPSBtX2J1ZmZlcjguZGF0YSgpICsgY3VycmVudFNpemU7CiAK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgIFQgYyA9
IHBbaV07CkBAIC01NjMsMTAgKzU2MSw4IEBAIHRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlk
ZW50aWZpZXI+IEEKIAogICAgIGJvb2wgaXNBbGw4Qml0ID0gZmFsc2U7CiAKLSNpZiAwIC8vIEZJ
WE1FOiBSZW1vdmUgdGhpcyAjaWYgd2hlbiA4IGJpdCBzdHJpbmdzIGFyZSB0dXJuZWQgb24uCiAg
ICAgaWYgKCEob3JBbGxDaGFycyAmIH4weGZmKSkKICAgICAgICAgaXNBbGw4Qml0ID0gdHJ1ZTsK
LSNlbmRpZgogCiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAwOwogICAgIApAQCAtNjcx
LDggKzY2Nyw2IEBAIHRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlkZW50aWZpZXI+IEoKIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgogdGVtcGxhdGUgPGJvb2wgc2hvdWxkQnVpbGRTdHJpbmdzPiBB
TFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI8VD46OnBhcnNlU3RyaW5nKEpTVG9rZW5EYXRhKiB0b2tl
bkRhdGEsIGJvb2wgc3RyaWN0TW9kZSkKIHsKLSAgICAvLyBGSVhNRTogQ2hhbmdlIHJlY29yZDE2
IGFuZCBtX2J1ZmZlcjE2IHRvIHJlY29yZDggYW5kIG1fYnVmZmVyOCBiZWxvdyB3aGVuCi0gICAg
Ly8gOCBiaXQgc3RyaW5ncyBhcmUgdHVybmVkIG9uLgogICAgIGludCBzdGFydGluZ09mZnNldCA9
IGN1cnJlbnRPZmZzZXQoKTsKICAgICBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyID0gbGluZU51bWJl
cigpOwogICAgIGludCBzdHJpbmdRdW90ZUNoYXJhY3RlciA9IG1fY3VycmVudDsKQEAgLTY5MSw3
ICs2ODUsNyBAQCB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRCdWlsZFN0cmluZ3M+IEFMV0FZCiAgICAg
ICAgICAgICAvLyBNb3N0IGNvbW1vbiBlc2NhcGUgc2VxdWVuY2VzIGZpcnN0CiAgICAgICAgICAg
ICBpZiAoZXNjYXBlKSB7CiAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEJ1aWxkU3RyaW5ncykK
LSAgICAgICAgICAgICAgICAgICAgcmVjb3JkMTYoZXNjYXBlKTsgLy8gRklYTUU6IENoYW5nZSB0
byByZWNvcmQ4CisgICAgICAgICAgICAgICAgICAgIHJlY29yZDgoZXNjYXBlKTsKICAgICAgICAg
ICAgICAgICBzaGlmdCgpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChVTkxJS0VMWShpc0xpbmVU
ZXJtaW5hdG9yKG1fY3VycmVudCkpKQogICAgICAgICAgICAgICAgIHNoaWZ0TGluZVRlcm1pbmF0
b3IoKTsKQEAgLTcwMSwxNCArNjk1LDE0IEBAIHRlbXBsYXRlIDxib29sIHNob3VsZEJ1aWxkU3Ry
aW5ncz4gQUxXQVkKICAgICAgICAgICAgICAgICAgICAgaW50IHByZXYgPSBtX2N1cnJlbnQ7CiAg
ICAgICAgICAgICAgICAgICAgIHNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChzaG91
bGRCdWlsZFN0cmluZ3MpCi0gICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQxNihjb252ZXJ0
SGV4KHByZXYsIG1fY3VycmVudCkpOyAvLyBGSVhNRTogQ2hhbmdlIHRvIHJlY29yZDgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlY29yZDgoY29udmVydEhleChwcmV2LCBtX2N1cnJlbnQpKTsK
ICAgICAgICAgICAgICAgICAgICAgc2hpZnQoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KHNob3VsZEJ1aWxkU3RyaW5ncykKLSAgICAgICAgICAgICAgICAgICAgcmVjb3JkMTYoJ3gnKTsg
Ly8gRklYTUU6IENoYW5nZSB0byByZWNvcmQ4CisgICAgICAgICAgICAgICAgICAgIHJlY29yZDgo
J3gnKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc2V0T2Zmc2V0KHN0
YXJ0aW5nT2Zmc2V0KTsKICAgICAgICAgICAgICAgICBzZXRMaW5lTnVtYmVyKHN0YXJ0aW5nTGlu
ZU51bWJlcik7Ci0gICAgICAgICAgICAgICAgbV9idWZmZXIxNi5yZXNpemUoMCk7IC8vIEZJWE1F
OiBDaGFuZ2UgdG8gbV9idWZmZXI4CisgICAgICAgICAgICAgICAgbV9idWZmZXI4LnJlc2l6ZSgw
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VTdHJpbmdTbG93Q2FzZTxzaG91bGRCdWls
ZFN0cmluZ3M+KHRva2VuRGF0YSwgc3RyaWN0TW9kZSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBzdHJpbmdTdGFydCA9IGN1cnJlbnRDaGFyYWN0ZXIoKTsKQEAgLTcxOCw3ICs3MTIsNyBA
QCB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRCdWlsZFN0cmluZ3M+IEFMV0FZCiAgICAgICAgIGlmIChV
TkxJS0VMWSgoKG1fY3VycmVudCA+IDB4ZmYpIHx8IChtX2N1cnJlbnQgPCAweGUpKSkpIHsKICAg
ICAgICAgICAgIHNldE9mZnNldChzdGFydGluZ09mZnNldCk7CiAgICAgICAgICAgICBzZXRMaW5l
TnVtYmVyKHN0YXJ0aW5nTGluZU51bWJlcik7Ci0gICAgICAgICAgICBtX2J1ZmZlcjE2LnJlc2l6
ZSgwKTsgLy8gRklYTUU6IENoYW5nZSB0byBtX2J1ZmZlcjgKKyAgICAgICAgICAgIG1fYnVmZmVy
OC5yZXNpemUoMCk7CiAgICAgICAgICAgICByZXR1cm4gcGFyc2VTdHJpbmdTbG93Q2FzZTxzaG91
bGRCdWlsZFN0cmluZ3M+KHRva2VuRGF0YSwgc3RyaWN0TW9kZSk7CiAgICAgICAgIH0KIApAQCAt
NzI4LDEwICs3MjIsOCBAQCB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRCdWlsZFN0cmluZ3M+IEFMV0FZ
CiAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIoKSAhPSBzdHJpbmdTdGFydCAmJiBzaG91bGRCdWls
ZFN0cmluZ3MpCiAgICAgICAgIGFwcGVuZDgoc3RyaW5nU3RhcnQsIGN1cnJlbnRDaGFyYWN0ZXIo
KSAtIHN0cmluZ1N0YXJ0KTsKICAgICBpZiAoc2hvdWxkQnVpbGRTdHJpbmdzKSB7Ci0gICAgICAg
IC8vIEZJWE1FOiBDaGFuZ2UgdG8gbV9idWZmZXI4Ci0gICAgICAgIHRva2VuRGF0YS0+aWRlbnQg
PSBtYWtlSWRlbnRpZmllcihtX2J1ZmZlcjE2LmRhdGEoKSwgbV9idWZmZXIxNi5zaXplKCkpOwot
ICAgICAgICAvLyBGSVhNRTogQ2hhbmdlIHRvIG1fYnVmZmVyOAotICAgICAgICBtX2J1ZmZlcjE2
LnJlc2l6ZSgwKTsKKyAgICAgICAgdG9rZW5EYXRhLT5pZGVudCA9IG1ha2VJZGVudGlmaWVyKG1f
YnVmZmVyOC5kYXRhKCksIG1fYnVmZmVyOC5zaXplKCkpOworICAgICAgICBtX2J1ZmZlcjgucmVz
aXplKDApOwogICAgIH0gZWxzZQogICAgICAgICB0b2tlbkRhdGEtPmlkZW50ID0gMDsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAJKHJldmlz
aW9uIDEwMDQwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIHN0cnVjdCBJZGVudGlmaWVyQ1N0
cmluZ1RyYW5zbGF0b3IgewogICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShTdHJpbmdJbXBsKiYg
bG9jYXRpb24sIGNvbnN0IExDaGFyKiBjLCB1bnNpZ25lZCBoYXNoKQogICAgIHsKICAgICAgICAg
c2l6ZV90IGxlbmd0aCA9IHN0cmxlbihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihjKSk7
Ci0gICAgICAgIFVDaGFyKiBkOworICAgICAgICBMQ2hhciogZDsKICAgICAgICAgU3RyaW5nSW1w
bCogciA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBkKS5sZWFrUmVm
KCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IGxlbmd0aDsgaSsrKQogICAgICAg
ICAgICAgZFtpXSA9IGNbaV07CkBAIC0xNjksNiArMTY5LDQxIEBAIHVpbnQzMl90IElkZW50aWZp
ZXI6OnRvVUludDMyKGNvbnN0IFVTdHIKICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJu
IDA7CiAKKyAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKSB7CisgICAgICAgIGNvbnN0IExDaGFyKiBj
aGFyYWN0ZXJzID0gc3RyaW5nLmNoYXJhY3RlcnM4KCk7CisKKyAgICAgICAgLy8gR2V0IHRoZSBm
aXJzdCBjaGFyYWN0ZXIsIHR1cm5pbmcgaXQgaW50byBhIGRpZ2l0LgorICAgICAgICB1aW50MzJf
dCB2YWx1ZSA9IGNoYXJhY3RlcnNbMF0gLSAnMCc7CisgICAgICAgIGlmICh2YWx1ZSA+IDkpCisg
ICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAvLyBDaGVjayBmb3IgbGVhZGluZyB6ZXJv
cy4gSWYgdGhlIGZpcnN0IGNoYXJhY2hlciBpcyAwLCB0aGVuIHRoZQorICAgICAgICAvLyBsZW5n
dGggb2YgdGhlIHN0cmluZyBtdXN0IGJlIG9uZSAtIGUuZy4gIjA0MiIgaXMgbm90IGVxdWFsIHRv
ICI0MiIuCisgICAgICAgIGlmICghdmFsdWUgJiYgbGVuZ3RoID4gMSkKKyAgICAgICAgICAgIHJl
dHVybiAwOworCisgICAgICAgIHdoaWxlICgtLWxlbmd0aCkgeworICAgICAgICAgICAgLy8gTXVs
dGlwbHkgdmFsdWUgYnkgMTAsIGNoZWNraW5nIGZvciBvdmVyZmxvdyBvdXQgb2YgMzIgYml0cy4K
KyAgICAgICAgICAgIGlmICh2YWx1ZSA+IDB4RkZGRkZGRkZVIC8gMTApCisgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICB2YWx1ZSAqPSAxMDsKKworICAgICAgICAgICAgLy8g
R2V0IHRoZSBuZXh0IGNoYXJhY3RlciwgdHVybmluZyBpdCBpbnRvIGEgZGlnaXQuCisgICAgICAg
ICAgICB1aW50MzJfdCBuZXdWYWx1ZSA9ICooKytjaGFyYWN0ZXJzKSAtICcwJzsKKyAgICAgICAg
ICAgIGlmIChuZXdWYWx1ZSA+IDkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAg
ICAgICAgIC8vIEFkZCBpbiB0aGUgb2xkIHZhbHVlLCBjaGVja2luZyBmb3Igb3ZlcmZsb3cgb3V0
IG9mIDMyIGJpdHMuCisgICAgICAgICAgICBuZXdWYWx1ZSArPSB2YWx1ZTsKKyAgICAgICAgICAg
IGlmIChuZXdWYWx1ZSA8IHZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICAgICAgdmFsdWUgPSBuZXdWYWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIG9rID0gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKwogICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzID0gc3RyaW5nLmNoYXJhY3RlcnMxNigpOwogCiAgICAgLy8gR2V0IHRoZSBmaXJzdCBjaGFy
YWN0ZXIsIHR1cm5pbmcgaXQgaW50byBhIGRpZ2l0LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCShyZXZpc2lvbiAxMDA0MDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01OSw3ICs1OSw3IEBAIHByaXZhdGU6CiAKIFNtYWxsU3RyaW5nc1N0b3JhZ2U6OlNt
YWxsU3RyaW5nc1N0b3JhZ2UoKQogewotICAgIFVDaGFyKiBjaGFyYWN0ZXJCdWZmZXIgPSAwOwor
ICAgIExDaGFyKiBjaGFyYWN0ZXJCdWZmZXIgPSAwOwogICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBi
YXNlU3RyaW5nID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChzaW5nbGVDaGFyYWN0
ZXJTdHJpbmdDb3VudCwgY2hhcmFjdGVyQnVmZmVyKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2luZ2xlQ2hhcmFjdGVyU3RyaW5nQ291bnQ7ICsraSkgewogICAgICAgICBjaGFyYWN0
ZXJCdWZmZXJbaV0gPSBpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0
cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJp
bmcuaAkocmV2aXNpb24gMTAwNDA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VVN0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIGlmICghbV9pbXBsKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJl
dHVybiBtX2ltcGwtPmNoYXJhY3RlcnMxNigpOworICAgICAgICByZXR1cm4gbV9pbXBsLT5jaGFy
YWN0ZXJzKCk7CiAgICAgfQogCiAgICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnM4KCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRm9yd2FyZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRm9yd2FyZC5oCShyZXZpc2lvbiAxMDA0MDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0ZvcndhcmQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICBjbGFzcyBJbnQxNkFycmF5OwogICAg
IGNsYXNzIEludDMyQXJyYXk7CiAgICAgY2xhc3MgU3RyaW5nOwotICAgIGNsYXNzIFN0cmluZ0J1
ZmZlcjsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgU3RyaW5nQnVmZmVyOwogICAg
IGNsYXNzIFN0cmluZ0J1aWxkZXI7CiAgICAgY2xhc3MgU3RyaW5nSW1wbDsKICAgICBjbGFzcyBV
aW50OEFycmF5OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0J1
ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJp
bmdCdWZmZXIuaAkocmV2aXNpb24gMTAwNDA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi90ZXh0L1N0cmluZ0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxNSArMzUsMTYgQEAK
IAogbmFtZXNwYWNlIFdURiB7CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KIGNsYXNz
IFN0cmluZ0J1ZmZlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RyaW5nQnVmZmVyKTsK
IHB1YmxpYzoKICAgICBleHBsaWNpdCBTdHJpbmdCdWZmZXIodW5zaWduZWQgbGVuZ3RoKQogICAg
ICAgICA6IG1fbGVuZ3RoKGxlbmd0aCkKICAgICB7Ci0gICAgICAgIGlmIChtX2xlbmd0aCA+IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAvIHNpemVvZihVQ2hhcikpCisgICAg
ICAgIGlmIChtX2xlbmd0aCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAv
IHNpemVvZihDaGFyVHlwZSkpCiAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICBtX2RhdGEg
PSBzdGF0aWNfY2FzdDxVQ2hhcio+KGZhc3RNYWxsb2MobV9sZW5ndGggKiBzaXplb2YoVUNoYXIp
KSk7CisgICAgICAgIG1fZGF0YSA9IHN0YXRpY19jYXN0PENoYXJUeXBlKj4oZmFzdE1hbGxvYyht
X2xlbmd0aCAqIHNpemVvZihDaGFyVHlwZSkpKTsKICAgICB9CiAKICAgICB+U3RyaW5nQnVmZmVy
KCkKQEAgLTY4LDE1ICs2OSwxNSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdW5zaWduZWQgbGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KLSAgICBVQ2hhciogY2hhcmFjdGVycygp
IHsgcmV0dXJuIG1fZGF0YTsgfQorICAgIENoYXJUeXBlKiBjaGFyYWN0ZXJzKCkgeyByZXR1cm4g
bV9kYXRhOyB9CiAKICAgICBVQ2hhciYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSB7IEFTU0VSVChp
IDwgbV9sZW5ndGgpOyByZXR1cm4gbV9kYXRhW2ldOyB9CiAKLSAgICBVQ2hhciogcmVsZWFzZSgp
IHsgVUNoYXIqIGRhdGEgPSBtX2RhdGE7IG1fZGF0YSA9IDA7IHJldHVybiBkYXRhOyB9CisgICAg
Q2hhclR5cGUqIHJlbGVhc2UoKSB7IENoYXJUeXBlKiBkYXRhID0gbV9kYXRhOyBtX2RhdGEgPSAw
OyByZXR1cm4gZGF0YTsgfQogCiBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwotICAg
IFVDaGFyKiBtX2RhdGE7CisgICAgQ2hhclR5cGUqIG1fZGF0YTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdURgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0ltcGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJ
bXBsLmNwcAkocmV2aXNpb24gMTAwNDA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90
ZXh0L1N0cmluZ0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsMTIgKzE3MSw5IEBAIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXQKICAgICBpZiAoIWNoYXJhY3Rl
cnMgfHwgIWxlbmd0aCkKICAgICAgICAgcmV0dXJuIGVtcHR5KCk7CiAKLSAgICBVQ2hhciogZGF0
YTsKKyAgICBMQ2hhciogZGF0YTsKICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gc3RyaW5nID0gY3Jl
YXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGRhdGEpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgIT0gbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gY2hhcmFjdGVy
c1tpXTsKLSAgICAgICAgZGF0YVtpXSA9IGM7Ci0gICAgfQorICAgIG1lbWNweShkYXRhLCBjaGFy
YWN0ZXJzLCBsZW5ndGggKiBzaXplb2YoTENoYXIpKTsKICAgICByZXR1cm4gc3RyaW5nLnJlbGVh
c2UoKTsKIH0KIApAQCAtMTk5LDExICsxOTYsMjAgQEAgY29uc3QgVUNoYXIqIFN0cmluZ0ltcGw6
OmdldERhdGExNlNsb3dDYQogICAgICAgICAvLyBJZiB0aGlzIGlzIGEgc3Vic3RyaW5nLCByZXR1
cm4gYSBwb2ludGVyIGludG8gdGhlIHBhcmVudCBzdHJpbmcuCiAgICAgICAgIC8vIFRPRE86IENv
bnNpZGVyIHNldmVyaW5nIHRoaXMgc3RyaW5nIGZyb20gdGhlIHBhcmVudCBzdHJpbmcKICAgICAg
ICAgdW5zaWduZWQgb2Zmc2V0ID0gbV9kYXRhOCAtIG1fc3Vic3RyaW5nQnVmZmVyLT5jaGFyYWN0
ZXJzOCgpOwotICAgICAgICByZXR1cm4gbV9zdWJzdHJpbmdCdWZmZXItPmNoYXJhY3RlcnMxNigp
ICsgb2Zmc2V0OworICAgICAgICByZXR1cm4gbV9zdWJzdHJpbmdCdWZmZXItPmNoYXJhY3RlcnMo
KSArIG9mZnNldDsKICAgICB9CiAKICAgICB1bnNpZ25lZCBsZW4gPSBsZW5ndGgoKTsKKyAgICBp
ZiAoaGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKCkpCisgICAgICAgIGxlbisrOworCiAgICAg
bV9jb3B5RGF0YTE2ID0gc3RhdGljX2Nhc3Q8VUNoYXIqPihmYXN0TWFsbG9jKGxlbiAqIHNpemVv
ZihVQ2hhcikpKTsKKworICAgIGlmIChoYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIoKSkgewor
ICAgICAgICBsZW4tLTsKKyAgICAgICAgbV9jb3B5RGF0YTE2W2xlbl0gPSAnXDAnOworICAgIH0K
KwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuOyBpKyspCiAgICAgICAgIG1fY29weURh
dGExNltpXSA9IG1fZGF0YThbaV07CiAKQEAgLTUyOCwxMCArNTM0LDQwIEBAIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6c3RyaXAKICAgICByZXR1cm4gc3RyaXBNYXRjaGVkQ2hh
cmFjdGVycyhVQ2hhclByZWRpY2F0ZShpc1doaXRlU3BhY2UpKTsKIH0KIAotLy8gRklYTUU6IEFk
ZCA4LWJpdCBwYXRoLiBMaWtlbHkgcmVxdWlyZXMgdGVtcGxhdGl6ZWQgU3RyaW5nQnVmZmVyIGNs
YXNzCiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlbW92ZUNoYXJhY3RlcnMo
Q2hhcmFjdGVyTWF0Y2hGdW5jdGlvblB0ciBmaW5kTWF0Y2gpCiB7Ci0gICAgY29uc3QgVUNoYXIq
IGZyb20gPSBjaGFyYWN0ZXJzKCk7CisgICAgaWYgKGlzOEJpdCgpKSB7CisgICAgICAgIGNvbnN0
IExDaGFyKiBmcm9tID0gY2hhcmFjdGVyczgoKTsKKyAgICAgICAgY29uc3QgTENoYXIqIGZyb21l
bmQgPSBmcm9tICsgbV9sZW5ndGg7CisKKyAgICAgICAgLy8gQXNzdW1lIHRoZSBjb21tb24gY2Fz
ZSB3aWxsIG5vdCByZW1vdmUgYW55IGNoYXJhY3RlcnMKKyAgICAgICAgd2hpbGUgKGZyb20gIT0g
ZnJvbWVuZCAmJiAhZmluZE1hdGNoKCpmcm9tKSkKKyAgICAgICAgICAgIGZyb20rKzsKKyAgICAg
ICAgaWYgKGZyb20gPT0gZnJvbWVuZCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworCisgICAg
ICAgIFN0cmluZ0J1ZmZlcjxMQ2hhcj4gZGF0YShtX2xlbmd0aCk7CisgICAgICAgIExDaGFyKiB0
byA9IGRhdGEuY2hhcmFjdGVycygpOworICAgICAgICB1bnNpZ25lZCBvdXRjID0gZnJvbSAtIGNo
YXJhY3RlcnM4KCk7CisKKyAgICAgICAgaWYgKG91dGMpCisgICAgICAgICAgICBtZW1jcHkodG8s
IGNoYXJhY3RlcnM4KCksIG91dGMgKiBzaXplb2YoTENoYXIpKTsKKworICAgICAgICB3aGlsZSAo
dHJ1ZSkgeworICAgICAgICAgICAgd2hpbGUgKGZyb20gIT0gZnJvbWVuZCAmJiBmaW5kTWF0Y2go
KmZyb20pKQorICAgICAgICAgICAgICAgIGZyb20rKzsKKyAgICAgICAgICAgIHdoaWxlIChmcm9t
ICE9IGZyb21lbmQgJiYgIWZpbmRNYXRjaCgqZnJvbSkpCisgICAgICAgICAgICAgICAgdG9bb3V0
YysrXSA9ICpmcm9tKys7CisgICAgICAgICAgICBpZiAoZnJvbSA9PSBmcm9tZW5kKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGF0YS5zaHJpbmsob3V0Yyk7
CisKKyAgICAgICAgcmV0dXJuIGFkb3B0KGRhdGEpOyAgICAgICAgCisgICAgfQorCisgICAgY29u
c3QgVUNoYXIqIGZyb20gPSBjaGFyYWN0ZXJzMTYoKTsKICAgICBjb25zdCBVQ2hhciogZnJvbWVu
ZCA9IGZyb20gKyBtX2xlbmd0aDsKIAogICAgIC8vIEFzc3VtZSB0aGUgY29tbW9uIGNhc2Ugd2ls
bCBub3QgcmVtb3ZlIGFueSBjaGFyYWN0ZXJzCkBAIC01NDAsNyArNTc2LDcgQEAgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZW1vdgogICAgIGlmIChmcm9tID09IGZyb21lbmQp
CiAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgU3RyaW5nQnVmZmVyIGRhdGEobV9sZW5ndGgp
OworICAgIFN0cmluZ0J1ZmZlcjxVQ2hhcj4gZGF0YShtX2xlbmd0aCk7CiAgICAgVUNoYXIqIHRv
ID0gZGF0YS5jaGFyYWN0ZXJzKCk7CiAgICAgdW5zaWduZWQgb3V0YyA9IGZyb20gLSBjaGFyYWN0
ZXJzMTYoKTsKIApAQCAtNTYxLDE4ICs1OTcsMTcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBT
dHJpbmdJbXBsOjpyZW1vdgogICAgIHJldHVybiBhZG9wdChkYXRhKTsKIH0KIAotLy8gRklYTUU6
IEFkZCA4LWJpdCBwYXRoLiBMaWtlbHkgcmVxdWlyZXMgdGVtcGxhdGl6ZWQgU3RyaW5nQnVmZmVy
IGNsYXNzCi10ZW1wbGF0ZSA8Y2xhc3MgVUNoYXJQcmVkaWNhdGU+Cit0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhclR5cGUsIGNsYXNzIFVDaGFyUHJlZGljYXRlPgogaW5saW5lIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gU3RyaW5nSW1wbDo6c2ltcGxpZnlNYXRjaGVkQ2hhcmFjdGVyc1RvU3BhY2UoVUNo
YXJQcmVkaWNhdGUgcHJlZGljYXRlKQogewotICAgIFN0cmluZ0J1ZmZlciBkYXRhKG1fbGVuZ3Ro
KTsKKyAgICBTdHJpbmdCdWZmZXI8Q2hhclR5cGU+IGRhdGEobV9sZW5ndGgpOwogCi0gICAgY29u
c3QgVUNoYXIqIGZyb20gPSBjaGFyYWN0ZXJzMTYoKTsKLSAgICBjb25zdCBVQ2hhciogZnJvbWVu
ZCA9IGZyb20gKyBtX2xlbmd0aDsKKyAgICBjb25zdCBDaGFyVHlwZSogZnJvbSA9IGdldENoYXJh
Y3RlcnM8Q2hhclR5cGU+KCk7CisgICAgY29uc3QgQ2hhclR5cGUqIGZyb21lbmQgPSBmcm9tICsg
bV9sZW5ndGg7CiAgICAgaW50IG91dGMgPSAwOwogICAgIGJvb2wgY2hhbmdlZFRvU3BhY2UgPSBm
YWxzZTsKICAgICAKLSAgICBVQ2hhciogdG8gPSBkYXRhLmNoYXJhY3RlcnMoKTsKKyAgICBDaGFy
VHlwZSogdG8gPSBkYXRhLmNoYXJhY3RlcnMoKTsKICAgICAKICAgICB3aGlsZSAodHJ1ZSkgewog
ICAgICAgICB3aGlsZSAoZnJvbSAhPSBmcm9tZW5kICYmIHByZWRpY2F0ZSgqZnJvbSkpIHsKQEAg
LTYwMSwxMiArNjM2LDE2IEBAIGlubGluZSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0lt
cGwKIAogUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpzaW1wbGlmeVdoaXRlU3Bh
Y2UoKQogewotICAgIHJldHVybiBTdHJpbmdJbXBsOjpzaW1wbGlmeU1hdGNoZWRDaGFyYWN0ZXJz
VG9TcGFjZShTcGFjZU9yTmV3bGluZVByZWRpY2F0ZSgpKTsKKyAgICBpZiAoaXM4Qml0KCkpCisg
ICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjpzaW1wbGlmeU1hdGNoZWRDaGFyYWN0ZXJzVG9TcGFj
ZTxMQ2hhcj4oU3BhY2VPck5ld2xpbmVQcmVkaWNhdGUoKSk7CisgICAgcmV0dXJuIFN0cmluZ0lt
cGw6OnNpbXBsaWZ5TWF0Y2hlZENoYXJhY3RlcnNUb1NwYWNlPFVDaGFyPihTcGFjZU9yTmV3bGlu
ZVByZWRpY2F0ZSgpKTsKIH0KIAogUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpz
aW1wbGlmeVdoaXRlU3BhY2UoSXNXaGl0ZVNwYWNlRnVuY3Rpb25QdHIgaXNXaGl0ZVNwYWNlKQog
ewotICAgIHJldHVybiBTdHJpbmdJbXBsOjpzaW1wbGlmeU1hdGNoZWRDaGFyYWN0ZXJzVG9TcGFj
ZShVQ2hhclByZWRpY2F0ZShpc1doaXRlU3BhY2UpKTsKKyAgICBpZiAoaXM4Qml0KCkpCisgICAg
ICAgIHJldHVybiBTdHJpbmdJbXBsOjpzaW1wbGlmeU1hdGNoZWRDaGFyYWN0ZXJzVG9TcGFjZTxM
Q2hhcj4oVUNoYXJQcmVkaWNhdGUoaXNXaGl0ZVNwYWNlKSk7CisgICAgcmV0dXJuIFN0cmluZ0lt
cGw6OnNpbXBsaWZ5TWF0Y2hlZENoYXJhY3RlcnNUb1NwYWNlPFVDaGFyPihVQ2hhclByZWRpY2F0
ZShpc1doaXRlU3BhY2UpKTsKIH0KIAogaW50IFN0cmluZ0ltcGw6OnRvSW50U3RyaWN0KGJvb2wq
IG9rLCBpbnQgYmFzZSkKQEAgLTEzNDgsOCArMTM4Nyw2IEBAIGJvb2wgZXF1YWwoY29uc3QgU3Ry
aW5nSW1wbCogYSwgY29uc3QgTEMKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBs
ZW5ndGg7ICsraSkgewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBiYyA9IGJbaV07CiAgICAg
ICAgICAgICB1bnNpZ25lZCBjaGFyIGFjID0gYUNoYXJzW2ldOwotICAgICAgICAgICAgaWYgKCFi
YykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBpZiAoYWMgIT0g
YmMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0xMzYyLDgg
KzEzOTksNiBAQCBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIGEsIGNvbnN0IExDCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBsZW5ndGg7ICsraSkgewogICAgICAgICBVQ2hhciBi
YyA9IGJbaV07CiAgICAgICAgIFVDaGFyIGFjID0gYUNoYXJzW2ldOwotICAgICAgICBpZiAoIWJj
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoYWMgIT0gYmMpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMTU0MSwxMSArMTU3NiwxOCBAQCBXVEY6
OlVuaWNvZGU6OkRpcmVjdGlvbiBTdHJpbmdJbXBsOjpkZWZhCiAgICAgcmV0dXJuIFdURjo6VW5p
Y29kZTo6TGVmdFRvUmlnaHQ7CiB9CiAKLVBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1w
bDo6YWRvcHQoU3RyaW5nQnVmZmVyJiBidWZmZXIpCitQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0
cmluZ0ltcGw6OmFkb3B0KFN0cmluZ0J1ZmZlcjxMQ2hhcj4mIGJ1ZmZlcikKK3sKKyAgICB1bnNp
Z25lZCBsZW5ndGggPSBidWZmZXIubGVuZ3RoKCk7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAg
IHJldHVybiBlbXB0eSgpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RyaW5nSW1wbChidWZm
ZXIucmVsZWFzZSgpLCBsZW5ndGgpKTsKK30KKworUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJp
bmdJbXBsOjphZG9wdChTdHJpbmdCdWZmZXI8VUNoYXI+JiBidWZmZXIpCiB7Ci0gICAgLy8gRklY
TUU6IGhhbmRsZSA4LWJpdCBTdHJpbmdCdWZmZXIgd2hlbiBpdCBleGlzdHMuCiAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aCgpOwotICAgIGlmIChsZW5ndGggPT0gMCkKKyAgICBp
ZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJuIGVtcHR5KCk7CiAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTdHJpbmdJbXBsKGJ1ZmZlci5yZWxlYXNlKCksIGxlbmd0aCkpOwogfQpAQCAtMTU3MCw3
ICsxNjEyLDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdAogICAg
ICAgICBkYXRhW2xlbmd0aF0gPSAwOwogICAgIH0KICAgICB0ZXJtaW5hdGVkU3RyaW5nLT5tX2xl
bmd0aC0tOwotICAgIHRlcm1pbmF0ZWRTdHJpbmctPm1faGFzaEFuZEZsYWdzID0gKHN0cmluZy5t
X2hhc2hBbmRGbGFncyAmIH5zX2ZsYWdNYXNrKSB8IHNfaGFzaEZsYWdIYXNUZXJtaW5hdGluZ051
bGxDaGFyYWN0ZXI7CisgICAgdGVybWluYXRlZFN0cmluZy0+bV9oYXNoQW5kRmxhZ3MgPSAoc3Ry
aW5nLm1faGFzaEFuZEZsYWdzICYgKH5zX2ZsYWdNYXNrIHwgc19oYXNoRmxhZzhCaXRCdWZmZXIp
KSB8IHNfaGFzaEZsYWdIYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXI7CiAgICAgcmV0dXJuIHRl
cm1pbmF0ZWRTdHJpbmcucmVsZWFzZSgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL3RleHQvU3RyaW5nSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHJldmlzaW9uIDEwMDQwNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
OSwxMiArMTM5LDI0IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgLy8gQ3JlYXRlIGEgU3RyaW5n
SW1wbCBhZG9wdGluZyBvd25lcnNoaXAgb2YgdGhlIHByb3ZpZGVkIGJ1ZmZlciAoQnVmZmVyT3du
ZWQpCi0gICAgU3RyaW5nSW1wbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVu
Z3RoKQorICAgIFN0cmluZ0ltcGwoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxl
bmd0aCkKICAgICAgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRJbmNyZW1lbnQpCiAgICAgICAg
ICwgbV9sZW5ndGgobGVuZ3RoKQotICAgICAgICAsIG1fZGF0YTE2KGNoYXJhY3RlcnMpCisgICAg
ICAgICwgbV9kYXRhOChjaGFyYWN0ZXJzKQogICAgICAgICAsIG1fYnVmZmVyKDApCi0gICAgICAg
ICwgbV9oYXNoQW5kRmxhZ3MoQnVmZmVyT3duZWQpCisgICAgICAgICwgbV9oYXNoQW5kRmxhZ3Mo
c19oYXNoRmxhZzhCaXRCdWZmZXIgfCBCdWZmZXJPd25lZCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX2RhdGE4KTsKKyAgICAgICAgQVNTRVJUKG1fbGVuZ3RoKTsKKyAgICB9CisKKyAgICAvLyBD
cmVhdGUgYSBTdHJpbmdJbXBsIGFkb3B0aW5nIG93bmVyc2hpcCBvZiB0aGUgcHJvdmlkZWQgYnVm
ZmVyIChCdWZmZXJPd25lZCkKKyAgICBTdHJpbmdJbXBsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRJbmNyZW1lbnQp
CisgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgLCBtX2RhdGExNihjaGFyYWN0ZXJzKQorICAg
ICwgbV9idWZmZXIoMCkKKyAgICAsIG1faGFzaEFuZEZsYWdzKEJ1ZmZlck93bmVkKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKG1fZGF0YTE2KTsKICAgICAgICAgQVNTRVJUKG1fbGVuZ3RoKTsKQEAg
LTI2MiwxMyArMjc0LDE0IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZW1w
dHkoKTsKICAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRvcHQoU3Ry
aW5nQnVmZmVyJik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRvcHQoU3Ry
aW5nQnVmZmVyPExDaGFyPiYpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFk
b3B0KFN0cmluZ0J1ZmZlcjxVQ2hhcj4mKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CiAgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiBt
X2hhc2hBbmRGbGFncyAmIHNfaGFzaEZsYWc4Qml0QnVmZmVyOyB9CiAKICAgICAvLyBGSVhNRTog
UmVtb3ZlIGFsbCB1bm5lY2Vzc2FyeSB1c2FnZXMgb2YgY2hhcmFjdGVycygpCi0gICAgQUxXQVlT
X0lOTElORSBjb25zdCBMQ2hhciogY2hhcmFjdGVyczgoKSBjb25zdCB7IEFTU0VSVChpczhCaXQo
KSk7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gbV9kYXRhODsgfQorICAgIEFMV0FZU19J
TkxJTkUgY29uc3QgTENoYXIqIGNoYXJhY3RlcnM4KCkgY29uc3QgeyBBU1NFUlQoaXM4Qml0KCkp
OyByZXR1cm4gbV9kYXRhODsgfQogICAgIEFMV0FZU19JTkxJTkUgY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMxNigpIGNvbnN0IHsgQVNTRVJUKCFpczhCaXQoKSk7IHJldHVybiBtX2RhdGExNjsgfQog
ICAgIEFMV0FZU19JTkxJTkUgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMoKSBjb25zdAogICAgIHsK
QEAgLTI3OCw2ICsyOTEsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBnZXREYXRhMTZTbG93
Q2FzZSgpOwogICAgIH0KIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KKyAgICBB
TFdBWVNfSU5MSU5FIGNvbnN0IENoYXJUeXBlICogZ2V0Q2hhcmFjdGVycygpIGNvbnN0OworCiAg
ICAgc2l6ZV90IGNvc3QoKQogICAgIHsKICAgICAgICAgLy8gRm9yIHN1YnN0cmluZ3MsIHJldHVy
biB0aGUgY29zdCBvZiB0aGUgYmFzZSBzdHJpbmcuCkBAIC00NTcsNyArNDczLDYgQEAgcHVibGlj
OgogCiAgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiByZW1vdmVDaGFyYWN0ZXJzKENoYXJhY3Rl
ck1hdGNoRnVuY3Rpb25QdHIpOwogCi0gICAgLy8gRklYTUU6IERvIHdlIG5lZWQgY2hhciB2ZXJz
aW9uLCBvciBpcyBpdCBva2F5IHRvIGp1c3QgcGFzcyBpbiBhbiBBU0NJSSBjaGFyIGZvciA4LWJp
dD8gU2FtZSBmb3IgcmV2ZXJzZUZpbmQsIHJlcGxhY2UKICAgICBzaXplX3QgZmluZChVQ2hhciwg
dW5zaWduZWQgaW5kZXggPSAwKTsKICAgICBzaXplX3QgZmluZChDaGFyYWN0ZXJNYXRjaEZ1bmN0
aW9uUHRyLCB1bnNpZ25lZCBpbmRleCA9IDApOwogICAgIHNpemVfdCBmaW5kKGNvbnN0IExDaGFy
KiwgdW5zaWduZWQgaW5kZXggPSAwKTsKQEAgLTQ5NSw3ICs1MTAsNyBAQCBwcml2YXRlOgogICAg
IEJ1ZmZlck93bmVyc2hpcCBidWZmZXJPd25lcnNoaXAoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxCdWZmZXJPd25lcnNoaXA+KG1faGFzaEFuZEZsYWdzICYgc19oYXNoTWFza0J1ZmZlck93
bmVyc2hpcCk7IH0KICAgICBib29sIGlzU3RhdGljKCkgY29uc3QgeyByZXR1cm4gbV9yZWZDb3Vu
dCAmIHNfcmVmQ291bnRGbGFnSXNTdGF0aWNTdHJpbmc7IH0KICAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
VUNoYXJQcmVkaWNhdGU+IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gc3RyaXBNYXRjaGVkQ2hhcmFj
dGVycyhVQ2hhclByZWRpY2F0ZSk7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFVDaGFyUHJlZGljYXRl
PiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHNpbXBsaWZ5TWF0Y2hlZENoYXJhY3RlcnNUb1NwYWNl
KFVDaGFyUHJlZGljYXRlKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGUsIGNsYXNz
IFVDaGFyUHJlZGljYXRlPiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHNpbXBsaWZ5TWF0Y2hlZENo
YXJhY3RlcnNUb1NwYWNlKFVDaGFyUHJlZGljYXRlKTsKICAgICBORVZFUl9JTkxJTkUgY29uc3Qg
VUNoYXIqIGdldERhdGExNlNsb3dDYXNlKCkgY29uc3Q7CiAKICAgICAvLyBUaGUgYm90dG9tIGJp
dCBpbiB0aGUgcmVmIGNvdW50IGluZGljYXRlcyBhIHN0YXRpYyAoaW1tb3J0YWwpIHN0cmluZy4K
QEAgLTUyOSw2ICs1NDQsMTIgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIHVuc2lnbmVkIG1faGFz
aEFuZEZsYWdzOwogfTsKIAordGVtcGxhdGUgPD4KK0FMV0FZU19JTkxJTkUgY29uc3QgTENoYXIq
IFN0cmluZ0ltcGw6OmdldENoYXJhY3RlcnM8TENoYXI+KCkgY29uc3QgeyByZXR1cm4gY2hhcmFj
dGVyczgoKTsgfQorCit0ZW1wbGF0ZSA8PgorQUxXQVlTX0lOTElORSBjb25zdCBVQ2hhciogU3Ry
aW5nSW1wbDo6Z2V0Q2hhcmFjdGVyczxVQ2hhcj4oKSBjb25zdCB7IHJldHVybiBjaGFyYWN0ZXJz
MTYoKTsgfQorCiBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBTdHJpbmdJbXBs
Kik7CiBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBMQ2hhciopOwogaW5saW5l
IGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogYSwgY29uc3QgY2hhciogYikgeyByZXR1cm4g
ZXF1YWwoYSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGIpKTsgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9XVEZTdHJpbmcuaAkocmV2aXNpb24gMTAwNDA1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTgsNyArMTE4LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzd2FwKFN0cmlu
ZyYgbykgeyBtX2ltcGwuc3dhcChvLm1faW1wbCk7IH0KIAotICAgIHN0YXRpYyBTdHJpbmcgYWRv
cHQoU3RyaW5nQnVmZmVyJiBidWZmZXIpIHsgcmV0dXJuIFN0cmluZ0ltcGw6OmFkb3B0KGJ1ZmZl
cik7IH0KKyAgICBzdGF0aWMgU3RyaW5nIGFkb3B0KFN0cmluZ0J1ZmZlcjxMQ2hhcj4mIGJ1ZmZl
cikgeyByZXR1cm4gU3RyaW5nSW1wbDo6YWRvcHQoYnVmZmVyKTsgfQorICAgIHN0YXRpYyBTdHJp
bmcgYWRvcHQoU3RyaW5nQnVmZmVyPFVDaGFyPiYgYnVmZmVyKSB7IHJldHVybiBTdHJpbmdJbXBs
OjphZG9wdChidWZmZXIpOyB9CiAgICAgdGVtcGxhdGU8c2l6ZV90IGlubGluZUNhcGFjaXR5Pgog
ICAgIHN0YXRpYyBTdHJpbmcgYWRvcHQoVmVjdG9yPFVDaGFyLCBpbmxpbmVDYXBhY2l0eT4mIHZl
Y3RvcikgeyByZXR1cm4gU3RyaW5nSW1wbDo6YWRvcHQodmVjdG9yKTsgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxMDA0MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSw0MSBAQAorMjAxMS0xMS0xNSAgTWljaGFlbCBTYWJvZmYgIDxt
c2Fib2ZmQGFwcGxlLmNvbT4KKworICAgICAgICBFbmFibGUgOCBCaXQgU3RyaW5ncyBpbiBKYXZh
U2NyaXB0Q29yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzEzMzcKKworICAgICAgICBUaGlzIHBhdGNoIHR1cm5zIG9uIDggYml0IHN0cmluZ3MgaW4g
U3RyaW5nSW1wbCBhbmQgZW5hYmxlcworICAgICAgICB0aGVpciB1c2UgaW4gSmF2YVNjcmlwdENv
cmUuIFNvbWUgb2YgdGhlIGNoYW5nZXMgYXJlIHRvCisgICAgICAgIHR1cm4gb24gY29kZSB0aGF0
IGhhZCBiZWVuIHN0YWdlZCAoTGV4ZXIuY3BwLCBJZGVudGlmaWVyLmNwcCwKKyAgICAgICAgU21h
bGxTdHJpbmdzLmNwcCBhbmQgc29tZSBvZiBTdHJpbmdJbXBsLntoLGNwcH0pLgorICAgICAgICBP
dGhlciBjaGFuZ2VzIGFyZSBtaW5vciBmaXhlcyB0byBtYWtlIDggYml0IHN0cmluZ3Mgd29yawor
ICAgICAgICAoVVN0cmluZy5oLCBTdHJpbmdJbXBsOjpnZXREYXRhMTZTbG93Q2FzZSgpKS4KKyAg
ICAgICAgQ2hhbmdlZCBTdHJpbmdCdWZmZXIgdG8gYmUgYSB0ZW1wbGF0ZWQgY2xhc3MgYmFzZWQg
b24gY2hhcmFjdGVyCisgICAgICAgIHR5cGUuICBUaGlzIGNoYW5nZSByaXBsbGVkIGludG8gV2Vi
Q29yZSBjb2RlIGFzIHdlbGwuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzIC0gQ2hhbmdlcyBpbiByZXNwb25zZSB0byByZWZhY3Rv
cmluZyBTdHJpbmdCdWZmZXIgdG8KKyAgICAgICAgYmUgYSB0ZW1wbGF0ZSBvbiBjaGFyYWN0ZXIg
dHlwZS4KKworICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cXVvdGVDU1NTdHJpbmcpOgorICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpmb3JtYXROdW1iZXIpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjYW5vbmljYWxpemVkVGl0bGUpOgorICAgICAgICAqIHBs
YXRmb3JtL0xlbmd0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpuZXdDb29yZHNBcnJheSk6Cisg
ICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OnByZXBhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQv
VGV4dENvZGVjVVRGMTYuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjVVRGMTY6OmRl
Y29kZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEY4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRDb2RlY1VURjg6OmRlY29kZSk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUNhcGl0YWxpemVkKToKKyAg
ICAgICAgKiB4bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
d3JpdGVUb1N0cmluZ0J1aWxkZXIpOgorCiAyMDExLTExLTE1ICBKZWZmIFRpbWFudXMgIDx0d2l6
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIER1cmluZyB0ZWFyIGRvd24sIHBy
ZXZlbnQgdGhlIFdlYkdMTGF5ZXJDaHJvbWl1bSBpbnN0YW5jZSBmcm9tIGF0dGVtcHRpbmcgdG8g
c3RvcCBhIHRpbWVyIGZvciBhIE5VTEwgY29udGV4dC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJz
ZXIuY3BwCShyZXZpc2lvbiAxMDA0MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzk3NCw3ICs3OTc0LDcgQEAgU3RyaW5nIHF1b3RlQ1NT
U3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaQogICAgICAgICB9CiAgICAgfQogCi0gICAgU3RyaW5n
QnVmZmVyIGJ1ZmZlcihxdW90ZWRTdHJpbmdTaXplKTsKKyAgICBTdHJpbmdCdWZmZXI8VUNoYXI+
IGJ1ZmZlcihxdW90ZWRTdHJpbmdTaXplKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAg
YnVmZmVyW2luZGV4KytdID0gJ1wnJzsKICAgICBhZnRlckVzY2FwZSA9IGZhbHNlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCShyZXZpc2lvbiAxMDA0MDUp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02ODQsNyArNjg0LDcgQEAgc3RhdGljIFN0cmluZyBmb3JtYXROdW1iZXIoZG91Ymxl
IG51bWJlcgogewogICAgIERlY2ltYWxOdW1iZXIgZGVjaW1hbChudW1iZXIpOwogCi0gICAgU3Ry
aW5nQnVmZmVyIGJ1ZmZlcihkZWNpbWFsLmJ1ZmZlckxlbmd0aEZvclN0cmluZ0RlY2ltYWwoKSk7
CisgICAgU3RyaW5nQnVmZmVyPFVDaGFyPiBidWZmZXIoZGVjaW1hbC5idWZmZXJMZW5ndGhGb3JT
dHJpbmdEZWNpbWFsKCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGRlY2ltYWwudG9TdHJpbmdE
ZWNpbWFsKGJ1ZmZlci5jaGFyYWN0ZXJzKCksIGJ1ZmZlci5sZW5ndGgoKSk7CiAgICAgQVNTRVJU
X1VOVVNFRChsZW5ndGgsIGxlbmd0aCA9PSBidWZmZXIubGVuZ3RoKCkpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDEwMDQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNTksNyArMTI1OSw3IEBAIHN0YXRp
YyBpbmxpbmUgU3RyaW5nV2l0aERpcmVjdGlvbiBjYW5vbmkKICAgICB1bnNpZ25lZCBsZW5ndGgg
PSB0aXRsZS5sZW5ndGgoKTsKICAgICB1bnNpZ25lZCBpOwogCi0gICAgU3RyaW5nQnVmZmVyIGJ1
ZmZlcihsZW5ndGgpOworICAgIFN0cmluZ0J1ZmZlcjxVQ2hhcj4gYnVmZmVyKGxlbmd0aCk7CiAg
ICAgdW5zaWduZWQgYnVpbGRlckluZGV4ID0gMDsKIAogICAgIC8vIFNraXAgbGVhZGluZyBzcGFj
ZXMgYW5kIGxlYWRpbmcgY2hhcmFjdGVycyB0aGF0IHdvdWxkIGNvbnZlcnQgdG8gc3BhY2VzCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5jcHAJKHJldmlzaW9uIDEwMDQwNSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcg
Kzg4LDcgQEAgUGFzc093bkFycmF5UHRyPExlbmd0aD4gbmV3Q29vcmRzQXJyYXkoYwogewogICAg
IHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKICAgICBjb25zdCBVQ2hhciogZGF0
YSA9IHN0cmluZy5jaGFyYWN0ZXJzKCk7Ci0gICAgU3RyaW5nQnVmZmVyIHNwYWNpZmllZChsZW5n
dGgpOworICAgIFN0cmluZ0J1ZmZlcjxVQ2hhcj4gc3BhY2lmaWVkKGxlbmd0aCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgIFVDaGFyIGNjID0g
ZGF0YVtpXTsKICAgICAgICAgaWYgKGNjID4gJzknIHx8IChjYyA8ICcwJyAmJiBjYyAhPSAnLScg
JiYgY2MgIT0gJyonICYmIGNjICE9ICcuJykpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAkocmV2aXNpb24gMTAwNDA1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTcwLDcgKzcwLDggQEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6cHJlcGFyZSgpCiAgICAg
Y29uc3Qgdm9pZCogdGFpbCA9IDA7CiAgICAgTE9HKFNRTERhdGFiYXNlLCAiU1FMIC0gcHJlcGFy
ZSAtICVzIiwgbV9xdWVyeS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgU3RyaW5nIHN0cmlwcGVkUXVl
cnkgPSBtX3F1ZXJ5LnN0cmlwV2hpdGVTcGFjZSgpOwotICAgIGludCBlcnJvciA9IHNxbGl0ZTNf
cHJlcGFyZTE2X3YyKG1fZGF0YWJhc2Uuc3FsaXRlM0hhbmRsZSgpLCBzdHJpcHBlZFF1ZXJ5LmNo
YXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIC0xLCAmbV9zdGF0ZW1lbnQsICZ0YWlsKTsK
KyAgICBjb25zdCBVQ2hhciogbnVsbFRlcm1lZCA9IHN0cmlwcGVkUXVlcnkuY2hhcmFjdGVyc1dp
dGhOdWxsVGVybWluYXRpb24oKTsKKyAgICBpbnQgZXJyb3IgPSBzcWxpdGUzX3ByZXBhcmUxNl92
MihtX2RhdGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSwgbnVsbFRlcm1lZCwgLTEsICZtX3N0YXRlbWVu
dCwgJnRhaWwpOwogCiAgICAgLy8gU3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDMuNi4xNiwgc3FsaXRl
IGhhcyBhIHBhdGNoIChodHRwOi8vd3d3LnNxbGl0ZS5vcmcvc3JjL2NpLzI1NmVjM2M2YWYpCiAg
ICAgLy8gdGhhdCBzaG91bGQgbWFrZSBzdXJlIHNxbGl0ZTNfcHJlcGFyZTE2X3YyIGRvZXNuJ3Qg
cmV0dXJuIGEgU1FMSVRFX1NDSEVNQSBlcnJvci4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dENvZGVjVVRGOC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEY4LmNwcAkocmV2aXNpb24gMTAwNDA1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEY4LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjE4LDcgKzIxOCw3IEBAIFN0cmluZyBUZXh0Q29kZWNVVEY4OjpkZWNvZGUoY29uc3Qg
Y2hhcioKICAgICAvLyBFYWNoIGlucHV0IGJ5dGUgbWlnaHQgdHVybiBpbnRvIGEgY2hhcmFjdGVy
LgogICAgIC8vIFRoYXQgaW5jbHVkZXMgYWxsIGJ5dGVzIGluIHRoZSBwYXJ0aWFsLXNlcXVlbmNl
IGJ1ZmZlciBiZWNhdXNlCiAgICAgLy8gZWFjaCBieXRlIGluIGFuIGludmFsaWQgc2VxdWVuY2Ug
d2lsbCB0dXJuIGludG8gYSByZXBsYWNlbWVudCBjaGFyYWN0ZXIuCi0gICAgU3RyaW5nQnVmZmVy
IGJ1ZmZlcihtX3BhcnRpYWxTZXF1ZW5jZVNpemUgKyBsZW5ndGgpOworICAgIFN0cmluZ0J1ZmZl
cjxVQ2hhcj4gYnVmZmVyKG1fcGFydGlhbFNlcXVlbmNlU2l6ZSArIGxlbmd0aCk7CiAKICAgICBj
b25zdCB1aW50OF90KiBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihi
eXRlcyk7CiAgICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlICsgbGVuZ3RoOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5jcHAJKHJl
dmlzaW9uIDEwMDQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVj
VVRGMTYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIFN0cmluZyBUZXh0Q29k
ZWNVVEYxNjo6ZGVjb2RlKGNvbnN0IGNoYXIKICAgICBzaXplX3QgbnVtQnl0ZXMgPSBsZW5ndGgg
KyBtX2hhdmVCdWZmZXJlZEJ5dGU7CiAgICAgc2l6ZV90IG51bUNoYXJzID0gbnVtQnl0ZXMgLyAy
OwogCi0gICAgU3RyaW5nQnVmZmVyIGJ1ZmZlcihudW1DaGFycyk7CisgICAgU3RyaW5nQnVmZmVy
PFVDaGFyPiBidWZmZXIobnVtQ2hhcnMpOwogICAgIFVDaGFyKiBxID0gYnVmZmVyLmNoYXJhY3Rl
cnMoKTsKIAogICAgIGlmIChtX2hhdmVCdWZmZXJlZEJ5dGUpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDEwMDQwNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyAr
OTUsNyBAQCBzdGF0aWMgdm9pZCBtYWtlQ2FwaXRhbGl6ZWQoU3RyaW5nKiBzdHJpCiAgICAgaWYg
KGxlbmd0aCA+PSBudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQogICAgICAgICBDUkFT
SCgpOwogCi0gICAgU3RyaW5nQnVmZmVyIHN0cmluZ1dpdGhQcmV2aW91cyhsZW5ndGggKyAxKTsK
KyAgICBTdHJpbmdCdWZmZXI8VUNoYXI+IHN0cmluZ1dpdGhQcmV2aW91cyhsZW5ndGggKyAxKTsK
ICAgICBzdHJpbmdXaXRoUHJldmlvdXNbMF0gPSBwcmV2aW91cyA9PSBub0JyZWFrU3BhY2UgPyAn
ICcgOiBwcmV2aW91czsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbGVuZ3RoICsgMTsg
aSsrKSB7CiAgICAgICAgIC8vIFJlcGxhY2UgJm5ic3Agd2l0aCBhIHJlYWwgc3BhY2Ugc2luY2Ug
SUNVIG5vIGxvbmdlciB0cmVhdHMgJm5ic3AgYXMgYSB3b3JkIHNlcGFyYXRvci4KQEAgLTEwOSw3
ICsxMDksNyBAQCBzdGF0aWMgdm9pZCBtYWtlQ2FwaXRhbGl6ZWQoU3RyaW5nKiBzdHJpCiAgICAg
aWYgKCFib3VuZGFyeSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nQnVmZmVyIGRhdGEo
bGVuZ3RoKTsKKyAgICBTdHJpbmdCdWZmZXI8VUNoYXI+IGRhdGEobGVuZ3RoKTsKIAogICAgIGlu
dDMyX3QgZW5kT2ZXb3JkOwogICAgIGludDMyX3Qgc3RhcnRPZldvcmQgPSB0ZXh0QnJlYWtGaXJz
dChib3VuZGFyeSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhz
bHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGli
eHNsdC5jcHAJKHJldmlzaW9uIDEwMDQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJv
Y2Vzc29yTGlieHNsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NSw3ICsxNzUsNyBAQCBzdGF0
aWMgaW50IHdyaXRlVG9TdHJpbmdCdWlsZGVyKHZvaWQqIGNvCiAgICAgaWYgKCFsZW4pCiAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgU3RyaW5nQnVmZmVyIHN0cmluZ0J1ZmZlcihsZW4pOworICAg
IFN0cmluZ0J1ZmZlcjxVQ2hhcj4gc3RyaW5nQnVmZmVyKGxlbik7CiAgICAgVUNoYXIqIGJ1ZmZl
clVDaGFyID0gc3RyaW5nQnVmZmVyLmNoYXJhY3RlcnMoKTsKICAgICBVQ2hhciogYnVmZmVyVUNo
YXJFbmQgPSBidWZmZXJVQ2hhciArIGxlbjsKIAo=
</data>
<flag name="review"
          id="114317"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>