<?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>129365</bug_id>
          
          <creation_ts>2014-02-25 23:13:51 -0800</creation_ts>
          <short_desc>Extract named items caches in HTMLCollection as a class</short_desc>
          <delta_ts>2014-02-26 19:32:32 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</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>129361</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>benjamin</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>984647</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-02-25 23:13:51 -0800</bug_when>
    <thetext>m_idCache and m_nameCache combo could be extracted as a class to make HTMLCollection interface more comprehensible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>984650</commentid>
    <comment_count>1</comment_count>
      <attachid>225227</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-02-25 23:32:27 -0800</bug_when>
    <thetext>Created attachment 225227
Cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>984675</commentid>
    <comment_count>2</comment_count>
      <attachid>225234</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-02-26 00:47:13 -0800</bug_when>
    <thetext>Created attachment 225234
Cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>984916</commentid>
    <comment_count>3</comment_count>
      <attachid>225234</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-02-26 14:39:45 -0800</bug_when>
    <thetext>Comment on attachment 225234
Cleanup

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

r=me though it would be nice to improve naming consistency and factor more stuff to the class.

&gt; Source/WebCore/ChangeLog:15
&gt; +        Also removed m_isItemRefElementsCacheValid since it was only used by Microdata API removed in r153772.

Hah

&gt; Source/WebCore/html/HTMLAllCollection.cpp:61
&gt; -    if (Vector&lt;Element*&gt;* cache = idCache(name)) {
&gt; +    if (const Vector&lt;Element*&gt;* cache = caches.idCache(name)) {
&gt;          if (index &lt; cache-&gt;size())
&gt;              return cache-&gt;at(index);
&gt;          index -= cache-&gt;size();
&gt;      }
&gt;  
&gt; -    if (Vector&lt;Element*&gt;* cache = nameCache(name)) {
&gt; +    if (const Vector&lt;Element*&gt;* cache = caches.nameCache(name)) {
&gt;          if (index &lt; cache-&gt;size())
&gt;              return cache-&gt;at(index);
&gt;      }

It would be nice to factor this kind of stuff to the cache class.

&gt; Source/WebCore/html/HTMLCollection.cpp:413
&gt;      updateNameCache();
&gt; +    ASSERT(m_namedItemCaches);

Match the function and variable names (updateNamedElementCache()/m_namedElementCache or similar)

&gt; Source/WebCore/html/HTMLCollection.cpp:423
&gt; -    if (Vector&lt;Element*&gt;* idResults = idCache(name)) {
&gt; +    if (const Vector&lt;Element*&gt;* idResults = m_namedItemCaches-&gt;idCache(name)) {
&gt;          if (idResults-&gt;size())
&gt;              return idResults-&gt;at(0);
&gt;      }
&gt;  
&gt; -    if (Vector&lt;Element*&gt;* nameResults = nameCache(name)) {
&gt; +    if (const Vector&lt;Element*&gt;* nameResults = m_namedItemCaches-&gt;nameCache(name)) {
&gt;          if (nameResults-&gt;size())
&gt;              return nameResults-&gt;at(0);
&gt;      }

and this

&gt; Source/WebCore/html/HTMLCollection.h:41
&gt; +class CollectionNamedItemCaches {

&quot;Item&quot; adds nothing. How about something like CollectionNamedElementCache?

&gt; Source/WebCore/html/HTMLCollection.h:44
&gt; +    const Vector&lt;Element*&gt;* idCache(const AtomicString&amp; id) const { return find(m_idCache, id); }
&gt; +    const Vector&lt;Element*&gt;* nameCache(const AtomicString&amp; name) const { return find(m_nameCache, name); }

findElementsWithID/Name?

&gt; Source/WebCore/html/HTMLCollection.h:64
&gt; +    NodeCacheMap m_idCache;
&gt; +    NodeCacheMap m_nameCache;

Maybe the whole class is the &quot;cache&quot; and these can be something like m_idAttributeMap, m_nameAttributeMap

&gt; Source/WebCore/html/HTMLCollection.h:102
&gt; +    bool hasIdNameCache() const { return !!m_namedItemCaches; }

Please match the variable name.

&gt; Source/WebCore/html/HTMLCollection.h:125
&gt; +    const CollectionNamedItemCaches&amp; namedItemCachesAssertingExistence() const
&gt; +    {

Drop the AssertingExistence part. It is not important.

&gt; Source/WebCore/html/HTMLCollection.h:137
&gt; +    void invalidateIdNameCacheMaps() const;

Match with other naming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>985048</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-02-26 19:30:00 -0800</bug_when>
    <thetext>Committed r164772: &lt;http://trac.webkit.org/changeset/164772&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>985049</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-02-26 19:32:32 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Committed r164772: &lt;http://trac.webkit.org/changeset/164772&gt;

Removed the superfluous change log entry in http://trac.webkit.org/changeset/164773.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225227</attachid>
            <date>2014-02-25 23:32:27 -0800</date>
            <delta_ts>2014-02-26 00:47:12 -0800</delta_ts>
            <desc>Cleanup</desc>
            <filename>bug-129365-20140225233323.patch</filename>
            <type>text/plain</type>
            <size>15418</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY0NDkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWJiMDc3N2U3YTNjNjQ0
NTM1NTRlYTA5YmQ3YmM1MTgyOWE4NTM1My4uN2JlNGY1MzQ5NjQ3YmQ0OWI4Y2I4YTE4YjRjYjg5
YTdhYjViNTNiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQzIEBACiAyMDE0LTAyLTI1ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCisgICAgICAgIEV4dHJhY3QgbmFtZWQgaXRl
bXMgY2FjaGVzIGluIEhUTUxDb2xsZWN0aW9uIGFzIGEgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTM2NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4dHJhY3RlZCBDb2xsZWN0aW9uTmFtZWRJ
dGVtQ2FjaGVzLCBsaWtlIENvbGxlY3Rpb25JbmRleENhY2hlLCBvdXQgb2YgSFRNTENvbGxlY3Rp
b24uCisgICAgICAgIFdlIGNhbiBtb3ZlIG1vcmUgbmFtZWQgaXRlbSByZWxhdGVkIGZ1bmN0aW9u
cyBpbnRvIHRoaXMgY2xhc3MgaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICBIVE1MQ29sbGVjdGlv
bidzIG1lbWJlciB2YXJpYWJsZXMgbV9pc05hbWVDYWNoZVZhbGlkLCBtX2lkQ2FjaGUsIGFuZCBt
X25hbWVDYWNoZSB3ZXJlIHJlcGxhY2VkIGJ5CisgICAgICAgIGEgc2luZ2xlIHVuaXF1ZV9wdHIg
dGhhdCBob2xkcyBhbiBpbnN0YW5jZSBvZiBDb2xsZWN0aW9uTmFtZWRJdGVtQ2FjaGVzIHNpbmNl
IHRoaXMgb2JqZWN0IHJhcmVseQorICAgICAgICBleGlzdHMgaW4gbW9zdCBIVE1MQ29sbGVjdGlv
bnMuCisKKyAgICAgICAgQWxzbyByZW1vdmVkIG1faXNJdGVtUmVmRWxlbWVudHNDYWNoZVZhbGlk
IHNpbmNlIGl0IHdhcyBvbmx5IHVzZWQgYnkgTWljcm9kYXRhIEFQSSByZW1vdmVkIGluIHIxNTM3
NzIuCisKKyAgICAgICAgKiBodG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxBbGxDb2xsZWN0aW9uOjpuYW1lZEl0ZW1XaXRoSW5kZXgpOgorICAgICAgICAq
IGh0bWwvSFRNTENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rp
b246OkhUTUxDb2xsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjpp
bnZhbGlkYXRlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OmludmFs
aWRhdGVJZE5hbWVDYWNoZU1hcHMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246
Om5hbWVkSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6dXBkYXRlTmFt
ZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjpuYW1lZEl0ZW1zKToK
KyAgICAgICAgKiBodG1sL0hUTUxDb2xsZWN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xs
ZWN0aW9uTmFtZWRJdGVtQ2FjaGVzOjppZENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbGxl
Y3Rpb25OYW1lZEl0ZW1DYWNoZXM6Om5hbWVDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpDb2xs
ZWN0aW9uTmFtZWRJdGVtQ2FjaGVzOjphcHBlbmRJZENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbGxlY3Rpb25OYW1lZEl0ZW1DYWNoZXM6OmFwcGVuZE5hbWVDYWNoZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb2xsZWN0aW9uTmFtZWRJdGVtQ2FjaGVzOjpmaW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbGxlY3Rpb25OYW1lZEl0ZW1DYWNoZXM6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ29sbGVjdGlvbjo6aGFzSWROYW1lQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TENvbGxlY3Rpb246OmNyZWF0ZU5hbWVJdGVtQ2FjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDb2xsZWN0aW9uOjpuYW1lZEl0ZW1DYWNoZXNBc3NlcnRpbmdFeGlzdGVuY2UpOgorICAgICAg
ICAqIGh0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZSk6CisKKzIwMTQt
MDItMjUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKICAgICAgICAgQXZvaWQg
dW5uZWNlc3NhcnkgSFRNTCBDb2xsZWN0aW9uIGludmFsaWRhdGlvbnMgZm9yIGlkIGFuZCBuYW1l
IGF0dHJpYnV0ZSBjaGFuZ2VzCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjkzNjEKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
QWxsQ29sbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbGxDb2xsZWN0aW9u
LmNwcAppbmRleCAxODEyYWIxNzZhMTgzZGQ1OGNjNjI4OWMxNWU0MzZmNzQxNzE1M2I0Li5iZjZl
YmY0YmEzNzA5MzM4YTVmZGI1ZTIwYmM4ODUzOGQ2MjYyYTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcApAQCAtNDcsMTQgKzQ3LDE1IEBAIEhUTUxBbGxDb2xs
ZWN0aW9uOjp+SFRNTEFsbENvbGxlY3Rpb24oKQogTm9kZSogSFRNTEFsbENvbGxlY3Rpb246Om5h
bWVkSXRlbVdpdGhJbmRleChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIHVuc2lnbmVkIGluZGV4
KSBjb25zdAogewogICAgIHVwZGF0ZU5hbWVDYWNoZSgpOworICAgIGNvbnN0IENvbGxlY3Rpb25O
YW1lZEl0ZW1DYWNoZXMmIGNhY2hlcyA9IG5hbWVkSXRlbUNhY2hlc0Fzc2VydGluZ0V4aXN0ZW5j
ZSgpOwogCi0gICAgaWYgKFZlY3RvcjxFbGVtZW50Kj4qIGNhY2hlID0gaWRDYWNoZShuYW1lKSkg
eworICAgIGlmIChjb25zdCBWZWN0b3I8RWxlbWVudCo+KiBjYWNoZSA9IGNhY2hlcy5pZENhY2hl
KG5hbWUpKSB7CiAgICAgICAgIGlmIChpbmRleCA8IGNhY2hlLT5zaXplKCkpCiAgICAgICAgICAg
ICByZXR1cm4gY2FjaGUtPmF0KGluZGV4KTsKICAgICAgICAgaW5kZXggLT0gY2FjaGUtPnNpemUo
KTsKICAgICB9CiAKLSAgICBpZiAoVmVjdG9yPEVsZW1lbnQqPiogY2FjaGUgPSBuYW1lQ2FjaGUo
bmFtZSkpIHsKKyAgICBpZiAoY29uc3QgVmVjdG9yPEVsZW1lbnQqPiogY2FjaGUgPSBjYWNoZXMu
bmFtZUNhY2hlKG5hbWUpKSB7CiAgICAgICAgIGlmIChpbmRleCA8IGNhY2hlLT5zaXplKCkpCiAg
ICAgICAgICAgICByZXR1cm4gY2FjaGUtPmF0KGluZGV4KTsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTENvbGxlY3Rpb24uY3BwCmluZGV4IGYzMzljMjVlZTgyYWE2M2FiMjQ4M2M1MTk2ZThl
ZDQzNzVkMjA5MDguLjRiN2NkYWYwYmYxMDc3MmEzMzMyMzJlNTlkODBkZTBmZGEzZTIxZWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCkBAIC0xMzMsMTMgKzEzMywxMSBA
QCBzdGF0aWMgTm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlIGludmFsaWRhdGlvblR5cGVFeGNsdWRp
bmdJZEFuZE5hbWVBdHRyaWJ1dGVzKENvbAogCiBIVE1MQ29sbGVjdGlvbjo6SFRNTENvbGxlY3Rp
b24oQ29udGFpbmVyTm9kZSYgb3duZXJOb2RlLCBDb2xsZWN0aW9uVHlwZSB0eXBlLCBFbGVtZW50
VHJhdmVyc2FsVHlwZSB0cmF2ZXJzYWxUeXBlKQogICAgIDogbV9vd25lck5vZGUob3duZXJOb2Rl
KQotICAgICwgbV9yb290VHlwZShyb290VHlwZUZyb21Db2xsZWN0aW9uVHlwZSh0eXBlKSkKKyAg
ICAsIG1fY29sbGVjdGlvblR5cGUodHlwZSkKICAgICAsIG1faW52YWxpZGF0aW9uVHlwZShpbnZh
bGlkYXRpb25UeXBlRXhjbHVkaW5nSWRBbmROYW1lQXR0cmlidXRlcyh0eXBlKSkKKyAgICAsIG1f
cm9vdFR5cGUocm9vdFR5cGVGcm9tQ29sbGVjdGlvblR5cGUodHlwZSkpCiAgICAgLCBtX3Nob3Vs
ZE9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRyZW4oc2hvdWxkT25seUluY2x1ZGVEaXJlY3RDaGlsZHJl
bih0eXBlKSkKLSAgICAsIG1faXNOYW1lQ2FjaGVWYWxpZChmYWxzZSkKLSAgICAsIG1fY29sbGVj
dGlvblR5cGUodHlwZSkKICAgICAsIG1fdXNlc0N1c3RvbUZvcndhcmRPbmx5VHJhdmVyc2FsKHRy
YXZlcnNhbFR5cGUgPT0gQ3VzdG9tRm9yd2FyZE9ubHlUcmF2ZXJzYWwpCi0gICAgLCBtX2lzSXRl
bVJlZkVsZW1lbnRzQ2FjaGVWYWxpZChmYWxzZSkKIHsKICAgICBBU1NFUlQobV9yb290VHlwZSA9
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocm9vdFR5cGVGcm9tQ29sbGVjdGlvblR5cGUodHlwZSkp
KTsKICAgICBBU1NFUlQobV9pbnZhbGlkYXRpb25UeXBlID09IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihpbnZhbGlkYXRpb25UeXBlRXhjbHVkaW5nSWRBbmROYW1lQXR0cmlidXRlcyh0eXBlKSkpOwpA
QCAtMzY3LDcgKzM2NSw2IEBAIEVsZW1lbnQqIEhUTUxDb2xsZWN0aW9uOjpjb2xsZWN0aW9uVHJh
dmVyc2VCYWNrd2FyZChFbGVtZW50JiBjdXJyZW50LCB1bnNpZ25lZCBjCiB2b2lkIEhUTUxDb2xs
ZWN0aW9uOjppbnZhbGlkYXRlQ2FjaGUoKSBjb25zdAogewogICAgIG1faW5kZXhDYWNoZS5pbnZh
bGlkYXRlKCk7Ci0gICAgbV9pc0l0ZW1SZWZFbGVtZW50c0NhY2hlVmFsaWQgPSBmYWxzZTsKICAg
ICBpZiAoaGFzSWROYW1lQ2FjaGUoKSkKICAgICAgICAgaW52YWxpZGF0ZUlkTmFtZUNhY2hlTWFw
cygpOwogfQpAQCAtMzc2LDkgKzM3Myw3IEBAIHZvaWQgSFRNTENvbGxlY3Rpb246OmludmFsaWRh
dGVJZE5hbWVDYWNoZU1hcHMoKSBjb25zdAogewogICAgIEFTU0VSVChoYXNJZE5hbWVDYWNoZSgp
KTsKICAgICBkb2N1bWVudCgpLmNvbGxlY3Rpb25XaWxsQ2xlYXJJZE5hbWVNYXAoKnRoaXMpOwot
ICAgIG1faXNOYW1lQ2FjaGVWYWxpZCA9IGZhbHNlOwotICAgIG1faWRDYWNoZS5jbGVhcigpOwot
ICAgIG1fbmFtZUNhY2hlLmNsZWFyKCk7CisgICAgbV9uYW1lZEl0ZW1DYWNoZXMgPSBudWxscHRy
OwogfQogCiBOb2RlKiBIVE1MQ29sbGVjdGlvbjo6bmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSkgY29uc3QKQEAgLTQxNSwxMyArNDEwLDE0IEBAIE5vZGUqIEhUTUxDb2xsZWN0aW9u
OjpuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdAogCiAgICAgLy8gVGhl
IHBhdGhvbG9naWNhbCBjYXNlLiBXZSBuZWVkIHRvIHdhbGsgdGhlIGVudGlyZSBzdWJ0cmVlLgog
ICAgIHVwZGF0ZU5hbWVDYWNoZSgpOworICAgIEFTU0VSVChtX25hbWVkSXRlbUNhY2hlcyk7CiAK
LSAgICBpZiAoVmVjdG9yPEVsZW1lbnQqPiogaWRSZXN1bHRzID0gaWRDYWNoZShuYW1lKSkgewor
ICAgIGlmIChjb25zdCBWZWN0b3I8RWxlbWVudCo+KiBpZFJlc3VsdHMgPSBtX25hbWVkSXRlbUNh
Y2hlcy0+aWRDYWNoZShuYW1lKSkgewogICAgICAgICBpZiAoaWRSZXN1bHRzLT5zaXplKCkpCiAg
ICAgICAgICAgICByZXR1cm4gaWRSZXN1bHRzLT5hdCgwKTsKICAgICB9CiAKLSAgICBpZiAoVmVj
dG9yPEVsZW1lbnQqPiogbmFtZVJlc3VsdHMgPSBuYW1lQ2FjaGUobmFtZSkpIHsKKyAgICBpZiAo
Y29uc3QgVmVjdG9yPEVsZW1lbnQqPiogbmFtZVJlc3VsdHMgPSBtX25hbWVkSXRlbUNhY2hlcy0+
bmFtZUNhY2hlKG5hbWUpKSB7CiAgICAgICAgIGlmIChuYW1lUmVzdWx0cy0+c2l6ZSgpKQogICAg
ICAgICAgICAgcmV0dXJuIG5hbWVSZXN1bHRzLT5hdCgwKTsKICAgICB9CkBAIC00MzUsMjAgKzQz
MSwxOSBAQCB2b2lkIEhUTUxDb2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUoKSBjb25zdAogICAg
ICAgICByZXR1cm47CiAKICAgICBDb250YWluZXJOb2RlJiByb290ID0gcm9vdE5vZGUoKTsKKyAg
ICBDb2xsZWN0aW9uTmFtZWRJdGVtQ2FjaGVzJiBjYWNoZSA9IGNyZWF0ZU5hbWVJdGVtQ2FjaGVz
KCk7CiAKICAgICB1bnNpZ25lZCBjb3VudDsKICAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSBm
aXJzdEVsZW1lbnQocm9vdCk7IGVsZW1lbnQ7IGVsZW1lbnQgPSB0cmF2ZXJzZUZvcndhcmQoKmVs
ZW1lbnQsIDEsIGNvdW50LCByb290KSkgewogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlk
QXR0clZhbCA9IGVsZW1lbnQtPmdldElkQXR0cmlidXRlKCk7CiAgICAgICAgIGlmICghaWRBdHRy
VmFsLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGFwcGVuZElkQ2FjaGUoaWRBdHRyVmFsLCBlbGVt
ZW50KTsKKyAgICAgICAgICAgIGNhY2hlLmFwcGVuZElkQ2FjaGUoaWRBdHRyVmFsLCBlbGVtZW50
KTsKICAgICAgICAgaWYgKCFlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0clZhbCA9IGVsZW1l
bnQtPmdldE5hbWVBdHRyaWJ1dGUoKTsKICAgICAgICAgaWYgKCFuYW1lQXR0clZhbC5pc0VtcHR5
KCkgJiYgaWRBdHRyVmFsICE9IG5hbWVBdHRyVmFsICYmICh0eXBlKCkgIT0gRG9jQWxsIHx8IG5h
bWVTaG91bGRCZVZpc2libGVJbkRvY3VtZW50QWxsKHRvSFRNTEVsZW1lbnQoKmVsZW1lbnQpKSkp
Ci0gICAgICAgICAgICBhcHBlbmROYW1lQ2FjaGUobmFtZUF0dHJWYWwsIGVsZW1lbnQpOworICAg
ICAgICAgICAgY2FjaGUuYXBwZW5kTmFtZUNhY2hlKG5hbWVBdHRyVmFsLCBlbGVtZW50KTsKICAg
ICB9Ci0KLSAgICBzZXRIYXNJZE5hbWVDYWNoZSgpOwogfQogCiBib29sIEhUTUxDb2xsZWN0aW9u
OjpoYXNOYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdApAQCAtNDY0LDkg
KzQ1OSwxMCBAQCB2b2lkIEhUTUxDb2xsZWN0aW9uOjpuYW1lZEl0ZW1zKGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSwgVmVjdG9yPFJlZjxFbGVtZW50Pj4mCiAgICAgICAgIHJldHVybjsKIAogICAg
IHVwZGF0ZU5hbWVDYWNoZSgpOworICAgIEFTU0VSVChtX25hbWVkSXRlbUNhY2hlcyk7CiAKLSAg
ICBWZWN0b3I8RWxlbWVudCo+KiBpZFJlc3VsdHMgPSBpZENhY2hlKG5hbWUpOwotICAgIFZlY3Rv
cjxFbGVtZW50Kj4qIG5hbWVSZXN1bHRzID0gbmFtZUNhY2hlKG5hbWUpOworICAgIGNvbnN0IFZl
Y3RvcjxFbGVtZW50Kj4qIGlkUmVzdWx0cyA9IG1fbmFtZWRJdGVtQ2FjaGVzLT5pZENhY2hlKG5h
bWUpOworICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4qIG5hbWVSZXN1bHRzID0gbV9uYW1lZEl0
ZW1DYWNoZXMtPm5hbWVDYWNoZShuYW1lKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGlk
UmVzdWx0cyAmJiBpIDwgaWRSZXN1bHRzLT5zaXplKCk7ICsraSkKICAgICAgICAgcmVzdWx0LmFw
cGVuZCgqaWRSZXN1bHRzLT5hdChpKSk7CkBAIC00ODAsMTIgKzQ3Niw0IEBAIFBhc3NSZWZQdHI8
Tm9kZUxpc3Q+IEhUTUxDb2xsZWN0aW9uOjp0YWdzKGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICBy
ZXR1cm4gb3duZXJOb2RlKCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUobmFtZSk7CiB9CiAKLXZvaWQg
SFRNTENvbGxlY3Rpb246OmFwcGVuZChOb2RlQ2FjaGVNYXAmIG1hcCwgY29uc3QgQXRvbWljU3Ry
aW5nJiBrZXksIEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgT3duUHRyPFZlY3RvcjxFbGVtZW50
Kj4+JiB2ZWN0b3IgPSBtYXAuYWRkKGtleS5pbXBsKCksIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1
ZTsKLSAgICBpZiAoIXZlY3RvcikKLSAgICAgICAgdmVjdG9yID0gYWRvcHRQdHIobmV3IFZlY3Rv
cjxFbGVtZW50Kj4pOwotICAgIHZlY3Rvci0+YXBwZW5kKGVsZW1lbnQpOwotfQotCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xs
ZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgKaW5kZXggZmU2
YWE0NjQ2YWUxYjk2YzMwYzlmZTUwYjAwZmI2ZWQ1Yzg2ZDY0NS4uMzNkOTIyOGQ0NzA4YWUxNGY4
ZDc0MTJiMzg1NGI0M2U3MTdlNDkzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQ29sbGVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24u
aApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAo
a25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29p
dmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNywgMjAwOCwgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTEs
IDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0zOCw2ICszOCwzMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEVsZW1lbnQ7CiAKK2NsYXNzIENvbGxlY3Rpb25OYW1lZEl0ZW1DYWNoZXMgeworcHVibGlj
OgorICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4qIGlkQ2FjaGUoY29uc3QgQXRvbWljU3RyaW5n
JiBpZCkgY29uc3QgeyByZXR1cm4gZmluZChtX2lkQ2FjaGUsIGlkKTsgfQorICAgIGNvbnN0IFZl
Y3RvcjxFbGVtZW50Kj4qIG5hbWVDYWNoZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0
IHsgcmV0dXJuIGZpbmQobV9uYW1lQ2FjaGUsIG5hbWUpOyB9CisKKyAgICB2b2lkIGFwcGVuZElk
Q2FjaGUoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgRWxlbWVudCogZWxlbWVudCkgeyByZXR1cm4g
YXBwZW5kKG1faWRDYWNoZSwgaWQsIGVsZW1lbnQpOyB9CisgICAgdm9pZCBhcHBlbmROYW1lQ2Fj
aGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBFbGVtZW50KiBlbGVtZW50KSAgeyByZXR1cm4g
YXBwZW5kKG1fbmFtZUNhY2hlLCBuYW1lLCBlbGVtZW50KTsgfQorCitwcml2YXRlOgorICAgIHR5
cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgVmVjdG9yPEVsZW1lbnQqPj4gTm9kZUNh
Y2hlTWFwOworCisgICAgc3RhdGljIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4qIGZpbmQoY29uc3Qg
Tm9kZUNhY2hlTWFwJiBtYXAsIGNvbnN0IEF0b21pY1N0cmluZyYga2V5KQorICAgIHsKKyAgICAg
ICAgYXV0byBpdCA9IG1hcC5maW5kKGtleS5pbXBsKCkpOworICAgICAgICByZXR1cm4gaXQgIT0g
bWFwLmVuZCgpID8gJml0LT52YWx1ZSA6IG51bGxwdHI7CisgICAgfQorCisgICAgc3RhdGljIHZv
aWQgYXBwZW5kKE5vZGVDYWNoZU1hcCYgbWFwLCBjb25zdCBBdG9taWNTdHJpbmcmIGtleSwgRWxl
bWVudCogZWxlbWVudCkKKyAgICB7CisgICAgICAgIG1hcC5hZGQoa2V5LmltcGwoKSwgVmVjdG9y
PEVsZW1lbnQqPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKGVsZW1lbnQpOworICAgIH0KKwor
ICAgIE5vZGVDYWNoZU1hcCBtX2lkQ2FjaGU7CisgICAgTm9kZUNhY2hlTWFwIG1fbmFtZUNhY2hl
OworfTsKKwogY2xhc3MgSFRNTENvbGxlY3Rpb24gOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBw
dWJsaWMgUmVmQ291bnRlZDxIVE1MQ29sbGVjdGlvbj4gewogcHVibGljOgogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBjcmVhdGUoQ29udGFpbmVyTm9kZSYgYmFzZSwgQ29s
bGVjdGlvblR5cGUpOwpAQCAtNzMsNjAgKzk5LDUzIEBAIHB1YmxpYzoKICAgICBFbGVtZW50KiBj
b2xsZWN0aW9uVHJhdmVyc2VCYWNrd2FyZChFbGVtZW50JiwgdW5zaWduZWQgY291bnQpIGNvbnN0
OwogICAgIGJvb2wgY29sbGVjdGlvbkNhblRyYXZlcnNlQmFja3dhcmQoKSBjb25zdCB7IHJldHVy
biAhbV91c2VzQ3VzdG9tRm9yd2FyZE9ubHlUcmF2ZXJzYWw7IH0KIAotICAgIGJvb2wgaGFzSWRO
YW1lQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX2lzTmFtZUNhY2hlVmFsaWQ7IH0KKyAgICBib29s
IGhhc0lkTmFtZUNhY2hlKCkgY29uc3QgeyByZXR1cm4gISFtX25hbWVkSXRlbUNhY2hlczsgfQog
CiBwcm90ZWN0ZWQ6CiAgICAgZW51bSBFbGVtZW50VHJhdmVyc2FsVHlwZSB7IE5vcm1hbFRyYXZl
cnNhbCwgQ3VzdG9tRm9yd2FyZE9ubHlUcmF2ZXJzYWwgfTsKICAgICBIVE1MQ29sbGVjdGlvbihD
b250YWluZXJOb2RlJiBiYXNlLCBDb2xsZWN0aW9uVHlwZSwgRWxlbWVudFRyYXZlcnNhbFR5cGUg
PSBOb3JtYWxUcmF2ZXJzYWwpOwogCi0gICAgdm9pZCBpbnZhbGlkYXRlSWROYW1lQ2FjaGVNYXBz
KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZU5hbWVDYWNoZSgpIGNvbnN0OwogCi0g
ICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBPd25QdHI8VmVjdG9yPEVsZW1l
bnQqPj4+IE5vZGVDYWNoZU1hcDsKLSAgICBWZWN0b3I8RWxlbWVudCo+KiBpZENhY2hlKGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QgeyByZXR1cm4gbV9pZENhY2hlLmdldChuYW1lLmlt
cGwoKSk7IH0KLSAgICBWZWN0b3I8RWxlbWVudCo+KiBuYW1lQ2FjaGUoY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lKSBjb25zdCB7IHJldHVybiBtX25hbWVDYWNoZS5nZXQobmFtZS5pbXBsKCkpOyB9
Ci0gICAgdm9pZCBhcHBlbmRJZENhY2hlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgRWxlbWVu
dCogZWxlbWVudCkgY29uc3QgeyBhcHBlbmQobV9pZENhY2hlLCBuYW1lLCBlbGVtZW50KTsgfQot
ICAgIHZvaWQgYXBwZW5kTmFtZUNhY2hlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgRWxlbWVu
dCogZWxlbWVudCkgY29uc3QgeyBhcHBlbmQobV9uYW1lQ2FjaGUsIG5hbWUsIGVsZW1lbnQpOyB9
Ci0KICAgICBEb2N1bWVudCYgZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX293bmVyTm9kZS0+
ZG9jdW1lbnQoKTsgfQogICAgIENvbnRhaW5lck5vZGUmIHJvb3ROb2RlKCkgY29uc3Q7CiAgICAg
Ym9vbCB1c2VzQ3VzdG9tRm9yd2FyZE9ubHlUcmF2ZXJzYWwoKSBjb25zdCB7IHJldHVybiBtX3Vz
ZXNDdXN0b21Gb3J3YXJkT25seVRyYXZlcnNhbDsgfQogCi0gICAgYm9vbCBpc0l0ZW1SZWZFbGVt
ZW50c0NhY2hlVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lzSXRlbVJlZkVsZW1lbnRzQ2FjaGVW
YWxpZDsgfQotICAgIHZvaWQgc2V0SXRlbVJlZkVsZW1lbnRzQ2FjaGVWYWxpZCgpIGNvbnN0IHsg
bV9pc0l0ZW1SZWZFbGVtZW50c0NhY2hlVmFsaWQgPSB0cnVlOyB9Ci0KICAgICBOb2RlTGlzdFJv
b3RUeXBlIHJvb3RUeXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Tm9kZUxpc3RSb290
VHlwZT4obV9yb290VHlwZSk7IH0KIAotICAgIHZvaWQgc2V0SGFzSWROYW1lQ2FjaGUoKSBjb25z
dAorICAgIENvbGxlY3Rpb25OYW1lZEl0ZW1DYWNoZXMmIGNyZWF0ZU5hbWVJdGVtQ2FjaGVzKCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIG1faXNOYW1lQ2FjaGVWYWxpZCA9IHRydWU7CisgICAgICAg
IEFTU0VSVCghbV9uYW1lZEl0ZW1DYWNoZXMpOworICAgICAgICBtX25hbWVkSXRlbUNhY2hlcyA9
IHN0ZDo6bWFrZV91bmlxdWU8Q29sbGVjdGlvbk5hbWVkSXRlbUNhY2hlcz4oKTsKICAgICAgICAg
ZG9jdW1lbnQoKS5jb2xsZWN0aW9uQ2FjaGVkSWROYW1lTWFwKCp0aGlzKTsKKyAgICAgICAgcmV0
dXJuICptX25hbWVkSXRlbUNhY2hlczsKICAgICB9CiAKLXByaXZhdGU6Ci0gICAgc3RhdGljIHZv
aWQgYXBwZW5kKE5vZGVDYWNoZU1hcCYsIGNvbnN0IEF0b21pY1N0cmluZyYsIEVsZW1lbnQqKTsK
KyAgICBjb25zdCBDb2xsZWN0aW9uTmFtZWRJdGVtQ2FjaGVzJiBuYW1lZEl0ZW1DYWNoZXNBc3Nl
cnRpbmdFeGlzdGVuY2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCEhbV9uYW1lZEl0
ZW1DYWNoZXMpOworICAgICAgICByZXR1cm4gKm1fbmFtZWRJdGVtQ2FjaGVzOworICAgIH0KIAor
cHJpdmF0ZToKICAgICBFbGVtZW50KiBpdGVyYXRlRm9yUHJldmlvdXNFbGVtZW50KEVsZW1lbnQq
IGN1cnJlbnQpIGNvbnN0OwogICAgIEVsZW1lbnQqIGZpcnN0RWxlbWVudChDb250YWluZXJOb2Rl
JiByb290KSBjb25zdDsKICAgICBFbGVtZW50KiB0cmF2ZXJzZUZvcndhcmQoRWxlbWVudCYgY3Vy
cmVudCwgdW5zaWduZWQgY291bnQsIHVuc2lnbmVkJiB0cmF2ZXJzZWRDb3VudCwgQ29udGFpbmVy
Tm9kZSYgcm9vdCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIEVsZW1lbnQqIGN1c3RvbUVsZW1lbnRB
ZnRlcihFbGVtZW50KikgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIG51bGxw
dHI7IH0KKyAgICAKKyAgICB2b2lkIGludmFsaWRhdGVJZE5hbWVDYWNoZU1hcHMoKSBjb25zdDsK
IAogICAgIFJlZjxDb250YWluZXJOb2RlPiBtX293bmVyTm9kZTsKIAogICAgIG11dGFibGUgQ29s
bGVjdGlvbkluZGV4Q2FjaGU8SFRNTENvbGxlY3Rpb24sIEVsZW1lbnQ+IG1faW5kZXhDYWNoZTsK
KyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxDb2xsZWN0aW9uTmFtZWRJdGVtQ2FjaGVzPiBt
X25hbWVkSXRlbUNhY2hlczsKIAotICAgIGNvbnN0IHVuc2lnbmVkIG1fcm9vdFR5cGUgOiAyOwor
ICAgIGNvbnN0IHVuc2lnbmVkIG1fY29sbGVjdGlvblR5cGUgOiA1OwogICAgIGNvbnN0IHVuc2ln
bmVkIG1faW52YWxpZGF0aW9uVHlwZSA6IDQ7CisgICAgY29uc3QgdW5zaWduZWQgbV9yb290VHlw
ZSA6IDE7CiAgICAgY29uc3QgdW5zaWduZWQgbV9zaG91bGRPbmx5SW5jbHVkZURpcmVjdENoaWxk
cmVuIDogMTsKLQotICAgIG11dGFibGUgdW5zaWduZWQgbV9pc05hbWVDYWNoZVZhbGlkIDogMTsK
LSAgICBjb25zdCB1bnNpZ25lZCBtX2NvbGxlY3Rpb25UeXBlIDogNTsKICAgICBjb25zdCB1bnNp
Z25lZCBtX3VzZXNDdXN0b21Gb3J3YXJkT25seVRyYXZlcnNhbCA6IDE7Ci0gICAgbXV0YWJsZSB1
bnNpZ25lZCBtX2lzSXRlbVJlZkVsZW1lbnRzQ2FjaGVWYWxpZCA6IDE7Ci0KLSAgICBtdXRhYmxl
IE5vZGVDYWNoZU1hcCBtX2lkQ2FjaGU7Ci0gICAgbXV0YWJsZSBOb2RlQ2FjaGVNYXAgbV9uYW1l
Q2FjaGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmNwcAppbmRleCAzMTNjZTlhZWJjNjY0MmE5ZmJh
MTcwOWM2MTJjYmQzMzM2YWY1MTNmLi5mNDEwNGIwZDEzZjJlZTBjYTViZWU2NGIxNDkyNGRmMGY1
Mjk4MWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbHND
b2xsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbHND
b2xsZWN0aW9uLmNwcApAQCAtMTQwLDggKzE0MCw4IEBAIHZvaWQgSFRNTEZvcm1Db250cm9sc0Nv
bGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZSgpIGNvbnN0CiAgICAgaWYgKGhhc0lkTmFtZUNhY2hl
KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIENvbGxlY3Rpb25OYW1lZEl0ZW1DYWNoZXMmIGNh
Y2hlcyA9IGNyZWF0ZU5hbWVJdGVtQ2FjaGVzKCk7CiAgICAgSGFzaFNldDxBdG9taWNTdHJpbmdJ
bXBsKj4gZm91bmRJbnB1dEVsZW1lbnRzOwotCiAgICAgY29uc3QgVmVjdG9yPEZvcm1Bc3NvY2lh
dGVkRWxlbWVudCo+JiBlbGVtZW50c0FycmF5ID0gZm9ybUNvbnRyb2xFbGVtZW50cygpOwogCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVsZW1lbnRzQXJyYXkuc2l6ZSgpOyArK2kpIHsK
QEAgLTE1MSwxMSArMTUxLDExIEBAIHZvaWQgSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb246OnVw
ZGF0ZU5hbWVDYWNoZSgpIGNvbnN0CiAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlk
QXR0clZhbCA9IGVsZW1lbnQuZ2V0SWRBdHRyaWJ1dGUoKTsKICAgICAgICAgICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZUF0dHJWYWwgPSBlbGVtZW50LmdldE5hbWVBdHRyaWJ1dGUoKTsKICAg
ICAgICAgICAgIGlmICghaWRBdHRyVmFsLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGFw
cGVuZElkQ2FjaGUoaWRBdHRyVmFsLCAmZWxlbWVudCk7CisgICAgICAgICAgICAgICAgY2FjaGVz
LmFwcGVuZElkQ2FjaGUoaWRBdHRyVmFsLCAmZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgZm91
bmRJbnB1dEVsZW1lbnRzLmFkZChpZEF0dHJWYWwuaW1wbCgpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGlmICghbmFtZUF0dHJWYWwuaXNFbXB0eSgpICYmIGlkQXR0clZhbCAhPSBuYW1l
QXR0clZhbCkgewotICAgICAgICAgICAgICAgIGFwcGVuZE5hbWVDYWNoZShuYW1lQXR0clZhbCwg
JmVsZW1lbnQpOworICAgICAgICAgICAgICAgIGNhY2hlcy5hcHBlbmROYW1lQ2FjaGUobmFtZUF0
dHJWYWwsICZlbGVtZW50KTsKICAgICAgICAgICAgICAgICBmb3VuZElucHV0RWxlbWVudHMuYWRk
KG5hbWVBdHRyVmFsLmltcGwoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE2OCwx
MyArMTY4LDExIEBAIHZvaWQgSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb246OnVwZGF0ZU5hbWVD
YWNoZSgpIGNvbnN0CiAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkQXR0clZhbCA9
IGVsZW1lbnQuZ2V0SWRBdHRyaWJ1dGUoKTsKICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZUF0dHJWYWwgPSBlbGVtZW50LmdldE5hbWVBdHRyaWJ1dGUoKTsKICAgICAgICAgICAg
IGlmICghaWRBdHRyVmFsLmlzRW1wdHkoKSAmJiAhZm91bmRJbnB1dEVsZW1lbnRzLmNvbnRhaW5z
KGlkQXR0clZhbC5pbXBsKCkpKQotICAgICAgICAgICAgICAgIGFwcGVuZElkQ2FjaGUoaWRBdHRy
VmFsLCAmZWxlbWVudCk7CisgICAgICAgICAgICAgICAgY2FjaGVzLmFwcGVuZElkQ2FjaGUoaWRB
dHRyVmFsLCAmZWxlbWVudCk7CiAgICAgICAgICAgICBpZiAoIW5hbWVBdHRyVmFsLmlzRW1wdHko
KSAmJiBpZEF0dHJWYWwgIT0gbmFtZUF0dHJWYWwgJiYgIWZvdW5kSW5wdXRFbGVtZW50cy5jb250
YWlucyhuYW1lQXR0clZhbC5pbXBsKCkpKQotICAgICAgICAgICAgICAgIGFwcGVuZE5hbWVDYWNo
ZShuYW1lQXR0clZhbCwgJmVsZW1lbnQpOworICAgICAgICAgICAgICAgIGNhY2hlcy5hcHBlbmRO
YW1lQ2FjaGUobmFtZUF0dHJWYWwsICZlbGVtZW50KTsKICAgICAgICAgfQogICAgIH0KLQotICAg
IHNldEhhc0lkTmFtZUNhY2hlKCk7CiB9CiAKIHZvaWQgSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rp
b246OmludmFsaWRhdGVDYWNoZSgpIGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225234</attachid>
            <date>2014-02-26 00:47:13 -0800</date>
            <delta_ts>2014-02-26 14:39:45 -0800</delta_ts>
            <desc>Cleanup</desc>
            <filename>bug-129365-20140226004809.patch</filename>
            <type>text/plain</type>
            <size>15360</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY0NzA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDhjMWUyNjAwNDk0NzY5
YjQ0ZWRlN2VjODM4YzE1OGM4Yzg3ZDY3ZC4uMjkxNDBiZDY2OTA3ZDAyODMxYmRhMTBlODJiMTUx
NGMwZTM5NWNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDE0LTAyLTI1ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEV4dHJhY3QgbmFtZWQgaXRl
bXMgY2FjaGVzIGluIEhUTUxDb2xsZWN0aW9uIGFzIGEgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTM2NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4dHJhY3RlZCBDb2xsZWN0aW9uTmFtZWRJ
dGVtQ2FjaGVzLCBsaWtlIENvbGxlY3Rpb25JbmRleENhY2hlLCBvdXQgb2YgSFRNTENvbGxlY3Rp
b24uCisgICAgICAgIFdlIGNhbiBtb3ZlIG1vcmUgbmFtZWQgaXRlbSByZWxhdGVkIGZ1bmN0aW9u
cyBpbnRvIHRoaXMgY2xhc3MgaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICBIVE1MQ29sbGVjdGlv
bidzIG1lbWJlciB2YXJpYWJsZXMgbV9pc05hbWVDYWNoZVZhbGlkLCBtX2lkQ2FjaGUsIGFuZCBt
X25hbWVDYWNoZSB3ZXJlIHJlcGxhY2VkIGJ5CisgICAgICAgIGEgc2luZ2xlIHVuaXF1ZV9wdHIg
dGhhdCBob2xkcyBhbiBpbnN0YW5jZSBvZiBDb2xsZWN0aW9uTmFtZWRJdGVtQ2FjaGVzIHNpbmNl
IHRoaXMgb2JqZWN0IHJhcmVseQorICAgICAgICBleGlzdHMgaW4gbW9zdCBIVE1MQ29sbGVjdGlv
bnMuCisKKyAgICAgICAgQWxzbyByZW1vdmVkIG1faXNJdGVtUmVmRWxlbWVudHNDYWNoZVZhbGlk
IHNpbmNlIGl0IHdhcyBvbmx5IHVzZWQgYnkgTWljcm9kYXRhIEFQSSByZW1vdmVkIGluIHIxNTM3
NzIuCisKKyAgICAgICAgKiBodG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxBbGxDb2xsZWN0aW9uOjpuYW1lZEl0ZW1XaXRoSW5kZXgpOgorICAgICAgICAq
IGh0bWwvSFRNTENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rp
b246OkhUTUxDb2xsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjpp
bnZhbGlkYXRlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OmludmFs
aWRhdGVJZE5hbWVDYWNoZU1hcHMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246
Om5hbWVkSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6dXBkYXRlTmFt
ZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjpuYW1lZEl0ZW1zKToK
KyAgICAgICAgKiBodG1sL0hUTUxDb2xsZWN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xs
ZWN0aW9uTmFtZWRJdGVtQ2FjaGVzOjppZENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbGxl
Y3Rpb25OYW1lZEl0ZW1DYWNoZXM6Om5hbWVDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpDb2xs
ZWN0aW9uTmFtZWRJdGVtQ2FjaGVzOjphcHBlbmRJZENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbGxlY3Rpb25OYW1lZEl0ZW1DYWNoZXM6OmFwcGVuZE5hbWVDYWNoZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb2xsZWN0aW9uTmFtZWRJdGVtQ2FjaGVzOjpmaW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbGxlY3Rpb25OYW1lZEl0ZW1DYWNoZXM6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ29sbGVjdGlvbjo6aGFzSWROYW1lQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TENvbGxlY3Rpb246OmNyZWF0ZU5hbWVJdGVtQ2FjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDb2xsZWN0aW9uOjpuYW1lZEl0ZW1DYWNoZXNBc3NlcnRpbmdFeGlzdGVuY2UpOgorICAgICAg
ICAqIGh0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZSk6CisKIDIwMTQt
MDItMjYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQXZvaWQg
dW5uZWNlc3NhcnkgSFRNTCBDb2xsZWN0aW9uIGludmFsaWRhdGlvbnMgZm9yIGlkIGFuZCBuYW1l
IGF0dHJpYnV0ZSBjaGFuZ2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxB
bGxDb2xsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFsbENvbGxlY3Rpb24u
Y3BwCmluZGV4IDE4MTJhYjE3NmExODNkZDU4Y2M2Mjg5YzE1ZTQzNmY3NDE3MTUzYjQuLmJmNmVi
ZjRiYTM3MDkzMzhhNWZkYjVlMjBiYzg4NTM4ZDYyNjJhNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEFsbENvbGxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEFsbENvbGxlY3Rpb24uY3BwCkBAIC00NywxNCArNDcsMTUgQEAgSFRNTEFsbENvbGxl
Y3Rpb246On5IVE1MQWxsQ29sbGVjdGlvbigpCiBOb2RlKiBIVE1MQWxsQ29sbGVjdGlvbjo6bmFt
ZWRJdGVtV2l0aEluZGV4KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgdW5zaWduZWQgaW5kZXgp
IGNvbnN0CiB7CiAgICAgdXBkYXRlTmFtZUNhY2hlKCk7CisgICAgY29uc3QgQ29sbGVjdGlvbk5h
bWVkSXRlbUNhY2hlcyYgY2FjaGVzID0gbmFtZWRJdGVtQ2FjaGVzQXNzZXJ0aW5nRXhpc3RlbmNl
KCk7CiAKLSAgICBpZiAoVmVjdG9yPEVsZW1lbnQqPiogY2FjaGUgPSBpZENhY2hlKG5hbWUpKSB7
CisgICAgaWYgKGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4qIGNhY2hlID0gY2FjaGVzLmlkQ2FjaGUo
bmFtZSkpIHsKICAgICAgICAgaWYgKGluZGV4IDwgY2FjaGUtPnNpemUoKSkKICAgICAgICAgICAg
IHJldHVybiBjYWNoZS0+YXQoaW5kZXgpOwogICAgICAgICBpbmRleCAtPSBjYWNoZS0+c2l6ZSgp
OwogICAgIH0KIAotICAgIGlmIChWZWN0b3I8RWxlbWVudCo+KiBjYWNoZSA9IG5hbWVDYWNoZShu
YW1lKSkgeworICAgIGlmIChjb25zdCBWZWN0b3I8RWxlbWVudCo+KiBjYWNoZSA9IGNhY2hlcy5u
YW1lQ2FjaGUobmFtZSkpIHsKICAgICAgICAgaWYgKGluZGV4IDwgY2FjaGUtPnNpemUoKSkKICAg
ICAgICAgICAgIHJldHVybiBjYWNoZS0+YXQoaW5kZXgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQ29sbGVjdGlvbi5jcHAKaW5kZXggZjMzOWMyNWVlODJhYTYzYWIyNDgzYzUxOTZlOGVk
NDM3NWQyMDkwOC4uNGI3Y2RhZjBiZjEwNzcyYTMzMzIzMmU1OWQ4MGRlMGZkYTNlMjFlZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAKQEAgLTEzMywxMyArMTMzLDExIEBA
IHN0YXRpYyBOb2RlTGlzdEludmFsaWRhdGlvblR5cGUgaW52YWxpZGF0aW9uVHlwZUV4Y2x1ZGlu
Z0lkQW5kTmFtZUF0dHJpYnV0ZXMoQ29sCiAKIEhUTUxDb2xsZWN0aW9uOjpIVE1MQ29sbGVjdGlv
bihDb250YWluZXJOb2RlJiBvd25lck5vZGUsIENvbGxlY3Rpb25UeXBlIHR5cGUsIEVsZW1lbnRU
cmF2ZXJzYWxUeXBlIHRyYXZlcnNhbFR5cGUpCiAgICAgOiBtX293bmVyTm9kZShvd25lck5vZGUp
Ci0gICAgLCBtX3Jvb3RUeXBlKHJvb3RUeXBlRnJvbUNvbGxlY3Rpb25UeXBlKHR5cGUpKQorICAg
ICwgbV9jb2xsZWN0aW9uVHlwZSh0eXBlKQogICAgICwgbV9pbnZhbGlkYXRpb25UeXBlKGludmFs
aWRhdGlvblR5cGVFeGNsdWRpbmdJZEFuZE5hbWVBdHRyaWJ1dGVzKHR5cGUpKQorICAgICwgbV9y
b290VHlwZShyb290VHlwZUZyb21Db2xsZWN0aW9uVHlwZSh0eXBlKSkKICAgICAsIG1fc2hvdWxk
T25seUluY2x1ZGVEaXJlY3RDaGlsZHJlbihzaG91bGRPbmx5SW5jbHVkZURpcmVjdENoaWxkcmVu
KHR5cGUpKQotICAgICwgbV9pc05hbWVDYWNoZVZhbGlkKGZhbHNlKQotICAgICwgbV9jb2xsZWN0
aW9uVHlwZSh0eXBlKQogICAgICwgbV91c2VzQ3VzdG9tRm9yd2FyZE9ubHlUcmF2ZXJzYWwodHJh
dmVyc2FsVHlwZSA9PSBDdXN0b21Gb3J3YXJkT25seVRyYXZlcnNhbCkKLSAgICAsIG1faXNJdGVt
UmVmRWxlbWVudHNDYWNoZVZhbGlkKGZhbHNlKQogewogICAgIEFTU0VSVChtX3Jvb3RUeXBlID09
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyb290VHlwZUZyb21Db2xsZWN0aW9uVHlwZSh0eXBlKSkp
OwogICAgIEFTU0VSVChtX2ludmFsaWRhdGlvblR5cGUgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGludmFsaWRhdGlvblR5cGVFeGNsdWRpbmdJZEFuZE5hbWVBdHRyaWJ1dGVzKHR5cGUpKSk7CkBA
IC0zNjcsNyArMzY1LDYgQEAgRWxlbWVudCogSFRNTENvbGxlY3Rpb246OmNvbGxlY3Rpb25UcmF2
ZXJzZUJhY2t3YXJkKEVsZW1lbnQmIGN1cnJlbnQsIHVuc2lnbmVkIGMKIHZvaWQgSFRNTENvbGxl
Y3Rpb246OmludmFsaWRhdGVDYWNoZSgpIGNvbnN0CiB7CiAgICAgbV9pbmRleENhY2hlLmludmFs
aWRhdGUoKTsKLSAgICBtX2lzSXRlbVJlZkVsZW1lbnRzQ2FjaGVWYWxpZCA9IGZhbHNlOwogICAg
IGlmIChoYXNJZE5hbWVDYWNoZSgpKQogICAgICAgICBpbnZhbGlkYXRlSWROYW1lQ2FjaGVNYXBz
KCk7CiB9CkBAIC0zNzYsOSArMzczLDcgQEAgdm9pZCBIVE1MQ29sbGVjdGlvbjo6aW52YWxpZGF0
ZUlkTmFtZUNhY2hlTWFwcygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGhhc0lkTmFtZUNhY2hlKCkp
OwogICAgIGRvY3VtZW50KCkuY29sbGVjdGlvbldpbGxDbGVhcklkTmFtZU1hcCgqdGhpcyk7Ci0g
ICAgbV9pc05hbWVDYWNoZVZhbGlkID0gZmFsc2U7Ci0gICAgbV9pZENhY2hlLmNsZWFyKCk7Ci0g
ICAgbV9uYW1lQ2FjaGUuY2xlYXIoKTsKKyAgICBtX25hbWVkSXRlbUNhY2hlcyA9IG51bGxwdHI7
CiB9CiAKIE5vZGUqIEhUTUxDb2xsZWN0aW9uOjpuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lKSBjb25zdApAQCAtNDE1LDEzICs0MTAsMTQgQEAgTm9kZSogSFRNTENvbGxlY3Rpb246
Om5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0CiAKICAgICAvLyBUaGUg
cGF0aG9sb2dpY2FsIGNhc2UuIFdlIG5lZWQgdG8gd2FsayB0aGUgZW50aXJlIHN1YnRyZWUuCiAg
ICAgdXBkYXRlTmFtZUNhY2hlKCk7CisgICAgQVNTRVJUKG1fbmFtZWRJdGVtQ2FjaGVzKTsKIAot
ICAgIGlmIChWZWN0b3I8RWxlbWVudCo+KiBpZFJlc3VsdHMgPSBpZENhY2hlKG5hbWUpKSB7Cisg
ICAgaWYgKGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4qIGlkUmVzdWx0cyA9IG1fbmFtZWRJdGVtQ2Fj
aGVzLT5pZENhY2hlKG5hbWUpKSB7CiAgICAgICAgIGlmIChpZFJlc3VsdHMtPnNpemUoKSkKICAg
ICAgICAgICAgIHJldHVybiBpZFJlc3VsdHMtPmF0KDApOwogICAgIH0KIAotICAgIGlmIChWZWN0
b3I8RWxlbWVudCo+KiBuYW1lUmVzdWx0cyA9IG5hbWVDYWNoZShuYW1lKSkgeworICAgIGlmIChj
b25zdCBWZWN0b3I8RWxlbWVudCo+KiBuYW1lUmVzdWx0cyA9IG1fbmFtZWRJdGVtQ2FjaGVzLT5u
YW1lQ2FjaGUobmFtZSkpIHsKICAgICAgICAgaWYgKG5hbWVSZXN1bHRzLT5zaXplKCkpCiAgICAg
ICAgICAgICByZXR1cm4gbmFtZVJlc3VsdHMtPmF0KDApOwogICAgIH0KQEAgLTQzNSwyMCArNDMx
LDE5IEBAIHZvaWQgSFRNTENvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZSgpIGNvbnN0CiAgICAg
ICAgIHJldHVybjsKIAogICAgIENvbnRhaW5lck5vZGUmIHJvb3QgPSByb290Tm9kZSgpOworICAg
IENvbGxlY3Rpb25OYW1lZEl0ZW1DYWNoZXMmIGNhY2hlID0gY3JlYXRlTmFtZUl0ZW1DYWNoZXMo
KTsKIAogICAgIHVuc2lnbmVkIGNvdW50OwogICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IGZp
cnN0RWxlbWVudChyb290KTsgZWxlbWVudDsgZWxlbWVudCA9IHRyYXZlcnNlRm9yd2FyZCgqZWxl
bWVudCwgMSwgY291bnQsIHJvb3QpKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRB
dHRyVmFsID0gZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKTsKICAgICAgICAgaWYgKCFpZEF0dHJW
YWwuaXNFbXB0eSgpKQotICAgICAgICAgICAgYXBwZW5kSWRDYWNoZShpZEF0dHJWYWwsIGVsZW1l
bnQpOworICAgICAgICAgICAgY2FjaGUuYXBwZW5kSWRDYWNoZShpZEF0dHJWYWwsIGVsZW1lbnQp
OwogICAgICAgICBpZiAoIWVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVBdHRyVmFsID0gZWxlbWVu
dC0+Z2V0TmFtZUF0dHJpYnV0ZSgpOwogICAgICAgICBpZiAoIW5hbWVBdHRyVmFsLmlzRW1wdHko
KSAmJiBpZEF0dHJWYWwgIT0gbmFtZUF0dHJWYWwgJiYgKHR5cGUoKSAhPSBEb2NBbGwgfHwgbmFt
ZVNob3VsZEJlVmlzaWJsZUluRG9jdW1lbnRBbGwodG9IVE1MRWxlbWVudCgqZWxlbWVudCkpKSkK
LSAgICAgICAgICAgIGFwcGVuZE5hbWVDYWNoZShuYW1lQXR0clZhbCwgZWxlbWVudCk7CisgICAg
ICAgICAgICBjYWNoZS5hcHBlbmROYW1lQ2FjaGUobmFtZUF0dHJWYWwsIGVsZW1lbnQpOwogICAg
IH0KLQotICAgIHNldEhhc0lkTmFtZUNhY2hlKCk7CiB9CiAKIGJvb2wgSFRNTENvbGxlY3Rpb246
Omhhc05hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0CkBAIC00NjQsOSAr
NDU5LDEwIEBAIHZvaWQgSFRNTENvbGxlY3Rpb246Om5hbWVkSXRlbXMoY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lLCBWZWN0b3I8UmVmPEVsZW1lbnQ+PiYKICAgICAgICAgcmV0dXJuOwogCiAgICAg
dXBkYXRlTmFtZUNhY2hlKCk7CisgICAgQVNTRVJUKG1fbmFtZWRJdGVtQ2FjaGVzKTsKIAotICAg
IFZlY3RvcjxFbGVtZW50Kj4qIGlkUmVzdWx0cyA9IGlkQ2FjaGUobmFtZSk7Ci0gICAgVmVjdG9y
PEVsZW1lbnQqPiogbmFtZVJlc3VsdHMgPSBuYW1lQ2FjaGUobmFtZSk7CisgICAgY29uc3QgVmVj
dG9yPEVsZW1lbnQqPiogaWRSZXN1bHRzID0gbV9uYW1lZEl0ZW1DYWNoZXMtPmlkQ2FjaGUobmFt
ZSk7CisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiogbmFtZVJlc3VsdHMgPSBtX25hbWVkSXRl
bUNhY2hlcy0+bmFtZUNhY2hlKG5hbWUpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaWRS
ZXN1bHRzICYmIGkgPCBpZFJlc3VsdHMtPnNpemUoKTsgKytpKQogICAgICAgICByZXN1bHQuYXBw
ZW5kKCppZFJlc3VsdHMtPmF0KGkpKTsKQEAgLTQ4MCwxMiArNDc2LDQgQEAgUGFzc1JlZlB0cjxO
b2RlTGlzdD4gSFRNTENvbGxlY3Rpb246OnRhZ3MoY29uc3QgU3RyaW5nJiBuYW1lKQogICAgIHJl
dHVybiBvd25lck5vZGUoKS5nZXRFbGVtZW50c0J5VGFnTmFtZShuYW1lKTsKIH0KIAotdm9pZCBI
VE1MQ29sbGVjdGlvbjo6YXBwZW5kKE5vZGVDYWNoZU1hcCYgbWFwLCBjb25zdCBBdG9taWNTdHJp
bmcmIGtleSwgRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBPd25QdHI8VmVjdG9yPEVsZW1lbnQq
Pj4mIHZlY3RvciA9IG1hcC5hZGQoa2V5LmltcGwoKSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVl
OwotICAgIGlmICghdmVjdG9yKQotICAgICAgICB2ZWN0b3IgPSBhZG9wdFB0cihuZXcgVmVjdG9y
PEVsZW1lbnQqPik7Ci0gICAgdmVjdG9yLT5hcHBlbmQoZWxlbWVudCk7Ci19Ci0KIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxl
Y3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uaAppbmRleCA3ZTIz
Nzk5OThhNmU5YzVjNzk0ZTgyOTc2MTk0MWFkOGExMGE4NmUyLi4zM2Q5MjI4ZDQ3MDhhZTE0Zjhk
NzQxMmIzODU0YjQzZTcxN2U0OTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDb2xsZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5o
CkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChr
bm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2
aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4LCAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMSwg
MjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTM4LDYgKzM4LDMyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgRWxlbWVudDsKIAorY2xhc3MgQ29sbGVjdGlvbk5hbWVkSXRlbUNhY2hlcyB7CitwdWJsaWM6
CisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiogaWRDYWNoZShjb25zdCBBdG9taWNTdHJpbmcm
IGlkKSBjb25zdCB7IHJldHVybiBmaW5kKG1faWRDYWNoZSwgaWQpOyB9CisgICAgY29uc3QgVmVj
dG9yPEVsZW1lbnQqPiogbmFtZUNhY2hlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3Qg
eyByZXR1cm4gZmluZChtX25hbWVDYWNoZSwgbmFtZSk7IH0KKworICAgIHZvaWQgYXBwZW5kSWRD
YWNoZShjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBFbGVtZW50KiBlbGVtZW50KSB7IHJldHVybiBh
cHBlbmQobV9pZENhY2hlLCBpZCwgZWxlbWVudCk7IH0KKyAgICB2b2lkIGFwcGVuZE5hbWVDYWNo
ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIEVsZW1lbnQqIGVsZW1lbnQpICB7IHJldHVybiBh
cHBlbmQobV9uYW1lQ2FjaGUsIG5hbWUsIGVsZW1lbnQpOyB9CisKK3ByaXZhdGU6CisgICAgdHlw
ZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBWZWN0b3I8RWxlbWVudCo+PiBOb2RlQ2Fj
aGVNYXA7CisKKyAgICBzdGF0aWMgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiogZmluZChjb25zdCBO
b2RlQ2FjaGVNYXAmIG1hcCwgY29uc3QgQXRvbWljU3RyaW5nJiBrZXkpCisgICAgeworICAgICAg
ICBhdXRvIGl0ID0gbWFwLmZpbmQoa2V5LmltcGwoKSk7CisgICAgICAgIHJldHVybiBpdCAhPSBt
YXAuZW5kKCkgPyAmaXQtPnZhbHVlIDogbnVsbHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9p
ZCBhcHBlbmQoTm9kZUNhY2hlTWFwJiBtYXAsIGNvbnN0IEF0b21pY1N0cmluZyYga2V5LCBFbGVt
ZW50KiBlbGVtZW50KQorICAgIHsKKyAgICAgICAgbWFwLmFkZChrZXkuaW1wbCgpLCBWZWN0b3I8
RWxlbWVudCo+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoZWxlbWVudCk7CisgICAgfQorCisg
ICAgTm9kZUNhY2hlTWFwIG1faWRDYWNoZTsKKyAgICBOb2RlQ2FjaGVNYXAgbV9uYW1lQ2FjaGU7
Cit9OworCiBjbGFzcyBIVE1MQ29sbGVjdGlvbiA6IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1
YmxpYyBSZWZDb3VudGVkPEhUTUxDb2xsZWN0aW9uPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGNyZWF0ZShDb250YWluZXJOb2RlJiBiYXNlLCBDb2xs
ZWN0aW9uVHlwZSk7CkBAIC03Myw2MCArOTksNTMgQEAgcHVibGljOgogICAgIEVsZW1lbnQqIGNv
bGxlY3Rpb25UcmF2ZXJzZUJhY2t3YXJkKEVsZW1lbnQmLCB1bnNpZ25lZCBjb3VudCkgY29uc3Q7
CiAgICAgYm9vbCBjb2xsZWN0aW9uQ2FuVHJhdmVyc2VCYWNrd2FyZCgpIGNvbnN0IHsgcmV0dXJu
ICFtX3VzZXNDdXN0b21Gb3J3YXJkT25seVRyYXZlcnNhbDsgfQogCi0gICAgYm9vbCBoYXNJZE5h
bWVDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNOYW1lQ2FjaGVWYWxpZDsgfQorICAgIGJvb2wg
aGFzSWROYW1lQ2FjaGUoKSBjb25zdCB7IHJldHVybiAhIW1fbmFtZWRJdGVtQ2FjaGVzOyB9CiAK
IHByb3RlY3RlZDoKICAgICBlbnVtIEVsZW1lbnRUcmF2ZXJzYWxUeXBlIHsgTm9ybWFsVHJhdmVy
c2FsLCBDdXN0b21Gb3J3YXJkT25seVRyYXZlcnNhbCB9OwogICAgIEhUTUxDb2xsZWN0aW9uKENv
bnRhaW5lck5vZGUmIGJhc2UsIENvbGxlY3Rpb25UeXBlLCBFbGVtZW50VHJhdmVyc2FsVHlwZSA9
IE5vcm1hbFRyYXZlcnNhbCk7CiAKLSAgICB2b2lkIGludmFsaWRhdGVJZE5hbWVDYWNoZU1hcHMo
KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTmFtZUNhY2hlKCkgY29uc3Q7CiAKLSAg
ICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIE93blB0cjxWZWN0b3I8RWxlbWVu
dCo+Pj4gTm9kZUNhY2hlTWFwOwotICAgIFZlY3RvcjxFbGVtZW50Kj4qIGlkQ2FjaGUoY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdCB7IHJldHVybiBtX2lkQ2FjaGUuZ2V0KG5hbWUuaW1w
bCgpKTsgfQotICAgIFZlY3RvcjxFbGVtZW50Kj4qIG5hbWVDYWNoZShjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZUNhY2hlLmdldChuYW1lLmltcGwoKSk7IH0K
LSAgICB2b2lkIGFwcGVuZElkQ2FjaGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBFbGVtZW50
KiBlbGVtZW50KSBjb25zdCB7IGFwcGVuZChtX2lkQ2FjaGUsIG5hbWUsIGVsZW1lbnQpOyB9Ci0g
ICAgdm9pZCBhcHBlbmROYW1lQ2FjaGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBFbGVtZW50
KiBlbGVtZW50KSBjb25zdCB7IGFwcGVuZChtX25hbWVDYWNoZSwgbmFtZSwgZWxlbWVudCk7IH0K
LQogICAgIERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXJOb2RlLT5k
b2N1bWVudCgpOyB9CiAgICAgQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUoKSBjb25zdDsKICAgICBi
b29sIHVzZXNDdXN0b21Gb3J3YXJkT25seVRyYXZlcnNhbCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNl
c0N1c3RvbUZvcndhcmRPbmx5VHJhdmVyc2FsOyB9CiAKLSAgICBib29sIGlzSXRlbVJlZkVsZW1l
bnRzQ2FjaGVWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNJdGVtUmVmRWxlbWVudHNDYWNoZVZh
bGlkOyB9Ci0gICAgdm9pZCBzZXRJdGVtUmVmRWxlbWVudHNDYWNoZVZhbGlkKCkgY29uc3QgeyBt
X2lzSXRlbVJlZkVsZW1lbnRzQ2FjaGVWYWxpZCA9IHRydWU7IH0KLQogICAgIE5vZGVMaXN0Um9v
dFR5cGUgcm9vdFR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxOb2RlTGlzdFJvb3RU
eXBlPihtX3Jvb3RUeXBlKTsgfQogCi0gICAgdm9pZCBzZXRIYXNJZE5hbWVDYWNoZSgpIGNvbnN0
CisgICAgQ29sbGVjdGlvbk5hbWVkSXRlbUNhY2hlcyYgY3JlYXRlTmFtZUl0ZW1DYWNoZXMoKSBj
b25zdAogICAgIHsKLSAgICAgICAgbV9pc05hbWVDYWNoZVZhbGlkID0gdHJ1ZTsKKyAgICAgICAg
QVNTRVJUKCFtX25hbWVkSXRlbUNhY2hlcyk7CisgICAgICAgIG1fbmFtZWRJdGVtQ2FjaGVzID0g
c3RkOjptYWtlX3VuaXF1ZTxDb2xsZWN0aW9uTmFtZWRJdGVtQ2FjaGVzPigpOwogICAgICAgICBk
b2N1bWVudCgpLmNvbGxlY3Rpb25DYWNoZWRJZE5hbWVNYXAoKnRoaXMpOworICAgICAgICByZXR1
cm4gKm1fbmFtZWRJdGVtQ2FjaGVzOwogICAgIH0KIAotcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9p
ZCBhcHBlbmQoTm9kZUNhY2hlTWFwJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgRWxlbWVudCopOwor
ICAgIGNvbnN0IENvbGxlY3Rpb25OYW1lZEl0ZW1DYWNoZXMmIG5hbWVkSXRlbUNhY2hlc0Fzc2Vy
dGluZ0V4aXN0ZW5jZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoISFtX25hbWVkSXRl
bUNhY2hlcyk7CisgICAgICAgIHJldHVybiAqbV9uYW1lZEl0ZW1DYWNoZXM7CisgICAgfQogCitw
cml2YXRlOgogICAgIEVsZW1lbnQqIGl0ZXJhdGVGb3JQcmV2aW91c0VsZW1lbnQoRWxlbWVudCog
Y3VycmVudCkgY29uc3Q7CiAgICAgRWxlbWVudCogZmlyc3RFbGVtZW50KENvbnRhaW5lck5vZGUm
IHJvb3QpIGNvbnN0OwogICAgIEVsZW1lbnQqIHRyYXZlcnNlRm9yd2FyZChFbGVtZW50JiBjdXJy
ZW50LCB1bnNpZ25lZCBjb3VudCwgdW5zaWduZWQmIHRyYXZlcnNlZENvdW50LCBDb250YWluZXJO
b2RlJiByb290KSBjb25zdDsKIAogICAgIHZpcnR1YWwgRWxlbWVudCogY3VzdG9tRWxlbWVudEFm
dGVyKEVsZW1lbnQqKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gbnVsbHB0
cjsgfQorICAgIAorICAgIHZvaWQgaW52YWxpZGF0ZUlkTmFtZUNhY2hlTWFwcygpIGNvbnN0Owog
CiAgICAgUmVmPENvbnRhaW5lck5vZGU+IG1fb3duZXJOb2RlOwogCiAgICAgbXV0YWJsZSBDb2xs
ZWN0aW9uSW5kZXhDYWNoZTxIVE1MQ29sbGVjdGlvbiwgRWxlbWVudD4gbV9pbmRleENhY2hlOwor
ICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPENvbGxlY3Rpb25OYW1lZEl0ZW1DYWNoZXM+IG1f
bmFtZWRJdGVtQ2FjaGVzOwogCi0gICAgY29uc3QgdW5zaWduZWQgbV9yb290VHlwZSA6IDE7Cisg
ICAgY29uc3QgdW5zaWduZWQgbV9jb2xsZWN0aW9uVHlwZSA6IDU7CiAgICAgY29uc3QgdW5zaWdu
ZWQgbV9pbnZhbGlkYXRpb25UeXBlIDogNDsKKyAgICBjb25zdCB1bnNpZ25lZCBtX3Jvb3RUeXBl
IDogMTsKICAgICBjb25zdCB1bnNpZ25lZCBtX3Nob3VsZE9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRy
ZW4gOiAxOwotCi0gICAgbXV0YWJsZSB1bnNpZ25lZCBtX2lzTmFtZUNhY2hlVmFsaWQgOiAxOwot
ICAgIGNvbnN0IHVuc2lnbmVkIG1fY29sbGVjdGlvblR5cGUgOiA1OwogICAgIGNvbnN0IHVuc2ln
bmVkIG1fdXNlc0N1c3RvbUZvcndhcmRPbmx5VHJhdmVyc2FsIDogMTsKLSAgICBtdXRhYmxlIHVu
c2lnbmVkIG1faXNJdGVtUmVmRWxlbWVudHNDYWNoZVZhbGlkIDogMTsKLQotICAgIG11dGFibGUg
Tm9kZUNhY2hlTWFwIG1faWRDYWNoZTsKLSAgICBtdXRhYmxlIE5vZGVDYWNoZU1hcCBtX25hbWVD
YWNoZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwCmluZGV4IDMxM2NlOWFlYmM2NjQyYTlmYmEx
NzA5YzYxMmNiZDMzMzZhZjUxM2YuLmY0MTA0YjBkMTNmMmVlMGNhNWJlZTY0YjE0OTI0ZGYwZjUy
OTgxZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0Nv
bGxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0Nv
bGxlY3Rpb24uY3BwCkBAIC0xNDAsOCArMTQwLDggQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xzQ29s
bGVjdGlvbjo6dXBkYXRlTmFtZUNhY2hlKCkgY29uc3QKICAgICBpZiAoaGFzSWROYW1lQ2FjaGUo
KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgQ29sbGVjdGlvbk5hbWVkSXRlbUNhY2hlcyYgY2Fj
aGVzID0gY3JlYXRlTmFtZUl0ZW1DYWNoZXMoKTsKICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0lt
cGwqPiBmb3VuZElucHV0RWxlbWVudHM7Ci0KICAgICBjb25zdCBWZWN0b3I8Rm9ybUFzc29jaWF0
ZWRFbGVtZW50Kj4mIGVsZW1lbnRzQXJyYXkgPSBmb3JtQ29udHJvbEVsZW1lbnRzKCk7CiAKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWxlbWVudHNBcnJheS5zaXplKCk7ICsraSkgewpA
QCAtMTUxLDExICsxNTEsMTEgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6dXBk
YXRlTmFtZUNhY2hlKCkgY29uc3QKICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRB
dHRyVmFsID0gZWxlbWVudC5nZXRJZEF0dHJpYnV0ZSgpOwogICAgICAgICAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lQXR0clZhbCA9IGVsZW1lbnQuZ2V0TmFtZUF0dHJpYnV0ZSgpOwogICAg
ICAgICAgICAgaWYgKCFpZEF0dHJWYWwuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgYXBw
ZW5kSWRDYWNoZShpZEF0dHJWYWwsICZlbGVtZW50KTsKKyAgICAgICAgICAgICAgICBjYWNoZXMu
YXBwZW5kSWRDYWNoZShpZEF0dHJWYWwsICZlbGVtZW50KTsKICAgICAgICAgICAgICAgICBmb3Vu
ZElucHV0RWxlbWVudHMuYWRkKGlkQXR0clZhbC5pbXBsKCkpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgaWYgKCFuYW1lQXR0clZhbC5pc0VtcHR5KCkgJiYgaWRBdHRyVmFsICE9IG5hbWVB
dHRyVmFsKSB7Ci0gICAgICAgICAgICAgICAgYXBwZW5kTmFtZUNhY2hlKG5hbWVBdHRyVmFsLCAm
ZWxlbWVudCk7CisgICAgICAgICAgICAgICAgY2FjaGVzLmFwcGVuZE5hbWVDYWNoZShuYW1lQXR0
clZhbCwgJmVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGZvdW5kSW5wdXRFbGVtZW50cy5hZGQo
bmFtZUF0dHJWYWwuaW1wbCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTY4LDEz
ICsxNjgsMTEgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6dXBkYXRlTmFtZUNh
Y2hlKCkgY29uc3QKICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRBdHRyVmFsID0g
ZWxlbWVudC5nZXRJZEF0dHJpYnV0ZSgpOwogICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lQXR0clZhbCA9IGVsZW1lbnQuZ2V0TmFtZUF0dHJpYnV0ZSgpOwogICAgICAgICAgICAg
aWYgKCFpZEF0dHJWYWwuaXNFbXB0eSgpICYmICFmb3VuZElucHV0RWxlbWVudHMuY29udGFpbnMo
aWRBdHRyVmFsLmltcGwoKSkpCi0gICAgICAgICAgICAgICAgYXBwZW5kSWRDYWNoZShpZEF0dHJW
YWwsICZlbGVtZW50KTsKKyAgICAgICAgICAgICAgICBjYWNoZXMuYXBwZW5kSWRDYWNoZShpZEF0
dHJWYWwsICZlbGVtZW50KTsKICAgICAgICAgICAgIGlmICghbmFtZUF0dHJWYWwuaXNFbXB0eSgp
ICYmIGlkQXR0clZhbCAhPSBuYW1lQXR0clZhbCAmJiAhZm91bmRJbnB1dEVsZW1lbnRzLmNvbnRh
aW5zKG5hbWVBdHRyVmFsLmltcGwoKSkpCi0gICAgICAgICAgICAgICAgYXBwZW5kTmFtZUNhY2hl
KG5hbWVBdHRyVmFsLCAmZWxlbWVudCk7CisgICAgICAgICAgICAgICAgY2FjaGVzLmFwcGVuZE5h
bWVDYWNoZShuYW1lQXR0clZhbCwgJmVsZW1lbnQpOwogICAgICAgICB9CiAgICAgfQotCi0gICAg
c2V0SGFzSWROYW1lQ2FjaGUoKTsKIH0KIAogdm9pZCBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlv
bjo6aW52YWxpZGF0ZUNhY2hlKCkgY29uc3QK
</data>
<flag name="review"
          id="249358"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>