<?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>123895</bug_id>
          
          <creation_ts>2013-11-06 08:37:53 -0800</creation_ts>
          <short_desc>Move array position caching out from HTMLCollection</short_desc>
          <delta_ts>2013-11-06 10:17:22 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>kling</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>947708</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-11-06 08:37:53 -0800</bug_when>
    <thetext>This caching complicated the logic but is used by a single subclass (HTMLFormControlsCollection) only. The subclass can do the caching itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947719</commentid>
    <comment_count>1</comment_count>
      <attachid>216180</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-11-06 08:54:03 -0800</bug_when>
    <thetext>Created attachment 216180
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947739</commentid>
    <comment_count>2</comment_count>
      <attachid>216180</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-11-06 09:33:40 -0800</bug_when>
    <thetext>Comment on attachment 216180
patch

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

&gt; Source/WebCore/html/HTMLCollection.cpp:134
&gt; +HTMLCollection::HTMLCollection(ContainerNode&amp; ownerNode, CollectionType type, ElementTraversalType traversalType)

I think that the enum is great for the argument.

&gt; Source/WebCore/html/HTMLCollection.cpp:144
&gt; +    , m_elementTraversalType(traversalType)

But for the local, I might suggest we use a boolean named m_requiresCustomForwardTraversal or something like that.

In other words, I liked the readability of the old pattern where the data member was a boolean.

&gt; Source/WebCore/html/HTMLCollection.h:76
&gt; +    Element* traverseFirstElement(ContainerNode* root) const;

Nothing new, but I am not a big fan of the name “traverse first element”. The meaning of traverse here is unclear.

&gt; Source/WebCore/html/HTMLCollection.h:143
&gt; +    virtual Element* virtualElementAfter(Element*) const { ASSERT_NOT_REACHED(); return nullptr; }

So we can’t use pure virtual because we only need this for classes that are CustomForwardOnlyTraversal. Ugly.

&gt; Source/WebCore/html/HTMLFormControlsCollection.cpp:77
&gt; +    unsigned i = 0;
&gt; +    for (; i &lt; elementVector.size(); ++i) {
&gt; +        auto&amp; associatedElement = *elementVector[i];
&gt; +        if (associatedElement.isEnumeratable() &amp;&amp; &amp;associatedElement.asHTMLElement() == &amp;element)
&gt; +            break;
&gt; +    }
&gt; +    return i;

I would put the return inside the loop, and use a normal for loop without an “outside the loop” i variable. I think that would also make it slightly clearer what the function returns when nothing is found. But maybe this is more elegant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947767</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-11-06 10:17:22 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/158758</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216180</attachid>
            <date>2013-11-06 08:54:03 -0800</date>
            <delta_ts>2013-11-06 09:33:40 -0800</delta_ts>
            <desc>patch</desc>
            <filename>htmlcollection-array-position.patch</filename>
            <type>text/plain</type>
            <size>21908</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1ODc0OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDEzLTExLTA2ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIGFycmF5IHBvc2l0aW9u
