<?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>46207</bug_id>
          
          <creation_ts>2010-09-21 12:04:44 -0700</creation_ts>
          <short_desc>Speed up function.apply(..., arguments)</short_desc>
          <delta_ts>2010-09-21 16:21:26 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>282468</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-09-21 12:04:44 -0700</bug_when>
    <thetext>Speed up function.apply(..., arguments)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282470</commentid>
    <comment_count>1</comment_count>
      <attachid>68271</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-09-21 12:07:43 -0700</bug_when>
    <thetext>Created attachment 68271
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282477</commentid>
    <comment_count>2</comment_count>
      <attachid>68271</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-09-21 12:27:53 -0700</bug_when>
    <thetext>Comment on attachment 68271
Patch

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

r=me, but I think you should make these changes.

&gt; JavaScriptCore/jit/JITOpcodes.cpp:1533
&gt; +        emitLoad(argsOffset, regT1, regT0);
&gt; +        slowJumps.append(branchTestPtr(NonZero, regT0));
&gt; +        slowJumps.append(branchTestPtr(NonZero, regT1));

To test for JSValue(), test the tag against JSValue::EmptyValueTag.

&gt; JavaScriptCore/jit/JITOpcodes.cpp:1541
&gt; +        slowJumps.append(branch32(Above, regT0, Imm32(Arguments::MaxArguments)));

Do you need this check on the hot path? In theory, the only limit to argument use on the hot path is the size of the register file, which you check below.

&gt; JavaScriptCore/jit/JITOpcodes.cpp:1560
&gt; +        if (sizeof(Register) == 2 * ScalePtr) {
&gt; +            loadPtr(BaseIndex(regT1, regT0, ScalePtr, static_cast&lt;unsigned&gt;(-sizeof(Register) + sizeof(void*))), regT3);
&gt; +            storePtr(regT3, BaseIndex(regT2, regT0, ScalePtr, sizeof(void*)));
&gt; +        }

Might be clearer just to use #if USE(JSVALUE32_64) here instead.

&gt; JavaScriptCore/jit/JITOpcodes.cpp:1561
&gt; +        jump(loopStart);

This will &quot;jump to jump&quot; each time through the loop. Might be faster to do &quot;branchTest32(Zero, regT0)&quot; here, branching back to the sub32 above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282574</commentid>
    <comment_count>3</comment_count>
      <attachid>68294</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-09-21 14:55:01 -0700</bug_when>
    <thetext>Created attachment 68294
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282609</commentid>
    <comment_count>4</comment_count>
      <attachid>68294</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-09-21 16:18:08 -0700</bug_when>
    <thetext>Comment on attachment 68294
Patch

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

r=me

&gt; JavaScriptCore/jit/JITOpcodes.cpp:1572
&gt; +    JumpList slowJumps;
&gt; +    JumpList endBranches;

These variables are unused.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282611</commentid>
    <comment_count>5</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-09-21 16:21:26 -0700</bug_when>
    <thetext>Committed r67990: &lt;http://trac.webkit.org/changeset/67990&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68271</attachid>
            <date>2010-09-21 12:07:43 -0700</date>
            <delta_ts>2010-09-21 14:54:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46207-20100921120741.patch</filename>
            <type>text/plain</type>
            <size>5812</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA2OWUyN2FjOGFhNWQ3ZWU5NDIxOTRiMzIwY2FjYmI1OTJhYTYzYTAxLi5j
