<?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>20818</bug_id>
          
          <creation_ts>2008-09-12 17:30:10 -0700</creation_ts>
          <short_desc>&apos;instanceof&apos; operator is slow</short_desc>
          <delta_ts>2008-09-23 20:48:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>
          
          <blocked>20813</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Cameron Zwarich (cpst)">zwarich</reporter>
          <assigned_to name="Maciej Stachowiak">mjs</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>90997</commentid>
    <comment_count>0</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-12 17:30:10 -0700</bug_when>
    <thetext>JSObject::hasInstance() shows up as 3.1% of the Shark profile for the V8 Earley-Boyer benchmark, so we should try to speed it up a bit. The isObject() check in the op_instanceof also shows up as 2.4% of the Shark profile, but I will make a separate bug for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91163</commentid>
    <comment_count>1</comment_count>
      <attachid>23427</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-09-14 18:52:39 -0700</bug_when>
    <thetext>Created attachment 23427
enable PIC of the &quot;prototype&quot; property lookup, this saves half the time...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91164</commentid>
    <comment_count>2</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-09-14 18:53:49 -0700</bug_when>
    <thetext>(This will probably require more work to save the rest of the time).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91165</commentid>
    <comment_count>3</comment_count>
      <attachid>23428</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-09-14 19:01:28 -0700</bug_when>
    <thetext>Created attachment 23428
enable PIC of the &quot;prototype&quot; property lookup (this time for sure)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91166</commentid>
    <comment_count>4</comment_count>
      <attachid>23428</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-14 19:07:01 -0700</bug_when>
    <thetext>Comment on attachment 23428
enable PIC of the &quot;prototype&quot; property lookup (this time for sure)

r=me

You have a double newline on line 818 of CodeGenerator.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91170</commentid>
    <comment_count>5</comment_count>
      <attachid>23428</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-09-14 19:23:19 -0700</bug_when>
    <thetext>Comment on attachment 23428
enable PIC of the &quot;prototype&quot; property lookup (this time for sure)

Unflagging and obsoleting because this has been landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92126</commentid>
    <comment_count>6</comment_count>
      <attachid>23650</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-09-22 07:55:07 -0700</bug_when>
    <thetext>Created attachment 23650
replace implementsHasInstance virtual call with a TypeInfo flag</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92127</commentid>
    <comment_count>7</comment_count>
      <attachid>23650</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-22 08:00:59 -0700</bug_when>
    <thetext>Comment on attachment 23650
replace implementsHasInstance virtual call with a TypeInfo flag

r=me, assuming you&apos;ve removed the tab in CodeGeneratorJS.pm and you put the speedup in the ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92162</commentid>
    <comment_count>8</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-09-22 11:23:02 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 23650 [edit])
&gt; r=me, assuming you&apos;ve removed the tab in CodeGeneratorJS.pm and you put the
&gt; speedup in the ChangeLog.

http://trac.webkit.org/changeset/36766

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92260</commentid>
    <comment_count>9</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-09-22 19:20:06 -0700</bug_when>
    <thetext>Reopening since there is more speedup yet to come.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92261</commentid>
    <comment_count>10</comment_count>
      <attachid>23650</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-09-22 19:20:26 -0700</bug_when>
    <thetext>Comment on attachment 23650
replace implementsHasInstance virtual call with a TypeInfo flag

Unflag and obsolete this patch since it ahs been landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92262</commentid>
    <comment_count>11</comment_count>
      <attachid>23690</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-09-22 19:24:59 -0700</bug_when>
    <thetext>Created attachment 23690
use a TypeInfo bit to inline hasInfo and do the checks in a smarter order in the common case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92266</commentid>
    <comment_count>12</comment_count>
      <attachid>23690</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-22 19:49:12 -0700</bug_when>
    <thetext>Comment on attachment 23690
use a TypeInfo bit to inline hasInfo and do the checks in a smarter order in the common case

From the caller&apos;s point of view, customHasInstance is still just hasInstance, so I&apos;m not sure it was an improvement to rename it.

Since you wrote different hasInstance code in cti_op_instanceof, there&apos;s no need for the standardHasInstance inline function, so you could have also just left it  alone.

You could have named the flag OverridesHasInstance.

This:

    valueCell-&gt;structureID()-&gt;typeInfo().type() != ObjectType

Is this same as !isObject(). Why did you write it the longer way?

r=me with or without changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92341</commentid>
    <comment_count>13</comment_count>
      <attachid>23705</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-09-23 10:02:33 -0700</bug_when>
    <thetext>Created attachment 23705
inline JIT the fast paths of instanceof

I am not sure it is a good idea to emit quite so much code inline for instanceof.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92343</commentid>
    <comment_count>14</comment_count>
      <attachid>23705</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-23 10:10:17 -0700</bug_when>
    <thetext>Comment on attachment 23705
inline JIT the fast paths of instanceof

Your ASSERT on Machine.cpp:4203 is in the wrong style; the ||&apos;s should be on the beginning of the lines, not the end.

Other than that, r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92465</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-23 20:48:28 -0700</bug_when>
    <thetext>OK, now I believe this is done.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23427</attachid>
            <date>2008-09-14 18:52:39 -0700</date>
            <delta_ts>2008-09-14 19:01:28 -0700</delta_ts>
            <desc>enable PIC of the &quot;prototype&quot; property lookup, this saves half the time...</desc>
            <filename>instanceof-logging.patch.txt</filename>
            <type>text/plain</type>
            <size>2282</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IFZNL01hY2hpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL01hY2hpbmUuY3BwCShyZXZp
