<?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>16685</bug_id>
          
          <creation_ts>2007-12-31 02:53:46 -0800</creation_ts>
          <short_desc>eliminate List::empty() to cut down on PIC branches</short_desc>
          <delta_ts>2008-01-01 12:02:57 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>65827</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-12-31 02:53:46 -0800</bug_when>
    <thetext>This will eliminate the PIC branch from FunctionBodyNode::execute, which will speed things up quite a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65828</commentid>
    <comment_count>1</comment_count>
      <attachid>18214</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-12-31 03:04:02 -0800</bug_when>
    <thetext>Created attachment 18214
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65906</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-01-01 10:34:11 -0800</bug_when>
    <thetext>This looks a little stinky to me:

-    localStorage.reserveCapacity(m_varStack.size() + m_parameters.size() + m_functionStack.size());
+    size_t totalSize = m_varStack.size() + m_parameters.size() + m_functionStack.size();
+    if (totalSize &gt; localStorage.capacity()) // Doing this check inline avoids function call overhead.
+        localStorage.reserveCapacity(totalSize);

If this is really a measurable win, I think it would be preferable to change Vector, along these lines:

    template&lt;typename T, size_t inlineCapacity&gt;
    void Vector&lt;T, inlineCapacity&gt;::reserveCapacity(size_t newCapacity)
    inlne void reserveCapacity(size_t newCapacity)
    {
        if (newCapacity &lt;= capacity())
            return;
        reserveCapacitySlowCase(newCapacity);
    }

    template&lt;typename T, size_t inlineCapacity&gt;
    void Vector&lt;T, inlineCapacity&gt;::reserveCapacitySlowCase(size_t newCapacity)
    {
        ASSERT(newCapacity &gt; capacity());
        T* oldBuffer = begin();
        T* oldEnd = end();
        m_impl.allocateBuffer(newCapacity);
        TypeOperations::move(oldBuffer, oldEnd, begin());
        m_impl.deallocateBuffer(oldBuffer);
    }

That way, in the fast case, everybody would get the win, and in the slow case, you would avoid an extra branch.

Anyway, r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65908</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-01-01 10:50:52 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; If this is really a measurable win

It is.

&gt; I think it would be preferable to change Vector [...]
&gt; 
&gt; That way, in the fast case, everybody would get the win, and in the slow case,
&gt; you would avoid an extra branch.

I considered exactly that.

But this is not necessarily a win for other callers of reserveCapacity. This call site is special in two ways: 1) the vector has an inline capacity of 32, which is almost always big enough, and 2) it&apos;s in a super-hot code path; so hot that we use the uncheckedAppend. I think it&apos;s unlikely that other callers of reserveCapacity qualify. So we&apos;d have to consider having two versions of reserveCapacity.

The slow case is so uncommon I think the extra branch is no big deal at all.

Given that, do you still think there&apos;s room for improvement here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65909</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-01-01 10:54:06 -0800</bug_when>
    <thetext>OK, you persuaded me. Let&apos;s keep the patch as is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65921</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-01-01 12:02:57 -0800</bug_when>
    <thetext>r29067</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18214</attachid>
            <date>2007-12-31 03:04:02 -0800</date>
            <delta_ts>2008-01-01 10:34:19 -0800</delta_ts>
            <desc>patch</desc>
            <filename>EmptyListPatch.txt</filename>
            <type>text/plain</type>
            <size>22000</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI5MDQ5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTkgQEAKKzIwMDctMTItMzEgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY2ODUKKyAgICAgICAgICBlbGltaW5hdGUgTGlzdDo6ZW1wdHkoKSB0byBjdXQgZG93biBvbiBQ
