<?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>136549</bug_id>
          
          <creation_ts>2014-09-04 14:48:06 -0700</creation_ts>
          <short_desc>Merge StructureShapes that share the same prototype chain</short_desc>
          <delta_ts>2014-09-08 11:15:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1033314</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-09-04 14:48:06 -0700</bug_when>
    <thetext>Create a more sophisticated merge of StructureShapes that will merge objects with the same prototype chain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033321</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-09-04 15:08:55 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; Create a more sophisticated merge of StructureShapes that will merge objects with the same prototype chain.

And also create the notion of optional fields.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033406</commentid>
    <comment_count>2</comment_count>
      <attachid>237674</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-09-04 22:28:55 -0700</bug_when>
    <thetext>Created attachment 237674
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033407</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-04 22:31:31 -0700</bug_when>
    <thetext>Attachment 237674 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/TypeSet.cpp:86:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/runtime/TypeSet.cpp:535:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
ERROR: Source/JavaScriptCore/runtime/TypeSet.h:81:  The parameter name &quot;a&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/TypeSet.h:82:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 4 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033408</commentid>
    <comment_count>4</comment_count>
      <attachid>237675</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-09-04 22:40:10 -0700</bug_when>
    <thetext>Created attachment 237675
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033458</commentid>
    <comment_count>5</comment_count>
      <attachid>237675</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-05 07:48:30 -0700</bug_when>
    <thetext>Comment on attachment 237675
patch

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

&gt; Source/JavaScriptCore/runtime/TypeSet.cpp:69
&gt; +void TypeSet::addTypeInformation(RuntimeType type, PassRefPtr&lt;StructureShape&gt; prpNewShape, StructureID id) 

What&apos;s is &quot;prp&quot;?  We usually stay away from abbreviations in variable names.

