<?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>83180</bug_id>
          
          <creation_ts>2012-04-04 10:30:16 -0700</creation_ts>
          <short_desc>Make something faster than JSStringBuilder for joining an array of JSValue</short_desc>
          <delta_ts>2012-04-05 12:30:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>83243</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>595665</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-04-04 10:30:16 -0700</bug_when>
    <thetext>Joining a string is a special case of string builder. We can do a better job if we make strong assumptions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595712</commentid>
    <comment_count>1</comment_count>
      <attachid>135629</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-04-04 11:01:29 -0700</bug_when>
    <thetext>Created attachment 135629
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595715</commentid>
    <comment_count>2</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-04-04 11:07:14 -0700</bug_when>
    <thetext>This is my first step to make Array.join() faster.

Next I want to work on the problem of conversion UString-&gt;JSString-&gt;UString coming from JSValue::toString() (which is a regression.)

This version makes join() about 23% faster than the previous version.  Adding the special case of the FIXME adds a few percents but is more complex so I&apos;ll leave that for later if needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595722</commentid>
    <comment_count>3</comment_count>
      <attachid>135629</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-04-04 11:10:40 -0700</bug_when>
    <thetext>Comment on attachment 135629
Patch

Attachment 135629 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12319997</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595731</commentid>
    <comment_count>4</comment_count>
      <attachid>135629</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-04-04 11:15:09 -0700</bug_when>
    <thetext>Comment on attachment 135629
Patch

I was so eager to commit that I forgot to update the other build systems...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595738</commentid>
    <comment_count>5</comment_count>
      <attachid>135638</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-04-04 11:22:56 -0700</bug_when>
    <thetext>Created attachment 135638
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595878</commentid>
    <comment_count>6</comment_count>
      <attachid>135638</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-04-04 13:42:05 -0700</bug_when>
    <thetext>Comment on attachment 135638
Patch

Attachment 135638 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/12328067</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595894</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-04-04 13:51:50 -0700</bug_when>
    <thetext>../../../lib/libjavascriptcore_efl.a(ArrayPrototype.cpp.o): In function `JSC::arrayProtoFuncJoin(JSC::ExecState*)&apos;:
ArrayPrototype.cpp:(.text+0x6355): undefined reference to `JSC::JSStringJoiner::build(JSC::ExecState*)&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595910</commentid>
    <comment_count>8</comment_count>
      <attachid>135674</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-04-04 14:04:16 -0700</bug_when>
    <thetext>Created attachment 135674
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595917</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-04-04 14:09:47 -0700</bug_when>
    <thetext>&gt; Source/JavaScriptCore/runtime/JSStringJoiner.cpp:76
&gt; +static inline PassRefPtr&lt;StringImpl&gt; joinStrings(Vector&lt;UString&gt;&amp; strings, const UString&amp; separator, unsigned outputLength)

strings can be a const Vector&amp;.

&gt; Source/JavaScriptCore/runtime/JSStringJoiner.cpp:90
&gt; +        UString&amp; string = strings.at(i);

I prefer &quot;strings[i]&quot; -style notation.

