<?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>20928</bug_id>
          
          <creation_ts>2008-09-18 17:21:46 -0700</creation_ts>
          <short_desc>Speed up JS property enumeration by caching entire PropertyNameArray</short_desc>
          <delta_ts>2008-09-19 19:25:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>91702</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-09-18 17:21:46 -0700</bug_when>
    <thetext>We can speed up JavaScript property enumeration (for .. in) by caching the entire PropertyNameArray in the StructureID instead of just the properties in the PropertyMap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91730</commentid>
    <comment_count>1</comment_count>
      <attachid>23556</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-09-18 23:36:34 -0700</bug_when>
    <thetext>Created attachment 23556
cache entire PropertyNameArray</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91732</commentid>
    <comment_count>2</comment_count>
      <attachid>23556</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-18 23:45:06 -0700</bug_when>
    <thetext>Comment on attachment 23556
cache entire PropertyNameArray

JSPropertyNameIterator::invalidate is so simple now it should probably be inlined. Maybe also use clear() instead of assigning 0?

+    , m_data(0)

Don&apos;t need that for RefPtr.

+inline JSPropertyNameIterator::JSPropertyNameIterator(JSObject* object, PropertyNameArrayData* propertyNameArrayData)

Should PropertyNameArrayData* should be PassRefPtr, since this takes ownership.

+        void setCachedPrototypeChain(StructureIDChain* cachedPrototypeChain) { m_cachedPrototypeChain = cachedPrototypeChain; }

+        void setData(PropertyNameArrayData* data) { m_data = data; } 

Should be PassRefPtr since these take ownership.

+        if ((*a).get() != (*b).get())
+            return false;

These would read better with -&gt; but can&apos;t you just omit the get() altogether?

+        if (!(*a).get())
+            return true;

This would read better with -&gt; but can&apos;t you just omit the get() altogether?

+    ASSERT_NOT_REACHED();
+    return false;

This will just create a warning on Windows and make the build fail. Leave it out.

+    // FIXME: This breaks the optimization for the JSGlobalObject. 

I think you should write a clearer comment. Does this really need a FIXME?

I&apos;m going to say review- because of the number of actionable comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91830</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-09-19 16:40:20 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 23556 [edit])
&gt; JSPropertyNameIterator::invalidate is so simple now it should probably be
&gt; inlined. Maybe also use clear() instead of assigning 0?
&gt; 
&gt; +    , m_data(0)
&gt; 
&gt; Don&apos;t need that for RefPtr.

Fixed.

&gt; 
&gt; +inline JSPropertyNameIterator::JSPropertyNameIterator(JSObject* object,
&gt; PropertyNameArrayData* propertyNameArrayData)

Fixed.

&gt; 
&gt; Should PropertyNameArrayData* should be PassRefPtr, since this takes ownership.
&gt; 
&gt; +        void setCachedPrototypeChain(StructureIDChain* cachedPrototypeChain) {
&gt; m_cachedPrototypeChain = cachedPrototypeChain; }
&gt; 
&gt; +        void setData(PropertyNameArrayData* data) { m_data = data; } 
&gt; 
&gt; Should be PassRefPtr since these take ownership.

I don&apos;t think this is true, because the ownership is actually shared.

&gt; 
&gt; +        if ((*a).get() != (*b).get())
&gt; +            return false;
&gt; 
&gt; These would read better with -&gt; but can&apos;t you just omit the get() altogether?
&gt; 
&gt; +        if (!(*a).get())
&gt; +            return true;
&gt; 
&gt; This would read better with -&gt; but can&apos;t you just omit the get() altogether?

Fixed

&gt; 
&gt; +    ASSERT_NOT_REACHED();
&gt; +    return false;
&gt; 
&gt; This will just create a warning on Windows and make the build fail. Leave it
&gt; out.
&gt; 

Fixed.

&gt; +    // FIXME: This breaks the optimization for the JSGlobalObject. 
&gt; 
&gt; I think you should write a clearer comment. Does this really need a FIXME?

Removed.

&gt; 
&gt; I&apos;m going to say review- because of the number of actionable comments.
&gt; 

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91831</commentid>
    <comment_count>4</comment_count>
      <attachid>23585</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-09-19 16:41:01 -0700</bug_when>
    <thetext>Created attachment 23585
updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91846</commentid>
    <comment_count>5</comment_count>
      <attachid>23588</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-09-19 17:50:34 -0700</bug_when>
    <thetext>Created attachment 23588
updated</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91849</commentid>
    <comment_count>6</comment_count>
      <attachid>23588</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-19 17:56:57 -0700</bug_when>
    <thetext>Comment on attachment 23588
updated

r=me