&gt; Source/JavaScriptCore/runtime/TypeSet.cpp:557
&gt; +    for (auto iter = a-&gt;m_fields.begin(), end = a-&gt;m_fields.end(); iter != end; ++iter) {

Any reason why these loops aren&apos;t C++11 for-in loops, like: for (auto value : a-&gt;m_fields) ...?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033465</commentid>
    <comment_count>6</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-09-05 09:08:32 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 237675 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=237675&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/TypeSet.cpp:69
&gt; &gt; +void TypeSet::addTypeInformation(RuntimeType type, PassRefPtr&lt;StructureShape&gt; prpNewShape, StructureID id) 
&gt; 
&gt; What&apos;s is &quot;prp&quot;?  We usually stay away from abbreviations in variable names.
I think it stands for pass reference pointer. That&apos;s what the webkit article says to prefix variables with that are PassRefPtr but immediately put into RefPtrs with. Should I switch to something else? Usually how I like to handle this is:
function (_foo) { var foo = _foo };

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/TypeSet.cpp:557
&gt; &gt; +    for (auto iter = a-&gt;m_fields.begin(), end = a-&gt;m_fields.end(); iter != end; ++iter) {
&gt; 
&gt; Any reason why these loops aren&apos;t C++11 for-in loops, like: for (auto value : a-&gt;m_fields) ...?

No, I should switch to that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033468</commentid>
    <comment_count>7</comment_count>
      <attachid>237695</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-09-05 09:37:31 -0700</bug_when>
    <thetext>Created attachment 237695
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033899</commentid>
    <comment_count>8</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-09-08 11:15:19 -0700</bug_when>
    <thetext>landed in: http://trac.webkit.org/changeset/173388</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237674</attachid>
            <date>2014-09-04 22:28:55 -0700</date>
            <delta_ts>2014-09-04 22:40:10 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>11893</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczMzA3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBA
CisyMDE0LTA5LTA0ICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBNZXJnZSBTdHJ1Y3R1cmVTaGFwZXMgdGhhdCBzaGFyZSB0aGUgc2FtZSBwcm90b3R5cGUg
Y2hhaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NjU0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElu
c3RlYWQgb2Yga2VlcGluZyB0cmFjayBvZiBtYW55IGRpc2NyZXRlIFN0cnVjdHVyZVNoYXBlcyB0
aGF0IHNoYXJlCisgICAgICAgIHRoZSBzYW1lIHByb3RvdHlwZSBjaGFpbiwgVHlwZVNldCBzaG91
bGQgbWVyZ2UgU3RydWN0dXJlU2hhcGVzIHRoYXQgCisgICAgICAgIGhhdmUgdGhlIHNhbWUgcHJv
dG90eXBlIGNoYWluIGFuZCBwcm92aWRlIGEgbmV3IG1lbWJlciB2YXJpYWJsZSBmb3IgCisgICAg
ICAgIG9wdGlvbmFsIHN0cnVjdHVyZSBmaWVsZHMuIFRoaXMgcHJvdmlkZXMgYSBjbGVhbmVyIGFu
ZCBtb3JlIGNvbmNpc2UKKyAgICAgICAgaW50ZXJmYWNlIGZvciBkZWFsaW5nIHdpdGggU3RydWN0
dXJlU2hhcGVzIHdpdGhpbiBUeXBlU2V0LiBJbnN0ZWFkCisgICAgICAgIG9mIGhhdmluZyBtYW55
IGRpc2NyZXRlIHNoYXBlcyB0aGF0IGFyZSBhbG1vc3QgaWRlbnRpY2FsLCBhbG1vc3QgCisgICAg
ICAgIGlkZW50aWNhbCBzaGFwZXMgd2lsbCBiZSBtZXJnZWQgdG9nZXRoZXIgd2l0aCBhbiBpbnRl
cmZhY2UgZm9yIAorICAgICAgICB1bmRlcnN0YW5kaW5nIHdoYXQgZmllbGRzIHRoZSBzaGFwZXMg
YmVpbmcgbWVyZ2VkIHRvZ2V0aGVyIGRpZmZlciBpbi4KKworICAgICAgICAqIHJ1bnRpbWUvVHlw
ZVNldC5jcHA6CisgICAgICAgIChKU0M6OlR5cGVTZXQ6OmFkZFR5cGVJbmZvcm1hdGlvbik6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZVNoYXBlOjphZGRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZVNoYXBlOjp0b0pTT05TdHJpbmcpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVT
aGFwZTo6aW5zcGVjdG9yUmVwcmVzZW50YXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVT
aGFwZTo6aGFzU2FtZVByb3RvdHlwZUNoYWluKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2hh
cGU6Om1lcmdlKToKKyAgICAgICAgKiBydW50aW1lL1R5cGVTZXQuaDoKKyAgICAgICAgKiB0ZXN0
cy90eXBlUHJvZmlsZXIvb3B0aW9uYWwtZmllbGRzLmpzOiBBZGRlZC4KKyAgICAgICAgKHdyYXBw
ZXIuZnVuYyk6CisgICAgICAgICh3cmFwcGVyKToKKwogMjAxNC0wOS0wNCAgTWFyayBMYW0gIDxt
YXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBQcm9wZXJ0eVNsb3QncyBpbmxpbmUg
ZnVuY3Rpb25zIGJhY2sgdG8gUHJvcGVydHlTbG90LmguCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAkocmV2aXNpb24gMTczMjI1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDI3
ICs2NiwzNSBAQCBSdW50aW1lVHlwZSBUeXBlU2V0OjpnZXRSdW50aW1lVHlwZUZvclZhCiAgICAg
cmV0dXJuIHJldDsKIH0KIAotdm9pZCBUeXBlU2V0OjphZGRUeXBlSW5mb3JtYXRpb24oUnVudGlt
ZVR5cGUgdHlwZSwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gc2hhcGUsIFN0cnVjdHVyZUlE
IGlkKSAKK3ZvaWQgVHlwZVNldDo6YWRkVHlwZUluZm9ybWF0aW9uKFJ1bnRpbWVUeXBlIHR5cGUs
IFBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHBycE5ld1NoYXBlLCBTdHJ1Y3R1cmVJRCBpZCkg
CiB7CiAgICAgbV9zZWVuVHlwZXMgPSBtX3NlZW5UeXBlcyB8IHR5cGU7CiAKLSAgICBpZiAoaWQg
JiYgc2hhcGUgJiYgdHlwZSAhPSBUeXBlU3RyaW5nKSB7CisgICAgaWYgKGlkICYmIHBycE5ld1No
YXBlICYmIHR5cGUgIT0gVHlwZVN0cmluZykgewogICAgICAgICBBU1NFUlQobV9zdHJ1Y3R1cmVJ
RENhY2hlLmlzVmFsaWRWYWx1ZShpZCkpOwogICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fc3Ry
dWN0dXJlSURDYWNoZS5hZGQoaWQpOwogICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkp
IHsKLSAgICAgICAgICAgIC8vIE1ha2Ugb25lIG1vcmUgcGFzcyBtYWtpbmcgc3VyZSB0aGF0IHdl
IGRvbid0IGhhdmUgdGhlIHNhbWUgc2hhcGUuIChTYW1lIHNoYXBlcyBtYXkgaGF2ZSBkaWZmZXJl
bnQgU3RydWN0dXJlSURzKS4KKyAgICAgICAgICAgIC8vIE1ha2Ugb25lIG1vcmUgcGFzcyBtYWtp
bmcgc3VyZSB0aGF0OiAKKyAgICAgICAgICAgIC8vIC0gV2UgZG9uJ3QgaGF2ZSB0d28gaW5zdGFu
Y2VzIG9mIHRoZSBzYW1lIHNoYXBlLiAoU2FtZSBzaGFwZXMgbWF5IGhhdmUgZGlmZmVyZW50IFN0
cnVjdHVyZUlEcykuCisgICAgICAgICAgICAvLyAtIFdlIGRvbid0IGhhdmUgdHdvIHNoYXBlcyB0
aGF0IHNoYXJlIHRoZSBzYW1lIHByb3RvdHlwZSBjaGFpbi4gSWYgdGhlc2Ugc2hhcGVzIHNoYXJl
IHRoZSBzYW1lIAorICAgICAgICAgICAgLy8gICBwcm90b3R5cGUgY2hhaW4sIHRoZXkgd2lsbCBi
ZSBtZXJnZWQgaW50byBvbmUgc2hhcGUuCiAgICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7
Ci0gICAgICAgICAgICBTdHJpbmcgaGFzaCA9IHNoYXBlLT5wcm9wZXJ0eUhhc2goKTsKKyAgICAg
ICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gbmV3U2hhcGUgPSBwcnBOZXdTaGFwZTsKKyAg
ICAgICAgICAgIFN0cmluZyBoYXNoID0gbmV3U2hhcGUtPnByb3BlcnR5SGFzaCgpOwogICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0cnVjdHVyZUhpc3Rvcnkuc2l6ZSgpOyBp
KyspIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8U3RydWN0dXJlU2hhcGU+IG9iaiA9IG1fc3Ry
dWN0dXJlSGlzdG9yeS5hdChpKTsKLSAgICAgICAgICAgICAgICBpZiAob2JqLT5wcm9wZXJ0eUhh
c2goKSA9PSBoYXNoKSB7CisgICAgICAgICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiYg
c2VlblNoYXBlID0gbV9zdHJ1Y3R1cmVIaXN0b3J5LmF0KGkpOworICAgICAgICAgICAgICAgIGlm
IChzZWVuU2hhcGUtPnByb3BlcnR5SGFzaCgpID09IGhhc2gpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKHNlZW5TaGFwZS0+aGFzU2FtZVByb3RvdHlwZUNoYWluKG5ld1NoYXBl
KSkgeworICAgICAgICAgICAgICAgICAgICBzZWVuU2hhcGUgPSBTdHJ1Y3R1cmVTaGFwZTo6bWVy
Z2Uoc2VlblNoYXBlLCBuZXdTaGFwZSk7CiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBpZiAoIWZvdW5kKQotICAgICAgICAgICAgICAgIG1fc3Ry
dWN0dXJlSGlzdG9yeS5hcHBlbmQoc2hhcGUpOworICAgICAgICAgICAgICAgIG1fc3RydWN0dXJl
SGlzdG9yeS5hcHBlbmQobmV3U2hhcGUpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMzQ0LDcg
KzM1Miw3IEBAIHZvaWQgU3RydWN0dXJlU2hhcGU6Om1hcmtBc0ZpbmFsKCkKIHZvaWQgU3RydWN0
dXJlU2hhcGU6OmFkZFByb3BlcnR5KFJlZlB0cjxTdHJpbmdJbXBsPiBpbXBsKQogewogICAgIEFT
U0VSVCghbV9maW5hbCk7Ci0gICAgbV9maWVsZHMuYXBwZW5kKGltcGwpOworICAgIG1fZmllbGRz
LmFkZChpbXBsKTsKIH0KIAogU3RyaW5nIFN0cnVjdHVyZVNoYXBlOjpwcm9wZXJ0eUhhc2goKSAK
QEAgLTQ0MSw2ICs0NDksNyBAQCBTdHJpbmcgU3RydWN0dXJlU2hhcGU6OnRvSlNPTlN0cmluZygp
IGNvCiAgICAgLy8gVGhpcyByZXR1cm5zIGEgSlNPTiBzdHJpbmcgcmVwcmVzZW50aW5nIGFuIE9i
amVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKICAgICAvLyAgICAgY29uc3RydWN0
b3JOYW1lOiAnU3RyaW5nJwogICAgIC8vICAgICBmaWVsZHM6ICdBcnJheTxTdHJpbmc+JworICAg
IC8vICAgICBvcHRpb25hbEZpZWxkczogJ0FycmF5PFN0cmluZz4nCiAgICAgLy8gICAgIHByb3Rv
OiAnSlNPTjxTdHJ1Y3R1cmVTaGFwZT4gfCBudWxsJwogCiAgICAgU3RyaW5nQnVpbGRlciBqc29u
OwpAQCAtNDY4LDYgKzQ3NywyMiBAQCBTdHJpbmcgU3RydWN0dXJlU2hhcGU6OnRvSlNPTlN0cmlu
ZygpIGNvCiAgICAganNvbi5hcHBlbmQoIl0iKTsKICAgICBqc29uLmFwcGVuZCgiLCIpOwogCisg
ICAganNvbi5hcHBlbmQoIlwib3B0aW9uYWxGaWVsZHNcIjoiKTsKKyAgICBqc29uLmFwcGVuZCgi
WyIpOworICAgIGhhc0FuSXRlbSA9IGZhbHNlOworICAgIGZvciAoYXV0byBpdCA9IG1fb3B0aW9u
YWxGaWVsZHMuYmVnaW4oKSwgZW5kID0gbV9vcHRpb25hbEZpZWxkcy5lbmQoKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgIGlmIChoYXNBbkl0ZW0pCisgICAgICAgICAgICBqc29uLmFwcGVu
ZCgiLCIpOworICAgICAgICBoYXNBbkl0ZW0gPSB0cnVlOworCisgICAgICAgIFN0cmluZyBmaWVs
ZE5hbWUoKCppdCkuZ2V0KCkpOworICAgICAgICBqc29uLmFwcGVuZCgiXCIiKTsKKyAgICAgICAg
anNvbi5hcHBlbmQoZmllbGROYW1lKTsKKyAgICAgICAganNvbi5hcHBlbmQoIlwiIik7CisgICAg
fQorICAgIGpzb24uYXBwZW5kKCJdIik7CisgICAganNvbi5hcHBlbmQoIiwiKTsKKwogICAgIGpz
b24uYXBwZW5kKCJcInByb3RvXCI6Iik7CiAgICAgaWYgKG1fcHJvdG8pCiAgICAgICAgIGpzb24u
YXBwZW5kKG1fcHJvdG8tPnRvSlNPTlN0cmluZygpKTsKQEAgLTQ4OSw2ICs1MTQsOCBAQCBQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6CiAgICAgICAgIGF1dG8gZmllbGRz
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7CiAgICAgICAg
IGZvciAoYXV0byBpdCA9IGN1cnJlbnRTaGFwZS0+bV9maWVsZHMuYmVnaW4oKSwgZW5kID0gY3Vy
cmVudFNoYXBlLT5tX2ZpZWxkcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICAgICAg
ZmllbGRzLT5hZGRJdGVtKCgqaXQpLmdldCgpKTsKKyAgICAgICAgZm9yIChhdXRvIGl0ID0gY3Vy
cmVudFNoYXBlLT5tX29wdGlvbmFsRmllbGRzLmJlZ2luKCksIGVuZCA9IGN1cnJlbnRTaGFwZS0+
bV9vcHRpb25hbEZpZWxkcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgZmll
bGRzLT5hZGRJdGVtKCgqaXQpLmdldCgpICsgU3RyaW5nKCI/IikpOwogCiAgICAgICAgIGN1cnJl
bnRPYmplY3QtPnNldEZpZWxkcyhmaWVsZHMpOwogICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRD
b25zdHJ1Y3Rvck5hbWUoY3VycmVudFNoYXBlLT5tX2NvbnN0cnVjdG9yTmFtZSk7CkBAIC01MDUs
NCArNTMyLDU0IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZToKICAg
ICByZXR1cm4gYmFzZS5yZWxlYXNlKCk7CiB9CiAKK2Jvb2wgU3RydWN0dXJlU2hhcGU6Omhhc1Nh
bWVQcm90b3R5cGVDaGFpbihSZWZQdHI8U3RydWN0dXJlU2hhcGU+IG90aGVyKQoreworICAgIFJl
ZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gc2VsZiA9IHRoaXM7CisgICAgd2hpbGUgKHNlbGYgJiYgb3Ro
ZXIpIHsKKyAgICAgICAgaWYgKHNlbGYtPm1fY29uc3RydWN0b3JOYW1lICE9IG90aGVyLT5tX2Nv
bnN0cnVjdG9yTmFtZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc2VsZiA9
IHNlbGYtPm1fcHJvdG87CisgICAgICAgIG90aGVyID0gb3RoZXItPm1fcHJvdG87CisgICAgfQor
CisgICAgcmV0dXJuICFzZWxmICYmICFvdGhlcjsKK30KKworUGFzc1JlZlB0cjxTdHJ1Y3R1cmVT
aGFwZT4gU3RydWN0dXJlU2hhcGU6Om1lcmdlKGNvbnN0IFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4g
YSwgY29uc3QgUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBiKQoreworICAgIEFTU0VSVChhLT5oYXNT
YW1lUHJvdG90eXBlQ2hhaW4oYikpOworCisgICAgUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBtZXJn
ZWQgPSBTdHJ1Y3R1cmVTaGFwZTo6Y3JlYXRlKCk7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBhLT5t
X2ZpZWxkcy5iZWdpbigpLCBlbmQgPSBhLT5tX2ZpZWxkcy5lbmQoKTsgaXRlciAhPSBlbmQ7ICsr
aXRlcikgeworICAgICAgICBpZiAoYi0+bV9maWVsZHMuY29udGFpbnMoKml0ZXIpKQorICAgICAg
ICAgICAgbWVyZ2VkLT5tX2ZpZWxkcy5hZGQoKml0ZXIpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBtZXJnZWQtPm1fb3B0aW9uYWxGaWVsZHMuYWRkKCppdGVyKTsKKyAgICB9CisKKyAgICBm
b3IgKGF1dG8gaXRlciA9IGItPm1fZmllbGRzLmJlZ2luKCksIGVuZCA9IGItPm1fZmllbGRzLmVu
ZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIGlmICghbWVyZ2VkLT5tX2ZpZWxk
cy5jb250YWlucygqaXRlcikpIHsKKyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbWVyZ2Vk
LT5tX29wdGlvbmFsRmllbGRzLmFkZCgqaXRlcik7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VE
KGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICB9CisgICAgfQorCisg
ICAgZm9yIChhdXRvIGl0ZXIgPSBhLT5tX29wdGlvbmFsRmllbGRzLmJlZ2luKCksIGVuZCA9IGEt
Pm1fb3B0aW9uYWxGaWVsZHMuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgIG1l
cmdlZC0+bV9vcHRpb25hbEZpZWxkcy5hZGQoKml0ZXIpOworICAgIGZvciAoYXV0byBpdGVyID0g
Yi0+bV9vcHRpb25hbEZpZWxkcy5iZWdpbigpLCBlbmQgPSBiLT5tX29wdGlvbmFsRmllbGRzLmVu
ZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICBtZXJnZWQtPm1fb3B0aW9uYWxGaWVs
ZHMuYWRkKCppdGVyKTsKKworICAgIEFTU0VSVChhLT5tX2NvbnN0cnVjdG9yTmFtZSA9PSBiLT5t
X2NvbnN0cnVjdG9yTmFtZSk7CisgICAgbWVyZ2VkLT5zZXRDb25zdHJ1Y3Rvck5hbWUoYS0+bV9j
b25zdHJ1Y3Rvck5hbWUpOworCisgICAgaWYgKGEtPm1fcHJvdG8pIHsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoYi0+bV9wcm90byk7CisgICAgICAgIG1lcmdlZC0+c2V0UHJvdG8oU3RydWN0dXJl
U2hhcGU6Om1lcmdlKGEtPm1fcHJvdG8sIGItPm1fcHJvdG8pKTsKKyAgICB9CisKKyAgICBtZXJn
ZWQtPm1hcmtBc0ZpbmFsKCk7CisKKyAgICByZXR1cm4gbWVyZ2VkLnJlbGVhc2UoKTsKK30KKwog
fSAvL25hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5
cGVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBl
U2V0LmgJKHJldmlzaW9uIDE3MzIyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1R5cGVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsOCArNzgsMTEgQEAgcHVibGljOgogCiBw
cml2YXRlOgogICAgIHN0YXRpYyBTdHJpbmcgbGVhc3RDb21tb25BbmNlc3Rvcihjb25zdCBWZWN0
b3I8UmVmUHRyPFN0cnVjdHVyZVNoYXBlPj4pOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVj
dHVyZVNoYXBlPiBtZXJnZShjb25zdCBSZWZQdHI8U3RydWN0dXJlU2hhcGU+IGEsIGNvbnN0IFJl
ZlB0cjxTdHJ1Y3R1cmVTaGFwZT5iKTsKKyAgICBib29sIGhhc1NhbWVQcm90b3R5cGVDaGFpbihS
ZWZQdHI8U3RydWN0dXJlU2hhcGU+KTsKIAotICAgIFZlY3RvcjxSZWZQdHI8U3RyaW5nSW1wbD4+
IG1fZmllbGRzOworICAgIEhhc2hTZXQ8UmVmUHRyPFN0cmluZ0ltcGw+PiBtX2ZpZWxkczsKKyAg
ICBIYXNoU2V0PFJlZlB0cjxTdHJpbmdJbXBsPj4gbV9vcHRpb25hbEZpZWxkczsKICAgICBSZWZQ
dHI8U3RydWN0dXJlU2hhcGU+IG1fcHJvdG87CiAgICAgc3RkOjp1bmlxdWVfcHRyPFN0cmluZz4g
bV9wcm9wZXJ0eUhhc2g7CiAgICAgU3RyaW5nIG1fY29uc3RydWN0b3JOYW1lOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3R5cGVQcm9maWxlci9vcHRpb25hbC1maWVsZHMuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3R5cGVQcm9maWxlci9v
cHRpb25hbC1maWVsZHMuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvdHlwZVByb2ZpbGVyL29wdGlvbmFsLWZpZWxkcy5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDUyIEBACitsb2FkKCIuL2RyaXZlci9kcml2ZXIuanMiKTsKKwordmFyIGZ1bmM7Citm
dW5jdGlvbiB3cmFwcGVyKCkgeworCitmdW5jID0gZnVuY3Rpb24oYXJnKXt9OworCit9Cit3cmFw
cGVyKCk7CisKKy8vID09PT09PSBFbmQgdGVzdCBjYXNlcyA9PT09PT0KKwordmFyIG9iaiA9IHt4
OjIwLCB5OjUwfTsKKworZnVuYyhvYmopOwordmFyIHR5cGVzID0gZmluZFR5cGVGb3JFeHByZXNz
aW9uKHdyYXBwZXIsICJhcmciKTsgCithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBlU2V0LnN0
cnVjdHVyZXMubGVuZ3RoID09PSAxLCAiYXJnIHNob3VsZCBoYXZlIG9uZSBzdHJ1Y3R1cmUiKTsK
K2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuc3RydWN0dXJlc1swXS5maWVsZHMubGVu
Z3RoID09PSAyLCAiYXJnIHNob3VsZCBoYXZlIHR3byBmaWVsZHMiKTsKK2Fzc2VydCh0eXBlcy5p
bnN0cnVjdGlvblR5cGVTZXQuc3RydWN0dXJlc1swXS5maWVsZHMuaW5kZXhPZigieCIpICE9PSAt
MSwgImFyZyBzaG91bGQgaGF2ZSBmaWVsZDogJ3gnIik7Cithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rp
b25UeXBlU2V0LnN0cnVjdHVyZXNbMF0uZmllbGRzLmluZGV4T2YoInkiKSAhPT0gLTEsICJhcmcg
c2hvdWxkIGhhdmUgZmllbGQ6ICd5JyIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNl
dC5zdHJ1Y3R1cmVzWzBdLm9wdGlvbmFsRmllbGRzLmxlbmd0aCA9PT0gMCwgImFyZyBzaG91bGQg
aGF2ZSB6ZXJvIG9wdGlvbmFsIGZpZWxkcyIpOworCitvYmoueiA9IDQwOworZnVuYyhvYmopOwor
dHlwZXMgPSBmaW5kVHlwZUZvckV4cHJlc3Npb24od3JhcHBlciwgImFyZyIpOyAKK2Fzc2VydCh0
eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuc3RydWN0dXJlc1swXS5maWVsZHMubGVuZ3RoID09PSAy
LCAiYXJnIHNob3VsZCBzdGlsbCBoYXZlIHR3byBmaWVsZHMiKTsKK2Fzc2VydCh0eXBlcy5pbnN0
cnVjdGlvblR5cGVTZXQuc3RydWN0dXJlc1swXS5maWVsZHMuaW5kZXhPZigieCIpICE9PSAtMSwg
ImFyZyBzaG91bGQgaGF2ZSBmaWVsZDogJ3gnIik7Cithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25U
eXBlU2V0LnN0cnVjdHVyZXNbMF0uZmllbGRzLmluZGV4T2YoInkiKSAhPT0gLTEsICJhcmcgc2hv
dWxkIGhhdmUgZmllbGQ6ICd5JyIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5z
dHJ1Y3R1cmVzWzBdLm9wdGlvbmFsRmllbGRzLmxlbmd0aCA9PT0gMSwgImFyZyBzaG91bGQgaGF2
ZSBvbmUgb3B0aW9uYWwgZmllbGQiKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQu
c3RydWN0dXJlc1swXS5vcHRpb25hbEZpZWxkcy5pbmRleE9mKCJ6IikgIT09IC0xLCAiYXJnIHNo
b3VsZCBoYXZlIG9wdGlvbmFsIGZpZWxkOiAneiciKTsKKworb2JqWyJmb28iXSA9ICJ0eXBlIjsK
K29ialsiYmF6Il0gPSAicHJvZmlsZXIiOworZnVuYyhvYmopOwordHlwZXMgPSBmaW5kVHlwZUZv
ckV4cHJlc3Npb24od3JhcHBlciwgImFyZyIpOyAKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5
cGVTZXQuc3RydWN0dXJlc1swXS5maWVsZHMubGVuZ3RoID09PSAyLCAiYXJnIHNob3VsZCBzdGls
bCBoYXZlIHR3byBmaWVsZHMiKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuc3Ry
dWN0dXJlc1swXS5maWVsZHMuaW5kZXhPZigieCIpICE9PSAtMSwgImFyZyBzaG91bGQgaGF2ZSBm
aWVsZDogJ3gnIik7Cithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBlU2V0LnN0cnVjdHVyZXNb
MF0uZmllbGRzLmluZGV4T2YoInkiKSAhPT0gLTEsICJhcmcgc2hvdWxkIGhhdmUgZmllbGQ6ICd5
JyIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVzWzBdLm9wdGlv
bmFsRmllbGRzLmxlbmd0aCA9PT0gMywgImFyZyBzaG91bGQgaGF2ZSB0aHJlZSBvcHRpb25hbCBm
aWVsZCIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVzWzBdLm9w
dGlvbmFsRmllbGRzLmluZGV4T2YoInoiKSAhPT0gLTEsICJhcmcgc2hvdWxkIGhhdmUgb3B0aW9u
YWwgZmllbGQ6ICd6JyIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1
cmVzWzBdLm9wdGlvbmFsRmllbGRzLmluZGV4T2YoImZvbyIpICE9PSAtMSwgImFyZyBzaG91bGQg
aGF2ZSBvcHRpb25hbCBmaWVsZDogJ2ZvbyciKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5
cGVTZXQuc3RydWN0dXJlc1swXS5vcHRpb25hbEZpZWxkcy5pbmRleE9mKCJiYXoiKSAhPT0gLTEs
ICJhcmcgc2hvdWxkIGhhdmUgb3B0aW9uYWwgZmllbGQ6ICdiYXonIik7CisKK2Z1bmMoe30pOwor
dHlwZXMgPSBmaW5kVHlwZUZvckV4cHJlc3Npb24od3JhcHBlciwgImFyZyIpOyAKK2Fzc2VydCh0
eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuc3RydWN0dXJlc1swXS5maWVsZHMubGVuZ3RoID09PSAw
LCAiYXJnIHNob3VsZCBoYXZlIG5vIGNvbW1vbiBmaWVsZHMiKTsKK2Fzc2VydCh0eXBlcy5pbnN0
cnVjdGlvblR5cGVTZXQuc3RydWN0dXJlc1swXS5vcHRpb25hbEZpZWxkcy5sZW5ndGggPT09IDUs
ICJhcmcgc2hvdWxkIGhhdmUgZml2ZSBvcHRpb25hbCBmaWVsZCIpOworYXNzZXJ0KHR5cGVzLmlu
c3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVzWzBdLm9wdGlvbmFsRmllbGRzLmluZGV4T2YoIngi
KSAhPT0gLTEsICJhcmcgc2hvdWxkIGhhdmUgb3B0aW9uYWwgZmllbGQ6ICd4JyIpOworYXNzZXJ0
KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVzWzBdLm9wdGlvbmFsRmllbGRzLmlu
ZGV4T2YoInkiKSAhPT0gLTEsICJhcmcgc2hvdWxkIGhhdmUgb3B0aW9uYWwgZmllbGQ6ICd5JyIp
OworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVzWzBdLm9wdGlvbmFs
RmllbGRzLmluZGV4T2YoInoiKSAhPT0gLTEsICJhcmcgc2hvdWxkIGhhdmUgb3B0aW9uYWwgZmll
bGQ6ICd6JyIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVzWzBd
Lm9wdGlvbmFsRmllbGRzLmluZGV4T2YoImZvbyIpICE9PSAtMSwgImFyZyBzaG91bGQgaGF2ZSBv
cHRpb25hbCBmaWVsZDogJ2ZvbyciKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQu
c3RydWN0dXJlc1swXS5vcHRpb25hbEZpZWxkcy5pbmRleE9mKCJiYXoiKSAhPT0gLTEsICJhcmcg
c2hvdWxkIGhhdmUgb3B0aW9uYWwgZmllbGQ6ICdiYXonIik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237675</attachid>
            <date>2014-09-04 22:40:10 -0700</date>
            <delta_ts>2014-09-05 09:37:31 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>12058</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczMzA3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBA
CisyMDE0LTA5LTA0ICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBNZXJnZSBTdHJ1Y3R1cmVTaGFwZXMgdGhhdCBzaGFyZSB0aGUgc2FtZSBwcm90b3R5cGUg
Y2hhaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NjU0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElu
c3RlYWQgb2Yga2VlcGluZyB0cmFjayBvZiBtYW55IGRpc2NyZXRlIFN0cnVjdHVyZVNoYXBlcyB0
aGF0IHNoYXJlCisgICAgICAgIHRoZSBzYW1lIHByb3RvdHlwZSBjaGFpbiwgVHlwZVNldCBzaG91
bGQgbWVyZ2UgU3RydWN0dXJlU2hhcGVzIHRoYXQgCisgICAgICAgIGhhdmUgdGhlIHNhbWUgcHJv
dG90eXBlIGNoYWluIGFuZCBwcm92aWRlIGEgbmV3IG1lbWJlciB2YXJpYWJsZSBmb3IgCisgICAg
ICAgIG9wdGlvbmFsIHN0cnVjdHVyZSBmaWVsZHMuIFRoaXMgcHJvdmlkZXMgYSBjbGVhbmVyIGFu
ZCBtb3JlIGNvbmNpc2UKKyAgICAgICAgaW50ZXJmYWNlIGZvciBkZWFsaW5nIHdpdGggU3RydWN0
dXJlU2hhcGVzIHdpdGhpbiBUeXBlU2V0LiBJbnN0ZWFkCisgICAgICAgIG9mIGhhdmluZyBtYW55
IGRpc2NyZXRlIHNoYXBlcyB0aGF0IGFyZSBhbG1vc3QgaWRlbnRpY2FsLCBhbG1vc3QgCisgICAg
ICAgIGlkZW50aWNhbCBzaGFwZXMgd2lsbCBiZSBtZXJnZWQgdG9nZXRoZXIgd2l0aCBhbiBpbnRl
cmZhY2UgZm9yIAorICAgICAgICB1bmRlcnN0YW5kaW5nIHdoYXQgZmllbGRzIHRoZSBzaGFwZXMg
YmVpbmcgbWVyZ2VkIHRvZ2V0aGVyIGRpZmZlciBpbi4KKworICAgICAgICAqIHJ1bnRpbWUvVHlw
ZVNldC5jcHA6CisgICAgICAgIChKU0M6OlR5cGVTZXQ6OmFkZFR5cGVJbmZvcm1hdGlvbik6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZVNoYXBlOjphZGRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZVNoYXBlOjp0b0pTT05TdHJpbmcpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVT
aGFwZTo6aW5zcGVjdG9yUmVwcmVzZW50YXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVT
aGFwZTo6aGFzU2FtZVByb3RvdHlwZUNoYWluKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2hh
cGU6Om1lcmdlKToKKyAgICAgICAgKiBydW50aW1lL1R5cGVTZXQuaDoKKyAgICAgICAgKiB0ZXN0
cy90eXBlUHJvZmlsZXIvb3B0aW9uYWwtZmllbGRzLmpzOiBBZGRlZC4KKyAgICAgICAgKHdyYXBw
ZXIuZnVuYyk6CisgICAgICAgICh3cmFwcGVyKToKKwogMjAxNC0wOS0wNCAgTWFyayBMYW0gIDxt
YXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBQcm9wZXJ0eVNsb3QncyBpbmxpbmUg
ZnVuY3Rpb25zIGJhY2sgdG8gUHJvcGVydHlTbG90LmguCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAkocmV2aXNpb24gMTczMjI1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDI3
ICs2NiwzNiBAQCBSdW50aW1lVHlwZSBUeXBlU2V0OjpnZXRSdW50aW1lVHlwZUZvclZhCiAgICAg
cmV0dXJuIHJldDsKIH0KIAotdm9pZCBUeXBlU2V0OjphZGRUeXBlSW5mb3JtYXRpb24oUnVudGlt
ZVR5cGUgdHlwZSwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gc2hhcGUsIFN0cnVjdHVyZUlE
IGlkKSAKK3ZvaWQgVHlwZVNldDo6YWRkVHlwZUluZm9ybWF0aW9uKFJ1bnRpbWVUeXBlIHR5cGUs
IFBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHBycE5ld1NoYXBlLCBTdHJ1Y3R1cmVJRCBpZCkg
CiB7CiAgICAgbV9zZWVuVHlwZXMgPSBtX3NlZW5UeXBlcyB8IHR5cGU7CiAKLSAgICBpZiAoaWQg
JiYgc2hhcGUgJiYgdHlwZSAhPSBUeXBlU3RyaW5nKSB7CisgICAgaWYgKGlkICYmIHBycE5ld1No
YXBlICYmIHR5cGUgIT0gVHlwZVN0cmluZykgewogICAgICAgICBBU1NFUlQobV9zdHJ1Y3R1cmVJ
RENhY2hlLmlzVmFsaWRWYWx1ZShpZCkpOwogICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fc3Ry
dWN0dXJlSURDYWNoZS5hZGQoaWQpOwogICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkp
IHsKLSAgICAgICAgICAgIC8vIE1ha2Ugb25lIG1vcmUgcGFzcyBtYWtpbmcgc3VyZSB0aGF0IHdl
IGRvbid0IGhhdmUgdGhlIHNhbWUgc2hhcGUuIChTYW1lIHNoYXBlcyBtYXkgaGF2ZSBkaWZmZXJl
bnQgU3RydWN0dXJlSURzKS4KKyAgICAgICAgICAgIC8vIE1ha2Ugb25lIG1vcmUgcGFzcyBtYWtp
bmcgc3VyZSB0aGF0OiAKKyAgICAgICAgICAgIC8vIC0gV2UgZG9uJ3QgaGF2ZSB0d28gaW5zdGFu
Y2VzIG9mIHRoZSBzYW1lIHNoYXBlLiAoU2FtZSBzaGFwZXMgbWF5IGhhdmUgZGlmZmVyZW50IFN0
cnVjdHVyZUlEcykuCisgICAgICAgICAgICAvLyAtIFdlIGRvbid0IGhhdmUgdHdvIHNoYXBlcyB0
aGF0IHNoYXJlIHRoZSBzYW1lIHByb3RvdHlwZSBjaGFpbi4gSWYgdGhlc2Ugc2hhcGVzIHNoYXJl
IHRoZSBzYW1lIAorICAgICAgICAgICAgLy8gICBwcm90b3R5cGUgY2hhaW4sIHRoZXkgd2lsbCBi
ZSBtZXJnZWQgaW50byBvbmUgc2hhcGUuCiAgICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7
Ci0gICAgICAgICAgICBTdHJpbmcgaGFzaCA9IHNoYXBlLT5wcm9wZXJ0eUhhc2goKTsKKyAgICAg
ICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gbmV3U2hhcGUgPSBwcnBOZXdTaGFwZTsKKyAg
ICAgICAgICAgIFN0cmluZyBoYXNoID0gbmV3U2hhcGUtPnByb3BlcnR5SGFzaCgpOwogICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0cnVjdHVyZUhpc3Rvcnkuc2l6ZSgpOyBp
KyspIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8U3RydWN0dXJlU2hhcGU+IG9iaiA9IG1fc3Ry
dWN0dXJlSGlzdG9yeS5hdChpKTsKLSAgICAgICAgICAgICAgICBpZiAob2JqLT5wcm9wZXJ0eUhh
c2goKSA9PSBoYXNoKSB7CisgICAgICAgICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiYg
c2VlblNoYXBlID0gbV9zdHJ1Y3R1cmVIaXN0b3J5LmF0KGkpOworICAgICAgICAgICAgICAgIGlm
IChzZWVuU2hhcGUtPnByb3BlcnR5SGFzaCgpID09IGhhc2gpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9IAorICAgICAgICAgICAgICAgIGlmIChzZWVuU2hhcGUtPmhhc1NhbWVQcm90b3R5cGVD
aGFpbihuZXdTaGFwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2VlblNoYXBlID0gU3RydWN0
dXJlU2hhcGU6Om1lcmdlKHNlZW5TaGFwZSwgbmV3U2hhcGUpOwogICAgICAgICAgICAgICAgICAg
ICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCFmb3VuZCkKLSAgICAgICAg
ICAgICAgICBtX3N0cnVjdHVyZUhpc3RvcnkuYXBwZW5kKHNoYXBlKTsKKyAgICAgICAgICAgICAg
ICBtX3N0cnVjdHVyZUhpc3RvcnkuYXBwZW5kKG5ld1NoYXBlKTsKICAgICAgICAgfQogICAgIH0K
IH0KQEAgLTM0NCw3ICszNTMsNyBAQCB2b2lkIFN0cnVjdHVyZVNoYXBlOjptYXJrQXNGaW5hbCgp
CiB2b2lkIFN0cnVjdHVyZVNoYXBlOjphZGRQcm9wZXJ0eShSZWZQdHI8U3RyaW5nSW1wbD4gaW1w
bCkKIHsKICAgICBBU1NFUlQoIW1fZmluYWwpOwotICAgIG1fZmllbGRzLmFwcGVuZChpbXBsKTsK
KyAgICBtX2ZpZWxkcy5hZGQoaW1wbCk7CiB9CiAKIFN0cmluZyBTdHJ1Y3R1cmVTaGFwZTo6cHJv
cGVydHlIYXNoKCkgCkBAIC00NDEsNiArNDUwLDcgQEAgU3RyaW5nIFN0cnVjdHVyZVNoYXBlOjp0
b0pTT05TdHJpbmcoKSBjbwogICAgIC8vIFRoaXMgcmV0dXJucyBhIEpTT04gc3RyaW5nIHJlcHJl
c2VudGluZyBhbiBPYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CiAgICAgLy8g
ICAgIGNvbnN0cnVjdG9yTmFtZTogJ1N0cmluZycKICAgICAvLyAgICAgZmllbGRzOiAnQXJyYXk8
U3RyaW5nPicKKyAgICAvLyAgICAgb3B0aW9uYWxGaWVsZHM6ICdBcnJheTxTdHJpbmc+JwogICAg
IC8vICAgICBwcm90bzogJ0pTT048U3RydWN0dXJlU2hhcGU+IHwgbnVsbCcKIAogICAgIFN0cmlu
Z0J1aWxkZXIganNvbjsKQEAgLTQ2OCw2ICs0NzgsMjIgQEAgU3RyaW5nIFN0cnVjdHVyZVNoYXBl
Ojp0b0pTT05TdHJpbmcoKSBjbwogICAgIGpzb24uYXBwZW5kKCJdIik7CiAgICAganNvbi5hcHBl
bmQoIiwiKTsKIAorICAgIGpzb24uYXBwZW5kKCJcIm9wdGlvbmFsRmllbGRzXCI6Iik7CisgICAg
anNvbi5hcHBlbmQoIlsiKTsKKyAgICBoYXNBbkl0ZW0gPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8g
aXQgPSBtX29wdGlvbmFsRmllbGRzLmJlZ2luKCksIGVuZCA9IG1fb3B0aW9uYWxGaWVsZHMuZW5k
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoaGFzQW5JdGVtKQorICAgICAgICAg
ICAganNvbi5hcHBlbmQoIiwiKTsKKyAgICAgICAgaGFzQW5JdGVtID0gdHJ1ZTsKKworICAgICAg
ICBTdHJpbmcgZmllbGROYW1lKCgqaXQpLmdldCgpKTsKKyAgICAgICAganNvbi5hcHBlbmQoIlwi
Iik7CisgICAgICAgIGpzb24uYXBwZW5kKGZpZWxkTmFtZSk7CisgICAgICAgIGpzb24uYXBwZW5k
KCJcIiIpOworICAgIH0KKyAgICBqc29uLmFwcGVuZCgiXSIpOworICAgIGpzb24uYXBwZW5kKCIs
Iik7CisKICAgICBqc29uLmFwcGVuZCgiXCJwcm90b1wiOiIpOwogICAgIGlmIChtX3Byb3RvKQog
ICAgICAgICBqc29uLmFwcGVuZChtX3Byb3RvLT50b0pTT05TdHJpbmcoKSk7CkBAIC00ODksNiAr
NTE1LDggQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOgogICAgICAg
ICBhdXRvIGZpZWxkcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0
ZSgpOwogICAgICAgICBmb3IgKGF1dG8gaXQgPSBjdXJyZW50U2hhcGUtPm1fZmllbGRzLmJlZ2lu
KCksIGVuZCA9IGN1cnJlbnRTaGFwZS0+bV9maWVsZHMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkK
ICAgICAgICAgICAgIGZpZWxkcy0+YWRkSXRlbSgoKml0KS5nZXQoKSk7CisgICAgICAgIGZvciAo
YXV0byBpdCA9IGN1cnJlbnRTaGFwZS0+bV9vcHRpb25hbEZpZWxkcy5iZWdpbigpLCBlbmQgPSBj
dXJyZW50U2hhcGUtPm1fb3B0aW9uYWxGaWVsZHMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAg
ICAgICAgICAgIGZpZWxkcy0+YWRkSXRlbSgoKml0KS5nZXQoKSArIFN0cmluZygiPyIpKTsKIAog
ICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRGaWVsZHMoZmllbGRzKTsKICAgICAgICAgY3VycmVu
dE9iamVjdC0+c2V0Q29uc3RydWN0b3JOYW1lKGN1cnJlbnRTaGFwZS0+bV9jb25zdHJ1Y3Rvck5h
bWUpOwpAQCAtNTA1LDQgKzUzMyw1NyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6CiAgICAgcmV0dXJuIGJhc2UucmVsZWFzZSgpOwogfQogCitib29sIFN0cnVjdHVy
ZVNoYXBlOjpoYXNTYW1lUHJvdG90eXBlQ2hhaW4oUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4g
cHJwT3RoZXIpCit7CisgICAgUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBzZWxmID0gdGhpczsKKyAg
ICBSZWZQdHI8U3RydWN0dXJlU2hhcGU+IG90aGVyID0gcHJwT3RoZXI7CisgICAgd2hpbGUgKHNl
bGYgJiYgb3RoZXIpIHsKKyAgICAgICAgaWYgKHNlbGYtPm1fY29uc3RydWN0b3JOYW1lICE9IG90
aGVyLT5tX2NvbnN0cnVjdG9yTmFtZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgc2VsZiA9IHNlbGYtPm1fcHJvdG87CisgICAgICAgIG90aGVyID0gb3RoZXItPm1fcHJvdG87
CisgICAgfQorCisgICAgcmV0dXJuICFzZWxmICYmICFvdGhlcjsKK30KKworUGFzc1JlZlB0cjxT
dHJ1Y3R1cmVTaGFwZT4gU3RydWN0dXJlU2hhcGU6Om1lcmdlKGNvbnN0IFBhc3NSZWZQdHI8U3Ry
dWN0dXJlU2hhcGU+IHBycEEsIGNvbnN0IFBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHBycEIp
Cit7CisgICAgUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBhID0gcHJwQTsKKyAgICBSZWZQdHI8U3Ry
dWN0dXJlU2hhcGU+IGIgPSBwcnBCOworICAgIEFTU0VSVChhLT5oYXNTYW1lUHJvdG90eXBlQ2hh
aW4oYikpOworCisgICAgUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBtZXJnZWQgPSBTdHJ1Y3R1cmVT
aGFwZTo6Y3JlYXRlKCk7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBhLT5tX2ZpZWxkcy5iZWdpbigp
LCBlbmQgPSBhLT5tX2ZpZWxkcy5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAg
ICBpZiAoYi0+bV9maWVsZHMuY29udGFpbnMoKml0ZXIpKQorICAgICAgICAgICAgbWVyZ2VkLT5t
X2ZpZWxkcy5hZGQoKml0ZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtZXJnZWQtPm1f
b3B0aW9uYWxGaWVsZHMuYWRkKCppdGVyKTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8gaXRlciA9
IGItPm1fZmllbGRzLmJlZ2luKCksIGVuZCA9IGItPm1fZmllbGRzLmVuZCgpOyBpdGVyICE9IGVu
ZDsgKytpdGVyKSB7CisgICAgICAgIGlmICghbWVyZ2VkLT5tX2ZpZWxkcy5jb250YWlucygqaXRl
cikpIHsKKyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbWVyZ2VkLT5tX29wdGlvbmFsRmll
bGRzLmFkZCgqaXRlcik7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRk
UmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChhdXRvIGl0
ZXIgPSBhLT5tX29wdGlvbmFsRmllbGRzLmJlZ2luKCksIGVuZCA9IGEtPm1fb3B0aW9uYWxGaWVs
ZHMuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgIG1lcmdlZC0+bV9vcHRpb25h
bEZpZWxkcy5hZGQoKml0ZXIpOworICAgIGZvciAoYXV0byBpdGVyID0gYi0+bV9vcHRpb25hbEZp
ZWxkcy5iZWdpbigpLCBlbmQgPSBiLT5tX29wdGlvbmFsRmllbGRzLmVuZCgpOyBpdGVyICE9IGVu
ZDsgKytpdGVyKQorICAgICAgICBtZXJnZWQtPm1fb3B0aW9uYWxGaWVsZHMuYWRkKCppdGVyKTsK
KworICAgIEFTU0VSVChhLT5tX2NvbnN0cnVjdG9yTmFtZSA9PSBiLT5tX2NvbnN0cnVjdG9yTmFt
ZSk7CisgICAgbWVyZ2VkLT5zZXRDb25zdHJ1Y3Rvck5hbWUoYS0+bV9jb25zdHJ1Y3Rvck5hbWUp
OworCisgICAgaWYgKGEtPm1fcHJvdG8pIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYi0+bV9w
cm90byk7CisgICAgICAgIG1lcmdlZC0+c2V0UHJvdG8oU3RydWN0dXJlU2hhcGU6Om1lcmdlKGEt
Pm1fcHJvdG8sIGItPm1fcHJvdG8pKTsKKyAgICB9CisKKyAgICBtZXJnZWQtPm1hcmtBc0ZpbmFs
KCk7CisKKyAgICByZXR1cm4gbWVyZ2VkLnJlbGVhc2UoKTsKK30KKwogfSAvL25hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmgJKHJldmlzaW9u
IDE3MzIyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtNzgsOCArNzgsMTEgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHN0
YXRpYyBTdHJpbmcgbGVhc3RDb21tb25BbmNlc3Rvcihjb25zdCBWZWN0b3I8UmVmUHRyPFN0cnVj
dHVyZVNoYXBlPj4pOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBtZXJn
ZShjb25zdCBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiwgY29uc3QgUGFzc1JlZlB0cjxTdHJ1
Y3R1cmVTaGFwZT4pOworICAgIGJvb2wgaGFzU2FtZVByb3RvdHlwZUNoYWluKFBhc3NSZWZQdHI8
U3RydWN0dXJlU2hhcGU+KTsKIAotICAgIFZlY3RvcjxSZWZQdHI8U3RyaW5nSW1wbD4+IG1fZmll
bGRzOworICAgIEhhc2hTZXQ8UmVmUHRyPFN0cmluZ0ltcGw+PiBtX2ZpZWxkczsKKyAgICBIYXNo
U2V0PFJlZlB0cjxTdHJpbmdJbXBsPj4gbV9vcHRpb25hbEZpZWxkczsKICAgICBSZWZQdHI8U3Ry
dWN0dXJlU2hhcGU+IG1fcHJvdG87CiAgICAgc3RkOjp1bmlxdWVfcHRyPFN0cmluZz4gbV9wcm9w
ZXJ0eUhhc2g7CiAgICAgU3RyaW5nIG1fY29uc3RydWN0b3JOYW1lOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3R5cGVQcm9maWxlci9vcHRpb25hbC1maWVsZHMuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3R5cGVQcm9maWxlci9vcHRpb25h
bC1maWVsZHMuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
dHlwZVByb2ZpbGVyL29wdGlvbmFsLWZpZWxkcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDUyIEBACitsb2FkKCIuL2RyaXZlci9kcml2ZXIuanMiKTsKKwordmFyIGZ1bmM7CitmdW5jdGlv
biB3cmFwcGVyKCkgeworCitmdW5jID0gZnVuY3Rpb24oYXJnKXt9OworCit9Cit3cmFwcGVyKCk7
CisKKy8vID09PT09PSBFbmQgdGVzdCBjYXNlcyA9PT09PT0KKwordmFyIG9iaiA9IHt4OjIwLCB5
OjUwfTsKKworZnVuYyhvYmopOwordmFyIHR5cGVzID0gZmluZFR5cGVGb3JFeHByZXNzaW9uKHdy
YXBwZXIsICJhcmciKTsgCithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBlU2V0LnN0cnVjdHVy
ZXMubGVuZ3RoID09PSAxLCAiYXJnIHNob3VsZCBoYXZlIG9uZSBzdHJ1Y3R1cmUiKTsKK2Fzc2Vy
dCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuc3RydWN0dXJlc1swXS5maWVsZHMubGVuZ3RoID09
PSAyLCAiYXJnIHNob3VsZCBoYXZlIHR3byBmaWVsZHMiKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVj
dGlvblR5cGVTZXQuc3RydWN0dXJlc1swXS5maWVsZHMuaW5kZXhPZigieCIpICE9PSAtMSwgImFy
ZyBzaG91bGQgaGF2ZSBmaWVsZDogJ3gnIik7Cithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBl
U2V0LnN0cnVjdHVyZXNbMF0uZmllbGRzLmluZGV4T2YoInkiKSAhPT0gLTEsICJhcmcgc2hvdWxk
IGhhdmUgZmllbGQ6ICd5JyIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1
Y3R1cmVzWzBdLm9wdGlvbmFsRmllbGRzLmxlbmd0aCA9PT0gMCwgImFyZyBzaG91bGQgaGF2ZSB6
ZXJvIG9wdGlvbmFsIGZpZWxkcyIpOworCitvYmoueiA9IDQwOworZnVuYyhvYmopOwordHlwZXMg
PSBmaW5kVHlwZUZvckV4cHJlc3Npb24od3JhcHBlciwgImFyZyIpOyAKK2Fzc2VydCh0eXBlcy5p
bnN0cnVjdGlvblR5cGVTZXQuc3RydWN0dXJlc1swXS5maWVsZHMubGVuZ3RoID09PSAyLCAiYXJn
IHNob3VsZCBzdGlsbCBoYXZlIHR3byBmaWVsZHMiKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlv
blR5cGVTZXQuc3RydWN0dXJlc1swXS5maWVsZHMuaW5kZXhPZigieCIpICE9PSAtMSwgImFyZyBz
aG91bGQgaGF2ZSBmaWVsZDogJ3gnIik7Cithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBlU2V0
LnN0cnVjdHVyZXNbMF0uZmllbGRzLmluZGV4T2YoInkiKSAhPT0gLTEsICJhcmcgc2hvdWxkIGhh
dmUgZmllbGQ6ICd5JyIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1
cmVzWzBdLm9wdGlvbmFsRmllbGRzLmxlbmd0aCA9PT0gMSwgImFyZyBzaG91bGQgaGF2ZSBvbmUg
b3B0aW9uYWwgZmllbGQiKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuc3RydWN0
dXJlc1swXS5vcHRpb25hbEZpZWxkcy5pbmRleE9mKCJ6IikgIT09IC0xLCAiYXJnIHNob3VsZCBo
YXZlIG9wdGlvbmFsIGZpZWxkOiAneiciKTsKKworb2JqWyJmb28iXSA9ICJ0eXBlIjsKK29ialsi
YmF6Il0gPSAicHJvZmlsZXIiOworZnVuYyhvYmopOwordHlwZXMgPSBmaW5kVHlwZUZvckV4cHJl
c3Npb24od3JhcHBlciwgImFyZyIpOyAKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQu
c3RydWN0dXJlc1swXS5maWVsZHMubGVuZ3RoID09PSAyLCAiYXJnIHNob3VsZCBzdGlsbCBoYXZl
IHR3byBmaWVsZHMiKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuc3RydWN0dXJl
c1swXS5maWVsZHMuaW5kZXhPZigieCIpICE9PSAtMSwgImFyZyBzaG91bGQgaGF2ZSBmaWVsZDog
J3gnIik7Cithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBlU2V0LnN0cnVjdHVyZXNbMF0uZmll
bGRzLmluZGV4T2YoInkiKSAhPT0gLTEsICJhcmcgc2hvdWxkIGhhdmUgZmllbGQ6ICd5JyIpOwor
YXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVzWzBdLm9wdGlvbmFsRmll
bGRzLmxlbmd0aCA9PT0gMywgImFyZyBzaG91bGQgaGF2ZSB0aHJlZSBvcHRpb25hbCBmaWVsZCIp
OworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVzWzBdLm9wdGlvbmFs
RmllbGRzLmluZGV4T2YoInoiKSAhPT0gLTEsICJhcmcgc2hvdWxkIGhhdmUgb3B0aW9uYWwgZmll
bGQ6ICd6JyIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVzWzBd
Lm9wdGlvbmFsRmllbGRzLmluZGV4T2YoImZvbyIpICE9PSAtMSwgImFyZyBzaG91bGQgaGF2ZSBv
cHRpb25hbCBmaWVsZDogJ2ZvbyciKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQu
c3RydWN0dXJlc1swXS5vcHRpb25hbEZpZWxkcy5pbmRleE9mKCJiYXoiKSAhPT0gLTEsICJhcmcg
c2hvdWxkIGhhdmUgb3B0aW9uYWwgZmllbGQ6ICdiYXonIik7CisKK2Z1bmMoe30pOwordHlwZXMg
PSBmaW5kVHlwZUZvckV4cHJlc3Npb24od3JhcHBlciwgImFyZyIpOyAKK2Fzc2VydCh0eXBlcy5p
bnN0cnVjdGlvblR5cGVTZXQuc3RydWN0dXJlc1swXS5maWVsZHMubGVuZ3RoID09PSAwLCAiYXJn
IHNob3VsZCBoYXZlIG5vIGNvbW1vbiBmaWVsZHMiKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlv
blR5cGVTZXQuc3RydWN0dXJlc1swXS5vcHRpb25hbEZpZWxkcy5sZW5ndGggPT09IDUsICJhcmcg
c2hvdWxkIGhhdmUgZml2ZSBvcHRpb25hbCBmaWVsZCIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0
aW9uVHlwZVNldC5zdHJ1Y3R1cmVzWzBdLm9wdGlvbmFsRmllbGRzLmluZGV4T2YoIngiKSAhPT0g
LTEsICJhcmcgc2hvdWxkIGhhdmUgb3B0aW9uYWwgZmllbGQ6ICd4JyIpOworYXNzZXJ0KHR5cGVz
Lmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVzWzBdLm9wdGlvbmFsRmllbGRzLmluZGV4T2Yo
InkiKSAhPT0gLTEsICJhcmcgc2hvdWxkIGhhdmUgb3B0aW9uYWwgZmllbGQ6ICd5JyIpOworYXNz
ZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVzWzBdLm9wdGlvbmFsRmllbGRz
LmluZGV4T2YoInoiKSAhPT0gLTEsICJhcmcgc2hvdWxkIGhhdmUgb3B0aW9uYWwgZmllbGQ6ICd6
JyIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVzWzBdLm9wdGlv
bmFsRmllbGRzLmluZGV4T2YoImZvbyIpICE9PSAtMSwgImFyZyBzaG91bGQgaGF2ZSBvcHRpb25h
bCBmaWVsZDogJ2ZvbyciKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuc3RydWN0
dXJlc1swXS5vcHRpb25hbEZpZWxkcy5pbmRleE9mKCJiYXoiKSAhPT0gLTEsICJhcmcgc2hvdWxk
IGhhdmUgb3B0aW9uYWwgZmllbGQ6ICdiYXonIik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237695</attachid>
            <date>2014-09-05 09:37:31 -0700</date>
            <delta_ts>2014-09-08 10:47:55 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>11878</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczMzEyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBA
CisyMDE0LTA5LTA1ICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBNZXJnZSBTdHJ1Y3R1cmVTaGFwZXMgdGhhdCBzaGFyZSB0aGUgc2FtZSBwcm90b3R5cGUg
Y2hhaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NjU0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElu
c3RlYWQgb2Yga2VlcGluZyB0cmFjayBvZiBtYW55IGRpc2NyZXRlIFN0cnVjdHVyZVNoYXBlcyB0
aGF0IHNoYXJlCisgICAgICAgIHRoZSBzYW1lIHByb3RvdHlwZSBjaGFpbiwgVHlwZVNldCBzaG91
bGQgbWVyZ2UgU3RydWN0dXJlU2hhcGVzIHRoYXQgCisgICAgICAgIGhhdmUgdGhlIHNhbWUgcHJv
dG90eXBlIGNoYWluIGFuZCBwcm92aWRlIGEgbmV3IG1lbWJlciB2YXJpYWJsZSBmb3IgCisgICAg
ICAgIG9wdGlvbmFsIHN0cnVjdHVyZSBmaWVsZHMuIFRoaXMgcHJvdmlkZXMgYSBjbGVhbmVyIGFu
ZCBtb3JlIGNvbmNpc2UKKyAgICAgICAgaW50ZXJmYWNlIGZvciBkZWFsaW5nIHdpdGggU3RydWN0
dXJlU2hhcGVzIHdpdGhpbiBUeXBlU2V0LiBJbnN0ZWFkCisgICAgICAgIG9mIGhhdmluZyBtYW55
IGRpc2NyZXRlIHNoYXBlcyB0aGF0IGFyZSBhbG1vc3QgaWRlbnRpY2FsLCBhbG1vc3QgCisgICAg
ICAgIGlkZW50aWNhbCBzaGFwZXMgd2lsbCBiZSBtZXJnZWQgdG9nZXRoZXIgd2l0aCBhbiBpbnRl
cmZhY2UgZm9yIAorICAgICAgICB1bmRlcnN0YW5kaW5nIHdoYXQgZmllbGRzIHRoZSBzaGFwZXMg
YmVpbmcgbWVyZ2VkIHRvZ2V0aGVyIGRpZmZlciBpbi4KKworICAgICAgICAqIHJ1bnRpbWUvVHlw
ZVNldC5jcHA6CisgICAgICAgIChKU0M6OlR5cGVTZXQ6OmFkZFR5cGVJbmZvcm1hdGlvbik6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZVNoYXBlOjphZGRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZVNoYXBlOjp0b0pTT05TdHJpbmcpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVT
aGFwZTo6aW5zcGVjdG9yUmVwcmVzZW50YXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVT
aGFwZTo6aGFzU2FtZVByb3RvdHlwZUNoYWluKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2hh
cGU6Om1lcmdlKToKKyAgICAgICAgKiBydW50aW1lL1R5cGVTZXQuaDoKKyAgICAgICAgKiB0ZXN0
cy90eXBlUHJvZmlsZXIvb3B0aW9uYWwtZmllbGRzLmpzOiBBZGRlZC4KKyAgICAgICAgKHdyYXBw
ZXIuZnVuYyk6CisgICAgICAgICh3cmFwcGVyKToKKwogMjAxNC0wOS0wNCAgTWljaGFlbCBTYWJv
ZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBBUk06IEFkZCBtb3JlIGNvdmVyYWdl
IHRvIEFSTXY3IGRpc2Fzc2VtYmxlcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVHlwZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVHlwZVNldC5jcHAJKHJldmlzaW9uIDE3MzMxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NiwyNyArNjYsMzYgQEAg
UnVudGltZVR5cGUgVHlwZVNldDo6Z2V0UnVudGltZVR5cGVGb3JWYQogICAgIHJldHVybiByZXQ7
CiB9CiAKLXZvaWQgVHlwZVNldDo6YWRkVHlwZUluZm9ybWF0aW9uKFJ1bnRpbWVUeXBlIHR5cGUs
IFBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHNoYXBlLCBTdHJ1Y3R1cmVJRCBpZCkgCit2b2lk
IFR5cGVTZXQ6OmFkZFR5cGVJbmZvcm1hdGlvbihSdW50aW1lVHlwZSB0eXBlLCBQYXNzUmVmUHRy
PFN0cnVjdHVyZVNoYXBlPiBwcnBOZXdTaGFwZSwgU3RydWN0dXJlSUQgaWQpIAogewogICAgIG1f
c2VlblR5cGVzID0gbV9zZWVuVHlwZXMgfCB0eXBlOwogCi0gICAgaWYgKGlkICYmIHNoYXBlICYm
IHR5cGUgIT0gVHlwZVN0cmluZykgeworICAgIGlmIChpZCAmJiBwcnBOZXdTaGFwZSAmJiB0eXBl
ICE9IFR5cGVTdHJpbmcpIHsKICAgICAgICAgQVNTRVJUKG1fc3RydWN0dXJlSURDYWNoZS5pc1Zh
bGlkVmFsdWUoaWQpKTsKICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3N0cnVjdHVyZUlEQ2Fj
aGUuYWRkKGlkKTsKICAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAg
ICAgICAvLyBNYWtlIG9uZSBtb3JlIHBhc3MgbWFraW5nIHN1cmUgdGhhdCB3ZSBkb24ndCBoYXZl
IHRoZSBzYW1lIHNoYXBlLiAoU2FtZSBzaGFwZXMgbWF5IGhhdmUgZGlmZmVyZW50IFN0cnVjdHVy
ZUlEcykuCisgICAgICAgICAgICAvLyBNYWtlIG9uZSBtb3JlIHBhc3MgbWFraW5nIHN1cmUgdGhh
dDogCisgICAgICAgICAgICAvLyAtIFdlIGRvbid0IGhhdmUgdHdvIGluc3RhbmNlcyBvZiB0aGUg
c2FtZSBzaGFwZS4gKFNhbWUgc2hhcGVzIG1heSBoYXZlIGRpZmZlcmVudCBTdHJ1Y3R1cmVJRHMp
LgorICAgICAgICAgICAgLy8gLSBXZSBkb24ndCBoYXZlIHR3byBzaGFwZXMgdGhhdCBzaGFyZSB0
aGUgc2FtZSBwcm90b3R5cGUgY2hhaW4uIElmIHRoZXNlIHNoYXBlcyBzaGFyZSB0aGUgc2FtZSAK
KyAgICAgICAgICAgIC8vICAgcHJvdG90eXBlIGNoYWluLCB0aGV5IHdpbGwgYmUgbWVyZ2VkIGlu
dG8gb25lIHNoYXBlLgogICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAgICAg
ICAgU3RyaW5nIGhhc2ggPSBzaGFwZS0+cHJvcGVydHlIYXNoKCk7CisgICAgICAgICAgICBSZWZQ
dHI8U3RydWN0dXJlU2hhcGU+IG5ld1NoYXBlID0gcHJwTmV3U2hhcGU7CisgICAgICAgICAgICBT
dHJpbmcgaGFzaCA9IG5ld1NoYXBlLT5wcm9wZXJ0eUhhc2goKTsKICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9zdHJ1Y3R1cmVIaXN0b3J5LnNpemUoKTsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBvYmogPSBtX3N0cnVjdHVyZUhpc3Rv
cnkuYXQoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKG9iai0+cHJvcGVydHlIYXNoKCkgPT0gaGFz
aCkgeworICAgICAgICAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4mIHNlZW5TaGFwZSA9
IG1fc3RydWN0dXJlSGlzdG9yeS5hdChpKTsKKyAgICAgICAgICAgICAgICBpZiAoc2VlblNoYXBl
LT5wcm9wZXJ0eUhhc2goKSA9PSBoYXNoKSB7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSAKKyAg
ICAgICAgICAgICAgICBpZiAoc2VlblNoYXBlLT5oYXNTYW1lUHJvdG90eXBlQ2hhaW4obmV3U2hh
cGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHNlZW5TaGFwZSA9IFN0cnVjdHVyZVNoYXBlOjpt
ZXJnZShzZWVuU2hhcGUsIG5ld1NoYXBlKTsKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICghZm91bmQpCi0gICAgICAgICAgICAgICAgbV9z
dHJ1Y3R1cmVIaXN0b3J5LmFwcGVuZChzaGFwZSk7CisgICAgICAgICAgICAgICAgbV9zdHJ1Y3R1
cmVIaXN0b3J5LmFwcGVuZChuZXdTaGFwZSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0zNDQs
NyArMzUzLDcgQEAgdm9pZCBTdHJ1Y3R1cmVTaGFwZTo6bWFya0FzRmluYWwoKQogdm9pZCBTdHJ1
Y3R1cmVTaGFwZTo6YWRkUHJvcGVydHkoUmVmUHRyPFN0cmluZ0ltcGw+IGltcGwpCiB7CiAgICAg
QVNTRVJUKCFtX2ZpbmFsKTsKLSAgICBtX2ZpZWxkcy5hcHBlbmQoaW1wbCk7CisgICAgbV9maWVs
ZHMuYWRkKGltcGwpOwogfQogCiBTdHJpbmcgU3RydWN0dXJlU2hhcGU6OnByb3BlcnR5SGFzaCgp
IApAQCAtNDQxLDYgKzQ1MCw3IEBAIFN0cmluZyBTdHJ1Y3R1cmVTaGFwZTo6dG9KU09OU3RyaW5n
KCkgY28KICAgICAvLyBUaGlzIHJldHVybnMgYSBKU09OIHN0cmluZyByZXByZXNlbnRpbmcgYW4g
T2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgogICAgIC8vICAgICBjb25zdHJ1
Y3Rvck5hbWU6ICdTdHJpbmcnCiAgICAgLy8gICAgIGZpZWxkczogJ0FycmF5PFN0cmluZz4nCisg
ICAgLy8gICAgIG9wdGlvbmFsRmllbGRzOiAnQXJyYXk8U3RyaW5nPicKICAgICAvLyAgICAgcHJv
dG86ICdKU09OPFN0cnVjdHVyZVNoYXBlPiB8IG51bGwnCiAKICAgICBTdHJpbmdCdWlsZGVyIGpz
b247CkBAIC00NjgsNiArNDc4LDIyIEBAIFN0cmluZyBTdHJ1Y3R1cmVTaGFwZTo6dG9KU09OU3Ry
aW5nKCkgY28KICAgICBqc29uLmFwcGVuZCgiXSIpOwogICAgIGpzb24uYXBwZW5kKCIsIik7CiAK
KyAgICBqc29uLmFwcGVuZCgiXCJvcHRpb25hbEZpZWxkc1wiOiIpOworICAgIGpzb24uYXBwZW5k
KCJbIik7CisgICAgaGFzQW5JdGVtID0gZmFsc2U7CisgICAgZm9yIChhdXRvIGl0ID0gbV9vcHRp
b25hbEZpZWxkcy5iZWdpbigpLCBlbmQgPSBtX29wdGlvbmFsRmllbGRzLmVuZCgpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKGhhc0FuSXRlbSkKKyAgICAgICAgICAgIGpzb24uYXBw
ZW5kKCIsIik7CisgICAgICAgIGhhc0FuSXRlbSA9IHRydWU7CisKKyAgICAgICAgU3RyaW5nIGZp
ZWxkTmFtZSgoKml0KS5nZXQoKSk7CisgICAgICAgIGpzb24uYXBwZW5kKCJcIiIpOworICAgICAg
ICBqc29uLmFwcGVuZChmaWVsZE5hbWUpOworICAgICAgICBqc29uLmFwcGVuZCgiXCIiKTsKKyAg
ICB9CisgICAganNvbi5hcHBlbmQoIl0iKTsKKyAgICBqc29uLmFwcGVuZCgiLCIpOworCiAgICAg
anNvbi5hcHBlbmQoIlwicHJvdG9cIjoiKTsKICAgICBpZiAobV9wcm90bykKICAgICAgICAganNv
bi5hcHBlbmQobV9wcm90by0+dG9KU09OU3RyaW5nKCkpOwpAQCAtNDg3LDggKzUxMywxMCBAQCBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6CiAKICAgICB3aGlsZSAoY3Vy
cmVudFNoYXBlKSB7CiAgICAgICAgIGF1dG8gZmllbGRzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7Ci0gICAgICAgIGZvciAoYXV0byBpdCA9IGN1cnJlbnRT
aGFwZS0+bV9maWVsZHMuYmVnaW4oKSwgZW5kID0gY3VycmVudFNoYXBlLT5tX2ZpZWxkcy5lbmQo
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgZmllbGRzLT5hZGRJdGVtKCgqaXQpLmdl
dCgpKTsKKyAgICAgICAgZm9yIChhdXRvIGZpZWxkIDogY3VycmVudFNoYXBlLT5tX2ZpZWxkcykK
KyAgICAgICAgICAgIGZpZWxkcy0+YWRkSXRlbShmaWVsZC5nZXQoKSk7CisgICAgICAgIGZvciAo
YXV0byBmaWVsZCA6IGN1cnJlbnRTaGFwZS0+bV9vcHRpb25hbEZpZWxkcykKKyAgICAgICAgICAg
IGZpZWxkcy0+YWRkSXRlbShmaWVsZC5nZXQoKSArIFN0cmluZygiPyIpKTsKIAogICAgICAgICBj
dXJyZW50T2JqZWN0LT5zZXRGaWVsZHMoZmllbGRzKTsKICAgICAgICAgY3VycmVudE9iamVjdC0+
c2V0Q29uc3RydWN0b3JOYW1lKGN1cnJlbnRTaGFwZS0+bV9jb25zdHJ1Y3Rvck5hbWUpOwpAQCAt
NTA1LDQgKzUzMyw1NyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
CiAgICAgcmV0dXJuIGJhc2UucmVsZWFzZSgpOwogfQogCitib29sIFN0cnVjdHVyZVNoYXBlOjpo
YXNTYW1lUHJvdG90eXBlQ2hhaW4oUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gcHJwT3RoZXIp
Cit7CisgICAgUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBzZWxmID0gdGhpczsKKyAgICBSZWZQdHI8
U3RydWN0dXJlU2hhcGU+IG90aGVyID0gcHJwT3RoZXI7CisgICAgd2hpbGUgKHNlbGYgJiYgb3Ro
ZXIpIHsKKyAgICAgICAgaWYgKHNlbGYtPm1fY29uc3RydWN0b3JOYW1lICE9IG90aGVyLT5tX2Nv
bnN0cnVjdG9yTmFtZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc2VsZiA9
IHNlbGYtPm1fcHJvdG87CisgICAgICAgIG90aGVyID0gb3RoZXItPm1fcHJvdG87CisgICAgfQor
CisgICAgcmV0dXJuICFzZWxmICYmICFvdGhlcjsKK30KKworUGFzc1JlZlB0cjxTdHJ1Y3R1cmVT
aGFwZT4gU3RydWN0dXJlU2hhcGU6Om1lcmdlKGNvbnN0IFBhc3NSZWZQdHI8U3RydWN0dXJlU2hh
cGU+IHBycEEsIGNvbnN0IFBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHBycEIpCit7CisgICAg
UmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBhID0gcHJwQTsKKyAgICBSZWZQdHI8U3RydWN0dXJlU2hh
cGU+IGIgPSBwcnBCOworICAgIEFTU0VSVChhLT5oYXNTYW1lUHJvdG90eXBlQ2hhaW4oYikpOwor
CisgICAgUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBtZXJnZWQgPSBTdHJ1Y3R1cmVTaGFwZTo6Y3Jl
YXRlKCk7CisgICAgZm9yIChhdXRvIGZpZWxkIDogYS0+bV9maWVsZHMpIHsKKyAgICAgICAgaWYg
KGItPm1fZmllbGRzLmNvbnRhaW5zKGZpZWxkKSkKKyAgICAgICAgICAgIG1lcmdlZC0+bV9maWVs
ZHMuYWRkKGZpZWxkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWVyZ2VkLT5tX29wdGlv
bmFsRmllbGRzLmFkZChmaWVsZCk7CisgICAgfQorCisgICAgZm9yIChhdXRvIGZpZWxkIDogYi0+
bV9maWVsZHMpIHsKKyAgICAgICAgaWYgKCFtZXJnZWQtPm1fZmllbGRzLmNvbnRhaW5zKGZpZWxk
KSkgeworICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtZXJnZWQtPm1fb3B0aW9uYWxGaWVs
ZHMuYWRkKGZpZWxkKTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRS
ZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGF1dG8gZmll
bGQgOiBhLT5tX29wdGlvbmFsRmllbGRzKQorICAgICAgICBtZXJnZWQtPm1fb3B0aW9uYWxGaWVs
ZHMuYWRkKGZpZWxkKTsKKyAgICBmb3IgKGF1dG8gZmllbGQgOiBiLT5tX29wdGlvbmFsRmllbGRz
KQorICAgICAgICBtZXJnZWQtPm1fb3B0aW9uYWxGaWVsZHMuYWRkKGZpZWxkKTsKKworICAgIEFT
U0VSVChhLT5tX2NvbnN0cnVjdG9yTmFtZSA9PSBiLT5tX2NvbnN0cnVjdG9yTmFtZSk7CisgICAg
bWVyZ2VkLT5zZXRDb25zdHJ1Y3Rvck5hbWUoYS0+bV9jb25zdHJ1Y3Rvck5hbWUpOworCisgICAg
aWYgKGEtPm1fcHJvdG8pIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYi0+bV9wcm90byk7Cisg
ICAgICAgIG1lcmdlZC0+c2V0UHJvdG8oU3RydWN0dXJlU2hhcGU6Om1lcmdlKGEtPm1fcHJvdG8s
IGItPm1fcHJvdG8pKTsKKyAgICB9CisKKyAgICBtZXJnZWQtPm1hcmtBc0ZpbmFsKCk7CisKKyAg
ICByZXR1cm4gbWVyZ2VkLnJlbGVhc2UoKTsKK30KKwogfSAvL25hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmgJKHJldmlzaW9uIDE3MzMxMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAkod29ya2luZyBjb3B5
KQpAQCAtNzgsOCArNzgsMTEgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHN0YXRpYyBTdHJp
bmcgbGVhc3RDb21tb25BbmNlc3Rvcihjb25zdCBWZWN0b3I8UmVmUHRyPFN0cnVjdHVyZVNoYXBl
Pj4pOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBtZXJnZShjb25zdCBQ
YXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiwgY29uc3QgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFw
ZT4pOworICAgIGJvb2wgaGFzU2FtZVByb3RvdHlwZUNoYWluKFBhc3NSZWZQdHI8U3RydWN0dXJl
U2hhcGU+KTsKIAotICAgIFZlY3RvcjxSZWZQdHI8U3RyaW5nSW1wbD4+IG1fZmllbGRzOworICAg
IEhhc2hTZXQ8UmVmUHRyPFN0cmluZ0ltcGw+PiBtX2ZpZWxkczsKKyAgICBIYXNoU2V0PFJlZlB0
cjxTdHJpbmdJbXBsPj4gbV9vcHRpb25hbEZpZWxkczsKICAgICBSZWZQdHI8U3RydWN0dXJlU2hh
cGU+IG1fcHJvdG87CiAgICAgc3RkOjp1bmlxdWVfcHRyPFN0cmluZz4gbV9wcm9wZXJ0eUhhc2g7
CiAgICAgU3RyaW5nIG1fY29uc3RydWN0b3JOYW1lOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3R5cGVQcm9maWxlci9vcHRpb25hbC1maWVsZHMuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3R5cGVQcm9maWxlci9vcHRpb25hbC1maWVsZHMu
anMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvdHlwZVByb2Zp
bGVyL29wdGlvbmFsLWZpZWxkcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACits
b2FkKCIuL2RyaXZlci9kcml2ZXIuanMiKTsKKwordmFyIGZ1bmM7CitmdW5jdGlvbiB3cmFwcGVy
KCkgeworCitmdW5jID0gZnVuY3Rpb24oYXJnKXt9OworCit9Cit3cmFwcGVyKCk7CisKKy8vID09
PT09PSBFbmQgdGVzdCBjYXNlcyA9PT09PT0KKwordmFyIG9iaiA9IHt4OjIwLCB5OjUwfTsKKwor
ZnVuYyhvYmopOwordmFyIHR5cGVzID0gZmluZFR5cGVGb3JFeHByZXNzaW9uKHdyYXBwZXIsICJh
cmciKTsgCithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBlU2V0LnN0cnVjdHVyZXMubGVuZ3Ro
ID09PSAxLCAiYXJnIHNob3VsZCBoYXZlIG9uZSBzdHJ1Y3R1cmUiKTsKK2Fzc2VydCh0eXBlcy5p
bnN0cnVjdGlvblR5cGVTZXQuc3RydWN0dXJlc1swXS5maWVsZHMubGVuZ3RoID09PSAyLCAiYXJn
IHNob3VsZCBoYXZlIHR3byBmaWVsZHMiKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVT
ZXQuc3RydWN0dXJlc1swXS5maWVsZHMuaW5kZXhPZigieCIpICE9PSAtMSwgImFyZyBzaG91bGQg
aGF2ZSBmaWVsZDogJ3gnIik7Cithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBlU2V0LnN0cnVj
dHVyZXNbMF0uZmllbGRzLmluZGV4T2YoInkiKSAhPT0gLTEsICJhcmcgc2hvdWxkIGhhdmUgZmll
bGQ6ICd5JyIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVzWzBd
Lm9wdGlvbmFsRmllbGRzLmxlbmd0aCA9PT0gMCwgImFyZyBzaG91bGQgaGF2ZSB6ZXJvIG9wdGlv
bmFsIGZpZWxkcyIpOworCitvYmoueiA9IDQwOworZnVuYyhvYmopOwordHlwZXMgPSBmaW5kVHlw
ZUZvckV4cHJlc3Npb24od3JhcHBlciwgImFyZyIpOyAKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlv
blR5cGVTZXQuc3RydWN0dXJlc1swXS5maWVsZHMubGVuZ3RoID09PSAyLCAiYXJnIHNob3VsZCBz
dGlsbCBoYXZlIHR3byBmaWVsZHMiKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQu
c3RydWN0dXJlc1swXS5maWVsZHMuaW5kZXhPZigieCIpICE9PSAtMSwgImFyZyBzaG91bGQgaGF2
ZSBmaWVsZDogJ3gnIik7Cithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBlU2V0LnN0cnVjdHVy
ZXNbMF0uZmllbGRzLmluZGV4T2YoInkiKSAhPT0gLTEsICJhcmcgc2hvdWxkIGhhdmUgZmllbGQ6
ICd5JyIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVzWzBdLm9w
dGlvbmFsRmllbGRzLmxlbmd0aCA9PT0gMSwgImFyZyBzaG91bGQgaGF2ZSBvbmUgb3B0aW9uYWwg
ZmllbGQiKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuc3RydWN0dXJlc1swXS5v
cHRpb25hbEZpZWxkcy5pbmRleE9mKCJ6IikgIT09IC0xLCAiYXJnIHNob3VsZCBoYXZlIG9wdGlv
bmFsIGZpZWxkOiAneiciKTsKKworb2JqWyJmb28iXSA9ICJ0eXBlIjsKK29ialsiYmF6Il0gPSAi
cHJvZmlsZXIiOworZnVuYyhvYmopOwordHlwZXMgPSBmaW5kVHlwZUZvckV4cHJlc3Npb24od3Jh
cHBlciwgImFyZyIpOyAKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuc3RydWN0dXJl
c1swXS5maWVsZHMubGVuZ3RoID09PSAyLCAiYXJnIHNob3VsZCBzdGlsbCBoYXZlIHR3byBmaWVs
ZHMiKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuc3RydWN0dXJlc1swXS5maWVs
ZHMuaW5kZXhPZigieCIpICE9PSAtMSwgImFyZyBzaG91bGQgaGF2ZSBmaWVsZDogJ3gnIik7Cith
c3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBlU2V0LnN0cnVjdHVyZXNbMF0uZmllbGRzLmluZGV4
T2YoInkiKSAhPT0gLTEsICJhcmcgc2hvdWxkIGhhdmUgZmllbGQ6ICd5JyIpOworYXNzZXJ0KHR5
cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVzWzBdLm9wdGlvbmFsRmllbGRzLmxlbmd0
aCA9PT0gMywgImFyZyBzaG91bGQgaGF2ZSB0aHJlZSBvcHRpb25hbCBmaWVsZCIpOworYXNzZXJ0
KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVzWzBdLm9wdGlvbmFsRmllbGRzLmlu
ZGV4T2YoInoiKSAhPT0gLTEsICJhcmcgc2hvdWxkIGhhdmUgb3B0aW9uYWwgZmllbGQ6ICd6JyIp
OworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVzWzBdLm9wdGlvbmFs
RmllbGRzLmluZGV4T2YoImZvbyIpICE9PSAtMSwgImFyZyBzaG91bGQgaGF2ZSBvcHRpb25hbCBm
aWVsZDogJ2ZvbyciKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuc3RydWN0dXJl
c1swXS5vcHRpb25hbEZpZWxkcy5pbmRleE9mKCJiYXoiKSAhPT0gLTEsICJhcmcgc2hvdWxkIGhh
dmUgb3B0aW9uYWwgZmllbGQ6ICdiYXonIik7CisKK2Z1bmMoe30pOwordHlwZXMgPSBmaW5kVHlw
ZUZvckV4cHJlc3Npb24od3JhcHBlciwgImFyZyIpOyAKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlv
blR5cGVTZXQuc3RydWN0dXJlc1swXS5maWVsZHMubGVuZ3RoID09PSAwLCAiYXJnIHNob3VsZCBo
YXZlIG5vIGNvbW1vbiBmaWVsZHMiKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQu
c3RydWN0dXJlc1swXS5vcHRpb25hbEZpZWxkcy5sZW5ndGggPT09IDUsICJhcmcgc2hvdWxkIGhh
dmUgZml2ZSBvcHRpb25hbCBmaWVsZCIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNl
dC5zdHJ1Y3R1cmVzWzBdLm9wdGlvbmFsRmllbGRzLmluZGV4T2YoIngiKSAhPT0gLTEsICJhcmcg
c2hvdWxkIGhhdmUgb3B0aW9uYWwgZmllbGQ6ICd4JyIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0
aW9uVHlwZVNldC5zdHJ1Y3R1cmVzWzBdLm9wdGlvbmFsRmllbGRzLmluZGV4T2YoInkiKSAhPT0g
LTEsICJhcmcgc2hvdWxkIGhhdmUgb3B0aW9uYWwgZmllbGQ6ICd5JyIpOworYXNzZXJ0KHR5cGVz
Lmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVzWzBdLm9wdGlvbmFsRmllbGRzLmluZGV4T2Yo
InoiKSAhPT0gLTEsICJhcmcgc2hvdWxkIGhhdmUgb3B0aW9uYWwgZmllbGQ6ICd6JyIpOworYXNz
ZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVzWzBdLm9wdGlvbmFsRmllbGRz
LmluZGV4T2YoImZvbyIpICE9PSAtMSwgImFyZyBzaG91bGQgaGF2ZSBvcHRpb25hbCBmaWVsZDog
J2ZvbyciKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuc3RydWN0dXJlc1swXS5v
cHRpb25hbEZpZWxkcy5pbmRleE9mKCJiYXoiKSAhPT0gLTEsICJhcmcgc2hvdWxkIGhhdmUgb3B0
aW9uYWwgZmllbGQ6ICdiYXonIik7Cg==
</data>
<flag name="review"
          id="262430"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>