&gt; Source/JavaScriptCore/runtime/JSStringJoiner.cpp:115
&gt; +    is8Bits = is8Bits &amp;&amp; m_separator.is8Bit();
&gt; +    for (size_t i = 0; i &lt; m_strings.size(); ++i) {

I think it would be slightly better to accumulate this data in a data member during append(). That will save you having to walk m_strings twice.

&gt; Source/JavaScriptCore/runtime/JSStringJoiner.h:60
&gt; +    m_isValid = m_strings.tryAppend(&amp;str, 1);

I would change this to:

if (!m_isValid)
    return;
m_strings.uncheckedAppend(str);

Append should always succeed if you&apos;ve pre-reserved capacity, so this makes a little more sense, and is a little more efficient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595992</commentid>
    <comment_count>10</comment_count>
      <attachid>135694</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-04-04 15:06:21 -0700</bug_when>
    <thetext>Created attachment 135694
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595999</commentid>
    <comment_count>11</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-04-04 15:09:39 -0700</bug_when>
    <thetext>&gt; &gt; Source/JavaScriptCore/runtime/JSStringJoiner.cpp:115
&gt; &gt; +    is8Bits = is8Bits &amp;&amp; m_separator.is8Bit();
&gt; &gt; +    for (size_t i = 0; i &lt; m_strings.size(); ++i) {
&gt; 
&gt; I think it would be slightly better to accumulate this data in a data member during append(). That will save you having to walk m_strings twice.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSStringJoiner.h:60
&gt; &gt; +    m_isValid = m_strings.tryAppend(&amp;str, 1);
&gt; 
&gt; I would change this to:
&gt; 
&gt; if (!m_isValid)
&gt;     return;
&gt; m_strings.uncheckedAppend(str);
&gt; 
&gt; Append should always succeed if you&apos;ve pre-reserved capacity, so this makes a little more sense, and is a little more efficient.

I updated following your ideas.

To my surprise, that does not change anything in the benchmarks. The profile was dominated with memory operations so I guess a few branches do not make much of a difference here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596294</commentid>
    <comment_count>12</comment_count>
      <attachid>135694</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-04-04 21:57:11 -0700</bug_when>
    <thetext>Comment on attachment 135694
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596800</commentid>
    <comment_count>13</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-04-05 12:30:42 -0700</bug_when>
    <thetext>Committed r113355: &lt;http://trac.webkit.org/changeset/113355&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135629</attachid>
            <date>2012-04-04 11:01:29 -0700</date>
            <delta_ts>2012-04-04 11:22:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-83180-20120404110128.patch</filename>
            <type>text/plain</type>
            <size>18063</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzMTE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MmE2OGU1ZjkyZDIzNTFiOGQ4MDk1NDhhMjYwYzFmMDc1YjA2MDFkLi45ODBlNjNmY2M3YmU3MmUy
NWI2NmEzNDliMDI2OTE4NmMwY2IzNTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNyBAQAorMjAxMi0wNC0wNCAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBNYWtlIHNvbWV0aGluZyBmYXN0ZXIgdGhhbiBKU1N0cmluZ0J1aWxk
ZXIgZm9yIGpvaW5pbmcgYW4gYXJyYXkgb2YgSlNWYWx1ZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODMxODAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZCB0aGUgY2xhc3MgSlNTdHJp
bmdKb2luZXIgb3B0aW1pemVkIGZvciBqb2luKCkgb3BlcmF0aW9ucy4KKworICAgICAgICBUaGlz
IGNsYXNzIG1ha2VzIHN0cmljdGVyIGNvbnN0cmFpbnRzIHRoYW4gSlNTdHJpbmdCdWlsZGVyIGlu
IG9yZGVyIGF2b2lkCisgICAgICAgIG1lbW9yeSBhbGxvY2F0aW9ucy4KKworICAgICAgICBJbiB0
aGUgYmVzdCBjYXNlLCB0aGUgY2xhc3MgYWxsb2NhdGUgbWVtb3J5IG9ubHkgdHdpY2U6CisgICAg
ICAgIC1BbGxvY2F0ZSBhbiBhcnJheSB0byBrZWVwIGEgbGlzdCBvZiBVU3RyaW5nIHRvIGpvaW4u
CisgICAgICAgIC1BbGxvY2F0ZSB0aGUgZmluYWwgc3RyaW5nLgorCisgICAgICAgIFdlIGFsc28g
YXZvaWQgdGhlIGNvbnZlcnNpb24gZnJvbSA4Yml0cyBzdHJpbmdzIHRvIDE2Yml0cyBzdHJpbmdz
IHNpbmNlCisgICAgICAgIHRoZXkgYXJlIGNvc3RseSBhbmQgdW5saWtseSB0byBoZWxwIGZvciBz
dWJzZXF1ZW50IGNhbGxzLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcDoKKyAg
ICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6CisgICAgICAgIChKU0M6
OmFycmF5UHJvdG9GdW5jSm9pbik6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZ0pvaW5lci5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6YXBwZW5kU3RyaW5nVG9E
YXRhKToKKyAgICAgICAgKEpTQzo6am9pblN0cmluZ3MpOgorICAgICAgICAoSlNDOjpKU1N0cmlu
Z0pvaW5lcjo6YnVpbGQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmdKb2luZXIuaDogQWRk
ZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNTdHJpbmdKb2luZXIpOgorICAgICAgICAo
SlNDOjpKU1N0cmluZ0pvaW5lcjo6SlNTdHJpbmdKb2luZXIpOgorICAgICAgICAoSlNDOjpKU1N0
cmluZ0pvaW5lcjo6YXBwZW5kKToKKwogMjAxMi0wNC0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgogCiAgICAgICAgIE9mZmxpbmVhc20gQVJNIGJhY2tlbmQgdXNlcyB0aGUgd3Jv
bmcgbW5lbW9uaWMgZm9yIG11bHRpcGx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDNlZDE0OTUyOTE5N2JmNWI1NjAzMjcyOTczODkxOTkyZjAyMzQ5YTguLmZmOTU3M2ZhNjU2MTNi
YjhmZjhjMThjNmJjMzk2ZGVhZGIwYzk3NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0zMTQsNiArMzE0LDggQEAKIAkJMTREMkYzREIxMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtl
ZFNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NEQyRjNEOTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNEU5RDE3QjEwN0VDNDY5MDA0RERB
MjEgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NTZGQzYwRTIwMzFCMjAwREU3RDEyIC8qIEpTR2xv
YmFsT2JqZWN0RnVuY3Rpb25zLmNwcCAqLzsgfTsKIAkJMTRGOTc0NDcxMzhDODUzRTAwREExQzY3
IC8qIEhlYXBSb290VmlzaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTRGOTc0NDYxMzhDODUzRTAwREExQzY3IC8qIEhlYXBSb290VmlzaXRvci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTI2MDBC
NUE2MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjAwQjVBNDE1MkJBQUE3MDA5MUVFNUYg
LyogSlNTdHJpbmdKb2luZXIuY3BwICovOyB9OworCQkyNjAwQjVBNzE1MkJBQUE3MDA5MUVFNUYg
LyogSlNTdHJpbmdKb2luZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDI2MDBCNUE1MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5oICov
OyB9OwogCQk0MTM1OUNGMzBGREQ4OUFEMDAyMDYxODAgLyogRGF0ZUNvbnZlcnNpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQyMTIwMjI5MEFENDMx
MEMwMEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5oICovOyB9OwogCQk0NTE1MzlCOTEyREM5OTQ1
MDBFRjdBQzQgLyogWWFyci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDUxNTM5QjgxMkRDOTk0NTAwRUY3QUM0IC8qIFlhcnIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1RDUzNzI2RjBFMUM1NDg4MDAy
MUU1NDkgLyogVHJhY2luZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUQ1MzcyNkUwRTFDNTQ4ODAwMjFFNTQ5IC8qIFRyYWNpbmcuaCAqLzsgfTsKQEAg
LTkzMyw2ICs5MzUsOCBAQAogCQkxQzkwNTE0NTBCQTlFOEE3MDA4MUU5RDAgLyogQmFzZS54Y2Nv
bmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBCYXNlLnhjY29uZmlnOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0FBOEI0QTBEMzJDMzlBMDA0MUJDRkYgLyogSmF2
YVNjcmlwdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKYXZhU2NyaXB0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQUE4QjRCMEQzMkMzOUEwMDQxQkNGRiAv
KiBKYXZhU2NyaXB0Q29yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKYXZh
U2NyaXB0Q29yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNjAwQjVBNDE1MkJB
QUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNTdHJpbmdKb2luZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkyNjAwQjVBNTE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTdHJpbmdKb2luZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ5MDk3RUUwRjhGODFCNTAwNzZBMzI3IC8qIEZlYXR1cmVE
ZWZpbmVzLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEZlYXR1cmVE
ZWZpbmVzLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NTE1MzlCODEy
REM5OTQ1MDBFRjdBQzQgLyogWWFyci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBZYXJyLmg7IHBhdGggPSB5YXJyL1lhcnIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDVFMTJEODgwNkE0OUIwRjAwRTlERjg0IC8qIGpzYy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBqc2MuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDQ7IH07CkBAIC0xODQwLDYgKzE4NDQsOCBAQAogCQkJ
CUJDMDJFOUI2MEUxODQyRkEwMDBGOTI5NyAvKiBKU1N0cmluZy5jcHAgKi8sCiAJCQkJRjY5MkE4
NjIwMjU1NTk3RDAxRkY2MEY3IC8qIEpTU3RyaW5nLmggKi8sCiAJCQkJODZFODU1MzgxMTFCOTk2
ODAwMUFGNTFFIC8qIEpTU3RyaW5nQnVpbGRlci5oICovLAorCQkJCTI2MDBCNUE0MTUyQkFBQTcw
MDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5jcHAgKi8sCisJCQkJMjYwMEI1QTUxNTJCQUFBNzAw
OTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmggKi8sCiAJCQkJMTRBQkI0NTQwOTlDMkEwRjAwRTJB
MjRGIC8qIEpTVHlwZS5oICovLAogCQkJCTY1MDdEMjk3MEU4NzFFNEEwMEQ3RDg5NiAvKiBKU1R5
cGVJbmZvLmggKi8sCiAJCQkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpTVmFsdWUuY3Bw
ICovLApAQCAtMjMyNCw2ICsyMzMwLDcgQEAKIAkJCQlCQzE4QzQyNjBFMTZGNUNEMDBCMzQ0NjAg
LyogSlNSZXRhaW5QdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI3MEUxNkY1Q0QwMEIz
NDQ2MCAvKiBKU1N0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFODU1MzkxMTFCOTk2ODAw
MUFGNTFFIC8qIEpTU3RyaW5nQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjYwMEI1QTcx
NTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQyODBFMTZGNUNEMDBCMzQ0NjAgLyogSlNTdHJpbmdSZWYuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDI5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZ1JlZkNGLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzQyQTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNUeXBlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTI5NzEsNiArMjk3OCw3IEBACiAJCQkJQTcyN0ZGNkIwREEzMDkyMjAwRTU0OEQ3
IC8qIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQwNTY2
RDExMDdFQzI2NzAwNURCQzhEIC8qIEpTU3RhdGljU2NvcGVPYmplY3QuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ3RjM5RDUxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTU3RyaW5nLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTI2MDBCNUE2MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDgyQjc0RTBBNDMwMzI4MDA1MTdDRkMgLyogSlNTdHJp
bmdSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ2QUFCMzgwQjY2QTk0NDAwRTU1RjE2IC8q
IEpTU3RyaW5nUmVmQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5RDYxMDdFQzM3NjAw
NDI3QTQ4IC8qIEpTVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKaW5kZXggYWU1YjljNjIzNWMyMzcw
ZjVhYTYzODFhMWZmZjQwMjcwMWJjYjA1OS4uODE4ODk1YzcxNjNmNjQ3ZDA2ODUxNzYxNzU1YTJi
MDk5MWYzYzlmNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
UHJvdG90eXBlLmNwcApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgog
I2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSklULmgiCi0jaW5jbHVkZSAiSlNT
dHJpbmdCdWlsZGVyLmgiCisjaW5jbHVkZSAiSlNTdHJpbmdKb2luZXIuaCIKICNpbmNsdWRlICJM
b29rdXAuaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKICNpbmNsdWRlICJPcGVyYXRp
b25zLmgiCkBAIC0zNDMsMTEgKzM0Myw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgaWYgKEpT
VmFsdWUgZWFybHlSZXR1cm5WYWx1ZSA9IGNoZWNrZXIuZWFybHlSZXR1cm5WYWx1ZSgpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGVhcmx5UmV0dXJuVmFsdWUpOwogCi0gICAgSlNT
dHJpbmdCdWlsZGVyIHN0ckJ1ZmZlcjsKKyAgICBVU3RyaW5nIHNlcGFyYXRvcigiLCIpOworICAg
IEpTU3RyaW5nSm9pbmVyIHN0cmluZ0pvaW5lcihzZXBhcmF0b3IsIGxlbmd0aCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBrID0gMDsgayA8IGxlbmd0aDsgaysrKSB7Ci0gICAgICAgIGlmIChrID49IDEp
Ci0gICAgICAgICAgICBzdHJCdWZmZXIuYXBwZW5kKCcsJyk7Ci0KICAgICAgICAgSlNWYWx1ZSBl
bGVtZW50ID0gdGhpc09iai0+Z2V0KGV4ZWMsIGspOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwpAQCAtMzY1LDExICszNjMsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAg
ICAgICBzdHIgPSBlbGVtZW50LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgICAgICAgICAgc3RyQnVmZmVyLmFwcGVu
ZChzdHIpOworICAgICAgICAgICAgc3RyaW5nSm9pbmVyLmFwcGVuZChzdHIpOwogICAgICAgICB9
CiAgICAgfQogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdHJCdWZmZXIuYnVpbGQoZXhl
YykpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3RyaW5nSm9pbmVyLmJ1aWxkKGV4ZWMp
KTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0pvaW4o
RXhlY1N0YXRlKiBleGVjKQpAQCAtMzgzLDYwICszODEsMzkgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0pvaW4oRXhlY1N0YXRlKiBleGVjKQogICAgIGlmIChK
U1ZhbHVlIGVhcmx5UmV0dXJuVmFsdWUgPSBjaGVja2VyLmVhcmx5UmV0dXJuVmFsdWUoKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShlYXJseVJldHVyblZhbHVlKTsKIAotICAgIEpT
U3RyaW5nQnVpbGRlciBzdHJCdWZmZXI7Ci0KICAgICBVU3RyaW5nIHNlcGFyYXRvcjsKICAgICBp
ZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHNlcGFyYXRvciA9
IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICBpZiAo
c2VwYXJhdG9yLmlzTnVsbCgpKQorICAgICAgICBzZXBhcmF0b3IgPSBVU3RyaW5nKCIsIik7CisK
KyAgICBKU1N0cmluZ0pvaW5lciBzdHJpbmdKb2luZXIoc2VwYXJhdG9yLCBsZW5ndGgpOwogCiAg
ICAgdW5zaWduZWQgayA9IDA7CiAgICAgaWYgKGlzSlNBcnJheSh0aGlzT2JqKSkgewogICAgICAg
ICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7CiAKLSAgICAgICAgaWYgKGxlbmd0
aCkgewotICAgICAgICAgICAgaWYgKCFhcnJheS0+Y2FuR2V0SW5kZXgoaykpIAotICAgICAgICAg
ICAgICAgIGdvdG8gc2tpcEZpcnN0TG9vcDsKKyAgICAgICAgZm9yICg7IGsgPCBsZW5ndGg7IGsr
KykgeworICAgICAgICAgICAgaWYgKCFhcnJheS0+Y2FuR2V0SW5kZXgoaykpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisKICAgICAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGFycmF5LT5nZXRJ
bmRleChrKTsKICAgICAgICAgICAgIGlmICghZWxlbWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKQot
ICAgICAgICAgICAgICAgIHN0ckJ1ZmZlci5hcHBlbmQoZWxlbWVudC50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYykpOwotICAgICAgICAgICAgaysrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KHNlcGFyYXRvci5pc051bGwoKSkgewotICAgICAgICAgICAgZm9yICg7IGsgPCBsZW5ndGg7IGsr
KykgewotICAgICAgICAgICAgICAgIGlmICghYXJyYXktPmNhbkdldEluZGV4KGspKQotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBzdHJCdWZmZXIuYXBwZW5kKCcs
Jyk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gYXJyYXktPmdldEluZGV4KGsp
OwotICAgICAgICAgICAgICAgIGlmICghZWxlbWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAg
ICAgICAgICAgICAgICAgICBzdHJCdWZmZXIuYXBwZW5kKGVsZW1lbnQudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGZvciAoOyBrIDwgbGVuZ3RoOyBrKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoIWFycmF5
LT5jYW5HZXRJbmRleChrKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgc3RyQnVmZmVyLmFwcGVuZChzZXBhcmF0b3IpOwotICAgICAgICAgICAgICAgIEpTVmFs
dWUgZWxlbWVudCA9IGFycmF5LT5nZXRJbmRleChrKTsKLSAgICAgICAgICAgICAgICBpZiAoIWVs
ZW1lbnQuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgICAgICAgICAgc3RyQnVmZmVy
LmFwcGVuZChlbGVtZW50LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gc2tpcEZpcnN0TG9vcDoKLSAgICBmb3IgKDsgayA8IGxl
bmd0aDsgaysrKSB7Ci0gICAgICAgIGlmIChrID49IDEpIHsKLSAgICAgICAgICAgIGlmIChzZXBh
cmF0b3IuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgc3RyQnVmZmVyLmFwcGVuZCgnLCcpOwor
ICAgICAgICAgICAgICAgIHN0cmluZ0pvaW5lci5hcHBlbmQoZWxlbWVudC50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYykpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0ckJ1
ZmZlci5hcHBlbmQoc2VwYXJhdG9yKTsKKyAgICAgICAgICAgICAgICBzdHJpbmdKb2luZXIuYXBw
ZW5kKFVTdHJpbmcoKSk7CiAgICAgICAgIH0KKyAgICB9CiAKKyAgICBmb3IgKDsgayA8IGxlbmd0
aDsgaysrKSB7CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNPYmotPmdldChleGVjLCBr
KTsKICAgICAgICAgaWYgKCFlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAg
ICBzdHJCdWZmZXIuYXBwZW5kKGVsZW1lbnQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsK
KyAgICAgICAgICAgIHN0cmluZ0pvaW5lci5hcHBlbmQoZWxlbWVudC50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYykpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzdHJpbmdKb2luZXIuYXBw
ZW5kKFVTdHJpbmcoKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdHJC
dWZmZXIuYnVpbGQoZXhlYykpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3RyaW5nSm9p
bmVyLmJ1aWxkKGV4ZWMpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvRnVuY0NvbmNhdChFeGVjU3RhdGUqIGV4ZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0pvaW5lci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N0cmluZ0pvaW5lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzAwNDVhNzE3YjZk
Mzk0OTRhNzJjMjllZWQwNzg0YjNhZDRlZTMxNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcApAQCAtMCwwICsxLDE0MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1N0cmluZ0pvaW5lci5oIgorCisjaW5jbHVkZSAiRXhj
ZXB0aW9uSGVscGVycy5oIgorI2luY2x1ZGUgIkpTU3RyaW5nLmgiCisjaW5jbHVkZSAiU2NvcGVD
aGFpbi5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KKworCituYW1lc3BhY2Ug
SlNDIHsKKworLy8gVGhlIGRlc3RpbmF0aW9uIGlzIDE2Yml0cywgYXQgbGVhc3Qgb25lIHN0cmlu
ZyBpcyAxNiBiaXRzLgorc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZFN0cmluZ1RvRGF0YShVQ2hh
ciomIGRhdGEsIGNvbnN0IFVTdHJpbmcmIHN0cmluZykKK3sKKyAgICBpZiAoc3RyaW5nLmlzTnVs
bCgpKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVu
Z3RoKCk7CisgICAgY29uc3QgU3RyaW5nSW1wbCogc3RyaW5nSW1wbCA9IHN0cmluZy5pbXBsKCk7
CisKKyAgICBpZiAoc3RyaW5nSW1wbC0+aXM4Qml0KCkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAqZGF0YSA9IHN0cmluZ0lt
cGwtPmNoYXJhY3RlcnM4KClbaV07CisgICAgICAgICAgICArK2RhdGE7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgICpkYXRhID0gc3RyaW5nSW1wbC0+Y2hhcmFjdGVyczE2KClbaV07Cisg
ICAgICAgICAgICArK2RhdGE7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vIElmIHRoZSBkZXN0
aW5hdGlvbiBpcyA4Yml0cywgd2Uga25vdyBldmVyeSBzdHJpbmcgaGFzIHRvIGJlIDhiaXQuCitz
dGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kU3RyaW5nVG9EYXRhKExDaGFyKiYgZGF0YSwgY29uc3Qg
VVN0cmluZyYgc3RyaW5nKQoreworICAgIGlmIChzdHJpbmcuaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBBU1NFUlQoc3RyaW5nLmlzOEJpdCgpKTsKKworICAgIHVuc2lnbmVkIGxlbmd0
aCA9IHN0cmluZy5sZW5ndGgoKTsKKyAgICBjb25zdCBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsID0g
c3RyaW5nLmltcGwoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkgeworICAgICAgICAqZGF0YSA9IHN0cmluZ0ltcGwtPmNoYXJhY3RlcnM4KClbaV07CisgICAg
ICAgICsrZGF0YTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
CitzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gam9pblN0cmluZ3MoVmVjdG9y
PFVTdHJpbmc+JiBzdHJpbmdzLCBjb25zdCBVU3RyaW5nJiBzZXBhcmF0b3IsIHVuc2lnbmVkIG91
dHB1dExlbmd0aCkKK3sKKyAgICBBU1NFUlQob3V0cHV0TGVuZ3RoKTsKKworICAgIENoYXJhY3Rl
clR5cGUqIGRhdGE7CisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG91dHB1dFN0cmluZ0ltcGwgPSBT
dHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKG91dHB1dExlbmd0aCwgZGF0YSk7Cisg
ICAgaWYgKCFvdXRwdXRTdHJpbmdJbXBsKQorICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPigpOworCisgICAgY29uc3QgVVN0cmluZyBmaXJzdFN0cmluZyA9IHN0cmluZ3MuYXQo
MCk7CisgICAgYXBwZW5kU3RyaW5nVG9EYXRhKGRhdGEsIGZpcnN0U3RyaW5nKTsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAxOyBpIDwgc3RyaW5ncy5zaXplKCk7ICsraSkgeworICAgICAgICBhcHBl
bmRTdHJpbmdUb0RhdGEoZGF0YSwgc2VwYXJhdG9yKTsKKyAgICAgICAgVVN0cmluZyYgc3RyaW5n
ID0gc3RyaW5ncy5hdChpKTsKKyAgICAgICAgYXBwZW5kU3RyaW5nVG9EYXRhKGRhdGEsIHN0cmlu
Zyk7CisgICAgfQorCisgICAgQVNTRVJUKGRhdGEgPT0gKG91dHB1dFN0cmluZ0ltcGwtPmdldENo
YXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4oKSArIG91dHB1dFN0cmluZ0ltcGwtPmxlbmd0aCgpKSk7
CisgICAgcmV0dXJuIG91dHB1dFN0cmluZ0ltcGwucmVsZWFzZSgpOworfQorCitKU1ZhbHVlIEpT
U3RyaW5nSm9pbmVyOjpidWlsZChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKCFtX2lzVmFs
aWQpCisgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisKKyAgICBp
ZiAoIW1fc3RyaW5ncy5zaXplKCkpCisgICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMp
OworCisgICAgc2l6ZV90IHNlcGFyYXRvckxlbmd0aCA9IG1fc2VwYXJhdG9yLmxlbmd0aCgpOwor
ICAgIC8vIEZJWE1FOiBhZGQgc3BlY2lhbCBjYXNlcyBvZiBqb2luU3RyaW5ncygpIGZvciAoc2Vw
YXJhdG9yTGVuZ3RoID09IDApIGFuZCAoc2VwYXJhdG9yTGVuZ3RoID09IDEpLgorICAgIEFTU0VS
VChtX3N0cmluZ3Muc2l6ZSgpID4gMCk7CisgICAgc2l6ZV90IHRvdGFsU2VwYXJhY3RvcnNMZW5n
dGggPSBzZXBhcmF0b3JMZW5ndGggKiAobV9zdHJpbmdzLnNpemUoKSAtIDEpOworCisgICAgc2l6
ZV90IGN1bXVsYXRlZFN0cmluZ3NMZW5ndGggPSAwOworICAgIHNpemVfdCBpczhCaXRzID0gdHJ1
ZTsKKworICAgIGlzOEJpdHMgPSBpczhCaXRzICYmIG1fc2VwYXJhdG9yLmlzOEJpdCgpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdHJpbmdzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGNvbnN0IFVTdHJpbmcmIHN0cmluZyA9IG1fc3RyaW5ncy5hdChpKTsKKyAgICAgICAgaWYgKHN0
cmluZy5pc051bGwoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjdW11bGF0ZWRT
dHJpbmdzTGVuZ3RoICs9IHN0cmluZy5sZW5ndGgoKTsKKyAgICAgICAgaXM4Qml0cyA9IGlzOEJp
dHMgJiYgc3RyaW5nLmlzOEJpdCgpOworICAgIH0KKworICAgIHNpemVfdCBvdXRwdXRTdHJpbmdT
aXplID0gdG90YWxTZXBhcmFjdG9yc0xlbmd0aCArIGN1bXVsYXRlZFN0cmluZ3NMZW5ndGg7CisK
KyAgICBpZiAoIW91dHB1dFN0cmluZ1NpemUpCisgICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5n
KGV4ZWMpOworCisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG91dHB1dFN0cmluZ0ltcGw7CisgICAg
aWYgKGlzOEJpdHMpCisgICAgICAgIG91dHB1dFN0cmluZ0ltcGwgPSBqb2luU3RyaW5nczxMQ2hh
cj4obV9zdHJpbmdzLCBtX3NlcGFyYXRvciwgb3V0cHV0U3RyaW5nU2l6ZSk7CisgICAgZWxzZQor
ICAgICAgICBvdXRwdXRTdHJpbmdJbXBsID0gam9pblN0cmluZ3M8VUNoYXI+KG1fc3RyaW5ncywg
bV9zZXBhcmF0b3IsIG91dHB1dFN0cmluZ1NpemUpOworCisgICAgaWYgKCFvdXRwdXRTdHJpbmdJ
bXBsKQorICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworCisgICAg
cmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBvdXRwdXRTdHJpbmdJ
bXBsLnJlbGVhc2UoKSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZ0pvaW5lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1M2I3Mzc1ZGI3YTI5Y2JmYTA4MDdiZjM0
MTU3NWRhNmEzOTM3YTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZ0pvaW5lci5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEpTU3RyaW5nSm9pbmVyX2gK
KyNkZWZpbmUgSlNTdHJpbmdKb2luZXJfaAorCisjaW5jbHVkZSAiSlNWYWx1ZS5oIgorI2luY2x1
ZGUgIlVTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBFeGVjU3RhdGU7CisKKworY2xhc3MgSlNTdHJpbmdKb2luZXIgeworcHVibGlj
OgorICAgIEpTU3RyaW5nSm9pbmVyKGNvbnN0IFVTdHJpbmcmIHNlcGFyYXRvciwgc2l6ZV90IHN0
cmluZ0NvdW50KTsKKworICAgIHZvaWQgYXBwZW5kKGNvbnN0IFVTdHJpbmcmKTsKKyAgICBKU1Zh
bHVlIGJ1aWxkKEV4ZWNTdGF0ZSopOworCitwcml2YXRlOgorICAgIGJvb2wgbV9pc1ZhbGlkOwor
ICAgIFVTdHJpbmcgbV9zZXBhcmF0b3I7CisgICAgVmVjdG9yPFVTdHJpbmc+IG1fc3RyaW5nczsK
K307CisKK2lubGluZSBKU1N0cmluZ0pvaW5lcjo6SlNTdHJpbmdKb2luZXIoY29uc3QgVVN0cmlu
ZyYgc2VwYXJhdG9yLCBzaXplX3Qgc3RyaW5nQ291bnQpCisgICAgOiBtX2lzVmFsaWQodHJ1ZSkK
KyAgICAsIG1fc2VwYXJhdG9yKHNlcGFyYXRvcikKK3sKKyAgICBtX2lzVmFsaWQgPSBtX3N0cmlu
Z3MudHJ5UmVzZXJ2ZUNhcGFjaXR5KHN0cmluZ0NvdW50KTsKK30KKworaW5saW5lIHZvaWQgSlNT
dHJpbmdKb2luZXI6OmFwcGVuZChjb25zdCBVU3RyaW5nJiBzdHIpCit7CisgICAgbV9pc1ZhbGlk
ID0gbV9zdHJpbmdzLnRyeUFwcGVuZCgmc3RyLCAxKTsKK30KKworfQorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135638</attachid>
            <date>2012-04-04 11:22:56 -0700</date>
            <delta_ts>2012-04-04 14:04:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-83180-20120404112255.patch</filename>
            <type>text/plain</type>
            <size>21089</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzMTE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MmE2OGU1ZjkyZDIzNTFiOGQ4MDk1NDhhMjYwYzFmMDc1YjA2MDFkLi43YmYxMDkzNDJjOWY4MDNj
ZGJjYmZkZWMwNzk4YmRjOGM0NzUwMjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MSBAQAorMjAxMi0wNC0wNCAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBNYWtlIHNvbWV0aGluZyBmYXN0ZXIgdGhhbiBKU1N0cmluZ0J1aWxk
ZXIgZm9yIGpvaW5pbmcgYW4gYXJyYXkgb2YgSlNWYWx1ZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODMxODAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZCB0aGUgY2xhc3MgSlNTdHJp
bmdKb2luZXIgb3B0aW1pemVkIGZvciBqb2luKCkgb3BlcmF0aW9ucy4KKworICAgICAgICBUaGlz
IGNsYXNzIG1ha2VzIHN0cmljdGVyIGNvbnN0cmFpbnRzIHRoYW4gSlNTdHJpbmdCdWlsZGVyIGlu
IG9yZGVyIGF2b2lkCisgICAgICAgIG1lbW9yeSBhbGxvY2F0aW9ucy4KKworICAgICAgICBJbiB0
aGUgYmVzdCBjYXNlLCB0aGUgY2xhc3MgYWxsb2NhdGUgbWVtb3J5IG9ubHkgdHdpY2U6CisgICAg
ICAgIC1BbGxvY2F0ZSBhbiBhcnJheSB0byBrZWVwIGEgbGlzdCBvZiBVU3RyaW5nIHRvIGpvaW4u
CisgICAgICAgIC1BbGxvY2F0ZSB0aGUgZmluYWwgc3RyaW5nLgorCisgICAgICAgIFdlIGFsc28g
YXZvaWQgdGhlIGNvbnZlcnNpb24gZnJvbSA4Yml0cyBzdHJpbmdzIHRvIDE2Yml0cyBzdHJpbmdz
IHNpbmNlCisgICAgICAgIHRoZXkgYXJlIGNvc3RseSBhbmQgdW5saWtseSB0byBoZWxwIGZvciBz
dWJzZXF1ZW50IGNhbGxzLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJv
ai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2o6CisgICAgICAgICogSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUYXJnZXQucHJp
OgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjph
cnJheVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1
bmNKb2luKToKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjphcHBlbmRTdHJpbmdUb0RhdGEpOgorICAgICAg
ICAoSlNDOjpqb2luU3RyaW5ncyk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nSm9pbmVyOjpidWls
ZCk6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZ0pvaW5lci5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQyk6CisgICAgICAgIChKU1N0cmluZ0pvaW5lcik6CisgICAgICAgIChKU0M6OkpTU3RyaW5n
Sm9pbmVyOjpKU1N0cmluZ0pvaW5lcik6CisgICAgICAgIChKU0M6OkpTU3RyaW5nSm9pbmVyOjph
cHBlbmQpOgorCiAyMDEyLTA0LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAK
ICAgICAgICAgT2ZmbGluZWFzbSBBUk0gYmFja2VuZCB1c2VzIHRoZSB3cm9uZyBtbmVtb25pYyBm
b3IgbXVsdGlwbHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5k
ZXggMDEyYTgzYzczODY5ODgwYjAxZGJlMTk2YmIxYTU4ZjMyMmQzZjg1OC4uM2UzMWRhOTFmYmE2
NzVhMzgwNGVjYjVhMDgzYmQ5N2ViMzJmMDc3OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQ3NCw2ICs0NzQsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2Jq
ZWN0LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9i
amVjdC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0J1aWxkZXIu
aCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwIFwK
KwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0pvaW5lci5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVHlwZS5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5neXBpIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkK
aW5kZXggYzA3YjM5MTdiZjYzOTE4Y2Y4ZjljODUwMDMwNDA2ZmI4OTFjMGQ1Ny4uMzg2NTEyNTgx
MzU2MDQxZTE4MGM2MjcwNTc3NDllYjNlN2YyYjA1NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLmd5cGkKQEAgLTM4NSw2ICszODUsOCBAQAogICAgICAgICAgICAgJ3J1
bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5oJywKICAgICAgICAgICAgICdydW50aW1lL0pTU3Ry
aW5nLmNwcCcsCiAgICAgICAgICAgICAncnVudGltZS9KU1N0cmluZ0J1aWxkZXIuaCcsCisgICAg
ICAgICAgICAncnVudGltZS9KU1N0cmluZ0pvaW5lci5jcHAnLAorICAgICAgICAgICAgJ3J1bnRp
bWUvSlNTdHJpbmdKb2luZXIuaCcsCiAgICAgICAgICAgICAncnVudGltZS9KU1ZhbHVlLmNwcCcs
CiAgICAgICAgICAgICAncnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmNwcCcsCiAgICAgICAgICAg
ICAncnVudGltZS9KU1dyYXBwZXJPYmplY3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmNwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKaW5kZXggNmIzNTlmNDdlYmYw
ZjcxOTE1YjE1MWMyYjRkZDI2MzE0ODQxMDRjMy4uYmY4OTliZGYwNDk0NGYwODFmZWUyODVlZGFk
ZWZjY2ZhMjE0NzJkMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKQEAgLTg5Nyw2ICs4OTcsMTQgQEAKIAkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcSlNTdHJpbmcuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CisgICAg
ICAgICAgICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcSlNTdHJpbmdKb2luZXIuY3BwIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgICAgICA8L0Zp
bGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcSlNTdHJpbmdKb2luZXIuaCIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgICAgICAg
ICAgPC9GaWxlPgogCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcSlNU
eXBlLmgiCiAJCQkJPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzZWQxNDk1Mjkx
OTdiZjViNTYwMzI3Mjk3Mzg5MTk5MmYwMjM0OWE4Li5mZjk1NzNmYTY1NjEzYmI4ZmY4YzE4YzZi
YzM5NmRlYWRiMGM5NzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzE0LDYg
KzMxNCw4IEBACiAJCTE0RDJGM0RCMTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMkYzRDkxMzlG
NEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRFOUQxN0IxMDdFQzQ2OTAwNEREQTIxIC8qIEpTR2xv
YmFsT2JqZWN0RnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDNzU2RkM2MEUyMDMxQjIwMERFN0QxMiAvKiBKU0dsb2JhbE9iamVjdEZ1
bmN0aW9ucy5jcHAgKi87IH07CiAJCTE0Rjk3NDQ3MTM4Qzg1M0UwMERBMUM2NyAvKiBIZWFwUm9v
dFZpc2l0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0Rjk3NDQ2MTM4Qzg1M0UwMERBMUM2NyAvKiBIZWFwUm9vdFZpc2l0b3IuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkyNjAwQjVBNjE1MkJBQUE3
MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjYwMEI1QTQxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5n
Sm9pbmVyLmNwcCAqLzsgfTsKKwkJMjYwMEI1QTcxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5n
Sm9pbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
NjAwQjVBNTE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCAqLzsgfTsKIAkJNDEz
NTlDRjMwRkREODlBRDAwMjA2MTgwIC8qIERhdGVDb252ZXJzaW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMjEyMDIyOTBBRDQzMTBDMDBFRDc5QjYg
LyogRGF0ZUNvbnZlcnNpb24uaCAqLzsgfTsKIAkJNDUxNTM5QjkxMkRDOTk0NTAwRUY3QUM0IC8q
IFlhcnIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1
MTUzOUI4MTJEQzk5NDUwMEVGN0FDNCAvKiBZYXJyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUQ1MzcyNkYwRTFDNTQ4ODAwMjFFNTQ5IC8qIFRy
YWNpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVE
NTM3MjZFMEUxQzU0ODgwMDIxRTU0OSAvKiBUcmFjaW5nLmggKi87IH07CkBAIC05MzMsNiArOTM1
LDggQEAKIAkJMUM5MDUxNDUwQkE5RThBNzAwODFFOUQwIC8qIEJhc2UueGNjb25maWcgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gQmFzZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUNBQThCNEEwRDMyQzM5QTAwNDFCQ0ZGIC8qIEphdmFTY3JpcHQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSmF2YVNjcmlwdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQ0FBOEI0QjBEMzJDMzlBMDA0MUJDRkYgLyogSmF2YVNjcmlw
dENvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSmF2YVNjcmlwdENvcmUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjYwMEI1QTQxNTJCQUFBNzAwOTFFRTVG
IC8qIEpTU3RyaW5nSm9pbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTU3RyaW5nSm9pbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjYw
MEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3RyaW5nSm9pbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQ0OTA5N0VFMEY4RjgxQjUwMDc2QTMyNyAvKiBGZWF0dXJlRGVmaW5lcy54Y2Nv
bmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBGZWF0dXJlRGVmaW5lcy54Y2Nv
bmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDUxNTM5QjgxMkRDOTk0NTAwRUY3
QUM0IC8qIFlhcnIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gWWFyci5oOyBw
YXRoID0geWFyci9ZYXJyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ1RTEyRDg4
MDZBNDlCMEYwMEU5REY4NCAvKiBqc2MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0ganNjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgdGFiV2lkdGggPSA0OyB9OwpAQCAtMTg0MCw2ICsxODQ0LDggQEAKIAkJCQlCQzAyRTlCNjBF
MTg0MkZBMDAwRjkyOTcgLyogSlNTdHJpbmcuY3BwICovLAogCQkJCUY2OTJBODYyMDI1NTU5N0Qw
MUZGNjBGNyAvKiBKU1N0cmluZy5oICovLAogCQkJCTg2RTg1NTM4MTExQjk5NjgwMDFBRjUxRSAv
KiBKU1N0cmluZ0J1aWxkZXIuaCAqLywKKwkJCQkyNjAwQjVBNDE1MkJBQUE3MDA5MUVFNUYgLyog
SlNTdHJpbmdKb2luZXIuY3BwICovLAorCQkJCTI2MDBCNUE1MTUyQkFBQTcwMDkxRUU1RiAvKiBK
U1N0cmluZ0pvaW5lci5oICovLAogCQkJCTE0QUJCNDU0MDk5QzJBMEYwMEUyQTI0RiAvKiBKU1R5
cGUuaCAqLywKIAkJCQk2NTA3RDI5NzBFODcxRTRBMDBEN0Q4OTYgLyogSlNUeXBlSW5mby5oICov
LAogCQkJCUY2OTJBODg3MDI1NTU5N0QwMUZGNjBGNyAvKiBKU1ZhbHVlLmNwcCAqLywKQEAgLTIz
MjQsNiArMjMzMCw3IEBACiAJCQkJQkMxOEM0MjYwRTE2RjVDRDAwQjM0NDYwIC8qIEpTUmV0YWlu
UHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNT
dHJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTg1NTM5MTExQjk5NjgwMDFBRjUxRSAvKiBK
U1N0cmluZ0J1aWxkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTI2MDBCNUE3MTUyQkFBQTcwMDkx
RUU1RiAvKiBKU1N0cmluZ0pvaW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjgwRTE2
RjVDRDAwQjM0NDYwIC8qIEpTU3RyaW5nUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQy
OTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNTdHJpbmdSZWZDRi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM0MkEwRTE2RjVDRDAwQjM0NDYwIC8qIEpTVHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
OTcxLDYgKzI5NzgsNyBAQAogCQkJCUE3MjdGRjZCMERBMzA5MjIwMEU1NDhENyAvKiBKU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MDU2NkQxMTA3RUMyNjcw
MDVEQkM4RCAvKiBKU1N0YXRpY1Njb3BlT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
N0YzOUQ1MTA3RUMzNzYwMDQyN0E0OCAvKiBKU1N0cmluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkyNjAwQjVBNjE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ4MkI3NEUwQTQzMDMyODAwNTE3Q0ZDIC8qIEpTU3RyaW5nUmVmLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0NkFBQjM4MEI2NkE5NDQwMEU1NUYxNiAvKiBKU1N0cmluZ1Jl
ZkNGLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQ2MTA3RUMzNzYwMDQyN0E0OCAvKiBK
U1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQppbmRleCAy
YmM4MDg5NGM3MWU3YjZlODRiZTkwODExMjdjNzExN2ZmNzE5YmVkLi44YWM0NjA0YWEzMWY2NTQ4
NmM5ZmFmZmI4Y2QzZTczMGVjZjU1YTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQpAQCAt
MTg3LDYgKzE4Nyw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvci5jcHAgXAogICAgIHJ1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHAgXAogICAg
IHJ1bnRpbWUvSlNTdHJpbmcuY3BwIFwKKyAgICBydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcCBc
CiAgICAgcnVudGltZS9KU1ZhbHVlLmNwcCBcCiAgICAgcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0
LmNwcCBcCiAgICAgcnVudGltZS9KU1dyYXBwZXJPYmplY3QuY3BwIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAppbmRleCBhZTViOWM2MjM1
YzIzNzBmNWFhNjM4MWExZmZmNDAyNzAxYmNiMDU5Li44MTg4OTVjNzE2M2Y2NDdkMDY4NTE3NjE3
NTVhMmIwOTkxZjNjOWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheVByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlQcm90b3R5cGUuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKSVQuaCIKLSNpbmNsdWRl
ICJKU1N0cmluZ0J1aWxkZXIuaCIKKyNpbmNsdWRlICJKU1N0cmluZ0pvaW5lci5oIgogI2luY2x1
ZGUgIkxvb2t1cC5oIgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIk9w
ZXJhdGlvbnMuaCIKQEAgLTM0MywxMSArMzQzLDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKICAgICBp
ZiAoSlNWYWx1ZSBlYXJseVJldHVyblZhbHVlID0gY2hlY2tlci5lYXJseVJldHVyblZhbHVlKCkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZWFybHlSZXR1cm5WYWx1ZSk7CiAKLSAg
ICBKU1N0cmluZ0J1aWxkZXIgc3RyQnVmZmVyOworICAgIFVTdHJpbmcgc2VwYXJhdG9yKCIsIik7
CisgICAgSlNTdHJpbmdKb2luZXIgc3RyaW5nSm9pbmVyKHNlcGFyYXRvciwgbGVuZ3RoKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgbGVuZ3RoOyBrKyspIHsKLSAgICAgICAgaWYgKGsg
Pj0gMSkKLSAgICAgICAgICAgIHN0ckJ1ZmZlci5hcHBlbmQoJywnKTsKLQogICAgICAgICBKU1Zh
bHVlIGVsZW1lbnQgPSB0aGlzT2JqLT5nZXQoZXhlYywgayk7CiAgICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CkBAIC0zNjUsMTEgKzM2MywxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogICAgICAg
ICAgICAgICAgIHN0ciA9IGVsZW1lbnQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAg
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgICAgICBzdHJCdWZmZXIu
YXBwZW5kKHN0cik7CisgICAgICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKHN0cik7CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN0ckJ1ZmZlci5idWls
ZChleGVjKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdHJpbmdKb2luZXIuYnVpbGQo
ZXhlYykpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5j
Sm9pbihFeGVjU3RhdGUqIGV4ZWMpCkBAIC0zODMsNjAgKzM4MSwzOSBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jSm9pbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAg
aWYgKEpTVmFsdWUgZWFybHlSZXR1cm5WYWx1ZSA9IGNoZWNrZXIuZWFybHlSZXR1cm5WYWx1ZSgp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGVhcmx5UmV0dXJuVmFsdWUpOwogCi0g
ICAgSlNTdHJpbmdCdWlsZGVyIHN0ckJ1ZmZlcjsKLQogICAgIFVTdHJpbmcgc2VwYXJhdG9yOwog
ICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSkKICAgICAgICAgc2VwYXJh
dG9yID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAg
IGlmIChzZXBhcmF0b3IuaXNOdWxsKCkpCisgICAgICAgIHNlcGFyYXRvciA9IFVTdHJpbmcoIiwi
KTsKKworICAgIEpTU3RyaW5nSm9pbmVyIHN0cmluZ0pvaW5lcihzZXBhcmF0b3IsIGxlbmd0aCk7
CiAKICAgICB1bnNpZ25lZCBrID0gMDsKICAgICBpZiAoaXNKU0FycmF5KHRoaXNPYmopKSB7CiAg
ICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKIAotICAgICAgICBpZiAo
bGVuZ3RoKSB7Ci0gICAgICAgICAgICBpZiAoIWFycmF5LT5jYW5HZXRJbmRleChrKSkgCi0gICAg
ICAgICAgICAgICAgZ290byBza2lwRmlyc3RMb29wOworICAgICAgICBmb3IgKDsgayA8IGxlbmd0
aDsgaysrKSB7CisgICAgICAgICAgICBpZiAoIWFycmF5LT5jYW5HZXRJbmRleChrKSkKKyAgICAg
ICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gYXJyYXkt
PmdldEluZGV4KGspOwogICAgICAgICAgICAgaWYgKCFlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxs
KCkpCi0gICAgICAgICAgICAgICAgc3RyQnVmZmVyLmFwcGVuZChlbGVtZW50LnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgICAgICAgICBrKys7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoc2VwYXJhdG9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBmb3IgKDsgayA8IGxlbmd0
aDsgaysrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFhcnJheS0+Y2FuR2V0SW5kZXgoaykpCi0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIHN0ckJ1ZmZlci5hcHBl
bmQoJywnKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBhcnJheS0+Z2V0SW5k
ZXgoayk7Ci0gICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkp
Ci0gICAgICAgICAgICAgICAgICAgIHN0ckJ1ZmZlci5hcHBlbmQoZWxlbWVudC50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYykpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgZm9yICg7IGsgPCBsZW5ndGg7IGsrKykgewotICAgICAgICAgICAgICAgIGlmICgh
YXJyYXktPmNhbkdldEluZGV4KGspKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICBzdHJCdWZmZXIuYXBwZW5kKHNlcGFyYXRvcik7Ci0gICAgICAgICAgICAgICAg
SlNWYWx1ZSBlbGVtZW50ID0gYXJyYXktPmdldEluZGV4KGspOwotICAgICAgICAgICAgICAgIGlm
ICghZWxlbWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgICAgICAgICBzdHJC
dWZmZXIuYXBwZW5kKGVsZW1lbnQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSBza2lwRmlyc3RMb29wOgotICAgIGZvciAoOyBr
IDwgbGVuZ3RoOyBrKyspIHsKLSAgICAgICAgaWYgKGsgPj0gMSkgewotICAgICAgICAgICAgaWYg
KHNlcGFyYXRvci5pc051bGwoKSkKLSAgICAgICAgICAgICAgICBzdHJCdWZmZXIuYXBwZW5kKCcs
Jyk7CisgICAgICAgICAgICAgICAgc3RyaW5nSm9pbmVyLmFwcGVuZChlbGVtZW50LnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
c3RyQnVmZmVyLmFwcGVuZChzZXBhcmF0b3IpOworICAgICAgICAgICAgICAgIHN0cmluZ0pvaW5l
ci5hcHBlbmQoVVN0cmluZygpKTsKICAgICAgICAgfQorICAgIH0KIAorICAgIGZvciAoOyBrIDwg
bGVuZ3RoOyBrKyspIHsKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdGhpc09iai0+Z2V0KGV4
ZWMsIGspOwogICAgICAgICBpZiAoIWVsZW1lbnQuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAg
ICAgICAgIHN0ckJ1ZmZlci5hcHBlbmQoZWxlbWVudC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YykpOworICAgICAgICAgICAgc3RyaW5nSm9pbmVyLmFwcGVuZChlbGVtZW50LnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0cmluZ0pvaW5l
ci5hcHBlbmQoVVN0cmluZygpKTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHN0ckJ1ZmZlci5idWlsZChleGVjKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdHJp
bmdKb2luZXIuYnVpbGQoZXhlYykpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GdW5jQ29uY2F0KEV4ZWNTdGF0ZSogZXhlYykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMDA0NWE3
MTdiNmQzOTQ5NGE3MmMyOWVlZDA3ODRiM2FkNGVlMzE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwCkBAIC0wLDAgKzEs
MTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTU3RyaW5nSm9pbmVyLmgiCisKKyNpbmNsdWRl
ICJFeGNlcHRpb25IZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNTdHJpbmcuaCIKKyNpbmNsdWRlICJT
Y29wZUNoYWluLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgorCisKK25hbWVz
cGFjZSBKU0MgeworCisvLyBUaGUgZGVzdGluYXRpb24gaXMgMTZiaXRzLCBhdCBsZWFzdCBvbmUg
c3RyaW5nIGlzIDE2IGJpdHMuCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kU3RyaW5nVG9EYXRh
KFVDaGFyKiYgZGF0YSwgY29uc3QgVVN0cmluZyYgc3RyaW5nKQoreworICAgIGlmIChzdHJpbmcu
aXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmlu
Zy5sZW5ndGgoKTsKKyAgICBjb25zdCBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsID0gc3RyaW5nLmlt
cGwoKTsKKworICAgIGlmIChzdHJpbmdJbXBsLT5pczhCaXQoKSkgeworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICpkYXRhID0gc3Ry
aW5nSW1wbC0+Y2hhcmFjdGVyczgoKVtpXTsKKyAgICAgICAgICAgICsrZGF0YTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkgeworICAgICAgICAgICAgKmRhdGEgPSBzdHJpbmdJbXBsLT5jaGFyYWN0ZXJzMTYoKVtp
XTsKKyAgICAgICAgICAgICsrZGF0YTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gSWYgdGhl
IGRlc3RpbmF0aW9uIGlzIDhiaXRzLCB3ZSBrbm93IGV2ZXJ5IHN0cmluZyBoYXMgdG8gYmUgOGJp
dC4KK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRTdHJpbmdUb0RhdGEoTENoYXIqJiBkYXRhLCBj
b25zdCBVU3RyaW5nJiBzdHJpbmcpCit7CisgICAgaWYgKHN0cmluZy5pc051bGwoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIEFTU0VSVChzdHJpbmcuaXM4Qml0KCkpOworCisgICAgdW5zaWduZWQg
bGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOworICAgIGNvbnN0IFN0cmluZ0ltcGwqIHN0cmluZ0lt
cGwgPSBzdHJpbmcuaW1wbCgpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7CisgICAgICAgICpkYXRhID0gc3RyaW5nSW1wbC0+Y2hhcmFjdGVyczgoKVtpXTsK
KyAgICAgICAgKytkYXRhOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4KK3N0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBqb2luU3RyaW5ncyhW
ZWN0b3I8VVN0cmluZz4mIHN0cmluZ3MsIGNvbnN0IFVTdHJpbmcmIHNlcGFyYXRvciwgdW5zaWdu
ZWQgb3V0cHV0TGVuZ3RoKQoreworICAgIEFTU0VSVChvdXRwdXRMZW5ndGgpOworCisgICAgQ2hh
cmFjdGVyVHlwZSogZGF0YTsKKyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gb3V0cHV0U3RyaW5nSW1w
bCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQob3V0cHV0TGVuZ3RoLCBkYXRh
KTsKKyAgICBpZiAoIW91dHB1dFN0cmluZ0ltcGwpCisgICAgICAgIHJldHVybiBQYXNzUmVmUHRy
PFN0cmluZ0ltcGw+KCk7CisKKyAgICBjb25zdCBVU3RyaW5nIGZpcnN0U3RyaW5nID0gc3RyaW5n
cy5hdCgwKTsKKyAgICBhcHBlbmRTdHJpbmdUb0RhdGEoZGF0YSwgZmlyc3RTdHJpbmcpOworCisg
ICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzdHJpbmdzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGFwcGVuZFN0cmluZ1RvRGF0YShkYXRhLCBzZXBhcmF0b3IpOworICAgICAgICBVU3RyaW5nJiBz
dHJpbmcgPSBzdHJpbmdzLmF0KGkpOworICAgICAgICBhcHBlbmRTdHJpbmdUb0RhdGEoZGF0YSwg
c3RyaW5nKTsKKyAgICB9CisKKyAgICBBU1NFUlQoZGF0YSA9PSAob3V0cHV0U3RyaW5nSW1wbC0+
Z2V0Q2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpICsgb3V0cHV0U3RyaW5nSW1wbC0+bGVuZ3Ro
KCkpKTsKKyAgICByZXR1cm4gb3V0cHV0U3RyaW5nSW1wbC5yZWxlYXNlKCk7Cit9CisKK0pTVmFs
dWUgSlNTdHJpbmdKb2luZXI6OmJ1aWxkKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoIW1f
aXNWYWxpZCkKKyAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKwor
ICAgIGlmICghbV9zdHJpbmdzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmco
ZXhlYyk7CisKKyAgICBzaXplX3Qgc2VwYXJhdG9yTGVuZ3RoID0gbV9zZXBhcmF0b3IubGVuZ3Ro
KCk7CisgICAgLy8gRklYTUU6IGFkZCBzcGVjaWFsIGNhc2VzIG9mIGpvaW5TdHJpbmdzKCkgZm9y
IChzZXBhcmF0b3JMZW5ndGggPT0gMCkgYW5kIChzZXBhcmF0b3JMZW5ndGggPT0gMSkuCisgICAg
QVNTRVJUKG1fc3RyaW5ncy5zaXplKCkgPiAwKTsKKyAgICBzaXplX3QgdG90YWxTZXBhcmFjdG9y
c0xlbmd0aCA9IHNlcGFyYXRvckxlbmd0aCAqIChtX3N0cmluZ3Muc2l6ZSgpIC0gMSk7CisKKyAg
ICBzaXplX3QgY3VtdWxhdGVkU3RyaW5nc0xlbmd0aCA9IDA7CisgICAgc2l6ZV90IGlzOEJpdHMg
PSB0cnVlOworCisgICAgaXM4Qml0cyA9IGlzOEJpdHMgJiYgbV9zZXBhcmF0b3IuaXM4Qml0KCk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0cmluZ3Muc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgY29uc3QgVVN0cmluZyYgc3RyaW5nID0gbV9zdHJpbmdzLmF0KGkpOworICAgICAgICBp
ZiAoc3RyaW5nLmlzTnVsbCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGN1bXVs
YXRlZFN0cmluZ3NMZW5ndGggKz0gc3RyaW5nLmxlbmd0aCgpOworICAgICAgICBpczhCaXRzID0g
aXM4Qml0cyAmJiBzdHJpbmcuaXM4Qml0KCk7CisgICAgfQorCisgICAgc2l6ZV90IG91dHB1dFN0
cmluZ1NpemUgPSB0b3RhbFNlcGFyYWN0b3JzTGVuZ3RoICsgY3VtdWxhdGVkU3RyaW5nc0xlbmd0
aDsKKworICAgIGlmICghb3V0cHV0U3RyaW5nU2l6ZSkKKyAgICAgICAgcmV0dXJuIGpzRW1wdHlT
dHJpbmcoZXhlYyk7CisKKyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gb3V0cHV0U3RyaW5nSW1wbDsK
KyAgICBpZiAoaXM4Qml0cykKKyAgICAgICAgb3V0cHV0U3RyaW5nSW1wbCA9IGpvaW5TdHJpbmdz
PExDaGFyPihtX3N0cmluZ3MsIG1fc2VwYXJhdG9yLCBvdXRwdXRTdHJpbmdTaXplKTsKKyAgICBl
bHNlCisgICAgICAgIG91dHB1dFN0cmluZ0ltcGwgPSBqb2luU3RyaW5nczxVQ2hhcj4obV9zdHJp
bmdzLCBtX3NlcGFyYXRvciwgb3V0cHV0U3RyaW5nU2l6ZSk7CisKKyAgICBpZiAoIW91dHB1dFN0
cmluZ0ltcGwpCisgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisK
KyAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIG91dHB1dFN0
cmluZ0ltcGwucmVsZWFzZSgpKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3RyaW5nSm9pbmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTUzYjczNzVkYjdhMjljYmZhMDgw
N2JmMzQxNTc1ZGE2YTM5MzdhNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSlNTdHJpbmdKb2lu
ZXJfaAorI2RlZmluZSBKU1N0cmluZ0pvaW5lcl9oCisKKyNpbmNsdWRlICJKU1ZhbHVlLmgiCisj
aW5jbHVkZSAiVVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIEV4ZWNTdGF0ZTsKKworCitjbGFzcyBKU1N0cmluZ0pvaW5lciB7Citw
dWJsaWM6CisgICAgSlNTdHJpbmdKb2luZXIoY29uc3QgVVN0cmluZyYgc2VwYXJhdG9yLCBzaXpl
X3Qgc3RyaW5nQ291bnQpOworCisgICAgdm9pZCBhcHBlbmQoY29uc3QgVVN0cmluZyYpOworICAg
IEpTVmFsdWUgYnVpbGQoRXhlY1N0YXRlKik7CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX2lzVmFs
aWQ7CisgICAgVVN0cmluZyBtX3NlcGFyYXRvcjsKKyAgICBWZWN0b3I8VVN0cmluZz4gbV9zdHJp
bmdzOworfTsKKworaW5saW5lIEpTU3RyaW5nSm9pbmVyOjpKU1N0cmluZ0pvaW5lcihjb25zdCBV
U3RyaW5nJiBzZXBhcmF0b3IsIHNpemVfdCBzdHJpbmdDb3VudCkKKyAgICA6IG1faXNWYWxpZCh0
cnVlKQorICAgICwgbV9zZXBhcmF0b3Ioc2VwYXJhdG9yKQoreworICAgIG1faXNWYWxpZCA9IG1f
c3RyaW5ncy50cnlSZXNlcnZlQ2FwYWNpdHkoc3RyaW5nQ291bnQpOworfQorCitpbmxpbmUgdm9p
ZCBKU1N0cmluZ0pvaW5lcjo6YXBwZW5kKGNvbnN0IFVTdHJpbmcmIHN0cikKK3sKKyAgICBtX2lz
VmFsaWQgPSBtX3N0cmluZ3MudHJ5QXBwZW5kKCZzdHIsIDEpOworfQorCit9CisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135674</attachid>
            <date>2012-04-04 14:04:16 -0700</date>
            <delta_ts>2012-04-04 15:06:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-83180-20120404140415.patch</filename>
            <type>text/plain</type>
            <size>21661</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzMTE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MmE2OGU1ZjkyZDIzNTFiOGQ4MDk1NDhhMjYwYzFmMDc1YjA2MDFkLi5hNWE5YjdkZjExZWZmYTA2
ZWU2N2EzZDVkZDY1MzMwY2NmZTQyY2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MiBAQAorMjAxMi0wNC0wNCAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBNYWtlIHNvbWV0aGluZyBmYXN0ZXIgdGhhbiBKU1N0cmluZ0J1aWxk
ZXIgZm9yIGpvaW5pbmcgYW4gYXJyYXkgb2YgSlNWYWx1ZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODMxODAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZCB0aGUgY2xhc3MgSlNTdHJp
bmdKb2luZXIgb3B0aW1pemVkIGZvciBqb2luKCkgb3BlcmF0aW9ucy4KKworICAgICAgICBUaGlz
IGNsYXNzIG1ha2VzIHN0cmljdGVyIGNvbnN0cmFpbnRzIHRoYW4gSlNTdHJpbmdCdWlsZGVyIGlu
IG9yZGVyIGF2b2lkCisgICAgICAgIG1lbW9yeSBhbGxvY2F0aW9ucy4KKworICAgICAgICBJbiB0
aGUgYmVzdCBjYXNlLCB0aGUgY2xhc3MgYWxsb2NhdGUgbWVtb3J5IG9ubHkgdHdpY2U6CisgICAg
ICAgIC1BbGxvY2F0ZSBhbiBhcnJheSB0byBrZWVwIGEgbGlzdCBvZiBVU3RyaW5nIHRvIGpvaW4u
CisgICAgICAgIC1BbGxvY2F0ZSB0aGUgZmluYWwgc3RyaW5nLgorCisgICAgICAgIFdlIGFsc28g
YXZvaWQgdGhlIGNvbnZlcnNpb24gZnJvbSA4Yml0cyBzdHJpbmdzIHRvIDE2Yml0cyBzdHJpbmdz
IHNpbmNlCisgICAgICAgIHRoZXkgYXJlIGNvc3RseSBhbmQgdW5saWtseSB0byBoZWxwIGZvciBz
dWJzZXF1ZW50IGNhbGxzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
R05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3Byb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90
b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNKb2luKToKKyAgICAgICAgKiBydW50aW1lL0pT
U3RyaW5nSm9pbmVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjph
cHBlbmRTdHJpbmdUb0RhdGEpOgorICAgICAgICAoSlNDOjpqb2luU3RyaW5ncyk6CisgICAgICAg
IChKU0M6OkpTU3RyaW5nSm9pbmVyOjpidWlsZCk6CisgICAgICAgICogcnVudGltZS9KU1N0cmlu
Z0pvaW5lci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU1N0cmluZ0pvaW5l
cik6CisgICAgICAgIChKU0M6OkpTU3RyaW5nSm9pbmVyOjpKU1N0cmluZ0pvaW5lcik6CisgICAg
ICAgIChKU0M6OkpTU3RyaW5nSm9pbmVyOjphcHBlbmQpOgorCiAyMDEyLTA0LTAzICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgT2ZmbGluZWFzbSBBUk0gYmFja2Vu
ZCB1c2VzIHRoZSB3cm9uZyBtbmVtb25pYyBmb3IgbXVsdGlwbHkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dAppbmRleCBmNmJjYzAyY2VjZDFhYTMwNzRmMjNjNGZkYjJmZTdmYmU3OGFj
NWUzLi43Y2JlOGJiMmM3NzI1NzU3NWVmYWNhOTU4NGQ4NzA1NTBhMDU1Y2UyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xNzksNiArMTc5LDcgQEAgU0VUKEphdmFTY3Jp
cHRDb3JlX1NPVVJDRVMKICAgICBydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCiAg
ICAgcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvSlNTdHJpbmcu
Y3BwCisgICAgcnVudGltZS9KU1N0cmluZ0pvaW5lci5jcHAKICAgICBydW50aW1lL0pTVmFsdWUu
Y3BwCiAgICAgcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvSlNXcmFw
cGVyT2JqZWN0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpp
bmRleCAwMTJhODNjNzM4Njk4ODBiMDFkYmUxOTZiYjFhNThmMzIyZDNmODU4Li4zZTMxZGE5MWZi
YTY3NWEzODA0ZWNiNWEwODNiZDk3ZWIzMmYwNzc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDc0LDYgKzQ3NCw4IEBAIGphdmFzY3JpcHRjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVP
YmplY3QuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3Bl
T2JqZWN0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nQnVpbGRl
ci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0pvaW5lci5jcHAg
XAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNUeXBlLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmd5cGkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lw
aQppbmRleCBjMDdiMzkxN2JmNjM5MThjZjhmOWM4NTAwMzA0MDZmYjg5MWMwZDU3Li4zODY1MTI1
ODEzNTYwNDFlMTgwYzYyNzA1Nzc0OWViM2U3ZjJiMDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUuZ3lwaQpAQCAtMzg1LDYgKzM4NSw4IEBACiAgICAgICAgICAgICAn
cnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmgnLAogICAgICAgICAgICAgJ3J1bnRpbWUvSlNT
dHJpbmcuY3BwJywKICAgICAgICAgICAgICdydW50aW1lL0pTU3RyaW5nQnVpbGRlci5oJywKKyAg
ICAgICAgICAgICdydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcCcsCisgICAgICAgICAgICAncnVu
dGltZS9KU1N0cmluZ0pvaW5lci5oJywKICAgICAgICAgICAgICdydW50aW1lL0pTVmFsdWUuY3Bw
JywKICAgICAgICAgICAgICdydW50aW1lL0pTVmFyaWFibGVPYmplY3QuY3BwJywKICAgICAgICAg
ICAgICdydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagppbmRleCA2YjM1OWY0N2Vi
ZjBmNzE5MTViMTUxYzJiNGRkMjYzMTQ4NDEwNGMzLi5iZjg5OWJkZjA0OTQ0ZjA4MWZlZTI4NWVk
YWRlZmNjZmEyMTQ3MmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagpAQCAtODk3LDYgKzg5NywxNCBAQAogCQkJCVJlbGF0
aXZlUGF0aD0iLi5cLi5ccnVudGltZVxKU1N0cmluZy5oIgogCQkJCT4KIAkJCTwvRmlsZT4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIDxGaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxKU1N0cmluZ0pvaW5lci5jcHAiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwv
RmlsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxGaWxlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxKU1N0cmluZ0pvaW5lci5o
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAg
ICAgICA8L0ZpbGU+CiAJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxK
U1R5cGUuaCIKIAkJCQk+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDNlZDE0OTUy
OTE5N2JmNWI1NjAzMjcyOTczODkxOTkyZjAyMzQ5YTguLmZmOTU3M2ZhNjU2MTNiYjhmZjhjMThj
NmJjMzk2ZGVhZGIwYzk3NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zMTQs
NiArMzE0LDggQEAKIAkJMTREMkYzREIxMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQyRjNEOTEz
OUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNEU5RDE3QjEwN0VDNDY5MDA0RERBMjEgLyogSlNH
bG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkM3NTZGQzYwRTIwMzFCMjAwREU3RDEyIC8qIEpTR2xvYmFsT2JqZWN0
RnVuY3Rpb25zLmNwcCAqLzsgfTsKIAkJMTRGOTc0NDcxMzhDODUzRTAwREExQzY3IC8qIEhlYXBS
b290VmlzaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTRGOTc0NDYxMzhDODUzRTAwREExQzY3IC8qIEhlYXBSb290VmlzaXRvci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTI2MDBCNUE2MTUyQkFB
QTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjAwQjVBNDE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJp
bmdKb2luZXIuY3BwICovOyB9OworCQkyNjAwQjVBNzE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJp
bmdKb2luZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDI2MDBCNUE1MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5oICovOyB9OwogCQk0
MTM1OUNGMzBGREQ4OUFEMDAyMDYxODAgLyogRGF0ZUNvbnZlcnNpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQyMTIwMjI5MEFENDMxMEMwMEVENzlC
NiAvKiBEYXRlQ29udmVyc2lvbi5oICovOyB9OwogCQk0NTE1MzlCOTEyREM5OTQ1MDBFRjdBQzQg
LyogWWFyci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDUxNTM5QjgxMkRDOTk0NTAwRUY3QUM0IC8qIFlhcnIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1RDUzNzI2RjBFMUM1NDg4MDAyMUU1NDkgLyog
VHJhY2luZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUQ1MzcyNkUwRTFDNTQ4ODAwMjFFNTQ5IC8qIFRyYWNpbmcuaCAqLzsgfTsKQEAgLTkzMyw2ICs5
MzUsOCBAQAogCQkxQzkwNTE0NTBCQTlFOEE3MDA4MUU5RDAgLyogQmFzZS54Y2NvbmZpZyAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBCYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQ0FBOEI0QTBEMzJDMzlBMDA0MUJDRkYgLyogSmF2YVNjcmlwdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKYXZhU2NyaXB0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQUE4QjRCMEQzMkMzOUEwMDQxQkNGRiAvKiBKYXZhU2Ny
aXB0Q29yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKYXZhU2NyaXB0Q29y
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNjAwQjVBNDE1MkJBQUE3MDA5MUVF
NUYgLyogSlNTdHJpbmdKb2luZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNTdHJpbmdKb2luZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQky
NjAwQjVBNTE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTdHJpbmdKb2luZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDQ5MDk3RUUwRjhGODFCNTAwNzZBMzI3IC8qIEZlYXR1cmVEZWZpbmVzLnhj
Y29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEZlYXR1cmVEZWZpbmVzLnhj
Y29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NTE1MzlCODEyREM5OTQ1MDBF
RjdBQzQgLyogWWFyci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBZYXJyLmg7
IHBhdGggPSB5YXJyL1lhcnIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDVFMTJE
ODgwNkE0OUIwRjAwRTlERjg0IC8qIGpzYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBqc2MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDQ7IH07CkBAIC0xODQwLDYgKzE4NDQsOCBAQAogCQkJCUJDMDJFOUI2
MEUxODQyRkEwMDBGOTI5NyAvKiBKU1N0cmluZy5jcHAgKi8sCiAJCQkJRjY5MkE4NjIwMjU1NTk3
RDAxRkY2MEY3IC8qIEpTU3RyaW5nLmggKi8sCiAJCQkJODZFODU1MzgxMTFCOTk2ODAwMUFGNTFF
IC8qIEpTU3RyaW5nQnVpbGRlci5oICovLAorCQkJCTI2MDBCNUE0MTUyQkFBQTcwMDkxRUU1RiAv
KiBKU1N0cmluZ0pvaW5lci5jcHAgKi8sCisJCQkJMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8q
IEpTU3RyaW5nSm9pbmVyLmggKi8sCiAJCQkJMTRBQkI0NTQwOTlDMkEwRjAwRTJBMjRGIC8qIEpT
VHlwZS5oICovLAogCQkJCTY1MDdEMjk3MEU4NzFFNEEwMEQ3RDg5NiAvKiBKU1R5cGVJbmZvLmgg
Ki8sCiAJCQkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpTVmFsdWUuY3BwICovLApAQCAt
MjMyNCw2ICsyMzMwLDcgQEAKIAkJCQlCQzE4QzQyNjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNSZXRh
aW5QdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI3MEUxNkY1Q0QwMEIzNDQ2MCAvKiBK
U1N0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFODU1MzkxMTFCOTk2ODAwMUFGNTFFIC8q
IEpTU3RyaW5nQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjYwMEI1QTcxNTJCQUFBNzAw
OTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyODBF
MTZGNUNEMDBCMzQ0NjAgLyogSlNTdHJpbmdSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDI5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZ1JlZkNGLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzQyQTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNUeXBlLmggaW4gSGVhZGVycyAqLywKQEAg
LTI5NzEsNiArMjk3OCw3IEBACiAJCQkJQTcyN0ZGNkIwREEzMDkyMjAwRTU0OEQ3IC8qIEpTUHJv
cGVydHlOYW1lSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQwNTY2RDExMDdFQzI2
NzAwNURCQzhEIC8qIEpTU3RhdGljU2NvcGVPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5RDUxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTI2MDBCNUE2MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDgyQjc0RTBBNDMwMzI4MDA1MTdDRkMgLyogSlNTdHJpbmdSZWYuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ2QUFCMzgwQjY2QTk0NDAwRTU1RjE2IC8qIEpTU3RyaW5n
UmVmQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5RDYxMDdFQzM3NjAwNDI3QTQ4IC8q
IEpTVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCmluZGV4
IDJiYzgwODk0YzcxZTdiNmU4NGJlOTA4MTEyN2M3MTE3ZmY3MTliZWQuLjhhYzQ2MDRhYTMxZjY1
NDg2YzlmYWZmYjhjZDNlNzMwZWNmNTVhMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCkBA
IC0xODcsNiArMTg3LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcnVudGltZS9KU1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yLmNwcCBcCiAgICAgcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcCBcCiAg
ICAgcnVudGltZS9KU1N0cmluZy5jcHAgXAorICAgIHJ1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3Bw
IFwKICAgICBydW50aW1lL0pTVmFsdWUuY3BwIFwKICAgICBydW50aW1lL0pTVmFyaWFibGVPYmpl
Y3QuY3BwIFwKICAgICBydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAgXApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCmluZGV4IGFlNWI5YzYy
MzVjMjM3MGY1YWE2MzgxYTFmZmY0MDI3MDFiY2IwNTkuLjgxODg5NWM3MTYzZjY0N2QwNjg1MTc2
MTc1NWEyYjA5OTFmM2M5ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5UHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheVByb3RvdHlwZS5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJDb2RlQmxv
Y2suaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpJVC5oIgotI2luY2x1
ZGUgIkpTU3RyaW5nQnVpbGRlci5oIgorI2luY2x1ZGUgIkpTU3RyaW5nSm9pbmVyLmgiCiAjaW5j
bHVkZSAiTG9va3VwLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAi
T3BlcmF0aW9ucy5oIgpAQCAtMzQzLDExICszNDMsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogICAg
IGlmIChKU1ZhbHVlIGVhcmx5UmV0dXJuVmFsdWUgPSBjaGVja2VyLmVhcmx5UmV0dXJuVmFsdWUo
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShlYXJseVJldHVyblZhbHVlKTsKIAot
ICAgIEpTU3RyaW5nQnVpbGRlciBzdHJCdWZmZXI7CisgICAgVVN0cmluZyBzZXBhcmF0b3IoIiwi
KTsKKyAgICBKU1N0cmluZ0pvaW5lciBzdHJpbmdKb2luZXIoc2VwYXJhdG9yLCBsZW5ndGgpOwog
ICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBsZW5ndGg7IGsrKykgewotICAgICAgICBpZiAo
ayA+PSAxKQotICAgICAgICAgICAgc3RyQnVmZmVyLmFwcGVuZCgnLCcpOwotCiAgICAgICAgIEpT
VmFsdWUgZWxlbWVudCA9IHRoaXNPYmotPmdldChleGVjLCBrKTsKICAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKQEAgLTM2NSwxMSArMzYzLDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAg
ICAgICAgICAgICAgc3RyID0gZWxlbWVudC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAg
ICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgICAgIHN0ckJ1ZmZl
ci5hcHBlbmQoc3RyKTsKKyAgICAgICAgICAgIHN0cmluZ0pvaW5lci5hcHBlbmQoc3RyKTsKICAg
ICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3RyQnVmZmVyLmJ1
aWxkKGV4ZWMpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN0cmluZ0pvaW5lci5idWls
ZChleGVjKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1
bmNKb2luKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTM4Myw2MCArMzgxLDM5IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNKb2luKEV4ZWNTdGF0ZSogZXhlYykKICAg
ICBpZiAoSlNWYWx1ZSBlYXJseVJldHVyblZhbHVlID0gY2hlY2tlci5lYXJseVJldHVyblZhbHVl
KCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZWFybHlSZXR1cm5WYWx1ZSk7CiAK
LSAgICBKU1N0cmluZ0J1aWxkZXIgc3RyQnVmZmVyOwotCiAgICAgVVN0cmluZyBzZXBhcmF0b3I7
CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpKQogICAgICAgICBzZXBh
cmF0b3IgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Cisg
ICAgaWYgKHNlcGFyYXRvci5pc051bGwoKSkKKyAgICAgICAgc2VwYXJhdG9yID0gVVN0cmluZygi
LCIpOworCisgICAgSlNTdHJpbmdKb2luZXIgc3RyaW5nSm9pbmVyKHNlcGFyYXRvciwgbGVuZ3Ro
KTsKIAogICAgIHVuc2lnbmVkIGsgPSAwOwogICAgIGlmIChpc0pTQXJyYXkodGhpc09iaikpIHsK
ICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwogCi0gICAgICAgIGlm
IChsZW5ndGgpIHsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmNhbkdldEluZGV4KGspKSAKLSAg
ICAgICAgICAgICAgICBnb3RvIHNraXBGaXJzdExvb3A7CisgICAgICAgIGZvciAoOyBrIDwgbGVu
Z3RoOyBrKyspIHsKKyAgICAgICAgICAgIGlmICghYXJyYXktPmNhbkdldEluZGV4KGspKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBhcnJh
eS0+Z2V0SW5kZXgoayk7CiAgICAgICAgICAgICBpZiAoIWVsZW1lbnQuaXNVbmRlZmluZWRPck51
bGwoKSkKLSAgICAgICAgICAgICAgICBzdHJCdWZmZXIuYXBwZW5kKGVsZW1lbnQudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICAgICAgICAgIGsrKzsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChzZXBhcmF0b3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGZvciAoOyBrIDwgbGVu
Z3RoOyBrKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoIWFycmF5LT5jYW5HZXRJbmRleChrKSkK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgc3RyQnVmZmVyLmFw
cGVuZCgnLCcpOwotICAgICAgICAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGFycmF5LT5nZXRJ
bmRleChrKTsKLSAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQuaXNVbmRlZmluZWRPck51bGwo
KSkKLSAgICAgICAgICAgICAgICAgICAgc3RyQnVmZmVyLmFwcGVuZChlbGVtZW50LnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBmb3IgKDsgayA8IGxlbmd0aDsgaysrKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFhcnJheS0+Y2FuR2V0SW5kZXgoaykpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIHN0ckJ1ZmZlci5hcHBlbmQoc2VwYXJhdG9yKTsKLSAgICAgICAgICAgICAg
ICBKU1ZhbHVlIGVsZW1lbnQgPSBhcnJheS0+Z2V0SW5kZXgoayk7Ci0gICAgICAgICAgICAgICAg
aWYgKCFlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICAgICAgICAgIHN0
ckJ1ZmZlci5hcHBlbmQoZWxlbWVudC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotIHNraXBGaXJzdExvb3A6Ci0gICAgZm9yICg7
IGsgPCBsZW5ndGg7IGsrKykgewotICAgICAgICBpZiAoayA+PSAxKSB7Ci0gICAgICAgICAgICBp
ZiAoc2VwYXJhdG9yLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIHN0ckJ1ZmZlci5hcHBlbmQo
JywnKTsKKyAgICAgICAgICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKGVsZW1lbnQudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBzdHJCdWZmZXIuYXBwZW5kKHNlcGFyYXRvcik7CisgICAgICAgICAgICAgICAgc3RyaW5nSm9p
bmVyLmFwcGVuZChVU3RyaW5nKCkpOwogICAgICAgICB9CisgICAgfQogCisgICAgZm9yICg7IGsg
PCBsZW5ndGg7IGsrKykgewogICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB0aGlzT2JqLT5nZXQo
ZXhlYywgayk7CiAgICAgICAgIGlmICghZWxlbWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAg
ICAgICAgICAgc3RyQnVmZmVyLmFwcGVuZChlbGVtZW50LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKSk7CisgICAgICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKGVsZW1lbnQudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RyaW5nSm9p
bmVyLmFwcGVuZChVU3RyaW5nKCkpOwogICAgIH0KIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoc3RyQnVmZmVyLmJ1aWxkKGV4ZWMpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN0
cmluZ0pvaW5lci5idWlsZChleGVjKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJyYXlQcm90b0Z1bmNDb25jYXQoRXhlY1N0YXRlKiBleGVjKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMwMDQ1
YTcxN2I2ZDM5NDk0YTcyYzI5ZWVkMDc4NGIzYWQ0ZWUzMTYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0pvaW5lci5jcHAKQEAgLTAsMCAr
MSwxNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNTdHJpbmdKb2luZXIuaCIKKworI2luY2x1
ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU1N0cmluZy5oIgorI2luY2x1ZGUg
IlNjb3BlQ2hhaW4uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CisKKworbmFt
ZXNwYWNlIEpTQyB7CisKKy8vIFRoZSBkZXN0aW5hdGlvbiBpcyAxNmJpdHMsIGF0IGxlYXN0IG9u
ZSBzdHJpbmcgaXMgMTYgYml0cy4KK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRTdHJpbmdUb0Rh
dGEoVUNoYXIqJiBkYXRhLCBjb25zdCBVU3RyaW5nJiBzdHJpbmcpCit7CisgICAgaWYgKHN0cmlu
Zy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3Ry
aW5nLmxlbmd0aCgpOworICAgIGNvbnN0IFN0cmluZ0ltcGwqIHN0cmluZ0ltcGwgPSBzdHJpbmcu
aW1wbCgpOworCisgICAgaWYgKHN0cmluZ0ltcGwtPmlzOEJpdCgpKSB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgKmRhdGEgPSBz
dHJpbmdJbXBsLT5jaGFyYWN0ZXJzOCgpW2ldOworICAgICAgICAgICAgKytkYXRhOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7CisgICAgICAgICAgICAqZGF0YSA9IHN0cmluZ0ltcGwtPmNoYXJhY3RlcnMxNigp
W2ldOworICAgICAgICAgICAgKytkYXRhOworICAgICAgICB9CisgICAgfQorfQorCisvLyBJZiB0
aGUgZGVzdGluYXRpb24gaXMgOGJpdHMsIHdlIGtub3cgZXZlcnkgc3RyaW5nIGhhcyB0byBiZSA4
Yml0Lgorc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZFN0cmluZ1RvRGF0YShMQ2hhciomIGRhdGEs
IGNvbnN0IFVTdHJpbmcmIHN0cmluZykKK3sKKyAgICBpZiAoc3RyaW5nLmlzTnVsbCgpKQorICAg
ICAgICByZXR1cm47CisgICAgQVNTRVJUKHN0cmluZy5pczhCaXQoKSk7CisKKyAgICB1bnNpZ25l
ZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CisgICAgY29uc3QgU3RyaW5nSW1wbCogc3RyaW5n
SW1wbCA9IHN0cmluZy5pbXBsKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgKmRhdGEgPSBzdHJpbmdJbXBsLT5jaGFyYWN0ZXJzOCgpW2ld
OworICAgICAgICArK2RhdGE7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPgorc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGpvaW5TdHJpbmdz
KFZlY3RvcjxVU3RyaW5nPiYgc3RyaW5ncywgY29uc3QgVVN0cmluZyYgc2VwYXJhdG9yLCB1bnNp
Z25lZCBvdXRwdXRMZW5ndGgpCit7CisgICAgQVNTRVJUKG91dHB1dExlbmd0aCk7CisKKyAgICBD
aGFyYWN0ZXJUeXBlKiBkYXRhOworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBvdXRwdXRTdHJpbmdJ
bXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChvdXRwdXRMZW5ndGgsIGRh
dGEpOworICAgIGlmICghb3V0cHV0U3RyaW5nSW1wbCkKKyAgICAgICAgcmV0dXJuIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4oKTsKKworICAgIGNvbnN0IFVTdHJpbmcgZmlyc3RTdHJpbmcgPSBzdHJp
bmdzLmF0KDApOworICAgIGFwcGVuZFN0cmluZ1RvRGF0YShkYXRhLCBmaXJzdFN0cmluZyk7CisK
KyAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHN0cmluZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgYXBwZW5kU3RyaW5nVG9EYXRhKGRhdGEsIHNlcGFyYXRvcik7CisgICAgICAgIFVTdHJpbmcm
IHN0cmluZyA9IHN0cmluZ3MuYXQoaSk7CisgICAgICAgIGFwcGVuZFN0cmluZ1RvRGF0YShkYXRh
LCBzdHJpbmcpOworICAgIH0KKworICAgIEFTU0VSVChkYXRhID09IChvdXRwdXRTdHJpbmdJbXBs
LT5nZXRDaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCkgKyBvdXRwdXRTdHJpbmdJbXBsLT5sZW5n
dGgoKSkpOworICAgIHJldHVybiBvdXRwdXRTdHJpbmdJbXBsLnJlbGVhc2UoKTsKK30KKworSlNW
YWx1ZSBKU1N0cmluZ0pvaW5lcjo6YnVpbGQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIGlmICgh
bV9pc1ZhbGlkKQorICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwor
CisgICAgaWYgKCFtX3N0cmluZ3Muc2l6ZSgpKQorICAgICAgICByZXR1cm4ganNFbXB0eVN0cmlu
ZyhleGVjKTsKKworICAgIHNpemVfdCBzZXBhcmF0b3JMZW5ndGggPSBtX3NlcGFyYXRvci5sZW5n
dGgoKTsKKyAgICAvLyBGSVhNRTogYWRkIHNwZWNpYWwgY2FzZXMgb2Ygam9pblN0cmluZ3MoKSBm
b3IgKHNlcGFyYXRvckxlbmd0aCA9PSAwKSBhbmQgKHNlcGFyYXRvckxlbmd0aCA9PSAxKS4KKyAg
ICBBU1NFUlQobV9zdHJpbmdzLnNpemUoKSA+IDApOworICAgIHNpemVfdCB0b3RhbFNlcGFyYWN0
b3JzTGVuZ3RoID0gc2VwYXJhdG9yTGVuZ3RoICogKG1fc3RyaW5ncy5zaXplKCkgLSAxKTsKKwor
ICAgIHNpemVfdCBjdW11bGF0ZWRTdHJpbmdzTGVuZ3RoID0gMDsKKyAgICBzaXplX3QgaXM4Qml0
cyA9IHRydWU7CisKKyAgICBpczhCaXRzID0gaXM4Qml0cyAmJiBtX3NlcGFyYXRvci5pczhCaXQo
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RyaW5ncy5zaXplKCk7ICsraSkgewor
ICAgICAgICBjb25zdCBVU3RyaW5nJiBzdHJpbmcgPSBtX3N0cmluZ3MuYXQoaSk7CisgICAgICAg
IGlmIChzdHJpbmcuaXNOdWxsKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY3Vt
dWxhdGVkU3RyaW5nc0xlbmd0aCArPSBzdHJpbmcubGVuZ3RoKCk7CisgICAgICAgIGlzOEJpdHMg
PSBpczhCaXRzICYmIHN0cmluZy5pczhCaXQoKTsKKyAgICB9CisKKyAgICBzaXplX3Qgb3V0cHV0
U3RyaW5nU2l6ZSA9IHRvdGFsU2VwYXJhY3RvcnNMZW5ndGggKyBjdW11bGF0ZWRTdHJpbmdzTGVu
Z3RoOworCisgICAgaWYgKCFvdXRwdXRTdHJpbmdTaXplKQorICAgICAgICByZXR1cm4ganNFbXB0
eVN0cmluZyhleGVjKTsKKworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBvdXRwdXRTdHJpbmdJbXBs
OworICAgIGlmIChpczhCaXRzKQorICAgICAgICBvdXRwdXRTdHJpbmdJbXBsID0gam9pblN0cmlu
Z3M8TENoYXI+KG1fc3RyaW5ncywgbV9zZXBhcmF0b3IsIG91dHB1dFN0cmluZ1NpemUpOworICAg
IGVsc2UKKyAgICAgICAgb3V0cHV0U3RyaW5nSW1wbCA9IGpvaW5TdHJpbmdzPFVDaGFyPihtX3N0
cmluZ3MsIG1fc2VwYXJhdG9yLCBvdXRwdXRTdHJpbmdTaXplKTsKKworICAgIGlmICghb3V0cHV0
U3RyaW5nSW1wbCkKKyAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsK
KworICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgb3V0cHV0
U3RyaW5nSW1wbC5yZWxlYXNlKCkpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0pvaW5lci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NTNiNzM3NWRiN2EyOWNiZmEw
ODA3YmYzNDE1NzVkYTZhMzkzN2E1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuaApAQCAtMCwwICsxLDY1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBKU1N0cmluZ0pv
aW5lcl9oCisjZGVmaW5lIEpTU3RyaW5nSm9pbmVyX2gKKworI2luY2x1ZGUgIkpTVmFsdWUuaCIK
KyNpbmNsdWRlICJVU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgRXhlY1N0YXRlOworCisKK2NsYXNzIEpTU3RyaW5nSm9pbmVyIHsK
K3B1YmxpYzoKKyAgICBKU1N0cmluZ0pvaW5lcihjb25zdCBVU3RyaW5nJiBzZXBhcmF0b3IsIHNp
emVfdCBzdHJpbmdDb3VudCk7CisKKyAgICB2b2lkIGFwcGVuZChjb25zdCBVU3RyaW5nJik7Cisg
ICAgSlNWYWx1ZSBidWlsZChFeGVjU3RhdGUqKTsKKworcHJpdmF0ZToKKyAgICBib29sIG1faXNW
YWxpZDsKKyAgICBVU3RyaW5nIG1fc2VwYXJhdG9yOworICAgIFZlY3RvcjxVU3RyaW5nPiBtX3N0
cmluZ3M7Cit9OworCitpbmxpbmUgSlNTdHJpbmdKb2luZXI6OkpTU3RyaW5nSm9pbmVyKGNvbnN0
IFVTdHJpbmcmIHNlcGFyYXRvciwgc2l6ZV90IHN0cmluZ0NvdW50KQorICAgIDogbV9pc1ZhbGlk
KHRydWUpCisgICAgLCBtX3NlcGFyYXRvcihzZXBhcmF0b3IpCit7CisgICAgbV9pc1ZhbGlkID0g
bV9zdHJpbmdzLnRyeVJlc2VydmVDYXBhY2l0eShzdHJpbmdDb3VudCk7Cit9CisKK2lubGluZSB2
b2lkIEpTU3RyaW5nSm9pbmVyOjphcHBlbmQoY29uc3QgVVN0cmluZyYgc3RyKQoreworICAgIG1f
aXNWYWxpZCA9IG1fc3RyaW5ncy50cnlBcHBlbmQoJnN0ciwgMSk7Cit9CisKK30KKworI2VuZGlm
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135694</attachid>
            <date>2012-04-04 15:06:21 -0700</date>
            <delta_ts>2012-04-04 21:57:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-83180-20120404150620.patch</filename>
            <type>text/plain</type>
            <size>21586</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzMTE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MmE2OGU1ZjkyZDIzNTFiOGQ4MDk1NDhhMjYwYzFmMDc1YjA2MDFkLi5hNWE5YjdkZjExZWZmYTA2
ZWU2N2EzZDVkZDY1MzMwY2NmZTQyY2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MiBAQAorMjAxMi0wNC0wNCAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBNYWtlIHNvbWV0aGluZyBmYXN0ZXIgdGhhbiBKU1N0cmluZ0J1aWxk
ZXIgZm9yIGpvaW5pbmcgYW4gYXJyYXkgb2YgSlNWYWx1ZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODMxODAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZCB0aGUgY2xhc3MgSlNTdHJp
bmdKb2luZXIgb3B0aW1pemVkIGZvciBqb2luKCkgb3BlcmF0aW9ucy4KKworICAgICAgICBUaGlz
IGNsYXNzIG1ha2VzIHN0cmljdGVyIGNvbnN0cmFpbnRzIHRoYW4gSlNTdHJpbmdCdWlsZGVyIGlu
IG9yZGVyIGF2b2lkCisgICAgICAgIG1lbW9yeSBhbGxvY2F0aW9ucy4KKworICAgICAgICBJbiB0
aGUgYmVzdCBjYXNlLCB0aGUgY2xhc3MgYWxsb2NhdGUgbWVtb3J5IG9ubHkgdHdpY2U6CisgICAg
ICAgIC1BbGxvY2F0ZSBhbiBhcnJheSB0byBrZWVwIGEgbGlzdCBvZiBVU3RyaW5nIHRvIGpvaW4u
CisgICAgICAgIC1BbGxvY2F0ZSB0aGUgZmluYWwgc3RyaW5nLgorCisgICAgICAgIFdlIGFsc28g
YXZvaWQgdGhlIGNvbnZlcnNpb24gZnJvbSA4Yml0cyBzdHJpbmdzIHRvIDE2Yml0cyBzdHJpbmdz
IHNpbmNlCisgICAgICAgIHRoZXkgYXJlIGNvc3RseSBhbmQgdW5saWtseSB0byBoZWxwIGZvciBz
dWJzZXF1ZW50IGNhbGxzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
R05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3Byb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90
b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNKb2luKToKKyAgICAgICAgKiBydW50aW1lL0pT
U3RyaW5nSm9pbmVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjph
cHBlbmRTdHJpbmdUb0RhdGEpOgorICAgICAgICAoSlNDOjpqb2luU3RyaW5ncyk6CisgICAgICAg
IChKU0M6OkpTU3RyaW5nSm9pbmVyOjpidWlsZCk6CisgICAgICAgICogcnVudGltZS9KU1N0cmlu
Z0pvaW5lci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU1N0cmluZ0pvaW5l
cik6CisgICAgICAgIChKU0M6OkpTU3RyaW5nSm9pbmVyOjpKU1N0cmluZ0pvaW5lcik6CisgICAg
ICAgIChKU0M6OkpTU3RyaW5nSm9pbmVyOjphcHBlbmQpOgorCiAyMDEyLTA0LTAzICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgT2ZmbGluZWFzbSBBUk0gYmFja2Vu
ZCB1c2VzIHRoZSB3cm9uZyBtbmVtb25pYyBmb3IgbXVsdGlwbHkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dAppbmRleCBmNmJjYzAyY2VjZDFhYTMwNzRmMjNjNGZkYjJmZTdmYmU3OGFj
NWUzLi43Y2JlOGJiMmM3NzI1NzU3NWVmYWNhOTU4NGQ4NzA1NTBhMDU1Y2UyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xNzksNiArMTc5LDcgQEAgU0VUKEphdmFTY3Jp
cHRDb3JlX1NPVVJDRVMKICAgICBydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCiAg
ICAgcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvSlNTdHJpbmcu
Y3BwCisgICAgcnVudGltZS9KU1N0cmluZ0pvaW5lci5jcHAKICAgICBydW50aW1lL0pTVmFsdWUu
Y3BwCiAgICAgcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvSlNXcmFw
cGVyT2JqZWN0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpp
bmRleCAwMTJhODNjNzM4Njk4ODBiMDFkYmUxOTZiYjFhNThmMzIyZDNmODU4Li4zZTMxZGE5MWZi
YTY3NWEzODA0ZWNiNWEwODNiZDk3ZWIzMmYwNzc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDc0LDYgKzQ3NCw4IEBAIGphdmFzY3JpcHRjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVP
YmplY3QuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3Bl
T2JqZWN0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nQnVpbGRl
ci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0pvaW5lci5jcHAg
XAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNUeXBlLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmd5cGkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lw
aQppbmRleCBjMDdiMzkxN2JmNjM5MThjZjhmOWM4NTAwMzA0MDZmYjg5MWMwZDU3Li4zODY1MTI1
ODEzNTYwNDFlMTgwYzYyNzA1Nzc0OWViM2U3ZjJiMDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUuZ3lwaQpAQCAtMzg1LDYgKzM4NSw4IEBACiAgICAgICAgICAgICAn
cnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmgnLAogICAgICAgICAgICAgJ3J1bnRpbWUvSlNT
dHJpbmcuY3BwJywKICAgICAgICAgICAgICdydW50aW1lL0pTU3RyaW5nQnVpbGRlci5oJywKKyAg
ICAgICAgICAgICdydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcCcsCisgICAgICAgICAgICAncnVu
dGltZS9KU1N0cmluZ0pvaW5lci5oJywKICAgICAgICAgICAgICdydW50aW1lL0pTVmFsdWUuY3Bw
JywKICAgICAgICAgICAgICdydW50aW1lL0pTVmFyaWFibGVPYmplY3QuY3BwJywKICAgICAgICAg
ICAgICdydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagppbmRleCA2YjM1OWY0N2Vi
ZjBmNzE5MTViMTUxYzJiNGRkMjYzMTQ4NDEwNGMzLi5iZjg5OWJkZjA0OTQ0ZjA4MWZlZTI4NWVk
YWRlZmNjZmEyMTQ3MmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagpAQCAtODk3LDYgKzg5NywxNCBAQAogCQkJCVJlbGF0
aXZlUGF0aD0iLi5cLi5ccnVudGltZVxKU1N0cmluZy5oIgogCQkJCT4KIAkJCTwvRmlsZT4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIDxGaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxKU1N0cmluZ0pvaW5lci5jcHAiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwv
RmlsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxGaWxlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxKU1N0cmluZ0pvaW5lci5o
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAg
ICAgICA8L0ZpbGU+CiAJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxK
U1R5cGUuaCIKIAkJCQk+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDNlZDE0OTUy
OTE5N2JmNWI1NjAzMjcyOTczODkxOTkyZjAyMzQ5YTguLmZmOTU3M2ZhNjU2MTNiYjhmZjhjMThj
NmJjMzk2ZGVhZGIwYzk3NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zMTQs
NiArMzE0LDggQEAKIAkJMTREMkYzREIxMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQyRjNEOTEz
OUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNEU5RDE3QjEwN0VDNDY5MDA0RERBMjEgLyogSlNH
bG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkM3NTZGQzYwRTIwMzFCMjAwREU3RDEyIC8qIEpTR2xvYmFsT2JqZWN0
RnVuY3Rpb25zLmNwcCAqLzsgfTsKIAkJMTRGOTc0NDcxMzhDODUzRTAwREExQzY3IC8qIEhlYXBS
b290VmlzaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTRGOTc0NDYxMzhDODUzRTAwREExQzY3IC8qIEhlYXBSb290VmlzaXRvci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTI2MDBCNUE2MTUyQkFB
QTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjAwQjVBNDE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJp
bmdKb2luZXIuY3BwICovOyB9OworCQkyNjAwQjVBNzE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJp
bmdKb2luZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDI2MDBCNUE1MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5oICovOyB9OwogCQk0
MTM1OUNGMzBGREQ4OUFEMDAyMDYxODAgLyogRGF0ZUNvbnZlcnNpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQyMTIwMjI5MEFENDMxMEMwMEVENzlC
NiAvKiBEYXRlQ29udmVyc2lvbi5oICovOyB9OwogCQk0NTE1MzlCOTEyREM5OTQ1MDBFRjdBQzQg
LyogWWFyci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDUxNTM5QjgxMkRDOTk0NTAwRUY3QUM0IC8qIFlhcnIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1RDUzNzI2RjBFMUM1NDg4MDAyMUU1NDkgLyog
VHJhY2luZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUQ1MzcyNkUwRTFDNTQ4ODAwMjFFNTQ5IC8qIFRyYWNpbmcuaCAqLzsgfTsKQEAgLTkzMyw2ICs5
MzUsOCBAQAogCQkxQzkwNTE0NTBCQTlFOEE3MDA4MUU5RDAgLyogQmFzZS54Y2NvbmZpZyAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBCYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQ0FBOEI0QTBEMzJDMzlBMDA0MUJDRkYgLyogSmF2YVNjcmlwdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKYXZhU2NyaXB0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQUE4QjRCMEQzMkMzOUEwMDQxQkNGRiAvKiBKYXZhU2Ny
aXB0Q29yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKYXZhU2NyaXB0Q29y
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNjAwQjVBNDE1MkJBQUE3MDA5MUVF
NUYgLyogSlNTdHJpbmdKb2luZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNTdHJpbmdKb2luZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQky
NjAwQjVBNTE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTdHJpbmdKb2luZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDQ5MDk3RUUwRjhGODFCNTAwNzZBMzI3IC8qIEZlYXR1cmVEZWZpbmVzLnhj
Y29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEZlYXR1cmVEZWZpbmVzLnhj
Y29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NTE1MzlCODEyREM5OTQ1MDBF
RjdBQzQgLyogWWFyci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBZYXJyLmg7
IHBhdGggPSB5YXJyL1lhcnIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDVFMTJE
ODgwNkE0OUIwRjAwRTlERjg0IC8qIGpzYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBqc2MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDQ7IH07CkBAIC0xODQwLDYgKzE4NDQsOCBAQAogCQkJCUJDMDJFOUI2
MEUxODQyRkEwMDBGOTI5NyAvKiBKU1N0cmluZy5jcHAgKi8sCiAJCQkJRjY5MkE4NjIwMjU1NTk3
RDAxRkY2MEY3IC8qIEpTU3RyaW5nLmggKi8sCiAJCQkJODZFODU1MzgxMTFCOTk2ODAwMUFGNTFF
IC8qIEpTU3RyaW5nQnVpbGRlci5oICovLAorCQkJCTI2MDBCNUE0MTUyQkFBQTcwMDkxRUU1RiAv
KiBKU1N0cmluZ0pvaW5lci5jcHAgKi8sCisJCQkJMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8q
IEpTU3RyaW5nSm9pbmVyLmggKi8sCiAJCQkJMTRBQkI0NTQwOTlDMkEwRjAwRTJBMjRGIC8qIEpT
VHlwZS5oICovLAogCQkJCTY1MDdEMjk3MEU4NzFFNEEwMEQ3RDg5NiAvKiBKU1R5cGVJbmZvLmgg
Ki8sCiAJCQkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpTVmFsdWUuY3BwICovLApAQCAt
MjMyNCw2ICsyMzMwLDcgQEAKIAkJCQlCQzE4QzQyNjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNSZXRh
aW5QdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI3MEUxNkY1Q0QwMEIzNDQ2MCAvKiBK
U1N0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFODU1MzkxMTFCOTk2ODAwMUFGNTFFIC8q
IEpTU3RyaW5nQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjYwMEI1QTcxNTJCQUFBNzAw
OTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyODBF
MTZGNUNEMDBCMzQ0NjAgLyogSlNTdHJpbmdSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDI5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZ1JlZkNGLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzQyQTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNUeXBlLmggaW4gSGVhZGVycyAqLywKQEAg
LTI5NzEsNiArMjk3OCw3IEBACiAJCQkJQTcyN0ZGNkIwREEzMDkyMjAwRTU0OEQ3IC8qIEpTUHJv
cGVydHlOYW1lSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQwNTY2RDExMDdFQzI2
NzAwNURCQzhEIC8qIEpTU3RhdGljU2NvcGVPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5RDUxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTI2MDBCNUE2MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDgyQjc0RTBBNDMwMzI4MDA1MTdDRkMgLyogSlNTdHJpbmdSZWYuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ2QUFCMzgwQjY2QTk0NDAwRTU1RjE2IC8qIEpTU3RyaW5n
UmVmQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5RDYxMDdFQzM3NjAwNDI3QTQ4IC8q
IEpTVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCmluZGV4
IDJiYzgwODk0YzcxZTdiNmU4NGJlOTA4MTEyN2M3MTE3ZmY3MTliZWQuLjhhYzQ2MDRhYTMxZjY1
NDg2YzlmYWZmYjhjZDNlNzMwZWNmNTVhMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCkBA
IC0xODcsNiArMTg3LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcnVudGltZS9KU1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yLmNwcCBcCiAgICAgcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcCBcCiAg
ICAgcnVudGltZS9KU1N0cmluZy5jcHAgXAorICAgIHJ1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3Bw
IFwKICAgICBydW50aW1lL0pTVmFsdWUuY3BwIFwKICAgICBydW50aW1lL0pTVmFyaWFibGVPYmpl
Y3QuY3BwIFwKICAgICBydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAgXApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCmluZGV4IGFlNWI5YzYy
MzVjMjM3MGY1YWE2MzgxYTFmZmY0MDI3MDFiY2IwNTkuLjgxODg5NWM3MTYzZjY0N2QwNjg1MTc2
MTc1NWEyYjA5OTFmM2M5ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5UHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheVByb3RvdHlwZS5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJDb2RlQmxv
Y2suaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpJVC5oIgotI2luY2x1
ZGUgIkpTU3RyaW5nQnVpbGRlci5oIgorI2luY2x1ZGUgIkpTU3RyaW5nSm9pbmVyLmgiCiAjaW5j
bHVkZSAiTG9va3VwLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAi
T3BlcmF0aW9ucy5oIgpAQCAtMzQzLDExICszNDMsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogICAg
IGlmIChKU1ZhbHVlIGVhcmx5UmV0dXJuVmFsdWUgPSBjaGVja2VyLmVhcmx5UmV0dXJuVmFsdWUo
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShlYXJseVJldHVyblZhbHVlKTsKIAot
ICAgIEpTU3RyaW5nQnVpbGRlciBzdHJCdWZmZXI7CisgICAgVVN0cmluZyBzZXBhcmF0b3IoIiwi
KTsKKyAgICBKU1N0cmluZ0pvaW5lciBzdHJpbmdKb2luZXIoc2VwYXJhdG9yLCBsZW5ndGgpOwog
ICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBsZW5ndGg7IGsrKykgewotICAgICAgICBpZiAo
ayA+PSAxKQotICAgICAgICAgICAgc3RyQnVmZmVyLmFwcGVuZCgnLCcpOwotCiAgICAgICAgIEpT
VmFsdWUgZWxlbWVudCA9IHRoaXNPYmotPmdldChleGVjLCBrKTsKICAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKQEAgLTM2NSwxMSArMzYzLDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAg
ICAgICAgICAgICAgc3RyID0gZWxlbWVudC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAg
ICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgICAgIHN0ckJ1ZmZl
ci5hcHBlbmQoc3RyKTsKKyAgICAgICAgICAgIHN0cmluZ0pvaW5lci5hcHBlbmQoc3RyKTsKICAg
ICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3RyQnVmZmVyLmJ1
aWxkKGV4ZWMpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN0cmluZ0pvaW5lci5idWls
ZChleGVjKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1
bmNKb2luKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTM4Myw2MCArMzgxLDM5IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNKb2luKEV4ZWNTdGF0ZSogZXhlYykKICAg
ICBpZiAoSlNWYWx1ZSBlYXJseVJldHVyblZhbHVlID0gY2hlY2tlci5lYXJseVJldHVyblZhbHVl
KCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZWFybHlSZXR1cm5WYWx1ZSk7CiAK
LSAgICBKU1N0cmluZ0J1aWxkZXIgc3RyQnVmZmVyOwotCiAgICAgVVN0cmluZyBzZXBhcmF0b3I7
CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpKQogICAgICAgICBzZXBh
cmF0b3IgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Cisg
ICAgaWYgKHNlcGFyYXRvci5pc051bGwoKSkKKyAgICAgICAgc2VwYXJhdG9yID0gVVN0cmluZygi
LCIpOworCisgICAgSlNTdHJpbmdKb2luZXIgc3RyaW5nSm9pbmVyKHNlcGFyYXRvciwgbGVuZ3Ro
KTsKIAogICAgIHVuc2lnbmVkIGsgPSAwOwogICAgIGlmIChpc0pTQXJyYXkodGhpc09iaikpIHsK
ICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwogCi0gICAgICAgIGlm
IChsZW5ndGgpIHsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmNhbkdldEluZGV4KGspKSAKLSAg
ICAgICAgICAgICAgICBnb3RvIHNraXBGaXJzdExvb3A7CisgICAgICAgIGZvciAoOyBrIDwgbGVu
Z3RoOyBrKyspIHsKKyAgICAgICAgICAgIGlmICghYXJyYXktPmNhbkdldEluZGV4KGspKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBhcnJh
eS0+Z2V0SW5kZXgoayk7CiAgICAgICAgICAgICBpZiAoIWVsZW1lbnQuaXNVbmRlZmluZWRPck51
bGwoKSkKLSAgICAgICAgICAgICAgICBzdHJCdWZmZXIuYXBwZW5kKGVsZW1lbnQudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICAgICAgICAgIGsrKzsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChzZXBhcmF0b3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGZvciAoOyBrIDwgbGVu
Z3RoOyBrKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoIWFycmF5LT5jYW5HZXRJbmRleChrKSkK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgc3RyQnVmZmVyLmFw
cGVuZCgnLCcpOwotICAgICAgICAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGFycmF5LT5nZXRJ
bmRleChrKTsKLSAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQuaXNVbmRlZmluZWRPck51bGwo
KSkKLSAgICAgICAgICAgICAgICAgICAgc3RyQnVmZmVyLmFwcGVuZChlbGVtZW50LnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBmb3IgKDsgayA8IGxlbmd0aDsgaysrKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFhcnJheS0+Y2FuR2V0SW5kZXgoaykpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIHN0ckJ1ZmZlci5hcHBlbmQoc2VwYXJhdG9yKTsKLSAgICAgICAgICAgICAg
ICBKU1ZhbHVlIGVsZW1lbnQgPSBhcnJheS0+Z2V0SW5kZXgoayk7Ci0gICAgICAgICAgICAgICAg
aWYgKCFlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICAgICAgICAgIHN0
ckJ1ZmZlci5hcHBlbmQoZWxlbWVudC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotIHNraXBGaXJzdExvb3A6Ci0gICAgZm9yICg7
IGsgPCBsZW5ndGg7IGsrKykgewotICAgICAgICBpZiAoayA+PSAxKSB7Ci0gICAgICAgICAgICBp
ZiAoc2VwYXJhdG9yLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIHN0ckJ1ZmZlci5hcHBlbmQo
JywnKTsKKyAgICAgICAgICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKGVsZW1lbnQudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBzdHJCdWZmZXIuYXBwZW5kKHNlcGFyYXRvcik7CisgICAgICAgICAgICAgICAgc3RyaW5nSm9p
bmVyLmFwcGVuZChVU3RyaW5nKCkpOwogICAgICAgICB9CisgICAgfQogCisgICAgZm9yICg7IGsg
PCBsZW5ndGg7IGsrKykgewogICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB0aGlzT2JqLT5nZXQo
ZXhlYywgayk7CiAgICAgICAgIGlmICghZWxlbWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAg
ICAgICAgICAgc3RyQnVmZmVyLmFwcGVuZChlbGVtZW50LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKSk7CisgICAgICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKGVsZW1lbnQudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RyaW5nSm9p
bmVyLmFwcGVuZChVU3RyaW5nKCkpOwogICAgIH0KIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoc3RyQnVmZmVyLmJ1aWxkKGV4ZWMpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN0
cmluZ0pvaW5lci5idWlsZChleGVjKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJyYXlQcm90b0Z1bmNDb25jYXQoRXhlY1N0YXRlKiBleGVjKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVhMjYw
MjQzYjdjNDQzN2YxMWY5OTQyZThhODYxNDFmNjAwY2E2MTcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0pvaW5lci5jcHAKQEAgLTAsMCAr
MSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNTdHJpbmdKb2luZXIuaCIKKworI2luY2x1
ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU1N0cmluZy5oIgorI2luY2x1ZGUg
IlNjb3BlQ2hhaW4uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CisKKworbmFt
ZXNwYWNlIEpTQyB7CisKKy8vIFRoZSBkZXN0aW5hdGlvbiBpcyAxNmJpdHMsIGF0IGxlYXN0IG9u
ZSBzdHJpbmcgaXMgMTYgYml0cy4KK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRTdHJpbmdUb0Rh
dGEoVUNoYXIqJiBkYXRhLCBjb25zdCBVU3RyaW5nJiBzdHJpbmcpCit7CisgICAgaWYgKHN0cmlu
Zy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3Ry
aW5nLmxlbmd0aCgpOworICAgIGNvbnN0IFN0cmluZ0ltcGwqIHN0cmluZ0ltcGwgPSBzdHJpbmcu
aW1wbCgpOworCisgICAgaWYgKHN0cmluZ0ltcGwtPmlzOEJpdCgpKSB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgKmRhdGEgPSBz
dHJpbmdJbXBsLT5jaGFyYWN0ZXJzOCgpW2ldOworICAgICAgICAgICAgKytkYXRhOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7CisgICAgICAgICAgICAqZGF0YSA9IHN0cmluZ0ltcGwtPmNoYXJhY3RlcnMxNigp
W2ldOworICAgICAgICAgICAgKytkYXRhOworICAgICAgICB9CisgICAgfQorfQorCisvLyBJZiB0
aGUgZGVzdGluYXRpb24gaXMgOGJpdHMsIHdlIGtub3cgZXZlcnkgc3RyaW5nIGhhcyB0byBiZSA4
Yml0Lgorc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZFN0cmluZ1RvRGF0YShMQ2hhciomIGRhdGEs
IGNvbnN0IFVTdHJpbmcmIHN0cmluZykKK3sKKyAgICBpZiAoc3RyaW5nLmlzTnVsbCgpKQorICAg
ICAgICByZXR1cm47CisgICAgQVNTRVJUKHN0cmluZy5pczhCaXQoKSk7CisKKyAgICB1bnNpZ25l
ZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CisgICAgY29uc3QgU3RyaW5nSW1wbCogc3RyaW5n
SW1wbCA9IHN0cmluZy5pbXBsKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgKmRhdGEgPSBzdHJpbmdJbXBsLT5jaGFyYWN0ZXJzOCgpW2ld
OworICAgICAgICArK2RhdGE7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPgorc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGpvaW5TdHJpbmdz
KGNvbnN0IFZlY3RvcjxVU3RyaW5nPiYgc3RyaW5ncywgY29uc3QgVVN0cmluZyYgc2VwYXJhdG9y
LCB1bnNpZ25lZCBvdXRwdXRMZW5ndGgpCit7CisgICAgQVNTRVJUKG91dHB1dExlbmd0aCk7CisK
KyAgICBDaGFyYWN0ZXJUeXBlKiBkYXRhOworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBvdXRwdXRT
dHJpbmdJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChvdXRwdXRMZW5n
dGgsIGRhdGEpOworICAgIGlmICghb3V0cHV0U3RyaW5nSW1wbCkKKyAgICAgICAgcmV0dXJuIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4oKTsKKworICAgIGNvbnN0IFVTdHJpbmcgZmlyc3RTdHJpbmcg
PSBzdHJpbmdzLmZpcnN0KCk7CisgICAgYXBwZW5kU3RyaW5nVG9EYXRhKGRhdGEsIGZpcnN0U3Ry
aW5nKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgc3RyaW5ncy5zaXplKCk7ICsraSkg
eworICAgICAgICBhcHBlbmRTdHJpbmdUb0RhdGEoZGF0YSwgc2VwYXJhdG9yKTsKKyAgICAgICAg
YXBwZW5kU3RyaW5nVG9EYXRhKGRhdGEsIHN0cmluZ3NbaV0pOworICAgIH0KKworICAgIEFTU0VS
VChkYXRhID09IChvdXRwdXRTdHJpbmdJbXBsLT5nZXRDaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+
KCkgKyBvdXRwdXRTdHJpbmdJbXBsLT5sZW5ndGgoKSkpOworICAgIHJldHVybiBvdXRwdXRTdHJp
bmdJbXBsLnJlbGVhc2UoKTsKK30KKworSlNWYWx1ZSBKU1N0cmluZ0pvaW5lcjo6YnVpbGQoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIGlmICghbV9pc1ZhbGlkKQorICAgICAgICByZXR1cm4gdGhy
b3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworCisgICAgaWYgKCFtX3N0cmluZ3Muc2l6ZSgpKQor
ICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZyhleGVjKTsKKworICAgIHNpemVfdCBzZXBhcmF0
b3JMZW5ndGggPSBtX3NlcGFyYXRvci5sZW5ndGgoKTsKKyAgICAvLyBGSVhNRTogYWRkIHNwZWNp
YWwgY2FzZXMgb2Ygam9pblN0cmluZ3MoKSBmb3IgKHNlcGFyYXRvckxlbmd0aCA9PSAwKSBhbmQg
KHNlcGFyYXRvckxlbmd0aCA9PSAxKS4KKyAgICBBU1NFUlQobV9zdHJpbmdzLnNpemUoKSA+IDAp
OworICAgIHNpemVfdCB0b3RhbFNlcGFyYWN0b3JzTGVuZ3RoID0gc2VwYXJhdG9yTGVuZ3RoICog
KG1fc3RyaW5ncy5zaXplKCkgLSAxKTsKKyAgICBzaXplX3Qgb3V0cHV0U3RyaW5nU2l6ZSA9IHRv
dGFsU2VwYXJhY3RvcnNMZW5ndGggKyBtX2N1bXVsYXRlZFN0cmluZ3NMZW5ndGg7CisKKyAgICBp
ZiAoIW91dHB1dFN0cmluZ1NpemUpCisgICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMp
OworCisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG91dHB1dFN0cmluZ0ltcGw7CisgICAgaWYgKG1f
aXM4Qml0cykKKyAgICAgICAgb3V0cHV0U3RyaW5nSW1wbCA9IGpvaW5TdHJpbmdzPExDaGFyPiht
X3N0cmluZ3MsIG1fc2VwYXJhdG9yLCBvdXRwdXRTdHJpbmdTaXplKTsKKyAgICBlbHNlCisgICAg
ICAgIG91dHB1dFN0cmluZ0ltcGwgPSBqb2luU3RyaW5nczxVQ2hhcj4obV9zdHJpbmdzLCBtX3Nl
cGFyYXRvciwgb3V0cHV0U3RyaW5nU2l6ZSk7CisKKyAgICBpZiAoIW91dHB1dFN0cmluZ0ltcGwp
CisgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisKKyAgICByZXR1
cm4gSlNTdHJpbmc6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIG91dHB1dFN0cmluZ0ltcGwu
cmVsZWFzZSgpKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdHJpbmdKb2luZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nSm9pbmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDlmODQ2YzFmMDIxYmYwM2ZkNjkwZmUzZGFiYjVl
OWQ2NDhmMjAyYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nSm9pbmVyLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSlNTdHJpbmdKb2luZXJfaAorI2Rl
ZmluZSBKU1N0cmluZ0pvaW5lcl9oCisKKyNpbmNsdWRlICJKU1ZhbHVlLmgiCisjaW5jbHVkZSAi
VVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIEV4ZWNTdGF0ZTsKKworCitjbGFzcyBKU1N0cmluZ0pvaW5lciB7CitwdWJsaWM6Cisg
ICAgSlNTdHJpbmdKb2luZXIoY29uc3QgVVN0cmluZyYgc2VwYXJhdG9yLCBzaXplX3Qgc3RyaW5n
Q291bnQpOworCisgICAgdm9pZCBhcHBlbmQoY29uc3QgVVN0cmluZyYpOworICAgIEpTVmFsdWUg
YnVpbGQoRXhlY1N0YXRlKik7CisKK3ByaXZhdGU6CisgICAgVVN0cmluZyBtX3NlcGFyYXRvcjsK
KyAgICBWZWN0b3I8VVN0cmluZz4gbV9zdHJpbmdzOworCisgICAgdW5zaWduZWQgbV9jdW11bGF0
ZWRTdHJpbmdzTGVuZ3RoOworICAgIGJvb2wgbV9pc1ZhbGlkOworICAgIGJvb2wgbV9pczhCaXRz
OworfTsKKworaW5saW5lIEpTU3RyaW5nSm9pbmVyOjpKU1N0cmluZ0pvaW5lcihjb25zdCBVU3Ry
aW5nJiBzZXBhcmF0b3IsIHNpemVfdCBzdHJpbmdDb3VudCkKKyAgICA6IG1fc2VwYXJhdG9yKHNl
cGFyYXRvcikKKyAgICAsIG1fY3VtdWxhdGVkU3RyaW5nc0xlbmd0aCgwKQorICAgICwgbV9pc1Zh
bGlkKHRydWUpCisgICAgLCBtX2lzOEJpdHMobV9zZXBhcmF0b3IuaXM4Qml0KCkpCit7CisgICAg
QVNTRVJUKCFtX3NlcGFyYXRvci5pc051bGwoKSk7CisgICAgbV9pc1ZhbGlkID0gbV9zdHJpbmdz
LnRyeVJlc2VydmVDYXBhY2l0eShzdHJpbmdDb3VudCk7Cit9CisKK2lubGluZSB2b2lkIEpTU3Ry
aW5nSm9pbmVyOjphcHBlbmQoY29uc3QgVVN0cmluZyYgc3RyKQoreworICAgIGlmICghbV9pc1Zh
bGlkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0cmluZ3MudW5jaGVja2VkQXBwZW5kKHN0
cik7CisgICAgaWYgKCFzdHIuaXNOdWxsKCkpIHsKKyAgICAgICAgbV9jdW11bGF0ZWRTdHJpbmdz
TGVuZ3RoICs9IHN0ci5sZW5ndGgoKTsKKyAgICAgICAgbV9pczhCaXRzID0gbV9pczhCaXRzICYm
IHN0ci5pczhCaXQoKTsKKyAgICB9Cit9CisKK30KKworI2VuZGlmCg==
</data>
<flag name="review"
          id="140282"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>