c2lvbiAzNjQwMykKKysrIFZNL01hY2hpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIzLDEx
ICsyMDIzLDI5IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKIAog
ICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsID0gcltiYXNlXS5qc1ZhbHVlKGV4ZWMpOwogCi0gICAg
ICAgIGlmIChpc05vdE9iamVjdChleGVjLCB0cnVlLCBjb2RlQmxvY2ssIHZQQywgYmFzZVZhbCwg
ZXhjZXB0aW9uVmFsdWUpKQorICAgICAgICBwcmludGYoIm9wX2luc3RhbmNlb2YgdlBDOiAlcCAt
IGJhc2U6ICVwIiwgdlBDLCBiYXNlVmFsKTsKKyAgICAgICAgaWYgKGlzTm90T2JqZWN0KGV4ZWMs
IHRydWUsIGNvZGVCbG9jaywgdlBDLCBiYXNlVmFsLCBleGNlcHRpb25WYWx1ZSkpIHsKKyAgICAg
ICAgICAgIHByaW50ZigiIC0gRkFJTDogYmFzZSBpcyBub3QgYW4gb2JqZWN0Iik7CiAgICAgICAg
ICAgICBnb3RvIHZtX3Rocm93OworICAgICAgICB9CiAKICAgICAgICAgSlNPYmplY3QqIGJhc2VP
YmogPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGJhc2VWYWwpOworCisgICAgICAgIHByaW50Zigi
IGJhc2UgU0lEOiAlcCBiYXNlIHByb3RvdHlwZTogJXAgKG9mZiAlbGQpIGltcGwgSEk6ICVzIiwg
YmFzZU9iai0+c3RydWN0dXJlSUQoKSwgYmFzZU9iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5wcm90b3R5cGUpLCBiYXNlT2JqLT5zdHJ1Y3R1cmVJRCgpLT5wcm9wZXJ0eU1hcCgp
LmdldE9mZnNldChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlKSwgYmFzZU9iai0+aW1w
bGVtZW50c0hhc0luc3RhbmNlKCkgPyAieWVzIiA6ICJubyIpOworCisgICAgICAgIEpTVmFsdWUq
IHRlc3RWYWx1ZSA9IHJbdmFsdWVdLmpzVmFsdWUoZXhlYyk7CisgICAgICAgIGlmICghSlNJbW1l
ZGlhdGU6OmlzSW1tZWRpYXRlKHRlc3RWYWx1ZSkpIHsKKyAgICAgICAgICAgIEpTQ2VsbCogdGVz
dENlbGwgPSAoSlNDZWxsKil0ZXN0VmFsdWU7CisgICAgICAgICAgICBwcmludGYoIiAtIHRlc3Qg
U0lEOiAlcCB0ZXN0IHByb3RvOiAlcCAtICIsIHRlc3RDZWxsLT5zdHJ1Y3R1cmVJRCgpLCB0ZXN0
Q2VsbC0+c3RydWN0dXJlSUQoKS0+c3RvcmVkUHJvdG90eXBlKCkpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgcHJpbnRmKCIgLSB0ZXN0IHZhbHVlIGlzIGltbWVkaWF0ZSAtIEZBSUwi
KTsKKyAgICAgICAgfQorCiAgICAgICAgIHJbZHN0XSA9IGpzQm9vbGVhbihiYXNlT2JqLT5pbXBs
ZW1lbnRzSGFzSW5zdGFuY2UoKSA/IGJhc2VPYmotPmhhc0luc3RhbmNlKGV4ZWMsIHJbdmFsdWVd
LmpzVmFsdWUoZXhlYykpIDogZmFsc2UpOworICAgICAgICBpZiAocltkc3RdLmpzVmFsdWUoZXhl
YykgPT0ganNCb29sZWFuKGZhbHNlKSkgCisgICAgICAgICAgICBwcmludGYoIkZBSUxcbiIpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBwcmludGYoIlBBU1NcbiIpOwogCiAgICAgICAgICsr
dlBDOwogICAgICAgICBORVhUX09QQ09ERTsKSW5kZXg6IHd0Zi9QbGF0Zm9ybS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHd0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiAzNjQwMykKKysrIHd0Zi9QbGF0Zm9ybS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNDUsMTIgKzM0NSwxMiBAQAogCiAvLyBDVEkgb25seSBzdXBw
b3J0cyB4ODYgYXQgdGhlIG1vbWVudCwgYW5kIGhhcyBvbmx5IGJlZW4gdGVzdGVkIG9uIE1hYyBh
bmQgV2luZG93cy4KICNpZiAhZGVmaW5lZChFTkFCTEVfQ1RJKSAmJiBQTEFURk9STShYODYpICYm
IChQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKFdJTikpCi0jZGVmaW5lIEVOQUJMRV9DVEkgMQor
I2RlZmluZSBFTkFCTEVfQ1RJIDAKICNlbmRpZgogCiAvLyBXUkVDIG9ubHkgc3VwcG9ydHMgeDg2
IGF0IHRoZSBtb21lbnQsIGFuZCBoYXMgb25seSBiZWVuIHRlc3RlZCBvbiBNYWMgYW5kIFdpbmRv
d3MuCiAjaWYgIWRlZmluZWQoRU5BQkxFX1dSRUMpICYmIFBMQVRGT1JNKFg4NikgJiYgKFBMQVRG
T1JNKE1BQykgfHwgUExBVEZPUk0oV0lOKSkKLSNkZWZpbmUgRU5BQkxFX1dSRUMgMQorI2RlZmlu
ZSBFTkFCTEVfV1JFQyAwCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDVEkpIHx8IEVOQUJMRShXUkVD
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23428</attachid>
            <date>2008-09-14 19:01:28 -0700</date>
            <delta_ts>2008-09-14 19:23:19 -0700</delta_ts>
            <desc>enable PIC of the &quot;prototype&quot; property lookup (this time for sure)</desc>
            <filename>instanceof-speedup.patch.txt</filename>
            <type>text/plain</type>
            <size>12130</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM2NDE2
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAKKzIwMDgtMDkt
MTQgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIC0gc3BsaXQgdGhlICJwcm90
b3R5cGUiIGxvb2t1cCBmb3IgaGFzSW5zdGFuY2UgaW50byBvcGNvZGUgc3RyZWFtIHNvIGl0IGNh
biBiZSBjYWNoZWQKKyAgICAgICAgCisgICAgICAgIH41JSBzcGVlZHVwIG9uIHY4IGVhcmxleS1i
b3llciB0ZXN0CisKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5oOiBBZGQgYSBwYXJh
bWV0ZXIgZm9yIHRoZSBwcmUtbG9va2VkLXVwIHByb3RvdHlwZS4KKyAgICAgICAgKiBBUEkvSlND
YWxsYmFja09iamVjdEZ1bmN0aW9ucy5oOgorICAgICAgICAoSlNDOjo6Omhhc0luc3RhbmNlKTog
RGl0dG8uCisgICAgICAgICogQVBJL0pTVmFsdWVSZWYuY3BwOgorICAgICAgICAoSlNWYWx1ZUlz
SW5zdGFuY2VPZkNvbnN0cnVjdG9yKTogTG9vayB1cCBhbmQgcGFzcyBpbiBwcm90b3R5cGUuCisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIFZNL0NUSS5jcHA6CisgICAg
ICAgIChKU0M6OkNUSTo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6IFBhc3MgYWxvbmcgcHJvdG90
eXBlLgorICAgICAgICAqIFZNL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6ZHVtcCk6IFByaW50IHRoaXJkIGFyZy4KKyAgICAgICAgKiBWTS9Db2RlR2VuZXJhdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6Q29kZUdlbmVyYXRvcjo6ZW1pdEluc3RhbmNlT2YpOiBJbXBsZW1l
bnQgdGhpcywgbm93IHRoYXQgdGhlcmUKKyAgICAgICAgaXMgYSB0aGlyZCBhcmd1bWVudC4KKyAg
ICAgICAgKiBWTS9Db2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogVk0vTWFjaGluZS5jcHA6Cisg
ICAgICAgIChKU0M6Ok1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKTogUGFzcyBhbG9uZyB0aGUgcHJv
dG90eXBlLgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpjdGlfb3BfaW5zdGFuY2VvZik6IGRpdHRv
CisgICAgICAgICoga2pzL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omhh
c0luc3RhbmNlKTogRXhwZWN0IHRvIGdldCBhIHByZS1sb29rZWQtdXAgcHJvdG90eXBlLgorICAg
ICAgICAqIGtqcy9KU09iamVjdC5oOgorICAgICAgICAqIGtqcy9ub2Rlcy5jcHA6CisgICAgICAg
IChKU0M6Okluc3RhbmNlT2ZOb2RlOjplbWl0Q29kZSk6IEVtaXQgYSBnZXRfYnlfaWQgb2YgdGhl
IHByb3RvdHlwZQorICAgICAgICBwcm9wZXJ0eSBhbmQgcGFzcyB0aGF0IHJlZ2lzdGVyIHRvIGlu
c3RhbmNlb2YuCisgICAgICAgICoga2pzL25vZGVzLmg6CisKIDIwMDgtMDktMTQgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFNhbSBXZWluaWcuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS5leHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUuZXhwCShyZXZpc2lvbiAzNjQxNSkKKysrIEphdmFTY3JpcHRDb3JlLmV4cAko
d29ya2luZyBjb3B5KQpAQCAtMjE2LDcgKzIxNiw3IEBAIF9fWk4zSlNDOERlYnVnZ2VyNmF0dGFj
aEVQTlNfMTRKU0dsb2JhbE8KIF9fWk4zSlNDOERlYnVnZ2VyNmRldGFjaEVQTlNfMTRKU0dsb2Jh
bE9iamVjdEUKIF9fWk4zSlNDOERlYnVnZ2VyQzJFdgogX19aTjNKU0M4RGVidWdnZXJEMkV2Ci1f
X1pOM0pTQzhKU09iamVjdDExaGFzSW5zdGFuY2VFUE5TXzlFeGVjU3RhdGVFUE5TXzdKU1ZhbHVl
RQorX19aTjNKU0M4SlNPYmplY3QxMWhhc0luc3RhbmNlRVBOU185RXhlY1N0YXRlRVBOU183SlNW
YWx1ZUVTNF8KIF9fWk4zSlNDOEpTT2JqZWN0MTJkZWZpbmVHZXR0ZXJFUE5TXzlFeGVjU3RhdGVF
UktOU18xMElkZW50aWZpZXJFUFMwXwogX19aTjNKU0M4SlNPYmplY3QxMmRlZmluZVNldHRlckVQ
TlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVQUzBfCiBfX1pOM0pTQzhKU09iamVjdDEy
bG9va3VwR2V0dGVyRVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRQpJbmRleDogQVBJ
L0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBUEkvSlNDYWxsYmFja09iamVjdC5o
CShyZXZpc2lvbiAzNjQxNSkKKysrIEFQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYwLDcgKzYwLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJv
cGVydHkoRXhlY1N0YXRlKiwgdW5zaWduZWQpOwogCiAgICAgdmlydHVhbCBib29sIGltcGxlbWVu
dHNIYXNJbnN0YW5jZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBoYXNJbnN0YW5jZShFeGVj
U3RhdGUgKmV4ZWMsIEpTVmFsdWUgKnZhbHVlKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzSW5zdGFu
Y2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSwgSlNWYWx1ZSogcHJvdG8pOwogCiAg
ICAgdmlydHVhbCB2b2lkIGdldFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
QXJyYXkmKTsKIApJbmRleDogQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBBUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCShyZXZpc2lvbiAzNjQxNSkK
KysrIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
Myw3ICsyODMsNyBAQCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OmltcGxlbWVudHNICiB9
CiAKIHRlbXBsYXRlIDxjbGFzcyBCYXNlPgotYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+Ojpo
YXNJbnN0YW5jZShFeGVjU3RhdGUgKmV4ZWMsIEpTVmFsdWUgKnZhbHVlKQorYm9vbCBKU0NhbGxi
YWNrT2JqZWN0PEJhc2U+OjpoYXNJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZh
bHVlLCBKU1ZhbHVlKikKIHsKICAgICBKU0NvbnRleHRSZWYgZXhlY1JlZiA9IHRvUmVmKGV4ZWMp
OwogICAgIEpTT2JqZWN0UmVmIHRoaXNSZWYgPSB0b1JlZih0aGlzKTsKSW5kZXg6IEFQSS9KU1Zh
bHVlUmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBUEkvSlNWYWx1ZVJlZi5jcHAJKHJldmlzaW9uIDM2
NDE1KQorKysgQVBJL0pTVmFsdWVSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNyArMTQ2
LDcgQEAgYm9vbCBKU1ZhbHVlSXNJbnN0YW5jZU9mQ29uc3RydWN0b3IoSlNDbwogICAgIEpTT2Jq
ZWN0KiBqc0NvbnN0cnVjdG9yID0gdG9KUyhjb25zdHJ1Y3Rvcik7CiAgICAgaWYgKCFqc0NvbnN0
cnVjdG9yLT5pbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGJvb2wgcmVzdWx0ID0ganNDb25zdHJ1Y3Rvci0+aGFzSW5zdGFuY2UoZXhlYywganNWYWx1
ZSk7IC8vIGZhbHNlIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24KKyAgICBib29sIHJlc3VsdCA9
IGpzQ29uc3RydWN0b3ItPmhhc0luc3RhbmNlKGV4ZWMsIGpzVmFsdWUsIGpzQ29uc3RydWN0b3It
PmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlKSk7IC8vIGZhbHNlIGlm
IGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24KICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsK
ICAgICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihl
eGVjLT5leGNlcHRpb24oKSk7CkluZGV4OiBWTS9DVEkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL0NU
SS5jcHAJKHJldmlzaW9uIDM2NDE1KQorKysgVk0vQ1RJLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjMwLDkgKzYzMCwxMCBAQCB2b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAg
ICAgIGNhc2Ugb3BfaW5zdGFuY2VvZjogewogICAgICAgICAgICAgZW1pdEdldFB1dEFyZyhpbnN0
cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7CiAgICAgICAgICAgICBlbWl0
R2V0UHV0QXJnKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDQsIFg4Njo6ZWN4KTsKKyAg
ICAgICAgICAgIGVtaXRHZXRQdXRBcmcoaW5zdHJ1Y3Rpb25baSArIDRdLnUub3BlcmFuZCwgOCwg
WDg2OjplY3gpOwogICAgICAgICAgICAgZW1pdENhbGwoaSwgTWFjaGluZTo6Y3RpX29wX2luc3Rh
bmNlb2YpOwogICAgICAgICAgICAgZW1pdFB1dFJlc3VsdChpbnN0cnVjdGlvbltpICsgMV0udS5v
cGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGkgKz0gNTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfZGVsX2J5X2lkOiB7Cklu
ZGV4OiBWTS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL0NvZGVCbG9jay5jcHAJKHJl
dmlzaW9uIDM2NDE1KQorKysgVk0vQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg4
LDcgKzQ4OCwxMSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMsIGNvCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2luc3RhbmNlb2Y6
IHsKLSAgICAgICAgICAgIHByaW50QmluYXJ5T3AobG9jYXRpb24sIGl0LCAiaW5zdGFuY2VvZiIp
OworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBp
bnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIzID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBwcmludGYoIlslNGRdIGluc3RhbmNlb2ZcdFx0ICVzLCAlcywgJXMsICVzXG4iLCBs
b2NhdGlvbiwgcmVnaXN0ZXJOYW1lKHIwKS5jX3N0cigpLCByZWdpc3Rlck5hbWUocjEpLmNfc3Ry
KCksIHJlZ2lzdGVyTmFtZShyMikuY19zdHIoKSwgcmVnaXN0ZXJOYW1lKHIzKS5jX3N0cigpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfdHlwZW9mOiB7
CkluZGV4OiBWTS9Db2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9Db2RlR2VuZXJh
dG9yLmNwcAkocmV2aXNpb24gMzY0MTUpCisrKyBWTS9Db2RlR2VuZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODA1LDYgKzgwNSwxNyBAQCBib29sIENvZGVHZW5lcmF0b3I6OmZpbmRTY29w
ZWRQcm9wZXJ0eShjCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK1JlZ2lzdGVySUQqIENvZGVHZW5l
cmF0b3I6OmVtaXRJbnN0YW5jZU9mKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogdmFsdWUs
IFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGJhc2VQcm90b3R5cGUpCit7IAorICAgIGVt
aXRPcGNvZGUob3BfaW5zdGFuY2VvZik7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+
aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5pbmRleCgpKTsKKyAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGJhc2VQcm90b3R5cGUtPmluZGV4KCkpOworICAgIHJldHVybiBkc3Q7Cit9CisK
KwogUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmUoUmVnaXN0ZXJJRCogZHN0
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKIHsKICAgICBzaXplX3QgZGVwdGggPSAwOwpJ
bmRleDogVk0vQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL0NvZGVHZW5lcmF0b3Iu
aAkocmV2aXNpb24gMzY0MTUpCisrKyBWTS9Db2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI1Miw3ICsyNTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCog
ZW1pdFBvc3RJbmMoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmNEc3QpOwogICAgICAg
ICBSZWdpc3RlcklEKiBlbWl0UG9zdERlYyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNy
Y0RzdCk7CiAKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEluc3RhbmNlT2YoUmVnaXN0ZXJJRCog
ZHN0LCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVnaXN0ZXJJRCogYmFzZSkgeyByZXR1cm4gZW1pdEJp
bmFyeU9wKG9wX2luc3RhbmNlb2YsIGRzdCwgdmFsdWUsIGJhc2UpOyB9CisgICAgICAgIFJlZ2lz
dGVySUQqIGVtaXRJbnN0YW5jZU9mKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogdmFsdWUs
IFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGJhc2VQcm90b3R5cGUpOwogICAgICAgICBS
ZWdpc3RlcklEKiBlbWl0VHlwZU9mKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKSB7
IHJldHVybiBlbWl0VW5hcnlPcChvcF90eXBlb2YsIGRzdCwgc3JjKTsgfQogICAgICAgICBSZWdp
c3RlcklEKiBlbWl0SW4oUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBwcm9wZXJ0eSwgUmVn
aXN0ZXJJRCogYmFzZSkgeyByZXR1cm4gZW1pdEJpbmFyeU9wKG9wX2luLCBkc3QsIHByb3BlcnR5
LCBiYXNlKTsgfQogCkluZGV4OiBWTS9NYWNoaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9NYWNo
aW5lLmNwcAkocmV2aXNpb24gMzY0MTUpCisrKyBWTS9NYWNoaW5lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjAzNywxMCArMjAzNywxNCBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0
ZShFeGVjdXRpCiAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgIH0KICAgICBCRUdJTl9PUENPREUo
b3BfaW5zdGFuY2VvZikgewotICAgICAgICAvKiBpbnN0YW5jZW9mIGRzdChyKSB2YWx1ZShyKSBj
b25zdHJ1Y3RvcihyKQorICAgICAgICAvKiBpbnN0YW5jZW9mIGRzdChyKSB2YWx1ZShyKSBjb25z
dHJ1Y3RvcihyKSBjb25zdHJ1Y3RvclByb3RvKHIpCiAKICAgICAgICAgICAgVGVzdHMgd2hldGhl
ciByZWdpc3RlciB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZiByZWdpc3RlcgotICAgICAgICAgICBj
b25zdHJ1Y3RvciwgYW5kIHB1dHMgdGhlIGJvb2xlYW4gcmVzdWx0IGluIHJlZ2lzdGVyIGRzdC4K
KyAgICAgICAgICAgY29uc3RydWN0b3IsIGFuZCBwdXRzIHRoZSBib29sZWFuIHJlc3VsdCBpbiBy
ZWdpc3RlcgorICAgICAgICAgICBkc3QuIFJlZ2lzdGVyIGNvbnN0cnVjdG9yUHJvdG8gbXVzdCBj
b250YWluIHRoZSAicHJvdG90eXBlIgorICAgICAgICAgICBwcm9wZXJ0eSAobm90IHRoZSBhY3R1
YWwgcHJvdG90eXBlKSBvZiB0aGUgb2JqZWN0IGluCisgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0
cnVjdG9yLiBUaGlzIGxvb2t1cCBpcyBzZXBhcmF0ZWQgc28gdGhhdAorICAgICAgICAgICBwb2x5
bW9ycGhpYyBpbmxpbmUgY2FjaGluZyBjYW4gYXBwbHkuCiAKICAgICAgICAgICAgUmFpc2VzIGFu
IGV4Y2VwdGlvbiBpZiByZWdpc3RlciBjb25zdHJ1Y3RvciBpcyBub3QgYW4KICAgICAgICAgICAg
b2JqZWN0LgpAQCAtMjA0OCw2ICsyMDUyLDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4
ZWN1dGUoRXhlY3V0aQogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAg
ICAgICBpbnQgdmFsdWUgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBiYXNlID0g
KCsrdlBDKS0+dS5vcGVyYW5kOworICAgICAgICBpbnQgYmFzZVByb3RvID0gKCsrdlBDKS0+dS5v
cGVyYW5kOwogCiAgICAgICAgIEpTVmFsdWUqIGJhc2VWYWwgPSByW2Jhc2VdLmpzVmFsdWUoZXhl
Yyk7CiAKQEAgLTIwNTUsNyArMjA2MCw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVj
dXRlKEV4ZWN1dGkKICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7CiAKICAgICAgICAgSlNPYmpl
Y3QqIGJhc2VPYmogPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGJhc2VWYWwpOwotICAgICAgICBy
W2RzdF0gPSBqc0Jvb2xlYW4oYmFzZU9iai0+aW1wbGVtZW50c0hhc0luc3RhbmNlKCkgPyBiYXNl
T2JqLT5oYXNJbnN0YW5jZShleGVjLCByW3ZhbHVlXS5qc1ZhbHVlKGV4ZWMpKSA6IGZhbHNlKTsK
KyAgICAgICAgcltkc3RdID0ganNCb29sZWFuKGJhc2VPYmotPmltcGxlbWVudHNIYXNJbnN0YW5j
ZSgpID8gYmFzZU9iai0+aGFzSW5zdGFuY2UoZXhlYywgclt2YWx1ZV0uanNWYWx1ZShleGVjKSwg
cltiYXNlUHJvdG9dLmpzVmFsdWUoZXhlYykpIDogZmFsc2UpOwogCiAgICAgICAgICsrdlBDOwog
ICAgICAgICBORVhUX09QQ09ERTsKQEAgLTQxNzYsNyArNDE4MSw4IEBAIEpTVmFsdWUqIE1hY2hp
bmU6OmN0aV9vcF9pbnN0YW5jZW9mKENUSV8KICAgICB9CiAKICAgICBKU09iamVjdCogYmFzZU9i
aiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oYmFzZVZhbCk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0
ID0ganNCb29sZWFuKGJhc2VPYmotPmltcGxlbWVudHNIYXNJbnN0YW5jZSgpID8gYmFzZU9iai0+
aGFzSW5zdGFuY2UoZXhlYywgIEFSR19zcmMxKSA6IGZhbHNlKTsKKyAgICBKU1ZhbHVlKiBiYXNl
UHJvdG90eXBlID0gQVJHX3NyYzM7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNCb29sZWFuKGJh
c2VPYmotPmltcGxlbWVudHNIYXNJbnN0YW5jZSgpID8gYmFzZU9iai0+aGFzSW5zdGFuY2UoZXhl
YywgIEFSR19zcmMxLCBiYXNlUHJvdG90eXBlKSA6IGZhbHNlKTsKICAgICBWTV9DSEVDS19FWENF
UFRJT05fQVRfRU5EKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IGtqcy9KU09iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga2pzL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMzY0MTUpCisr
KyBranMvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODksOSArMzg5LDggQEAgYm9v
bCBKU09iamVjdDo6aW1wbGVtZW50c0hhc0luc3RhbmNlKCkgYwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotYm9vbCBKU09iamVjdDo6aGFzSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
KiB2YWx1ZSkKK2Jvb2wgSlNPYmplY3Q6Omhhc0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSogdmFsdWUsIEpTVmFsdWUqIHByb3RvKQogewotICAgIEpTVmFsdWUqIHByb3RvID0gZ2V0
KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpOwogICAgIGlmICghcHJvdG8t
PmlzT2JqZWN0KCkpIHsKICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJpbnN0
YW5jZW9mIGNhbGxlZCBvbiBhbiBvYmplY3Qgd2l0aCBhbiBpbnZhbGlkIHByb3RvdHlwZSBwcm9w
ZXJ0eS4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDoga2pzL0pTT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0ga2pzL0pTT2JqZWN0LmgJKHJldmlzaW9uIDM2NDE1KQorKysga2pzL0pTT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiwgUHJlZmVy
cmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CiAKICAgICAgICAgdmlydHVhbCBib29sIGltcGxlbWVu
dHNIYXNJbnN0YW5jZSgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzSW5zdGFuY2Uo
RXhlY1N0YXRlKiwgSlNWYWx1ZSopOworICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzSW5zdGFuY2Uo
RXhlY1N0YXRlKiwgSlNWYWx1ZSosIEpTVmFsdWUqIHByb3RvdHlwZVByb3BlcnR5KTsKIAogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWVBcnJheSYpOwogCkluZGV4OiBranMvbm9kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9ub2Rl
cy5jcHAJKHJldmlzaW9uIDM2NDE1KQorKysga2pzL25vZGVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzk0LDYgKzc5NCwxNSBAQCBSZWdpc3RlcklEKiBUaHJvd2FibGVCaW5hcnlPcE5vZGU6OmVt
aXRDCiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0QmluYXJ5T3Aob3Bjb2RlKCksIGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSksIHNyYzEuZ2V0KCksIHNyYzIpOwog
fQogCitSZWdpc3RlcklEKiBJbnN0YW5jZU9mTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCit7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNy
YzEgPSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JMZWZ0SGFuZFNpZGUobV9leHByMS5nZXQoKSwgbV9y
aWdodEhhc0Fzc2lnbm1lbnRzLCBtX2V4cHIyLT5pc1B1cmUoZ2VuZXJhdG9yKSk7CisgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHNyYzIgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMi5nZXQoKSk7
CisgICAgUmVnaXN0ZXJJRCogc3JjMlByb3RvdHlwZSA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNyYzIuZ2V0KCksIGdlbmVyYXRvci5nbG9iYWxFeGVj
KCktPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVz
c2lvbkluZm8obV9kaXZvdCwgbV9zdGFydE9mZnNldCwgbV9lbmRPZmZzZXQpOworICAgIHJldHVy
biBnZW5lcmF0b3IuZW1pdEluc3RhbmNlT2YoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0
LCBzcmMxLmdldCgpKSwgc3JjMS5nZXQoKSwgc3JjMi5nZXQoKSwgc3JjMlByb3RvdHlwZSk7Cit9
CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCaW5hcnkgTG9naWNhbCBOb2Rl
cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIExvZ2ljYWxPcE5v
ZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpJ
bmRleDoga2pzL25vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL25vZGVzLmgJKHJldmlzaW9uIDM2
NDE1KQorKysga2pzL25vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MjcsNiArMTQyNyw4IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIE9wY29kZUlEIG9wY29kZSgpIGNvbnN0
IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gb3BfaW5zdGFuY2VvZjsgfQogICAgICAgICB2aXJ0dWFs
IHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKICAgICAg
ICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUmVs
YXRpb25hbDsgfQorCisgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdl
bmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKICAgICB9OwogCiAgICAg
Y2xhc3MgSW5Ob2RlIDogcHVibGljIFRocm93YWJsZUJpbmFyeU9wTm9kZSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23650</attachid>
            <date>2008-09-22 07:55:07 -0700</date>
            <delta_ts>2008-09-22 19:20:26 -0700</delta_ts>
            <desc>replace implementsHasInstance virtual call with a TypeInfo flag</desc>
            <filename>instanceof-speedup-1.patch.txt</filename>
            <type>text/plain</type>
            <size>15570</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM2NzY1KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzUgQEAKKzIwMDgtMDktMjIgIE1hY2llaiBT
dGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIC0gc3BlZWQgdXAgaW5zdGFuY2VvZiBvcGVyYXRv
ciBieSByZXBsYWNpbmcgaW1wbGVtZW50c0hhc0luc3RhbmNlIG1ldGhvZCB3aXRoIGEgVHlwZUlu
Zm8gZmxhZworCisgICAgICAgIFBhcnRpYWwgd29yayB0b3dhcmRzIDxodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4MTg+CisKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFj
a0NvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmg6
CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlSUQp
OgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwOgorICAgICAgICAqIEFQSS9K
U0NhbGxiYWNrRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja0Z1bmN0aW9uOjpj
cmVhdGVTdHJ1Y3R1cmVJRCk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3QuaDoKKyAg
ICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDo6Y3JlYXRlU3RydWN0dXJlSUQpOgorICAgICAg
ICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6Ojo6aGFz
SW5zdGFuY2UpOgorICAgICAgICAqIEFQSS9KU1ZhbHVlUmVmLmNwcDoKKyAgICAgICAgKEpTVmFs
dWVJc0luc3RhbmNlT2ZDb25zdHJ1Y3Rvcik6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhw
OgorICAgICAgICAqIFZNL01hY2hpbmUuY3BwOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpwcml2
YXRlRXhlY3V0ZSk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9pbnN0YW5jZW9mKToK
KyAgICAgICAgKiBranMvSW50ZXJuYWxGdW5jdGlvbi5jcHA6CisgICAgICAgICoga2pzL0ludGVy
bmFsRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3Ry
dWN0dXJlSUQpOgorICAgICAgICAqIGtqcy9KU09iamVjdC5jcHA6CisgICAgICAgICoga2pzL0pT
T2JqZWN0Lmg6CisgICAgICAgICoga2pzL1R5cGVJbmZvLmg6CisgICAgICAgIChKU0M6OlR5cGVJ
bmZvOjppbXBsZW1lbnRzSGFzSW5zdGFuY2UpOgorCiAyMDA4LTA5LTIyICBNYWNpZWogU3RhY2hv
d2lhayAgPG1qc0BhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dC4K
SW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDM2NzYzKQorKysgSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTEsNyAr
MjkxLDYgQEAgX19aTkszSlNDMTJTdHJpbmdPYmplY3QxMnRvVGhpc1N0cmluZ0VQTgogX19aTksz
SlNDMTJTdHJpbmdPYmplY3Q4dG9TdHJpbmdFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0MxNEpT
R2xvYmFsT2JqZWN0MTRpc0R5bmFtaWNTY29wZUV2CiBfX1pOSzNKU0MxNEpTR2xvYmFsT2JqZWN0
MTR0b0dsb2JhbE9iamVjdEVQTlNfOUV4ZWNTdGF0ZUUKLV9fWk5LM0pTQzE2SW50ZXJuYWxGdW5j
dGlvbjIxaW1wbGVtZW50c0hhc0luc3RhbmNlRXYKIF9fWk5LM0pTQzE2SlNWYXJpYWJsZU9iamVj
dDE2aXNWYXJpYWJsZU9iamVjdEV2CiBfX1pOSzNKU0MxNkpTVmFyaWFibGVPYmplY3QyMWdldFBy
b3BlcnR5QXR0cmlidXRlc0VQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVSagogX19a
TkszSlNDMTdEZWJ1Z2dlckNhbGxGcmFtZTEwdGhpc09iamVjdEV2CkBAIC0zMjgsNyArMzI3LDYg
QEAgX19aTkszSlNDOEpTT2JqZWN0MTJkZWZhdWx0VmFsdWVFUE5TXzlFeAogX19aTkszSlNDOEpT
T2JqZWN0MTJ0b1RoaXNPYmplY3RFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0M4SlNPYmplY3Qx
NHRvR2xvYmFsT2JqZWN0RVBOU185RXhlY1N0YXRlRQogX19aTkszSlNDOEpTT2JqZWN0MjFnZXRQ
cm9wZXJ0eUF0dHJpYnV0ZXNFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUmoKLV9f
Wk5LM0pTQzhKU09iamVjdDIxaW1wbGVtZW50c0hhc0luc3RhbmNlRXYKIF9fWk5LM0pTQzhKU09i
amVjdDh0b051bWJlckVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzhKU09iamVjdDh0b09iamVj
dEVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzhKU09iamVjdDh0b1N0cmluZ0VQTlNfOUV4ZWNT
dGF0ZUUKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3Iu
Y3BwCShyZXZpc2lvbiAzNjc2MykKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMSArNTEsNiBAQCBKU0NhbGxiYWNr
Q29uc3RydWN0b3I6On5KU0NhbGxiYWNrQ29uc3RyCiAgICAgICAgIEpTQ2xhc3NSZWxlYXNlKG1f
Y2xhc3MpOwogfQogCi1ib29sIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6aW1wbGVtZW50c0hhc0lu
c3RhbmNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogc3RhdGljIEpTT2JqZWN0
KiBjb25zdHJ1Y3RKU0NhbGxiYWNrKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVj
dG9yLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEpTQ29udGV4dFJlZiBjdHggPSB0b1Jl
ZihleGVjKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9y
LmgJKHJldmlzaW9uIDM2NzYzKQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25z
dHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSwxMiBAQCBwdWJsaWM6CiAgICAg
SlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvckNhbGxiYWNrIGNhbGxiYWNrKCkgY29uc3QgeyByZXR1
cm4gbV9jYWxsYmFjazsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKICAgICAK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gY3JlYXRlU3RydWN0dXJlSUQoSlNW
YWx1ZSogcHJvdG8pIAorICAgIHsgCisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmVJRDo6Y3JlYXRl
KHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBJbXBsZW1lbnRzSGFzSW5zdGFuY2UpKTsgCisg
ICAgfQorCiBwcml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzSGFzSW5zdGFuY2Uo
KSBjb25zdDsgICAgCiAgICAgdmlydHVhbCBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEo
Q29uc3RydWN0RGF0YSYpOwogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8o
KSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlND
YWxsYmFja0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlND
YWxsYmFja0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMzY3NjMpCisrKyBKYXZhU2NyaXB0Q29yZS9B
UEkvSlNDYWxsYmFja0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDYg
QEAgSlNDYWxsYmFja0Z1bmN0aW9uOjpKU0NhbGxiYWNrRnVuY3Rpb24oRQogewogfQogCi0vLyBJ
bnRlcm5hbEZ1bmN0aW9uIG1pc2gtbWFzaGVzIGNvbnN0cnVjdG9yIGFuZCBmdW5jdGlvbiBiZWhh
dmlvciAtLSB3ZSBzaG91bGQgCi0vLyByZWZhY3RvciB0aGUgY29kZSBzbyB0aGlzIG92ZXJyaWRl
IGlzbid0IG5lY2Vzc2FyeQotYm9vbCBKU0NhbGxiYWNrRnVuY3Rpb246OmltcGxlbWVudHNIYXNJ
bnN0YW5jZSgpIGNvbnN0Ci17IAotICAgIHJldHVybiBmYWxzZTsgCi19Ci0KIEpTVmFsdWUqIEpT
Q2FsbGJhY2tGdW5jdGlvbjo6Y2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlv
bk9iamVjdCwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAg
IEpTQ29udGV4dFJlZiBleGVjUmVmID0gdG9SZWYoZXhlYyk7CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oCShyZXZpc2lvbiAzNjc2MykKKysrIEphdmFTY3JpcHRD
b3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcs
MTQgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogICAgIAor
ICAgIC8vIEludGVybmFsRnVuY3Rpb24gbWlzaC1tYXNoZXMgY29uc3RydWN0b3IgYW5kIGZ1bmN0
aW9uIGJlaGF2aW9yIC0tIHdlIHNob3VsZCAKKyAgICAvLyByZWZhY3RvciB0aGUgY29kZSBzbyB0
aGlzIG92ZXJyaWRlIGlzbid0IG5lY2Vzc2FyeQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVj
dHVyZUlEPiBjcmVhdGVTdHJ1Y3R1cmVJRChKU1ZhbHVlKiBwcm90bykgCisgICAgeyAKKyAgICAg
ICAgcmV0dXJuIFN0cnVjdHVyZUlEOjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUp
KTsgCisgICAgfQorCiBwcml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzSGFzSW5z
dGFuY2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRh
Jik7CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0
dXJuICZpbmZvOyB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAko
cmV2aXNpb24gMzY3NjMpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCwxMSBAQCBwdWJsaWM6CiAgICAgSlNDbGFzc1Jl
ZiBjbGFzc1JlZigpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGJhY2tPYmplY3REYXRhLT5qc0NsYXNz
OyB9CiAgICAgYm9vbCBpbmhlcml0cyhKU0NsYXNzUmVmKSBjb25zdDsKIAorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBjcmVhdGVTdHJ1Y3R1cmVJRChKU1ZhbHVlKiBwcm90bykg
CisgICAgeyAKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZUlEOjpjcmVhdGUocHJvdG8sIFR5cGVJ
bmZvKE9iamVjdFR5cGUsIEltcGxlbWVudHNIYXNJbnN0YW5jZSkpOyAKKyAgICB9CisKIHByaXZh
dGU6CiAgICAgdmlydHVhbCBVU3RyaW5nIGNsYXNzTmFtZSgpIGNvbnN0OwogCkBAIC01OSw3ICs2
NCw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHko
RXhlY1N0YXRlKiwgdW5zaWduZWQpOwogCi0gICAgdmlydHVhbCBib29sIGltcGxlbWVudHNIYXNJ
bnN0YW5jZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBoYXNJbnN0YW5jZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUqIHZhbHVlLCBKU1ZhbHVlKiBwcm90byk7CiAKICAgICB2aXJ0dWFsIHZv
aWQgZ2V0UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYpOwpJbmRl
eDogSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCShy
ZXZpc2lvbiAzNjc2MykKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVu
Y3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3MywxNiArMjczLDYgQEAgSlNPYmplY3QqIEpT
Q2FsbGJhY2tPYmplY3Q8QmFzZT46OmNvbnN0cgogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgQmFzZT4K
LWJvb2wgSlNDYWxsYmFja09iamVjdDxCYXNlPjo6aW1wbGVtZW50c0hhc0luc3RhbmNlKCkgY29u
c3QKLXsKLSAgICBmb3IgKEpTQ2xhc3NSZWYganNDbGFzcyA9IGNsYXNzUmVmKCk7IGpzQ2xhc3M7
IGpzQ2xhc3MgPSBqc0NsYXNzLT5wYXJlbnRDbGFzcykKLSAgICAgICAgaWYgKGpzQ2xhc3MtPmhh
c0luc3RhbmNlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgQmFzZT4KIGJvb2wgSlNDYWxsYmFja09iamVjdDxC
YXNlPjo6aGFzSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSwgSlNWYWx1
ZSopCiB7CiAgICAgSlNDb250ZXh0UmVmIGV4ZWNSZWYgPSB0b1JlZihleGVjKTsKQEAgLTI5NCw4
ICsyODQsNyBAQCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46Omhhc0luc3RhbmNlCiAgICAg
ICAgICAgICByZXR1cm4gaGFzSW5zdGFuY2UoZXhlY1JlZiwgdGhpc1JlZiwgdG9SZWYodmFsdWUp
LCB0b1JlZihleGVjLT5leGNlcHRpb25TbG90KCkpKTsKICAgICAgICAgfQogICAgIH0KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gaW1wbGVtZW50c0hhc0luc3RhbmNlIHNob3VsZCBwcmV2
ZW50IHVzIGZyb20gcmVhY2hpbmcgaGVyZQotICAgIHJldHVybiAwOworICAgIHJldHVybiBmYWxz
ZTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIEJhc2U+CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkv
SlNWYWx1ZVJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVS
ZWYuY3BwCShyZXZpc2lvbiAzNjc2MykKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVm
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDcgKzE0NCw3IEBAIGJvb2wgSlNWYWx1ZUlzSW5z
dGFuY2VPZkNvbnN0cnVjdG9yKEpTQ28KIAogICAgIEpTVmFsdWUqIGpzVmFsdWUgPSB0b0pTKHZh
bHVlKTsKICAgICBKU09iamVjdCoganNDb25zdHJ1Y3RvciA9IHRvSlMoY29uc3RydWN0b3IpOwot
ICAgIGlmICghanNDb25zdHJ1Y3Rvci0+aW1wbGVtZW50c0hhc0luc3RhbmNlKCkpCisgICAgaWYg
KCFqc0NvbnN0cnVjdG9yLT5zdHJ1Y3R1cmVJRCgpLT50eXBlSW5mbygpLmltcGxlbWVudHNIYXNJ
bnN0YW5jZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYm9vbCByZXN1bHQgPSBqc0Nv
bnN0cnVjdG9yLT5oYXNJbnN0YW5jZShleGVjLCBqc1ZhbHVlLCBqc0NvbnN0cnVjdG9yLT5nZXQo
ZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSkpOyAvLyBmYWxzZSBpZiBhbiBl
eGNlcHRpb24gaXMgdGhyb3duCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9WTS9NYWNoaW5lLmNwcAkocmV2aXNpb24gMzY3NjQpCisrKyBKYXZhU2NyaXB0Q29yZS9W
TS9NYWNoaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEyMyw3ICsyMTIzLDcgQEAgSlNWYWx1
ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICAgZ290byB2bV90
aHJvdzsKIAogICAgICAgICBKU09iamVjdCogYmFzZU9iaiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0
Kj4oYmFzZVZhbCk7Ci0gICAgICAgIHJbZHN0XSA9IGpzQm9vbGVhbihiYXNlT2JqLT5pbXBsZW1l
bnRzSGFzSW5zdGFuY2UoKSA/IGJhc2VPYmotPmhhc0luc3RhbmNlKGV4ZWMsIHJbdmFsdWVdLmpz
VmFsdWUoZXhlYyksIHJbYmFzZVByb3RvXS5qc1ZhbHVlKGV4ZWMpKSA6IGZhbHNlKTsKKyAgICAg
ICAgcltkc3RdID0ganNCb29sZWFuKGJhc2VPYmotPnN0cnVjdHVyZUlEKCktPnR5cGVJbmZvKCku
aW1wbGVtZW50c0hhc0luc3RhbmNlKCkgPyBiYXNlT2JqLT5oYXNJbnN0YW5jZShleGVjLCByW3Zh
bHVlXS5qc1ZhbHVlKGV4ZWMpLCByW2Jhc2VQcm90b10uanNWYWx1ZShleGVjKSkgOiBmYWxzZSk7
CiAKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtNDMwNCw3ICs0MzA0
LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2luc3RhbmNlb2YoQ1RJXwogCiAgICAgSlNP
YmplY3QqIGJhc2VPYmogPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGJhc2VWYWwpOwogICAgIEpT
VmFsdWUqIGJhc2VQcm90b3R5cGUgPSBBUkdfc3JjMzsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBq
c0Jvb2xlYW4oYmFzZU9iai0+aW1wbGVtZW50c0hhc0luc3RhbmNlKCkgPyBiYXNlT2JqLT5oYXNJ
bnN0YW5jZShleGVjLCAgQVJHX3NyYzEsIGJhc2VQcm90b3R5cGUpIDogZmFsc2UpOworICAgIEpT
VmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbihiYXNlT2JqLT5zdHJ1Y3R1cmVJRCgpLT50eXBlSW5m
bygpLmltcGxlbWVudHNIYXNJbnN0YW5jZSgpID8gYmFzZU9iai0+aGFzSW5zdGFuY2UoZXhlYywg
IEFSR19zcmMxLCBiYXNlUHJvdG90eXBlKSA6IGZhbHNlKTsKICAgICBWTV9DSEVDS19FWENFUFRJ
T05fQVRfRU5EKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2tqcy9JbnRlcm5hbEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9r
anMvSW50ZXJuYWxGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDM2NzYzKQorKysgSmF2YVNjcmlwdENv
cmUva2pzL0ludGVybmFsRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw5ICs1MSw0
IEBAIGNvbnN0IFVTdHJpbmcmIEludGVybmFsRnVuY3Rpb246Om5hbWUoRXgKICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8SlNTdHJpbmcqPih2KS0+dmFsdWUoKTsKIH0KIAotYm9vbCBJbnRlcm5hbEZ1
bmN0aW9uOjppbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSBjb25zdAotewotICAgIHJldHVybiB0cnVl
OwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9JbnRl
cm5hbEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0ludGVybmFs
RnVuY3Rpb24uaAkocmV2aXNpb24gMzY3NjMpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSW50ZXJu
YWxGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCwxMSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgCiAgICAgICAgIGNvbnN0IFVTdHJpbmcmIG5hbWUoRXhlY1N0YXRlKik7
CiAKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IGNyZWF0ZVN0cnVjdHVy
ZUlEKEpTVmFsdWUqIHByb3RvKSAKKyAgICAgICAgeyAKKyAgICAgICAgICAgIHJldHVybiBTdHJ1
Y3R1cmVJRDo6Y3JlYXRlKHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBJbXBsZW1lbnRzSGFz
SW5zdGFuY2UpKTsgCisgICAgICAgIH0KKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgSW50ZXJu
YWxGdW5jdGlvbihQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmUpIDogSlNPYmplY3Qo
c3RydWN0dXJlKSB7IH0KICAgICAgICAgSW50ZXJuYWxGdW5jdGlvbihFeGVjU3RhdGUqKTsKQEAg
LTQ1LDcgKzUwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2
aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRhJikgPSAwOwotICAgICAgICB2aXJ0
dWFsIGJvb2wgaW1wbGVtZW50c0hhc0luc3RhbmNlKCkgY29uc3Q7CiAgICAgfTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU09iamVjdC5jcHAJKHJldmlzaW9uIDM2NzYz
KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mzg0LDExICszODQsNiBAQCBKU1ZhbHVlKiBKU09iamVjdDo6bG9va3VwU2V0dGVyKEV4ZWNTdGF0
CiAgICAgfQogfQogCi1ib29sIEpTT2JqZWN0OjppbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSBjb25z
dAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQogYm9vbCBKU09iamVjdDo6aGFzSW5zdGFuY2Uo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSwgSlNWYWx1ZSogcHJvdG8pCiB7CiAgICAg
aWYgKCFwcm90by0+aXNPYmplY3QoKSkgewpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pTT2JqZWN0LmgJKHJldmlz
aW9uIDM2NzYzKQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMyw3ICsxMDMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2aXJ0dWFs
IEpTVmFsdWUqIGRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBl
KSBjb25zdDsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0hhc0luc3RhbmNlKCkg
Y29uc3Q7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNJbnN0YW5jZShFeGVjU3RhdGUqLCBKU1Zh
bHVlKiwgSlNWYWx1ZSogcHJvdG90eXBlUHJvcGVydHkpOwogCiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jik7CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ranMvVHlwZUluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9ranMvVHlwZUluZm8uaAkocmV2aXNpb24gMzY3NjQpCisrKyBKYXZhU2NyaXB0Q29yZS9r
anMvVHlwZUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgIC8vIFdlYkNvcmUgdXNlcyB0aGlzIHRvIG1ha2UgZG9jdW1lbnQuYWxsIGFu
ZCBzdHlsZS5maWx0ZXIgdW5kZXRlY3RhYmxlLgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gMHgxOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBJ
bXBsZW1lbnRzSGFzSW5zdGFuY2UgPSAweDI7CiAKICAgICBjbGFzcyBUeXBlSW5mbyB7CiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBDVEk7CkBAIC00Miw2ICs0Myw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBKU1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogCiAgICAgICAg
IGJvb2wgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3MgJiBN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkOyB9CisgICAgICAgIGJvb2wgaW1wbGVtZW50c0hhc0luc3Rh
bmNlKCkgY29uc3QgeyByZXR1cm4gbV9mbGFncyAmIEltcGxlbWVudHNIYXNJbnN0YW5jZTsgfQog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgSlNUeXBlIG1fdHlwZTsKSW5kZXg6IFdlYkNvcmUvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAzNjc2NSkK
KysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIw
MDgtMDktMjIgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIHNwZWVkIHVwIGluc3RhbmNl
b2Ygb3BlcmF0b3IgYnkgcmVwbGFjaW5nIGltcGxlbWVudHNIYXNJbnN0YW5jZSBtZXRob2Qgd2l0
aCBhIFR5cGVJbmZvIGZsYWcKKworICAgICAgICBQYXJ0aWFsIHdvcmsgdG93YXJkcyA8aHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODE4PgorICAgICAgICAKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5jcHA6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpjcmVhdGVTdHJ1Y3R1cmVJRCk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisKIDIwMDgtMDkt
MjIgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFdpbmRvd3MgYnVp
bGQgZml4CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUXVhcmFudGluZWRPYmplY3RXcmFw
cGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUXVhcmFudGluZWRP
YmplY3RXcmFwcGVyLmNwcAkocmV2aXNpb24gMzY3NjMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDEx
ICsyMTksNiBAQCBDb25zdHJ1Y3RUeXBlIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyCiAgICAg
cmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OwogfQogCi1ib29sIEpTUXVhcmFudGluZWRPYmplY3RX
cmFwcGVyOjppbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSBjb25zdAotewotICAgIHJldHVybiBtX3Vu
d3JhcHBlZE9iamVjdC0+aW1wbGVtZW50c0hhc0luc3RhbmNlKCk7Ci19Ci0KIGJvb2wgSlNRdWFy
YW50aW5lZE9iamVjdFdyYXBwZXI6Omhhc0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSogdmFsdWUsIEpTVmFsdWUqIHByb3RvKQogewogICAgIGlmICghYWxsb3dzSGFzSW5zdGFuY2Uo
KSkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUXVhcmFudGluZWRPYmplY3RX
cmFwcGVyLmgJKHJldmlzaW9uIDM2NzYzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1F1YXJh
bnRpbmVkT2JqZWN0V3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZv
IHNfaW5mbzsKIAorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZUlEPiBj
cmVhdGVTdHJ1Y3R1cmVJRChKU0M6OkpTVmFsdWUqIHByb3RvKSAKKyAgICAgICAgeyAKKyAgICAg
ICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZUlEOjpjcmVhdGUocHJvdG8sIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSkpOyAKKyAgICAg
ICAgfQorCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBl
cihKU0M6OkV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgSlNDOjpKU09iamVjdCogdW53cmFwcGVk
T2JqZWN0LCBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlSUQ+KTsKIApAQCAtNjIsNyArNjcsNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgSlNDOjpDYWxsVHlwZSBnZXRD
YWxsRGF0YShKU0M6OkNhbGxEYXRhJik7CiAgICAgICAgIHZpcnR1YWwgSlNDOjpDb25zdHJ1Y3RU
eXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpDb25zdHJ1Y3REYXRhJik7CiAKLSAgICAgICAgdmly
dHVhbCBib29sIGltcGxlbWVudHNIYXNJbnN0YW5jZSgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFs
IGJvb2wgaGFzSW5zdGFuY2UoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUqLCBKU0M6OkpT
VmFsdWUqIHByb3RvKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmKTsKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMzY3NjMpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNv
cHkpCkBAIC0xODIwLDcgKzE4MjAsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgY29uc3QgQ2xh
c3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9CiAgICAgc3RhdGlj
IGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKLSAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0hh
c0luc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFN0cnVjdHVyZUlEPiBjcmVhdGVTdHJ1Y3R1cmVJRChKU1ZhbHVlKiBwcm90bykgCisgICAgeyAK
KwlyZXR1cm4gU3RydWN0dXJlSUQ6OmNyZWF0ZShwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwg
SW1wbGVtZW50c0hhc0luc3RhbmNlKSk7IAorICAgIH0KIEVPRgogCiAgICAgaWYgKCRjYW5Db25z
dHJ1Y3QpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23690</attachid>
            <date>2008-09-22 19:24:59 -0700</date>
            <delta_ts>2008-09-23 10:03:00 -0700</delta_ts>
            <desc>use a TypeInfo bit to inline hasInfo and do the checks in a smarter order in the common case</desc>
            <filename>inline-hasInstance.patch.txt</filename>
            <type>text/plain</type>
            <size>15807</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM2Nzg4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAKKzIwMDgtMDktMjIgIE1hY2llaiBT
dGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIC0gc3BlZWQgdXAgaW5zdGFuY2VvZiBzb21lIG1v
cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODE4
CisgICAgICAgIAorICAgICAgICB+MiUgc3BlZWR1cCBvbiBFYXJsZXlCb3llcgorCisgICAgICAg
IFRoZSBpZGVhIGhlcmUgaXMgdG8gcmVjb3JkIGluIHRoZSBTdHJ1Y3R1cmVJRCB3aGV0aGVyIHRo
ZSBjbGFzcworICAgICAgICBuZWVkcyBhIHNwZWNpYWwgaGFzSW5zdGFuY2Ugb3IgaWYgaXQgY2Fu
IHVzZSB0aGUgbm9ybWFsIGxvZ2ljIGZyb20KKyAgICAgICAgSlNPYmplY3QuIAorICAgICAgICAK
KyAgICAgICAgQmFzZWQgb24gdGhpcyBJIGlubGluZWQgdGhlIHJlYWwgd29yayBkaXJlY3RseSBp
bnRvCisgICAgICAgIGN0aV9vcF9pbnN0YW5jZW9mIGFuZCBwdXQgdGhlIGZhc3Rlc3QgY2hlY2tz
IHVwIGZyb250IGFuZCB0aGUKKyAgICAgICAgZXJyb3IgaGFuZGxpbmcgYXQgdGhlIGVuZCAoc28g
aXQgc2hvdWxkIGJlIGZhaXJseSBzdHJhaWdodGZvcndhcmQKKyAgICAgICAgdG8gc3BsaXQgb2Zm
IHRoZSBiZWdpbm5pbmcgdG8gYmUgaW5saW5lZCBpZiBkZXNpcmVkKS4KKworICAgICAgICBJIG9u
bHkgZGlkIHRoaXMgZm9yIENUSSwgbm90IHRoZSBieXRlY29kZSBpbnRlcnByZXRlci4KKyAgICAg
ICAgCisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlND
YWxsYmFja09iamVjdDo6Y3JlYXRlU3RydWN0dXJlSUQpOgorICAgICAgICAqIEFQSS9KU0NhbGxi
YWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6Ojo6Y3VzdG9tSGFzSW5zdGFuY2Up
OgorICAgICAgICAqIEFQSS9KU1ZhbHVlUmVmLmNwcDoKKyAgICAgICAgKEpTVmFsdWVJc0luc3Rh
bmNlT2ZDb25zdHJ1Y3Rvcik6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAg
ICAqIFZNL01hY2hpbmUuY3BwOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpwcml2YXRlRXhlY3V0
ZSk6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAg
KiBranMvSlNJbW1lZGlhdGUuaDoKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6OmlzQW55SW1t
ZWRpYXRlKToKKyAgICAgICAgKiBranMvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6Y3VzdG9tSGFzSW5zdGFuY2UpOgorICAgICAgICAqIGtqcy9KU09iamVjdC5oOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6c3RhbmRhcmRIYXNJbnN0YW5jZSk6CisgICAgICAgICoga2pz
L1R5cGVJbmZvLmg6CisgICAgICAgIChKU0M6OlR5cGVJbmZvOjpjdXN0b21IYXNJbnN0YW5jZSk6
CisgICAgICAgIChKU0M6OlR5cGVJbmZvOjpmbGFncyk6CisKIDIwMDgtMDktMjIgIEtlbHZpbiBT
aGVybG9jayAgPGtzaGVybG9ja0BnbWFpbC5jb20+CiAKICAgICAgICAgVXBkYXRlZCBhbmQgdHdl
YWtlZCBieSBTYW0gV2VpbmlnLgpJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
ZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkocmV2
aXNpb24gMzY3ODMpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyMSw3ICsyMjEsNiBAQCBfX1pOM0pTQzhEZWJ1Z2dlcjZhdHRhY2hFUE5T
XzE0SlNHbG9iYWxPCiBfX1pOM0pTQzhEZWJ1Z2dlcjZkZXRhY2hFUE5TXzE0SlNHbG9iYWxPYmpl
Y3RFCiBfX1pOM0pTQzhEZWJ1Z2dlckMyRXYKIF9fWk4zSlNDOERlYnVnZ2VyRDJFdgotX19aTjNK
U0M4SlNPYmplY3QxMWhhc0luc3RhbmNlRVBOU185RXhlY1N0YXRlRVBOU183SlNWYWx1ZUVTNF8K
IF9fWk4zSlNDOEpTT2JqZWN0MTJkZWZpbmVHZXR0ZXJFUE5TXzlFeGVjU3RhdGVFUktOU18xMElk
ZW50aWZpZXJFUFMwXwogX19aTjNKU0M4SlNPYmplY3QxMmRlZmluZVNldHRlckVQTlNfOUV4ZWNT
dGF0ZUVSS05TXzEwSWRlbnRpZmllckVQUzBfCiBfX1pOM0pTQzhKU09iamVjdDEybG9va3VwR2V0
dGVyRVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRQpAQCAtMjMwLDYgKzIyOSw3IEBA
IF9fWk4zSlNDOEpTT2JqZWN0MTRkZWxldGVQcm9wZXJ0eUVQTlNfOUUKIF9fWk4zSlNDOEpTT2Jq
ZWN0MTRkZWxldGVQcm9wZXJ0eUVQTlNfOUV4ZWNTdGF0ZUVqCiBfX1pOM0pTQzhKU09iamVjdDE2
Z2V0UHJvcGVydHlOYW1lc0VQTlNfOUV4ZWNTdGF0ZUVSTlNfMTdQcm9wZXJ0eU5hbWVBcnJheUUK
IF9fWk4zSlNDOEpTT2JqZWN0MTdjcmVhdGVJbmhlcml0b3JJREV2CitfX1pOM0pTQzhKU09iamVj
dDE3Y3VzdG9tSGFzSW5zdGFuY2VFUE5TXzlFeGVjU3RhdGVFUE5TXzdKU1ZhbHVlRVM0XwogX19a
TjNKU0M4SlNPYmplY3QxN3B1dERpcmVjdEZ1bmN0aW9uRVBOU185RXhlY1N0YXRlRVBOU18xNklu
dGVybmFsRnVuY3Rpb25FagogX19aTjNKU0M4SlNPYmplY3QxN3B1dFdpdGhBdHRyaWJ1dGVzRVBO
U185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVBOU183SlNWYWx1ZUVqCiBfX1pOM0pTQzhK
U09iamVjdDE3cHV0V2l0aEF0dHJpYnV0ZXNFUE5TXzlFeGVjU3RhdGVFalBOU183SlNWYWx1ZUVq
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDM2Nzgz
KQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1
Y3R1cmVJRD4gY3JlYXRlU3RydWN0dXJlSUQoSlNWYWx1ZSogcHJvdG8pIAogICAgIHsgCi0gICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBl
LCBJbXBsZW1lbnRzSGFzSW5zdGFuY2UpKTsgCisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmVJRDo6
Y3JlYXRlKHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBJbXBsZW1lbnRzSGFzSW5zdGFuY2Ug
fCBDdXN0b21IYXNJbnN0YW5jZSkpOyAKICAgICB9CiAKIHByaXZhdGU6CkBAIC02NCw3ICs2NCw3
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhl
Y1N0YXRlKiwgdW5zaWduZWQpOwogCi0gICAgdmlydHVhbCBib29sIGhhc0luc3RhbmNlKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUsIEpTVmFsdWUqIHByb3RvKTsKKyAgICB2aXJ0dWFs
IGJvb2wgY3VzdG9tSGFzSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSwg
SlNWYWx1ZSogcHJvdG8pOwogCiAgICAgdmlydHVhbCB2b2lkIGdldFByb3BlcnR5TmFtZXMoRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmKTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCShyZXZpc2lvbiAzNjc4MykKKysrIEph
dmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3Myw3ICsyNzMsNyBAQCBKU09iamVjdCogSlNDYWxsYmFja09iamVjdDxCYXNlPjo6
Y29uc3RyCiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBCYXNlPgotYm9vbCBKU0NhbGxiYWNrT2JqZWN0
PEJhc2U+OjpoYXNJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlLCBKU1Zh
bHVlKikKK2Jvb2wgSlNDYWxsYmFja09iamVjdDxCYXNlPjo6Y3VzdG9tSGFzSW5zdGFuY2UoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSwgSlNWYWx1ZSopCiB7CiAgICAgSlNDb250ZXh0
UmVmIGV4ZWNSZWYgPSB0b1JlZihleGVjKTsKICAgICBKU09iamVjdFJlZiB0aGlzUmVmID0gdG9S
ZWYodGhpcyk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJlZi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCShyZXZpc2lvbiAzNjc4
MykKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQ2LDcgKzE0Niw3IEBAIGJvb2wgSlNWYWx1ZUlzSW5zdGFuY2VPZkNvbnN0cnVjdG9yKEpT
Q28KICAgICBKU09iamVjdCoganNDb25zdHJ1Y3RvciA9IHRvSlMoY29uc3RydWN0b3IpOwogICAg
IGlmICghanNDb25zdHJ1Y3Rvci0+c3RydWN0dXJlSUQoKS0+dHlwZUluZm8oKS5pbXBsZW1lbnRz
SGFzSW5zdGFuY2UoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGJvb2wgcmVzdWx0ID0g
anNDb25zdHJ1Y3Rvci0+aGFzSW5zdGFuY2UoZXhlYywganNWYWx1ZSwganNDb25zdHJ1Y3Rvci0+
Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpKTsgLy8gZmFsc2UgaWYg
YW4gZXhjZXB0aW9uIGlzIHRocm93bgorICAgIGJvb2wgcmVzdWx0ID0ganNDb25zdHJ1Y3Rvci0+
Y3VzdG9tSGFzSW5zdGFuY2UoZXhlYywganNWYWx1ZSwganNDb25zdHJ1Y3Rvci0+Z2V0KGV4ZWMs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpKTsgLy8gZmFsc2UgaWYgYW4gZXhjZXB0
aW9uIGlzIHRocm93bgogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICBp
ZiAoZXhjZXB0aW9uKQogICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMtPmV4Y2Vw
dGlvbigpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuY3BwCShyZXZpc2lvbiAzNjc4MykKKysrIEph
dmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIzLDcgKzIx
MjMsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAg
ICAgICBnb3RvIHZtX3Rocm93OwogCiAgICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gc3RhdGlj
X2Nhc3Q8SlNPYmplY3QqPihiYXNlVmFsKTsKLSAgICAgICAgcltkc3RdID0ganNCb29sZWFuKGJh
c2VPYmotPnN0cnVjdHVyZUlEKCktPnR5cGVJbmZvKCkuaW1wbGVtZW50c0hhc0luc3RhbmNlKCkg
PyBiYXNlT2JqLT5oYXNJbnN0YW5jZShleGVjLCByW3ZhbHVlXS5qc1ZhbHVlKGV4ZWMpLCByW2Jh
c2VQcm90b10uanNWYWx1ZShleGVjKSkgOiBmYWxzZSk7CisgICAgICAgIHJbZHN0XSA9IGpzQm9v
bGVhbihiYXNlT2JqLT5zdHJ1Y3R1cmVJRCgpLT50eXBlSW5mbygpLmltcGxlbWVudHNIYXNJbnN0
YW5jZSgpID8gYmFzZU9iai0+Y3VzdG9tSGFzSW5zdGFuY2UoZXhlYywgclt2YWx1ZV0uanNWYWx1
ZShleGVjKSwgcltiYXNlUHJvdG9dLmpzVmFsdWUoZXhlYykpIDogZmFsc2UpOwogCiAgICAgICAg
ICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsKQEAgLTQyOTIsOCArNDI5Miw0MCBAQCBKU1Zh
bHVlKiBNYWNoaW5lOjpjdGlfb3BfZ2V0X2J5X2lkX2ZhaWwoCiBKU1ZhbHVlKiBNYWNoaW5lOjpj
dGlfb3BfaW5zdGFuY2VvZihDVElfQVJHUykKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdf
ZXhlYzsKKyAgICBKU1ZhbHVlKiB2YWx1ZSA9IEFSR19zcmMxOwogICAgIEpTVmFsdWUqIGJhc2VW
YWwgPSBBUkdfc3JjMjsKKyAgICBKU1ZhbHVlKiBwcm90byA9IEFSR19zcmMzOwogCisgICAgaWYg
KFVOTElLRUxZKEpTSW1tZWRpYXRlOjppc0FueUltbWVkaWF0ZSh2YWx1ZSwgYmFzZVZhbCwgcHJv
dG8pKSkKKyAgICAgICAgZ290byBzbG93X2Nhc2VzOworCisgICAgSlNDZWxsKiB2YWx1ZUNlbGwg
PSBzdGF0aWNfY2FzdDxKU0NlbGwqPih2YWx1ZSk7CisgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IHN0
YXRpY19jYXN0PEpTQ2VsbCo+KGJhc2VWYWwpOworICAgIEpTQ2VsbCogcHJvdG9DZWxsID0gc3Rh
dGljX2Nhc3Q8SlNDZWxsKj4ocHJvdG8pOworCisgICAgaWYgKFVOTElLRUxZKHZhbHVlQ2VsbC0+
c3RydWN0dXJlSUQoKS0+dHlwZUluZm8oKS50eXBlKCkgIT0gT2JqZWN0VHlwZSB8IAorICAgICAg
ICAgICAgICAgICBiYXNlQ2VsbC0+c3RydWN0dXJlSUQoKS0+dHlwZUluZm8oKS50eXBlKCkgIT0g
T2JqZWN0VHlwZSB8CisgICAgICAgICAgICAgICAgIHByb3RvQ2VsbC0+c3RydWN0dXJlSUQoKS0+
dHlwZUluZm8oKS50eXBlKCkgIT0gT2JqZWN0VHlwZSkpCisgICAgICAgIGdvdG8gc2xvd19jYXNl
czsKKworCisgICAgaWYgKFVOTElLRUxZKChiYXNlQ2VsbC0+c3RydWN0dXJlSUQoKS0+dHlwZUlu
Zm8oKS5mbGFncygpICYgKEltcGxlbWVudHNIYXNJbnN0YW5jZSB8IEN1c3RvbUhhc0luc3RhbmNl
KSkgIT0gSW1wbGVtZW50c0hhc0luc3RhbmNlKSkKKyAgICAgICAgZ290byBzbG93X2Nhc2VzOwor
CisgICAgSlNPYmplY3QqIHRlc3RQcm90b3R5cGUgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHN0
YXRpY19jYXN0PEpTT2JqZWN0Kj4odmFsdWVDZWxsKS0+cHJvdG90eXBlKCkpOworCisgICAgaWYg
KHRlc3RQcm90b3R5cGUgPT0gcHJvdG8pCisgICAgICAgIHJldHVybiBqc0Jvb2xlYW4odHJ1ZSk7
CisKKyAgICB3aGlsZSAodGVzdFByb3RvdHlwZSAhPSBqc051bGwoKSkgeworICAgICAgICB0ZXN0
UHJvdG90eXBlID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih0ZXN0UHJvdG90eXBlLT5wcm90b3R5
cGUoKSk7CisgICAgICAgIGlmICh0ZXN0UHJvdG90eXBlID09IHByb3RvKQorICAgICAgICAgICAg
cmV0dXJuIGpzQm9vbGVhbih0cnVlKTsKKyAgICB9CisKKyAgICByZXR1cm4ganNCb29sZWFuKGZh
bHNlKTsKKworIHNsb3dfY2FzZXM6ICAgICAKICAgICBpZiAoIWJhc2VWYWwtPmlzT2JqZWN0KCkp
IHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBBUkdfY29kZUJsb2NrOwogICAgICAg
ICBBU1NFUlQoY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmNvbnRhaW5zKENUSV9S
RVRVUk5fQUREUkVTUykpOwpAQCAtNDMwMiwxMCArNDMzNCwyMyBAQCBKU1ZhbHVlKiBNYWNoaW5l
OjpjdGlfb3BfaW5zdGFuY2VvZihDVElfCiAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTihKU1Zh
bHVlKik7CiAgICAgfQogCi0gICAgSlNPYmplY3QqIGJhc2VPYmogPSBzdGF0aWNfY2FzdDxKU09i
amVjdCo+KGJhc2VWYWwpOwotICAgIEpTVmFsdWUqIGJhc2VQcm90b3R5cGUgPSBBUkdfc3JjMzsK
LSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4oYmFzZU9iai0+c3RydWN0dXJlSUQoKS0+
dHlwZUluZm8oKS5pbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSA/IGJhc2VPYmotPmhhc0luc3RhbmNl
KGV4ZWMsICBBUkdfc3JjMSwgYmFzZVByb3RvdHlwZSkgOiBmYWxzZSk7CisgICAgYmFzZUNlbGwg
PSBzdGF0aWNfY2FzdDxKU0NlbGwqPihiYXNlVmFsKTsKKyAgICBpZiAoIWJhc2VDZWxsLT5zdHJ1
Y3R1cmVJRCgpLT50eXBlSW5mbygpLmltcGxlbWVudHNIYXNJbnN0YW5jZSgpKQorICAgICAgICBy
ZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKKworICAgIGlmICghcHJvdG8tPmlzT2JqZWN0KCkpIHsK
KyAgICAgICAgdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJpbnN0YW5jZW9mIGNhbGxlZCBv
biBhbiBvYmplY3Qgd2l0aCBhbiBpbnZhbGlkIHByb3RvdHlwZSBwcm9wZXJ0eS4iKTsKKyAgICAg
ICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKEpTVmFsdWUqKTsKKyAgICB9CisgICAgICAgIAorICAgIGlm
ICghdmFsdWUtPmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2UpOwor
CisgICAgQVNTRVJUKGJhc2VDZWxsLT5zdHJ1Y3R1cmVJRCgpLT50eXBlSW5mbygpLmltcGxlbWVu
dHNIYXNJbnN0YW5jZSgpKTsKKworICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbihzdGF0
aWNfY2FzdDxKU09iamVjdCo+KGJhc2VDZWxsKS0+Y3VzdG9tSGFzSW5zdGFuY2UoZXhlYywgdmFs
dWUsIHByb3RvKSk7CiAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOworCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTSW1tZWRpYXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pTSW1tZWRpYXRlLmgJKHJldmlzaW9u
IDM2NzgzKQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTSW1tZWRpYXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE1NCw2ICsxNTQsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1
cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih2MSkgfCByZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4odjIpKSAmIFRhZ01hc2s7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgQUxX
QVlTX0lOTElORSBib29sIGlzQW55SW1tZWRpYXRlKGNvbnN0IEpTVmFsdWUqIHYxLCBjb25zdCBK
U1ZhbHVlKiB2MiwgSlNWYWx1ZSogdjMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAo
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHYxKSB8IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Pih2MikgfCByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4odjMpKSAmIFRhZ01hc2s7Cisg
ICAgICAgIH0KKwogICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGFyZUJvdGhJbW1l
ZGlhdGUoY29uc3QgSlNWYWx1ZSogdjEsIGNvbnN0IEpTVmFsdWUqIHYyKQogICAgICAgICB7CiAg
ICAgICAgICAgICByZXR1cm4gaXNJbW1lZGlhdGUodjEpICYgaXNJbW1lZGlhdGUodjIpOwpJbmRl
eDogSmF2YVNjcmlwdENvcmUva2pzL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ranMvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAzNjc4MykKKysrIEphdmFTY3JpcHRD
b3JlL2tqcy9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NCwyMiArMzg0LDkgQEAg
SlNWYWx1ZSogSlNPYmplY3Q6Omxvb2t1cFNldHRlcihFeGVjU3RhdAogICAgIH0KIH0KIAotYm9v
bCBKU09iamVjdDo6aGFzSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSwg
SlNWYWx1ZSogcHJvdG8pCitib29sIEpTT2JqZWN0OjpjdXN0b21IYXNJbnN0YW5jZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlLCBKU1ZhbHVlKiBwcm90bykKIHsKLSAgICBpZiAoIXBy
b3RvLT5pc09iamVjdCgpKSB7Ci0gICAgICAgIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAi
aW5zdGFuY2VvZiBjYWxsZWQgb24gYW4gb2JqZWN0IHdpdGggYW4gaW52YWxpZCBwcm90b3R5cGUg
cHJvcGVydHkuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIXZh
bHVlLT5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBKU09iamVjdCog
b2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2YWx1ZSk7Ci0gICAgd2hpbGUgKChvYmpl
Y3QgPSBvYmplY3QtPnByb3RvdHlwZSgpLT5nZXRPYmplY3QoKSkpIHsKLSAgICAgICAgaWYgKG9i
amVjdCA9PSBwcm90bykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIHN0YW5kYXJkSGFzSW5zdGFuY2UoZXhlYywgdmFsdWUsIHBy
b3RvKTsKIH0KIAogYm9vbCBKU09iamVjdDo6cHJvcGVydHlJc0VudW1lcmFibGUoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpIGNvbnN0CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ranMvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9r
anMvSlNPYmplY3QuaAkocmV2aXNpb24gMzY3ODMpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkFyZ0xp
c3QuaCIKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVy
cy5oIgorI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhlY1N0YXRlLmgiCiAjaW5jbHVk
ZSAiSlNOdW1iZXJDZWxsLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlNYXAuaCIKQEAgLTEwMyw3ICsx
MDQsMjUgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBkZWZh
dWx0VmFsdWUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CiAKLSAg
ICAgICAgdmlydHVhbCBib29sIGhhc0luc3RhbmNlKEV4ZWNTdGF0ZSosIEpTVmFsdWUqLCBKU1Zh
bHVlKiBwcm90b3R5cGVQcm9wZXJ0eSk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjdXN0b21IYXNJ
bnN0YW5jZShFeGVjU3RhdGUqLCBKU1ZhbHVlKiwgSlNWYWx1ZSogcHJvdG90eXBlUHJvcGVydHkp
OworCisgICAgICAgIGJvb2wgc3RhbmRhcmRIYXNJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUqIHZhbHVlLCBKU1ZhbHVlKiBwcm90bykKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KCFwcm90by0+aXNPYmplY3QoKSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywg
VHlwZUVycm9yLCAiaW5zdGFuY2VvZiBjYWxsZWQgb24gYW4gb2JqZWN0IHdpdGggYW4gaW52YWxp
ZCBwcm90b3R5cGUgcHJvcGVydHkuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIXZhbHVlLT5pc09i
amVjdCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgSlNP
YmplY3QqIG9iamVjdCA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odmFsdWUpOworICAgICAgICAg
ICAgd2hpbGUgKChvYmplY3QgPSBvYmplY3QtPnByb3RvdHlwZSgpLT5nZXRPYmplY3QoKSkpIHsK
KyAgICAgICAgICAgICAgICBpZiAob2JqZWN0ID09IHByb3RvKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jik7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9U
eXBlSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9UeXBlSW5mby5oCShy
ZXZpc2lvbiAzNjc4MykKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9UeXBlSW5mby5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw4ICszMiw5IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIC8vIFdlYkNv
cmUgdXNlcyB0aGlzIHRvIG1ha2UgZG9jdW1lbnQuYWxsIGFuZCBzdHlsZS5maWx0ZXIgdW5kZXRl
Y3RhYmxlLgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gMHgxOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBJbXBsZW1lbnRzSGFzSW5zdGFuY2Ug
PSAweDI7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSAxOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBJbXBsZW1lbnRzSGFzSW5zdGFuY2UgPSAx
IDw8IDE7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIEN1c3RvbUhhc0luc3RhbmNlID0gMSA8
PCAyOwogCiAgICAgY2xhc3MgVHlwZUluZm8gewogICAgICAgICBmcmllbmQgY2xhc3MgQ1RJOwpA
QCAtNDQsNyArNDUsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIG1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzICYgTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZDsgfQogICAgICAgICBib29sIGltcGxlbWVudHNIYXNJbnN0YW5jZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZmxhZ3MgJiBJbXBsZW1lbnRzSGFzSW5zdGFuY2U7IH0KKyAgICAgICAgYm9vbCBj
dXN0b21IYXNJbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3MgJiBDdXN0b21IYXNJbnN0
YW5jZTsgfQogCisgICAgICAgIHVuc2lnbmVkIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9mbGFn
czsgfQogICAgIHByaXZhdGU6CiAgICAgICAgIEpTVHlwZSBtX3R5cGU7CiAgICAgICAgIHVuc2ln
bmVkIG1fZmxhZ3M7CkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMzY3ODgpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDA4LTA5LTIyICBNYWNpZWogU3RhY2hvd2lh
ayAgPG1qc0BhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgLSBzcGVlZCB1cCBpbnN0YW5jZW9mIHNvbWUgbW9yZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4MTgKKworICAgICAgICB+MiUg
c3BlZWR1cCBvbiBFYXJsZXlCb3llcgorCisgICAgICAgIChXZWJDb3JlIHVwZGF0ZXMuKQorICAg
ICAgICAKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6Y3VzdG9t
SGFzSW5zdGFuY2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUXVhcmFudGluZWRPYmplY3RX
cmFwcGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6
Y3JlYXRlU3RydWN0dXJlSUQpOgorCiAyMDA4LTA5LTIyICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KIAogICAgICAgICAqIHBhZ2UvbWFjL0ZyYW1lTWFjLm1tOgpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5jcHAJKHJl
dmlzaW9uIDM2NzgzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2JqZWN0
V3JhcHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxOSwxMiArMjE5LDEyIEBAIENvbnN0cnVj
dFR5cGUgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIKICAgICByZXR1cm4gQ29uc3RydWN0VHlw
ZUhvc3Q7CiB9CiAKLWJvb2wgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6Omhhc0luc3RhbmNl
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUsIEpTVmFsdWUqIHByb3RvKQorYm9vbCBK
U1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6Y3VzdG9tSGFzSW5zdGFuY2UoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlKiB2YWx1ZSwgSlNWYWx1ZSogcHJvdG8pCiB7CiAgICAgaWYgKCFhbGxvd3NI
YXNJbnN0YW5jZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBib29sIHJlc3VsdCA9
IG1fdW53cmFwcGVkT2JqZWN0LT5oYXNJbnN0YW5jZSh1bndyYXBwZWRFeGVjU3RhdGUoKSwgcHJl
cGFyZUluY29taW5nVmFsdWUoZXhlYywgdmFsdWUpLCBwcmVwYXJlSW5jb21pbmdWYWx1ZShleGVj
LCBwcm90bykpOworICAgIGJvb2wgcmVzdWx0ID0gbV91bndyYXBwZWRPYmplY3QtPmN1c3RvbUhh
c0luc3RhbmNlKHVud3JhcHBlZEV4ZWNTdGF0ZSgpLCBwcmVwYXJlSW5jb21pbmdWYWx1ZShleGVj
LCB2YWx1ZSksIHByZXBhcmVJbmNvbWluZ1ZhbHVlKGV4ZWMsIHByb3RvKSk7CiAKICAgICB0cmFu
c2ZlckV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5oCShyZXZpc2lvbiAzNjc4MykK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmVJRD4gY3JlYXRlU3RydWN0dXJlSUQo
SlNDOjpKU1ZhbHVlKiBwcm90bykgCiAgICAgICAgIHsgCi0gICAgICAgICAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmVJRDo6Y3JlYXRlKHByb3RvLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlw
ZSwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UpKTsgCisgICAgICAgICAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmVJRDo6Y3JlYXRlKHByb3RvLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlw
ZSwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBKU0M6OkN1c3RvbUhhc0luc3RhbmNlKSk7
IAogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC02Nyw3ICs2Nyw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBKU0M6OkNhbGxUeXBlIGdldENhbGxEYXRhKEpT
Qzo6Q2FsbERhdGEmKTsKICAgICAgICAgdmlydHVhbCBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29u
c3RydWN0RGF0YShKU0M6OkNvbnN0cnVjdERhdGEmKTsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wg
aGFzSW5zdGFuY2UoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUqLCBKU0M6OkpTVmFsdWUq
IHByb3RvKTsKKyAgICAgICAgdmlydHVhbCBib29sIGN1c3RvbUhhc0luc3RhbmNlKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlKiwgSlNDOjpKU1ZhbHVlKiBwcm90byk7CiAKICAgICAgICAg
dmlydHVhbCB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3Bl
cnR5TmFtZUFycmF5Jik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23705</attachid>
            <date>2008-09-23 10:02:33 -0700</date>
            <delta_ts>2008-09-23 10:10:17 -0700</delta_ts>
            <desc>inline JIT the fast paths of instanceof</desc>
            <filename>instanceof-inline.patch.txt</filename>
            <type>text/plain</type>
            <size>8290</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM2ODA3
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMDgtMDkt
MjMgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIGlubGluZSB0aGUgZmFzdCBjYXNlIG9m
IGluc3RhbmNlb2YKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwODE4CisKKyAgICAgICAgfjIlIHNwZWVkdXAgb24gRWFybGV5Qm95ZXIgdGVzdC4KKyAg
ICAgICAgCisgICAgICAgICogVk0vQ1RJLmNwcDoKKyAgICAgICAgKEpTQzo6Q1RJOjpwcml2YXRl
Q29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6Q1RJOjpwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcyk6CisgICAgICAgICogVk0vTWFjaGluZS5jcHA6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6
OmN0aV9vcF9pbnN0YW5jZW9mKToKKwogMjAwOC0wOS0yMyAgTWFjaWVqIFN0YWNob3dpYWsgIDxt
anNAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IENhbWVyb24gWndhcmljaC4KSW5k
ZXg6IFZNL0NUSS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vQ1RJLmNwcAkocmV2aXNpb24gMzY4MDYp
CisrKyBWTS9DVEkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OTksMTEgKzc5OSw2MyBAQCB2b2lk
IENUSTo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIG9wX2luc3RhbmNlb2Y6IHsKLSAgICAgICAgICAgIGVtaXRHZXRQ
dXRBcmcoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOwotICAgICAg
ICAgICAgZW1pdEdldFB1dEFyZyhpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCA0LCBYODY6
OmVjeCk7Ci0gICAgICAgICAgICBlbWl0R2V0UHV0QXJnKGluc3RydWN0aW9uW2kgKyA0XS51Lm9w
ZXJhbmQsIDgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRDYWxsKGksIE1hY2hpbmU6OmN0
aV9vcF9pbnN0YW5jZW9mKTsKKyAgICAgICAgICAgIGVtaXRHZXRBcmcoaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZCwgWDg2OjplYXgpOyAvLyB2YWx1ZQorICAgICAgICAgICAgZW1pdEdldEFy
ZyhpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVjeCk7IC8vIGJhc2VWYWwKKyAg
ICAgICAgICAgIGVtaXRHZXRBcmcoaW5zdHJ1Y3Rpb25baSArIDRdLnUub3BlcmFuZCwgWDg2Ojpl
ZHgpOyAvLyBwcm90bworCisgICAgICAgICAgICAvLyBjaGVjayBpZiBhbnkgYXJlIGltbWVkaWF0
ZXMKKyAgICAgICAgICAgIG1faml0Lm9ybF9ycihYODY6OmVheCwgWDg2OjplY3gpOworICAgICAg
ICAgICAgbV9qaXQub3JsX3JyKFg4Njo6ZWR4LCBYODY6OmVjeCk7CisgICAgICAgICAgICBtX2pp
dC50ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVjeCk7CisKKyAgICAgICAg
ICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KG1faml0LmVtaXRVbmxpbmtlZEpu
eigpLCBpKSk7CisKKyAgICAgICAgICAgIC8vIGNoZWNrIHRoYXQgYWxsIGFyZSBvYmplY3QgdHlw
ZSAtIHRoaXMgaXMgYSBiaXQgb2YgYSBiaXRoYWNrIHRvIGF2b2lkIGV4Y2VzcyBicmFuY2hpbmc7
CisgICAgICAgICAgICAvLyB3ZSBjaGVjayB0aGF0IHRoZSBzdW0gb2YgdGhlIHRocmVlIHR5cGUg
Y29kZXMgZnJvbSBTdHJ1Y3R1cmVJRHMgaXMgZXhhY3RseSAzICogT2JqZWN0VHlwZSwKKyAgICAg
ICAgICAgIC8vIHRoaXMgd29ya3MgYmVjYXVzZSBOdW1iZXJUeXBlIGFuZCBTdHJpbmdUeXBlIGFy
ZSBzbWFsbGVyCisgICAgICAgICAgICBtX2ppdC5tb3ZsX2kzMnIoMyAqIE9iamVjdFR5cGUsIFg4
Njo6ZWN4KTsKKyAgICAgICAgICAgIG1faml0Lm1vdmxfbXIoT0JKRUNUX09GRlNFVChKU0NlbGws
IG1fc3RydWN0dXJlSUQpLCBYODY6OmVheCwgWDg2OjplYXgpOworICAgICAgICAgICAgbV9qaXQu
bW92bF9tcihPQkpFQ1RfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmVJRCksIFg4Njo6ZWR4LCBY
ODY6OmVkeCk7CisgICAgICAgICAgICBtX2ppdC5zdWJsX21yKE9CSkVDVF9PRkZTRVQoU3RydWN0
dXJlSUQsIG1fdHlwZUluZm8ubV90eXBlKSwgWDg2OjplYXgsIFg4Njo6ZWN4KTsKKyAgICAgICAg
ICAgIG1faml0LnN1YmxfbXIoT0JKRUNUX09GRlNFVChTdHJ1Y3R1cmVJRCwgbV90eXBlSW5mby5t
X3R5cGUpLCBYODY6OmVkeCwgWDg2OjplY3gpOworICAgICAgICAgICAgZW1pdEdldEFyZyhpbnN0
cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVkeCk7IC8vIHJlbG9hZCBiYXNlVmFsCisg
ICAgICAgICAgICBtX2ppdC5tb3ZsX21yKE9CSkVDVF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVy
ZUlEKSwgWDg2OjplZHgsIFg4Njo6ZWR4KTsKKyAgICAgICAgICAgIG1faml0LmNtcGxfcm0oWDg2
OjplY3gsIE9CSkVDVF9PRkZTRVQoU3RydWN0dXJlSUQsIG1fdHlwZUluZm8ubV90eXBlKSwgWDg2
OjplZHgpOworCisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeSht
X2ppdC5lbWl0VW5saW5rZWRKbmUoKSwgaSkpOworCisgICAgICAgICAgICAvLyBjaGVjayB0aGF0
IGJhc2VWYWwncyBmbGFncyBpbmNsdWRlIEltcGxlbWVudHNIYXNJbnN0YW5jZSBidXQgbm90IE92
ZXJyaWRlc0hhc0luc3RhbmNlCisgICAgICAgICAgICBtX2ppdC5tb3ZsX21yKE9CSkVDVF9PRkZT
RVQoU3RydWN0dXJlSUQsIG1fdHlwZUluZm8ubV9mbGFncyksIFg4Njo6ZWR4LCBYODY6OmVjeCk7
CisgICAgICAgICAgICBtX2ppdC5hbmRsX2kzMnIoSW1wbGVtZW50c0hhc0luc3RhbmNlIHwgT3Zl
cnJpZGVzSGFzSW5zdGFuY2UsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIG1faml0LmNtcGxfaTMy
cihJbXBsZW1lbnRzSGFzSW5zdGFuY2UsIFg4Njo6ZWN4KTsKKworICAgICAgICAgICAgbV9zbG93
Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkobV9qaXQuZW1pdFVubGlua2VkSm5lKCksIGkpKTsK
KworICAgICAgICAgICAgZW1pdEdldEFyZyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBY
ODY6OmVjeCk7IC8vIHJlbG9hZCB2YWx1ZQorICAgICAgICAgICAgZW1pdEdldEFyZyhpbnN0cnVj
dGlvbltpICsgNF0udS5vcGVyYW5kLCBYODY6OmVkeCk7IC8vIHJlbG9hZCBwcm90bworCisgICAg
ICAgICAgICAvLyBvcHRpbWlzdGljYWxseSBsb2FkIHRydWUgcmVzdWx0CisgICAgICAgICAgICBt
X2ppdC5tb3ZsX2kzMnIocmVpbnRlcnByZXRfY2FzdDxpbnQzMl90Pihqc0Jvb2xlYW4odHJ1ZSkp
LCBYODY6OmVheCk7CisKKyAgICAgICAgICAgIFg4NkFzc2VtYmxlcjo6Sm1wRHN0IGxvb3AgPSBt
X2ppdC5sYWJlbCgpOworCisgICAgICAgICAgICAvLyBsb2FkIHZhbHVlJ3MgcHJvdG90eXBlCisg
ICAgICAgICAgICBtX2ppdC5tb3ZsX21yKE9CSkVDVF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVy
ZUlEKSwgWDg2OjplY3gsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIG1faml0Lm1vdmxfbXIoT0JK
RUNUX09GRlNFVChTdHJ1Y3R1cmVJRCwgbV9wcm90b3R5cGUpLCBYODY6OmVjeCwgWDg2OjplY3gp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5jbXBsX3JyKFg4Njo6ZWN4LCBYODY6
OmVkeCk7CisgICAgICAgICAgICBYODZBc3NlbWJsZXI6OkptcFNyYyBleGl0ID0gbV9qaXQuZW1p
dFVubGlua2VkSmUoKTsKKworICAgICAgICAgICAgbV9qaXQuY21wbF9pMzJyKHJlaW50ZXJwcmV0
X2Nhc3Q8aW50MzJfdD4oanNOdWxsKCkpLCBYODY6OmVjeCk7CisgICAgICAgICAgICBYODZBc3Nl
bWJsZXI6OkptcFNyYyBnb1RvTG9vcCA9IG1faml0LmVtaXRVbmxpbmtlZEpuZSgpOworICAgICAg
ICAgICAgbV9qaXQubGluayhnb1RvTG9vcCwgbG9vcCk7CisKKyAgICAgICAgICAgIG1faml0Lm1v
dmxfaTMycihyZWludGVycHJldF9jYXN0PGludDMyX3Q+KGpzQm9vbGVhbihmYWxzZSkpLCBYODY6
OmVheCk7CisKKyAgICAgICAgICAgIG1faml0LmxpbmsoZXhpdCwgbV9qaXQubGFiZWwoKSk7CisK
ICAgICAgICAgICAgIGVtaXRQdXRSZXN1bHQoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7
CisKICAgICAgICAgICAgIGkgKz0gNTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBA
IC0yMDk5LDcgKzIxNTEsNyBAQCB2b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQog
ICAgICAgICAgICAgaSArPSA0OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9lcToKKyAgICAgICAgY2FzZSBvcF9lcTogewogICAgICAgICAgICAgbV9qaXQu
bGluayhpdGVyLT5mcm9tLCBtX2ppdC5sYWJlbCgpKTsKICAgICAgICAgICAgIGVtaXRQdXRBcmco
WDg2OjplYXgsIDApOwogICAgICAgICAgICAgZW1pdFB1dEFyZyhYODY6OmVkeCwgNCk7CkBAIC0y
MTA3LDkgKzIxNTksMTkgQEAgdm9pZCBDVEk6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAg
ICAgICAgICAgIGVtaXRQdXRSZXN1bHQoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CiAg
ICAgICAgICAgICBpICs9IDQ7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAg
ICBDVElfQ09NUElMRV9CSU5BUllfT1BfU0xPV19DQVNFKG9wX3N0cmljdGVxKTsKICAgICAgICAg
Q1RJX0NPTVBJTEVfQklOQVJZX09QX1NMT1dfQ0FTRShvcF9uc3RyaWN0ZXEpOwotCisgICAgICAg
IGNhc2Ugb3BfaW5zdGFuY2VvZjogeworICAgICAgICAgICAgbV9qaXQubGluayhpdGVyLT5mcm9t
LCBtX2ppdC5sYWJlbCgpKTsKKyAgICAgICAgICAgIGVtaXRHZXRQdXRBcmcoaW5zdHJ1Y3Rpb25b
aSArIDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOworICAgICAgICAgICAgZW1pdEdldFB1dEFy
ZyhpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCA0LCBYODY6OmVjeCk7CisgICAgICAgICAg
ICBlbWl0R2V0UHV0QXJnKGluc3RydWN0aW9uW2kgKyA0XS51Lm9wZXJhbmQsIDgsIFg4Njo6ZWN4
KTsKKyAgICAgICAgICAgIGVtaXRDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF9pbnN0YW5jZW9mKTsK
KyAgICAgICAgICAgIGVtaXRQdXRSZXN1bHQoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7
CisgICAgICAgICAgICBpICs9IDU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAg
ICAgICBjYXNlIG9wX21vZDogewogICAgICAgICAgICAgWDg2QXNzZW1ibGVyOjpKbXBTcmMgbm90
SW1tMSA9IGl0ZXItPmZyb207CiAgICAgICAgICAgICBYODZBc3NlbWJsZXI6OkptcFNyYyBub3RJ
bW0yID0gKCsraXRlciktPmZyb207CkBAIC0yMTI2LDcgKzIxODgsNiBAQCB2b2lkIENUSTo6cHJp
dmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgQ1RJX0NPTVBJTEVfQklOQVJZX09QX1NMT1dfQ0FTRShvcF9tdWwpOwotCiAgICAgICAg
IGNhc2Ugb3BfY2FsbDoKICAgICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6CiAgICAgICAgIGNhc2Ug
b3BfY29uc3RydWN0OiB7CkluZGV4OiBWTS9NYWNoaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9N
YWNoaW5lLmNwcAkocmV2aXNpb24gMzY4MDUpCisrKyBWTS9NYWNoaW5lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDI5NSwzNCArNDI5NSwxNSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfaW5z
dGFuY2VvZihDVElfCiAgICAgSlNWYWx1ZSogdmFsdWUgPSBBUkdfc3JjMTsKICAgICBKU1ZhbHVl
KiBiYXNlVmFsID0gQVJHX3NyYzI7CiAgICAgSlNWYWx1ZSogcHJvdG8gPSBBUkdfc3JjMzsKLQot
ICAgIGlmIChVTkxJS0VMWShKU0ltbWVkaWF0ZTo6aXNBbnlJbW1lZGlhdGUodmFsdWUsIGJhc2VW
YWwsIHByb3RvKSkpCi0gICAgICAgIGdvdG8gc2xvd19jYXNlczsKLQogICAgIEpTQ2VsbCogdmFs
dWVDZWxsID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4odmFsdWUpOwogICAgIEpTQ2VsbCogYmFzZUNl
bGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihiYXNlVmFsKTsKICAgICBKU0NlbGwqIHByb3RvQ2Vs
bCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KHByb3RvKTsKIAotICAgIGlmIChVTkxJS0VMWSghdmFs
dWVDZWxsLT5pc09iamVjdCgpIHwgIWJhc2VDZWxsLT5pc09iamVjdCgpIHwgIXByb3RvQ2VsbC0+
aXNPYmplY3QoKSkpCi0gICAgICAgIGdvdG8gc2xvd19jYXNlczsKLQotICAgIGlmIChVTkxJS0VM
WSgoYmFzZUNlbGwtPnN0cnVjdHVyZUlEKCktPnR5cGVJbmZvKCkuZmxhZ3MoKSAmIChJbXBsZW1l
bnRzSGFzSW5zdGFuY2UgfCBPdmVycmlkZXNIYXNJbnN0YW5jZSkpICE9IEltcGxlbWVudHNIYXNJ
bnN0YW5jZSkpCi0gICAgICAgIGdvdG8gc2xvd19jYXNlczsKLQotICAgIEpTT2JqZWN0KiB0ZXN0
UHJvdG90eXBlID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihzdGF0aWNfY2FzdDxKU09iamVjdCo+
KHZhbHVlQ2VsbCktPnByb3RvdHlwZSgpKTsKLQotICAgIGlmICh0ZXN0UHJvdG90eXBlID09IHBy
b3RvKQotICAgICAgICByZXR1cm4ganNCb29sZWFuKHRydWUpOworICAgIC8vIGF0IGxlYXN0IG9u
ZSBvZiB0aGVzZSBjaGVja3MgbXVzdCBoYXZlIGZhaWxlZCB0byBnZXQgdG8gdGhlIHNsb3cgY2Fz
ZQorICAgIEFTU0VSVChKU0ltbWVkaWF0ZTo6aXNBbnlJbW1lZGlhdGUodmFsdWVDZWxsLCBiYXNl
Q2VsbCwgcHJvdG9DZWxsKSB8fAorICAgICAgICAgICAhdmFsdWVDZWxsLT5pc09iamVjdCgpIHx8
ICFiYXNlQ2VsbC0+aXNPYmplY3QoKSB8fCAhcHJvdG9DZWxsLT5pc09iamVjdCgpIHx8CisgICAg
ICAgICAgIChiYXNlQ2VsbC0+c3RydWN0dXJlSUQoKS0+dHlwZUluZm8oKS5mbGFncygpICYgKElt
cGxlbWVudHNIYXNJbnN0YW5jZSB8IE92ZXJyaWRlc0hhc0luc3RhbmNlKSkgIT0gSW1wbGVtZW50
c0hhc0luc3RhbmNlKTsKIAotICAgIHdoaWxlICh0ZXN0UHJvdG90eXBlICE9IGpzTnVsbCgpKSB7
Ci0gICAgICAgIHRlc3RQcm90b3R5cGUgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHRlc3RQcm90
b3R5cGUtPnByb3RvdHlwZSgpKTsKLSAgICAgICAgaWYgKHRlc3RQcm90b3R5cGUgPT0gcHJvdG8p
Ci0gICAgICAgICAgICByZXR1cm4ganNCb29sZWFuKHRydWUpOwotICAgIH0KLQotICAgIHJldHVy
biBqc0Jvb2xlYW4oZmFsc2UpOwotCi0gc2xvd19jYXNlczogICAgIAogICAgIGlmICghYmFzZVZh
bC0+aXNPYmplY3QoKSkgewogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IEFSR19jb2Rl
QmxvY2s7CiAgICAgICAgIEFTU0VSVChjb2RlQmxvY2stPmN0aVJldHVybkFkZHJlc3NWUENNYXAu
Y29udGFpbnMoQ1RJX1JFVFVSTl9BRERSRVNTKSk7CkBAIC00MzMxLDcgKzQzMTIsNiBAQCBKU1Zh
bHVlKiBNYWNoaW5lOjpjdGlfb3BfaW5zdGFuY2VvZihDVElfCiAgICAgICAgIFZNX0NIRUNLX0VY
Q0VQVElPTihKU1ZhbHVlKik7CiAgICAgfQogCi0gICAgYmFzZUNlbGwgPSBzdGF0aWNfY2FzdDxK
U0NlbGwqPihiYXNlVmFsKTsKICAgICBpZiAoIWJhc2VDZWxsLT5zdHJ1Y3R1cmVJRCgpLT50eXBl
SW5mbygpLmltcGxlbWVudHNIYXNJbnN0YW5jZSgpKQogICAgICAgICByZXR1cm4ganNCb29sZWFu
KGZhbHNlKTsKIApAQCAtNDM0Myw5ICs0MzIzLDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29w
X2luc3RhbmNlb2YoQ1RJXwogICAgIGlmICghdmFsdWUtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJl
dHVybiBqc0Jvb2xlYW4oZmFsc2UpOwogCi0gICAgQVNTRVJUKGJhc2VDZWxsLT5zdHJ1Y3R1cmVJ
RCgpLT50eXBlSW5mbygpLmltcGxlbWVudHNIYXNJbnN0YW5jZSgpKTsKLQotICAgIEpTVmFsdWUq
IHJlc3VsdCA9IGpzQm9vbGVhbihzdGF0aWNfY2FzdDxKU09iamVjdCo+KGJhc2VDZWxsKS0+aGFz
SW5zdGFuY2UoZXhlYywgdmFsdWUsIHByb3RvKSk7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNC
b29sZWFuKHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oYmFzZUNlbGwpLT5oYXNJbnN0YW5jZShleGVj
LCB2YWx1ZUNlbGwsIHByb3RvQ2VsbCkpOwogICAgIFZNX0NIRUNLX0VYQ0VQVElPTl9BVF9FTkQo
KTsKIAogICAgIHJldHVybiByZXN1bHQ7Cg==
</data>
<flag name="review"
          id="10641"
          type_id="1"
          status="+"
          setter="zwarich"
    />
          </attachment>
      

    </bug>

</bugzilla>