We discussed some things you forgot to do in person, and I think it would be good to do them, but the patch is super-great to land even as-is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91856</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-09-19 19:25:28 -0700</bug_when>
    <thetext>Fixed in r36694.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23556</attachid>
            <date>2008-09-18 23:36:34 -0700</date>
            <delta_ts>2008-09-19 16:41:01 -0700</delta_ts>
            <desc>cache entire PropertyNameArray</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>19990</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM2NjU5
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAKKzIwMDgtMDkt
MTggIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwOTI4CisgICAgICAgIFNwZWVkIHVwIEpTIHByb3BlcnR5IGVu
dW1lcmF0aW9uIGJ5IGNhY2hpbmcgZW50aXJlIFByb3BlcnR5TmFtZUFycmF5CisKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICogVk0vSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmludmFsaWRhdGUp
OgorICAgICAgICAqIFZNL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6
SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcik6CisgICAgICAg
IChKU0M6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZSk6CisgICAgICAgICoga2pzL0pT
T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMpOgor
ICAgICAgICAqIGtqcy9Qcm9wZXJ0eU1hcC5jcHA6CisgICAgICAgIChKU0M6OlByb3BlcnR5TWFw
OjpnZXRFbnVtZXJhYmxlUHJvcGVydHlOYW1lcyk6CisgICAgICAgICoga2pzL1Byb3BlcnR5TWFw
Lmg6CisgICAgICAgICoga2pzL1Byb3BlcnR5TmFtZUFycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6
UHJvcGVydHlOYW1lQXJyYXk6OmFkZCk6CisgICAgICAgICoga2pzL1Byb3BlcnR5TmFtZUFycmF5
Lmg6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5RGF0YTo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6UHJvcGVydHlOYW1lQXJyYXlEYXRhOjpwcm9wZXJ0eU5hbWVWZWN0b3IpOgorICAg
ICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheURhdGE6OnNldENhY2hlZFByb3RvdHlwZUNoYWlu
KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lQXJyYXlEYXRhOjpjYWNoZWRQcm90b3R5cGVD
aGFpbik6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5RGF0YTo6UHJvcGVydHlOYW1l
QXJyYXlEYXRhKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lQXJyYXk6OlByb3BlcnR5TmFt
ZUFycmF5KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lQXJyYXk6OmFkZEtub3duVW5pcXVl
KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lQXJyYXk6OmJlZ2luKToKKyAgICAgICAgKEpT
Qzo6UHJvcGVydHlOYW1lQXJyYXk6OmVuZCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFy
cmF5OjpzaXplKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lQXJyYXk6Om9wZXJhdG9yW10p
OgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheTo6cmVsZWFzZUlkZW50aWZpZXJzKToK
KyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lQXJyYXk6OnNldERhdGEpOgorICAgICAgICAoSlND
OjpQcm9wZXJ0eU5hbWVBcnJheTo6ZGF0YSk6CisgICAgICAgICoga2pzL1N0cnVjdHVyZUlELmNw
cDoKKyAgICAgICAgKEpTQzo6c3RydWN0dXJlSURDaGFpbnNBcmVFcXVhbCk6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZUlEOjpnZXRFbnVtZXJhYmxlUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZUlEOjpjbGVhckVudW1lcmF0aW9uQ2FjaGUpOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVJRDo6Y3JlYXRlQ2FjaGVkUHJvdG90eXBlQ2hhaW4pOgorICAgICAgICAqIGtqcy9T
dHJ1Y3R1cmVJRC5oOgorCiAyMDA4LTA5LTE4ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgRml4IHN0eWxlLgpJbmRleDogSmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlLmV4cAkocmV2aXNpb24gMzY2NTMpCisrKyBKYXZhU2NyaXB0
Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw2ICsxMDgsNyBAQCBfX1pOM0pTQzExUHJv
cGVydHlNYXA5Z2V0T2Zmc2V0RVJLTlNfMTBJCiBfX1pOM0pTQzExUHJvcGVydHlNYXA5Z2V0T2Zm
c2V0RVJLTlNfMTBJZGVudGlmaWVyRVJqCiBfX1pOM0pTQzExUHJvcGVydHlNYXBEMUV2CiBfX1pO
M0pTQzExU3RydWN0dXJlSUQyMWFkZFByb3BlcnR5VHJhbnNpdGlvbkVQUzBfUktOU18xMElkZW50
aWZpZXJFUE5TXzdKU1ZhbHVlRWpQTlNfOEpTT2JqZWN0RVJOU18xNVB1dFByb3BlcnR5U2xvdEVS
UFM2XworX19aTjNKU0MxMVN0cnVjdHVyZUlEMjFjbGVhckVudW1lcmF0aW9uQ2FjaGVFdgogX19a
TjNKU0MxMVN0cnVjdHVyZUlEMjRmcm9tRGljdGlvbmFyeVRyYW5zaXRpb25FUFMwXwogX19aTjNK
U0MxMVN0cnVjdHVyZUlEMjVjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uRVBTMF9QTlNfN0pTVmFs
dWVFCiBfX1pOM0pTQzExU3RydWN0dXJlSURDMUVQTlNfN0pTVmFsdWVFTlNfNkpTVHlwZUUKSW5k
ZXg6IFZNL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL0pTUHJv
cGVydHlOYW1lSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAzNjY1MykKKysrIFZNL0pTUHJvcGVydHlO
YW1lSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MywxMyArODMsOCBAQCB2b2lkIEpT
UHJvcGVydHlOYW1lSXRlcmF0b3I6Om1hcmsoKQogCiB2b2lkIEpTUHJvcGVydHlOYW1lSXRlcmF0
b3I6OmludmFsaWRhdGUoKQogewotICAgIGlmIChtX3Byb3BlcnR5TmFtZXMpIHsKLSAgICAgICAg
Zm9yIChJZGVudGlmaWVyKiBwID0gbV9wcm9wZXJ0eU5hbWVzOyBwICE9IG1fZW5kOyArK3ApCi0g
ICAgICAgICAgICBwLT5+SWRlbnRpZmllcigpOwotICAgICAgICBmYXN0RnJlZShtX3Byb3BlcnR5
TmFtZXMpOwotICAgIH0KICAgICBtX29iamVjdCA9IDA7Ci0gICAgbV9wcm9wZXJ0eU5hbWVzID0g
MDsKKyAgICBtX2RhdGEgPSAwOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFZNL0pT
UHJvcGVydHlOYW1lSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9KU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yLmgJKHJldmlzaW9uIDM2NjUzKQorKysgVk0vSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NywzMyArNTcsNDIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgaW52YWxpZGF0ZSgpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvcihKU09iamVjdCosIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZXMsIHNpemVf
dCBudW1Qcm9wZXJ0aWVzKTsKKyAgICAgICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcigpOworICAg
ICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKEpTT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXlE
YXRhKiBwcm9wZXJ0eU5hbWVBcnJheURhdGEpOwogCiAgICAgICAgIEpTT2JqZWN0KiBtX29iamVj
dDsKLSAgICAgICAgSWRlbnRpZmllciogbV9wcm9wZXJ0eU5hbWVzOwotICAgICAgICBJZGVudGlm
aWVyKiBtX3Bvc2l0aW9uOwotICAgICAgICBJZGVudGlmaWVyKiBtX2VuZDsKKyAgICAgICAgUmVm
UHRyPFByb3BlcnR5TmFtZUFycmF5RGF0YT4gbV9kYXRhOworICAgICAgICBQcm9wZXJ0eU5hbWVB
cnJheURhdGE6OmNvbnN0X2l0ZXJhdG9yIG1fcG9zaXRpb247CisgICAgICAgIFByb3BlcnR5TmFt
ZUFycmF5RGF0YTo6Y29uc3RfaXRlcmF0b3IgbV9lbmQ7CiAgICAgfTsKIAotaW5saW5lIEpTUHJv
cGVydHlOYW1lSXRlcmF0b3I6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3IoSlNPYmplY3QqIG9iamVj
dCwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lcywgc2l6ZV90IG51bVByb3BlcnRpZXMpCitpbmxp
bmUgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcigpCisgICAg
OiBKU0NlbGwoMCkKKyAgICAsIG1fb2JqZWN0KDApCisgICAgLCBtX2RhdGEoMCkKKyAgICAsIG1f
cG9zaXRpb24oMCkKKyAgICAsIG1fZW5kKDApCit7Cit9CisKK2lubGluZSBKU1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yOjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKEpTT2JqZWN0KiBvYmplY3QsIFByb3Bl
cnR5TmFtZUFycmF5RGF0YSogcHJvcGVydHlOYW1lQXJyYXlEYXRhKQogICAgIDogSlNDZWxsKDAp
CiAgICAgLCBtX29iamVjdChvYmplY3QpCi0gICAgLCBtX3Byb3BlcnR5TmFtZXMocHJvcGVydHlO
YW1lcykKLSAgICAsIG1fcG9zaXRpb24ocHJvcGVydHlOYW1lcykKLSAgICAsIG1fZW5kKHByb3Bl
cnR5TmFtZXMgKyBudW1Qcm9wZXJ0aWVzKQorICAgICwgbV9kYXRhKHByb3BlcnR5TmFtZUFycmF5
RGF0YSkKKyAgICAsIG1fcG9zaXRpb24ocHJvcGVydHlOYW1lQXJyYXlEYXRhLT5wcm9wZXJ0eU5h
bWVWZWN0b3IoKS5iZWdpbigpKQorICAgICwgbV9lbmQocHJvcGVydHlOYW1lQXJyYXlEYXRhLT5w
cm9wZXJ0eU5hbWVWZWN0b3IoKS5lbmQoKSkKIHsKIH0KIAogaW5saW5lIEpTUHJvcGVydHlOYW1l
SXRlcmF0b3IqIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUqIHYpCiB7CiAgICAgaWYgKHYtPmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAg
IHJldHVybiBuZXcgKGV4ZWMpIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IoMCwgMCwgMCk7CisgICAg
ICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I7CiAKICAgICBKU09i
amVjdCogbyA9IHYtPnRvT2JqZWN0KGV4ZWMpOwogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3Bl
cnR5TmFtZXMoZXhlYyk7CiAgICAgby0+Z2V0UHJvcGVydHlOYW1lcyhleGVjLCBwcm9wZXJ0eU5h
bWVzKTsKLSAgICBzaXplX3QgbnVtUHJvcGVydGllcyA9IHByb3BlcnR5TmFtZXMuc2l6ZSgpOwot
ICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IobywgcHJvcGVydHlO
YW1lcy5yZWxlYXNlSWRlbnRpZmllcnMoKSwgbnVtUHJvcGVydGllcyk7CisgICAgcmV0dXJuIG5l
dyAoZXhlYykgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcihvLCBwcm9wZXJ0eU5hbWVzLmRhdGEoKSk7
CiB9CiAKIGlubGluZSBKU1ZhbHVlKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpuZXh0KEV4ZWNT
dGF0ZSogZXhlYykKSW5kZXg6IGtqcy9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL0pT
T2JqZWN0LmNwcAkocmV2aXNpb24gMzY2NTMpCisrKyBranMvSlNPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MzIsMjUgKzQzMiw3IEBAIGJvb2wgSlNPYmplY3Q6OmdldFByb3BlcnR5QXR0
cmlidXRlcyhFeGUKIAogdm9pZCBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzKQogewotICAgIG1fc3RydWN0
dXJlSUQtPmdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKHByb3BlcnR5TmFtZXMpOwotCi0gICAg
Ly8gQWRkIHByb3BlcnRpZXMgZnJvbSB0aGUgc3RhdGljIGhhc2h0YWJsZXMgb2YgcHJvcGVydGll
cwotICAgIGZvciAoY29uc3QgQ2xhc3NJbmZvKiBpbmZvID0gY2xhc3NJbmZvKCk7IGluZm87IGlu
Zm8gPSBpbmZvLT5wYXJlbnRDbGFzcykgewotICAgICAgICBjb25zdCBIYXNoVGFibGUqIHRhYmxl
ID0gaW5mby0+cHJvcEhhc2hUYWJsZShleGVjKTsKLSAgICAgICAgaWYgKCF0YWJsZSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICB0YWJsZS0+aW5pdGlhbGl6ZUlmTmVlZGVkKGV4ZWMp
OwotICAgICAgICBBU1NFUlQodGFibGUtPnRhYmxlKTsKLSAgICAgICAgaW50IGhhc2hTaXplTWFz
ayA9IHRhYmxlLT5oYXNoU2l6ZU1hc2s7Ci0gICAgICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkg
PSB0YWJsZS0+dGFibGU7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IGhhc2hTaXplTWFz
azsgKytpLCArK2VudHJ5KSB7Ci0gICAgICAgICAgICBpZiAoZW50cnktPmtleSAmJiAhKGVudHJ5
LT5hdHRyaWJ1dGVzICYgRG9udEVudW0pKQotICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKGVudHJ5LT5rZXkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHByb3RvdHlwZSgp
LT5pc09iamVjdCgpKQotICAgICAgICBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHByb3RvdHlwZSgp
KS0+Z2V0UHJvcGVydHlOYW1lcyhleGVjLCBwcm9wZXJ0eU5hbWVzKTsKKyAgICBtX3N0cnVjdHVy
ZUlELT5nZXRFbnVtZXJhYmxlUHJvcGVydHlOYW1lcyhleGVjLCBwcm9wZXJ0eU5hbWVzLCB0aGlz
KTsKIH0KIAogYm9vbCBKU09iamVjdDo6dG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0CkluZGV4
OiBranMvUHJvcGVydHlNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9Qcm9wZXJ0eU1hcC5jcHAJ
KHJldmlzaW9uIDM2NjUzKQorKysga2pzL1Byb3BlcnR5TWFwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIlByb3BlcnR5TWFwLmgiCiAKICNpbmNsdWRlICJK
U09iamVjdC5oIgorI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCiAjaW5jbHVkZSAicHJv
dGVjdC5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgpAQCAtNDcyLDcgKzQ3Myw3IEBAIHN0YXRpYyBpbnQgY29tcGFyZVByb3BlcnR5TWFwRW50cnlJ
bmRpY2UKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBQcm9wZXJ0eU1hcDo6Z2V0RW51bWVyYWJs
ZVByb3BlcnR5TmFtZXMoVmVjdG9yPFVTdHJpbmc6OlJlcCo+JiBwcm9wZXJ0eU5hbWVzKSBjb25z
dAordm9pZCBQcm9wZXJ0eU1hcDo6Z2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMoUHJvcGVydHlO
YW1lQXJyYXkmIHByb3BlcnR5TmFtZXMpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3RhYmxlKQogICAg
ICAgICByZXR1cm47CkBAIC00OTEsOSArNDkyLDE0IEBAIHZvaWQgUHJvcGVydHlNYXA6OmdldEVu
dW1lcmFibGVQcm9wZXJ0eU4KICAgICAgICAgICAgICAgICArK2k7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KLSAgICAgICAgcHJvcGVydHlOYW1lcy5yZXNlcnZlQ2FwYWNpdHkoaSk7Ci0gICAg
ICAgIGZvciAoaW50IGsgPSAwOyBrIDwgaTsgKytrKQotICAgICAgICAgICAgcHJvcGVydHlOYW1l
cy5hcHBlbmQoYVtrXS0+a2V5KTsKKyAgICAgICAgaWYgKCFwcm9wZXJ0eU5hbWVzLnNpemUoKSkg
eworICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBpOyArK2spCisgICAgICAgICAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGRLbm93blVuaXF1ZShhW2tdLT5rZXkpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBpOyArK2spCisgICAgICAgICAg
ICAgICAgcHJvcGVydHlOYW1lcy5hZGQoYVtrXS0+a2V5KTsKKyAgICAgICAgfQorCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTUxNCw5ICs1MjAsMTMgQEAgdm9pZCBQcm9wZXJ0eU1hcDo6
Z2V0RW51bWVyYWJsZVByb3BlcnR5TgogICAgIHNvcnRlZEVudW1lcmFibGVzLnJlc2l6ZShlbnVt
ZXJhYmxlQ291bnQpOwogCiAgICAgLy8gUHV0IHRoZSBrZXlzIG9mIHRoZSBzb3J0ZWQgZW50cmll
cyBpbnRvIHRoZSBsaXN0LgotICAgIHByb3BlcnR5TmFtZXMucmVzZXJ2ZUNhcGFjaXR5KHNvcnRl
ZEVudW1lcmFibGVzLnNpemUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzb3J0ZWRF
bnVtZXJhYmxlcy5zaXplKCk7ICsraSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hcHBlbmQoc29y
dGVkRW51bWVyYWJsZXNbaV0tPmtleSk7CisgICAgaWYgKCFwcm9wZXJ0eU5hbWVzLnNpemUoKSkg
eworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNvcnRlZEVudW1lcmFibGVzLnNpemUo
KTsgKytpKQorICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGRLbm93blVuaXF1ZShzb3J0ZWRF
bnVtZXJhYmxlc1tpXS0+a2V5KTsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNvcnRlZEVudW1lcmFibGVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgcHJv
cGVydHlOYW1lcy5hZGQoc29ydGVkRW51bWVyYWJsZXNbaV0tPmtleSk7CisgICAgfQogfQogCiAj
aWYgRE9fUFJPUEVSVFlNQVBfQ09OU1RFTkNZX0NIRUNLCkluZGV4OiBranMvUHJvcGVydHlNYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBranMvUHJvcGVydHlNYXAuaAkocmV2aXNpb24gMzY2NTMpCisrKyBr
anMvUHJvcGVydHlNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgIGNsYXNzIEpTT2JqZWN0OwogICAgIGNsYXNzIEpTVmFsdWU7CisgICAg
Y2xhc3MgUHJvcGVydHlOYW1lQXJyYXk7CiAKICAgICB0eXBlZGVmIEpTVmFsdWUqKiBQcm9wZXJ0
eVN0b3JhZ2U7CiAKQEAgLTkzLDcgKzk0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHNp
emVfdCBnZXRPZmZzZXQoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKICAgICAgICAg
c2l6ZV90IGdldE9mZnNldChjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVk
JiBhdHRyaWJ1dGVzKTsKIAotICAgICAgICB2b2lkIGdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVz
KFZlY3RvcjxVU3RyaW5nOjpSZXAqPiYpIGNvbnN0OworICAgICAgICB2b2lkIGdldEVudW1lcmFi
bGVQcm9wZXJ0eU5hbWVzKFByb3BlcnR5TmFtZUFycmF5JikgY29uc3Q7CiAKICAgICAgICAgYm9v
bCBoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9nZXR0ZXJTZXR0
ZXJGbGFnOyB9CiAgICAgICAgIHZvaWQgc2V0SGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyhib29s
IGYpIHsgbV9nZXR0ZXJTZXR0ZXJGbGFnID0gZjsgfQpJbmRleDoga2pzL1Byb3BlcnR5TmFtZUFy
cmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBranMvUHJvcGVydHlOYW1lQXJyYXkuY3BwCShyZXZpc2lv
biAzNjY1MykKKysrIGtqcy9Qcm9wZXJ0eU5hbWVBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDIyICsyOSwyMiBAQCB2b2lkIFByb3BlcnR5TmFtZUFycmF5OjphZGQoVVN0cmluZzo6UmVw
CiB7CiAgICAgQVNTRVJUKGlkZW50aWZpZXIgPT0gJlVTdHJpbmc6OlJlcDo6bnVsbCB8fCBpZGVu
dGlmaWVyID09ICZVU3RyaW5nOjpSZXA6OmVtcHR5IHx8IGlkZW50aWZpZXItPmlkZW50aWZpZXJU
YWJsZSgpKTsKIAotICAgIHNpemVfdCBzaXplID0gbV92ZWN0b3Iuc2l6ZSgpOworICAgIHNpemVf
dCBzaXplID0gbV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5zaXplKCk7CiAgICAgaWYgKHNp
emUgPCBzZXRUaHJlc2hvbGQpIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXpl
OyArK2kpIHsKLSAgICAgICAgICAgIGlmIChpZGVudGlmaWVyID09IG1fdmVjdG9yW2ldLnVzdHJp
bmcoKS5yZXAoKSkKKyAgICAgICAgICAgIGlmIChpZGVudGlmaWVyID09IG1fZGF0YS0+cHJvcGVy
dHlOYW1lVmVjdG9yKClbaV0udXN0cmluZygpLnJlcCgpKQogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChtX3NldC5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAg
ICAgICAgICAgIG1fc2V0LmFkZChtX3ZlY3RvcltpXS51c3RyaW5nKCkucmVwKCkpOworICAgICAg
ICAgICAgICAgIG1fc2V0LmFkZChtX2RhdGEtPnByb3BlcnR5TmFtZVZlY3RvcigpW2ldLnVzdHJp
bmcoKS5yZXAoKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFtX3NldC5hZGQoaWRlbnRpZmll
cikuc2Vjb25kKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fdmVjdG9yLmFw
cGVuZChJZGVudGlmaWVyKG1fZ2xvYmFsRGF0YSwgaWRlbnRpZmllcikpOworICAgIG1fZGF0YS0+
cHJvcGVydHlOYW1lVmVjdG9yKCkuYXBwZW5kKElkZW50aWZpZXIobV9nbG9iYWxEYXRhLCBpZGVu
dGlmaWVyKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDoga2pzL1Byb3BlcnR5TmFt
ZUFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL1Byb3BlcnR5TmFtZUFycmF5LmgJKHJldmlzaW9u
IDM2NjUzKQorKysga2pzL1Byb3BlcnR5TmFtZUFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDI0ICsyMiw0NyBAQAogI2RlZmluZSBQcm9wZXJ0eU5hbWVBcnJheV9oCiAKICNpbmNsdWRlICJF
eGVjU3RhdGUuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVJRC5oIgogI2luY2x1ZGUgImlkZW50aWZp
ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IAogbmFtZXNwYWNlIEpTQyB7CiAKKyAgICBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheURhdGEgOiBw
dWJsaWMgUmVmQ291bnRlZDxQcm9wZXJ0eU5hbWVBcnJheURhdGE+IHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIHR5cGVkZWYgVmVjdG9yPElkZW50aWZpZXIsIDIwPiBQcm9wZXJ0eU5hbWVWZWN0b3I7
CisgICAgICAgIHR5cGVkZWYgUHJvcGVydHlOYW1lVmVjdG9yOjppdGVyYXRvciBpdGVyYXRvcjsK
KyAgICAgICAgdHlwZWRlZiBQcm9wZXJ0eU5hbWVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0
X2l0ZXJhdG9yOworCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFByb3BlcnR5TmFtZUFycmF5
RGF0YT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFByb3BlcnR5TmFtZUFycmF5RGF0
YSk7IH0KKworICAgICAgICBQcm9wZXJ0eU5hbWVWZWN0b3ImIHByb3BlcnR5TmFtZVZlY3Rvcigp
IHsgcmV0dXJuIG1fcHJvcGVydHlOYW1lVmVjdG9yOyB9CisKKyAgICAgICAgdm9pZCBzZXRDYWNo
ZWRQcm90b3R5cGVDaGFpbihTdHJ1Y3R1cmVJRENoYWluKiBjYWNoZWRQcm90b3R5cGVDaGFpbikg
eyBtX2NhY2hlZFByb3RvdHlwZUNoYWluID0gY2FjaGVkUHJvdG90eXBlQ2hhaW47IH0KKyAgICAg
ICAgU3RydWN0dXJlSURDaGFpbiogY2FjaGVkUHJvdG90eXBlQ2hhaW4oKSB7IHJldHVybiBtX2Nh
Y2hlZFByb3RvdHlwZUNoYWluLmdldCgpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBQcm9w
ZXJ0eU5hbWVBcnJheURhdGEoKSB7IH0KKworICAgICAgICBQcm9wZXJ0eU5hbWVWZWN0b3IgbV9w
cm9wZXJ0eU5hbWVWZWN0b3I7CisgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmVJRENoYWluPiBtX2Nh
Y2hlZFByb3RvdHlwZUNoYWluOworICAgIH07CisKICAgICBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJh
eSB7CiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIElkZW50aWZpZXIgVmFsdWVUeXBlOwot
ICAgICAgICB0eXBlZGVmIFZlY3RvcjxJZGVudGlmaWVyPjo6Y29uc3RfaXRlcmF0b3IgY29uc3Rf
aXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgUHJvcGVydHlOYW1lQXJyYXlEYXRhOjpjb25zdF9p
dGVyYXRvciBjb25zdF9pdGVyYXRvcjsKIAogICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheShKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEpCi0gICAgICAgICAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxE
YXRhKQorICAgICAgICAgICAgOiBtX2RhdGEoUHJvcGVydHlOYW1lQXJyYXlEYXRhOjpjcmVhdGUo
KSkKKyAgICAgICAgICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCiAgICAgICAgIHsKICAg
ICAgICAgfQogCiAgICAgICAgIFByb3BlcnR5TmFtZUFycmF5KEV4ZWNTdGF0ZSogZXhlYykKLSAg
ICAgICAgICAgIDogbV9nbG9iYWxEYXRhKCZleGVjLT5nbG9iYWxEYXRhKCkpCisgICAgICAgICAg
ICA6IG1fZGF0YShQcm9wZXJ0eU5hbWVBcnJheURhdGE6OmNyZWF0ZSgpKQorICAgICAgICAgICAg
LCBtX2dsb2JhbERhdGEoJmV4ZWMtPmdsb2JhbERhdGEoKSkKICAgICAgICAgewogICAgICAgICB9
CiAKQEAgLTQ3LDIyICs3MCwyNSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGFk
ZChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKSB7IGFkZChpZGVudGlmaWVyLnVzdHJpbmco
KS5yZXAoKSk7IH0KICAgICAgICAgdm9pZCBhZGQoVVN0cmluZzo6UmVwKik7Ci0gICAgICAgIHZv
aWQgYWRkS25vd25VbmlxdWUoVVN0cmluZzo6UmVwKiBpZGVudGlmaWVyKSB7IG1fdmVjdG9yLmFw
cGVuZChJZGVudGlmaWVyKG1fZ2xvYmFsRGF0YSwgaWRlbnRpZmllcikpOyB9CisgICAgICAgIHZv
aWQgYWRkS25vd25VbmlxdWUoVVN0cmluZzo6UmVwKiBpZGVudGlmaWVyKSB7IG1fZGF0YS0+cHJv
cGVydHlOYW1lVmVjdG9yKCkuYXBwZW5kKElkZW50aWZpZXIobV9nbG9iYWxEYXRhLCBpZGVudGlm
aWVyKSk7IH0KKworICAgICAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKCkuYmVnaW4oKTsgfQorICAgICAgICBjb25zdF9p
dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2RhdGEtPnByb3BlcnR5TmFtZVZlY3Rvcigp
LmVuZCgpOyB9CiAKLSAgICAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVy
biBtX3ZlY3Rvci5iZWdpbigpOyB9Ci0gICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmVjdG9yLmVuZCgpOyB9CisgICAgICAgIHNpemVfdCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5zaXplKCk7IH0KIAotICAgICAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLnNpemUoKTsgfQorICAgICAg
ICBJZGVudGlmaWVyJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fZGF0YS0+cHJv
cGVydHlOYW1lVmVjdG9yKClbaV07IH0KKyAgICAgICAgY29uc3QgSWRlbnRpZmllciYgb3BlcmF0
b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2RhdGEtPnByb3BlcnR5TmFtZVZlY3Rv
cigpW2ldOyB9CiAKLSAgICAgICAgSWRlbnRpZmllciYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSB7
IHJldHVybiBtX3ZlY3RvcltpXTsgfQotICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBvcGVyYXRv
cltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yW2ldOyB9CisgICAgICAgIElk
ZW50aWZpZXIqIHJlbGVhc2VJZGVudGlmaWVycygpIHsgcmV0dXJuIHNpemUoKSA/IG1fZGF0YS0+
cHJvcGVydHlOYW1lVmVjdG9yKCkucmVsZWFzZUJ1ZmZlcigpIDogMDsgfQogCi0gICAgICAgIElk
ZW50aWZpZXIqIHJlbGVhc2VJZGVudGlmaWVycygpIHsgcmV0dXJuIHNpemUoKSA/IG1fdmVjdG9y
LnJlbGVhc2VCdWZmZXIoKSA6IDA7IH0KKyAgICAgICAgdm9pZCBzZXREYXRhKFByb3BlcnR5TmFt
ZUFycmF5RGF0YSogZGF0YSkgeyBtX2RhdGEgPSBkYXRhOyB9IAorICAgICAgICBQcm9wZXJ0eU5h
bWVBcnJheURhdGEqIGRhdGEoKSB7IHJldHVybiBtX2RhdGEuZ2V0KCk7IH0gCiAKICAgICBwcml2
YXRlOgogICAgICAgICB0eXBlZGVmIEhhc2hTZXQ8VVN0cmluZzo6UmVwKiwgUHRySGFzaDxVU3Ry
aW5nOjpSZXAqPiA+IElkZW50aWZpZXJTZXQ7CiAKLSAgICAgICAgVmVjdG9yPElkZW50aWZpZXIs
IDIwPiBtX3ZlY3RvcjsKKyAgICAgICAgUmVmUHRyPFByb3BlcnR5TmFtZUFycmF5RGF0YT4gbV9k
YXRhOwogICAgICAgICBJZGVudGlmaWVyU2V0IG1fc2V0OwogICAgICAgICBKU0dsb2JhbERhdGEq
IG1fZ2xvYmFsRGF0YTsKICAgICB9OwpJbmRleDoga2pzL1N0cnVjdHVyZUlELmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBranMvU3RydWN0dXJlSUQuY3BwCShyZXZpc2lvbiAzNjY1MykKKysrIGtqcy9TdHJ1
Y3R1cmVJRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJp
ZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5h
bWVBcnJheS5oIgorI2luY2x1ZGUgImxvb2t1cC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
IAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKQEAgLTQ4LDE4ICs0OSw3MSBAQCBTdHJ1Y3R1cmVJRDo6
U3RydWN0dXJlSUQoSlNWYWx1ZSogcHJvdG90CiAgICAgQVNTRVJUKG1fcHJvdG90eXBlLT5pc09i
amVjdCgpIHx8IG1fcHJvdG90eXBlLT5pc051bGwoKSk7CiB9CiAKLXZvaWQgU3RydWN0dXJlSUQ6
OmdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzKSBjb25zdAorc3RhdGljIGJvb2wgc3RydWN0dXJlSURDaGFpbnNBcmVFcXVhbChTdHJ1Y3R1
cmVJRENoYWluKiBjaGFpbkEsIFN0cnVjdHVyZUlEQ2hhaW4qIGNoYWluQikKIHsKLSAgICBpZiAo
bV9jYWNoZWRQcm9wZXJ0eU5hbWVBcnJheS5pc0VtcHR5KCkpCi0gICAgICAgIG1fcHJvcGVydHlN
YXAuZ2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMobV9jYWNoZWRQcm9wZXJ0eU5hbWVBcnJheSk7
CisgICAgaWYgKCFjaGFpbkEgfHwgIWNoYWluQikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgaWYgKCFwcm9wZXJ0eU5hbWVzLnNpemUoKSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fY2FjaGVkUHJvcGVydHlOYW1lQXJyYXkuc2l6ZSgpOyArK2kpCi0gICAgICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFkZEtub3duVW5pcXVlKG1fY2FjaGVkUHJvcGVydHlOYW1lQXJyYXlb
aV0pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jYWNo
ZWRQcm9wZXJ0eU5hbWVBcnJheS5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHByb3BlcnR5TmFt
ZXMuYWRkKG1fY2FjaGVkUHJvcGVydHlOYW1lQXJyYXlbaV0pOworICAgIFJlZlB0cjxTdHJ1Y3R1
cmVJRD4qIGEgPSBjaGFpbkEtPmhlYWQoKTsKKyAgICBSZWZQdHI8U3RydWN0dXJlSUQ+KiBiID0g
Y2hhaW5CLT5oZWFkKCk7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgaWYgKCgqYSkuZ2V0KCkg
IT0gKCpiKS5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCEo
KmEpLmdldCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGErKzsKKyAgICAg
ICAgYisrOwogICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgU3RydWN0dXJlSUQ6OmdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEpTT2JqZWN0
KiBiYXNlT2JqZWN0KQoreworICAgIC8vIE9ubHkgY2FjaGUgYXQgdGhlIHRvcCBsZXZlbC4KKyAg
ICAvLyBGSVhNRTogVGhpcyBicmVha3MgdGhlIG9wdGltaXphdGlvbiBmb3IgdGhlIEpTR2xvYmFs
T2JqZWN0LiAKKyAgICBib29sIGNhY2hlYWJsZSA9ICEocHJvcGVydHlOYW1lcy5zaXplKCkgfHwg
bV9pc0RpY3Rpb25hcnkpOworCisgICAgaWYgKGNhY2hlYWJsZSAmJiBtX2NhY2hlZFByb3BlcnR5
TmFtZUFycmF5RGF0YSkgeworICAgICAgICBpZiAoc3RydWN0dXJlSURDaGFpbnNBcmVFcXVhbCht
X2NhY2hlZFByb3BlcnR5TmFtZUFycmF5RGF0YS0+Y2FjaGVkUHJvdG90eXBlQ2hhaW4oKSwgY2Fj
aGVkUHJvdG90eXBlQ2hhaW4oKSkpIHsKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuc2V0RGF0
YShtX2NhY2hlZFByb3BlcnR5TmFtZUFycmF5RGF0YS5nZXQoKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX3Byb3BlcnR5TWFwLmdldEVudW1lcmFibGVQ
cm9wZXJ0eU5hbWVzKHByb3BlcnR5TmFtZXMpOworCisgICAgLy8gQWRkIHByb3BlcnRpZXMgZnJv
bSB0aGUgc3RhdGljIGhhc2h0YWJsZXMgb2YgcHJvcGVydGllcworICAgIGZvciAoY29uc3QgQ2xh
c3NJbmZvKiBpbmZvID0gYmFzZU9iamVjdC0+Y2xhc3NJbmZvKCk7IGluZm87IGluZm8gPSBpbmZv
LT5wYXJlbnRDbGFzcykgeworICAgICAgICBjb25zdCBIYXNoVGFibGUqIHRhYmxlID0gaW5mby0+
cHJvcEhhc2hUYWJsZShleGVjKTsKKyAgICAgICAgaWYgKCF0YWJsZSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB0YWJsZS0+aW5pdGlhbGl6ZUlmTmVlZGVkKGV4ZWMpOworICAgICAg
ICBBU1NFUlQodGFibGUtPnRhYmxlKTsKKyAgICAgICAgaW50IGhhc2hTaXplTWFzayA9IHRhYmxl
LT5oYXNoU2l6ZU1hc2s7CisgICAgICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSB0YWJsZS0+
dGFibGU7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IGhhc2hTaXplTWFzazsgKytpLCAr
K2VudHJ5KSB7CisgICAgICAgICAgICBpZiAoZW50cnktPmtleSAmJiAhKGVudHJ5LT5hdHRyaWJ1
dGVzICYgRG9udEVudW0pKQorICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGVudHJ5
LT5rZXkpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1fcHJvdG90eXBlLT5pc09iamVj
dCgpKQorICAgICAgICBzdGF0aWNfY2FzdDxKU09iamVjdCo+KG1fcHJvdG90eXBlKS0+Z2V0UHJv
cGVydHlOYW1lcyhleGVjLCBwcm9wZXJ0eU5hbWVzKTsKKworICAgIGlmIChjYWNoZWFibGUpIHsK
KyAgICAgICAgbV9jYWNoZWRQcm9wZXJ0eU5hbWVBcnJheURhdGEgPSBwcm9wZXJ0eU5hbWVzLmRh
dGEoKTsKKworICAgICAgICBTdHJ1Y3R1cmVJRENoYWluKiBjaGFpbiA9IGNhY2hlZFByb3RvdHlw
ZUNoYWluKCk7CisgICAgICAgIGlmICghY2hhaW4pCisgICAgICAgICAgICBjaGFpbiA9IGNyZWF0
ZUNhY2hlZFByb3RvdHlwZUNoYWluKCk7CisgICAgICAgIG1fY2FjaGVkUHJvcGVydHlOYW1lQXJy
YXlEYXRhLT5zZXRDYWNoZWRQcm90b3R5cGVDaGFpbihjaGFpbik7CisgICAgfQorfQorCit2b2lk
IFN0cnVjdHVyZUlEOjpjbGVhckVudW1lcmF0aW9uQ2FjaGUoKQoreworICAgIG1fY2FjaGVkUHJv
cGVydHlOYW1lQXJyYXlEYXRhLmNsZWFyKCk7CiB9CiAKIHZvaWQgU3RydWN0dXJlSUQ6OnRyYW5z
aXRpb25UbyhTdHJ1Y3R1cmVJRCogb2xkU3RydWN0dXJlSUQsIFN0cnVjdHVyZUlEKiBuZXdTdHJ1
Y3R1cmVJRCwgSlNPYmplY3QqIHNsb3RCYXNlKQpAQCAtMTUwLDYgKzIwNCwyMCBAQCBTdHJ1Y3R1
cmVJRDo6flN0cnVjdHVyZUlEKCkKICAgICB9CiB9CiAKK1N0cnVjdHVyZUlEQ2hhaW4qIFN0cnVj
dHVyZUlEOjpjcmVhdGVDYWNoZWRQcm90b3R5cGVDaGFpbigpCit7CisgICAgQVNTRVJUKG1fdHlw
ZSA9PSBPYmplY3RUeXBlKTsKKyAgICBBU1NFUlQoIW1fY2FjaGVkUHJvdG90eXBlQ2hhaW4pOwor
CisgICAgSlNWYWx1ZSogcHJvdG90eXBlID0gc3RvcmVkUHJvdG90eXBlKCk7CisgICAgaWYgKEpT
SW1tZWRpYXRlOjppc0ltbWVkaWF0ZShwcm90b3R5cGUpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIFJlZlB0cjxTdHJ1Y3R1cmVJRENoYWluPiBjaGFpbiA9IFN0cnVjdHVyZUlEQ2hhaW46OmNy
ZWF0ZShzdGF0aWNfY2FzdDxKU09iamVjdCo+KHByb3RvdHlwZSktPnN0cnVjdHVyZUlEKCkpOwor
ICAgIHNldENhY2hlZFByb3RvdHlwZUNoYWluKGNoYWluLnJlbGVhc2UoKSk7CisgICAgcmV0dXJu
IGNhY2hlZFByb3RvdHlwZUNoYWluKCk7Cit9CisKIFN0cnVjdHVyZUlEQ2hhaW46OlN0cnVjdHVy
ZUlEQ2hhaW4oU3RydWN0dXJlSUQqIHN0cnVjdHVyZUlEKQogewogICAgIHNpemVfdCBzaXplID0g
MTsKSW5kZXg6IGtqcy9TdHJ1Y3R1cmVJRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9TdHJ1Y3R1cmVJ
RC5oCShyZXZpc2lvbiAzNjY1MykKKysrIGtqcy9TdHJ1Y3R1cmVJRC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw2ICs0MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgSlNWYWx1ZTsK
ICAgICBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheTsKKyAgICBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJh
eURhdGE7CiAgICAgY2xhc3MgU3RydWN0dXJlSURDaGFpbjsKIAogICAgIHN0cnVjdCBUcmFuc2l0
aW9uVGFibGVIYXNoIHsKQEAgLTEwMiwxOCArMTAzLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIFN0cnVjdHVyZUlEKiBwcmV2aW91c0lEKCkgY29uc3QgeyByZXR1cm4gbV9wcmV2aW91
cy5nZXQoKTsgfQogCisgICAgICAgIFN0cnVjdHVyZUlEQ2hhaW4qIGNyZWF0ZUNhY2hlZFByb3Rv
dHlwZUNoYWluKCk7CiAgICAgICAgIHZvaWQgc2V0Q2FjaGVkUHJvdG90eXBlQ2hhaW4oUGFzc1Jl
ZlB0cjxTdHJ1Y3R1cmVJRENoYWluPiBjYWNoZWRQcm90b3R5cGVDaGFpbikgeyBtX2NhY2hlZFBy
b3RvdHlwZUNoYWluID0gY2FjaGVkUHJvdG90eXBlQ2hhaW47IH0KICAgICAgICAgU3RydWN0dXJl
SURDaGFpbiogY2FjaGVkUHJvdG90eXBlQ2hhaW4oKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFBy
b3RvdHlwZUNoYWluLmdldCgpOyB9CiAKICAgICAgICAgY29uc3QgUHJvcGVydHlNYXAmIHByb3Bl
cnR5TWFwKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eU1hcDsgfQogICAgICAgICBQcm9wZXJ0
eU1hcCYgcHJvcGVydHlNYXAoKSB7IHJldHVybiBtX3Byb3BlcnR5TWFwOyB9CiAKLSAgICAgICAg
dm9pZCBnZXRFbnVtZXJhYmxlUHJvcGVydHlOYW1lcyhQcm9wZXJ0eU5hbWVBcnJheSYpIGNvbnN0
OworICAgICAgICB2b2lkIGdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZUFycmF5JiwgSlNPYmplY3QqKTsKKyAgICAgICAgdm9pZCBjbGVhckVudW1lcmF0
aW9uQ2FjaGUoKTsKIAogICAgICAgICBzdGF0aWMgdm9pZCB0cmFuc2l0aW9uVG8oU3RydWN0dXJl
SUQqIG9sZFN0cnVjdHVyZUlELCBTdHJ1Y3R1cmVJRCogbmV3U3RydWN0dXJlSUQsIEpTT2JqZWN0
KiBzbG90QmFzZSk7CiAKLSAgICAgICAgdm9pZCBjbGVhckVudW1lcmF0aW9uQ2FjaGUoKSB7IG1f
Y2FjaGVkUHJvcGVydHlOYW1lQXJyYXkuY2xlYXIoKTsgfQotCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgdHlwZWRlZiBzdGQ6OnBhaXI8UmVmUHRyPFVTdHJpbmc6OlJlcD4sIHVuc2lnbmVkPiBUcmFu
c2l0aW9uVGFibGVLZXk7CiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxUcmFuc2l0aW9uVGFibGVL
ZXksIFN0cnVjdHVyZUlEKiwgVHJhbnNpdGlvblRhYmxlSGFzaCwgVHJhbnNpdGlvblRhYmxlSGFz
aFRyYWl0cz4gVHJhbnNpdGlvblRhYmxlOwpAQCAtMTM1LDcgKzEzNiw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBzaXplX3QgbV90cmFuc2l0aW9uQ291bnQ7CiAgICAgICAgIFRyYW5zaXRp
b25UYWJsZSBtX3RyYW5zaXRpb25UYWJsZTsKIAotICAgICAgICBtdXRhYmxlIFZlY3RvcjxVU3Ry
aW5nOjpSZXAqPiBtX2NhY2hlZFByb3BlcnR5TmFtZUFycmF5OworICAgICAgICBSZWZQdHI8UHJv
cGVydHlOYW1lQXJyYXlEYXRhPiBtX2NhY2hlZFByb3BlcnR5TmFtZUFycmF5RGF0YTsKIAogICAg
ICAgICBQcm9wZXJ0eU1hcCBtX3Byb3BlcnR5TWFwOwogICAgIH07Cg==
</data>
<flag name="review"
          id="10547"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23585</attachid>
            <date>2008-09-19 16:41:01 -0700</date>
            <delta_ts>2008-09-19 17:50:34 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>pnPatch.diff</filename>
            <type>text/plain</type>
            <size>21393</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM2Njgz
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAKKzIwMDgtMDkt
MTkgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwOTI4CisgICAgICAgIFNwZWVkIHVwIEpTIHByb3BlcnR5IGVu
dW1lcmF0aW9uIGJ5IGNhY2hpbmcgZW50aXJlIFByb3BlcnR5TmFtZUFycmF5CisKKyAgICAgICAg
MS4zJSBzcGVlZHVwIG9uIFN1bnNwaWRlciwgMzAlIG9uIHN0cmluZy1mYXN0YS4KKworICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLmV4cDoKKyAgICAgICAgKiBWTS9KU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6fkpTUHJvcGVy
dHlOYW1lSXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpp
bnZhbGlkYXRlKToKKyAgICAgICAgKiBWTS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmg6CisgICAg
ICAgIChKU0M6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3Ip
OgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpjcmVhdGUpOgorICAgICAg
ICAqIGtqcy9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRQcm9wZXJ0
eU5hbWVzKToKKyAgICAgICAgKiBranMvUHJvcGVydHlNYXAuY3BwOgorICAgICAgICAoSlNDOjpQ
cm9wZXJ0eU1hcDo6Z2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIGtqcy9Q
cm9wZXJ0eU1hcC5oOgorICAgICAgICAqIGtqcy9Qcm9wZXJ0eU5hbWVBcnJheS5jcHA6CisgICAg
ICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5OjphZGQpOgorICAgICAgICAqIGtqcy9Qcm9wZXJ0
eU5hbWVBcnJheS5oOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheURhdGE6OmNyZWF0
ZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5RGF0YTo6cHJvcGVydHlOYW1lVmVj
dG9yKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lQXJyYXlEYXRhOjpzZXRDYWNoZWRQcm90
b3R5cGVDaGFpbik6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5RGF0YTo6Y2FjaGVk
UHJvdG90eXBlQ2hhaW4pOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheURhdGE6OmJl
Z2luKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lQXJyYXlEYXRhOjplbmQpOgorICAgICAg
ICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheURhdGE6OlByb3BlcnR5TmFtZUFycmF5RGF0YSk6Cisg
ICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5OjpQcm9wZXJ0eU5hbWVBcnJheSk6CisgICAg
ICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5OjphZGRLbm93blVuaXF1ZSk6CisgICAgICAgIChK
U0M6OlByb3BlcnR5TmFtZUFycmF5OjpzaXplKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1l
QXJyYXk6Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheTo6YmVn
aW4pOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheTo6ZW5kKToKKyAgICAgICAgKEpT
Qzo6UHJvcGVydHlOYW1lQXJyYXk6OnNldERhdGEpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5h
bWVBcnJheTo6ZGF0YSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5OjpyZWxlYXNl
RGF0YSk6CisgICAgICAgICoga2pzL1Njb3BlQ2hhaW4uY3BwOgorICAgICAgICAoSlNDOjpTY29w
ZUNoYWluTm9kZTo6cHJpbnQpOgorICAgICAgICAqIGtqcy9TdHJ1Y3R1cmVJRC5jcHA6CisgICAg
ICAgIChKU0M6OnN0cnVjdHVyZUlEQ2hhaW5zQXJlRXF1YWwpOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVJRDo6Z2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVJRDo6Y2xlYXJFbnVtZXJhdGlvbkNhY2hlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
SUQ6OmNyZWF0ZUNhY2hlZFByb3RvdHlwZUNoYWluKToKKyAgICAgICAgKiBranMvU3RydWN0dXJl
SUQuaDoKKwogMjAwOC0wOS0xOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IEphdmFTY3JpcHRDb3JlLmV4cAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDM2NjgxKQorKysgSmF2
YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNiArMTA4LDcgQEAgX19aTjNK
U0MxMVByb3BlcnR5TWFwOWdldE9mZnNldEVSS05TXzEwSQogX19aTjNKU0MxMVByb3BlcnR5TWFw
OWdldE9mZnNldEVSS05TXzEwSWRlbnRpZmllckVSagogX19aTjNKU0MxMVByb3BlcnR5TWFwRDFF
dgogX19aTjNKU0MxMVN0cnVjdHVyZUlEMjFhZGRQcm9wZXJ0eVRyYW5zaXRpb25FUFMwX1JLTlNf
MTBJZGVudGlmaWVyRVBOU183SlNWYWx1ZUVqUE5TXzhKU09iamVjdEVSTlNfMTVQdXRQcm9wZXJ0
eVNsb3RFUlBTNl8KK19fWk4zSlNDMTFTdHJ1Y3R1cmVJRDIxY2xlYXJFbnVtZXJhdGlvbkNhY2hl
RXYKIF9fWk4zSlNDMTFTdHJ1Y3R1cmVJRDI0ZnJvbURpY3Rpb25hcnlUcmFuc2l0aW9uRVBTMF8K
IF9fWk4zSlNDMTFTdHJ1Y3R1cmVJRDI1Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbkVQUzBfUE5T
XzdKU1ZhbHVlRQogX19aTjNKU0MxMVN0cnVjdHVyZUlEQzFFUE5TXzdKU1ZhbHVlRU5TXzZKU1R5
cGVFCkluZGV4OiBWTS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBW
TS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMzY2ODEpCisrKyBWTS9KU1By
b3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBAQCBB
U1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTUHJvcGVydHlOYW1lCiAKIEpTUHJvcGVydHlOYW1l
SXRlcmF0b3I6On5KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKCkKIHsKLSAgICBpbnZhbGlkYXRlKCk7
CiB9CiAKIEpTVmFsdWUqIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OnRvUHJpbWl0aXZlKEV4ZWNT
dGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0CkBAIC04MywxMyArODIsOCBAQCB2
b2lkIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6Om1hcmsoKQogCiB2b2lkIEpTUHJvcGVydHlOYW1l
SXRlcmF0b3I6OmludmFsaWRhdGUoKQogewotICAgIGlmIChtX3Byb3BlcnR5TmFtZXMpIHsKLSAg
ICAgICAgZm9yIChJZGVudGlmaWVyKiBwID0gbV9wcm9wZXJ0eU5hbWVzOyBwICE9IG1fZW5kOyAr
K3ApCi0gICAgICAgICAgICBwLT5+SWRlbnRpZmllcigpOwotICAgICAgICBmYXN0RnJlZShtX3By
b3BlcnR5TmFtZXMpOwotICAgIH0KICAgICBtX29iamVjdCA9IDA7Ci0gICAgbV9wcm9wZXJ0eU5h
bWVzID0gMDsKKyAgICBtX2RhdGEgPSAwOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFZNL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9KU1Byb3BlcnR5
TmFtZUl0ZXJhdG9yLmgJKHJldmlzaW9uIDM2NjgxKQorKysgVk0vSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NywzMyArNTcsNDIgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgaW52YWxpZGF0ZSgpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvcihKU09iamVjdCosIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZXMs
IHNpemVfdCBudW1Qcm9wZXJ0aWVzKTsKKyAgICAgICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcigp
OworICAgICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKEpTT2JqZWN0KiwgUGFzc1JlZlB0cjxQ
cm9wZXJ0eU5hbWVBcnJheURhdGE+IHByb3BlcnR5TmFtZUFycmF5RGF0YSk7CiAKICAgICAgICAg
SlNPYmplY3QqIG1fb2JqZWN0OwotICAgICAgICBJZGVudGlmaWVyKiBtX3Byb3BlcnR5TmFtZXM7
Ci0gICAgICAgIElkZW50aWZpZXIqIG1fcG9zaXRpb247Ci0gICAgICAgIElkZW50aWZpZXIqIG1f
ZW5kOworICAgICAgICBSZWZQdHI8UHJvcGVydHlOYW1lQXJyYXlEYXRhPiBtX2RhdGE7CisgICAg
ICAgIFByb3BlcnR5TmFtZUFycmF5RGF0YTo6Y29uc3RfaXRlcmF0b3IgbV9wb3NpdGlvbjsKKyAg
ICAgICAgUHJvcGVydHlOYW1lQXJyYXlEYXRhOjpjb25zdF9pdGVyYXRvciBtX2VuZDsKICAgICB9
OwogCi1pbmxpbmUgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRv
cihKU09iamVjdCogb2JqZWN0LCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWVzLCBzaXplX3QgbnVt
UHJvcGVydGllcykKK2lubGluZSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpKU1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yKCkKKyAgICA6IEpTQ2VsbCgwKQorICAgICwgbV9vYmplY3QoMCkKKyAgICAsIG1f
ZGF0YSgwKQorICAgICwgbV9wb3NpdGlvbigwKQorICAgICwgbV9lbmQoMCkKK3sKK30KKworaW5s
aW5lIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3IoSlNPYmpl
Y3QqIG9iamVjdCwgUGFzc1JlZlB0cjxQcm9wZXJ0eU5hbWVBcnJheURhdGE+IHByb3BlcnR5TmFt
ZUFycmF5RGF0YSkKICAgICA6IEpTQ2VsbCgwKQogICAgICwgbV9vYmplY3Qob2JqZWN0KQotICAg
ICwgbV9wcm9wZXJ0eU5hbWVzKHByb3BlcnR5TmFtZXMpCi0gICAgLCBtX3Bvc2l0aW9uKHByb3Bl
cnR5TmFtZXMpCi0gICAgLCBtX2VuZChwcm9wZXJ0eU5hbWVzICsgbnVtUHJvcGVydGllcykKKyAg
ICAsIG1fZGF0YShwcm9wZXJ0eU5hbWVBcnJheURhdGEpCisgICAgLCBtX3Bvc2l0aW9uKG1fZGF0
YS0+YmVnaW4oKSkKKyAgICAsIG1fZW5kKG1fZGF0YS0+ZW5kKCkpCiB7CiB9CiAKIGlubGluZSBK
U1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpjcmVhdGUoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2KQogewogICAgIGlmICh2LT5pc1VuZGVmaW5lZE9yTnVs
bCgpKQotICAgICAgICByZXR1cm4gbmV3IChleGVjKSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKDAs
IDAsIDApOworICAgICAgICByZXR1cm4gbmV3IChleGVjKSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
OwogCiAgICAgSlNPYmplY3QqIG8gPSB2LT50b09iamVjdChleGVjKTsKICAgICBQcm9wZXJ0eU5h
bWVBcnJheSBwcm9wZXJ0eU5hbWVzKGV4ZWMpOwogICAgIG8tPmdldFByb3BlcnR5TmFtZXMoZXhl
YywgcHJvcGVydHlOYW1lcyk7Ci0gICAgc2l6ZV90IG51bVByb3BlcnRpZXMgPSBwcm9wZXJ0eU5h
bWVzLnNpemUoKTsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
KG8sIHByb3BlcnR5TmFtZXMucmVsZWFzZUlkZW50aWZpZXJzKCksIG51bVByb3BlcnRpZXMpOwor
ICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IobywgcHJvcGVydHlO
YW1lcy5yZWxlYXNlRGF0YSgpKTsKIH0KIAogaW5saW5lIEpTVmFsdWUqIEpTUHJvcGVydHlOYW1l
SXRlcmF0b3I6Om5leHQoRXhlY1N0YXRlKiBleGVjKQpJbmRleDoga2pzL0pTT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBranMvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAzNjY4MSkKKysrIGtqcy9K
U09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMiwyNSArNDMyLDcgQEAgYm9vbCBKU09i
amVjdDo6Z2V0UHJvcGVydHlBdHRyaWJ1dGVzKEV4ZQogCiB2b2lkIEpTT2JqZWN0OjpnZXRQcm9w
ZXJ0eU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZXMpCiB7Ci0gICAgbV9zdHJ1Y3R1cmVJRC0+Z2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMocHJv
cGVydHlOYW1lcyk7Ci0KLSAgICAvLyBBZGQgcHJvcGVydGllcyBmcm9tIHRoZSBzdGF0aWMgaGFz
aHRhYmxlcyBvZiBwcm9wZXJ0aWVzCi0gICAgZm9yIChjb25zdCBDbGFzc0luZm8qIGluZm8gPSBj
bGFzc0luZm8oKTsgaW5mbzsgaW5mbyA9IGluZm8tPnBhcmVudENsYXNzKSB7Ci0gICAgICAgIGNv
bnN0IEhhc2hUYWJsZSogdGFibGUgPSBpbmZvLT5wcm9wSGFzaFRhYmxlKGV4ZWMpOwotICAgICAg
ICBpZiAoIXRhYmxlKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHRhYmxlLT5pbml0
aWFsaXplSWZOZWVkZWQoZXhlYyk7Ci0gICAgICAgIEFTU0VSVCh0YWJsZS0+dGFibGUpOwotICAg
ICAgICBpbnQgaGFzaFNpemVNYXNrID0gdGFibGUtPmhhc2hTaXplTWFzazsKLSAgICAgICAgY29u
c3QgSGFzaEVudHJ5KiBlbnRyeSA9IHRhYmxlLT50YWJsZTsKLSAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPD0gaGFzaFNpemVNYXNrOyArK2ksICsrZW50cnkpIHsKLSAgICAgICAgICAgIGlmIChl
bnRyeS0+a2V5ICYmICEoZW50cnktPmF0dHJpYnV0ZXMgJiBEb250RW51bSkpCi0gICAgICAgICAg
ICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZW50cnktPmtleSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAocHJvdG90eXBlKCktPmlzT2JqZWN0KCkpCi0gICAgICAgIHN0YXRpY19jYXN0PEpT
T2JqZWN0Kj4ocHJvdG90eXBlKCkpLT5nZXRQcm9wZXJ0eU5hbWVzKGV4ZWMsIHByb3BlcnR5TmFt
ZXMpOworICAgIG1fc3RydWN0dXJlSUQtPmdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKGV4ZWMs
IHByb3BlcnR5TmFtZXMsIHRoaXMpOwogfQogCiBib29sIEpTT2JqZWN0Ojp0b0Jvb2xlYW4oRXhl
Y1N0YXRlKikgY29uc3QKSW5kZXg6IGtqcy9Qcm9wZXJ0eU1hcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a2pzL1Byb3BlcnR5TWFwLmNwcAkocmV2aXNpb24gMzY2ODEpCisrKyBranMvUHJvcGVydHlNYXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiUHJvcGVydHlN
YXAuaCIKIAogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJy
YXkuaCIKICNpbmNsdWRlICJwcm90ZWN0LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC00NzIsNyArNDczLDcgQEAgc3RhdGljIGludCBjb21w
YXJlUHJvcGVydHlNYXBFbnRyeUluZGljZQogICAgIHJldHVybiAwOwogfQogCi12b2lkIFByb3Bl
cnR5TWFwOjpnZXRFbnVtZXJhYmxlUHJvcGVydHlOYW1lcyhWZWN0b3I8VVN0cmluZzo6UmVwKj4m
IHByb3BlcnR5TmFtZXMpIGNvbnN0Cit2b2lkIFByb3BlcnR5TWFwOjpnZXRFbnVtZXJhYmxlUHJv
cGVydHlOYW1lcyhQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcykgY29uc3QKIHsKICAg
ICBpZiAoIW1fdGFibGUpCiAgICAgICAgIHJldHVybjsKQEAgLTQ5MSw5ICs0OTIsMTQgQEAgdm9p
ZCBQcm9wZXJ0eU1hcDo6Z2V0RW51bWVyYWJsZVByb3BlcnR5TgogICAgICAgICAgICAgICAgICsr
aTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBwcm9wZXJ0eU5hbWVzLnJlc2Vy
dmVDYXBhY2l0eShpKTsKLSAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBpOyArK2spCi0gICAg
ICAgICAgICBwcm9wZXJ0eU5hbWVzLmFwcGVuZChhW2tdLT5rZXkpOworICAgICAgICBpZiAoIXBy
b3BlcnR5TmFtZXMuc2l6ZSgpKSB7CisgICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IGk7
ICsraykKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZEtub3duVW5pcXVlKGFba10t
PmtleSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8
IGk7ICsraykKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChhW2tdLT5rZXkpOwor
ICAgICAgICB9CisKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTE0LDkgKzUyMCwxMyBA
QCB2b2lkIFByb3BlcnR5TWFwOjpnZXRFbnVtZXJhYmxlUHJvcGVydHlOCiAgICAgc29ydGVkRW51
bWVyYWJsZXMucmVzaXplKGVudW1lcmFibGVDb3VudCk7CiAKICAgICAvLyBQdXQgdGhlIGtleXMg
b2YgdGhlIHNvcnRlZCBlbnRyaWVzIGludG8gdGhlIGxpc3QuCi0gICAgcHJvcGVydHlOYW1lcy5y
ZXNlcnZlQ2FwYWNpdHkoc29ydGVkRW51bWVyYWJsZXMuc2l6ZSgpKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNvcnRlZEVudW1lcmFibGVzLnNpemUoKTsgKytpKQotICAgICAgICBwcm9w
ZXJ0eU5hbWVzLmFwcGVuZChzb3J0ZWRFbnVtZXJhYmxlc1tpXS0+a2V5KTsKKyAgICBpZiAoIXBy
b3BlcnR5TmFtZXMuc2l6ZSgpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc29y
dGVkRW51bWVyYWJsZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFk
ZEtub3duVW5pcXVlKHNvcnRlZEVudW1lcmFibGVzW2ldLT5rZXkpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc29ydGVkRW51bWVyYWJsZXMuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChzb3J0ZWRFbnVtZXJhYmxlc1tpXS0+
a2V5KTsKKyAgICB9CiB9CiAKICNpZiBET19QUk9QRVJUWU1BUF9DT05TVEVOQ1lfQ0hFQ0sKSW5k
ZXg6IGtqcy9Qcm9wZXJ0eU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9Qcm9wZXJ0eU1hcC5oCShy
ZXZpc2lvbiAzNjY4MSkKKysrIGtqcy9Qcm9wZXJ0eU1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw2ICszMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgSlNPYmplY3Q7CiAgICAg
Y2xhc3MgSlNWYWx1ZTsKKyAgICBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheTsKIAogICAgIHR5cGVk
ZWYgSlNWYWx1ZSoqIFByb3BlcnR5U3RvcmFnZTsKIApAQCAtOTMsNyArOTQsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgc2l6ZV90IGdldE9mZnNldChjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUpOwogICAgICAgICBzaXplX3QgZ2V0T2Zmc2V0KGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpOwogCi0gICAgICAgIHZvaWQgZ2V0RW51
bWVyYWJsZVByb3BlcnR5TmFtZXMoVmVjdG9yPFVTdHJpbmc6OlJlcCo+JikgY29uc3Q7CisgICAg
ICAgIHZvaWQgZ2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMoUHJvcGVydHlOYW1lQXJyYXkmKSBj
b25zdDsKIAogICAgICAgICBib29sIGhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSBjb25zdCB7
IHJldHVybiBtX2dldHRlclNldHRlckZsYWc7IH0KICAgICAgICAgdm9pZCBzZXRIYXNHZXR0ZXJT
ZXR0ZXJQcm9wZXJ0aWVzKGJvb2wgZikgeyBtX2dldHRlclNldHRlckZsYWcgPSBmOyB9CkluZGV4
OiBranMvUHJvcGVydHlOYW1lQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9Qcm9wZXJ0eU5h
bWVBcnJheS5jcHAJKHJldmlzaW9uIDM2NjgxKQorKysga2pzL1Byb3BlcnR5TmFtZUFycmF5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksMjIgKzI5LDIyIEBAIHZvaWQgUHJvcGVydHlOYW1lQXJy
YXk6OmFkZChVU3RyaW5nOjpSZXAKIHsKICAgICBBU1NFUlQoaWRlbnRpZmllciA9PSAmVVN0cmlu
Zzo6UmVwOjpudWxsIHx8IGlkZW50aWZpZXIgPT0gJlVTdHJpbmc6OlJlcDo6ZW1wdHkgfHwgaWRl
bnRpZmllci0+aWRlbnRpZmllclRhYmxlKCkpOwogCi0gICAgc2l6ZV90IHNpemUgPSBtX3ZlY3Rv
ci5zaXplKCk7CisgICAgc2l6ZV90IHNpemUgPSBtX2RhdGEtPnByb3BlcnR5TmFtZVZlY3Rvcigp
LnNpemUoKTsKICAgICBpZiAoc2l6ZSA8IHNldFRocmVzaG9sZCkgewogICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIg
PT0gbV92ZWN0b3JbaV0udXN0cmluZygpLnJlcCgpKQorICAgICAgICAgICAgaWYgKGlkZW50aWZp
ZXIgPT0gbV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKVtpXS51c3RyaW5nKCkucmVwKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAg
aWYgKG1fc2V0LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyArK2kpCi0gICAgICAgICAgICAgICAgbV9zZXQuYWRkKG1fdmVjdG9yW2ldLnVzdHJp
bmcoKS5yZXAoKSk7CisgICAgICAgICAgICAgICAgbV9zZXQuYWRkKG1fZGF0YS0+cHJvcGVydHlO
YW1lVmVjdG9yKClbaV0udXN0cmluZygpLnJlcCgpKTsKICAgICAgICAgfQogICAgICAgICBpZiAo
IW1fc2V0LmFkZChpZGVudGlmaWVyKS5zZWNvbmQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgbV92ZWN0b3IuYXBwZW5kKElkZW50aWZpZXIobV9nbG9iYWxEYXRhLCBpZGVudGlm
aWVyKSk7CisgICAgbV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5hcHBlbmQoSWRlbnRpZmll
cihtX2dsb2JhbERhdGEsIGlkZW50aWZpZXIpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBranMvUHJvcGVydHlOYW1lQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvUHJvcGVydHlO
YW1lQXJyYXkuaAkocmV2aXNpb24gMzY2ODEpCisrKyBranMvUHJvcGVydHlOYW1lQXJyYXkuaAko
d29ya2luZyBjb3B5KQpAQCAtMjIsMjQgKzIyLDUxIEBACiAjZGVmaW5lIFByb3BlcnR5TmFtZUFy
cmF5X2gKIAogI2luY2x1ZGUgIkV4ZWNTdGF0ZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZUlELmgi
CiAjaW5jbHVkZSAiaWRlbnRpZmllci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAorICAgIGNsYXNzIFByb3Bl
cnR5TmFtZUFycmF5RGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFByb3BlcnR5TmFtZUFycmF5RGF0
YT4geworICAgIHB1YmxpYzoKKyAgICAgICAgdHlwZWRlZiBWZWN0b3I8SWRlbnRpZmllciwgMjA+
IFByb3BlcnR5TmFtZVZlY3RvcjsKKyAgICAgICAgdHlwZWRlZiBQcm9wZXJ0eU5hbWVWZWN0b3I6
OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworCisgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFByb3BlcnR5TmFtZUFycmF5RGF0YT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3
IFByb3BlcnR5TmFtZUFycmF5RGF0YSk7IH0KKworICAgICAgICBQcm9wZXJ0eU5hbWVWZWN0b3Im
IHByb3BlcnR5TmFtZVZlY3RvcigpIHsgcmV0dXJuIG1fcHJvcGVydHlOYW1lVmVjdG9yOyB9CisK
KyAgICAgICAgdm9pZCBzZXRDYWNoZWRQcm90b3R5cGVDaGFpbihTdHJ1Y3R1cmVJRENoYWluKiBj
YWNoZWRQcm90b3R5cGVDaGFpbikgeyBtX2NhY2hlZFByb3RvdHlwZUNoYWluID0gY2FjaGVkUHJv
dG90eXBlQ2hhaW47IH0KKyAgICAgICAgU3RydWN0dXJlSURDaGFpbiogY2FjaGVkUHJvdG90eXBl
Q2hhaW4oKSB7IHJldHVybiBtX2NhY2hlZFByb3RvdHlwZUNoYWluLmdldCgpOyB9CisKKyAgICAg
ICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5TmFtZVZl
Y3Rvci5iZWdpbigpOyB9CisgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJvcGVydHlOYW1lVmVjdG9yLmVuZCgpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBQcm9wZXJ0eU5hbWVBcnJheURhdGEoKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAg
ICBQcm9wZXJ0eU5hbWVWZWN0b3IgbV9wcm9wZXJ0eU5hbWVWZWN0b3I7CisgICAgICAgIFJlZlB0
cjxTdHJ1Y3R1cmVJRENoYWluPiBtX2NhY2hlZFByb3RvdHlwZUNoYWluOworICAgIH07CisKICAg
ICBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheSB7CiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVm
IElkZW50aWZpZXIgVmFsdWVUeXBlOwotICAgICAgICB0eXBlZGVmIFZlY3RvcjxJZGVudGlmaWVy
Pjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgUHJvcGVy
dHlOYW1lQXJyYXlEYXRhOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKIAogICAgICAg
ICBQcm9wZXJ0eU5hbWVBcnJheShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCi0gICAgICAgICAg
ICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQorICAgICAgICAgICAgOiBtX2RhdGEoUHJvcGVy
dHlOYW1lQXJyYXlEYXRhOjpjcmVhdGUoKSkKKyAgICAgICAgICAgICwgbV9nbG9iYWxEYXRhKGds
b2JhbERhdGEpCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIFByb3BlcnR5TmFtZUFy
cmF5KEV4ZWNTdGF0ZSogZXhlYykKLSAgICAgICAgICAgIDogbV9nbG9iYWxEYXRhKCZleGVjLT5n
bG9iYWxEYXRhKCkpCisgICAgICAgICAgICA6IG1fZGF0YShQcm9wZXJ0eU5hbWVBcnJheURhdGE6
OmNyZWF0ZSgpKQorICAgICAgICAgICAgLCBtX2dsb2JhbERhdGEoJmV4ZWMtPmdsb2JhbERhdGEo
KSkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTQ3LDIyICs3NCwyNSBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICB2b2lkIGFkZChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKSB7
IGFkZChpZGVudGlmaWVyLnVzdHJpbmcoKS5yZXAoKSk7IH0KICAgICAgICAgdm9pZCBhZGQoVVN0
cmluZzo6UmVwKik7Ci0gICAgICAgIHZvaWQgYWRkS25vd25VbmlxdWUoVVN0cmluZzo6UmVwKiBp
ZGVudGlmaWVyKSB7IG1fdmVjdG9yLmFwcGVuZChJZGVudGlmaWVyKG1fZ2xvYmFsRGF0YSwgaWRl
bnRpZmllcikpOyB9CisgICAgICAgIHZvaWQgYWRkS25vd25VbmlxdWUoVVN0cmluZzo6UmVwKiBp
ZGVudGlmaWVyKSB7IG1fZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKCkuYXBwZW5kKElkZW50aWZp
ZXIobV9nbG9iYWxEYXRhLCBpZGVudGlmaWVyKSk7IH0KKworICAgICAgICBzaXplX3Qgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKCkuc2l6ZSgpOyB9CiAK
LSAgICAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5i
ZWdpbigpOyB9Ci0gICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
dmVjdG9yLmVuZCgpOyB9CisgICAgICAgIElkZW50aWZpZXImIG9wZXJhdG9yW10odW5zaWduZWQg
aSkgeyByZXR1cm4gbV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKVtpXTsgfQorICAgICAgICBj
b25zdCBJZGVudGlmaWVyJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKClbaV07IH0KIAotICAgICAgICBzaXplX3Qgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLnNpemUoKTsgfQorICAgICAgICBjb25zdF9pdGVyYXRv
ciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS0+YmVnaW4oKTsgfQorICAgICAgICBjb25z
dF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2RhdGEtPmVuZCgpOyB9CiAKLSAgICAg
ICAgSWRlbnRpZmllciYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSB7IHJldHVybiBtX3ZlY3Rvcltp
XTsgfQotICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNv
bnN0IHsgcmV0dXJuIG1fdmVjdG9yW2ldOyB9CisgICAgICAgIHZvaWQgc2V0RGF0YShQcm9wZXJ0
eU5hbWVBcnJheURhdGEqIGRhdGEpIHsgbV9kYXRhID0gZGF0YTsgfQorICAgICAgICBQcm9wZXJ0
eU5hbWVBcnJheURhdGEqIGRhdGEoKSB7IHJldHVybiBtX2RhdGEuZ2V0KCk7IH0KIAotICAgICAg
ICBJZGVudGlmaWVyKiByZWxlYXNlSWRlbnRpZmllcnMoKSB7IHJldHVybiBzaXplKCkgPyBtX3Zl
Y3Rvci5yZWxlYXNlQnVmZmVyKCkgOiAwOyB9CisgICAgICAgIFBhc3NSZWZQdHI8UHJvcGVydHlO
YW1lQXJyYXlEYXRhPiByZWxlYXNlRGF0YSgpIHsgcmV0dXJuIG1fZGF0YS5yZWxlYXNlKCk7IH0K
IAogICAgIHByaXZhdGU6CiAgICAgICAgIHR5cGVkZWYgSGFzaFNldDxVU3RyaW5nOjpSZXAqLCBQ
dHJIYXNoPFVTdHJpbmc6OlJlcCo+ID4gSWRlbnRpZmllclNldDsKIAotICAgICAgICBWZWN0b3I8
SWRlbnRpZmllciwgMjA+IG1fdmVjdG9yOworICAgICAgICBSZWZQdHI8UHJvcGVydHlOYW1lQXJy
YXlEYXRhPiBtX2RhdGE7CiAgICAgICAgIElkZW50aWZpZXJTZXQgbV9zZXQ7CiAgICAgICAgIEpT
R2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwogICAgIH07CkluZGV4OiBranMvU2NvcGVDaGFpbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0ga2pzL1Njb3BlQ2hhaW4uY3BwCShyZXZpc2lvbiAzNjY4MSkKKysr
IGtqcy9TY29wZUNoYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTAgKzM3LDEwIEBAIHZv
aWQgU2NvcGVDaGFpbk5vZGU6OnByaW50KCkgY29uc3QKICAgICAgICAgSlNPYmplY3QqIG8gPSAq
c2NvcGVJdGVyOwogICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKGdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpOwogICAgICAgICBvLT5nZXRQcm9wZXJ0eU5hbWVzKGds
b2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZXMpOwotICAgICAgICBQcm9w
ZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgcHJvcEVuZCA9IHByb3BlcnR5TmFtZXMuZW5k
KCk7CisgICAgICAgIFByb3BlcnR5TmFtZUFycmF5RGF0YTo6Y29uc3RfaXRlcmF0b3IgcHJvcEVu
ZCA9IHByb3BlcnR5TmFtZXMuZGF0YSgpLT5lbmQoKTsKIAogICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIi0tLS0tIFtzY29wZSAlcF0gLS0tLS1cbiIsIG8pOwotICAgICAgICBmb3IgKFByb3BlcnR5
TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBwcm9wSXRlciA9IHByb3BlcnR5TmFtZXMuYmVnaW4o
KTsgcHJvcEl0ZXIgIT0gcHJvcEVuZDsgcHJvcEl0ZXIrKykgeworICAgICAgICBmb3IgKFByb3Bl
cnR5TmFtZUFycmF5RGF0YTo6Y29uc3RfaXRlcmF0b3IgcHJvcEl0ZXIgPSBwcm9wZXJ0eU5hbWVz
LmRhdGEoKS0+YmVnaW4oKTsgcHJvcEl0ZXIgIT0gcHJvcEVuZDsgcHJvcEl0ZXIrKykgewogICAg
ICAgICAgICAgSWRlbnRpZmllciBuYW1lID0gKnByb3BJdGVyOwogICAgICAgICAgICAgZnByaW50
ZihzdGRlcnIsICIlcywgIiwgbmFtZS5hc2NpaSgpKTsKICAgICAgICAgfQpJbmRleDoga2pzL1N0
cnVjdHVyZUlELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvU3RydWN0dXJlSUQuY3BwCShyZXZpc2lv
biAzNjY4MSkKKysrIGtqcy9TdHJ1Y3R1cmVJRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYg
KzI5LDcgQEAKICNpbmNsdWRlICJpZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIK
ICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgorI2luY2x1ZGUgImxvb2t1cC5oIgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKQEAgLTQ4LDE4ICs0
OSw2OSBAQCBTdHJ1Y3R1cmVJRDo6U3RydWN0dXJlSUQoSlNWYWx1ZSogcHJvdG90CiAgICAgQVNT
RVJUKG1fcHJvdG90eXBlLT5pc09iamVjdCgpIHx8IG1fcHJvdG90eXBlLT5pc051bGwoKSk7CiB9
CiAKLXZvaWQgU3RydWN0dXJlSUQ6OmdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzKSBjb25zdAorc3RhdGljIGJvb2wgc3RydWN0dXJlSURD
aGFpbnNBcmVFcXVhbChTdHJ1Y3R1cmVJRENoYWluKiBjaGFpbkEsIFN0cnVjdHVyZUlEQ2hhaW4q
IGNoYWluQikKIHsKLSAgICBpZiAobV9jYWNoZWRQcm9wZXJ0eU5hbWVBcnJheS5pc0VtcHR5KCkp
Ci0gICAgICAgIG1fcHJvcGVydHlNYXAuZ2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMobV9jYWNo
ZWRQcm9wZXJ0eU5hbWVBcnJheSk7CisgICAgaWYgKCFjaGFpbkEgfHwgIWNoYWluQikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFwcm9wZXJ0eU5hbWVzLnNpemUoKSkgewotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2FjaGVkUHJvcGVydHlOYW1lQXJyYXkuc2l6
ZSgpOyArK2kpCi0gICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZEtub3duVW5pcXVlKG1fY2Fj
aGVkUHJvcGVydHlOYW1lQXJyYXlbaV0pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9jYWNoZWRQcm9wZXJ0eU5hbWVBcnJheS5zaXplKCk7ICsraSkKLSAg
ICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKG1fY2FjaGVkUHJvcGVydHlOYW1lQXJyYXlbaV0p
OworICAgIFJlZlB0cjxTdHJ1Y3R1cmVJRD4qIGEgPSBjaGFpbkEtPmhlYWQoKTsKKyAgICBSZWZQ
dHI8U3RydWN0dXJlSUQ+KiBiID0gY2hhaW5CLT5oZWFkKCk7CisgICAgd2hpbGUgKDEpIHsKKyAg
ICAgICAgaWYgKCgqYSkuZ2V0KCkgIT0gKCpiKS5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgaWYgKCEoKmEpLmdldCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGErKzsKKyAgICAgICAgYisrOwogICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU3RydWN0dXJlSUQ6OmdldEVudW1l
cmFibGVQcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHBy
b3BlcnR5TmFtZXMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0KQoreworICAgIGJvb2wgc2hvdWxkQ2Fj
aGUgPSAhKHByb3BlcnR5TmFtZXMuc2l6ZSgpIHx8IG1faXNEaWN0aW9uYXJ5KTsKKworICAgIGlm
IChzaG91bGRDYWNoZSAmJiBtX2NhY2hlZFByb3BlcnR5TmFtZUFycmF5RGF0YSkgeworICAgICAg
ICBpZiAoc3RydWN0dXJlSURDaGFpbnNBcmVFcXVhbChtX2NhY2hlZFByb3BlcnR5TmFtZUFycmF5
RGF0YS0+Y2FjaGVkUHJvdG90eXBlQ2hhaW4oKSwgY2FjaGVkUHJvdG90eXBlQ2hhaW4oKSkpIHsK
KyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuc2V0RGF0YShtX2NhY2hlZFByb3BlcnR5TmFtZUFy
cmF5RGF0YS5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBtX3Byb3BlcnR5TWFwLmdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKHByb3BlcnR5TmFt
ZXMpOworCisgICAgLy8gQWRkIHByb3BlcnRpZXMgZnJvbSB0aGUgc3RhdGljIGhhc2h0YWJsZXMg
b2YgcHJvcGVydGllcworICAgIGZvciAoY29uc3QgQ2xhc3NJbmZvKiBpbmZvID0gYmFzZU9iamVj
dC0+Y2xhc3NJbmZvKCk7IGluZm87IGluZm8gPSBpbmZvLT5wYXJlbnRDbGFzcykgeworICAgICAg
ICBjb25zdCBIYXNoVGFibGUqIHRhYmxlID0gaW5mby0+cHJvcEhhc2hUYWJsZShleGVjKTsKKyAg
ICAgICAgaWYgKCF0YWJsZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB0YWJsZS0+
aW5pdGlhbGl6ZUlmTmVlZGVkKGV4ZWMpOworICAgICAgICBBU1NFUlQodGFibGUtPnRhYmxlKTsK
KyAgICAgICAgaW50IGhhc2hTaXplTWFzayA9IHRhYmxlLT5oYXNoU2l6ZU1hc2s7CisgICAgICAg
IGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSB0YWJsZS0+dGFibGU7CisgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDw9IGhhc2hTaXplTWFzazsgKytpLCArK2VudHJ5KSB7CisgICAgICAgICAgICBp
ZiAoZW50cnktPmtleSAmJiAhKGVudHJ5LT5hdHRyaWJ1dGVzICYgRG9udEVudW0pKQorICAgICAg
ICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGVudHJ5LT5rZXkpOworICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKG1fcHJvdG90eXBlLT5pc09iamVjdCgpKQorICAgICAgICBzdGF0aWNfY2Fz
dDxKU09iamVjdCo+KG1fcHJvdG90eXBlKS0+Z2V0UHJvcGVydHlOYW1lcyhleGVjLCBwcm9wZXJ0
eU5hbWVzKTsKKworICAgIGlmIChzaG91bGRDYWNoZSkgeworICAgICAgICBtX2NhY2hlZFByb3Bl
cnR5TmFtZUFycmF5RGF0YSA9IHByb3BlcnR5TmFtZXMuZGF0YSgpOworCisgICAgICAgIFN0cnVj
dHVyZUlEQ2hhaW4qIGNoYWluID0gY2FjaGVkUHJvdG90eXBlQ2hhaW4oKTsKKyAgICAgICAgaWYg
KCFjaGFpbikKKyAgICAgICAgICAgIGNoYWluID0gY3JlYXRlQ2FjaGVkUHJvdG90eXBlQ2hhaW4o
KTsKKyAgICAgICAgbV9jYWNoZWRQcm9wZXJ0eU5hbWVBcnJheURhdGEtPnNldENhY2hlZFByb3Rv
dHlwZUNoYWluKGNoYWluKTsKKyAgICB9Cit9CisKK3ZvaWQgU3RydWN0dXJlSUQ6OmNsZWFyRW51
bWVyYXRpb25DYWNoZSgpCit7CisgICAgbV9jYWNoZWRQcm9wZXJ0eU5hbWVBcnJheURhdGEuY2xl
YXIoKTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVJRDo6dHJhbnNpdGlvblRvKFN0cnVjdHVyZUlEKiBv
bGRTdHJ1Y3R1cmVJRCwgU3RydWN0dXJlSUQqIG5ld1N0cnVjdHVyZUlELCBKU09iamVjdCogc2xv
dEJhc2UpCkBAIC0xNTAsNiArMjAyLDIwIEBAIFN0cnVjdHVyZUlEOjp+U3RydWN0dXJlSUQoKQog
ICAgIH0KIH0KIAorU3RydWN0dXJlSURDaGFpbiogU3RydWN0dXJlSUQ6OmNyZWF0ZUNhY2hlZFBy
b3RvdHlwZUNoYWluKCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IE9iamVjdFR5cGUpOworICAg
IEFTU0VSVCghbV9jYWNoZWRQcm90b3R5cGVDaGFpbik7CisKKyAgICBKU1ZhbHVlKiBwcm90b3R5
cGUgPSBzdG9yZWRQcm90b3R5cGUoKTsKKyAgICBpZiAoSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRl
KHByb3RvdHlwZSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPFN0cnVjdHVyZUlE
Q2hhaW4+IGNoYWluID0gU3RydWN0dXJlSURDaGFpbjo6Y3JlYXRlKHN0YXRpY19jYXN0PEpTT2Jq
ZWN0Kj4ocHJvdG90eXBlKS0+c3RydWN0dXJlSUQoKSk7CisgICAgc2V0Q2FjaGVkUHJvdG90eXBl
Q2hhaW4oY2hhaW4ucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gY2FjaGVkUHJvdG90eXBlQ2hhaW4o
KTsKK30KKwogU3RydWN0dXJlSURDaGFpbjo6U3RydWN0dXJlSURDaGFpbihTdHJ1Y3R1cmVJRCog
c3RydWN0dXJlSUQpCiB7CiAgICAgc2l6ZV90IHNpemUgPSAxOwpJbmRleDoga2pzL1N0cnVjdHVy
ZUlELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga2pzL1N0cnVjdHVyZUlELmgJKHJldmlzaW9uIDM2NjgxKQor
Kysga2pzL1N0cnVjdHVyZUlELmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBKU1ZhbHVlOwogICAgIGNsYXNzIFByb3BlcnR5TmFt
ZUFycmF5OworICAgIGNsYXNzIFByb3BlcnR5TmFtZUFycmF5RGF0YTsKICAgICBjbGFzcyBTdHJ1
Y3R1cmVJRENoYWluOwogCiAgICAgc3RydWN0IFRyYW5zaXRpb25UYWJsZUhhc2ggewpAQCAtMTAy
LDE4ICsxMDMsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgU3RydWN0dXJlSUQqIHBy
ZXZpb3VzSUQoKSBjb25zdCB7IHJldHVybiBtX3ByZXZpb3VzLmdldCgpOyB9CiAKKyAgICAgICAg
U3RydWN0dXJlSURDaGFpbiogY3JlYXRlQ2FjaGVkUHJvdG90eXBlQ2hhaW4oKTsKICAgICAgICAg
dm9pZCBzZXRDYWNoZWRQcm90b3R5cGVDaGFpbihQYXNzUmVmUHRyPFN0cnVjdHVyZUlEQ2hhaW4+
IGNhY2hlZFByb3RvdHlwZUNoYWluKSB7IG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4gPSBjYWNoZWRQ
cm90b3R5cGVDaGFpbjsgfQogICAgICAgICBTdHJ1Y3R1cmVJRENoYWluKiBjYWNoZWRQcm90b3R5
cGVDaGFpbigpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uZ2V0KCk7IH0K
IAogICAgICAgICBjb25zdCBQcm9wZXJ0eU1hcCYgcHJvcGVydHlNYXAoKSBjb25zdCB7IHJldHVy
biBtX3Byb3BlcnR5TWFwOyB9CiAgICAgICAgIFByb3BlcnR5TWFwJiBwcm9wZXJ0eU1hcCgpIHsg
cmV0dXJuIG1fcHJvcGVydHlNYXA7IH0KIAotICAgICAgICB2b2lkIGdldEVudW1lcmFibGVQcm9w
ZXJ0eU5hbWVzKFByb3BlcnR5TmFtZUFycmF5JikgY29uc3Q7CisgICAgICAgIHZvaWQgZ2V0RW51
bWVyYWJsZVByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBKU09i
amVjdCopOworICAgICAgICB2b2lkIGNsZWFyRW51bWVyYXRpb25DYWNoZSgpOwogCiAgICAgICAg
IHN0YXRpYyB2b2lkIHRyYW5zaXRpb25UbyhTdHJ1Y3R1cmVJRCogb2xkU3RydWN0dXJlSUQsIFN0
cnVjdHVyZUlEKiBuZXdTdHJ1Y3R1cmVJRCwgSlNPYmplY3QqIHNsb3RCYXNlKTsKIAotICAgICAg
ICB2b2lkIGNsZWFyRW51bWVyYXRpb25DYWNoZSgpIHsgbV9jYWNoZWRQcm9wZXJ0eU5hbWVBcnJh
eS5jbGVhcigpOyB9Ci0KICAgICBwcml2YXRlOgogICAgICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxS
ZWZQdHI8VVN0cmluZzo6UmVwPiwgdW5zaWduZWQ+IFRyYW5zaXRpb25UYWJsZUtleTsKICAgICAg
ICAgdHlwZWRlZiBIYXNoTWFwPFRyYW5zaXRpb25UYWJsZUtleSwgU3RydWN0dXJlSUQqLCBUcmFu
c2l0aW9uVGFibGVIYXNoLCBUcmFuc2l0aW9uVGFibGVIYXNoVHJhaXRzPiBUcmFuc2l0aW9uVGFi
bGU7CkBAIC0xMzUsNyArMTM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHNpemVfdCBt
X3RyYW5zaXRpb25Db3VudDsKICAgICAgICAgVHJhbnNpdGlvblRhYmxlIG1fdHJhbnNpdGlvblRh
YmxlOwogCi0gICAgICAgIG11dGFibGUgVmVjdG9yPFVTdHJpbmc6OlJlcCo+IG1fY2FjaGVkUHJv
cGVydHlOYW1lQXJyYXk7CisgICAgICAgIFJlZlB0cjxQcm9wZXJ0eU5hbWVBcnJheURhdGE+IG1f
Y2FjaGVkUHJvcGVydHlOYW1lQXJyYXlEYXRhOwogCiAgICAgICAgIFByb3BlcnR5TWFwIG1fcHJv
cGVydHlNYXA7CiAgICAgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23588</attachid>
            <date>2008-09-19 17:50:34 -0700</date>
            <delta_ts>2008-09-19 17:56:57 -0700</delta_ts>
            <desc>updated</desc>
            <filename>newer.diff</filename>
            <type>text/plain</type>
            <size>20401</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM2Njgz
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAKKzIwMDgtMDkt
MTkgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwOTI4CisgICAgICAgIFNwZWVkIHVwIEpTIHByb3BlcnR5IGVu
dW1lcmF0aW9uIGJ5IGNhY2hpbmcgZW50aXJlIFByb3BlcnR5TmFtZUFycmF5CisKKyAgICAgICAg
MS4zJSBzcGVlZHVwIG9uIFN1bnNwaWRlciwgMzAlIG9uIHN0cmluZy1mYXN0YS4KKworICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLmV4cDoKKyAgICAgICAgKiBWTS9KU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6fkpTUHJvcGVy
dHlOYW1lSXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpp
bnZhbGlkYXRlKToKKyAgICAgICAgKiBWTS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmg6CisgICAg
ICAgIChKU0M6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3Ip
OgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpjcmVhdGUpOgorICAgICAg
ICAqIGtqcy9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRQcm9wZXJ0
eU5hbWVzKToKKyAgICAgICAgKiBranMvUHJvcGVydHlNYXAuY3BwOgorICAgICAgICAoSlNDOjpQ
cm9wZXJ0eU1hcDo6Z2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIGtqcy9Q
cm9wZXJ0eU1hcC5oOgorICAgICAgICAqIGtqcy9Qcm9wZXJ0eU5hbWVBcnJheS5jcHA6CisgICAg
ICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5OjphZGQpOgorICAgICAgICAqIGtqcy9Qcm9wZXJ0
eU5hbWVBcnJheS5oOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheURhdGE6OmNyZWF0
ZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5RGF0YTo6cHJvcGVydHlOYW1lVmVj
dG9yKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lQXJyYXlEYXRhOjpzZXRDYWNoZWRQcm90
b3R5cGVDaGFpbik6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5RGF0YTo6Y2FjaGVk
UHJvdG90eXBlQ2hhaW4pOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheURhdGE6OmJl
Z2luKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lQXJyYXlEYXRhOjplbmQpOgorICAgICAg
ICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheURhdGE6OlByb3BlcnR5TmFtZUFycmF5RGF0YSk6Cisg
ICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5OjpQcm9wZXJ0eU5hbWVBcnJheSk6CisgICAg
ICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5OjphZGRLbm93blVuaXF1ZSk6CisgICAgICAgIChK
U0M6OlByb3BlcnR5TmFtZUFycmF5OjpzaXplKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1l
QXJyYXk6Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheTo6YmVn
aW4pOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheTo6ZW5kKToKKyAgICAgICAgKEpT
Qzo6UHJvcGVydHlOYW1lQXJyYXk6OnNldERhdGEpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5h
bWVBcnJheTo6ZGF0YSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5OjpyZWxlYXNl
RGF0YSk6CisgICAgICAgICoga2pzL1Njb3BlQ2hhaW4uY3BwOgorICAgICAgICAoSlNDOjpTY29w
ZUNoYWluTm9kZTo6cHJpbnQpOgorICAgICAgICAqIGtqcy9TdHJ1Y3R1cmVJRC5jcHA6CisgICAg
ICAgIChKU0M6OnN0cnVjdHVyZUlEQ2hhaW5zQXJlRXF1YWwpOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVJRDo6Z2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVJRDo6Y2xlYXJFbnVtZXJhdGlvbkNhY2hlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
SUQ6OmNyZWF0ZUNhY2hlZFByb3RvdHlwZUNoYWluKToKKyAgICAgICAgKiBranMvU3RydWN0dXJl
SUQuaDoKKwogMjAwOC0wOS0xOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IEphdmFTY3JpcHRDb3JlLmV4cAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDM2NjgxKQorKysgSmF2
YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNiArMTA4LDcgQEAgX19aTjNK
U0MxMVByb3BlcnR5TWFwOWdldE9mZnNldEVSS05TXzEwSQogX19aTjNKU0MxMVByb3BlcnR5TWFw
OWdldE9mZnNldEVSS05TXzEwSWRlbnRpZmllckVSagogX19aTjNKU0MxMVByb3BlcnR5TWFwRDFF
dgogX19aTjNKU0MxMVN0cnVjdHVyZUlEMjFhZGRQcm9wZXJ0eVRyYW5zaXRpb25FUFMwX1JLTlNf
MTBJZGVudGlmaWVyRVBOU183SlNWYWx1ZUVqUE5TXzhKU09iamVjdEVSTlNfMTVQdXRQcm9wZXJ0
eVNsb3RFUlBTNl8KK19fWk4zSlNDMTFTdHJ1Y3R1cmVJRDIxY2xlYXJFbnVtZXJhdGlvbkNhY2hl
RXYKIF9fWk4zSlNDMTFTdHJ1Y3R1cmVJRDI0ZnJvbURpY3Rpb25hcnlUcmFuc2l0aW9uRVBTMF8K
IF9fWk4zSlNDMTFTdHJ1Y3R1cmVJRDI1Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbkVQUzBfUE5T
XzdKU1ZhbHVlRQogX19aTjNKU0MxMVN0cnVjdHVyZUlEQzFFUE5TXzdKU1ZhbHVlRU5TXzZKU1R5
cGVFCkluZGV4OiBWTS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBW
TS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMzY2ODEpCisrKyBWTS9KU1By
b3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBAQCBB
U1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTUHJvcGVydHlOYW1lCiAKIEpTUHJvcGVydHlOYW1l
SXRlcmF0b3I6On5KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKCkKIHsKLSAgICBpbnZhbGlkYXRlKCk7
CiB9CiAKIEpTVmFsdWUqIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OnRvUHJpbWl0aXZlKEV4ZWNT
dGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0CkBAIC04MywxMyArODIsOCBAQCB2
b2lkIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6Om1hcmsoKQogCiB2b2lkIEpTUHJvcGVydHlOYW1l
SXRlcmF0b3I6OmludmFsaWRhdGUoKQogewotICAgIGlmIChtX3Byb3BlcnR5TmFtZXMpIHsKLSAg
ICAgICAgZm9yIChJZGVudGlmaWVyKiBwID0gbV9wcm9wZXJ0eU5hbWVzOyBwICE9IG1fZW5kOyAr
K3ApCi0gICAgICAgICAgICBwLT5+SWRlbnRpZmllcigpOwotICAgICAgICBmYXN0RnJlZShtX3By
b3BlcnR5TmFtZXMpOwotICAgIH0KICAgICBtX29iamVjdCA9IDA7Ci0gICAgbV9wcm9wZXJ0eU5h
bWVzID0gMDsKKyAgICBtX2RhdGEuY2xlYXIoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBWTS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvci5oCShyZXZpc2lvbiAzNjY4MSkKKysrIFZNL0pTUHJvcGVydHlOYW1l
SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsMzMgKzU3LDQxIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkIGludmFsaWRhdGUoKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAg
IEpTUHJvcGVydHlOYW1lSXRlcmF0b3IoSlNPYmplY3QqLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5h
bWVzLCBzaXplX3QgbnVtUHJvcGVydGllcyk7CisgICAgICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0
b3IoKTsKKyAgICAgICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcihKU09iamVjdCosIFBhc3NSZWZQ
dHI8UHJvcGVydHlOYW1lQXJyYXlEYXRhPiBwcm9wZXJ0eU5hbWVBcnJheURhdGEpOwogCiAgICAg
ICAgIEpTT2JqZWN0KiBtX29iamVjdDsKLSAgICAgICAgSWRlbnRpZmllciogbV9wcm9wZXJ0eU5h
bWVzOwotICAgICAgICBJZGVudGlmaWVyKiBtX3Bvc2l0aW9uOwotICAgICAgICBJZGVudGlmaWVy
KiBtX2VuZDsKKyAgICAgICAgUmVmUHRyPFByb3BlcnR5TmFtZUFycmF5RGF0YT4gbV9kYXRhOwor
ICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheURhdGE6OmNvbnN0X2l0ZXJhdG9yIG1fcG9zaXRpb247
CisgICAgICAgIFByb3BlcnR5TmFtZUFycmF5RGF0YTo6Y29uc3RfaXRlcmF0b3IgbV9lbmQ7CiAg
ICAgfTsKIAotaW5saW5lIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OkpTUHJvcGVydHlOYW1lSXRl
cmF0b3IoSlNPYmplY3QqIG9iamVjdCwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lcywgc2l6ZV90
IG51bVByb3BlcnRpZXMpCitpbmxpbmUgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6SlNQcm9wZXJ0
eU5hbWVJdGVyYXRvcigpCisgICAgOiBKU0NlbGwoMCkKKyAgICAsIG1fb2JqZWN0KDApCisgICAg
LCBtX3Bvc2l0aW9uKDApCisgICAgLCBtX2VuZCgwKQoreworfQorCitpbmxpbmUgSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcihKU09iamVjdCogb2JqZWN0LCBQ
YXNzUmVmUHRyPFByb3BlcnR5TmFtZUFycmF5RGF0YT4gcHJvcGVydHlOYW1lQXJyYXlEYXRhKQog
ICAgIDogSlNDZWxsKDApCiAgICAgLCBtX29iamVjdChvYmplY3QpCi0gICAgLCBtX3Byb3BlcnR5
TmFtZXMocHJvcGVydHlOYW1lcykKLSAgICAsIG1fcG9zaXRpb24ocHJvcGVydHlOYW1lcykKLSAg
ICAsIG1fZW5kKHByb3BlcnR5TmFtZXMgKyBudW1Qcm9wZXJ0aWVzKQorICAgICwgbV9kYXRhKHBy
b3BlcnR5TmFtZUFycmF5RGF0YSkKKyAgICAsIG1fcG9zaXRpb24obV9kYXRhLT5iZWdpbigpKQor
ICAgICwgbV9lbmQobV9kYXRhLT5lbmQoKSkKIHsKIH0KIAogaW5saW5lIEpTUHJvcGVydHlOYW1l
SXRlcmF0b3IqIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUqIHYpCiB7CiAgICAgaWYgKHYtPmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAg
IHJldHVybiBuZXcgKGV4ZWMpIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IoMCwgMCwgMCk7CisgICAg
ICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I7CiAKICAgICBKU09i
amVjdCogbyA9IHYtPnRvT2JqZWN0KGV4ZWMpOwogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3Bl
cnR5TmFtZXMoZXhlYyk7CiAgICAgby0+Z2V0UHJvcGVydHlOYW1lcyhleGVjLCBwcm9wZXJ0eU5h
bWVzKTsKLSAgICBzaXplX3QgbnVtUHJvcGVydGllcyA9IHByb3BlcnR5TmFtZXMuc2l6ZSgpOwot
ICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IobywgcHJvcGVydHlO
YW1lcy5yZWxlYXNlSWRlbnRpZmllcnMoKSwgbnVtUHJvcGVydGllcyk7CisgICAgcmV0dXJuIG5l
dyAoZXhlYykgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcihvLCBwcm9wZXJ0eU5hbWVzLnJlbGVhc2VE
YXRhKCkpOwogfQogCiBpbmxpbmUgSlNWYWx1ZSogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6bmV4
dChFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBranMvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtqcy9KU09iamVjdC5jcHAJKHJldmlzaW9uIDM2NjgxKQorKysga2pzL0pTT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDMyLDI1ICs0MzIsNyBAQCBib29sIEpTT2JqZWN0OjpnZXRQcm9w
ZXJ0eUF0dHJpYnV0ZXMoRXhlCiAKIHZvaWQgSlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcykKIHsKLSAgICBt
X3N0cnVjdHVyZUlELT5nZXRFbnVtZXJhYmxlUHJvcGVydHlOYW1lcyhwcm9wZXJ0eU5hbWVzKTsK
LQotICAgIC8vIEFkZCBwcm9wZXJ0aWVzIGZyb20gdGhlIHN0YXRpYyBoYXNodGFibGVzIG9mIHBy
b3BlcnRpZXMKLSAgICBmb3IgKGNvbnN0IENsYXNzSW5mbyogaW5mbyA9IGNsYXNzSW5mbygpOyBp
bmZvOyBpbmZvID0gaW5mby0+cGFyZW50Q2xhc3MpIHsKLSAgICAgICAgY29uc3QgSGFzaFRhYmxl
KiB0YWJsZSA9IGluZm8tPnByb3BIYXNoVGFibGUoZXhlYyk7Ci0gICAgICAgIGlmICghdGFibGUp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdGFibGUtPmluaXRpYWxpemVJZk5lZWRl
ZChleGVjKTsKLSAgICAgICAgQVNTRVJUKHRhYmxlLT50YWJsZSk7Ci0gICAgICAgIGludCBoYXNo
U2l6ZU1hc2sgPSB0YWJsZS0+aGFzaFNpemVNYXNrOwotICAgICAgICBjb25zdCBIYXNoRW50cnkq
IGVudHJ5ID0gdGFibGUtPnRhYmxlOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSBoYXNo
U2l6ZU1hc2s7ICsraSwgKytlbnRyeSkgewotICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgJiYg
IShlbnRyeS0+YXR0cmlidXRlcyAmIERvbnRFbnVtKSkKLSAgICAgICAgICAgICAgICBwcm9wZXJ0
eU5hbWVzLmFkZChlbnRyeS0+a2V5KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChwcm90
b3R5cGUoKS0+aXNPYmplY3QoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihwcm90
b3R5cGUoKSktPmdldFByb3BlcnR5TmFtZXMoZXhlYywgcHJvcGVydHlOYW1lcyk7CisgICAgbV9z
dHJ1Y3R1cmVJRC0+Z2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMoZXhlYywgcHJvcGVydHlOYW1l
cywgdGhpcyk7CiB9CiAKIGJvb2wgSlNPYmplY3Q6OnRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25z
dApJbmRleDoga2pzL1Byb3BlcnR5TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvUHJvcGVydHlN
YXAuY3BwCShyZXZpc2lvbiAzNjY4MSkKKysrIGtqcy9Qcm9wZXJ0eU1hcC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJQcm9wZXJ0eU1hcC5oIgogCiAjaW5j
bHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgogI2luY2x1
ZGUgInByb3RlY3QuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KQEAgLTQ3Miw3ICs0NzMsNyBAQCBzdGF0aWMgaW50IGNvbXBhcmVQcm9wZXJ0eU1h
cEVudHJ5SW5kaWNlCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgUHJvcGVydHlNYXA6OmdldEVu
dW1lcmFibGVQcm9wZXJ0eU5hbWVzKFZlY3RvcjxVU3RyaW5nOjpSZXAqPiYgcHJvcGVydHlOYW1l
cykgY29uc3QKK3ZvaWQgUHJvcGVydHlNYXA6OmdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKFBy
b3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzKSBjb25zdAogewogICAgIGlmICghbV90YWJs
ZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDkxLDkgKzQ5MiwxNCBAQCB2b2lkIFByb3BlcnR5TWFw
OjpnZXRFbnVtZXJhYmxlUHJvcGVydHlOCiAgICAgICAgICAgICAgICAgKytpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9Ci0gICAgICAgIHByb3BlcnR5TmFtZXMucmVzZXJ2ZUNhcGFjaXR5KGkp
OwotICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IGk7ICsraykKLSAgICAgICAgICAgIHByb3Bl
cnR5TmFtZXMuYXBwZW5kKGFba10tPmtleSk7CisgICAgICAgIGlmICghcHJvcGVydHlOYW1lcy5z
aXplKCkpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgaTsgKytrKQorICAgICAg
ICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkS25vd25VbmlxdWUoYVtrXS0+a2V5KTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgaTsgKytrKQorICAg
ICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGFba10tPmtleSk7CisgICAgICAgIH0KKwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01MTQsOSArNTIwLDEzIEBAIHZvaWQgUHJvcGVy
dHlNYXA6OmdldEVudW1lcmFibGVQcm9wZXJ0eU4KICAgICBzb3J0ZWRFbnVtZXJhYmxlcy5yZXNp
emUoZW51bWVyYWJsZUNvdW50KTsKIAogICAgIC8vIFB1dCB0aGUga2V5cyBvZiB0aGUgc29ydGVk
IGVudHJpZXMgaW50byB0aGUgbGlzdC4KLSAgICBwcm9wZXJ0eU5hbWVzLnJlc2VydmVDYXBhY2l0
eShzb3J0ZWRFbnVtZXJhYmxlcy5zaXplKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c29ydGVkRW51bWVyYWJsZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYXBw
ZW5kKHNvcnRlZEVudW1lcmFibGVzW2ldLT5rZXkpOworICAgIGlmICghcHJvcGVydHlOYW1lcy5z
aXplKCkpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzb3J0ZWRFbnVtZXJhYmxl
cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkS25vd25VbmlxdWUo
c29ydGVkRW51bWVyYWJsZXNbaV0tPmtleSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzb3J0ZWRFbnVtZXJhYmxlcy5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgIHByb3BlcnR5TmFtZXMuYWRkKHNvcnRlZEVudW1lcmFibGVzW2ldLT5rZXkpOworICAgIH0K
IH0KIAogI2lmIERPX1BST1BFUlRZTUFQX0NPTlNURU5DWV9DSEVDSwpJbmRleDoga2pzL1Byb3Bl
cnR5TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL1Byb3BlcnR5TWFwLmgJKHJldmlzaW9uIDM2Njgx
KQorKysga2pzL1Byb3BlcnR5TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBKU09iamVjdDsKICAgICBjbGFzcyBKU1ZhbHVl
OworICAgIGNsYXNzIFByb3BlcnR5TmFtZUFycmF5OwogCiAgICAgdHlwZWRlZiBKU1ZhbHVlKiog
UHJvcGVydHlTdG9yYWdlOwogCkBAIC05Myw3ICs5NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBzaXplX3QgZ2V0T2Zmc2V0KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7CiAg
ICAgICAgIHNpemVfdCBnZXRPZmZzZXQoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCB1
bnNpZ25lZCYgYXR0cmlidXRlcyk7CiAKLSAgICAgICAgdm9pZCBnZXRFbnVtZXJhYmxlUHJvcGVy
dHlOYW1lcyhWZWN0b3I8VVN0cmluZzo6UmVwKj4mKSBjb25zdDsKKyAgICAgICAgdm9pZCBnZXRF
bnVtZXJhYmxlUHJvcGVydHlOYW1lcyhQcm9wZXJ0eU5hbWVBcnJheSYpIGNvbnN0OwogCiAgICAg
ICAgIGJvb2wgaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1fZ2V0
dGVyU2V0dGVyRmxhZzsgfQogICAgICAgICB2b2lkIHNldEhhc0dldHRlclNldHRlclByb3BlcnRp
ZXMoYm9vbCBmKSB7IG1fZ2V0dGVyU2V0dGVyRmxhZyA9IGY7IH0KSW5kZXg6IGtqcy9Qcm9wZXJ0
eU5hbWVBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL1Byb3BlcnR5TmFtZUFycmF5LmNwcAko
cmV2aXNpb24gMzY2ODEpCisrKyBranMvUHJvcGVydHlOYW1lQXJyYXkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSwyMiArMjksMjIgQEAgdm9pZCBQcm9wZXJ0eU5hbWVBcnJheTo6YWRkKFVTdHJp
bmc6OlJlcAogewogICAgIEFTU0VSVChpZGVudGlmaWVyID09ICZVU3RyaW5nOjpSZXA6Om51bGwg
fHwgaWRlbnRpZmllciA9PSAmVVN0cmluZzo6UmVwOjplbXB0eSB8fCBpZGVudGlmaWVyLT5pZGVu
dGlmaWVyVGFibGUoKSk7CiAKLSAgICBzaXplX3Qgc2l6ZSA9IG1fdmVjdG9yLnNpemUoKTsKKyAg
ICBzaXplX3Qgc2l6ZSA9IG1fZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKCkuc2l6ZSgpOwogICAg
IGlmIChzaXplIDwgc2V0VGhyZXNob2xkKSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoaWRlbnRpZmllciA9PSBtX3ZlY3Rvcltp
XS51c3RyaW5nKCkucmVwKCkpCisgICAgICAgICAgICBpZiAoaWRlbnRpZmllciA9PSBtX2RhdGEt
PnByb3BlcnR5TmFtZVZlY3RvcigpW2ldLnVzdHJpbmcoKS5yZXAoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBpZiAobV9zZXQuaXNF
bXB0eSgpKSB7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkK
LSAgICAgICAgICAgICAgICBtX3NldC5hZGQobV92ZWN0b3JbaV0udXN0cmluZygpLnJlcCgpKTsK
KyAgICAgICAgICAgICAgICBtX3NldC5hZGQobV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKVtp
XS51c3RyaW5nKCkucmVwKCkpOwogICAgICAgICB9CiAgICAgICAgIGlmICghbV9zZXQuYWRkKGlk
ZW50aWZpZXIpLnNlY29uZCkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3Zl
Y3Rvci5hcHBlbmQoSWRlbnRpZmllcihtX2dsb2JhbERhdGEsIGlkZW50aWZpZXIpKTsKKyAgICBt
X2RhdGEtPnByb3BlcnR5TmFtZVZlY3RvcigpLmFwcGVuZChJZGVudGlmaWVyKG1fZ2xvYmFsRGF0
YSwgaWRlbnRpZmllcikpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IGtqcy9Qcm9w
ZXJ0eU5hbWVBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9Qcm9wZXJ0eU5hbWVBcnJheS5oCShy
ZXZpc2lvbiAzNjY4MSkKKysrIGtqcy9Qcm9wZXJ0eU5hbWVBcnJheS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiwyNCArMjIsNTEgQEAKICNkZWZpbmUgUHJvcGVydHlOYW1lQXJyYXlfaAogCiAjaW5j
bHVkZSAiRXhlY1N0YXRlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlSUQuaCIKICNpbmNsdWRlICJp
ZGVudGlmaWVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCisgICAgY2xhc3MgUHJvcGVydHlOYW1lQXJyYXlE
YXRhIDogcHVibGljIFJlZkNvdW50ZWQ8UHJvcGVydHlOYW1lQXJyYXlEYXRhPiB7CisgICAgcHVi
bGljOgorICAgICAgICB0eXBlZGVmIFZlY3RvcjxJZGVudGlmaWVyLCAyMD4gUHJvcGVydHlOYW1l
VmVjdG9yOworICAgICAgICB0eXBlZGVmIFByb3BlcnR5TmFtZVZlY3Rvcjo6Y29uc3RfaXRlcmF0
b3IgY29uc3RfaXRlcmF0b3I7CisKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UHJvcGVydHlO
YW1lQXJyYXlEYXRhPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgUHJvcGVydHlOYW1l
QXJyYXlEYXRhKTsgfQorCisgICAgICAgIFByb3BlcnR5TmFtZVZlY3RvciYgcHJvcGVydHlOYW1l
VmVjdG9yKCkgeyByZXR1cm4gbV9wcm9wZXJ0eU5hbWVWZWN0b3I7IH0KKworICAgICAgICB2b2lk
IHNldENhY2hlZFByb3RvdHlwZUNoYWluKFN0cnVjdHVyZUlEQ2hhaW4qIGNhY2hlZFByb3RvdHlw
ZUNoYWluKSB7IG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4gPSBjYWNoZWRQcm90b3R5cGVDaGFpbjsg
fQorICAgICAgICBTdHJ1Y3R1cmVJRENoYWluKiBjYWNoZWRQcm90b3R5cGVDaGFpbigpIHsgcmV0
dXJuIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uZ2V0KCk7IH0KKworICAgICAgICBjb25zdF9pdGVy
YXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlOYW1lVmVjdG9yLmJlZ2luKCk7
IH0KKyAgICAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0
eU5hbWVWZWN0b3IuZW5kKCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFByb3BlcnR5TmFt
ZUFycmF5RGF0YSgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFByb3BlcnR5TmFt
ZVZlY3RvciBtX3Byb3BlcnR5TmFtZVZlY3RvcjsKKyAgICAgICAgUmVmUHRyPFN0cnVjdHVyZUlE
Q2hhaW4+IG1fY2FjaGVkUHJvdG90eXBlQ2hhaW47CisgICAgfTsKKwogICAgIGNsYXNzIFByb3Bl
cnR5TmFtZUFycmF5IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSWRlbnRpZmllciBW
YWx1ZVR5cGU7Ci0gICAgICAgIHR5cGVkZWYgVmVjdG9yPElkZW50aWZpZXI+Ojpjb25zdF9pdGVy
YXRvciBjb25zdF9pdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBQcm9wZXJ0eU5hbWVBcnJheURh
dGE6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogCiAgICAgICAgIFByb3BlcnR5TmFt
ZUFycmF5KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKLSAgICAgICAgICAgIDogbV9nbG9iYWxE
YXRhKGdsb2JhbERhdGEpCisgICAgICAgICAgICA6IG1fZGF0YShQcm9wZXJ0eU5hbWVBcnJheURh
dGE6OmNyZWF0ZSgpKQorICAgICAgICAgICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKICAg
ICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkoRXhlY1N0YXRl
KiBleGVjKQotICAgICAgICAgICAgOiBtX2dsb2JhbERhdGEoJmV4ZWMtPmdsb2JhbERhdGEoKSkK
KyAgICAgICAgICAgIDogbV9kYXRhKFByb3BlcnR5TmFtZUFycmF5RGF0YTo6Y3JlYXRlKCkpCisg
ICAgICAgICAgICAsIG1fZ2xvYmFsRGF0YSgmZXhlYy0+Z2xvYmFsRGF0YSgpKQogICAgICAgICB7
CiAgICAgICAgIH0KIApAQCAtNDcsMjIgKzc0LDI1IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
ICAgIHZvaWQgYWRkKGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpIHsgYWRkKGlkZW50aWZp
ZXIudXN0cmluZygpLnJlcCgpKTsgfQogICAgICAgICB2b2lkIGFkZChVU3RyaW5nOjpSZXAqKTsK
LSAgICAgICAgdm9pZCBhZGRLbm93blVuaXF1ZShVU3RyaW5nOjpSZXAqIGlkZW50aWZpZXIpIHsg
bV92ZWN0b3IuYXBwZW5kKElkZW50aWZpZXIobV9nbG9iYWxEYXRhLCBpZGVudGlmaWVyKSk7IH0K
KyAgICAgICAgdm9pZCBhZGRLbm93blVuaXF1ZShVU3RyaW5nOjpSZXAqIGlkZW50aWZpZXIpIHsg
bV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5hcHBlbmQoSWRlbnRpZmllcihtX2dsb2JhbERh
dGEsIGlkZW50aWZpZXIpKTsgfQorCisgICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5zaXplKCk7IH0KIAotICAgICAgICBjb25z
dF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmJlZ2luKCk7IH0KLSAg
ICAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IuZW5kKCk7
IH0KKyAgICAgICAgSWRlbnRpZmllciYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSB7IHJldHVybiBt
X2RhdGEtPnByb3BlcnR5TmFtZVZlY3RvcigpW2ldOyB9CisgICAgICAgIGNvbnN0IElkZW50aWZp
ZXImIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9kYXRhLT5wcm9wZXJ0
eU5hbWVWZWN0b3IoKVtpXTsgfQogCi0gICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV92ZWN0b3Iuc2l6ZSgpOyB9CisgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gbV9kYXRhLT5iZWdpbigpOyB9CisgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS0+ZW5kKCk7IH0KIAotICAgICAgICBJZGVudGlmaWVy
JiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fdmVjdG9yW2ldOyB9Ci0gICAgICAg
IGNvbnN0IElkZW50aWZpZXImIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4g
bV92ZWN0b3JbaV07IH0KKyAgICAgICAgdm9pZCBzZXREYXRhKFByb3BlcnR5TmFtZUFycmF5RGF0
YSogZGF0YSkgeyBtX2RhdGEgPSBkYXRhOyB9CisgICAgICAgIFByb3BlcnR5TmFtZUFycmF5RGF0
YSogZGF0YSgpIHsgcmV0dXJuIG1fZGF0YS5nZXQoKTsgfQogCi0gICAgICAgIElkZW50aWZpZXIq
IHJlbGVhc2VJZGVudGlmaWVycygpIHsgcmV0dXJuIHNpemUoKSA/IG1fdmVjdG9yLnJlbGVhc2VC
dWZmZXIoKSA6IDA7IH0KKyAgICAgICAgUGFzc1JlZlB0cjxQcm9wZXJ0eU5hbWVBcnJheURhdGE+
IHJlbGVhc2VEYXRhKCkgeyByZXR1cm4gbV9kYXRhLnJlbGVhc2UoKTsgfQogCiAgICAgcHJpdmF0
ZToKICAgICAgICAgdHlwZWRlZiBIYXNoU2V0PFVTdHJpbmc6OlJlcCosIFB0ckhhc2g8VVN0cmlu
Zzo6UmVwKj4gPiBJZGVudGlmaWVyU2V0OwogCi0gICAgICAgIFZlY3RvcjxJZGVudGlmaWVyLCAy
MD4gbV92ZWN0b3I7CisgICAgICAgIFJlZlB0cjxQcm9wZXJ0eU5hbWVBcnJheURhdGE+IG1fZGF0
YTsKICAgICAgICAgSWRlbnRpZmllclNldCBtX3NldDsKICAgICAgICAgSlNHbG9iYWxEYXRhKiBt
X2dsb2JhbERhdGE7CiAgICAgfTsKSW5kZXg6IGtqcy9TdHJ1Y3R1cmVJRC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0ga2pzL1N0cnVjdHVyZUlELmNwcAkocmV2aXNpb24gMzY2ODEpCisrKyBranMvU3RydWN0
dXJlSUQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiaWRl
bnRpZmllci5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1l
QXJyYXkuaCIKKyNpbmNsdWRlICJsb29rdXAuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAK
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC00OCwxOCArNDksNjkgQEAgU3RydWN0dXJlSUQ6OlN0
cnVjdHVyZUlEKEpTVmFsdWUqIHByb3RvdAogICAgIEFTU0VSVChtX3Byb3RvdHlwZS0+aXNPYmpl
Y3QoKSB8fCBtX3Byb3RvdHlwZS0+aXNOdWxsKCkpOwogfQogCi12b2lkIFN0cnVjdHVyZUlEOjpn
ZXRFbnVtZXJhYmxlUHJvcGVydHlOYW1lcyhQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cykgY29uc3QKK3N0YXRpYyBib29sIHN0cnVjdHVyZUlEQ2hhaW5zQXJlRXF1YWwoU3RydWN0dXJl
SURDaGFpbiogY2hhaW5BLCBTdHJ1Y3R1cmVJRENoYWluKiBjaGFpbkIpCiB7Ci0gICAgaWYgKG1f
Y2FjaGVkUHJvcGVydHlOYW1lQXJyYXkuaXNFbXB0eSgpKQotICAgICAgICBtX3Byb3BlcnR5TWFw
LmdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKG1fY2FjaGVkUHJvcGVydHlOYW1lQXJyYXkpOwor
ICAgIGlmICghY2hhaW5BIHx8ICFjaGFpbkIpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGlmICghcHJvcGVydHlOYW1lcy5zaXplKCkpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2NhY2hlZFByb3BlcnR5TmFtZUFycmF5LnNpemUoKTsgKytpKQotICAgICAgICAgICAg
cHJvcGVydHlOYW1lcy5hZGRLbm93blVuaXF1ZShtX2NhY2hlZFByb3BlcnR5TmFtZUFycmF5W2ld
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2FjaGVk
UHJvcGVydHlOYW1lQXJyYXkuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBwcm9wZXJ0eU5hbWVz
LmFkZChtX2NhY2hlZFByb3BlcnR5TmFtZUFycmF5W2ldKTsKKyAgICBSZWZQdHI8U3RydWN0dXJl
SUQ+KiBhID0gY2hhaW5BLT5oZWFkKCk7CisgICAgUmVmUHRyPFN0cnVjdHVyZUlEPiogYiA9IGNo
YWluQi0+aGVhZCgpOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlmICgoKmEpLmdldCgpICE9
ICgqYikuZ2V0KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghKCph
KS5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBhKys7CisgICAgICAg
IGIrKzsKICAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCit2b2lkIFN0cnVjdHVyZUlEOjpnZXRFbnVtZXJhYmxlUHJvcGVydHlOYW1lcyhFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBKU09iamVjdCog
YmFzZU9iamVjdCkKK3sKKyAgICBib29sIHNob3VsZENhY2hlID0gIShwcm9wZXJ0eU5hbWVzLnNp
emUoKSB8fCBtX2lzRGljdGlvbmFyeSk7CisKKyAgICBpZiAoc2hvdWxkQ2FjaGUgJiYgbV9jYWNo
ZWRQcm9wZXJ0eU5hbWVBcnJheURhdGEpIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZUlEQ2hhaW5z
QXJlRXF1YWwobV9jYWNoZWRQcm9wZXJ0eU5hbWVBcnJheURhdGEtPmNhY2hlZFByb3RvdHlwZUNo
YWluKCksIGNhY2hlZFByb3RvdHlwZUNoYWluKCkpKSB7CisgICAgICAgICAgICBwcm9wZXJ0eU5h
bWVzLnNldERhdGEobV9jYWNoZWRQcm9wZXJ0eU5hbWVBcnJheURhdGEuZ2V0KCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgbV9wcm9wZXJ0eU1hcC5nZXRF
bnVtZXJhYmxlUHJvcGVydHlOYW1lcyhwcm9wZXJ0eU5hbWVzKTsKKworICAgIC8vIEFkZCBwcm9w
ZXJ0aWVzIGZyb20gdGhlIHN0YXRpYyBoYXNodGFibGVzIG9mIHByb3BlcnRpZXMKKyAgICBmb3Ig
KGNvbnN0IENsYXNzSW5mbyogaW5mbyA9IGJhc2VPYmplY3QtPmNsYXNzSW5mbygpOyBpbmZvOyBp
bmZvID0gaW5mby0+cGFyZW50Q2xhc3MpIHsKKyAgICAgICAgY29uc3QgSGFzaFRhYmxlKiB0YWJs
ZSA9IGluZm8tPnByb3BIYXNoVGFibGUoZXhlYyk7CisgICAgICAgIGlmICghdGFibGUpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdGFibGUtPmluaXRpYWxpemVJZk5lZWRlZChleGVj
KTsKKyAgICAgICAgQVNTRVJUKHRhYmxlLT50YWJsZSk7CisgICAgICAgIGludCBoYXNoU2l6ZU1h
c2sgPSB0YWJsZS0+aGFzaFNpemVNYXNrOworICAgICAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5
ID0gdGFibGUtPnRhYmxlOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSBoYXNoU2l6ZU1h
c2s7ICsraSwgKytlbnRyeSkgeworICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgJiYgIShlbnRy
eS0+YXR0cmlidXRlcyAmIERvbnRFbnVtKSkKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVz
LmFkZChlbnRyeS0+a2V5KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtX3Byb3RvdHlw
ZS0+aXNPYmplY3QoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihtX3Byb3RvdHlw
ZSktPmdldFByb3BlcnR5TmFtZXMoZXhlYywgcHJvcGVydHlOYW1lcyk7CisKKyAgICBpZiAoc2hv
dWxkQ2FjaGUpIHsKKyAgICAgICAgbV9jYWNoZWRQcm9wZXJ0eU5hbWVBcnJheURhdGEgPSBwcm9w
ZXJ0eU5hbWVzLmRhdGEoKTsKKworICAgICAgICBTdHJ1Y3R1cmVJRENoYWluKiBjaGFpbiA9IGNh
Y2hlZFByb3RvdHlwZUNoYWluKCk7CisgICAgICAgIGlmICghY2hhaW4pCisgICAgICAgICAgICBj
aGFpbiA9IGNyZWF0ZUNhY2hlZFByb3RvdHlwZUNoYWluKCk7CisgICAgICAgIG1fY2FjaGVkUHJv
cGVydHlOYW1lQXJyYXlEYXRhLT5zZXRDYWNoZWRQcm90b3R5cGVDaGFpbihjaGFpbik7CisgICAg
fQorfQorCit2b2lkIFN0cnVjdHVyZUlEOjpjbGVhckVudW1lcmF0aW9uQ2FjaGUoKQoreworICAg
IG1fY2FjaGVkUHJvcGVydHlOYW1lQXJyYXlEYXRhLmNsZWFyKCk7CiB9CiAKIHZvaWQgU3RydWN0
dXJlSUQ6OnRyYW5zaXRpb25UbyhTdHJ1Y3R1cmVJRCogb2xkU3RydWN0dXJlSUQsIFN0cnVjdHVy
ZUlEKiBuZXdTdHJ1Y3R1cmVJRCwgSlNPYmplY3QqIHNsb3RCYXNlKQpAQCAtMTUwLDYgKzIwMiwy
MCBAQCBTdHJ1Y3R1cmVJRDo6flN0cnVjdHVyZUlEKCkKICAgICB9CiB9CiAKK1N0cnVjdHVyZUlE
Q2hhaW4qIFN0cnVjdHVyZUlEOjpjcmVhdGVDYWNoZWRQcm90b3R5cGVDaGFpbigpCit7CisgICAg
QVNTRVJUKG1fdHlwZSA9PSBPYmplY3RUeXBlKTsKKyAgICBBU1NFUlQoIW1fY2FjaGVkUHJvdG90
eXBlQ2hhaW4pOworCisgICAgSlNWYWx1ZSogcHJvdG90eXBlID0gc3RvcmVkUHJvdG90eXBlKCk7
CisgICAgaWYgKEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZShwcm90b3R5cGUpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIFJlZlB0cjxTdHJ1Y3R1cmVJRENoYWluPiBjaGFpbiA9IFN0cnVjdHVy
ZUlEQ2hhaW46OmNyZWF0ZShzdGF0aWNfY2FzdDxKU09iamVjdCo+KHByb3RvdHlwZSktPnN0cnVj
dHVyZUlEKCkpOworICAgIHNldENhY2hlZFByb3RvdHlwZUNoYWluKGNoYWluLnJlbGVhc2UoKSk7
CisgICAgcmV0dXJuIGNhY2hlZFByb3RvdHlwZUNoYWluKCk7Cit9CisKIFN0cnVjdHVyZUlEQ2hh
aW46OlN0cnVjdHVyZUlEQ2hhaW4oU3RydWN0dXJlSUQqIHN0cnVjdHVyZUlEKQogewogICAgIHNp
emVfdCBzaXplID0gMTsKSW5kZXg6IGtqcy9TdHJ1Y3R1cmVJRC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtq
cy9TdHJ1Y3R1cmVJRC5oCShyZXZpc2lvbiAzNjY4MSkKKysrIGtqcy9TdHJ1Y3R1cmVJRC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xh
c3MgSlNWYWx1ZTsKICAgICBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheTsKKyAgICBjbGFzcyBQcm9w
ZXJ0eU5hbWVBcnJheURhdGE7CiAgICAgY2xhc3MgU3RydWN0dXJlSURDaGFpbjsKIAogICAgIHN0
cnVjdCBUcmFuc2l0aW9uVGFibGVIYXNoIHsKQEAgLTEwMiwxOCArMTAzLDE4IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIFN0cnVjdHVyZUlEKiBwcmV2aW91c0lEKCkgY29uc3QgeyByZXR1
cm4gbV9wcmV2aW91cy5nZXQoKTsgfQogCisgICAgICAgIFN0cnVjdHVyZUlEQ2hhaW4qIGNyZWF0
ZUNhY2hlZFByb3RvdHlwZUNoYWluKCk7CiAgICAgICAgIHZvaWQgc2V0Q2FjaGVkUHJvdG90eXBl
Q2hhaW4oUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRENoYWluPiBjYWNoZWRQcm90b3R5cGVDaGFpbikg
eyBtX2NhY2hlZFByb3RvdHlwZUNoYWluID0gY2FjaGVkUHJvdG90eXBlQ2hhaW47IH0KICAgICAg
ICAgU3RydWN0dXJlSURDaGFpbiogY2FjaGVkUHJvdG90eXBlQ2hhaW4oKSBjb25zdCB7IHJldHVy
biBtX2NhY2hlZFByb3RvdHlwZUNoYWluLmdldCgpOyB9CiAKICAgICAgICAgY29uc3QgUHJvcGVy
dHlNYXAmIHByb3BlcnR5TWFwKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eU1hcDsgfQogICAg
ICAgICBQcm9wZXJ0eU1hcCYgcHJvcGVydHlNYXAoKSB7IHJldHVybiBtX3Byb3BlcnR5TWFwOyB9
CiAKLSAgICAgICAgdm9pZCBnZXRFbnVtZXJhYmxlUHJvcGVydHlOYW1lcyhQcm9wZXJ0eU5hbWVB
cnJheSYpIGNvbnN0OworICAgICAgICB2b2lkIGdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgSlNPYmplY3QqKTsKKyAgICAgICAgdm9pZCBj
bGVhckVudW1lcmF0aW9uQ2FjaGUoKTsKIAogICAgICAgICBzdGF0aWMgdm9pZCB0cmFuc2l0aW9u
VG8oU3RydWN0dXJlSUQqIG9sZFN0cnVjdHVyZUlELCBTdHJ1Y3R1cmVJRCogbmV3U3RydWN0dXJl
SUQsIEpTT2JqZWN0KiBzbG90QmFzZSk7CiAKLSAgICAgICAgdm9pZCBjbGVhckVudW1lcmF0aW9u
Q2FjaGUoKSB7IG1fY2FjaGVkUHJvcGVydHlOYW1lQXJyYXkuY2xlYXIoKTsgfQotCiAgICAgcHJp
dmF0ZToKICAgICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8UmVmUHRyPFVTdHJpbmc6OlJlcD4sIHVu
c2lnbmVkPiBUcmFuc2l0aW9uVGFibGVLZXk7CiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxUcmFu
c2l0aW9uVGFibGVLZXksIFN0cnVjdHVyZUlEKiwgVHJhbnNpdGlvblRhYmxlSGFzaCwgVHJhbnNp
dGlvblRhYmxlSGFzaFRyYWl0cz4gVHJhbnNpdGlvblRhYmxlOwpAQCAtMTM1LDcgKzEzNiw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzaXplX3QgbV90cmFuc2l0aW9uQ291bnQ7CiAgICAg
ICAgIFRyYW5zaXRpb25UYWJsZSBtX3RyYW5zaXRpb25UYWJsZTsKIAotICAgICAgICBtdXRhYmxl
IFZlY3RvcjxVU3RyaW5nOjpSZXAqPiBtX2NhY2hlZFByb3BlcnR5TmFtZUFycmF5OworICAgICAg
ICBSZWZQdHI8UHJvcGVydHlOYW1lQXJyYXlEYXRhPiBtX2NhY2hlZFByb3BlcnR5TmFtZUFycmF5
RGF0YTsKIAogICAgICAgICBQcm9wZXJ0eU1hcCBtX3Byb3BlcnR5TWFwOwogICAgIH07Cg==
</data>
<flag name="review"
          id="10566"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>