YTc5ZGU5NDViN2Y5MDIyYjc3MzYyN2ViOWNmYmQ0MTY0OTI0M2M4IDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjAgQEAKKzIwMTAtMDktMjEgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGVlZCB1
cCBmdW5jdGlvbi5hcHBseSguLi4sIGFyZ3VtZW50cykKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2MjA3CisKKyAgICAgICAgQWRkIGNvZGUgdG8gZG8g
YXJndW1lbnQgY29weWluZyBpbmxpbmUgaW4gdGhlIGNhc2UKKyAgICAgICAgd2hlcmUgd2UncmUg
dXNpbmcgRnVuY3Rpb24uYXBwbHkgdG8gZm9yd2FyZCBvdXIgYXJndW1lbnRzCisgICAgICAgIGRp
cmVjdGx5LgorCisgICAgICAgICogaml0L0pJVENhbGwzMl82NC5jcHA6CisgICAgICAgICAgUmVt
b3ZlIDMyYml0IHNwZWNpZmljIGVtaXRfb3BfbG9hZF92YXJhcmdzIGFzIHRoZSBsb2dpYyBpcyB0
aGUKKyAgICAgICAgICBzYW1lIGZvciBhbGwgdmFsdWUgcmVwcmVzZW50YXRpb25zCisgICAgICAg
ICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9hZF92
YXJhcmdzKToKKwogMjAxMC0wOS0yMSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpkaWZmIC0tZ2l0IGEvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2Fs
bDMyXzY0LmNwcAppbmRleCBhYThlOTg3ZDA1NzFiOTAzMmQ3MDlmNjE1MmJhZDg0YzEwODExMmQ1
Li5lNDAwNWFlZTA3NmJmNjkwYzc4MmVlNWQ2M2U5NzlmNjJlZWE2ZWJmIDEwMDY0NAotLS0gYS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbDMyXzY0LmNwcApAQCAtMTgwLDE4ICsxODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9jYWxsX2V2YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBjb21waWxl
T3BDYWxsKG9wX2NhbGxfZXZhbCwgY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9sb2FkX3ZhcmFyZ3MoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgYXJnQ291bnREc3QgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBhcmdzT2Zmc2V0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKLQotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0
aV9vcF9sb2FkX3ZhcmFyZ3MpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEltbTMyKGFyZ3NP
ZmZzZXQpKTsKLSAgICBzdHViQ2FsbC5jYWxsKCk7Ci0gICAgLy8gU3RvcmVzIGEgbmFrZWQgaW50
MzIgaW4gdGhlIHJlZ2lzdGVyIGZpbGUuCi0gICAgc3RvcmUzMihyZXR1cm5WYWx1ZVJlZ2lzdGVy
LCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBhcmdDb3VudERzdCAqIHNpemVvZihSZWdpc3Rl
cikpKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfY2FsbF92YXJhcmdzKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgY29tcGlsZU9wQ2FsbFZhcmFyZ3MoY3VycmVudElu
c3RydWN0aW9uKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cCBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCAyYmZiYTgzZmUwODMw
NGM5MTIzNmM5Y2JiYzk5NTUxMmQ2NjRmMzg0Li5hYTc5YTY1MDQ4NzJkMGQ2YTE1ZGQ1ZTJlZTM4
MjAyMWVkZTcxNzk4IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAKKysrIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCkBAIC0yOCw2ICsyOCw3
IEBACiAjaWYgRU5BQkxFKEpJVCkKICNpbmNsdWRlICJKSVQuaCIKIAorI2luY2x1ZGUgIkFyZ3Vt
ZW50cy5oIgogI2luY2x1ZGUgIkpJVElubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJKSVRTdHVi
Q2FsbC5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKQEAgLTQzOCwxOCArNDM5LDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfY2FsbF9ldmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgY29tcGlsZU9wQ2FsbChvcF9jYWxsX2V2YWwsIGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfbG9hZF92YXJhcmdzKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGFyZ0NvdW50RHN0ID0g
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgYXJnc09mZnNldCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0KLSAgICBKSVRTdHViQ2FsbCBzdHViQ2Fs
bCh0aGlzLCBjdGlfb3BfbG9hZF92YXJhcmdzKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChJ
bW0zMihhcmdzT2Zmc2V0KSk7Ci0gICAgc3R1YkNhbGwuY2FsbCgpOwotICAgIC8vIFN0b3JlcyBh
IG5ha2VkIGludDMyIGluIHRoZSByZWdpc3RlciBmaWxlLgotICAgIHN0b3JlMzIocmV0dXJuVmFs
dWVSZWdpc3RlciwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgYXJnQ291bnREc3QgKiBzaXpl
b2YoUmVnaXN0ZXIpKSk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2NhbGxfdmFyYXJncyhJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGNvbXBpbGVPcENhbGxWYXJhcmdz
KGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xNTI4LDYgKzE1MTcsNjAgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X3JlZ2V4cChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIHN0
dWJDYWxsLmNhbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiB9CiAKK3ZvaWQg
SklUOjplbWl0X29wX2xvYWRfdmFyYXJncyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQoreworICAgIGludCBhcmdDb3VudERzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQ7CisgICAgaW50IGFyZ3NPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OworICAgIEp1bXBMaXN0IHNsb3dKdW1wczsKKyAgICBKdW1wIGVuZEJyYW5jaDsKKyAgICBpbnQg
ZXhwZWN0ZWRQYXJhbXMgPSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzIC0gMTsKKyAgICAv
LyBPbmx5IGRvIGlubGluZSBjb3B5aW5nIGlmIHdlIGFyZSBndWFyYW50ZWVkIHRvIGhhdmUgYSBz
aW5nbGUgc3RyZWFtCisgICAgLy8gb2YgYXJndW1lbnRzCisgICAgaWYgKCFleHBlY3RlZFBhcmFt
cykgeworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIGVtaXRMb2FkKGFyZ3NPZmZzZXQs
IHJlZ1QxLCByZWdUMCk7CisgICAgICAgIHNsb3dKdW1wcy5hcHBlbmQoYnJhbmNoVGVzdFB0cihO
b25aZXJvLCByZWdUMCkpOworICAgICAgICBzbG93SnVtcHMuYXBwZW5kKGJyYW5jaFRlc3RQdHIo
Tm9uWmVybywgcmVnVDEpKTsKKyNlbHNlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YXJnc09mZnNldCwgcmVnVDApOworICAgICAgICBzbG93SnVtcHMuYXBwZW5kKGJyYW5jaFRlc3RQ
dHIoTm9uWmVybywgcmVnVDApKTsKKyNlbmRpZgorICAgICAgICAvLyBMb2FkIGFyZyBjb3VudCBp
bnRvIHJlZ1QwCisgICAgICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyMzIoUmVnaXN0ZXJG
aWxlOjpBcmd1bWVudENvdW50LCByZWdUMCk7CisgICAgICAgIHN0b3JlUHRyKHJlZ1QwLCBhZGRy
ZXNzRm9yKGFyZ0NvdW50RHN0KSk7CisgICAgICAgIHNsb3dKdW1wcy5hcHBlbmQoYnJhbmNoMzIo
QWJvdmUsIHJlZ1QwLCBJbW0zMihBcmd1bWVudHM6Ok1heEFyZ3VtZW50cykpKTsKKyAgICAgICAg
CisgICAgICAgIG11bDMyKEltbTMyKHNpemVvZihSZWdpc3RlcikpLCByZWdUMCwgcmVnVDMpOwor
ICAgICAgICBhZGRQdHIoSW1tMzIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNpemVvZihSZWdpc3Rl
cikgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgKiBzaXplb2YoUmVnaXN0ZXIp
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CisgICAgICAgIHN1YlB0cihyZWdUMywgcmVn
VDEpOyAvLyByZWdUMSBpcyBub3cgdGhlIHN0YXJ0IG9mIHRoZSBvdXQgb2YgbGluZSBhcmd1bWVu
dHMKKyAgICAgICAgYWRkUHRyKEltbTMyKGFyZ3NPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QyKTsgLy8gcmVnVDIgaXMgdGhlIHRhcmdldCBidWZmZXIK
KyAgICAgICAgCisgICAgICAgIC8vIEJvdW5kcyBjaGVjayB0aGUgcmVnaXN0ZXJmaWxlCisgICAg
ICAgIGFkZFB0cihyZWdUMiwgcmVnVDMpOworICAgICAgICBzbG93SnVtcHMuYXBwZW5kKGJyYW5j
aFB0cihCZWxvdywgQWJzb2x1dGVBZGRyZXNzKCZtX2dsb2JhbERhdGEtPmludGVycHJldGVyLT5y
ZWdpc3RlckZpbGUoKS5tX2VuZCksIHJlZ1QzKSk7CisgICAgICAgIAorICAgICAgICBMYWJlbCBs
b29wU3RhcnQgPSBsYWJlbCgpOworICAgICAgICBlbmRCcmFuY2ggPSBicmFuY2hUZXN0MzIoWmVy
bywgcmVnVDApOworICAgICAgICBzdWIzMihJbW0zMigxKSwgcmVnVDApOworICAgICAgICBsb2Fk
UHRyKEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFNjYWxlUHRyLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oLXNpemVvZihSZWdpc3RlcikpKSwgcmVnVDMpOworICAgICAgICBzdG9yZVB0cihyZWdUMywg
QmFzZUluZGV4KHJlZ1QyLCByZWdUMCwgU2NhbGVQdHIsIDApKTsKKyAgICAgICAgaWYgKHNpemVv
ZihSZWdpc3RlcikgPT0gMiAqIFNjYWxlUHRyKSB7CisgICAgICAgICAgICBsb2FkUHRyKEJhc2VJ
bmRleChyZWdUMSwgcmVnVDAsIFNjYWxlUHRyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLXNpemVv
ZihSZWdpc3RlcikgKyBzaXplb2Yodm9pZCopKSksIHJlZ1QzKTsKKyAgICAgICAgICAgIHN0b3Jl
UHRyKHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QwLCBTY2FsZVB0ciwgc2l6ZW9mKHZvaWQq
KSkpOworICAgICAgICB9CisgICAgICAgIGp1bXAobG9vcFN0YXJ0KTsKKyAgICB9CisgICAgCisg
ICAgc2xvd0p1bXBzLmxpbmsodGhpcyk7CisgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywg
Y3RpX29wX2xvYWRfdmFyYXJncyk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tMzIoYXJn
c09mZnNldCkpOworICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICAvLyBTdG9yZXMgYSBuYWtlZCBp
bnQzMiBpbiB0aGUgcmVnaXN0ZXIgZmlsZS4KKyAgICBzdG9yZTMyKHJldHVyblZhbHVlUmVnaXN0
ZXIsIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ0NvdW50RHN0ICogc2l6ZW9mKFJlZ2lz
dGVyKSkpOworICAgIGlmICghZXhwZWN0ZWRQYXJhbXMpCisgICAgICAgIGVuZEJyYW5jaC5saW5r
KHRoaXMpOworfQorCiAvLyBGb3IgYm90aCBKU1ZhbHVlMzJfNjQgYW5kIEpTVmFsdWUzMgogI2lm
IEVOQUJMRShKSVRfVVNFX1NPRlRfTU9EVUxPKQogI2lmIENQVShBUk1fVFJBRElUSU9OQUwpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68294</attachid>
            <date>2010-09-21 14:55:01 -0700</date>
            <delta_ts>2010-09-21 16:18:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46207-20100921145500.patch</filename>
            <type>text/plain</type>
            <size>8039</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA2OWUyN2FjOGFhNWQ3ZWU5NDIxOTRiMzIwY2FjYmI1OTJhYTYzYTAxLi42
