<?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>27672</bug_id>
          
          <creation_ts>2009-07-24 17:37:55 -0700</creation_ts>
          <short_desc>MASTER: Assert when you forget to adoptRef to make it harder to leak by accident</short_desc>
          <delta_ts>2011-11-02 16:18:53 -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>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</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>
          <dependson>28068</dependson>
    
    <dependson>40760</dependson>
    
    <dependson>41422</dependson>
    
    <dependson>41823</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>abarth</cc>
    
    <cc>darin</cc>
    
    <cc>levin</cc>
    
    <cc>michelangelo</cc>
    
    <cc>mjs</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>134690</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-24 17:37:55 -0700</bug_when>
    <thetext>When you make a RefCounted class, you really ought to have a FooBar::create method that adopts the initial ref for the object otherwise you&apos;re going to leak a lot.  We should make it easier for developers to remember to make these methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134691</commentid>
    <comment_count>1</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-24 17:39:26 -0700</bug_when>
    <thetext>One possibility is to ASSERT that at least one object of the type was destructed if at least one object was constructed.  When you make this mistake, you tend to leak *all* instances of the derived class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134700</commentid>
    <comment_count>2</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-24 18:03:22 -0700</bug_when>
    <thetext> I wonder how many locations violate that pattern.  An alternate way to catch problems is to have adoptRef set a flag in RefCounted&lt;&gt; in debug.  If the first ref count happens before adoptRef is called, then assert.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135035</commentid>
    <comment_count>3</comment_count>
      <attachid>33573</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-27 15:14:04 -0700</bug_when>
    <thetext>Created attachment 33573
Here&apos;s a start at implementing the assert functionality

This patch has lots of issues still, so it isn&apos;t up for review, but I&apos;m putting it here in case someone else want to play with it.