IGNhY2hpbmcgb3V0IGZyb20gSFRNTENvbGxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzg5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2FjaGluZyBjb21wbGljYXRlcyB0aGUgbG9n
aWMgYnV0IGlzIHVzZWQgYnkgYSBzaW5nbGUgc3ViY2xhc3MKKyAgICAgICAgKEhUTUxGb3JtQ29u
dHJvbHNDb2xsZWN0aW9uKSBvbmx5LiBUaGUgc3ViY2xhc3MgY2FuIGRvIHRoZSBjYWNoaW5nIGl0
c2VsZi4KKworICAgICAgICAqIGh0bWwvSFRNTEFsbENvbGxlY3Rpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEFsbENvbGxlY3Rpb246OkhUTUxBbGxDb2xsZWN0aW9uKToKKyAgICAgICAg
KiBodG1sL0hUTUxDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0
aW9uOjpIVE1MQ29sbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjppdGVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjplbGVtZW50QmVmb3JlT3JBZnRlckNhY2hlZEVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OnRyYXZlcnNlRmlyc3RF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjp0cmF2ZXJzZUZvcndh
cmRUb09mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6aW52YWxpZGF0
ZUNhY2hlKToKKyAgICAgICAgCisgICAgICAgICAgICBNYWtlIGNhY2hlIGludmFsaWRhdGlvbiB2
aXJ0dWFsIHNvIHdlIGNhbiBjbGVhciBIVE1MVGFibGVSb3dzQ29sbGVjdGlvbiBpbmRleCBjYWNo
ZS4KKworICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246Om5hbWVkSXRlbSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6dXBkYXRlTmFtZUNhY2hlKToKKyAgICAgICAg
CisgICAgICAgICAgICBVc2UgdHJhdmVyc2VGb3J3YXJkVG9PZmZzZXQgaW5zdGVhZCB0cmF2ZXJz
ZU5leHRFbGVtZW50LiBUaGlzIGFsbG93cyByZW1vdmFsIG9mIHRyYXZlcnNlTmV4dEVsZW1lbnQu
CisKKyAgICAgICAgKiBodG1sL0hUTUxDb2xsZWN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MQ29sbGVjdGlvbjo6dXNlc0N1c3RvbUZvcndhcmRPbmx5VHJhdmVyc2FsKToKKyAgICAgICAg
CisgICAgICAgICAgICBSZW5hbWVkIHRoZSBlbnVtIGFuZCB0aGUgYWNjZXNzb3IgdG8gYmUgbW9y
ZSBpbmZvcm1hdGl2ZS4KKworICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OnNldENh
Y2hlZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OnZpcnR1YWxF
bGVtZW50QWZ0ZXIpOgorICAgICAgICAKKyAgICAgICAgICAgIFJlbmFtZWQgZnJvbSB2aXJ0dWFs
SXRlbUFmdGVyLgorCisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6SFRNTEZv
cm1Db250cm9sc0NvbGxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEZvcm1Bc3NvY2lh
dGVkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlv
bjo6dmlydHVhbEVsZW1lbnRBZnRlcik6CisgICAgICAgIAorICAgICAgICAgICAgTW92ZSB0aGUg
YXJyYXkgcG9zaXRpb24gY2FjaGluZyBsb2dpYyBoZXJlLgorCisgICAgICAgIChXZWJDb3JlOjpI
VE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6aW52YWxpZGF0ZUNhY2hlKToKKyAgICAgICAgKiBo
dG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmg6CisgICAgICAgICogaHRtbC9IVE1MTmFt
ZUNvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5hbWVDb2xsZWN0aW9uOjpI
VE1MTmFtZUNvbGxlY3Rpb24pOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25zQ29sbGVjdGlvbjo6SFRNTE9wdGlv
bnNDb2xsZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uOjpIVE1MVGFibGVS
b3dzQ29sbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVSb3dzQ29sbGVjdGlv
bjo6dmlydHVhbEVsZW1lbnRBZnRlcik6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVSb3dzQ29s
bGVjdGlvbi5oOgorCiAyMDEzLTExLTA2ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4LCBzdHlsZSgpIHJldHVy
biB0eXBlIGlzIG5vdyBhIHJlZmVyZW5jZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEFsbENvbGxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEFsbENvbGxlY3Rpb24uY3BwCShyZXZpc2lvbiAxNTg2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBA
QCBQYXNzUmVmPEhUTUxBbGxDb2xsZWN0aW9uPiBIVE1MQWxsQ29sbGVjCiB9CiAKIEhUTUxBbGxD
b2xsZWN0aW9uOjpIVE1MQWxsQ29sbGVjdGlvbihEb2N1bWVudCYgZG9jdW1lbnQsIENvbGxlY3Rp
b25UeXBlIHR5cGUpCi0gICAgOiBIVE1MQ29sbGVjdGlvbihkb2N1bWVudCwgdHlwZSwgRG9lc05v
dE92ZXJyaWRlSXRlbUFmdGVyKQorICAgIDogSFRNTENvbGxlY3Rpb24oZG9jdW1lbnQsIHR5cGUp
CiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCShyZXZp
c2lvbiAxNTg2NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTMxLDcgKzEzMSw3IEBAIHN0YXRpYyBOb2RlTGlzdEludmFsaWRh
dGlvblR5cGUgaW52YWxpZGEKICAgICByZXR1cm4gRG9Ob3RJbnZhbGlkYXRlT25BdHRyaWJ1dGVD
aGFuZ2VzOwogfQogCi1IVE1MQ29sbGVjdGlvbjo6SFRNTENvbGxlY3Rpb24oQ29udGFpbmVyTm9k
ZSYgb3duZXJOb2RlLCBDb2xsZWN0aW9uVHlwZSB0eXBlLCBJdGVtQWZ0ZXJPdmVycmlkZVR5cGUg
aXRlbUFmdGVyT3ZlcnJpZGVUeXBlKQorSFRNTENvbGxlY3Rpb246OkhUTUxDb2xsZWN0aW9uKENv
bnRhaW5lck5vZGUmIG93bmVyTm9kZSwgQ29sbGVjdGlvblR5cGUgdHlwZSwgRWxlbWVudFRyYXZl
cnNhbFR5cGUgdHJhdmVyc2FsVHlwZSkKICAgICA6IG1fb3duZXJOb2RlKG93bmVyTm9kZSkKICAg
ICAsIG1fY2FjaGVkRWxlbWVudChudWxscHRyKQogICAgICwgbV9pc0xlbmd0aENhY2hlVmFsaWQo
ZmFsc2UpCkBAIC0xNDEsNyArMTQxLDcgQEAgSFRNTENvbGxlY3Rpb246OkhUTUxDb2xsZWN0aW9u
KENvbnRhaW5lcgogICAgICwgbV9zaG91bGRPbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuKHNob3Vs
ZE9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRyZW4odHlwZSkpCiAgICAgLCBtX2lzTmFtZUNhY2hlVmFs
aWQoZmFsc2UpCiAgICAgLCBtX2NvbGxlY3Rpb25UeXBlKHR5cGUpCi0gICAgLCBtX292ZXJyaWRl
c0l0ZW1BZnRlcihpdGVtQWZ0ZXJPdmVycmlkZVR5cGUgPT0gT3ZlcnJpZGVzSXRlbUFmdGVyKQor
ICAgICwgbV9lbGVtZW50VHJhdmVyc2FsVHlwZSh0cmF2ZXJzYWxUeXBlKQogICAgICwgbV9pc0l0
ZW1SZWZFbGVtZW50c0NhY2hlVmFsaWQoZmFsc2UpCiB7CiAgICAgQVNTRVJUKG1fcm9vdFR5cGUg
PT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJvb3RUeXBlRnJvbUNvbGxlY3Rpb25UeXBlKHR5cGUp
KSk7CkBAIC0xNTMsNyArMTUzLDcgQEAgSFRNTENvbGxlY3Rpb246OkhUTUxDb2xsZWN0aW9uKENv
bnRhaW5lcgogCiBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBIVE1MQ29sbGVjdGlvbjo6Y3Jl
YXRlKENvbnRhaW5lck5vZGUmIGJhc2UsIENvbGxlY3Rpb25UeXBlIHR5cGUpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBIVE1MQ29sbGVjdGlvbihiYXNlLCB0eXBlLCBEb2VzTm90T3ZlcnJp
ZGVJdGVtQWZ0ZXIpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxDb2xsZWN0aW9uKGJh
c2UsIHR5cGUpKTsKIH0KIAogSFRNTENvbGxlY3Rpb246On5IVE1MQ29sbGVjdGlvbigpCkBAIC0z
MDUsMTUgKzMwNSw2IEBAIGJvb2wgQUxXQVlTX0lOTElORSBIVE1MQ29sbGVjdGlvbjo6aXNGaXIK
ICAgICByZXR1cm4gb2Zmc2V0IDwgZGlzdGFuY2VGcm9tQ2FjaGVkSXRlbTsKIH0KIAotQUxXQVlT
X0lOTElORSB2b2lkIEhUTUxDb2xsZWN0aW9uOjpzZXRDYWNoZWRFbGVtZW50KEVsZW1lbnQmIGVs
ZW1lbnQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgZWxlbWVudHNBcnJheU9mZnNldCkgY29u
c3QKLXsKLSAgICBzZXRDYWNoZWRFbGVtZW50KGVsZW1lbnQsIG9mZnNldCk7Ci0gICAgaWYgKG92
ZXJyaWRlc0l0ZW1BZnRlcigpKQotICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBIVE1MQ29sbGVj
dGlvbio+KHRoaXMpLT5tX2NhY2hlZEVsZW1lbnRzQXJyYXlPZmZzZXQgPSBlbGVtZW50c0FycmF5
T2Zmc2V0OwotCi0gICAgQVNTRVJUKG92ZXJyaWRlc0l0ZW1BZnRlcigpIHx8ICFlbGVtZW50c0Fy
cmF5T2Zmc2V0KTsKLX0KLQogdW5zaWduZWQgSFRNTENvbGxlY3Rpb246Omxlbmd0aCgpIGNvbnN0
CiB7CiAgICAgaWYgKGlzTGVuZ3RoQ2FjaGVWYWxpZCgpKQpAQCAtMzM1LDE5ICszMjYsMTggQEAg
Tm9kZSogSFRNTENvbGxlY3Rpb246Oml0ZW0odW5zaWduZWQgb2ZmcwogCiAgICAgQ29udGFpbmVy
Tm9kZSYgcm9vdCA9IHJvb3ROb2RlKCk7CiAKLSAgICBpZiAoaXNMZW5ndGhDYWNoZVZhbGlkKCkg
JiYgIW92ZXJyaWRlc0l0ZW1BZnRlcigpICYmIGlzTGFzdEl0ZW1DbG9zZXJUaGFuTGFzdE9yQ2Fj
aGVkSXRlbShvZmZzZXQpKSB7CisgICAgaWYgKGlzTGVuZ3RoQ2FjaGVWYWxpZCgpICYmICF1c2Vz
Q3VzdG9tRm9yd2FyZE9ubHlUcmF2ZXJzYWwoKSAmJiBpc0xhc3RJdGVtQ2xvc2VyVGhhbkxhc3RP
ckNhY2hlZEl0ZW0ob2Zmc2V0KSkgewogICAgICAgICBFbGVtZW50KiBsYXN0SXRlbSA9IGl0ZW1C
ZWZvcmUoMCk7CiAgICAgICAgIEFTU0VSVChsYXN0SXRlbSk7Ci0gICAgICAgIHNldENhY2hlZEVs
ZW1lbnQoKmxhc3RJdGVtLCBjYWNoZWRMZW5ndGgoKSAtIDEsIDApOwotICAgIH0gZWxzZSBpZiAo
IWlzRWxlbWVudENhY2hlVmFsaWQoKSB8fCBpc0ZpcnN0SXRlbUNsb3NlclRoYW5DYWNoZWRJdGVt
KG9mZnNldCkgfHwgKG92ZXJyaWRlc0l0ZW1BZnRlcigpICYmIG9mZnNldCA8IGNhY2hlZEVsZW1l
bnRPZmZzZXQoKSkpIHsKLSAgICAgICAgdW5zaWduZWQgb2Zmc2V0SW5BcnJheSA9IDA7Ci0gICAg
ICAgIEVsZW1lbnQqIGZpcnN0SXRlbSA9IHRyYXZlcnNlRmlyc3RFbGVtZW50KG9mZnNldEluQXJy
YXksICZyb290KTsKKyAgICAgICAgc2V0Q2FjaGVkRWxlbWVudCgqbGFzdEl0ZW0sIGNhY2hlZExl
bmd0aCgpIC0gMSk7CisgICAgfSBlbHNlIGlmICghaXNFbGVtZW50Q2FjaGVWYWxpZCgpIHx8IGlz
Rmlyc3RJdGVtQ2xvc2VyVGhhbkNhY2hlZEl0ZW0ob2Zmc2V0KSB8fCAodXNlc0N1c3RvbUZvcndh
cmRPbmx5VHJhdmVyc2FsKCkgJiYgb2Zmc2V0IDwgY2FjaGVkRWxlbWVudE9mZnNldCgpKSkgewor
ICAgICAgICBFbGVtZW50KiBmaXJzdEl0ZW0gPSB0cmF2ZXJzZUZpcnN0RWxlbWVudCgmcm9vdCk7
CiAKICAgICAgICAgaWYgKCFmaXJzdEl0ZW0pIHsKICAgICAgICAgICAgIHNldExlbmd0aENhY2hl
KDApOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KLSAgICAgICAgc2V0Q2FjaGVk
RWxlbWVudCgqZmlyc3RJdGVtLCAwLCBvZmZzZXRJbkFycmF5KTsKKyAgICAgICAgc2V0Q2FjaGVk
RWxlbWVudCgqZmlyc3RJdGVtLCAwKTsKICAgICAgICAgQVNTRVJUKCFjYWNoZWRFbGVtZW50T2Zm
c2V0KCkpOwogICAgIH0KIApAQCAtMzY1LDEyICszNTUsMTIgQEAgaW5saW5lIEVsZW1lbnQqIEhU
TUxDb2xsZWN0aW9uOjplbGVtZW50QgogICAgIEFTU0VSVChjdXJyZW50T2Zmc2V0ICE9IG9mZnNl
dCk7CiAKICAgICBpZiAob2Zmc2V0IDwgY2FjaGVkRWxlbWVudE9mZnNldCgpKSB7Ci0gICAgICAg
IEFTU0VSVCghb3ZlcnJpZGVzSXRlbUFmdGVyKCkpOworICAgICAgICBBU1NFUlQoIXVzZXNDdXN0
b21Gb3J3YXJkT25seVRyYXZlcnNhbCgpKTsKICAgICAgICAgd2hpbGUgKChjdXJyZW50SXRlbSA9
IGl0ZW1CZWZvcmUoY3VycmVudEl0ZW0pKSkgewogICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRP
ZmZzZXQpOwogICAgICAgICAgICAgY3VycmVudE9mZnNldC0tOwogICAgICAgICAgICAgaWYgKGN1
cnJlbnRPZmZzZXQgPT0gb2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgc2V0Q2FjaGVkRWxlbWVu
dCgqY3VycmVudEl0ZW0sIGN1cnJlbnRPZmZzZXQsIDApOworICAgICAgICAgICAgICAgIHNldENh
Y2hlZEVsZW1lbnQoKmN1cnJlbnRJdGVtLCBjdXJyZW50T2Zmc2V0KTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gY3VycmVudEl0ZW07CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTM3OCwy
NCArMzY4LDE3IEBAIGlubGluZSBFbGVtZW50KiBIVE1MQ29sbGVjdGlvbjo6ZWxlbWVudEIKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgdW5zaWduZWQgb2Zmc2V0SW5BcnJheSA9IDA7
Ci0gICAgY3VycmVudEl0ZW0gPSB0cmF2ZXJzZUZvcndhcmRUb09mZnNldChvZmZzZXQsIGN1cnJl
bnRJdGVtLCBjdXJyZW50T2Zmc2V0LCBvZmZzZXRJbkFycmF5LCByb290KTsKKyAgICBjdXJyZW50
SXRlbSA9IHRyYXZlcnNlRm9yd2FyZFRvT2Zmc2V0KG9mZnNldCwgY3VycmVudEl0ZW0sIGN1cnJl
bnRPZmZzZXQsIHJvb3QpOwogCiAgICAgaWYgKCFjdXJyZW50SXRlbSkgewogICAgICAgICAvLyBE
aWQgbm90IGZpbmQgdGhlIGl0ZW0uIE9uIHBsdXMgc2lkZSwgd2Ugbm93IGtub3cgdGhlIGxlbmd0
aC4KICAgICAgICAgc2V0TGVuZ3RoQ2FjaGUoY3VycmVudE9mZnNldCArIDEpOwogICAgICAgICBy
ZXR1cm4gMDsKICAgICB9Ci0gICAgc2V0Q2FjaGVkRWxlbWVudCgqY3VycmVudEl0ZW0sIGN1cnJl
bnRPZmZzZXQsIG9mZnNldEluQXJyYXkpOworICAgIHNldENhY2hlZEVsZW1lbnQoKmN1cnJlbnRJ
dGVtLCBjdXJyZW50T2Zmc2V0KTsKICAgICByZXR1cm4gY3VycmVudEl0ZW07CiB9CiAKLUVsZW1l
bnQqIEhUTUxDb2xsZWN0aW9uOjp2aXJ0dWFsSXRlbUFmdGVyKHVuc2lnbmVkJiwgRWxlbWVudCop
IGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
IHN0YXRpYyBpbmxpbmUgYm9vbCBuYW1lU2hvdWxkQmVWaXNpYmxlSW5Eb2N1bWVudEFsbChIVE1M
RWxlbWVudCogZWxlbWVudCkKIHsKICAgICAvLyBUaGUgZG9jdW1lbnQuYWxsIGNvbGxlY3Rpb24g
cmV0dXJucyBvbmx5IGNlcnRhaW4gdHlwZXMgb2YgZWxlbWVudHMgYnkgbmFtZSwKQEAgLTQyNSwz
MiArNDA4LDIwIEBAIGlubGluZSBFbGVtZW50KiBuZXh0TWF0Y2hpbmdTaWJsaW5nRWxlbWUKICAg
ICByZXR1cm4gY3VycmVudDsKIH0KIAotaW5saW5lIEVsZW1lbnQqIEhUTUxDb2xsZWN0aW9uOjp0
cmF2ZXJzZUZpcnN0RWxlbWVudCh1bnNpZ25lZCYgb2Zmc2V0SW5BcnJheSwgQ29udGFpbmVyTm9k
ZSogcm9vdCkgY29uc3QKLXsKLSAgICBpZiAob3ZlcnJpZGVzSXRlbUFmdGVyKCkpCi0gICAgICAg
IHJldHVybiB2aXJ0dWFsSXRlbUFmdGVyKG9mZnNldEluQXJyYXksIDApOwotICAgIEFTU0VSVCgh
b2Zmc2V0SW5BcnJheSk7Ci0gICAgaWYgKG1fc2hvdWxkT25seUluY2x1ZGVEaXJlY3RDaGlsZHJl
bikKLSAgICAgICAgcmV0dXJuIGZpcnN0TWF0Y2hpbmdDaGlsZEVsZW1lbnQoc3RhdGljX2Nhc3Q8
Y29uc3QgSFRNTENvbGxlY3Rpb24qPih0aGlzKSwgcm9vdCk7Ci0gICAgcmV0dXJuIGZpcnN0TWF0
Y2hpbmdFbGVtZW50KHN0YXRpY19jYXN0PGNvbnN0IEhUTUxDb2xsZWN0aW9uKj4odGhpcyksIHJv
b3QpOwotfQotCi1pbmxpbmUgRWxlbWVudCogSFRNTENvbGxlY3Rpb246OnRyYXZlcnNlTmV4dEVs
ZW1lbnQodW5zaWduZWQmIG9mZnNldEluQXJyYXksIEVsZW1lbnQqIHByZXZpb3VzLCBDb250YWlu
ZXJOb2RlKiByb290KSBjb25zdAoraW5saW5lIEVsZW1lbnQqIEhUTUxDb2xsZWN0aW9uOjp0cmF2
ZXJzZUZpcnN0RWxlbWVudChDb250YWluZXJOb2RlKiByb290KSBjb25zdAogewotICAgIGlmIChv
dmVycmlkZXNJdGVtQWZ0ZXIoKSkKLSAgICAgICAgcmV0dXJuIHZpcnR1YWxJdGVtQWZ0ZXIob2Zm
c2V0SW5BcnJheSwgcHJldmlvdXMpOwotICAgIEFTU0VSVCghb2Zmc2V0SW5BcnJheSk7CisgICAg
aWYgKHVzZXNDdXN0b21Gb3J3YXJkT25seVRyYXZlcnNhbCgpKQorICAgICAgICByZXR1cm4gdmly
dHVhbEVsZW1lbnRBZnRlcihudWxscHRyKTsKICAgICBpZiAobV9zaG91bGRPbmx5SW5jbHVkZURp
cmVjdENoaWxkcmVuKQotICAgICAgICByZXR1cm4gbmV4dE1hdGNoaW5nU2libGluZ0VsZW1lbnQo
dGhpcywgcHJldmlvdXMpOwotICAgIHJldHVybiBuZXh0TWF0Y2hpbmdFbGVtZW50KHRoaXMsIHBy
ZXZpb3VzLCByb290KTsKKyAgICAgICAgcmV0dXJuIGZpcnN0TWF0Y2hpbmdDaGlsZEVsZW1lbnQo
dGhpcywgcm9vdCk7CisgICAgcmV0dXJuIGZpcnN0TWF0Y2hpbmdFbGVtZW50KHRoaXMsIHJvb3Qp
OwogfQogCi1pbmxpbmUgRWxlbWVudCogSFRNTENvbGxlY3Rpb246OnRyYXZlcnNlRm9yd2FyZFRv
T2Zmc2V0KHVuc2lnbmVkIG9mZnNldCwgRWxlbWVudCogY3VycmVudEVsZW1lbnQsIHVuc2lnbmVk
JiBjdXJyZW50T2Zmc2V0LCB1bnNpZ25lZCYgb2Zmc2V0SW5BcnJheSwgQ29udGFpbmVyTm9kZSog
cm9vdCkgY29uc3QKK2lubGluZSBFbGVtZW50KiBIVE1MQ29sbGVjdGlvbjo6dHJhdmVyc2VGb3J3
YXJkVG9PZmZzZXQodW5zaWduZWQgb2Zmc2V0LCBFbGVtZW50KiBjdXJyZW50RWxlbWVudCwgdW5z
aWduZWQmIGN1cnJlbnRPZmZzZXQsIENvbnRhaW5lck5vZGUqIHJvb3QpIGNvbnN0CiB7CiAgICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oY3VycmVudE9mZnNldCA8IG9mZnNldCk7
Ci0gICAgaWYgKG92ZXJyaWRlc0l0ZW1BZnRlcigpKSB7Ci0gICAgICAgIG9mZnNldEluQXJyYXkg
PSBtX2NhY2hlZEVsZW1lbnRzQXJyYXlPZmZzZXQ7Ci0gICAgICAgIHdoaWxlICgoY3VycmVudEVs
ZW1lbnQgPSB2aXJ0dWFsSXRlbUFmdGVyKG9mZnNldEluQXJyYXksIGN1cnJlbnRFbGVtZW50KSkp
IHsKKyAgICBpZiAodXNlc0N1c3RvbUZvcndhcmRPbmx5VHJhdmVyc2FsKCkpIHsKKyAgICAgICAg
d2hpbGUgKChjdXJyZW50RWxlbWVudCA9IHZpcnR1YWxFbGVtZW50QWZ0ZXIoY3VycmVudEVsZW1l
bnQpKSkgewogICAgICAgICAgICAgaWYgKCsrY3VycmVudE9mZnNldCA9PSBvZmZzZXQpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRFbGVtZW50OwogICAgICAgICB9CkBAIC00NzUsNyAr
NDQ2LDYgQEAgdm9pZCBIVE1MQ29sbGVjdGlvbjo6aW52YWxpZGF0ZUNhY2hlKCkgYwogICAgIG1f
aXNJdGVtUmVmRWxlbWVudHNDYWNoZVZhbGlkID0gZmFsc2U7CiAgICAgbV9pZENhY2hlLmNsZWFy
KCk7CiAgICAgbV9uYW1lQ2FjaGUuY2xlYXIoKTsKLSAgICBtX2NhY2hlZEVsZW1lbnRzQXJyYXlP
ZmZzZXQgPSAwOwogfQogCiB2b2lkIEhUTUxDb2xsZWN0aW9uOjppbnZhbGlkYXRlSWROYW1lQ2Fj
aGVNYXBzKCkgY29uc3QKQEAgLTQ5Niw3ICs0NjYsNyBAQCBOb2RlKiBIVE1MQ29sbGVjdGlvbjo6
bmFtZWRJdGVtKGNvbnN0IEF0CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgQ29udGFpbmVyTm9k
ZSYgcm9vdCA9IHJvb3ROb2RlKCk7Ci0gICAgaWYgKCFvdmVycmlkZXNJdGVtQWZ0ZXIoKSAmJiBy
b290LmlzSW5UcmVlU2NvcGUoKSkgeworICAgIGlmICghdXNlc0N1c3RvbUZvcndhcmRPbmx5VHJh
dmVyc2FsKCkgJiYgcm9vdC5pc0luVHJlZVNjb3BlKCkpIHsKICAgICAgICAgVHJlZVNjb3BlJiB0
cmVlU2NvcGUgPSByb290LnRyZWVTY29wZSgpOwogICAgICAgICBFbGVtZW50KiBjYW5kaWRhdGUg
PSAwOwogICAgICAgICBpZiAodHJlZVNjb3BlLmhhc0VsZW1lbnRXaXRoSWQoKm5hbWUuaW1wbCgp
KSkgewpAQCAtNTQwLDggKzUxMCw4IEBAIHZvaWQgSFRNTENvbGxlY3Rpb246OnVwZGF0ZU5hbWVD
YWNoZSgpIGMKIAogICAgIENvbnRhaW5lck5vZGUmIHJvb3QgPSByb290Tm9kZSgpOwogCi0gICAg
dW5zaWduZWQgYXJyYXlPZmZzZXQgPSAwOwotICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IHRy
YXZlcnNlRmlyc3RFbGVtZW50KGFycmF5T2Zmc2V0LCAmcm9vdCk7IGVsZW1lbnQ7IGVsZW1lbnQg
PSB0cmF2ZXJzZU5leHRFbGVtZW50KGFycmF5T2Zmc2V0LCBlbGVtZW50LCAmcm9vdCkpIHsKKyAg
ICB1bnNpZ25lZCBvZmZzZXQgPSAwOworICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IHRyYXZl
cnNlRmlyc3RFbGVtZW50KCZyb290KTsgZWxlbWVudDsgZWxlbWVudCA9IHRyYXZlcnNlRm9yd2Fy
ZFRvT2Zmc2V0KG9mZnNldCArIDEsIGVsZW1lbnQsIG9mZnNldCwgJnJvb3QpKSB7CiAgICAgICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgaWRBdHRyVmFsID0gZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUo
KTsKICAgICAgICAgaWYgKCFpZEF0dHJWYWwuaXNFbXB0eSgpKQogICAgICAgICAgICAgYXBwZW5k
SWRDYWNoZShpZEF0dHJWYWwsIGVsZW1lbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQ29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENv
bGxlY3Rpb24uaAkocmV2aXNpb24gMTU4NjYzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Q29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw5ICszOSw5IEBAIGNsYXNzIEVsZW1l
bnQ7CiAKIGNsYXNzIEhUTUxDb2xsZWN0aW9uIDogcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVi
bGljIFJlZkNvdW50ZWQ8SFRNTENvbGxlY3Rpb24+IHsKIHB1YmxpYzoKLSAgICBlbnVtIEl0ZW1B
ZnRlck92ZXJyaWRlVHlwZSB7Ci0gICAgICAgIE92ZXJyaWRlc0l0ZW1BZnRlciwKLSAgICAgICAg
RG9lc05vdE92ZXJyaWRlSXRlbUFmdGVyLAorICAgIGVudW0gRWxlbWVudFRyYXZlcnNhbFR5cGUg
eworICAgICAgICBOb3JtYWxUcmF2ZXJzYWwsCisgICAgICAgIEN1c3RvbUZvcndhcmRPbmx5VHJh
dmVyc2FsLAogICAgIH07CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4g
Y3JlYXRlKENvbnRhaW5lck5vZGUmIGJhc2UsIENvbGxlY3Rpb25UeXBlKTsKQEAgLTU0LDcgKzU0
LDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IHRhZ3MoY29uc3QgU3RyaW5n
Jik7CiAKICAgICAvLyBOb24tRE9NIEFQSQotICAgIHZpcnR1YWwgYm9vbCBoYXNOYW1lZEl0ZW0o
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBib29sIGhhc05hbWVkSXRlbShj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0OwogICAgIHZvaWQgbmFtZWRJdGVtcyhjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWUsIFZlY3RvcjxSZWY8RWxlbWVudD4+JikgY29uc3Q7CiAgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QKICAgICB7CkBAIC03MywxMCArNzMsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBpdGVtKDApICYmICFpdGVtKDEpOwogICAgIH0KIAotICAgIHZpcnR1YWwg
RWxlbWVudCogdmlydHVhbEl0ZW1BZnRlcih1bnNpZ25lZCYgb2Zmc2V0SW5BcnJheSwgRWxlbWVu
dCopIGNvbnN0OwotCi0gICAgRWxlbWVudCogdHJhdmVyc2VGaXJzdEVsZW1lbnQodW5zaWduZWQm
IG9mZnNldEluQXJyYXksIENvbnRhaW5lck5vZGUqIHJvb3QpIGNvbnN0OwotICAgIEVsZW1lbnQq
IHRyYXZlcnNlRm9yd2FyZFRvT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCwgRWxlbWVudCogY3VycmVu
dEVsZW1lbnQsIHVuc2lnbmVkJiBjdXJyZW50T2Zmc2V0LCB1bnNpZ25lZCYgb2Zmc2V0SW5BcnJh
eSwgQ29udGFpbmVyTm9kZSogcm9vdCkgY29uc3Q7CisgICAgRWxlbWVudCogdHJhdmVyc2VGaXJz
dEVsZW1lbnQoQ29udGFpbmVyTm9kZSogcm9vdCkgY29uc3Q7CisgICAgRWxlbWVudCogdHJhdmVy
c2VGb3J3YXJkVG9PZmZzZXQodW5zaWduZWQgb2Zmc2V0LCBFbGVtZW50KiBjdXJyZW50RWxlbWVu
dCwgdW5zaWduZWQmIGN1cnJlbnRPZmZzZXQsIENvbnRhaW5lck5vZGUqIHJvb3QpIGNvbnN0Owog
CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzUm9vdGVkQXREb2N1bWVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fcm9vdFR5cGUgPT0gTm9kZUxpc3RJc1Jvb3RlZEF0RG9jdW1lbnQ7IH0KICAgICBBTFdB
WVNfSU5MSU5FIE5vZGVMaXN0SW52YWxpZGF0aW9uVHlwZSBpbnZhbGlkYXRpb25UeXBlKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Tm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlPihtX2ludmFs
aWRhdGlvblR5cGUpOyB9CkBAIC04OSwxMSArODcsMTEgQEAgcHVibGljOgogICAgICAgICBlbHNl
IGlmICgqYXR0ck5hbWUgPT0gSFRNTE5hbWVzOjppZEF0dHIgfHwgKmF0dHJOYW1lID09IEhUTUxO
YW1lczo6bmFtZUF0dHIpCiAgICAgICAgICAgICBpbnZhbGlkYXRlSWROYW1lQ2FjaGVNYXBzKCk7
CiAgICAgfQotICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIGludmFsaWRhdGVDYWNoZSgpIGNvbnN0OwogICAgIHZvaWQgaW52YWxpZGF0ZUlkTmFtZUNh
Y2hlTWFwcygpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0gICAgSFRNTENvbGxlY3Rpb24oQ29udGFp
bmVyTm9kZSYgYmFzZSwgQ29sbGVjdGlvblR5cGUsIEl0ZW1BZnRlck92ZXJyaWRlVHlwZSk7Cisg
ICAgSFRNTENvbGxlY3Rpb24oQ29udGFpbmVyTm9kZSYgYmFzZSwgQ29sbGVjdGlvblR5cGUsIEVs
ZW1lbnRUcmF2ZXJzYWxUeXBlID0gTm9ybWFsVHJhdmVyc2FsKTsKIAogICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVOYW1lQ2FjaGUoKSBjb25zdDsKIApAQCAtMTA1LDcgKzEwMyw3IEBAIHByb3RlY3Rl
ZDoKIAogICAgIERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXJOb2Rl
LT5kb2N1bWVudCgpOyB9CiAgICAgQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUoKSBjb25zdDsKLSAg
ICBib29sIG92ZXJyaWRlc0l0ZW1BZnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcnJpZGVzSXRl
bUFmdGVyOyB9CisgICAgYm9vbCB1c2VzQ3VzdG9tRm9yd2FyZE9ubHlUcmF2ZXJzYWwoKSBjb25z
dCB7IHJldHVybiBtX2VsZW1lbnRUcmF2ZXJzYWxUeXBlID09IEN1c3RvbUZvcndhcmRPbmx5VHJh
dmVyc2FsOyB9CiAKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNFbGVtZW50Q2FjaGVWYWxpZCgp
IGNvbnN0IHsgcmV0dXJuIG1faXNFbGVtZW50Q2FjaGVWYWxpZDsgfQogICAgIEFMV0FZU19JTkxJ
TkUgRWxlbWVudCogY2FjaGVkRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkRWxlbWVu
dDsgfQpAQCAtMTI0LDcgKzEyMiw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgbV9jYWNoZWRFbGVt
ZW50T2Zmc2V0ID0gb2Zmc2V0OwogICAgICAgICBtX2lzRWxlbWVudENhY2hlVmFsaWQgPSB0cnVl
OwogICAgIH0KLSAgICB2b2lkIHNldENhY2hlZEVsZW1lbnQoRWxlbWVudCYsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgZWxlbWVudHNBcnJheU9mZnNldCkgY29uc3Q7CiAKICAgICBBTFdBWVNf
SU5MSU5FIGJvb2wgaXNJdGVtUmVmRWxlbWVudHNDYWNoZVZhbGlkKCkgY29uc3QgeyByZXR1cm4g
bV9pc0l0ZW1SZWZFbGVtZW50c0NhY2hlVmFsaWQ7IH0KICAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
c2V0SXRlbVJlZkVsZW1lbnRzQ2FjaGVWYWxpZCgpIGNvbnN0IHsgbV9pc0l0ZW1SZWZFbGVtZW50
c0NhY2hlVmFsaWQgPSB0cnVlOyB9CkBAIC0xMzUsOCArMTMyLDYgQEAgcHJvdGVjdGVkOgogICAg
IHZvaWQgc2V0SGFzTmFtZUNhY2hlKCkgY29uc3QgeyBtX2lzTmFtZUNhY2hlVmFsaWQgPSB0cnVl
OyB9CiAKIHByaXZhdGU6Ci0gICAgRWxlbWVudCogdHJhdmVyc2VOZXh0RWxlbWVudCh1bnNpZ25l
ZCYgb2Zmc2V0SW5BcnJheSwgRWxlbWVudCogcHJldmlvdXMsIENvbnRhaW5lck5vZGUqIHJvb3Qp
IGNvbnN0OwotCiAgICAgc3RhdGljIHZvaWQgYXBwZW5kKE5vZGVDYWNoZU1hcCYsIGNvbnN0IEF0
b21pY1N0cmluZyYsIEVsZW1lbnQqKTsKIAogICAgIEVsZW1lbnQqIGVsZW1lbnRCZWZvcmVPckFm
dGVyQ2FjaGVkRWxlbWVudCh1bnNpZ25lZCBvZmZzZXQsIENvbnRhaW5lck5vZGUqIHJvb3QpIGNv
bnN0OwpAQCAtMTQ1LDYgKzE0MCw4IEBAIHByaXZhdGU6CiAgICAgRWxlbWVudCogaXRlcmF0ZUZv
clByZXZpb3VzRWxlbWVudChFbGVtZW50KiBjdXJyZW50KSBjb25zdDsKICAgICBFbGVtZW50KiBp
dGVtQmVmb3JlKEVsZW1lbnQqIHByZXZpb3VzSXRlbSkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIEVs
ZW1lbnQqIHZpcnR1YWxFbGVtZW50QWZ0ZXIoRWxlbWVudCopIGNvbnN0IHsgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IHJldHVybiBudWxscHRyOyB9CisKICAgICBSZWY8Q29udGFpbmVyTm9kZT4gbV9v
d25lck5vZGU7CiAgICAgbXV0YWJsZSBFbGVtZW50KiBtX2NhY2hlZEVsZW1lbnQ7CiAgICAgbXV0
YWJsZSB1bnNpZ25lZCBtX2NhY2hlZExlbmd0aDsKQEAgLTE1NSwxNSArMTUyLDEzIEBAIHByaXZh
dGU6CiAgICAgY29uc3QgdW5zaWduZWQgbV9pbnZhbGlkYXRpb25UeXBlIDogNDsKICAgICBjb25z
dCB1bnNpZ25lZCBtX3Nob3VsZE9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRyZW4gOiAxOwogCi0gICAg
Ly8gRnJvbSBIVE1MQ29sbGVjdGlvbgogICAgIG11dGFibGUgdW5zaWduZWQgbV9pc05hbWVDYWNo
ZVZhbGlkIDogMTsKICAgICBjb25zdCB1bnNpZ25lZCBtX2NvbGxlY3Rpb25UeXBlIDogNTsKLSAg
ICBjb25zdCB1bnNpZ25lZCBtX292ZXJyaWRlc0l0ZW1BZnRlciA6IDE7CisgICAgY29uc3QgdW5z
aWduZWQgbV9lbGVtZW50VHJhdmVyc2FsVHlwZSA6IDE7CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBt
X2lzSXRlbVJlZkVsZW1lbnRzQ2FjaGVWYWxpZCA6IDE7CiAKICAgICBtdXRhYmxlIE5vZGVDYWNo
ZU1hcCBtX2lkQ2FjaGU7CiAgICAgbXV0YWJsZSBOb2RlQ2FjaGVNYXAgbV9uYW1lQ2FjaGU7Ci0g
ICAgbXV0YWJsZSB1bnNpZ25lZCBtX2NhY2hlZEVsZW1lbnRzQXJyYXlPZmZzZXQ7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xz
Q29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9y
bUNvbnRyb2xzQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDE1ODY1OSkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw3ICszNiw5IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAvLyBjYWxjdWxhdGlv
biBldmVyeSB0aW1lIGlmIGFueXRoaW5nIGhhcyBjaGFuZ2VkLgogCiBIVE1MRm9ybUNvbnRyb2xz
Q29sbGVjdGlvbjo6SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24oQ29udGFpbmVyTm9kZSYgb3du
ZXJOb2RlKQotICAgIDogSFRNTENvbGxlY3Rpb24ob3duZXJOb2RlLCBGb3JtQ29udHJvbHMsIE92
ZXJyaWRlc0l0ZW1BZnRlcikKKyAgICA6IEhUTUxDb2xsZWN0aW9uKG93bmVyTm9kZSwgRm9ybUNv
bnRyb2xzLCBDdXN0b21Gb3J3YXJkT25seVRyYXZlcnNhbCkKKyAgICAsIG1fY2FjaGVkRWxlbWVu
dChudWxscHRyKQorICAgICwgbV9jYWNoZWRFbGVtZW50T2Zmc2V0SW5BcnJheSgwKQogewogICAg
IEFTU0VSVChpc0hUTUxGb3JtRWxlbWVudChvd25lck5vZGUpIHx8IGlzSFRNTEZpZWxkU2V0RWxl
bWVudChvd25lck5vZGUpKTsKIH0KQEAgLTY0LDE2ICs2NiwzNSBAQCBjb25zdCBWZWN0b3I8SFRN
TEltYWdlRWxlbWVudCo+JiBIVE1MRm9yCiAgICAgcmV0dXJuIHRvSFRNTEZvcm1FbGVtZW50KG93
bmVyTm9kZSgpKS5pbWFnZUVsZW1lbnRzKCk7CiB9CiAKLUVsZW1lbnQqIEhUTUxGb3JtQ29udHJv
bHNDb2xsZWN0aW9uOjp2aXJ0dWFsSXRlbUFmdGVyKHVuc2lnbmVkJiBvZmZzZXQsIEVsZW1lbnQq
IHByZXZpb3VzSXRlbSkgY29uc3QKK3N0YXRpYyB1bnNpZ25lZCBmaW5kRm9ybUFzc29jaWF0ZWRF
bGVtZW50KGNvbnN0IFZlY3RvcjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQqPiYgZWxlbWVudFZlY3Rv
ciwgY29uc3QgRWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICBm
b3IgKDsgaSA8IGVsZW1lbnRWZWN0b3Iuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXV0byYgYXNz
b2NpYXRlZEVsZW1lbnQgPSAqZWxlbWVudFZlY3RvcltpXTsKKyAgICAgICAgaWYgKGFzc29jaWF0
ZWRFbGVtZW50LmlzRW51bWVyYXRhYmxlKCkgJiYgJmFzc29jaWF0ZWRFbGVtZW50LmFzSFRNTEVs
ZW1lbnQoKSA9PSAmZWxlbWVudCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1
cm4gaTsKK30KKworRWxlbWVudCogSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb246OnZpcnR1YWxF
bGVtZW50QWZ0ZXIoRWxlbWVudCogY3VycmVudCkgY29uc3QKIHsKICAgICBjb25zdCBWZWN0b3I8
Rm9ybUFzc29jaWF0ZWRFbGVtZW50Kj4mIGVsZW1lbnRzQXJyYXkgPSBmb3JtQ29udHJvbEVsZW1l
bnRzKCk7Ci0gICAgaWYgKHByZXZpb3VzSXRlbSkKLSAgICAgICAgb2Zmc2V0Kys7Ci0gICAgd2hp
bGUgKG9mZnNldCA8IGVsZW1lbnRzQXJyYXkuc2l6ZSgpKSB7Ci0gICAgICAgIEZvcm1Bc3NvY2lh
dGVkRWxlbWVudCYgZWxlbWVudCA9ICplbGVtZW50c0FycmF5W29mZnNldF07Ci0gICAgICAgIGlm
IChlbGVtZW50LmlzRW51bWVyYXRhYmxlKCkpCisgICAgdW5zaWduZWQgc3RhcnQ7CisgICAgaWYg
KCFjdXJyZW50KQorICAgICAgICBzdGFydCA9IDA7CisgICAgZWxzZSBpZiAobV9jYWNoZWRFbGVt
ZW50ID09IGN1cnJlbnQpCisgICAgICAgIHN0YXJ0ID0gbV9jYWNoZWRFbGVtZW50T2Zmc2V0SW5B
cnJheSArIDE7CisgICAgZWxzZQorICAgICAgICBzdGFydCA9IGZpbmRGb3JtQXNzb2NpYXRlZEVs
ZW1lbnQoZWxlbWVudHNBcnJheSwgKmN1cnJlbnQpICsgMTsKKworICAgIGZvciAodW5zaWduZWQg
aSA9IHN0YXJ0OyBpIDwgZWxlbWVudHNBcnJheS5zaXplKCk7ICsraSkgeworICAgICAgICBGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQmIGVsZW1lbnQgPSAqZWxlbWVudHNBcnJheVtpXTsKKyAgICAgICAg
aWYgKGVsZW1lbnQuaXNFbnVtZXJhdGFibGUoKSkgeworICAgICAgICAgICAgbV9jYWNoZWRFbGVt
ZW50ID0gJmVsZW1lbnQuYXNIVE1MRWxlbWVudCgpOworICAgICAgICAgICAgbV9jYWNoZWRFbGVt
ZW50T2Zmc2V0SW5BcnJheSA9IGk7CiAgICAgICAgICAgICByZXR1cm4gJmVsZW1lbnQuYXNIVE1M
RWxlbWVudCgpOwotICAgICAgICBvZmZzZXQrKzsKKyAgICAgICAgfQogICAgIH0KICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KQEAgLTE1Nyw0ICsxNzgsMTEgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xz
Q29sbGVjdGlvbjo6dXBkYXRlTgogICAgIHNldEhhc05hbWVDYWNoZSgpOwogfQogCit2b2lkIEhU
TUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOjppbnZhbGlkYXRlQ2FjaGUoKSBjb25zdAoreworICAg
IEhUTUxDb2xsZWN0aW9uOjppbnZhbGlkYXRlQ2FjaGUoKTsKKyAgICBtX2NhY2hlZEVsZW1lbnQg
PSBudWxscHRyOworICAgIG1fY2FjaGVkRWxlbWVudE9mZnNldEluQXJyYXkgPSAwOworfQorCiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29sbGVj
dGlvbi5oCShyZXZpc2lvbiAxNTg2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
Q29udHJvbHNDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDExICs0NiwxNSBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9u
KENvbnRhaW5lck5vZGUmKTsKIAotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVOYW1lQ2FjaGUoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZUNhY2hlKCkgY29uc3QgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZU5hbWVDYWNoZSgpIGNvbnN0IE9WRVJSSURFOwogCiAg
ICAgY29uc3QgVmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBmb3JtQ29udHJvbEVsZW1l
bnRzKCkgY29uc3Q7CiAgICAgY29uc3QgVmVjdG9yPEhUTUxJbWFnZUVsZW1lbnQqPiYgZm9ybUlt
YWdlRWxlbWVudHMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEVsZW1lbnQqIHZpcnR1YWxJdGVtQWZ0
ZXIodW5zaWduZWQmIG9mZnNldEluQXJyYXksIEVsZW1lbnQqKSBjb25zdCBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIEVsZW1lbnQqIHZpcnR1YWxFbGVtZW50QWZ0ZXIoRWxlbWVudCopIGNvbnN0IE9W
RVJSSURFOworCisgICAgbXV0YWJsZSBFbGVtZW50KiBtX2NhY2hlZEVsZW1lbnQ7CisgICAgbXV0
YWJsZSB1bnNpZ25lZCBtX2NhY2hlZEVsZW1lbnRPZmZzZXRJbkFycmF5OwogfTsKIAogfSAvLyBu
YW1lc3BhY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5j
cHAJKHJldmlzaW9uIDE1ODY2MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xs
ZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBIVE1MTmFtZUNvbGxlY3Rpb246
OkhUTUxOYW1lQ29sbGVjdGlvbihEb2N1bWVudCYgZG9jdW1lbnQsIENvbGxlY3Rpb25UeXBlIHR5
cGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKLSAgICA6IEhUTUxDb2xsZWN0aW9uKGRvY3Vt
ZW50LCB0eXBlLCBEb2VzTm90T3ZlcnJpZGVJdGVtQWZ0ZXIpCisgICAgOiBIVE1MQ29sbGVjdGlv
bihkb2N1bWVudCwgdHlwZSkKICAgICAsIG1fbmFtZShuYW1lKQogewogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMTU4
NjU5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEhU
TUxPcHRpb25zQ29sbGVjdGlvbjo6SFRNTE9wdGlvbnNDb2xsZWN0aW9uKEhUTUxTZWxlY3RFbGVt
ZW50JiBzZWxlY3QpCi0gICAgOiBIVE1MQ29sbGVjdGlvbihzZWxlY3QsIFNlbGVjdE9wdGlvbnMs
IERvZXNOb3RPdmVycmlkZUl0ZW1BZnRlcikKKyAgICA6IEhUTUxDb2xsZWN0aW9uKHNlbGVjdCwg
U2VsZWN0T3B0aW9ucykKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFi
bGVSb3dzQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MVGFibGVSb3dzQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDE1ODY1OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDgsNyArMTQ4LDcgQEAgSFRNTFRhYmxlUm93RWxlbWVudCogSFRNTFRhYmxlUm93c0NvbGxl
YwogfQogCiBIVE1MVGFibGVSb3dzQ29sbGVjdGlvbjo6SFRNTFRhYmxlUm93c0NvbGxlY3Rpb24o
SFRNTFRhYmxlRWxlbWVudCYgdGFibGUpCi0gICAgOiBIVE1MQ29sbGVjdGlvbih0YWJsZSwgVGFi
bGVSb3dzLCBPdmVycmlkZXNJdGVtQWZ0ZXIpCisgICAgOiBIVE1MQ29sbGVjdGlvbih0YWJsZSwg
VGFibGVSb3dzLCBDdXN0b21Gb3J3YXJkT25seVRyYXZlcnNhbCkKIHsKIH0KIApAQCAtMTU4LDkg
KzE1OCw4IEBAIFBhc3NSZWY8SFRNTFRhYmxlUm93c0NvbGxlY3Rpb24+IEhUTUxUYWIKICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBIVE1MVGFibGVSb3dzQ29sbGVjdGlvbih0YWJsZSkpOwogfQog
Ci1FbGVtZW50KiBIVE1MVGFibGVSb3dzQ29sbGVjdGlvbjo6dmlydHVhbEl0ZW1BZnRlcih1bnNp
Z25lZCYgb2Zmc2V0SW5BcnJheSwgRWxlbWVudCogcHJldmlvdXMpIGNvbnN0CitFbGVtZW50KiBI
VE1MVGFibGVSb3dzQ29sbGVjdGlvbjo6dmlydHVhbEVsZW1lbnRBZnRlcihFbGVtZW50KiBwcmV2
aW91cykgY29uc3QKIHsKLSAgICBBU1NFUlRfVU5VU0VEKG9mZnNldEluQXJyYXksICFvZmZzZXRJ
bkFycmF5KTsKICAgICByZXR1cm4gcm93QWZ0ZXIoY29uc3RfY2FzdDxIVE1MVGFibGVFbGVtZW50
Kj4oJnRhYmxlRWxlbWVudCgpKSwgdG9IVE1MVGFibGVSb3dFbGVtZW50KHByZXZpb3VzKSk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9u
LmgJKHJldmlzaW9uIDE1ODY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93
c0NvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIGV4cGxpY2l0IEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uKEhUTUxUYWJsZUVs
ZW1lbnQmKTsKIAotICAgIHZpcnR1YWwgRWxlbWVudCogdmlydHVhbEl0ZW1BZnRlcih1bnNpZ25l
ZCYgb2Zmc2V0SW5BcnJheSwgRWxlbWVudCopIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwg
RWxlbWVudCogdmlydHVhbEVsZW1lbnRBZnRlcihFbGVtZW50KikgY29uc3QgT1ZFUlJJREU7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZQo=
</data>
<flag name="review"
          id="239103"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>