ZmNiYzlhNTExOTdjMjJmY2UzNThmN2I0M2ViMDMxYzVkOWYyNTc1IDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjcgQEAKKzIwMTAtMDktMjEgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGVlZCB1
cCBmdW5jdGlvbi5hcHBseSguLi4sIGFyZ3VtZW50cykKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2MjA3CisKKyAgICAgICAgQWRkIGNvZGUgdG8gZG8g
YXJndW1lbnQgY29weWluZyBpbmxpbmUgaW4gdGhlIGNhc2UKKyAgICAgICAgd2hlcmUgd2UncmUg
dXNpbmcgRnVuY3Rpb24uYXBwbHkgdG8gZm9yd2FyZCBvdXIgYXJndW1lbnRzCisgICAgICAgIGRp
cmVjdGx5LgorCisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVTbG93Q2FzZXMpOgorICAgICAgICAgICBTcGxpdHRlZCBvcF9sb2FkX3ZhcmFy
Z3MgaW50byBmYXN0IGFuZCBzbG93IHBhdGhzLCBzbyBhZGQgdGhlIGNhbGwKKyAgICAgICAgICAg
dG8gdGhlIHNsb3cgcGF0aCBnZW5lcmF0b3IuCisgICAgICAgICogaml0L0pJVC5oOgorICAgICAg
ICAqIGppdC9KSVRDYWxsMzJfNjQuY3BwOgorICAgICAgICAgIFJlbW92ZSAzMmJpdCBzcGVjaWZp
YyBlbWl0X29wX2xvYWRfdmFyYXJncyBhcyB0aGUgbG9naWMgaXMgdGhlCisgICAgICAgICAgc2Ft
ZSBmb3IgYWxsIHZhbHVlIHJlcHJlc2VudGF0aW9ucworICAgICAgICAqIGppdC9KSVRPcGNvZGVz
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvYWRfdmFyYXJncyk6CisgICAgICAg
ICAgQ29weSBhcmd1bWVudHMgaW5saW5lCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
bG9hZF92YXJhcmdzKToKKwogMjAxMC0wOS0yMSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApp
bmRleCA0NDY2ZmJkMmE5ZDk0M2ZkNWUzZTMyOThjZTc1ZmNjODM0NWU3Njg4Li5lOTBkNzljYzRk
YTY4ZGQ0ZGUxYmFhOTlhNGM1NjM4ZDg5ZTNhM2MzIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAtNDA4LDYg
KzQwOCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERF
RklORV9TTE9XQ0FTRV9PUChvcF9qbGVzc2VxKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Ao
b3Bfam5sZXNzZXEpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9qdHJ1ZSkKKyAgICAg
ICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2xvYWRfdmFyYXJncykKICAgICAgICAgREVGSU5FX1NM
T1dDQVNFX09QKG9wX2xvb3BfaWZfbGVzcykKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X2xvb3BfaWZfbGVzc2VxKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbG9vcF9pZl90
cnVlKQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCmluZGV4IDZmMTE2OGI1NGQ0NDljYTZkZWQ0MmZjY2M2MWU3ZmVkZjBiMDQ2
NDQuLjFlYmU1N2JkM2M2NzExNzg1NTljMTE2MzZjMWU0ODA4MmJhYjFhMGIgMTAwNjQ0Ci0tLSBh
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
QEAgLTg1NSw2ICs4NTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbGVzc2VxKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVz
c2VxKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvYWRfdmFyYXJn
cyhJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2lmX2xlc3MoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9p
Zl9sZXNzZXEoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9pZl90cnVlKEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENhbGwzMl82NC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0
LmNwcAppbmRleCBhYThlOTg3ZDA1NzFiOTAzMmQ3MDlmNjE1MmJhZDg0YzEwODExMmQ1Li5lNDAw
NWFlZTA3NmJmNjkwYzc4MmVlNWQ2M2U5NzlmNjJlZWE2ZWJmIDEwMDY0NAotLS0gYS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbDMyXzY0LmNwcApAQCAtMTgwLDE4ICsxODAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYWxs
X2V2YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBjb21waWxlT3BDYWxs
KG9wX2NhbGxfZXZhbCwgY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4Kysp
OwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9sb2FkX3ZhcmFyZ3MoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgYXJnQ291bnREc3QgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOwotICAgIGludCBhcmdzT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKLQotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9s
b2FkX3ZhcmFyZ3MpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEltbTMyKGFyZ3NPZmZzZXQp
KTsKLSAgICBzdHViQ2FsbC5jYWxsKCk7Ci0gICAgLy8gU3RvcmVzIGEgbmFrZWQgaW50MzIgaW4g
dGhlIHJlZ2lzdGVyIGZpbGUuCi0gICAgc3RvcmUzMihyZXR1cm5WYWx1ZVJlZ2lzdGVyLCBBZGRy
ZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBhcmdDb3VudERzdCAqIHNpemVvZihSZWdpc3RlcikpKTsK
LX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfY2FsbF92YXJhcmdzKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgY29tcGlsZU9wQ2FsbFZhcmFyZ3MoY3VycmVudEluc3RydWN0
aW9uKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcCBiL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCAyYmZiYTgzZmUwODMwNGM5MTIz
NmM5Y2JiYzk5NTUxMmQ2NjRmMzg0Li45YzMzNzY3NjcyYTE5Mzc2NWI5MGNlM2I1NDZmNzZkY2Fi
MzdiMWYyIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysr
IGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAj
aWYgRU5BQkxFKEpJVCkKICNpbmNsdWRlICJKSVQuaCIKIAorI2luY2x1ZGUgIkFyZ3VtZW50cy5o
IgogI2luY2x1ZGUgIkpJVElubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJKSVRTdHViQ2FsbC5o
IgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKQEAgLTQzOCwxOCArNDM5LDYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfY2FsbF9ldmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgY29t
cGlsZU9wQ2FsbChvcF9jYWxsX2V2YWwsIGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfbG9hZF92YXJhcmdzKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGFyZ0NvdW50RHN0ID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgYXJnc09mZnNldCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0KLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlz
LCBjdGlfb3BfbG9hZF92YXJhcmdzKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChJbW0zMihh
cmdzT2Zmc2V0KSk7Ci0gICAgc3R1YkNhbGwuY2FsbCgpOwotICAgIC8vIFN0b3JlcyBhIG5ha2Vk
IGludDMyIGluIHRoZSByZWdpc3RlciBmaWxlLgotICAgIHN0b3JlMzIocmV0dXJuVmFsdWVSZWdp
c3RlciwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgYXJnQ291bnREc3QgKiBzaXplb2YoUmVn
aXN0ZXIpKSk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2NhbGxfdmFyYXJncyhJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGNvbXBpbGVPcENhbGxWYXJhcmdzKGN1cnJl
bnRJbnN0cnVjdGlvbik7CkBAIC0xNTI4LDYgKzE1MTcsNzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X3JlZ2V4cChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIHN0dWJDYWxs
LmNhbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiB9CiAKK3ZvaWQgSklUOjpl
bWl0X29wX2xvYWRfdmFyYXJncyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIGludCBhcmdDb3VudERzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Cisg
ICAgaW50IGFyZ3NPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAg
IGludCBleHBlY3RlZFBhcmFtcyA9IG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgLSAxOwor
ICAgIC8vIERvbid0IGRvIGlubGluZSBjb3B5aW5nIGlmIHdlIGFyZW4ndCBndWFyYW50ZWVkIHRv
IGhhdmUgYSBzaW5nbGUgc3RyZWFtCisgICAgLy8gb2YgYXJndW1lbnRzCisgICAgaWYgKGV4cGVj
dGVkUGFyYW1zKSB7CisgICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9s
b2FkX3ZhcmFyZ3MpOworICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChJbW0zMihhcmdzT2Zm
c2V0KSk7CisgICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICAgICAgLy8gU3RvcmVzIGEgbmFr
ZWQgaW50MzIgaW4gdGhlIHJlZ2lzdGVyIGZpbGUuCisgICAgICAgIHN0b3JlMzIocmV0dXJuVmFs
dWVSZWdpc3RlciwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgYXJnQ291bnREc3QgKiBzaXpl
b2YoUmVnaXN0ZXIpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCB0YWdGb3IoYXJnc09m
ZnNldCksIEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CisjZWxzZQorICAgIGFkZFNs
b3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgYWRkcmVzc0ZvcihhcmdzT2Zmc2V0KSkpOwor
I2VuZGlmCisgICAgLy8gTG9hZCBhcmcgY291bnQgaW50byByZWdUMAorICAgIGVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyMzIoUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50LCByZWdUMCk7Cisg
ICAgc3RvcmVQdHIocmVnVDAsIGFkZHJlc3NGb3IoYXJnQ291bnREc3QpKTsKKyAgICBKdW1wIGVu
ZEJyYW5jaCA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgSW1tMzIoMSkpOworCisgICAgbXVsMzIo
SW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwLCByZWdUMyk7CisgICAgYWRkUHRyKEltbTMy
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaXplb2YoUmVnaXN0ZXIpIC0gUmVnaXN0ZXJGaWxlOjpD
YWxsRnJhbWVIZWFkZXJTaXplICogc2l6ZW9mKFJlZ2lzdGVyKSkpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgcmVnVDEpOworICAgIHN1YlB0cihyZWdUMywgcmVnVDEpOyAvLyByZWdUMSBpcyBub3cgdGhl
IHN0YXJ0IG9mIHRoZSBvdXQgb2YgbGluZSBhcmd1bWVudHMKKyAgICBhZGRQdHIoSW1tMzIoYXJn
c09mZnNldCAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDIpOyAv
LyByZWdUMiBpcyB0aGUgdGFyZ2V0IGJ1ZmZlcgorICAgIAorICAgIC8vIEJvdW5kcyBjaGVjayB0
aGUgcmVnaXN0ZXJmaWxlCisgICAgYWRkUHRyKHJlZ1QyLCByZWdUMyk7CisgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoUHRyKEJlbG93LCBBYnNvbHV0ZUFkZHJlc3MoJm1fZ2xvYmFsRGF0YS0+aW50ZXJw
cmV0ZXItPnJlZ2lzdGVyRmlsZSgpLm1fZW5kKSwgcmVnVDMpKTsKKworICAgIHN1YjMyKEltbTMy
KDEpLCByZWdUMCk7CisgICAgTGFiZWwgbG9vcFN0YXJ0ID0gbGFiZWwoKTsKKyAgICBsb2FkUHRy
KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PigwIC0gMiAqIHNpemVvZihSZWdpc3RlcikpKSwgcmVnVDMpOworICAgIHN0b3JlUHRyKHJlZ1Qz
LCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QwLCBUaW1lc0VpZ2h0LCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oMCAtIHNpemVvZihSZWdpc3RlcikpKSk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBs
b2FkUHRyKEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihzaXplb2Yodm9pZCopIC0gMiAqIHNpemVvZihSZWdpc3RlcikpKSwgcmVnVDMpOwor
ICAgIHN0b3JlUHRyKHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QwLCBUaW1lc0VpZ2h0LCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZW9mKHZvaWQqKSAtIHNpemVvZihSZWdpc3RlcikpKSk7
CisjZW5kaWYKKyAgICBicmFuY2hTdWJQdHIoTm9uWmVybywgSW1tMzIoMSksIHJlZ1QwKS5saW5r
VG8obG9vcFN0YXJ0LCB0aGlzKTsKKyAgICBlbmRCcmFuY2gubGluayh0aGlzKTsKK30KKwordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2xvYWRfdmFyYXJncyhJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGlu
dCBhcmdDb3VudERzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50
IGFyZ3NPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIEp1bXBM
aXN0IHNsb3dKdW1wczsKKyAgICBKdW1wTGlzdCBlbmRCcmFuY2hlczsKKyAgICBpbnQgZXhwZWN0
ZWRQYXJhbXMgPSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzIC0gMTsKKyAgICBpZiAoZXhw
ZWN0ZWRQYXJhbXMpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRo
aXMsIGN0aV9vcF9sb2FkX3ZhcmFyZ3MpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEltbTMy
KGFyZ3NPZmZzZXQpKTsKKyAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgLy8gU3RvcmVzIGEgbmFr
ZWQgaW50MzIgaW4gdGhlIHJlZ2lzdGVyIGZpbGUuCisgICAgc3RvcmUzMihyZXR1cm5WYWx1ZVJl
Z2lzdGVyLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBhcmdDb3VudERzdCAqIHNpemVvZihS
ZWdpc3RlcikpKTsKK30KKwogLy8gRm9yIGJvdGggSlNWYWx1ZTMyXzY0IGFuZCBKU1ZhbHVlMzIK
ICNpZiBFTkFCTEUoSklUX1VTRV9TT0ZUX01PRFVMTykKICNpZiBDUFUoQVJNX1RSQURJVElPTkFM
KQo=
</data>
<flag name="review"
          id="57800"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>