Details: The addition of the adoptRef&apos;s in Nodes.cpp causes a crash on start.  If you change this to call the setAdoptRefCalled, you&apos;ll hit another assert while running WebKit test. (And the method naming leaves much to be desired.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156398</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-20 21:54:17 -0700</bug_when>
    <thetext>We got bit by this twice today.  I&apos;m going to try to make this patch work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156430</commentid>
    <comment_count>5</comment_count>
      <attachid>41554</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-21 00:47:10 -0700</bug_when>
    <thetext>Created attachment 41554
work-in-progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156513</commentid>
    <comment_count>6</comment_count>
      <attachid>41573</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-21 10:13:52 -0700</bug_when>
    <thetext>Created attachment 41573
work-in-progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238140</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-14 16:54:33 -0700</bug_when>
    <thetext>I’ve made a lot of progress on this. I’ll have some good things to land soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243871</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-28 13:36:33 -0700</bug_when>
    <thetext>I have a patch to do this without so much template magic on my other computer. Will attach it soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245530</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-01 13:53:16 -0700</bug_when>
    <thetext>Turned on the assertion for TreeShared in &lt;http://trac.webkit.org/changeset/62291&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251496</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-14 16:08:32 -0700</bug_when>
    <thetext>I think the only remaining work is to turn this on for CrossThreadRefCounted and ThreadSafeShared.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494138</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-01 14:13:50 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; I think the only remaining work is to turn this on for CrossThreadRefCounted and ThreadSafeShared.

CrossThreadRefCounted is gone.

So the only remaining work is to turn this on for ThreadSafeShared.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494139</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-01 14:14:10 -0700</bug_when>
    <thetext>Which is now named ThreadSafeRefCounted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495016</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-02 16:18:53 -0700</bug_when>
    <thetext>I’m closing this. ThreadSafeRefCounted is hardly used at all so no need to wait on it.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33573</attachid>
            <date>2009-07-27 15:14:04 -0700</date>
            <delta_ts>2009-10-21 00:47:03 -0700</delta_ts>
            <desc>Here&apos;s a start at implementing the assert functionality</desc>
            <filename>bug27672.txt</filename>
            <type>text/plain</type>
            <size>9630</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAgYi9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvTm9kZXMuY3BwCmluZGV4IDZjMGQxYWYuLjJhNzFkMzIgMTAwNjQ0Ci0tLSBh
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL05vZGVzLmNwcApAQCAtMTg2NCw3ICsxODY0LDcgQEAgaW5saW5lIFByb2dyYW1Ob2RlOjpQ
cm9ncmFtTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFNvdXJjZUVsZW1lbnRzKiBjaGls
ZHIKIAogUGFzc1JlZlB0cjxQcm9ncmFtTm9kZT4gUHJvZ3JhbU5vZGU6OmNyZWF0ZShKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZh
clN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQogewotICAgIFJlZlB0
cjxQcm9ncmFtTm9kZT4gbm9kZSA9IG5ldyBQcm9ncmFtTm9kZShnbG9iYWxEYXRhLCBjaGlsZHJl
biwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgc291cmNlLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKTsK
KyAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IG5vZGUgPSBhZG9wdFJlZihuZXcgUHJvZ3JhbU5vZGUo
Z2xvYmFsRGF0YSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIHNvdXJjZSwgZmVhdHVy
ZXMsIG51bUNvbnN0YW50cykpOwogCiAgICAgQVNTRVJUKG5vZGUtPmRhdGEoKS0+bV9hcmVuYS5s
YXN0KCkgPT0gbm9kZSk7CiAgICAgbm9kZS0+ZGF0YSgpLT5tX2FyZW5hLnJlbW92ZUxhc3QoKTsK
QEAgLTE5MTksNyArMTkxOSw3IEBAIGlubGluZSBFdmFsTm9kZTo6RXZhbE5vZGUoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhCiAKIFBhc3NSZWZQ
dHI8RXZhbE5vZGU+IEV2YWxOb2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBT
b3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFj
ayogZnVuY1N0YWNrLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0
dXJlcywgaW50IG51bUNvbnN0YW50cykKIHsKLSAgICBSZWZQdHI8RXZhbE5vZGU+IG5vZGUgPSBu
ZXcgRXZhbE5vZGUoZ2xvYmFsRGF0YSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIHNv
dXJjZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50cyk7CisgICAgUmVmUHRyPEV2YWxOb2RlPiBub2Rl
ID0gYWRvcHRSZWYobmV3IEV2YWxOb2RlKGdsb2JhbERhdGEsIGNoaWxkcmVuLCB2YXJTdGFjaywg
ZnVuY1N0YWNrLCBzb3VyY2UsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpKTsKIAogICAgIEFTU0VS
VChub2RlLT5kYXRhKCktPm1fYXJlbmEubGFzdCgpID09IG5vZGUpOwogICAgIG5vZGUtPmRhdGEo
KS0+bV9hcmVuYS5yZW1vdmVMYXN0KCk7CkBAIC0yMDM5LDEwICsyMDM5LDExIEBAIHZvaWQgRnVu
Y3Rpb25Cb2R5Tm9kZTo6bWFyaygpCiAjaWYgRU5BQkxFKEpJVCkKIFBhc3NSZWZQdHI8RnVuY3Rp
b25Cb2R5Tm9kZT4gRnVuY3Rpb25Cb2R5Tm9kZTo6Y3JlYXRlTmF0aXZlVGh1bmsoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhKQogewotICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBib2R5ID0g
bmV3IEZ1bmN0aW9uQm9keU5vZGUoZ2xvYmFsRGF0YSk7CisgICAgUmVmUHRyPEZ1bmN0aW9uQm9k
eU5vZGU+IGJvZHkgPSBhZG9wdFJlZihuZXcgRnVuY3Rpb25Cb2R5Tm9kZShnbG9iYWxEYXRhKSk7
CiAgICAgZ2xvYmFsRGF0YS0+cGFyc2VyLT5hcmVuYSgpLnJlc2V0KCk7CiAgICAgYm9keS0+bV9j
b2RlLnNldChuZXcgQ29kZUJsb2NrKGJvZHkuZ2V0KCkpKTsKICAgICBib2R5LT5tX2ppdENvZGUg
PSBKSVRDb2RlKEpJVENvZGU6Okhvc3RGdW5jdGlvbihnbG9iYWxEYXRhLT5qaXRTdHVicy5jdGlO
YXRpdmVDYWxsVGh1bmsoKSkpOworCiAgICAgcmV0dXJuIGJvZHkucmVsZWFzZSgpOwogfQogI2Vu
ZGlmCkBAIC0yMDU5LDcgKzIwNjAsNyBAQCBGdW5jdGlvbkJvZHlOb2RlKiBGdW5jdGlvbkJvZHlO
b2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogCiBQYXNzUmVmUHRyPEZ1bmN0
aW9uQm9keU5vZGU+IEZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5j
dGlvblN0YWNrKiBmdW5jU3RhY2ssIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIENvZGVG
ZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKIHsKLSAgICBSZWZQdHI8RnVuY3Rp
b25Cb2R5Tm9kZT4gbm9kZSA9IG5ldyBGdW5jdGlvbkJvZHlOb2RlKGdsb2JhbERhdGEsIGNoaWxk
cmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBzb3VyY2VDb2RlLCBmZWF0dXJlcywgbnVtQ29uc3Rh
bnRzKTsKKyAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gbm9kZSA9IGFkb3B0UmVmKG5ldyBG
dW5jdGlvbkJvZHlOb2RlKGdsb2JhbERhdGEsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNr
LCBzb3VyY2VDb2RlLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKSk7CiAKICAgICBBU1NFUlQobm9k
ZS0+ZGF0YSgpLT5tX2FyZW5hLmxhc3QoKSA9PSBub2RlKTsKICAgICBub2RlLT5kYXRhKCktPm1f
YXJlbmEucmVtb3ZlTGFzdCgpOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL1Bhc3NS
ZWZQdHIuaCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXNzUmVmUHRyLmgKaW5kZXggZDgwZWQ2Mi4u
NDQzMjVjMSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvd3RmL1Bhc3NSZWZQdHIuaAorKysg
Yi9KYXZhU2NyaXB0Q29yZS93dGYvUGFzc1JlZlB0ci5oCkBAIC0yMiw2ICsyMiw4IEBACiAjZGVm
aW5lIFdURl9QYXNzUmVmUHRyX2gKIAogI2luY2x1ZGUgIkFsd2F5c0lubGluZS5oIgorI2luY2x1
ZGUgIlJlZkNvdW50ZWQuaCIKKyNpbmNsdWRlICJUeXBlVHJhaXRzLmgiCiAKIG5hbWVzcGFjZSBX
VEYgewogCkBAIC0xNjUsOCArMTY3LDIxIEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICByZXR1
cm4gYSAhPSBiLmdldCgpOyAKICAgICB9CiAgICAgCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQs
IGJvb2wgaXNSZWZDb3VudGVkRGVyaXZlZD4gc3RydWN0IEFkb3B0UmVmVHJhaXRzOworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgQWRvcHRSZWZUcmFpdHM8VCwgdHJ1ZT4geworICAg
ICAgICBzdGF0aWMgdm9pZCBzZXRBZG9wdFJlZkNhbGxlZChUKiBwKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAocCkgcC0+c2V0QWRvcHRSZWZDYWxsZWQoKTsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IEFkb3B0UmVmVHJhaXRzPFQsIGZh
bHNlPiB7CisgICAgICAgIHN0YXRpYyB2b2lkIHNldEFkb3B0UmVmQ2FsbGVkKFQqKSB7IH0KKyAg
ICB9OworCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBQYXNzUmVmUHRyPFQ+IGFk
b3B0UmVmKFQqIHApCiAgICAgeworICAgICAgICBBZG9wdFJlZlRyYWl0czxULCBJc1N1YmNsYXNz
PFQsIFJlZkNvdW50ZWRCYXNlPjo6dmFsdWU+OjpzZXRBZG9wdFJlZkNhbGxlZChwKTsKICAgICAg
ICAgcmV0dXJuIFBhc3NSZWZQdHI8VD4ocCwgdHJ1ZSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS93dGYvUmVmQ291bnRlZC5oIGIvSmF2YVNjcmlwdENvcmUvd3RmL1JlZkNv
dW50ZWQuaAppbmRleCA3NjFhODU2Li45MGY1YWVhIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS93dGYvUmVmQ291bnRlZC5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWZDb3VudGVkLmgK
QEAgLTM0LDYgKzM0LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVmKCkKICAgICB7CiAgICAgICAg
IEFTU0VSVCghbV9kZWxldGlvbkhhc0JlZ3VuKTsKKyAgICAgICAgQVNTRVJUKG1fYWRvcHRSZWZX
YXNDYWxsZWQpOwogICAgICAgICArK21fcmVmQ291bnQ7CiAgICAgfQogCkBAIC00OCwxNyArNDks
MjYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9yZWZDb3VudDsKICAgICB9CiAKKyAgICB2
b2lkIHNldEFkb3B0UmVmQ2FsbGVkKCkKKyAgICB7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBt
X2Fkb3B0UmVmV2FzQ2FsbGVkID0gdHJ1ZTsKKyNlbmRpZgorICAgIH0KKwogcHJvdGVjdGVkOgog
ICAgIFJlZkNvdW50ZWRCYXNlKCkKICAgICAgICAgOiBtX3JlZkNvdW50KDEpCiAjaWZuZGVmIE5E
RUJVRwogICAgICAgICAsIG1fZGVsZXRpb25IYXNCZWd1bihmYWxzZSkKKyAgICAgICAgLCBtX2Fk
b3B0UmVmV2FzQ2FsbGVkKGZhbHNlKQogI2VuZGlmCiAgICAgewogICAgIH0KIAogICAgIH5SZWZD
b3VudGVkQmFzZSgpCiAgICAgeworICAgICAgICBBU1NFUlQobV9hZG9wdFJlZldhc0NhbGxlZCk7
CiAgICAgfQogCiAgICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBwb2ludGVyIHNob3VsZCBiZSBm
cmVlZCBvciBub3QuCkBAIC05Nyw2ICsxMDcsNyBAQCBwcml2YXRlOgogICAgIGludCBtX3JlZkNv
dW50OwogI2lmbmRlZiBOREVCVUcKICAgICBib29sIG1fZGVsZXRpb25IYXNCZWd1bjsKKyAgICBi
b29sIG1fYWRvcHRSZWZXYXNDYWxsZWQ7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL3d0Zi9UeXBlVHJhaXRzLmNwcCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9UeXBlVHJh
aXRzLmNwcAppbmRleCAzNmZjNmM2Li41Mzc5NDVmIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS93dGYvVHlwZVRyYWl0cy5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL1R5cGVUcmFpdHMu
Y3BwCkBAIC0xMTcsNCArMTE3LDE2IEBAIENPTVBJTEVfQVNTRVJUKChJc1NhbWVUeXBlPGludCwg
UmVtb3ZlUG9pbnRlcjxpbnQ+OjpUeXBlPjo6dmFsdWUpLCBXVEZfVGVzdF9SZW1vCiBDT01QSUxF
X0FTU0VSVCgoSXNTYW1lVHlwZTxpbnQsIFJlbW92ZVBvaW50ZXI8aW50Kj46OlR5cGU+Ojp2YWx1
ZSksIFdURl9UZXN0X1JlbW92ZVBvaW50ZXJfaW50X3BvaW50ZXIpOwogQ09NUElMRV9BU1NFUlQo
KCFJc1NhbWVUeXBlPGludCwgUmVtb3ZlUG9pbnRlcjxpbnQqKj46OlR5cGU+Ojp2YWx1ZSksIFdU
Rl9UZXN0X1JlbW92ZVBvaW50ZXJfaW50X3BvaW50ZXJfcG9pbnRlcik7CiAKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPgorY2xhc3MgVGVzdEJhc2VDbGFzcyB7Cit9OworCitjbGFzcyBUZXN0RGVyaXZl
ZENsYXNzIDogcHVibGljIFRlc3RCYXNlQ2xhc3M8aW50PiB7Cit9OworCitDT01QSUxFX0FTU0VS
VCgoSXNTdWJjbGFzczxUZXN0RGVyaXZlZENsYXNzLCBUZXN0QmFzZUNsYXNzPGludD4gPjo6dmFs
dWUpLCBXVEZfVGVzdF9Jc1N1YmNsYXNzX0Rlcml2ZWRfRnJvbV9CYXNlKTsKK0NPTVBJTEVfQVNT
RVJUKCghSXNTdWJjbGFzczxUZXN0QmFzZUNsYXNzPGludD4sIFRlc3REZXJpdmVkQ2xhc3M+Ojp2
YWx1ZSksIFdURl9UZXN0X0lzU3ViY2xhc3NfQmFzZV9Gcm9tX0Rlcml2ZWQpOworQ09NUElMRV9B
U1NFUlQoKElzU3ViY2xhc3NPZlRlbXBsYXRlPFRlc3REZXJpdmVkQ2xhc3MsIFRlc3RCYXNlQ2xh
c3M+Ojp2YWx1ZSksIFdURl9UZXN0X0lzU3ViY2xhc3NPZlRlbXBsYXRlX0Jhc2VfRnJvbV9EZXJp
dmVkKTsKKworCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3Jl
L3d0Zi9UeXBlVHJhaXRzLmggYi9KYXZhU2NyaXB0Q29yZS93dGYvVHlwZVRyYWl0cy5oCmluZGV4
IDZjZTZhM2UuLjI1YjMzODQgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9UeXBlVHJh
aXRzLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL1R5cGVUcmFpdHMuaApAQCAtOTYsNiArOTYs
NyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBJ
c0ludGVnZXI8VD46OnZhbHVlIHx8IElzQ29udmVydGlibGVUb0RvdWJsZTwhSXNJbnRlZ2VyPFQ+
Ojp2YWx1ZSwgVD46OnZhbHVlOwogICAgIH07CiAKKwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBzdHJ1Y3QgSXNTYW1lVHlwZSB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIHZhbHVlID0gZmFsc2U7CiAgICAgfTsKQEAgLTEwNCw2ICsxMDUsMzMgQEAgbmFtZXNwYWNl
IFdURiB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsKICAgICB9Owog
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGNsYXNzIElzU3ViY2xhc3Mg
eworICAgICAgICB0eXBlZGVmIGNoYXIgWWVzVHlwZTsKKyAgICAgICAgc3RydWN0IE5vVHlwZSB7
CisgICAgICAgICAgICBjaGFyIHBhZGRpbmdbOF07CisgICAgICAgIH07CisKKyAgICAgICAgc3Rh
dGljIFllc1R5cGUgc3ViY2xhc3NDaGVjayhVKik7CisgICAgICAgIHN0YXRpYyBOb1R5cGUgc3Vi
Y2xhc3NDaGVjayguLi4pOworICAgICAgICBzdGF0aWMgVCogdDsKKyAgICBwdWJsaWM6CisgICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gc2l6ZW9mKHN1YmNsYXNzQ2hlY2sodCkpID09
IHNpemVvZihZZXNUeXBlKTsKKyAgICB9OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHRl
bXBsYXRlPGNsYXNzIFY+IGNsYXNzIFU+IGNsYXNzIElzU3ViY2xhc3NPZlRlbXBsYXRlIHsKKyAg
ICAgICAgdHlwZWRlZiBjaGFyIFllc1R5cGU7CisgICAgICAgIHN0cnVjdCBOb1R5cGUgeworICAg
ICAgICAgICAgY2hhciBwYWRkaW5nWzhdOworICAgICAgICB9OworCisgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFc+CisgICAgICAgIHN0YXRpYyBZZXNUeXBlIHN1YmNsYXNzQ2hlY2soVTxXPiop
OworICAgICAgICBzdGF0aWMgTm9UeXBlIHN1YmNsYXNzQ2hlY2soLi4uKTsKKyAgICAgICAgc3Rh
dGljIFQqIHQ7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9
IHNpemVvZihzdWJjbGFzc0NoZWNrKHQpKSA9PSBzaXplb2YoWWVzVHlwZSk7CisgICAgfTsKKwog
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgUmVtb3ZlQ29uc3QgewogICAgICAgICB0
eXBlZGVmIFQgVHlwZTsKICAgICB9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTSW5pdGlh
bFZhbHVlLmggYi9XZWJDb3JlL2Nzcy9DU1NJbml0aWFsVmFsdWUuaAppbmRleCA5NmJjMmE1Li40
ZDIwM2Y1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NJbml0aWFsVmFsdWUuaAorKysgYi9X
ZWJDb3JlL2Nzcy9DU1NJbml0aWFsVmFsdWUuaApAQCAtMzEsMTEgKzMxLDEzIEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NJbml0aWFsVmFsdWU+IGNyZWF0ZUV4cGxpY2l0KCkK
ICAgICB7CiAgICAgICAgIHN0YXRpYyBDU1NJbml0aWFsVmFsdWUqIGV4cGxpY2l0VmFsdWUgPSBu
ZXcgQ1NTSW5pdGlhbFZhbHVlKGZhbHNlKTsKKyAgICAgICAgZXhwbGljaXRWYWx1ZS0+c2V0QWRv
cHRSZWZDYWxsZWQoKTsKICAgICAgICAgcmV0dXJuIGV4cGxpY2l0VmFsdWU7CiAgICAgfQogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPENTU0luaXRpYWxWYWx1ZT4gY3JlYXRlSW1wbGljaXQoKQogICAg
IHsKICAgICAgICAgc3RhdGljIENTU0luaXRpYWxWYWx1ZSogZXhwbGljaXRWYWx1ZSA9IG5ldyBD
U1NJbml0aWFsVmFsdWUodHJ1ZSk7CisgICAgICAgIGV4cGxpY2l0VmFsdWUtPnNldEFkb3B0UmVm
Q2FsbGVkKCk7CiAgICAgICAgIHJldHVybiBleHBsaWNpdFZhbHVlOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5k
ZXggODcwYmQyYS4uNGUzOTBlYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAor
KysgYi9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC0xMzksNiArMTM5LDcgQEAgRnJhbWU6OkZy
YW1lKFBhZ2UqIHBhZ2UsIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCBGcmFt
ZUxvYWRlckNsaWVudCoKICAgICAsIG1fdXNlclN0eWxlU2hlZXRMb2FkZXIoMCkKICNlbmRpZgog
eworICAgIHRoaXMtPnNldEFkb3B0UmVmQ2FsbGVkKCk7CiAgICAgRnJhbWUqIHBhcmVudCA9IHBh
cmVudEZyb21Pd25lckVsZW1lbnQob3duZXJFbGVtZW50KTsKICAgICBtX3pvb21GYWN0b3IgPSBw
YXJlbnQgPyBwYXJlbnQtPm1fem9vbUZhY3RvciA6IDEuMGY7CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL1RocmVh
ZEdsb2JhbERhdGEuY3BwCmluZGV4IGE0M2U5YmQuLjA1ZmM4NTggMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9U
aHJlYWRHbG9iYWxEYXRhLmNwcApAQCAtODIsNiArODIsNyBAQCBUaHJlYWRHbG9iYWxEYXRhOjpU
aHJlYWRHbG9iYWxEYXRhKCkKICAgICAsIG1fY2FjaGVkQ29udmVydGVyVEVDKG5ldyBURUNDb252
ZXJ0ZXJXcmFwcGVyKQogI2VuZGlmCiB7CisgICAgbV9lbXB0eVN0cmluZy0+c2V0QWRvcHRSZWZD
YWxsZWQoKTsKIH0KIAogVGhyZWFkR2xvYmFsRGF0YTo6flRocmVhZEdsb2JhbERhdGEoKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0gYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCAwMWI5N2Q2Li44ZmRlYmY5IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQpAQCAtMTA2LDYgKzEwNiw3IEBAIGVudW0gewogUGFz
c1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZShQYWdlKikKIHsK
ICAgICBzdGF0aWMgUmVuZGVyVGhlbWUqIHJ0ID0gUmVuZGVyVGhlbWVNYWM6OmNyZWF0ZSgpLnJl
bGVhc2VSZWYoKTsKKyAgICBydC0+c2V0QWRvcHRSZWZDYWxsZWQoKTsKICAgICByZXR1cm4gcnQ7
CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR1BhaW50LmNwcCBiL1dlYkNvcmUvc3Zn
L1NWR1BhaW50LmNwcAppbmRleCA0NWFiZTY5Li41YWU3ZTUzIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3N2Zy9TVkdQYWludC5jcHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZHUGFpbnQuY3BwCkBAIC02OSwx
MiArNjksMTQgQEAgU1ZHUGFpbnQ6On5TVkdQYWludCgpCiBTVkdQYWludCogU1ZHUGFpbnQ6OmRl
ZmF1bHRGaWxsKCkKIHsKICAgICBzdGF0aWMgU1ZHUGFpbnQqIF9kZWZhdWx0RmlsbCA9IG5ldyBT
VkdQYWludChDb2xvcjo6YmxhY2spOworICAgIF9kZWZhdWx0RmlsbC0+c2V0QWRvcHRSZWZDYWxs
ZWQoKTsKICAgICByZXR1cm4gX2RlZmF1bHRGaWxsOwogfQogCiBTVkdQYWludCogU1ZHUGFpbnQ6
OmRlZmF1bHRTdHJva2UoKQogewogICAgIHN0YXRpYyBTVkdQYWludCogX2RlZmF1bHRTdHJva2Ug
PSBuZXcgU1ZHUGFpbnQoU1ZHX1BBSU5UVFlQRV9OT05FKTsKKyAgICBfZGVmYXVsdFN0cm9rZS0+
c2V0QWRvcHRSZWZDYWxsZWQoKTsKICAgICByZXR1cm4gX2RlZmF1bHRTdHJva2U7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41554</attachid>
            <date>2009-10-21 00:47:10 -0700</date>
            <delta_ts>2009-10-21 10:13:44 -0700</delta_ts>
            <desc>work-in-progress</desc>
            <filename>bug-27672-20091021004709.patch</filename>
            <type>text/plain</type>
            <size>10919</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAgYi9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvTm9kZXMuY3BwCmluZGV4IGIxZTMxN2UuLmMzYTM0ZDEgMTAwNjQ0Ci0tLSBh
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL05vZGVzLmNwcApAQCAtMTkxOSw3ICsxOTE5LDcgQEAgaW5saW5lIFByb2dyYW1Ob2RlOjpQ
cm9ncmFtTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFNvdXJjZUVsZW1lbnRzKiBjaGls
ZHIKIAogUGFzc1JlZlB0cjxQcm9ncmFtTm9kZT4gUHJvZ3JhbU5vZGU6OmNyZWF0ZShKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZh
clN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQogewotICAgIFJlZlB0
cjxQcm9ncmFtTm9kZT4gbm9kZSA9IG5ldyBQcm9ncmFtTm9kZShnbG9iYWxEYXRhLCBjaGlsZHJl
biwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgc291cmNlLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKTsK
KyAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IG5vZGUgPSBkb250QWRvcHRSZWYobmV3IFByb2dyYW1O
b2RlKGdsb2JhbERhdGEsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBzb3VyY2UsIGZl
YXR1cmVzLCBudW1Db25zdGFudHMpKTsKIAogICAgIEFTU0VSVChub2RlLT5kYXRhKCktPm1fYXJl
bmEubGFzdCgpID09IG5vZGUpOwogICAgIG5vZGUtPmRhdGEoKS0+bV9hcmVuYS5yZW1vdmVMYXN0
KCk7CkBAIC0xOTUwLDcgKzE5NTAsNyBAQCBpbmxpbmUgRXZhbE5vZGU6OkV2YWxOb2RlKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYQogCiBQYXNz
UmVmUHRyPEV2YWxOb2RlPiBFdmFsTm9kZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9u
U3RhY2sqIGZ1bmNTdGFjaywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMg
ZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCiB7Ci0gICAgUmVmUHRyPEV2YWxOb2RlPiBub2Rl
ID0gbmV3IEV2YWxOb2RlKGdsb2JhbERhdGEsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNr
LCBzb3VyY2UsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpOworICAgIFJlZlB0cjxFdmFsTm9kZT4g
bm9kZSA9IGRvbnRBZG9wdFJlZihuZXcgRXZhbE5vZGUoZ2xvYmFsRGF0YSwgY2hpbGRyZW4sIHZh
clN0YWNrLCBmdW5jU3RhY2ssIHNvdXJjZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50cykpOwogCiAg
ICAgQVNTRVJUKG5vZGUtPmRhdGEoKS0+bV9hcmVuYS5sYXN0KCkgPT0gbm9kZSk7CiAgICAgbm9k
ZS0+ZGF0YSgpLT5tX2FyZW5hLnJlbW92ZUxhc3QoKTsKQEAgLTIwMDUsMTIgKzIwMDUsMTIgQEAg
dm9pZCBGdW5jdGlvbkJvZHlOb2RlOjpmaW5pc2hQYXJzaW5nKFBhc3NSZWZQdHI8RnVuY3Rpb25Q
YXJhbWV0ZXJzPiBwYXJhbWV0ZXJzLAogCiBGdW5jdGlvbkJvZHlOb2RlKiBGdW5jdGlvbkJvZHlO
b2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIHJldHVybiBuZXcg
RnVuY3Rpb25Cb2R5Tm9kZShnbG9iYWxEYXRhKTsKKyAgICByZXR1cm4gZG9udEFkb3B0UmVmKG5l
dyBGdW5jdGlvbkJvZHlOb2RlKGdsb2JhbERhdGEpKTsKIH0KIAogUGFzc1JlZlB0cjxGdW5jdGlv
bkJvZHlOb2RlPiBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rp
b25TdGFjayogZnVuY1N0YWNrLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBDb2RlRmVh
dHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCiB7Ci0gICAgUmVmUHRyPEZ1bmN0aW9u
Qm9keU5vZGU+IG5vZGUgPSBuZXcgRnVuY3Rpb25Cb2R5Tm9kZShnbG9iYWxEYXRhLCBjaGlsZHJl
biwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgc291cmNlQ29kZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50
cyk7CisgICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IG5vZGUgPSBkb250QWRvcHRSZWYobmV3
IEZ1bmN0aW9uQm9keU5vZGUoZ2xvYmFsRGF0YSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3Rh
Y2ssIHNvdXJjZUNvZGUsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpKTsKIAogICAgIEFTU0VSVChu
b2RlLT5kYXRhKCktPm1fYXJlbmEubGFzdCgpID09IG5vZGUpOwogICAgIG5vZGUtPmRhdGEoKS0+
bV9hcmVuYS5yZW1vdmVMYXN0KCk7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvQ3Jv
c3NUaHJlYWRSZWZDb3VudGVkLmggYi9KYXZhU2NyaXB0Q29yZS93dGYvQ3Jvc3NUaHJlYWRSZWZD
b3VudGVkLmgKaW5kZXggZjY4MmYwZC4uODlhOTRmMiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENv
cmUvd3RmL0Nyb3NzVGhyZWFkUmVmQ291bnRlZC5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9D
cm9zc1RocmVhZFJlZkNvdW50ZWQuaApAQCAtNzgsNiArNzgsOCBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICAgICAgICAgICwgbV90aHJlYWRJZCgwKQogI2VuZGlmCiAgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIFRoZSByZWYgZm9yIG1fcmVmQ291bnRlciBpcyBlZmZlY3RpdmVseSBhZG9wdGVkIGlu
IENyb3NzVGhyZWFkUmVmQ291bnRlZDo6Y3JlYXRlLgorICAgICAgICAgICAgZG9udEFkb3B0UmVm
KCZtX3JlZkNvdW50ZXIpOwogICAgICAgICB9CiAKICAgICAgICAgfkNyb3NzVGhyZWFkUmVmQ291
bnRlZCgpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvUGFzc1JlZlB0ci5oIGIvSmF2
YVNjcmlwdENvcmUvd3RmL1Bhc3NSZWZQdHIuaAppbmRleCAzNmJhNzhlLi4zOTllZDg3IDEwMDY0
NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvUGFzc1JlZlB0ci5oCisrKyBiL0phdmFTY3JpcHRD
b3JlL3d0Zi9QYXNzUmVmUHRyLmgKQEAgLTIyLDEzICsyMiwxOCBAQAogI2RlZmluZSBXVEZfUGFz
c1JlZlB0cl9oCiAKICNpbmNsdWRlICJBbHdheXNJbmxpbmUuaCIKKyNpbmNsdWRlICJSZWZDb3Vu
dGVkLmgiCisjaW5jbHVkZSAiVHlwZVRyYWl0cy5oIgogCiBuYW1lc3BhY2UgV1RGIHsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFJlZlB0cjsKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBjbGFzcyBQYXNzUmVmUHRyOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBQYXNzUmVm
UHRyPFQ+IGFkb3B0UmVmKFQqKTsKLSAgICAKKworICAgIC8vIENhbGwgdGhpcyBmdW5jdGlvbiBp
ZiB5b3UncmUgc3VyZSB5b3UgZG9uJ3QgbmVlZCB0byBjYWxsIGFkb3B0UmVmLgorICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBUPiBUKiBkb250QWRvcHRSZWYoVCopOworCiAgICAgLy8gUmVtb3ZlIGlu
bGluZSBmb3Igd2luc2N3IGNvbXBpbGVyIHRvIHByZXZlbnQgdGhlIGNvbXBpbGVyIGFncmVzc2l2
ZWx5IHJlc29sdmluZyAKICAgICAvLyBUOjpkZXJlZigpLCB3aGljaCB3aWxsIGZhaWwgY29tcGls
aW5nIHdoZW4gUGFzc1JlZlB0cjxUPiBpcyB1c2VkIGFzIGNsYXNzIG1lbWJlciAKICAgICAvLyBv
ciBmdW5jdGlvbiBhcmd1bWVudHMgYmVmb3JlIFQgaXMgZGVmaW5lZC4KQEAgLTIzMSwxMSArMjM2
LDMzIEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICByZXR1cm4gYSAhPSBiLmdldCgpOyAKICAg
ICB9CiAgICAgCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGJvb2wgaXNSZWZDb3VudGVkRGVy
aXZlZD4gc3RydWN0IEFkb3B0UmVmVHJhaXRzOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQWRvcHRSZWZUcmFpdHM8VCwgdHJ1ZT4geworICAgICAgICBzdGF0aWMgdm9pZCBzZXRJ
bml0aWFsUmVmQWRvcHRlZChUKiBwKQorICAgICAgICB7CisjaWZuZGVmIE5ERUJVRworICAgICAg
ICAgICAgaWYgKHApCisgICAgICAgICAgICAgIHAtPnNldEluaXRpYWxSZWZBZG9wdGVkKCk7Cisj
ZW5kaWYKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3Ry
dWN0IEFkb3B0UmVmVHJhaXRzPFQsIGZhbHNlPiB7CisgICAgICAgIHN0YXRpYyB2b2lkIHNldElu
aXRpYWxSZWZBZG9wdGVkKFQqKSB7IH0KKyAgICB9OworCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+IGlubGluZSBQYXNzUmVmUHRyPFQ+IGFkb3B0UmVmKFQqIHApCiAgICAgeworICAgICAgICBB
ZG9wdFJlZlRyYWl0czxULCBJc1N1YmNsYXNzPFQsIFJlZkNvdW50ZWRCYXNlPjo6dmFsdWU+Ojpz
ZXRJbml0aWFsUmVmQWRvcHRlZChwKTsKICAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8VD4ocCwg
dHJ1ZSk7CiAgICAgfQogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBkb250
QWRvcHRSZWYoVCogcCkKKyAgICB7CisgICAgICAgIEFkb3B0UmVmVHJhaXRzPFQsIElzU3ViY2xh
c3M8VCwgUmVmQ291bnRlZEJhc2U+Ojp2YWx1ZT46OnNldEluaXRpYWxSZWZBZG9wdGVkKHApOwor
ICAgICAgICByZXR1cm4gcDsKKyAgICB9CisKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4gaW5saW5lIFBhc3NSZWZQdHI8VD4gc3RhdGljX3BvaW50ZXJfY2FzdChjb25zdCBQ
YXNzUmVmUHRyPFU+JiBwKSAKICAgICB7IAogICAgICAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGlj
X2Nhc3Q8VCo+KHAucmVsZWFzZVJlZigpKSk7IApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
d3RmL1JlZkNvdW50ZWQuaCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWZDb3VudGVkLmgKaW5kZXgg
NzYxYTg1Ni4uYTE5N2UzYyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50
ZWQuaAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvUmVmQ291bnRlZC5oCkBAIC0zNCw2ICszNCw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZigpCiAgICAgewogICAgICAgICBBU1NFUlQoIW1fZGVs
ZXRpb25IYXNCZWd1bik7CisgICAgICAgIEFTU0VSVChtX2luaXRpYWxSZWZBZG9wdGVkKTsKICAg
ICAgICAgKyttX3JlZkNvdW50OwogICAgIH0KIApAQCAtNDgsMTcgKzQ5LDI2IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQ7CiAgICAgfQogCisjaWZuZGVmIE5ERUJVRworICAg
IHZvaWQgc2V0SW5pdGlhbFJlZkFkb3B0ZWQoKQorICAgIHsKKyAgICAgICAgbV9pbml0aWFsUmVm
QWRvcHRlZCA9IHRydWU7CisgICAgfQorI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBSZWZDb3Vu
dGVkQmFzZSgpCiAgICAgICAgIDogbV9yZWZDb3VudCgxKQogI2lmbmRlZiBOREVCVUcKICAgICAg
ICAgLCBtX2RlbGV0aW9uSGFzQmVndW4oZmFsc2UpCisgICAgICAgICwgbV9pbml0aWFsUmVmQWRv
cHRlZChmYWxzZSkKICNlbmRpZgogICAgIHsKICAgICB9CiAKICAgICB+UmVmQ291bnRlZEJhc2Uo
KQogICAgIHsKKyAgICAgICAgQVNTRVJUKG1faW5pdGlhbFJlZkFkb3B0ZWQpOwogICAgIH0KIAog
ICAgIC8vIFJldHVybnMgd2hldGhlciB0aGUgcG9pbnRlciBzaG91bGQgYmUgZnJlZWQgb3Igbm90
LgpAQCAtOTcsNiArMTA3LDcgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9yZWZDb3VudDsKICNpZm5k
ZWYgTkRFQlVHCiAgICAgYm9vbCBtX2RlbGV0aW9uSGFzQmVndW47CisgICAgYm9vbCBtX2luaXRp
YWxSZWZBZG9wdGVkOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93
dGYvVHlwZVRyYWl0cy5jcHAgYi9KYXZhU2NyaXB0Q29yZS93dGYvVHlwZVRyYWl0cy5jcHAKaW5k
ZXggMzZmYzZjNi4uNTM3OTQ1ZiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvd3RmL1R5cGVU
cmFpdHMuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9UeXBlVHJhaXRzLmNwcApAQCAtMTE3
LDQgKzExNywxNiBAQCBDT01QSUxFX0FTU0VSVCgoSXNTYW1lVHlwZTxpbnQsIFJlbW92ZVBvaW50
ZXI8aW50Pjo6VHlwZT46OnZhbHVlKSwgV1RGX1Rlc3RfUmVtbwogQ09NUElMRV9BU1NFUlQoKElz
U2FtZVR5cGU8aW50LCBSZW1vdmVQb2ludGVyPGludCo+OjpUeXBlPjo6dmFsdWUpLCBXVEZfVGVz
dF9SZW1vdmVQb2ludGVyX2ludF9wb2ludGVyKTsKIENPTVBJTEVfQVNTRVJUKCghSXNTYW1lVHlw
ZTxpbnQsIFJlbW92ZVBvaW50ZXI8aW50Kio+OjpUeXBlPjo6dmFsdWUpLCBXVEZfVGVzdF9SZW1v
dmVQb2ludGVyX2ludF9wb2ludGVyX3BvaW50ZXIpOwogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K2NsYXNzIFRlc3RCYXNlQ2xhc3MgeworfTsKKworY2xhc3MgVGVzdERlcml2ZWRDbGFzcyA6IHB1
YmxpYyBUZXN0QmFzZUNsYXNzPGludD4geworfTsKKworQ09NUElMRV9BU1NFUlQoKElzU3ViY2xh
c3M8VGVzdERlcml2ZWRDbGFzcywgVGVzdEJhc2VDbGFzczxpbnQ+ID46OnZhbHVlKSwgV1RGX1Rl
c3RfSXNTdWJjbGFzc19EZXJpdmVkX0Zyb21fQmFzZSk7CitDT01QSUxFX0FTU0VSVCgoIUlzU3Vi
Y2xhc3M8VGVzdEJhc2VDbGFzczxpbnQ+LCBUZXN0RGVyaXZlZENsYXNzPjo6dmFsdWUpLCBXVEZf
VGVzdF9Jc1N1YmNsYXNzX0Jhc2VfRnJvbV9EZXJpdmVkKTsKK0NPTVBJTEVfQVNTRVJUKChJc1N1
YmNsYXNzT2ZUZW1wbGF0ZTxUZXN0RGVyaXZlZENsYXNzLCBUZXN0QmFzZUNsYXNzPjo6dmFsdWUp
LCBXVEZfVGVzdF9Jc1N1YmNsYXNzT2ZUZW1wbGF0ZV9CYXNlX0Zyb21fRGVyaXZlZCk7CisKKwog
fSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvVHlwZVRy
YWl0cy5oIGIvSmF2YVNjcmlwdENvcmUvd3RmL1R5cGVUcmFpdHMuaAppbmRleCA2Y2U2YTNlLi5l
OGMzZDI0IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvVHlwZVRyYWl0cy5oCisrKyBi
L0phdmFTY3JpcHRDb3JlL3d0Zi9UeXBlVHJhaXRzLmgKQEAgLTEwNCw2ICsxMDQsMzMgQEAgbmFt
ZXNwYWNlIFdURiB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsKICAg
ICB9OwogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGNsYXNzIElzU3Vi
Y2xhc3MgeworICAgICAgICB0eXBlZGVmIGNoYXIgWWVzVHlwZTsKKyAgICAgICAgc3RydWN0IE5v
VHlwZSB7CisgICAgICAgICAgICBjaGFyIHBhZGRpbmdbOF07CisgICAgICAgIH07CisKKyAgICAg
ICAgc3RhdGljIFllc1R5cGUgc3ViY2xhc3NDaGVjayhVKik7CisgICAgICAgIHN0YXRpYyBOb1R5
cGUgc3ViY2xhc3NDaGVjayguLi4pOworICAgICAgICBzdGF0aWMgVCogdDsKKyAgICBwdWJsaWM6
CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gc2l6ZW9mKHN1YmNsYXNzQ2hlY2so
dCkpID09IHNpemVvZihZZXNUeXBlKTsKKyAgICB9OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQsIHRlbXBsYXRlPGNsYXNzIFY+IGNsYXNzIFU+IGNsYXNzIElzU3ViY2xhc3NPZlRlbXBsYXRl
IHsKKyAgICAgICAgdHlwZWRlZiBjaGFyIFllc1R5cGU7CisgICAgICAgIHN0cnVjdCBOb1R5cGUg
eworICAgICAgICAgICAgY2hhciBwYWRkaW5nWzhdOworICAgICAgICB9OworCisgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFc+CisgICAgICAgIHN0YXRpYyBZZXNUeXBlIHN1YmNsYXNzQ2hlY2so
VTxXPiopOworICAgICAgICBzdGF0aWMgTm9UeXBlIHN1YmNsYXNzQ2hlY2soLi4uKTsKKyAgICAg
ICAgc3RhdGljIFQqIHQ7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB2
YWx1ZSA9IHNpemVvZihzdWJjbGFzc0NoZWNrKHQpKSA9PSBzaXplb2YoWWVzVHlwZSk7CisgICAg
fTsKKwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgUmVtb3ZlQ29uc3QgewogICAg
ICAgICB0eXBlZGVmIFQgVHlwZTsKICAgICB9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NT
SW5pdGlhbFZhbHVlLmggYi9XZWJDb3JlL2Nzcy9DU1NJbml0aWFsVmFsdWUuaAppbmRleCA5NmJj
MmE1Li4yNjExZjc4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NJbml0aWFsVmFsdWUuaAor
KysgYi9XZWJDb3JlL2Nzcy9DU1NJbml0aWFsVmFsdWUuaApAQCAtMzAsMTIgKzMwLDEyIEBAIGNs
YXNzIENTU0luaXRpYWxWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZSB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q1NTSW5pdGlhbFZhbHVlPiBjcmVhdGVFeHBsaWNpdCgpCiAgICAgewot
ICAgICAgICBzdGF0aWMgQ1NTSW5pdGlhbFZhbHVlKiBleHBsaWNpdFZhbHVlID0gbmV3IENTU0lu
aXRpYWxWYWx1ZShmYWxzZSk7CisgICAgICAgIHN0YXRpYyBDU1NJbml0aWFsVmFsdWUqIGV4cGxp
Y2l0VmFsdWUgPSBkb250QWRvcHRSZWYobmV3IENTU0luaXRpYWxWYWx1ZShmYWxzZSkpOwogICAg
ICAgICByZXR1cm4gZXhwbGljaXRWYWx1ZTsKICAgICB9CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
Q1NTSW5pdGlhbFZhbHVlPiBjcmVhdGVJbXBsaWNpdCgpCiAgICAgewotICAgICAgICBzdGF0aWMg
Q1NTSW5pdGlhbFZhbHVlKiBleHBsaWNpdFZhbHVlID0gbmV3IENTU0luaXRpYWxWYWx1ZSh0cnVl
KTsKKyAgICAgICAgc3RhdGljIENTU0luaXRpYWxWYWx1ZSogZXhwbGljaXRWYWx1ZSA9IGRvbnRB
ZG9wdFJlZihuZXcgQ1NTSW5pdGlhbFZhbHVlKHRydWUpKTsKICAgICAgICAgcmV0dXJuIGV4cGxp
Y2l0VmFsdWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIv
V2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCBmYWI3ZTNmLi4zYzQzOTM2IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAg
LTE0NCw2ICsxNDQsNyBAQCBGcmFtZTo6RnJhbWUoUGFnZSogcGFnZSwgSFRNTEZyYW1lT3duZXJF
bGVtZW50KiBvd25lckVsZW1lbnQsIEZyYW1lTG9hZGVyQ2xpZW50KgogICAgICwgbV9pc0Rpc2Nv
bm5lY3RlZChmYWxzZSkKICAgICAsIG1fZXhjbHVkZUZyb21UZXh0U2VhcmNoKGZhbHNlKQogewor
ICAgIGRvbnRBZG9wdFJlZih0aGlzKTsgIC8vIEZyYW1lIGdldHMgYWRkUmVmZWQgYmVmb3JlIGFk
b3B0aW9uLgogICAgIEZyYW1lKiBwYXJlbnQgPSBwYXJlbnRGcm9tT3duZXJFbGVtZW50KG93bmVy
RWxlbWVudCk7CiAgICAgbV96b29tRmFjdG9yID0gcGFyZW50ID8gcGFyZW50LT5tX3pvb21GYWN0
b3IgOiAxLjBmOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZEdsb2JhbERh
dGEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcAppbmRleCBhNDNl
OWJkLi4zZGUyMDE1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZEdsb2JhbERh
dGEuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5jcHAKQEAgLTY4
LDcgKzY4LDggQEAgVGhyZWFkR2xvYmFsRGF0YSYgdGhyZWFkR2xvYmFsRGF0YSgpCiB9CiAKIFRo
cmVhZEdsb2JhbERhdGE6OlRocmVhZEdsb2JhbERhdGEoKQotICAgIDogbV9lbXB0eVN0cmluZyhu
ZXcgU3RyaW5nSW1wbCkKKyAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGFkb3B0UmVmIGhlcmU/Cisg
ICAgOiBtX2VtcHR5U3RyaW5nKGRvbnRBZG9wdFJlZihuZXcgU3RyaW5nSW1wbCkpCiAgICAgLCBt
X2F0b21pY1N0cmluZ1RhYmxlKG5ldyBIYXNoU2V0PFN0cmluZ0ltcGwqPikKICAgICAsIG1fZXZl
bnROYW1lcyhuZXcgRXZlbnROYW1lcykKICAgICAsIG1fdGhyZWFkVGltZXJzKG5ldyBUaHJlYWRU
aW1lcnMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbSBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCmluZGV4IDAzZTM5YTAuLjJhNDA4
YTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCisrKyBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCkBAIC0xMDYsNyArMTA2LDcgQEAg
ZW51bSB7CiAKIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lOjp0aGVtZUZvclBh
Z2UoUGFnZSopCiB7Ci0gICAgc3RhdGljIFJlbmRlclRoZW1lKiBydCA9IFJlbmRlclRoZW1lTWFj
OjpjcmVhdGUoKS5yZWxlYXNlUmVmKCk7CisgICAgc3RhdGljIFJlbmRlclRoZW1lKiBydCA9IGRv
bnRBZG9wdFJlZihSZW5kZXJUaGVtZU1hYzo6Y3JlYXRlKCkucmVsZWFzZVJlZigpKTsKICAgICBy
ZXR1cm4gcnQ7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR1BhaW50LmNwcCBiL1dl
YkNvcmUvc3ZnL1NWR1BhaW50LmNwcAppbmRleCA0NWFiZTY5Li40Mjk0MmFkIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3N2Zy9TVkdQYWludC5jcHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZHUGFpbnQuY3Bw
CkBAIC02OCwxMyArNjgsMTMgQEAgU1ZHUGFpbnQ6On5TVkdQYWludCgpCiAKIFNWR1BhaW50KiBT
VkdQYWludDo6ZGVmYXVsdEZpbGwoKQogewotICAgIHN0YXRpYyBTVkdQYWludCogX2RlZmF1bHRG
aWxsID0gbmV3IFNWR1BhaW50KENvbG9yOjpibGFjayk7CisgICAgc3RhdGljIFNWR1BhaW50KiBf
ZGVmYXVsdEZpbGwgPSBkb250QWRvcHRSZWYobmV3IFNWR1BhaW50KENvbG9yOjpibGFjaykpOwog
ICAgIHJldHVybiBfZGVmYXVsdEZpbGw7CiB9CiAKIFNWR1BhaW50KiBTVkdQYWludDo6ZGVmYXVs
dFN0cm9rZSgpCiB7Ci0gICAgc3RhdGljIFNWR1BhaW50KiBfZGVmYXVsdFN0cm9rZSA9IG5ldyBT
VkdQYWludChTVkdfUEFJTlRUWVBFX05PTkUpOworICAgIHN0YXRpYyBTVkdQYWludCogX2RlZmF1
bHRTdHJva2UgPSBkb250QWRvcHRSZWYobmV3IFNWR1BhaW50KFNWR19QQUlOVFRZUEVfTk9ORSkp
OwogICAgIHJldHVybiBfZGVmYXVsdFN0cm9rZTsKIH0=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41573</attachid>
            <date>2009-10-21 10:13:52 -0700</date>
            <delta_ts>2010-06-11 15:50:53 -0700</delta_ts>
            <desc>work-in-progress</desc>
            <filename>bug-27672-20091021101351.patch</filename>
            <type>text/plain</type>
            <size>15731</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAgYi9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvTm9kZXMuY3BwCmluZGV4IGIxZTMxN2UuLmMzYTM0ZDEgMTAwNjQ0Ci0tLSBh
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL05vZGVzLmNwcApAQCAtMTkxOSw3ICsxOTE5LDcgQEAgaW5saW5lIFByb2dyYW1Ob2RlOjpQ
cm9ncmFtTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFNvdXJjZUVsZW1lbnRzKiBjaGls
ZHIKIAogUGFzc1JlZlB0cjxQcm9ncmFtTm9kZT4gUHJvZ3JhbU5vZGU6OmNyZWF0ZShKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZh
clN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQogewotICAgIFJlZlB0
cjxQcm9ncmFtTm9kZT4gbm9kZSA9IG5ldyBQcm9ncmFtTm9kZShnbG9iYWxEYXRhLCBjaGlsZHJl
biwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgc291cmNlLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKTsK
KyAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IG5vZGUgPSBkb250QWRvcHRSZWYobmV3IFByb2dyYW1O
b2RlKGdsb2JhbERhdGEsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBzb3VyY2UsIGZl
YXR1cmVzLCBudW1Db25zdGFudHMpKTsKIAogICAgIEFTU0VSVChub2RlLT5kYXRhKCktPm1fYXJl
bmEubGFzdCgpID09IG5vZGUpOwogICAgIG5vZGUtPmRhdGEoKS0+bV9hcmVuYS5yZW1vdmVMYXN0
KCk7CkBAIC0xOTUwLDcgKzE5NTAsNyBAQCBpbmxpbmUgRXZhbE5vZGU6OkV2YWxOb2RlKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYQogCiBQYXNz
UmVmUHRyPEV2YWxOb2RlPiBFdmFsTm9kZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9u
U3RhY2sqIGZ1bmNTdGFjaywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMg
ZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCiB7Ci0gICAgUmVmUHRyPEV2YWxOb2RlPiBub2Rl
ID0gbmV3IEV2YWxOb2RlKGdsb2JhbERhdGEsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNr
LCBzb3VyY2UsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpOworICAgIFJlZlB0cjxFdmFsTm9kZT4g
bm9kZSA9IGRvbnRBZG9wdFJlZihuZXcgRXZhbE5vZGUoZ2xvYmFsRGF0YSwgY2hpbGRyZW4sIHZh
clN0YWNrLCBmdW5jU3RhY2ssIHNvdXJjZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50cykpOwogCiAg
ICAgQVNTRVJUKG5vZGUtPmRhdGEoKS0+bV9hcmVuYS5sYXN0KCkgPT0gbm9kZSk7CiAgICAgbm9k
ZS0+ZGF0YSgpLT5tX2FyZW5hLnJlbW92ZUxhc3QoKTsKQEAgLTIwMDUsMTIgKzIwMDUsMTIgQEAg
dm9pZCBGdW5jdGlvbkJvZHlOb2RlOjpmaW5pc2hQYXJzaW5nKFBhc3NSZWZQdHI8RnVuY3Rpb25Q
YXJhbWV0ZXJzPiBwYXJhbWV0ZXJzLAogCiBGdW5jdGlvbkJvZHlOb2RlKiBGdW5jdGlvbkJvZHlO
b2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIHJldHVybiBuZXcg
RnVuY3Rpb25Cb2R5Tm9kZShnbG9iYWxEYXRhKTsKKyAgICByZXR1cm4gZG9udEFkb3B0UmVmKG5l
dyBGdW5jdGlvbkJvZHlOb2RlKGdsb2JhbERhdGEpKTsKIH0KIAogUGFzc1JlZlB0cjxGdW5jdGlv
bkJvZHlOb2RlPiBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rp
b25TdGFjayogZnVuY1N0YWNrLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBDb2RlRmVh
dHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCiB7Ci0gICAgUmVmUHRyPEZ1bmN0aW9u
Qm9keU5vZGU+IG5vZGUgPSBuZXcgRnVuY3Rpb25Cb2R5Tm9kZShnbG9iYWxEYXRhLCBjaGlsZHJl
biwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgc291cmNlQ29kZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50
cyk7CisgICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IG5vZGUgPSBkb250QWRvcHRSZWYobmV3
IEZ1bmN0aW9uQm9keU5vZGUoZ2xvYmFsRGF0YSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3Rh
Y2ssIHNvdXJjZUNvZGUsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpKTsKIAogICAgIEFTU0VSVChu
b2RlLT5kYXRhKCktPm1fYXJlbmEubGFzdCgpID09IG5vZGUpOwogICAgIG5vZGUtPmRhdGEoKS0+
bV9hcmVuYS5yZW1vdmVMYXN0KCk7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N5bWJvbFRhYmxlLmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKaW5k
ZXggZjVlMjY2OS4uYmNhZDVlMiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
eW1ib2xUYWJsZS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaApA
QCAtMTIzLDYgKzEyMywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFNoYXJlZFN5
bWJvbFRhYmxlIDogcHVibGljIFN5bWJvbFRhYmxlLCBwdWJsaWMgUmVmQ291bnRlZDxTaGFyZWRT
eW1ib2xUYWJsZT4KICAgICB7CisgICAgcHVibGljOgorICAgICAgICBTaGFyZWRTeW1ib2xUYWJs
ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvbnRBZG9wdFJlZih0aGlzKTsKKyAgICAgICAg
fQogICAgIH07CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL0phdmFTY3Jp
cHRDb3JlL3d0Zi9Dcm9zc1RocmVhZFJlZkNvdW50ZWQuaCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9D
cm9zc1RocmVhZFJlZkNvdW50ZWQuaAppbmRleCBmNjgyZjBkLi44OWE5NGYyIDEwMDY0NAotLS0g
YS9KYXZhU2NyaXB0Q29yZS93dGYvQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmgKKysrIGIvSmF2YVNj
cmlwdENvcmUvd3RmL0Nyb3NzVGhyZWFkUmVmQ291bnRlZC5oCkBAIC03OCw2ICs3OCw4IEBAIG5h
bWVzcGFjZSBXVEYgewogICAgICAgICAgICAgLCBtX3RocmVhZElkKDApCiAjZW5kaWYKICAgICAg
ICAgeworICAgICAgICAgICAgLy8gVGhlIHJlZiBmb3IgbV9yZWZDb3VudGVyIGlzIGVmZmVjdGl2
ZWx5IGFkb3B0ZWQgaW4gQ3Jvc3NUaHJlYWRSZWZDb3VudGVkOjpjcmVhdGUuCisgICAgICAgICAg
ICBkb250QWRvcHRSZWYoJm1fcmVmQ291bnRlcik7CiAgICAgICAgIH0KIAogICAgICAgICB+Q3Jv
c3NUaHJlYWRSZWZDb3VudGVkKCkKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXNz
UmVmUHRyLmggYi9KYXZhU2NyaXB0Q29yZS93dGYvUGFzc1JlZlB0ci5oCmluZGV4IDM2YmE3OGUu
LjM5OWVkODcgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXNzUmVmUHRyLmgKKysr
IGIvSmF2YVNjcmlwdENvcmUvd3RmL1Bhc3NSZWZQdHIuaApAQCAtMjIsMTMgKzIyLDE4IEBACiAj
ZGVmaW5lIFdURl9QYXNzUmVmUHRyX2gKIAogI2luY2x1ZGUgIkFsd2F5c0lubGluZS5oIgorI2lu
Y2x1ZGUgIlJlZkNvdW50ZWQuaCIKKyNpbmNsdWRlICJUeXBlVHJhaXRzLmgiCiAKIG5hbWVzcGFj
ZSBXVEYgewogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUmVmUHRyOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NSZWZQdHI7CiAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IFBhc3NSZWZQdHI8VD4gYWRvcHRSZWYoVCopOwotICAgIAorCisgICAgLy8gQ2FsbCB0
aGlzIGZ1bmN0aW9uIGlmIHlvdSdyZSBzdXJlIHlvdSBkb24ndCBuZWVkIHRvIGNhbGwgYWRvcHRS
ZWYuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFQqIGRvbnRBZG9wdFJlZihUKik7CisKICAg
ICAvLyBSZW1vdmUgaW5saW5lIGZvciB3aW5zY3cgY29tcGlsZXIgdG8gcHJldmVudCB0aGUgY29t
cGlsZXIgYWdyZXNzaXZlbHkgcmVzb2x2aW5nIAogICAgIC8vIFQ6OmRlcmVmKCksIHdoaWNoIHdp
bGwgZmFpbCBjb21waWxpbmcgd2hlbiBQYXNzUmVmUHRyPFQ+IGlzIHVzZWQgYXMgY2xhc3MgbWVt
YmVyIAogICAgIC8vIG9yIGZ1bmN0aW9uIGFyZ3VtZW50cyBiZWZvcmUgVCBpcyBkZWZpbmVkLgpA
QCAtMjMxLDExICsyMzYsMzMgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHJldHVybiBhICE9
IGIuZ2V0KCk7IAogICAgIH0KICAgICAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgYm9vbCBp
c1JlZkNvdW50ZWREZXJpdmVkPiBzdHJ1Y3QgQWRvcHRSZWZUcmFpdHM7CisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+IHN0cnVjdCBBZG9wdFJlZlRyYWl0czxULCB0cnVlPiB7CisgICAgICAgIHN0
YXRpYyB2b2lkIHNldEluaXRpYWxSZWZBZG9wdGVkKFQqIHApCisgICAgICAgIHsKKyNpZm5kZWYg
TkRFQlVHCisgICAgICAgICAgICBpZiAocCkKKyAgICAgICAgICAgICAgcC0+c2V0SW5pdGlhbFJl
ZkFkb3B0ZWQoKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQWRvcHRSZWZUcmFpdHM8VCwgZmFsc2U+IHsKKyAgICAgICAgc3Rh
dGljIHZvaWQgc2V0SW5pdGlhbFJlZkFkb3B0ZWQoVCopIHsgfQorICAgIH07CisKICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NSZWZQdHI8VD4gYWRvcHRSZWYoVCogcCkKICAg
ICB7CisgICAgICAgIEFkb3B0UmVmVHJhaXRzPFQsIElzU3ViY2xhc3M8VCwgUmVmQ291bnRlZEJh
c2U+Ojp2YWx1ZT46OnNldEluaXRpYWxSZWZBZG9wdGVkKHApOwogICAgICAgICByZXR1cm4gUGFz
c1JlZlB0cjxUPihwLCB0cnVlKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
aW5saW5lIFQqIGRvbnRBZG9wdFJlZihUKiBwKQorICAgIHsKKyAgICAgICAgQWRvcHRSZWZUcmFp
dHM8VCwgSXNTdWJjbGFzczxULCBSZWZDb3VudGVkQmFzZT46OnZhbHVlPjo6c2V0SW5pdGlhbFJl
ZkFkb3B0ZWQocCk7CisgICAgICAgIHJldHVybiBwOworICAgIH0KKwogICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgUGFzc1JlZlB0cjxUPiBzdGF0aWNfcG9pbnRl
cl9jYXN0KGNvbnN0IFBhc3NSZWZQdHI8VT4mIHApIAogICAgIHsgCiAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihzdGF0aWNfY2FzdDxUKj4ocC5yZWxlYXNlUmVmKCkpKTsgCmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS93dGYvUmVmQ291bnRlZC5oIGIvSmF2YVNjcmlwdENvcmUvd3RmL1JlZkNv
dW50ZWQuaAppbmRleCA3NjFhODU2Li5hMTk3ZTNjIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS93dGYvUmVmQ291bnRlZC5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWZDb3VudGVkLmgK
QEAgLTM0LDYgKzM0LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVmKCkKICAgICB7CiAgICAgICAg
IEFTU0VSVCghbV9kZWxldGlvbkhhc0JlZ3VuKTsKKyAgICAgICAgQVNTRVJUKG1faW5pdGlhbFJl
ZkFkb3B0ZWQpOwogICAgICAgICArK21fcmVmQ291bnQ7CiAgICAgfQogCkBAIC00OCwxNyArNDks
MjYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9yZWZDb3VudDsKICAgICB9CiAKKyNpZm5k
ZWYgTkRFQlVHCisgICAgdm9pZCBzZXRJbml0aWFsUmVmQWRvcHRlZCgpCisgICAgeworICAgICAg
ICBtX2luaXRpYWxSZWZBZG9wdGVkID0gdHJ1ZTsKKyAgICB9CisjZW5kaWYKKwogcHJvdGVjdGVk
OgogICAgIFJlZkNvdW50ZWRCYXNlKCkKICAgICAgICAgOiBtX3JlZkNvdW50KDEpCiAjaWZuZGVm
IE5ERUJVRwogICAgICAgICAsIG1fZGVsZXRpb25IYXNCZWd1bihmYWxzZSkKKyAgICAgICAgLCBt
X2luaXRpYWxSZWZBZG9wdGVkKGZhbHNlKQogI2VuZGlmCiAgICAgewogICAgIH0KIAogICAgIH5S
ZWZDb3VudGVkQmFzZSgpCiAgICAgeworICAgICAgICBBU1NFUlQobV9pbml0aWFsUmVmQWRvcHRl
ZCk7CiAgICAgfQogCiAgICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBwb2ludGVyIHNob3VsZCBi
ZSBmcmVlZCBvciBub3QuCkBAIC05Nyw2ICsxMDcsNyBAQCBwcml2YXRlOgogICAgIGludCBtX3Jl
ZkNvdW50OwogI2lmbmRlZiBOREVCVUcKICAgICBib29sIG1fZGVsZXRpb25IYXNCZWd1bjsKKyAg
ICBib29sIG1faW5pdGlhbFJlZkFkb3B0ZWQ7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL0ph
dmFTY3JpcHRDb3JlL3d0Zi9UeXBlVHJhaXRzLmNwcCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9UeXBl
VHJhaXRzLmNwcAppbmRleCAzNmZjNmM2Li41Mzc5NDVmIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0
Q29yZS93dGYvVHlwZVRyYWl0cy5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL1R5cGVUcmFp
dHMuY3BwCkBAIC0xMTcsNCArMTE3LDE2IEBAIENPTVBJTEVfQVNTRVJUKChJc1NhbWVUeXBlPGlu
dCwgUmVtb3ZlUG9pbnRlcjxpbnQ+OjpUeXBlPjo6dmFsdWUpLCBXVEZfVGVzdF9SZW1vCiBDT01Q
SUxFX0FTU0VSVCgoSXNTYW1lVHlwZTxpbnQsIFJlbW92ZVBvaW50ZXI8aW50Kj46OlR5cGU+Ojp2
YWx1ZSksIFdURl9UZXN0X1JlbW92ZVBvaW50ZXJfaW50X3BvaW50ZXIpOwogQ09NUElMRV9BU1NF
UlQoKCFJc1NhbWVUeXBlPGludCwgUmVtb3ZlUG9pbnRlcjxpbnQqKj46OlR5cGU+Ojp2YWx1ZSks
IFdURl9UZXN0X1JlbW92ZVBvaW50ZXJfaW50X3BvaW50ZXJfcG9pbnRlcik7CiAKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorY2xhc3MgVGVzdEJhc2VDbGFzcyB7Cit9OworCitjbGFzcyBUZXN0RGVy
aXZlZENsYXNzIDogcHVibGljIFRlc3RCYXNlQ2xhc3M8aW50PiB7Cit9OworCitDT01QSUxFX0FT
U0VSVCgoSXNTdWJjbGFzczxUZXN0RGVyaXZlZENsYXNzLCBUZXN0QmFzZUNsYXNzPGludD4gPjo6
dmFsdWUpLCBXVEZfVGVzdF9Jc1N1YmNsYXNzX0Rlcml2ZWRfRnJvbV9CYXNlKTsKK0NPTVBJTEVf
QVNTRVJUKCghSXNTdWJjbGFzczxUZXN0QmFzZUNsYXNzPGludD4sIFRlc3REZXJpdmVkQ2xhc3M+
Ojp2YWx1ZSksIFdURl9UZXN0X0lzU3ViY2xhc3NfQmFzZV9Gcm9tX0Rlcml2ZWQpOworQ09NUElM
RV9BU1NFUlQoKElzU3ViY2xhc3NPZlRlbXBsYXRlPFRlc3REZXJpdmVkQ2xhc3MsIFRlc3RCYXNl
Q2xhc3M+Ojp2YWx1ZSksIFdURl9UZXN0X0lzU3ViY2xhc3NPZlRlbXBsYXRlX0Jhc2VfRnJvbV9E
ZXJpdmVkKTsKKworCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRD
b3JlL3d0Zi9UeXBlVHJhaXRzLmggYi9KYXZhU2NyaXB0Q29yZS93dGYvVHlwZVRyYWl0cy5oCmlu
ZGV4IDZjZTZhM2UuLmU4YzNkMjQgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9UeXBl
VHJhaXRzLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL1R5cGVUcmFpdHMuaApAQCAtMTA0LDYg
KzEwNCwzMyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmFs
dWUgPSB0cnVlOwogICAgIH07CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gY2xhc3MgSXNTdWJjbGFzcyB7CisgICAgICAgIHR5cGVkZWYgY2hhciBZZXNUeXBlOworICAg
ICAgICBzdHJ1Y3QgTm9UeXBlIHsKKyAgICAgICAgICAgIGNoYXIgcGFkZGluZ1s4XTsKKyAgICAg
ICAgfTsKKworICAgICAgICBzdGF0aWMgWWVzVHlwZSBzdWJjbGFzc0NoZWNrKFUqKTsKKyAgICAg
ICAgc3RhdGljIE5vVHlwZSBzdWJjbGFzc0NoZWNrKC4uLik7CisgICAgICAgIHN0YXRpYyBUKiB0
OworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBzaXplb2Yo
c3ViY2xhc3NDaGVjayh0KSkgPT0gc2l6ZW9mKFllc1R5cGUpOworICAgIH07CisKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgdGVtcGxhdGU8Y2xhc3MgVj4gY2xhc3MgVT4gY2xhc3MgSXNTdWJj
bGFzc09mVGVtcGxhdGUgeworICAgICAgICB0eXBlZGVmIGNoYXIgWWVzVHlwZTsKKyAgICAgICAg
c3RydWN0IE5vVHlwZSB7CisgICAgICAgICAgICBjaGFyIHBhZGRpbmdbOF07CisgICAgICAgIH07
CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVz4KKyAgICAgICAgc3RhdGljIFllc1R5cGUg
c3ViY2xhc3NDaGVjayhVPFc+Kik7CisgICAgICAgIHN0YXRpYyBOb1R5cGUgc3ViY2xhc3NDaGVj
ayguLi4pOworICAgICAgICBzdGF0aWMgVCogdDsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRp
YyBjb25zdCBib29sIHZhbHVlID0gc2l6ZW9mKHN1YmNsYXNzQ2hlY2sodCkpID09IHNpemVvZihZ
ZXNUeXBlKTsKKyAgICB9OworCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBSZW1v
dmVDb25zdCB7CiAgICAgICAgIHR5cGVkZWYgVCBUeXBlOwogICAgIH07CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2Nzcy9DU1NJbml0aWFsVmFsdWUuaCBiL1dlYkNvcmUvY3NzL0NTU0luaXRpYWxWYWx1
ZS5oCmluZGV4IDk2YmMyYTUuLjI2MTFmNzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU0lu
aXRpYWxWYWx1ZS5oCisrKyBiL1dlYkNvcmUvY3NzL0NTU0luaXRpYWxWYWx1ZS5oCkBAIC0zMCwx
MiArMzAsMTIgQEAgY2xhc3MgQ1NTSW5pdGlhbFZhbHVlIDogcHVibGljIENTU1ZhbHVlIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NJbml0aWFsVmFsdWU+IGNyZWF0ZUV4cGxp
Y2l0KCkKICAgICB7Ci0gICAgICAgIHN0YXRpYyBDU1NJbml0aWFsVmFsdWUqIGV4cGxpY2l0VmFs
dWUgPSBuZXcgQ1NTSW5pdGlhbFZhbHVlKGZhbHNlKTsKKyAgICAgICAgc3RhdGljIENTU0luaXRp
YWxWYWx1ZSogZXhwbGljaXRWYWx1ZSA9IGRvbnRBZG9wdFJlZihuZXcgQ1NTSW5pdGlhbFZhbHVl
KGZhbHNlKSk7CiAgICAgICAgIHJldHVybiBleHBsaWNpdFZhbHVlOwogICAgIH0KICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDU1NJbml0aWFsVmFsdWU+IGNyZWF0ZUltcGxpY2l0KCkKICAgICB7Ci0g
ICAgICAgIHN0YXRpYyBDU1NJbml0aWFsVmFsdWUqIGV4cGxpY2l0VmFsdWUgPSBuZXcgQ1NTSW5p
dGlhbFZhbHVlKHRydWUpOworICAgICAgICBzdGF0aWMgQ1NTSW5pdGlhbFZhbHVlKiBleHBsaWNp
dFZhbHVlID0gZG9udEFkb3B0UmVmKG5ldyBDU1NJbml0aWFsVmFsdWUodHJ1ZSkpOwogICAgICAg
ICByZXR1cm4gZXhwbGljaXRWYWx1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3Nz
L0NTU1ByaW1pdGl2ZVZhbHVlLmNwcCBiL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNw
cAppbmRleCBkMjI4NmJiLi5iZGUwOWJkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NQcmlt
aXRpdmVWYWx1ZS5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCkBA
IC03MCwxMSArNzAsMTEgQEAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZUNvbG9yKHVuc2lnbmVkIHJnYlZhbHVlKQogICAgIHN0YXRpYyBDb2xv
clZhbHVlQ2FjaGUqIGNvbG9yVmFsdWVDYWNoZSA9IG5ldyBDb2xvclZhbHVlQ2FjaGU7CiAgICAg
Ly8gVGhlc2UgYXJlIHRoZSBlbXB0eSBhbmQgZGVsZXRlZCB2YWx1ZXMgb2YgdGhlIGhhc2ggdGFi
bGUuCiAgICAgaWYgKHJnYlZhbHVlID09IENvbG9yOjp0cmFuc3BhcmVudCkgewotICAgICAgICBz
dGF0aWMgQ1NTUHJpbWl0aXZlVmFsdWUqIGNvbG9yVHJhbnNwYXJlbnQgPSBuZXcgQ1NTUHJpbWl0
aXZlVmFsdWUoQ29sb3I6OnRyYW5zcGFyZW50KTsKKyAgICAgICAgc3RhdGljIENTU1ByaW1pdGl2
ZVZhbHVlKiBjb2xvclRyYW5zcGFyZW50ID0gZG9udEFkb3B0UmVmKG5ldyBDU1NQcmltaXRpdmVW
YWx1ZShDb2xvcjo6dHJhbnNwYXJlbnQpKTsKICAgICAgICAgcmV0dXJuIGNvbG9yVHJhbnNwYXJl
bnQ7CiAgICAgfQogICAgIGlmIChyZ2JWYWx1ZSA9PSBDb2xvcjo6d2hpdGUpIHsKLSAgICAgICAg
c3RhdGljIENTU1ByaW1pdGl2ZVZhbHVlKiBjb2xvcldoaXRlID0gbmV3IENTU1ByaW1pdGl2ZVZh
bHVlKENvbG9yOjp3aGl0ZSk7CisgICAgICAgIHN0YXRpYyBDU1NQcmltaXRpdmVWYWx1ZSogY29s
b3JXaGl0ZSA9IGRvbnRBZG9wdFJlZihuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoQ29sb3I6OndoaXRl
KSk7CiAgICAgICAgIHJldHVybiBjb2xvcldoaXRlOwogICAgIH0KICAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IHByaW1pdGl2ZVZhbHVlID0gY29sb3JWYWx1ZUNhY2hlLT5nZXQocmdiVmFs
dWUpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAgYi9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAppbmRleCAxODFlNDgwLi45NmQyZmFjIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9XZWJDb3JlL2Nz
cy9DU1NTdHlsZVNlbGVjdG9yLmNwcApAQCAtMTEwMCw4ICsxMTAwLDggQEAgUGFzc1JlZlB0cjxS
ZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqIGUs
IFJlbmRlclN0eWwKICAgICAvLyB3aWxsIHZhbmlzaCBpZiBhIHN0eWxlIHJlY2FsYyBoYXBwZW5z
IGR1cmluZyBsb2FkaW5nLgogICAgIGlmIChhbGxvd1NoYXJpbmcgJiYgIWUtPmRvY3VtZW50KCkt
PmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpICYmICFlLT5yZW5kZXJlcigpKSB7CiAgICAgICAgIGlm
ICghc19zdHlsZU5vdFlldEF2YWlsYWJsZSkgewotICAgICAgICAgICAgc19zdHlsZU5vdFlldEF2
YWlsYWJsZSA9IDo6bmV3IFJlbmRlclN0eWxlOwotICAgICAgICAgICAgc19zdHlsZU5vdFlldEF2
YWlsYWJsZS0+cmVmKCk7CisgICAgICAgICAgICBzX3N0eWxlTm90WWV0QXZhaWxhYmxlID0gZG9u
dEFkb3B0UmVmKDo6bmV3IFJlbmRlclN0eWxlKTsKKyAgICAgICAgICAgIHNfc3R5bGVOb3RZZXRB
dmFpbGFibGUtPnJlZigpOyAvLyBGSVhNRTogVGhpcyByZWYgaXMgcHJvYmFibHkgbm90IG5lZWRl
ZC4KICAgICAgICAgICAgIHNfc3R5bGVOb3RZZXRBdmFpbGFibGUtPnNldERpc3BsYXkoTk9ORSk7
CiAgICAgICAgICAgICBzX3N0eWxlTm90WWV0QXZhaWxhYmxlLT5mb250KCkudXBkYXRlKG1fZm9u
dFNlbGVjdG9yKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvU3VicmVz
b3VyY2VMb2FkZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCmlu
ZGV4IDJlZTQ2MjYuLjY5YmVlMDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291
cmNlTG9hZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAK
QEAgLTUxLDYgKzUxLDkgQEAgU3VicmVzb3VyY2VMb2FkZXI6OlN1YnJlc291cmNlTG9hZGVyKEZy
YW1lKiBmcmFtZSwgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQqIGNsaWUKICNpZm5kZWYgTkRFQlVH
CiAgICAgc3VicmVzb3VyY2VMb2FkZXJDb3VudGVyLmluY3JlbWVudCgpOwogI2VuZGlmCisgICAg
Ly8gbV9kb2N1bWVudExvYWRlci0+YWRkU3VicmVzb3VyY2VMb2FkZXIgd2lsbCBncmFiIGEgcmVm
ZXJlbmNlIHRvIHx0aGlzfAorICAgIC8vIGJlZm9yZSBhZG9wdFJlZiBpcyBjYWxsZWQsIHNvIHdl
IG5lZWQgdG8gc2lsZW5jZSB0aGUgYXNzZXJ0LgorICAgIGRvbnRBZG9wdFJlZih0aGlzKTsKICAg
ICBtX2RvY3VtZW50TG9hZGVyLT5hZGRTdWJyZXNvdXJjZUxvYWRlcih0aGlzKTsKIH0KIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAK
aW5kZXggZmFiN2UzZi4uM2M0MzkzNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmNw
cAorKysgYi9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC0xNDQsNiArMTQ0LDcgQEAgRnJhbWU6
OkZyYW1lKFBhZ2UqIHBhZ2UsIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCBG
cmFtZUxvYWRlckNsaWVudCoKICAgICAsIG1faXNEaXNjb25uZWN0ZWQoZmFsc2UpCiAgICAgLCBt
X2V4Y2x1ZGVGcm9tVGV4dFNlYXJjaChmYWxzZSkKIHsKKyAgICBkb250QWRvcHRSZWYodGhpcyk7
ICAvLyBGcmFtZSBnZXRzIGFkZFJlZmVkIGJlZm9yZSBhZG9wdGlvbi4KICAgICBGcmFtZSogcGFy
ZW50ID0gcGFyZW50RnJvbU93bmVyRWxlbWVudChvd25lckVsZW1lbnQpOwogICAgIG1fem9vbUZh
Y3RvciA9IHBhcmVudCA/IHBhcmVudC0+bV96b29tRmFjdG9yIDogMS4wZjsKIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vVGhyZWFkR2xvYmFsRGF0YS5jcHAKaW5kZXggYTQzZTliZC4uM2RlMjAxNSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL1RocmVhZEdsb2JhbERhdGEuY3BwCkBAIC02OCw3ICs2OCw4IEBAIFRocmVhZEdsb2Jh
bERhdGEmIHRocmVhZEdsb2JhbERhdGEoKQogfQogCiBUaHJlYWRHbG9iYWxEYXRhOjpUaHJlYWRH
bG9iYWxEYXRhKCkKLSAgICA6IG1fZW1wdHlTdHJpbmcobmV3IFN0cmluZ0ltcGwpCisgICAgLy8g
RklYTUU6IFNob3VsZCB3ZSBhZG9wdFJlZiBoZXJlPworICAgIDogbV9lbXB0eVN0cmluZyhkb250
QWRvcHRSZWYobmV3IFN0cmluZ0ltcGwpKQogICAgICwgbV9hdG9taWNTdHJpbmdUYWJsZShuZXcg
SGFzaFNldDxTdHJpbmdJbXBsKj4pCiAgICAgLCBtX2V2ZW50TmFtZXMobmV3IEV2ZW50TmFtZXMp
CiAgICAgLCBtX3RocmVhZFRpbWVycyhuZXcgVGhyZWFkVGltZXJzKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9CaWRpQ29udGV4dC5jcHAKaW5kZXggNTQ2NTcxZS4uMzEzZjRhOSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvQmlkaUNvbnRleHQuY3BwCkBAIC0zOSwxOCArMzksMTggQEAgUGFzc1JlZlB0cjxCaWRp
Q29udGV4dD4gQmlkaUNvbnRleHQ6OmNyZWF0ZSh1bnNpZ25lZCBjaGFyIGxldmVsLCBEaXJlY3Rp
b24gZGlyZWMKICAgICBpZiAoIWxldmVsKSB7CiAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwo
QmlkaUNvbnRleHQsIGx0ckNvbnRleHQsICgwLCBMZWZ0VG9SaWdodCwgZmFsc2UsIDApKTsKICAg
ICAgICAgaWYgKCFvdmVycmlkZSkKLSAgICAgICAgICAgIHJldHVybiAmbHRyQ29udGV4dDsKKyAg
ICAgICAgICAgIHJldHVybiBkb250QWRvcHRSZWYoJmx0ckNvbnRleHQpOwogCiAgICAgICAgIERF
RklORV9TVEFUSUNfTE9DQUwoQmlkaUNvbnRleHQsIGx0ck92ZXJyaWRlQ29udGV4dCwgKDAsIExl
ZnRUb1JpZ2h0LCB0cnVlLCAwKSk7Ci0gICAgICAgIHJldHVybiAmbHRyT3ZlcnJpZGVDb250ZXh0
OworICAgICAgICByZXR1cm4gZG9udEFkb3B0UmVmKCZsdHJPdmVycmlkZUNvbnRleHQpOwogICAg
IH0KIAogICAgIERFRklORV9TVEFUSUNfTE9DQUwoQmlkaUNvbnRleHQsIHJ0bENvbnRleHQsICgx
LCBSaWdodFRvTGVmdCwgZmFsc2UsIDApKTsKICAgICBpZiAoIW92ZXJyaWRlKQotICAgICAgICBy
ZXR1cm4gJnJ0bENvbnRleHQ7CisgICAgICAgIHJldHVybiBkb250QWRvcHRSZWYoJnJ0bENvbnRl
eHQpOwogCiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChCaWRpQ29udGV4dCwgcnRsT3ZlcnJpZGVD
b250ZXh0LCAoMSwgUmlnaHRUb0xlZnQsIHRydWUsIDApKTsKLSAgICByZXR1cm4gJnJ0bE92ZXJy
aWRlQ29udGV4dDsKKyAgICByZXR1cm4gZG9udEFkb3B0UmVmKCZydGxPdmVycmlkZUNvbnRleHQp
OwogfQogCiBib29sIG9wZXJhdG9yPT0oY29uc3QgQmlkaUNvbnRleHQmIGMxLCBjb25zdCBCaWRp
Q29udGV4dCYgYzIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5tbSBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCmluZGV4IDAzZTM5YTAu
LjJhNDA4YTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1t
CisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCkBAIC0xMDYsNyArMTA2
LDcgQEAgZW51bSB7CiAKIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lOjp0aGVt
ZUZvclBhZ2UoUGFnZSopCiB7Ci0gICAgc3RhdGljIFJlbmRlclRoZW1lKiBydCA9IFJlbmRlclRo
ZW1lTWFjOjpjcmVhdGUoKS5yZWxlYXNlUmVmKCk7CisgICAgc3RhdGljIFJlbmRlclRoZW1lKiBy
dCA9IGRvbnRBZG9wdFJlZihSZW5kZXJUaGVtZU1hYzo6Y3JlYXRlKCkucmVsZWFzZVJlZigpKTsK
ICAgICByZXR1cm4gcnQ7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR1BhaW50LmNw
cCBiL1dlYkNvcmUvc3ZnL1NWR1BhaW50LmNwcAppbmRleCA0NWFiZTY5Li40Mjk0MmFkIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdQYWludC5jcHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZHUGFp
bnQuY3BwCkBAIC02OCwxMyArNjgsMTMgQEAgU1ZHUGFpbnQ6On5TVkdQYWludCgpCiAKIFNWR1Bh
aW50KiBTVkdQYWludDo6ZGVmYXVsdEZpbGwoKQogewotICAgIHN0YXRpYyBTVkdQYWludCogX2Rl
ZmF1bHRGaWxsID0gbmV3IFNWR1BhaW50KENvbG9yOjpibGFjayk7CisgICAgc3RhdGljIFNWR1Bh
aW50KiBfZGVmYXVsdEZpbGwgPSBkb250QWRvcHRSZWYobmV3IFNWR1BhaW50KENvbG9yOjpibGFj
aykpOwogICAgIHJldHVybiBfZGVmYXVsdEZpbGw7CiB9CiAKIFNWR1BhaW50KiBTVkdQYWludDo6
ZGVmYXVsdFN0cm9rZSgpCiB7Ci0gICAgc3RhdGljIFNWR1BhaW50KiBfZGVmYXVsdFN0cm9rZSA9
IG5ldyBTVkdQYWludChTVkdfUEFJTlRUWVBFX05PTkUpOworICAgIHN0YXRpYyBTVkdQYWludCog
X2RlZmF1bHRTdHJva2UgPSBkb250QWRvcHRSZWYobmV3IFNWR1BhaW50KFNWR19QQUlOVFRZUEVf
Tk9ORSkpOwogICAgIHJldHVybiBfZGVmYXVsdFN0cm9rZTsKIH0KIApkaWZmIC0tZ2l0IGEvV2Vi
S2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0gYi9X
ZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQpp
bmRleCAzOWZmMTgxLi5hZDA5MjcxIDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9z
dGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQorKysgYi9XZWJLaXQvbWFjL1BsdWdp
bnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQpAQCAtMTI4LDcgKzEyOCw5
IEBAIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5KE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5CiAgICAgZG8gewogICAgICAgICBtX3BsdWdpbklE
ID0gKytwbHVnaW5JRENvdW50ZXI7CiAgICAgfSB3aGlsZSAocGx1Z2luSG9zdFByb3h5LT5wbHVn
aW5JbnN0YW5jZShtX3BsdWdpbklEKSB8fCAhbV9wbHVnaW5JRCk7Ci0gICAgCisKKyAgICAvLyBw
bHVnaW5Ib3N0UHJveHktPmFkZFBsdWdpbkluc3RhbmNlIHdpbGwgYWRkIGEgcmVmZXJlbmNlIGJl
Zm9yZSB8dGhpc3wgaXMgYWRvcHRlZC4KKyAgICBkb250QWRvcHRSZWYodGhpcyk7CiAgICAgcGx1
Z2luSG9zdFByb3h5LT5hZGRQbHVnaW5JbnN0YW5jZSh0aGlzKTsKIAogI2lmbmRlZiBOREVCVUc=
</data>

          </attachment>
      

    </bug>

</bugzilla>