SUMgYnJhbmNoZXMKKworICAgICAgICBUaGlzIG1ha2VzIFN1blNwaWRlciAxLjAxNnggYXMgZmFz
dC4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDogVXBkYXRlZC4KKyAgICAgICAgKiBr
anMvRXhlY1N0YXRlLmNwcDoKKyAgICAgICAgKEtKUzo6Z2xvYmFsRW1wdHlMaXN0KTogQWRkZWQu
IENhbGxlZCBvbmx5IHdoZW4gY3JlYXRpbmcgZ2xvYmFsIEV4ZWNTdGF0ZQorICAgICAgICBpbnN0
YW5jZXMuCisgICAgICAgIChLSlM6OkV4ZWNTdGF0ZTo6RXhlY1N0YXRlKTogQnJva2UgY29uc3Ry
dWN0b3IgdXAgaW50byB0aHJlZSBzZXBhcmF0ZSBmdW5jdGlvbnMsCisgICAgICAgIGZvciB0aGUg
dGhyZWUgc2VwYXJhdGUgbm9kZSB0eXBlcy4gQWxzbyB3ZW50IHRocm91Z2ggZWFjaCBvZiB0aGUg
dGhyZWUgYW5kCisgICAgICAgIHN0cmVhbWxpbmVkIGFzIG11Y2ggYXMgcG9zc2libGUsIHJlbW92
aW5nIGRlYWQgY29kZS4gVGhpcyBwcmV2ZW50cyB1cyBmcm9tIGhhdmluZworICAgICAgICB0byBh
Y2Nlc3MgdGhlIGdsb2JhbCBpbiB0aGUgZnVuY3Rpb24gYm9keSB2ZXJzaW9uIG9mIHRoZSBjb25z
dHJ1Y3Rvci4KKworICAgICAgICAqIGtqcy9FeGVjU3RhdGUuaDogQWRkZWQgZW1wdHlMaXN0KCku
IFJlcGxhY2VkIHRoZSBjb25zdHJ1Y3RvciB3aXRoIGEgc2V0IG9mCisgICAgICAgIHRocmVlIHRo
YXQgYXJlIHNwZWNpZmljIHRvIHRoZSBkaWZmZXJlbnQgbm9kZSB0eXBlcyB0aGF0IGNhbiBjcmVh
dGUgbmV3IGV4ZWN1dGlvbgorICAgICAgICBzdGF0ZSBvYmplY3RzLgorCisgICAgICAgICoga2pz
L2FycmF5X29iamVjdC5jcHA6CisgICAgICAgIChLSlM6OkFycmF5UHJvdG9GdW5jVG9Mb2NhbGVT
dHJpbmc6OmNhbGxBc0Z1bmN0aW9uKTogVXNlIGV4ZWMtPmVtcHR5TGlzdCgpIGluc3RlYWQKKyAg
ICAgICAgb2YgTGlzdDo6ZW1wdHkoKS4KKyAgICAgICAgKEtKUzo6QXJyYXlQcm90b0Z1bmNDb25j
YXQ6OmNhbGxBc0Z1bmN0aW9uKTogRGl0dG8uCisgICAgICAgIChLSlM6OkFycmF5UHJvdG9GdW5j
U2xpY2U6OmNhbGxBc0Z1bmN0aW9uKTogRGl0dG8uCisgICAgICAgIChLSlM6OkFycmF5UHJvdG9G
dW5jU3BsaWNlOjpjYWxsQXNGdW5jdGlvbik6IERpdHRvLgorICAgICAgICAoS0pTOjpBcnJheVBy
b3RvRnVuY0ZpbHRlcjo6Y2FsbEFzRnVuY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKiBranMvZnVu
Y3Rpb24uY3BwOgorICAgICAgICAoS0pTOjpGdW5jdGlvbkltcDo6Y2FsbEFzRnVuY3Rpb24pOiBV
cGRhdGVkIHRvIGNhbGwgbmV3IEV4ZWNTdGF0ZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKEtKUzo6
R2xvYmFsRnVuY0ltcDo6Y2FsbEFzRnVuY3Rpb24pOiBEaXR0byAoZm9yIGV2YWwpLgorICAgICAg
ICAqIGtqcy9mdW5jdGlvbl9vYmplY3QuY3BwOgorICAgICAgICAoRnVuY3Rpb25PYmplY3RJbXA6
OmNvbnN0cnVjdCk6IFVzZSBleGVjLT5lbXB0eUxpc3QoKSBpbnN0ZWFkIG9mIExpc3Q6OmVtcHR5
KCkuCisKKyAgICAgICAgKiBranMvbGlzdC5jcHA6IFJlbW92ZWQgTGlzdDo6ZW1wdHkuCisgICAg
ICAgICoga2pzL2xpc3QuaDogRGl0dG8uCisKKyAgICAgICAgKiBranMvbm9kZXMuY3BwOgorICAg
ICAgICAoS0pTOjpFbGVtZW50Tm9kZTo6ZXZhbHVhdGUpOiBVc2UgZXhlYy0+ZW1wdHlMaXN0KCkg
aW5zdGVhZCBvZiBMaXN0OjplbXB0eSgpLgorICAgICAgICAoS0pTOjpBcnJheU5vZGU6OmV2YWx1
YXRlKTogRGl0dG8uCisgICAgICAgIChLSlM6Ok9iamVjdExpdGVyYWxOb2RlOjpldmFsdWF0ZSk6
IERpdHRvLgorICAgICAgICAoS0pTOjpQcm9wZXJ0eUxpc3ROb2RlOjpldmFsdWF0ZSk6IERpdHRv
LgorICAgICAgICAoS0pTOjpGdW5jdGlvbkJvZHlOb2RlOjpwcm9jZXNzRGVjbGFyYXRpb25zKTog
QW5vdGhlciBzcGVlZC11cC4gQ2hlY2sgdGhlIGNhcGFjaXR5CisgICAgICAgIGJlZm9yZSBjYWxs
aW5nIHJlc2VydmVDYXBhY2l0eSwgYmVjYXVzZSBpdCBkb2Vzbid0IGdldCBpbmxpbmVkIHRoZSBs
b2NhbCBzdG9yYWdlCisgICAgICAgIHZlY3RvciBpcyBhbG1vc3QgYWx3YXlzIGJpZyBlbm91Z2gg
LS0gc2F2aW5nIHRoZSBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkIGlzIGEgYmlnCisgICAgICAgIGRl
YWwuCisgICAgICAgIChLSlM6OkZ1bmNEZWNsTm9kZTo6bWFrZUZ1bmN0aW9uKTogVXNlIGV4ZWMt
PmVtcHR5TGlzdCgpIGluc3RlYWQgb2YgTGlzdDo6ZW1wdHkoKS4KKyAgICAgICAgKEtKUzo6RnVu
Y0V4cHJOb2RlOjpldmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAqIGtqcy9vYmplY3QuY3BwOgor
ICAgICAgICAoS0pTOjp0cnlHZXRBbmRDYWxsUHJvcGVydHkpOiBEaXR0by4KKyAgICAgICAgKiBr
anMvcHJvcGVydHlfc2xvdC5jcHA6CisgICAgICAgIChLSlM6OlByb3BlcnR5U2xvdDo6ZnVuY3Rp
b25HZXR0ZXIpOiBEaXR0by4KKyAgICAgICAgKiBranMvc3RyaW5nX29iamVjdC5jcHA6CisgICAg
ICAgIChLSlM6OlN0cmluZ1Byb3RvRnVuY1NwbGl0OjpjYWxsQXNGdW5jdGlvbik6IERpdHRvLgor
CiAyMDA3LTEyLTMwICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBTYW0uCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCShyZXZpc2lv
biAyOTA0OSkKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkod29ya2luZyBj
b3B5KQpAQCAtMjMwLDcgKzIzMCw3IEBAIF9fWk4zS0pTOUNvbGxlY3RvcjRzaXplRXYKIF9fWk4z
S0pTOUNvbGxlY3Rvcjdjb2xsZWN0RXYKIF9fWk4zS0pTOUNvbGxlY3Rvcjdwcm90ZWN0RVBOU183
SlNWYWx1ZUUKIF9fWk4zS0pTOUNvbGxlY3Rvcjl1bnByb3RlY3RFUE5TXzdKU1ZhbHVlRQotX19a
TjNLSlM5RXhlY1N0YXRlQzFFUE5TXzE0SlNHbG9iYWxPYmplY3RFUE5TXzhKU09iamVjdEVQTlNf
OVNjb3BlTm9kZUVOU184Q29kZVR5cGVFUFMwX1M4X1BOU18xMUZ1bmN0aW9uSW1wRVBLTlNfNExp
c3RFCitfX1pOM0tKUzlFeGVjU3RhdGVDMUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNfOEpTT2Jq
ZWN0RVBOU18xMVByb2dyYW1Ob2RlRQogX19aTjNLSlM5RXhlY1N0YXRlRDFFdgogX19aTjNLSlNl
cUVSS05TXzdVU3RyaW5nRVBLYwogX19aTjNXVEYxMGZhc3RDYWxsb2NFbW0KSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2tqcy9FeGVjU3RhdGUuY3BwCShyZXZpc2lvbiAyOTA0OSkKKysrIEphdmFTY3JpcHRDb3JlL2tq
cy9FeGVjU3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw1NiArMzEsODYgQEAKIAogbmFt
ZXNwYWNlIEtKUyB7CiAKK3N0YXRpYyBpbmxpbmUgTGlzdCogZ2xvYmFsRW1wdHlMaXN0KCkKK3sK
KyAgICBzdGF0aWMgTGlzdCBzdGF0aWNFbXB0eUxpc3Q7CisgICAgcmV0dXJuICZzdGF0aWNFbXB0
eUxpc3Q7Cit9CisKIC8vIEVDTUEgMTAuMgotRXhlY1N0YXRlOjpFeGVjU3RhdGUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIHRoaXNWLCAKLSAgICAgICAgICAgICAgICAg
ICAgIFNjb3BlTm9kZSogc2NvcGVOb2RlLCBDb2RlVHlwZSB0eXBlLCBFeGVjU3RhdGUqIGNhbGxp
bmdFeGVjLCBFeGVjU3RhdGUqIGN1cnJlbnRFeGVjLAotICAgICAgICAgICAgICAgICAgICAgRnVu
Y3Rpb25JbXAqIGZ1bmMsIGNvbnN0IExpc3QqIGFyZ3MpCisKK0V4ZWNTdGF0ZTo6RXhlY1N0YXRl
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiAvKnRoaXNPYmplY3QqLywg
UHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2RlKQogICAgIDogbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2Jq
ZWN0KQogICAgICwgbV9leGNlcHRpb24oMCkKICAgICAsIG1fcHJvcGVydHlOYW1lcyhDb21tb25J
ZGVudGlmaWVyczo6c2hhcmVkKCkpCisgICAgLCBtX2VtcHR5TGlzdChnbG9iYWxFbXB0eUxpc3Qo
KSkKKyAgICAsIG1fY2FsbGluZ0V4ZWMoMCkKKyAgICAsIG1fc2F2ZWRFeGVjKDApCisgICAgLCBt
X3Njb3BlTm9kZShwcm9ncmFtTm9kZSkKKyAgICAsIG1fZnVuY3Rpb24oMCkKKyAgICAsIG1fYXJn
dW1lbnRzKDApCisgICAgLCBtX2FjdGl2YXRpb24oMCkKKyAgICAsIG1fbG9jYWxTdG9yYWdlKCZn
bG9iYWxPYmplY3QtPmxvY2FsU3RvcmFnZSgpKQorICAgICwgbV92YXJpYWJsZU9iamVjdChnbG9i
YWxPYmplY3QpCisgICAgLCBtX3RoaXNWYWwoZ2xvYmFsT2JqZWN0KQorICAgICwgbV9pdGVyYXRp
b25EZXB0aCgwKQorICAgICwgbV9zd2l0Y2hEZXB0aCgwKSAKKyAgICAsIG1fY29kZVR5cGUoR2xv
YmFsQ29kZSkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBpZ25vcmVzIHRoZSAidGhp
c09iamVjdCIgcGFyYW1ldGVyLCB3aGljaCBtZWFucyB0aGF0IHRoZSBBUEkgZm9yIGV2YWx1YXRp
bmcKKyAgICAvLyBhIHNjcmlwdCB3aXRoIGEgdGhpcyBvYmplY3QgdGhhdCdzIG5vdCB0aGUgc2Ft
ZSBhcyB0aGUgZ2xvYmFsIG9iamVjdCBpcyBicm9rZW4sIGFuZCBwcm9iYWJseQorICAgIC8vIGhh
cyBiZWVuIGZvciBzb21lIHRpbWUuCisgICAgbV9zY29wZUNoYWluLnB1c2goZ2xvYmFsT2JqZWN0
KTsKKyAgICBpZiAocHJvZ3JhbU5vZGUpCisgICAgICAgIGdsb2JhbE9iamVjdC0+c2V0Q3VycmVu
dEV4ZWModGhpcyk7Cit9CisKK0V4ZWNTdGF0ZTo6RXhlY1N0YXRlKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEV2YWxOb2RlKiBldmFsTm9kZSwgRXhlY1N0YXRlKiBjYWxsaW5nRXhlYykK
KyAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKKyAgICAsIG1fZXhjZXB0aW9uKDAp
CisgICAgLCBtX3Byb3BlcnR5TmFtZXMoY2FsbGluZ0V4ZWMtPm1fcHJvcGVydHlOYW1lcykKKyAg
ICAsIG1fZW1wdHlMaXN0KGNhbGxpbmdFeGVjLT5tX2VtcHR5TGlzdCkKICAgICAsIG1fY2FsbGlu
Z0V4ZWMoY2FsbGluZ0V4ZWMpCi0gICAgLCBtX3NhdmVkRXhlYyhjdXJyZW50RXhlYykKLSAgICAs
IG1fc2NvcGVOb2RlKHNjb3BlTm9kZSkKKyAgICAsIG1fc2F2ZWRFeGVjKGdsb2JhbE9iamVjdC0+
Y3VycmVudEV4ZWMoKSkKKyAgICAsIG1fc2NvcGVOb2RlKGV2YWxOb2RlKQorICAgICwgbV9mdW5j
dGlvbigwKQorICAgICwgbV9hcmd1bWVudHMoMCkKKyAgICAsIG1fYWN0aXZhdGlvbigwKQorICAg
ICwgbV9sb2NhbFN0b3JhZ2UoY2FsbGluZ0V4ZWMtPm1fbG9jYWxTdG9yYWdlKQorICAgICwgbV9z
Y29wZUNoYWluKGNhbGxpbmdFeGVjLT5tX3Njb3BlQ2hhaW4pCisgICAgLCBtX3ZhcmlhYmxlT2Jq
ZWN0KGNhbGxpbmdFeGVjLT5tX3ZhcmlhYmxlT2JqZWN0KQorICAgICwgbV90aGlzVmFsKGNhbGxp
bmdFeGVjLT5tX3RoaXNWYWwpCisgICAgLCBtX2l0ZXJhdGlvbkRlcHRoKDApCisgICAgLCBtX3N3
aXRjaERlcHRoKDApIAorICAgICwgbV9jb2RlVHlwZShFdmFsQ29kZSkKK3sgICAgCisgICAgZ2xv
YmFsT2JqZWN0LT5zZXRDdXJyZW50RXhlYyh0aGlzKTsKK30KKworRXhlY1N0YXRlOjpFeGVjU3Rh
dGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIHRoaXNPYmplY3QsIAor
ICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5Tm9kZSwg
RXhlY1N0YXRlKiBjYWxsaW5nRXhlYywKKyAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uSW1w
KiBmdW5jLCBjb25zdCBMaXN0JiBhcmdzKQorICAgIDogbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2Jq
ZWN0KQorICAgICwgbV9leGNlcHRpb24oMCkKKyAgICAsIG1fcHJvcGVydHlOYW1lcyhjYWxsaW5n
RXhlYy0+bV9wcm9wZXJ0eU5hbWVzKQorICAgICwgbV9lbXB0eUxpc3QoY2FsbGluZ0V4ZWMtPm1f
ZW1wdHlMaXN0KQorICAgICwgbV9jYWxsaW5nRXhlYyhjYWxsaW5nRXhlYykKKyAgICAsIG1fc2F2
ZWRFeGVjKGdsb2JhbE9iamVjdC0+Y3VycmVudEV4ZWMoKSkKKyAgICAsIG1fc2NvcGVOb2RlKGZ1
bmN0aW9uQm9keU5vZGUpCiAgICAgLCBtX2Z1bmN0aW9uKGZ1bmMpCi0gICAgLCBtX2FyZ3VtZW50
cyhhcmdzKQorICAgICwgbV9hcmd1bWVudHMoJmFyZ3MpCisgICAgLCBtX3Njb3BlQ2hhaW4oZnVu
Yy0+c2NvcGUoKSkKKyAgICAsIG1fdGhpc1ZhbCh0aGlzT2JqZWN0KQogICAgICwgbV9pdGVyYXRp
b25EZXB0aCgwKQogICAgICwgbV9zd2l0Y2hEZXB0aCgwKSAKLSAgICAsIG1fY29kZVR5cGUodHlw
ZSkKKyAgICAsIG1fY29kZVR5cGUoRnVuY3Rpb25Db2RlKQogewotICAgIC8vIGNyZWF0ZSBhbmQg
aW5pdGlhbGl6ZSBhY3RpdmF0aW9uIG9iamVjdCAoRUNNQSAxMC4xLjYpCi0gICAgaWYgKHR5cGUg
PT0gRnVuY3Rpb25Db2RlKSB7Ci0gICAgICAgIG1fYWN0aXZhdGlvbiA9IG5ldyBBY3RpdmF0aW9u
SW1wKHRoaXMpOwotICAgICAgICBtX3ZhcmlhYmxlT2JqZWN0ID0gbV9hY3RpdmF0aW9uOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIG1fYWN0aXZhdGlvbiA9IDA7Ci0gICAgICAgIG1fdmFyaWFibGVP
YmplY3QgPSBnbG9iYWxPYmplY3Q7Ci0gICAgfQotICAgIAotICAgIC8vIEVDTUEgMTAuMgotICAg
IHN3aXRjaCh0eXBlKSB7Ci0gICAgY2FzZSBFdmFsQ29kZToKLSAgICAgICAgaWYgKG1fY2FsbGlu
Z0V4ZWMpIHsKLSAgICAgICAgICAgIG1fc2NvcGVDaGFpbiA9IG1fY2FsbGluZ0V4ZWMtPnNjb3Bl
Q2hhaW4oKTsKLSAgICAgICAgICAgIG1fdmFyaWFibGVPYmplY3QgPSBtX2NhbGxpbmdFeGVjLT52
YXJpYWJsZU9iamVjdCgpOwotICAgICAgICAgICAgbV90aGlzVmFsID0gbV9jYWxsaW5nRXhlYy0+
dGhpc1ZhbHVlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSAvLyBlbHNlIHNhbWUg
YXMgR2xvYmFsQ29kZQotICAgIGNhc2UgR2xvYmFsQ29kZToKLSAgICAgICAgbV9zY29wZUNoYWlu
LnB1c2goZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgbV90aGlzVmFsID0gZ2xvYmFsT2JqZWN0Owot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEZ1bmN0aW9uQ29kZToKLSAgICAgICAgbV9zY29wZUNo
YWluID0gZnVuYy0+c2NvcGUoKTsKLSAgICAgICAgbV9zY29wZUNoYWluLnB1c2gobV9hY3RpdmF0
aW9uKTsKLSAgICAgICAgbV92YXJpYWJsZU9iamVjdCA9IG1fYWN0aXZhdGlvbjsKLSAgICAgICAg
bV90aGlzVmFsID0gdGhpc1Y7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBtX2xv
Y2FsU3RvcmFnZSA9ICZtX3ZhcmlhYmxlT2JqZWN0LT5sb2NhbFN0b3JhZ2UoKTsKLQotICAgIGlm
IChzY29wZU5vZGUpCi0gICAgICAgIG1fZ2xvYmFsT2JqZWN0LT5zZXRDdXJyZW50RXhlYyh0aGlz
KTsKKyAgICBBY3RpdmF0aW9uSW1wKiBhY3RpdmF0aW9uID0gbmV3IEFjdGl2YXRpb25JbXAodGhp
cyk7CisgICAgbV9hY3RpdmF0aW9uID0gYWN0aXZhdGlvbjsKKyAgICBtX2xvY2FsU3RvcmFnZSA9
ICZhY3RpdmF0aW9uLT5sb2NhbFN0b3JhZ2UoKTsKKyAgICBtX3ZhcmlhYmxlT2JqZWN0ID0gYWN0
aXZhdGlvbjsKKyAgICBtX3Njb3BlQ2hhaW4ucHVzaChhY3RpdmF0aW9uKTsKKyAgICBnbG9iYWxP
YmplY3QtPnNldEN1cnJlbnRFeGVjKHRoaXMpOwogfQogCiBFeGVjU3RhdGU6On5FeGVjU3RhdGUo
KQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0V4ZWNTdGF0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuaAkocmV2aXNpb24gMjkwNDkpCisrKyBKYXZhU2Ny
aXB0Q29yZS9ranMvRXhlY1N0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDExICszOSwxNCBA
QCBuYW1lc3BhY2UgS0pTICB7CiAgICAgCiAgICAgY2xhc3MgQWN0aXZhdGlvbkltcDsKICAgICBj
bGFzcyBDb21tb25JZGVudGlmaWVyczsKKyAgICBjbGFzcyBFdmFsTm9kZTsKKyAgICBjbGFzcyBG
dW5jdGlvbkJvZHlOb2RlOwogICAgIGNsYXNzIEZ1bmN0aW9uSW1wOwogICAgIGNsYXNzIEdsb2Jh
bEZ1bmNJbXA7CiAgICAgY2xhc3MgSW50ZXJwcmV0ZXI7CiAgICAgY2xhc3MgSlNHbG9iYWxPYmpl
Y3Q7CiAgICAgY2xhc3MgSlNWYXJpYWJsZU9iamVjdDsKKyAgICBjbGFzcyBQcm9ncmFtTm9kZTsK
ICAgICBjbGFzcyBTY29wZUNoYWluOwogICAgIGNsYXNzIFNjb3BlTm9kZTsKICAgICBzdHJ1Y3Qg
TG9jYWxTdG9yYWdlRW50cnk7CkBAIC0xMDMsOSArMTA2LDEwIEBAIG5hbWVzcGFjZSBLSlMgIHsK
IAogICAgICAgICB2b2lkIG1hcmsoKTsKICAgICAgICAgCi0gICAgICAgIC8vIFRoaXMgaXMgYSB3
b3JrYXJvdW5kIHRvIGF2b2lkIGFjY2Vzc2luZyB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBmb3IgdGhl
c2UgaWRlbnRpZmllcnMgaW4KLSAgICAgICAgLy8gaW1wb3J0YW50IHByb3BlcnR5IGxvb2t1cCBm
dW5jdGlvbnMsIHRvIGF2b2lkIHRha2luZyBQSUMgYnJhbmNoZXMgaW4gTWFjaC1PIGJpbmFyaWVz
CisgICAgICAgIC8vIFRoZXNlIHBvaW50ZXJzIGFyZSB1c2VkIHRvIGF2b2lkIGFjY2Vzc2luZyBn
bG9iYWwgdmFyaWFibGVzIGZvciB0aGVzZSwKKyAgICAgICAgLy8gdG8gYXZvaWQgdGFraW5nIFBJ
QyBicmFuY2hlcyBpbiBNYWNoLU8gYmluYXJpZXMuCiAgICAgICAgIGNvbnN0IENvbW1vbklkZW50
aWZpZXJzJiBwcm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gKm1fcHJvcGVydHlOYW1lczsg
fQorICAgICAgICBjb25zdCBMaXN0JiBlbXB0eUxpc3QoKSBjb25zdCB7IHJldHVybiAqbV9lbXB0
eUxpc3Q7IH0KIAogICAgICAgICBMb2NhbFN0b3JhZ2UmIGxvY2FsU3RvcmFnZSgpIHsgcmV0dXJu
ICptX2xvY2FsU3RvcmFnZTsgfQogCkBAIC0xNzEsMTEgKzE3NSwxMCBAQCBuYW1lc3BhY2UgS0pT
ICB7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogCi0gICAgcHVibGljOgotICAg
ICAgICBFeGVjU3RhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2IsIEpTT2JqZWN0KiB0aGlzViwKLSAg
ICAgICAgICAgICAgICAgIFNjb3BlTm9kZSogc2NvcGVOb2RlLCBDb2RlVHlwZSB0eXBlID0gR2xv
YmFsQ29kZSwKLSAgICAgICAgICAgICAgICAgIEV4ZWNTdGF0ZSogY2FsbGluZ0V4ZWNTdGF0ZSA9
IDAsIEV4ZWNTdGF0ZSogY3VycmVudEV4ZWMgPSAwLCAKLSAgICAgICAgICAgICAgICAgIEZ1bmN0
aW9uSW1wKiBmdW5jdGlvbiA9IDAsIGNvbnN0IExpc3QqIGFyZ3MgPSAwKTsKKyAgICAgICAgRXhl
Y1N0YXRlKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIHRoaXNPYmplY3QsIFByb2dyYW1Ob2Rl
Kik7CisgICAgICAgIEV4ZWNTdGF0ZShKU0dsb2JhbE9iamVjdCosIEV2YWxOb2RlKiwgRXhlY1N0
YXRlKiBjYWxsaW5nRXhlY1N0YXRlKTsKKyAgICAgICAgRXhlY1N0YXRlKEpTR2xvYmFsT2JqZWN0
KiwgSlNPYmplY3QqIHRoaXNPYmplY3QsIEZ1bmN0aW9uQm9keU5vZGUqLAorICAgICAgICAgICAg
RXhlY1N0YXRlKiBjYWxsaW5nRXhlY1N0YXRlLCBGdW5jdGlvbkltcCosIGNvbnN0IExpc3QmIGFy
Z3MpOwogICAgICAgICB+RXhlY1N0YXRlKCk7CiAKICAgICBwcml2YXRlOgpAQCAtMTg1LDYgKzE4
OCw3IEBAIG5hbWVzcGFjZSBLSlMgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFs
T2JqZWN0OwogICAgICAgICBKU1ZhbHVlKiBtX2V4Y2VwdGlvbjsKICAgICAgICAgQ29tbW9uSWRl
bnRpZmllcnMqIG1fcHJvcGVydHlOYW1lczsKKyAgICAgICAgY29uc3QgTGlzdCogbV9lbXB0eUxp
c3Q7CiAKICAgICAgICAgRXhlY1N0YXRlKiBtX2NhbGxpbmdFeGVjOwogICAgICAgICBFeGVjU3Rh
dGUqIG1fc2F2ZWRFeGVjOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X29iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X29iamVjdC5jcHAJKHJl
dmlzaW9uIDI5MDQ5KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X29iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE2MCw3ICsxNjAsNyBAQCBKU1ZhbHVlKiBBcnJheVByb3RvRnVuY1Rv
TG9jYWxlU3RyaW5nOjpjCiAgICAgICAgIEpTT2JqZWN0KiBvID0gZWxlbWVudC0+dG9PYmplY3Qo
ZXhlYyk7CiAgICAgICAgIEpTVmFsdWUqIGNvbnZlcnNpb25GdW5jdGlvbiA9IG8tPmdldChleGVj
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9Mb2NhbGVTdHJpbmcpOwogICAgICAgICBpZiAoY29u
dmVyc2lvbkZ1bmN0aW9uLT5pc09iamVjdCgpICYmIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oY29u
dmVyc2lvbkZ1bmN0aW9uKS0+aW1wbGVtZW50c0NhbGwoKSkKLSAgICAgICAgICAgIHN0ciArPSBz
dGF0aWNfY2FzdDxKU09iamVjdCo+KGNvbnZlcnNpb25GdW5jdGlvbiktPmNhbGwoZXhlYywgbywg
TGlzdDo6ZW1wdHkoKSktPnRvU3RyaW5nKGV4ZWMpOworICAgICAgICAgICAgc3RyICs9IHN0YXRp
Y19jYXN0PEpTT2JqZWN0Kj4oY29udmVyc2lvbkZ1bmN0aW9uKS0+Y2FsbChleGVjLCBvLCBleGVj
LT5lbXB0eUxpc3QoKSktPnRvU3RyaW5nKGV4ZWMpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBzdHIgKz0gZWxlbWVudC0+dG9TdHJpbmcoZXhlYyk7CiAKQEAgLTIyMCw3ICsyMjAsNyBAQCBK
U1ZhbHVlKiBBcnJheVByb3RvRnVuY0pvaW46OmNhbGxBc0Z1bmN0CiAKIEpTVmFsdWUqIEFycmF5
UHJvdG9GdW5jQ29uY2F0OjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQogewotICAgIEpTT2JqZWN0KiBhcnIgPSBzdGF0
aWNfY2FzdDxKU09iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlDb25z
dHJ1Y3RvcigpLT5jb25zdHJ1Y3QoZXhlYywgTGlzdDo6ZW1wdHkoKSkpOworICAgIEpTT2JqZWN0
KiBhcnIgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+YXJyYXlDb25zdHJ1Y3RvcigpLT5jb25zdHJ1Y3QoZXhlYywgZXhlYy0+ZW1wdHlMaXN0KCkp
KTsKICAgICBpbnQgbiA9IDA7CiAgICAgSlNWYWx1ZSogY3VyQXJnID0gdGhpc09iajsKICAgICBK
U09iamVjdCogY3VyT2JqID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqID4odGhpc09iaik7CkBAIC0z
MjcsNyArMzI3LDcgQEAgSlNWYWx1ZSogQXJyYXlQcm90b0Z1bmNTbGljZTo6Y2FsbEFzRnVuYwog
ICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIubmV0c2NhcGUuY29tL2RvY3MvbWFudWFscy9qcy9jbGll
bnQvanNyZWYvYXJyYXkuaHRtIzExOTM3MTMgb3IgMTUuNC40LjEwCiAKICAgICAvLyBXZSByZXR1
cm4gYSBuZXcgYXJyYXkKLSAgICBKU09iamVjdCogcmVzT2JqID0gc3RhdGljX2Nhc3Q8SlNPYmpl
Y3QqID4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJheUNvbnN0cnVjdG9yKCktPmNv
bnN0cnVjdChleGVjLCBMaXN0OjplbXB0eSgpKSk7CisgICAgSlNPYmplY3QqIHJlc09iaiA9IHN0
YXRpY19jYXN0PEpTT2JqZWN0KiA+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlD
b25zdHJ1Y3RvcigpLT5jb25zdHJ1Y3QoZXhlYywgZXhlYy0+ZW1wdHlMaXN0KCkpKTsKICAgICBK
U1ZhbHVlKiByZXN1bHQgPSByZXNPYmo7CiAgICAgZG91YmxlIGJlZ2luID0gYXJnc1swXS0+dG9J
bnRlZ2VyKGV4ZWMpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmotPmdldChleGVjLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS0+dG9VSW50MzIoZXhlYyk7CkBAIC00MjcsNyAr
NDI3LDcgQEAgSlNWYWx1ZSogQXJyYXlQcm90b0Z1bmNTb3J0OjpjYWxsQXNGdW5jdAogSlNWYWx1
ZSogQXJyYXlQcm90b0Z1bmNTcGxpY2U6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3MpCiB7CiAgICAgLy8gMTUuNC40LjEy
Ci0gICAgSlNPYmplY3QqIHJlc09iaiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0KiA+KGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlDb25zdHJ1Y3RvcigpLT5jb25zdHJ1Y3QoZXhlYywg
TGlzdDo6ZW1wdHkoKSkpOworICAgIEpTT2JqZWN0KiByZXNPYmogPSBzdGF0aWNfY2FzdDxKU09i
amVjdCogPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5Q29uc3RydWN0b3IoKS0+
Y29uc3RydWN0KGV4ZWMsIGV4ZWMtPmVtcHR5TGlzdCgpKSk7CiAgICAgSlNWYWx1ZSogcmVzdWx0
ID0gcmVzT2JqOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmotPmdldChleGVjLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS0+dG9VSW50MzIoZXhlYyk7CiAgICAgaW50IGJlZ2lu
ID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7CkBAIC00OTYsNyArNDk2LDcgQEAgSlNWYWx1ZSog
QXJyYXlQcm90b0Z1bmNGaWx0ZXI6OmNhbGxBc0Z1bgogICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBUeXBlRXJyb3IpOwogCiAgICAgSlNPYmplY3QqIGFwcGx5VGhpcyA9IGFyZ3NbMV0t
PmlzVW5kZWZpbmVkT3JOdWxsKCkgPyBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkgOiAgYXJn
c1sxXS0+dG9PYmplY3QoZXhlYyk7Ci0gICAgSlNPYmplY3QqIHJlc3VsdEFycmF5ID0gc3RhdGlj
X2Nhc3Q8SlNPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5Q29uc3Ry
dWN0b3IoKS0+Y29uc3RydWN0KGV4ZWMsIExpc3Q6OmVtcHR5KCkpKTsKKyAgICBKU09iamVjdCog
cmVzdWx0QXJyYXkgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+YXJyYXlDb25zdHJ1Y3RvcigpLT5jb25zdHJ1Y3QoZXhlYywgZXhlYy0+ZW1wdHlM
aXN0KCkpKTsKIAogICAgIHVuc2lnbmVkIGZpbHRlckluZGV4ID0gMDsKICAgICB1bnNpZ25lZCBs
ZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkt
PnRvVUludDMyKGV4ZWMpOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uY3BwCShyZXZpc2lvbiAy
OTA0OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcwLDcgKzcwLDcgQEAgdm9pZCBGdW5jdGlvbkltcDo6bWFyaygpCiAKIEpTVmFsdWUqIEZ1
bmN0aW9uSW1wOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlz
T2JqLCBjb25zdCBMaXN0JiBhcmdzKQogewotICAgIEV4ZWNTdGF0ZSBuZXdFeGVjKGV4ZWMtPmR5
bmFtaWNHbG9iYWxPYmplY3QoKSwgdGhpc09iaiwgYm9keS5nZXQoKSwgRnVuY3Rpb25Db2RlLCBl
eGVjLCBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmN1cnJlbnRFeGVjKCksIHRoaXMsICZh
cmdzKTsKKyAgICBFeGVjU3RhdGUgbmV3RXhlYyhleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCks
IHRoaXNPYmosIGJvZHkuZ2V0KCksIGV4ZWMsIHRoaXMsIGFyZ3MpOwogICAgIEpTVmFsdWUqIHJl
c3VsdCA9IGJvZHktPmV4ZWN1dGUoJm5ld0V4ZWMpOwogICAgIGlmIChuZXdFeGVjLmNvbXBsZXRp
b25UeXBlKCkgPT0gVGhyb3cpIHsKICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKHJlc3VsdCk7
CkBAIC02OTcsOCArNjk3LDcgQEAgSlNWYWx1ZSogR2xvYmFsRnVuY0ltcDo6Y2FsbEFzRnVuY3Rp
b24oRQogCiAgICAgICAgIC8vIGVudGVyIGEgbmV3IGV4ZWN1dGlvbiBjb250ZXh0CiAgICAgICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzd2l0Y2hHbG9iYWwgPyBzdGF0aWNfY2Fz
dDxKU0dsb2JhbE9iamVjdCo+KHRoaXNPYmopIDogZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgp
OwotICAgICAgICBKU09iamVjdCogdGhpc1ZhbCA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oZXhl
Yy0+dGhpc1ZhbHVlKCkpOwotICAgICAgICBFeGVjU3RhdGUgbmV3RXhlYyhnbG9iYWxPYmplY3Qs
IHRoaXNWYWwsIGV2YWxOb2RlLmdldCgpLCBFdmFsQ29kZSwgZXhlYywgZ2xvYmFsT2JqZWN0LT5j
dXJyZW50RXhlYygpKTsKKyAgICAgICAgRXhlY1N0YXRlIG5ld0V4ZWMoZ2xvYmFsT2JqZWN0LCBl
dmFsTm9kZS5nZXQoKSwgZXhlYyk7CiAgICAgICAgICAgCiAgICAgICAgIGlmIChzd2l0Y2hHbG9i
YWwpIHsKICAgICAgICAgICAgIG5ld0V4ZWMucHVzaFNjb3BlKHRoaXNPYmopOwpJbmRleDogSmF2
YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUva2pzL2Z1bmN0aW9uX29iamVjdC5jcHAJKHJldmlzaW9uIDI5MDQ5KQorKysgSmF2
YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uX29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
Nyw3ICsyNDcsNyBAQCBKU09iamVjdCogRnVuY3Rpb25PYmplY3RJbXA6OmNvbnN0cnVjdChFCiAg
IExpc3QgY29uc0FyZ3M7CiAKICAgSlNPYmplY3QqIG9iakNvbnMgPSBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPm9iamVjdENvbnN0cnVjdG9yKCk7Ci0gIEpTT2JqZWN0KiBwcm90b3R5cGUg
PSBvYmpDb25zLT5jb25zdHJ1Y3QoZXhlYyxMaXN0OjplbXB0eSgpKTsKKyAgSlNPYmplY3QqIHBy
b3RvdHlwZSA9IG9iakNvbnMtPmNvbnN0cnVjdChleGVjLCBleGVjLT5lbXB0eUxpc3QoKSk7CiAg
IHByb3RvdHlwZS0+cHV0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rvciwg
ZmltcCwgRG9udEVudW18RG9udERlbGV0ZXxSZWFkT25seSk7CiAgIGZpbXAtPnB1dChleGVjLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBwcm90b3R5cGUsIEludGVybmFsfERvbnRE
ZWxldGUpOwogICByZXR1cm4gZmltcDsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9saXN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbGlzdC5jcHAJKHJldmlzaW9uIDI5
MDQ5KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSwxMiArMzEsNiBAQCB2b2lkIExpc3Q6OmdldFNsaWNlKGludCBzdGFydEluZGV4LCBMaXN0CiAg
ICAgcmVzdWx0Lm1fdmVjdG9yLmFwcGVuZFJhbmdlKHN0YXJ0LCBlbmQoKSk7CiB9CiAKLWNvbnN0
IExpc3QmIExpc3Q6OmVtcHR5KCkKLXsKLSAgICBzdGF0aWMgY29uc3QgTGlzdCBzdGF0aWNMaXN0
OwotICAgIHJldHVybiBzdGF0aWNMaXN0OwotfQotCiBMaXN0OjpMaXN0U2V0JiBMaXN0OjptYXJr
U2V0KCkKIHsKICAgICBzdGF0aWMgTGlzdFNldCBzdGF0aWNNYXJrU2V0OwpJbmRleDogSmF2YVNj
cmlwdENvcmUva2pzL2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbGlz
dC5oCShyZXZpc2lvbiAyOTA0OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9saXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTkyLDggKzkyLDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgICAgICBt
YXJrUHJvdGVjdGVkTGlzdHNTbG93Q2FzZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGlj
IGNvbnN0IExpc3QmIGVtcHR5KCk7IC8vIEZhc3QgcGF0aCBmb3IgYW4gZW1wdHkgbGlzdC4KLQog
ICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBMaXN0U2V0JiBtYXJrU2V0KCk7CiAgICAgICAg
IHN0YXRpYyB2b2lkIG1hcmtQcm90ZWN0ZWRMaXN0c1Nsb3dDYXNlKCk7CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ranMvbm9kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9u
b2Rlcy5jcHAJKHJldmlzaW9uIDI5MDQ5KQorKysgSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjI5LDcgKzYyOSw3IEBAIHZvaWQgRWxlbWVudE5vZGU6Om9w
dGltaXplVmFyaWFibGVBY2Nlc3MKIC8vIEVDTUEgMTEuMS40CiBKU1ZhbHVlICpFbGVtZW50Tm9k
ZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQogewotICBKU09iamVjdCAqYXJyYXkgPSBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5Q29uc3RydWN0b3IoKS0+Y29uc3RydWN0KGV4
ZWMsIExpc3Q6OmVtcHR5KCkpOworICBKU09iamVjdCogYXJyYXkgPSBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPmFycmF5Q29uc3RydWN0b3IoKS0+Y29uc3RydWN0KGV4ZWMsIGV4ZWMtPmVt
cHR5TGlzdCgpKTsKICAgaW50IGxlbmd0aCA9IDA7CiAgIGZvciAoRWxlbWVudE5vZGUgKm4gPSB0
aGlzOyBuOyBuID0gbi0+bmV4dC5nZXQoKSkgewogICAgIEpTVmFsdWUgKnZhbCA9IG4tPm5vZGUt
PmV2YWx1YXRlKGV4ZWMpOwpAQCAtNjYwLDcgKzY2MCw3IEBAIEpTVmFsdWUgKkFycmF5Tm9kZTo6
ZXZhbHVhdGUoRXhlY1N0YXRlICoKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogICAgIGxl
bmd0aCA9IG9wdCA/IGFycmF5LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0
aCktPnRvSW50MzIoZXhlYykgOiAwOwogICB9IGVsc2UgewotICAgIEpTVmFsdWUgKm5ld0FyciA9
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlDb25zdHJ1Y3RvcigpLT5jb25zdHJ1
Y3QoZXhlYyxMaXN0OjplbXB0eSgpKTsKKyAgICBKU1ZhbHVlKiBuZXdBcnIgPSBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPmFycmF5Q29uc3RydWN0b3IoKS0+Y29uc3RydWN0KGV4ZWMsIGV4
ZWMtPmVtcHR5TGlzdCgpKTsKICAgICBhcnJheSA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4obmV3
QXJyKTsKICAgICBsZW5ndGggPSAwOwogICB9CkBAIC02ODUsNyArNjg1LDcgQEAgSlNWYWx1ZSAq
T2JqZWN0TGl0ZXJhbE5vZGU6OmV2YWx1YXRlKEV4ZQogICBpZiAobGlzdCkKICAgICByZXR1cm4g
bGlzdC0+ZXZhbHVhdGUoZXhlYyk7CiAKLSAgcmV0dXJuIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+b2JqZWN0Q29uc3RydWN0b3IoKS0+Y29uc3RydWN0KGV4ZWMsTGlzdDo6ZW1wdHkoKSk7
CisgIHJldHVybiBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdENvbnN0cnVjdG9y
KCktPmNvbnN0cnVjdChleGVjLCBleGVjLT5lbXB0eUxpc3QoKSk7CiB9CiAKIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcm9wZXJ0eUxpc3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCkBAIC03MDAsNyArNzAwLDcgQEAgdm9pZCBQcm9wZXJ0eUxpc3ROb2RlOjpv
cHRpbWl6ZVZhcmlhYmxlQQogLy8gRUNNQSAxMS4xLjUKIEpTVmFsdWUgKlByb3BlcnR5TGlzdE5v
ZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAgSlNPYmplY3QgKm9iaiA9IGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0Q29uc3RydWN0b3IoKS0+Y29uc3RydWN0KGV4
ZWMsIExpc3Q6OmVtcHR5KCkpOworICBKU09iamVjdCogb2JqID0gZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5vYmplY3RDb25zdHJ1Y3RvcigpLT5jb25zdHJ1Y3QoZXhlYywgZXhlYy0+ZW1w
dHlMaXN0KCkpOwogICAKICAgZm9yIChQcm9wZXJ0eUxpc3ROb2RlICpwID0gdGhpczsgcDsgcCA9
IHAtPm5leHQuZ2V0KCkpIHsKICAgICBKU1ZhbHVlICp2ID0gcC0+bm9kZS0+YXNzaWduLT5ldmFs
dWF0ZShleGVjKTsKQEAgLTQzMzgsNyArNDMzOCw5IEBAIHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6
cHJvY2Vzc0RlY2xhcmF0aW8KICAgICAKICAgICAvLyBXZSBjYW4ndCBqdXN0IHJlc2l6ZSBsb2Nh
bFN0b3JhZ2UgaGVyZSBiZWNhdXNlIHRoYXQgd291bGQgdGVtcG9yYXJpbHkKICAgICAvLyBsZWF2
ZSB1bmluaXRpYWxpemVkIGVudHJpZXMsIHdoaWNoIHdvdWxkIGNyYXNoIEdDIGR1cmluZyB0aGUg
bWFyayBwaGFzZS4KLSAgICBsb2NhbFN0b3JhZ2UucmVzZXJ2ZUNhcGFjaXR5KG1fdmFyU3RhY2su
c2l6ZSgpICsgbV9wYXJhbWV0ZXJzLnNpemUoKSArIG1fZnVuY3Rpb25TdGFjay5zaXplKCkpOwor
ICAgIHNpemVfdCB0b3RhbFNpemUgPSBtX3ZhclN0YWNrLnNpemUoKSArIG1fcGFyYW1ldGVycy5z
aXplKCkgKyBtX2Z1bmN0aW9uU3RhY2suc2l6ZSgpOworICAgIGlmICh0b3RhbFNpemUgPiBsb2Nh
bFN0b3JhZ2UuY2FwYWNpdHkoKSkgLy8gRG9pbmcgdGhpcyBjaGVjayBpbmxpbmUgYXZvaWRzIGZ1
bmN0aW9uIGNhbGwgb3ZlcmhlYWQuCisgICAgICAgIGxvY2FsU3RvcmFnZS5yZXNlcnZlQ2FwYWNp
dHkodG90YWxTaXplKTsKICAgICAKICAgICBpbnQgbWluQXR0cmlidXRlcyA9IEludGVybmFsIHwg
RG9udERlbGV0ZTsKICAgICAKQEAgLTQ1MDksNyArNDUxMSw3IEBAIEZ1bmN0aW9uSW1wKiBGdW5j
RGVjbE5vZGU6Om1ha2VGdW5jdGlvbigKIHsKICAgRnVuY3Rpb25JbXAgKmZ1bmMgPSBuZXcgRnVu
Y3Rpb25JbXAoZXhlYywgaWRlbnQsIGJvZHkuZ2V0KCksIGV4ZWMtPnNjb3BlQ2hhaW4oKSk7CiAK
LSAgSlNPYmplY3QgKnByb3RvID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RD
b25zdHJ1Y3RvcigpLT5jb25zdHJ1Y3QoZXhlYywgTGlzdDo6ZW1wdHkoKSk7CisgIEpTT2JqZWN0
KiBwcm90byA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0Q29uc3RydWN0b3Io
KS0+Y29uc3RydWN0KGV4ZWMsIGV4ZWMtPmVtcHR5TGlzdCgpKTsKICAgcHJvdG8tPnB1dChleGVj
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGZ1bmMsIFJlYWRPbmx5IHwgRG9u
dERlbGV0ZSB8IERvbnRFbnVtKTsKICAgZnVuYy0+cHV0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5wcm90b3R5cGUsIHByb3RvLCBJbnRlcm5hbHxEb250RGVsZXRlKTsKIApAQCAtNDU0NSw3
ICs0NTQ3LDcgQEAgSlNWYWx1ZSAqRnVuY0V4cHJOb2RlOjpldmFsdWF0ZShFeGVjU3RhdAogICB9
CiAKICAgRnVuY3Rpb25JbXAqIGZ1bmMgPSBuZXcgRnVuY3Rpb25JbXAoZXhlYywgaWRlbnQsIGJv
ZHkuZ2V0KCksIGV4ZWMtPnNjb3BlQ2hhaW4oKSk7Ci0gIEpTT2JqZWN0KiBwcm90byA9IGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0Q29uc3RydWN0b3IoKS0+Y29uc3RydWN0KGV4
ZWMsIExpc3Q6OmVtcHR5KCkpOworICBKU09iamVjdCogcHJvdG8gPSBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPm9iamVjdENvbnN0cnVjdG9yKCktPmNvbnN0cnVjdChleGVjLCBleGVjLT5l
bXB0eUxpc3QoKSk7CiAgIHByb3RvLT5wdXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNv
bnN0cnVjdG9yLCBmdW5jLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiAgIGZ1
bmMtPnB1dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBwcm90bywgSW50
ZXJuYWwgfCBEb250RGVsZXRlKTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5jcHAJKHJldmlzaW9u
IDI5MDQ5KQorKysgSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM1Myw3ICszNTMsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlICp0cnlHZXRB
bmRDCiAgICAgSlNPYmplY3QgKm8gPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYpOwogICAgIGlm
IChvLT5pbXBsZW1lbnRzQ2FsbCgpKSB7IC8vIHNwZWMgc2F5cyAibm90IHByaW1pdGl2ZSB0eXBl
IiBidXQgLi4uCiAgICAgICBKU09iamVjdCAqdGhpc09iaiA9IGNvbnN0X2Nhc3Q8SlNPYmplY3Qq
PihvYmplY3QpOwotICAgICAgSlNWYWx1ZSAqZGVmID0gby0+Y2FsbChleGVjLCB0aGlzT2JqLCBM
aXN0OjplbXB0eSgpKTsKKyAgICAgIEpTVmFsdWUqIGRlZiA9IG8tPmNhbGwoZXhlYywgdGhpc09i
aiwgZXhlYy0+ZW1wdHlMaXN0KCkpOwogICAgICAgSlNUeXBlIGRlZlR5cGUgPSBkZWYtPnR5cGUo
KTsKICAgICAgIEFTU0VSVChkZWZUeXBlICE9IEdldHRlclNldHRlclR5cGUpOwogICAgICAgaWYg
KGRlZlR5cGUgIT0gT2JqZWN0VHlwZSkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0
eV9zbG90LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfc2xv
dC5jcHAJKHJldmlzaW9uIDI5MDQ5KQorKysgSmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X3Ns
b3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIEpTVmFsdWUgKlByb3BlcnR5
U2xvdDo6dW5kZWZpbmVkR2V0dGVyKEUKIAogSlNWYWx1ZSAqUHJvcGVydHlTbG90OjpmdW5jdGlv
bkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICByZXR1cm4gc2xv
dC5tX2RhdGEuZ2V0dGVyRnVuYy0+Y2FsbChleGVjLCBvcmlnaW5hbE9iamVjdCwgTGlzdDo6ZW1w
dHkoKSk7CisgICAgcmV0dXJuIHNsb3QubV9kYXRhLmdldHRlckZ1bmMtPmNhbGwoZXhlYywgb3Jp
Z2luYWxPYmplY3QsIGV4ZWMtPmVtcHR5TGlzdCgpKTsKIH0KIAogfQpJbmRleDogSmF2YVNjcmlw
dENvcmUva2pzL3N0cmluZ19vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2tqcy9zdHJpbmdfb2JqZWN0LmNwcAkocmV2aXNpb24gMjkwNDkpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvc3RyaW5nX29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2Miw3ICs2NjIsNyBA
QCBKU1ZhbHVlKiBTdHJpbmdQcm90b0Z1bmNTcGxpdDo6Y2FsbEFzRnVuCiAgICAgSlNWYWx1ZSog
YTEgPSBhcmdzWzFdOwogCiAgICAgSlNPYmplY3QgKmNvbnN0cnVjdG9yID0gZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5hcnJheUNvbnN0cnVjdG9yKCk7Ci0gICAgSlNPYmplY3QgKnJlcyA9
IHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KGNvbnN0cnVjdG9yLT5jb25zdHJ1Y3QoZXhlYyxMaXN0
OjplbXB0eSgpKSk7CisgICAgSlNPYmplY3QqIHJlcyA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4o
Y29uc3RydWN0b3ItPmNvbnN0cnVjdChleGVjLCBleGVjLT5lbXB0eUxpc3QoKSkpOwogICAgIEpT
VmFsdWUqIHJlc3VsdCA9IHJlczsKICAgICBVU3RyaW5nIHUgPSBzOwogICAgIGludCBwb3M7Cg==
</data>
<flag name="review"
          id="7924"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>