<?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>30658</bug_id>
          
          <creation_ts>2009-10-21 19:56:58 -0700</creation_ts>
          <short_desc>Uninitialized memory access in svg SynchronizableProperty hashing</short_desc>
          <delta_ts>2009-10-26 20:39:08 -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>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://code.google.com/p/chromium/issues/detail?id=25220</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="Matt Mueller">mattm</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>156756</commentid>
    <comment_count>0</comment_count>
    <who name="Matt Mueller">mattm</who>
    <bug_when>2009-10-21 19:56:58 -0700</bug_when>
    <thetext>The hash function in SynchronizablePropertyHash uses sizeof(SynchronizableProperty), however because of struct alignment the memory that is initialized by the constructor is not the entire memory of the struct.  So the hash function will read some extra uninitialized memory after the bool.

This shows up when running various svg layout tests under valgrind, a few examples are: LayoutTests/svg/custom/js-late-mask-and-object-creation.svg, LayoutTests/fast/backgrounds/animated-svg-as-mask.html, LayoutTests/fast/backgrounds/svg-as-background-6.html

In fixing this I noticed that the shouldSynchronize member being used as part of the hash key seems bad, as the hash key should not be mutable.

The attached patch fixes this by removing shouldSynchronize from the hash key and equality comparisons.  After doing this, the code seems a bit like using a HashSet&lt;SynchronizableProperty&gt; to emulate a HashMap&lt;SVGAnimatedPropertyBase*, bool&gt;,  so maybe I should just change it to do that instead?  Not sure if there were other reasons the code was structured this way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156757</commentid>
    <comment_count>1</comment_count>
      <attachid>41630</attachid>
    <who name="Matt Mueller">mattm</who>
    <bug_when>2009-10-21 19:59:16 -0700</bug_when>
    <thetext>Created attachment 41630
Remove shouldSynchronize from hash functions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156764</commentid>
    <comment_count>2</comment_count>
    <who name="Matt Mueller">mattm</who>
    <bug_when>2009-10-21 20:11:30 -0700</bug_when>
    <thetext>Actually it looks like the shouldSynchronize is only used on a per-attribute basis, so it could just be a struct containing a HashSet&lt;SVGAnimatedPropertyBase*&gt; and a shouldSynchronize bit (unless setPropertyNeedsSynchronization can be called before the Properties HashSet is fully populated?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156928</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-10-22 10:47:37 -0700</bug_when>
    <thetext>Nikolas wrote this code I think and would be best to comment/review here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157630</commentid>
    <comment_count>4</comment_count>
      <attachid>41630</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-10-25 15:54:07 -0700</bug_when>
    <thetext>Comment on attachment 41630
Remove shouldSynchronize from hash functions

If the whole point here is to record a set of properties and a flag for which ones need synchronization, then I suggest using a HashMap&lt;SVGAnimatedPropertyBase*, bool&gt; rather than a HashSet of a new type. Then we could get rid of SynchronizableProperty, SynchronizablePropertyHash, and SynchronizablePropertyHashTraits.

Another option would be to use two HashSet&lt;SVGAnimatedPropertyBase*&gt; -- one for all properties, and another that contains only properties that require synchronization. That could still be done without a custom hash.

&gt;      bool operator==(const SynchronizableProperty&amp; other) const
&gt;      {
&gt; -        return base == other.base &amp;&amp; shouldSynchronize == other.shouldSynchronize;
&gt; +        return base == other.base;
&gt;      }

If we don&apos;t take my suggestion above, then I think it&apos;s poor style to have an &quot;==&quot; operation that will cause two object to compare as equal if some of their state is not identical. I suggest changing SynchronizablePropertyHash::equal instead. I also suggest removing this overload of operator== since it is unlikely there is code that relies on it.

&gt;      static unsigned hash(const SynchronizableProperty&amp; key)
&gt;      {
&gt; -        return StringImpl::computeHash(reinterpret_cast&lt;const UChar*&gt;(&amp;key), sizeof(SynchronizableProperty) / sizeof(UChar));
&gt; +        return StringImpl::computeHash(reinterpret_cast&lt;const UChar*&gt;(&amp;key.base), sizeof(key.base) / sizeof(UChar));
&gt;      }

If we don&apos;t take my suggestion above, then since we are hashing just a pointer, it&apos;s far better to use PtrHash&lt;SVGAnimatedPropertyBase*&gt;::hash instead of StringImpl::computeHash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157631</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-10-25 15:55:43 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Actually it looks like the shouldSynchronize is only used on a per-attribute
&gt; basis, so it could just be a struct containing a
&gt; HashSet&lt;SVGAnimatedPropertyBase*&gt; and a shouldSynchronize bit (unless
&gt; setPropertyNeedsSynchronization can be called before the Properties HashSet is
&gt; fully populated?)

That sounds good too. Lets do this!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157987</commentid>
    <comment_count>6</comment_count>
      <attachid>41909</attachid>
    <who name="Matt Mueller">mattm</who>
    <bug_when>2009-10-26 16:01:26 -0700</bug_when>
    <thetext>Created attachment 41909
Use a HashSet&lt;SVGAnimatedPropertyBase*&gt; and a bool.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157990</commentid>
    <comment_count>7</comment_count>
      <attachid>41911</attachid>
    <who name="Matt Mueller">mattm</who>
    <bug_when>2009-10-26 16:05:19 -0700</bug_when>
    <thetext>Created attachment 41911
Use a HashSet&lt;SVGAnimatedPropertyBase*&gt; and a bool.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158038</commentid>
    <comment_count>8</comment_count>
      <attachid>41911</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-10-26 17:37:52 -0700</bug_when>
    <thetext>Comment on attachment 41911
Use a HashSet&lt;SVGAnimatedPropertyBase*&gt; and a bool.

OK.  Queuing for commit.  Commit might take a while as the bots are very behind right now:
http://webkit-commit-queue.appspot.com/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158082</commentid>
    <comment_count>9</comment_count>
      <attachid>41911</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-10-26 20:39:03 -0700</bug_when>
    <thetext>Comment on attachment 41911
Use a HashSet&lt;SVGAnimatedPropertyBase*&gt; and a bool.

Clearing flags on attachment: 41911

Committed r50126: &lt;http://trac.webkit.org/changeset/50126&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158083</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-10-26 20:39:08 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41630</attachid>
            <date>2009-10-21 19:59:16 -0700</date>
            <delta_ts>2009-10-26 16:01:26 -0700</delta_ts>
            <desc>Remove shouldSynchronize from hash functions</desc>
            <filename>webkit_30658_0.diff</filename>
            <type>text/plain</type>
            <size>1864</size>
            <attacher name="Matt Mueller">mattm</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZGY2M2NmNS4uZDU4NmE3ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAwOS0xMC0yMSAgTWF0dCBNdWVsbGVy
ICA8bWF0dG1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEF2b2lkIHJlYWRpbmcgdW5pdGlsaWF6ZWQgbWVtb3J5IGluIFN5bmNo
cm9uaXphYmxlUHJvcGVydHkgaGFzaCBmdW5jdGlvbi4KKyAgICAgICAgQWxzbywgc3RvcCB1c2lu
ZyBtdXRhYmxlIGRhdGEgaW4gaGFzaCBrZXkgYW5kIGVxdWFsaXR5LgorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDY1OAorCisgICAgICAgIENvdmVy
ZWQgYnkgcnVubmluZyB2YXJpb3VzIHN2ZyB0ZXN0cyB1bmRlciB2YWxncmluZCwgZXg6CisgICAg
ICAgIExheW91dFRlc3RzL3N2Zy9jdXN0b20vanMtbGF0ZS1tYXNrLWFuZC1vYmplY3QtY3JlYXRp
b24uc3ZnCisKKyAgICAgICAgKiBzdmcvU3luY2hyb25pemFibGVQcm9wZXJ0eUNvbnRyb2xsZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlN5bmNocm9uaXphYmxlUHJvcGVydHk6Om9wZXJhdG9yPT0p
OgorICAgICAgICAoV2ViQ29yZTo6U3luY2hyb25pemFibGVQcm9wZXJ0eUhhc2g6Omhhc2gpOgor
CiAyMDA5LTEwLTIxICBEdW1pdHJ1IERhbmlsaXVjICA8ZHVtaUBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9z
dmcvU3luY2hyb25pemFibGVQcm9wZXJ0eUNvbnRyb2xsZXIuaCBiL1dlYkNvcmUvc3ZnL1N5bmNo
cm9uaXphYmxlUHJvcGVydHlDb250cm9sbGVyLmgKaW5kZXggYjdmMTAxYi4uYWRjNGVkYyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9zdmcvU3luY2hyb25pemFibGVQcm9wZXJ0eUNvbnRyb2xsZXIuaAor
KysgYi9XZWJDb3JlL3N2Zy9TeW5jaHJvbml6YWJsZVByb3BlcnR5Q29udHJvbGxlci5oCkBAIC01
Nyw3ICs1Nyw3IEBAIHN0cnVjdCBTeW5jaHJvbml6YWJsZVByb3BlcnR5IHsKIAogICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBTeW5jaHJvbml6YWJsZVByb3BlcnR5JiBvdGhlcikgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiBiYXNlID09IG90aGVyLmJhc2UgJiYgc2hvdWxkU3luY2hyb25p
emUgPT0gb3RoZXIuc2hvdWxkU3luY2hyb25pemU7CisgICAgICAgIHJldHVybiBiYXNlID09IG90
aGVyLmJhc2U7CiAgICAgfQogCiAgICAgU1ZHQW5pbWF0ZWRQcm9wZXJ0eUJhc2UqIGJhc2U7CkBA
IC02Nyw3ICs2Nyw3IEBAIHN0cnVjdCBTeW5jaHJvbml6YWJsZVByb3BlcnR5IHsKIHN0cnVjdCBT
eW5jaHJvbml6YWJsZVByb3BlcnR5SGFzaCB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29u
c3QgU3luY2hyb25pemFibGVQcm9wZXJ0eSYga2V5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0
cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPigma2V5
KSwgc2l6ZW9mKFN5bmNocm9uaXphYmxlUHJvcGVydHkpIC8gc2l6ZW9mKFVDaGFyKSk7CisgICAg
ICAgIHJldHVybiBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChyZWludGVycHJldF9jYXN0PGNvbnN0
IFVDaGFyKj4oJmtleS5iYXNlKSwgc2l6ZW9mKGtleS5iYXNlKSAvIHNpemVvZihVQ2hhcikpOwog
ICAgIH0KIAogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFN5bmNocm9uaXphYmxlUHJvcGVy
dHkmIGEsIGNvbnN0IFN5bmNocm9uaXphYmxlUHJvcGVydHkmIGIpCg==
</data>
<flag name="review"
          id="23056"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41909</attachid>
            <date>2009-10-26 16:01:26 -0700</date>
            <delta_ts>2009-10-26 16:05:19 -0700</delta_ts>
            <desc>Use a HashSet&lt;SVGAnimatedPropertyBase*&gt; and a bool.</desc>
            <filename>webkit_30658_2.diff</filename>
            <type>text/plain</type>
            <size>10467</size>
            <attacher name="Matt Mueller">mattm</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTM0YTQ5OS4uYzVlZDliNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAwOS0xMC0yNiAgTWF0dCBNdWVsbGVy
ICA8bWF0dG1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFJlZmFjdG9yIHN5bmNocm9uaXphYmxlIHByb3BlcnR5IGhhbmRsaW5n
IHRvIHN0b3JlIG9uZSBzaG91bGRTeW5jaHJvbml6ZSBmbGFnIHBlciBzZXQgb2YgcHJvcGVydGll
cyByYXRoZXIgdGhhbiBvbmUgcGVyIHByb3BlcnR5LgorCisgICAgICAgIEZpeGVzIHRoZSByZWFk
aW5nIHVuaXRpbGlhemVkIG1lbW9yeSBpbiBTeW5jaHJvbml6YWJsZVByb3BlcnR5IGhhc2ggZnVu
Y3Rpb24gYXMgd2VsbCBhcyBzaW1wbGlmeWluZyB0aGUgY29kZS4KKworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA2NTgKKworICAgICAgICBDb3ZlcmVk
IGJ5IHJ1bm5pbmcgdmFyaW91cyBzdmcgdGVzdHMgdW5kZXIgdmFsZ3JpbmQsIGV4OgorICAgICAg
ICBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL2pzLWxhdGUtbWFzay1hbmQtb2JqZWN0LWNyZWF0aW9u
LnN2ZworCisgICAgICAgICogc3ZnL1N5bmNocm9uaXphYmxlUHJvcGVydHlDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN5bmNocm9uaXphYmxlUHJvcGVydGllczo6YWRkUHJvcGVy
dHkpOgorICAgICAgICAoV2ViQ29yZTo6U3luY2hyb25pemFibGVQcm9wZXJ0aWVzOjpzeW5jaHJv
bml6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbml6YWJsZVByb3BlcnRpZXM6OnN0YXJ0
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN5bmNocm9uaXphYmxlUHJvcGVydGllczo6
c3RvcEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbml6YWJsZVByb3BlcnR5
Q29udHJvbGxlcjo6cmVnaXN0ZXJQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTeW5jaHJv
bml6YWJsZVByb3BlcnR5Q29udHJvbGxlcjo6c2V0UHJvcGVydHlOZWVkc1N5bmNocm9uaXphdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbml6YWJsZVByb3BlcnR5Q29udHJvbGxlcjo6
c3luY2hyb25pemVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbml6YWJsZVBy
b3BlcnR5Q29udHJvbGxlcjo6c3luY2hyb25pemVBbGxQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlN5bmNocm9uaXphYmxlUHJvcGVydHlDb250cm9sbGVyOjpzdGFydEFuaW1hdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbml6YWJsZVByb3BlcnR5Q29udHJvbGxlcjo6c3Rv
cEFuaW1hdGlvbik6CisgICAgICAgICogc3ZnL1N5bmNocm9uaXphYmxlUHJvcGVydHlDb250cm9s
bGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbml6YWJsZVByb3BlcnRpZXM6OlN5bmNo
cm9uaXphYmxlUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbml6YWJsZVBy
b3BlcnRpZXM6OnNldE5lZWRzU3luY2hyb25pemF0aW9uKToKKwogMjAwOS0xMC0yNiAgTGFzemxv
IEdvbWJvcyAgPGxhc3psby4xLmdvbWJvc0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TeW5jaHJvbml6YWJsZVBy
b3BlcnR5Q29udHJvbGxlci5jcHAgYi9XZWJDb3JlL3N2Zy9TeW5jaHJvbml6YWJsZVByb3BlcnR5
Q29udHJvbGxlci5jcHAKaW5kZXggZTk2OTUxNC4uYmU4YWI3OCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9zdmcvU3luY2hyb25pemFibGVQcm9wZXJ0eUNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUv
c3ZnL1N5bmNocm9uaXphYmxlUHJvcGVydHlDb250cm9sbGVyLmNwcApAQCAtMjgsNiArMjgsNTIg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit2b2lkIFN5bmNocm9uaXphYmxlUHJvcGVydGll
czo6YWRkUHJvcGVydHkoU1ZHQW5pbWF0ZWRQcm9wZXJ0eUJhc2UqIGJhc2UpCit7CisgICAgbV9i
YXNlcy5hZGQoYmFzZSk7Cit9CisKK3ZvaWQgU3luY2hyb25pemFibGVQcm9wZXJ0aWVzOjpzeW5j
aHJvbml6ZSgpCit7CisgICAgQVNTRVJUKCFtX2Jhc2VzLmlzRW1wdHkoKSk7CisgICAgaWYgKG1f
c2hvdWxkU3luY2hyb25pemUpIHsKKyAgICAgICAgQmFzZVNldDo6aXRlcmF0b3IgaXQgPSBtX2Jh
c2VzLmJlZ2luKCk7CisgICAgICAgIEJhc2VTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fYmFzZXMuZW5k
KCk7CisKKyAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgU1ZH
QW5pbWF0ZWRQcm9wZXJ0eUJhc2UqIGJhc2UgPSAqaXQ7CisgICAgICAgICAgICBBU1NFUlQoYmFz
ZSk7CisgICAgICAgICAgICBiYXNlLT5zeW5jaHJvbml6ZSgpOworICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIFN5bmNocm9uaXphYmxlUHJvcGVydGllczo6c3RhcnRBbmltYXRpb24oKQorewor
ICAgIEFTU0VSVCghbV9iYXNlcy5pc0VtcHR5KCkpOworICAgIEJhc2VTZXQ6Oml0ZXJhdG9yIGl0
ID0gbV9iYXNlcy5iZWdpbigpOworICAgIEJhc2VTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fYmFzZXMu
ZW5kKCk7CisKKyAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFNWR0FuaW1h
dGVkUHJvcGVydHlCYXNlKiBiYXNlID0gKml0OworICAgICAgICBBU1NFUlQoYmFzZSk7CisgICAg
ICAgIGJhc2UtPnN0YXJ0QW5pbWF0aW9uKCk7CisgICAgfQorfQorCit2b2lkIFN5bmNocm9uaXph
YmxlUHJvcGVydGllczo6c3RvcEFuaW1hdGlvbigpCit7CisgICAgQVNTRVJUKCFtX2Jhc2VzLmlz
RW1wdHkoKSk7CisgICAgQmFzZVNldDo6aXRlcmF0b3IgaXQgPSBtX2Jhc2VzLmJlZ2luKCk7Cisg
ICAgQmFzZVNldDo6aXRlcmF0b3IgZW5kID0gbV9iYXNlcy5lbmQoKTsKKworICAgIGZvciAoOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgU1ZHQW5pbWF0ZWRQcm9wZXJ0eUJhc2UqIGJhc2Ug
PSAqaXQ7CisgICAgICAgIEFTU0VSVChiYXNlKTsKKyAgICAgICAgYmFzZS0+c3RvcEFuaW1hdGlv
bigpOworICAgIH0KK30KKwogU3luY2hyb25pemFibGVQcm9wZXJ0eUNvbnRyb2xsZXI6OlN5bmNo
cm9uaXphYmxlUHJvcGVydHlDb250cm9sbGVyKCkKIHsKIH0KQEAgLTM2LDIwICs4MiwxNSBAQCB2
b2lkIFN5bmNocm9uaXphYmxlUHJvcGVydHlDb250cm9sbGVyOjpyZWdpc3RlclByb3BlcnR5KGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dAogewogICAgIC8vICdhdHRyTmFtZScgaXMgYW1iaWdpb3Vz
LiBGb3IgaW5zdGFuY2UgaW4gU1ZHTWFya2VyRWxlbWVudCBib3RoICdvcmllbnRUeXBlJyAvICdv
cmllbnRBbmdsZScKICAgICAvLyBTVkcgRE9NIG9iamVjdHMgYXJlIHN5bmNocm9uaXplZCB3aXRo
IHRoZSAnb3JpZW50JyBhdHRyaWJ1dGUuIFRoaXMgd2h5IHdlIG5lZWQgYSBIYXNoU2V0LgotICAg
IFN5bmNocm9uaXphYmxlUHJvcGVydHkgcHJvcGVydHkoYmFzZSk7Ci0KICAgICBQcm9wZXJ0eU1h
cDo6aXRlcmF0b3IgaXQgPSBtX21hcC5maW5kKGF0dHJOYW1lLmxvY2FsTmFtZSgpKTsKICAgICBp
ZiAoaXQgPT0gbV9tYXAuZW5kKCkpIHsKLSAgICAgICAgUHJvcGVydGllcyBwcm9wZXJ0aWVzOwot
ICAgICAgICBwcm9wZXJ0aWVzLmFkZChwcm9wZXJ0eSk7CisgICAgICAgIFN5bmNocm9uaXphYmxl
UHJvcGVydGllcyBwcm9wZXJ0aWVzOworICAgICAgICBwcm9wZXJ0aWVzLmFkZFByb3BlcnR5KGJh
c2UpOwogICAgICAgICBtX21hcC5zZXQoYXR0ck5hbWUubG9jYWxOYW1lKCksIHByb3BlcnRpZXMp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUHJvcGVydGllcyYgcHJvcGVydGllcyA9
IGl0LT5zZWNvbmQ7Ci0gICAgQVNTRVJUKCFwcm9wZXJ0aWVzLmlzRW1wdHkoKSk7Ci0KLSAgICBw
cm9wZXJ0aWVzLmFkZChwcm9wZXJ0eSk7CisgICAgaXQtPnNlY29uZC5hZGRQcm9wZXJ0eShiYXNl
KTsKIH0KIAogdm9pZCBTeW5jaHJvbml6YWJsZVByb3BlcnR5Q29udHJvbGxlcjo6c2V0UHJvcGVy
dHlOZWVkc1N5bmNocm9uaXphdGlvbihjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKQEAg
LTU3LDE3ICs5OCw3IEBAIHZvaWQgU3luY2hyb25pemFibGVQcm9wZXJ0eUNvbnRyb2xsZXI6OnNl
dFByb3BlcnR5TmVlZHNTeW5jaHJvbml6YXRpb24oY29uc3QgUXVhCiAgICAgUHJvcGVydHlNYXA6
Oml0ZXJhdG9yIGl0UHJvcCA9IG1fbWFwLmZpbmQoYXR0ck5hbWUubG9jYWxOYW1lKCkpOwogICAg
IEFTU0VSVChpdFByb3AgIT0gbV9tYXAuZW5kKCkpOwogCi0gICAgUHJvcGVydGllcyYgcHJvcGVy
dGllcyA9IGl0UHJvcC0+c2Vjb25kOwotICAgIEFTU0VSVCghcHJvcGVydGllcy5pc0VtcHR5KCkp
OwotCi0gICAgUHJvcGVydGllczo6aXRlcmF0b3IgaXQgPSBwcm9wZXJ0aWVzLmJlZ2luKCk7Ci0g
ICAgUHJvcGVydGllczo6aXRlcmF0b3IgZW5kID0gcHJvcGVydGllcy5lbmQoKTsKLQotICAgIGZv
ciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgU3luY2hyb25pemFibGVQcm9wZXJ0eSYg
cHJvcGVydHkgPSAqaXQ7Ci0gICAgICAgIEFTU0VSVChwcm9wZXJ0eS5iYXNlKTsKLSAgICAgICAg
cHJvcGVydHkuc2hvdWxkU3luY2hyb25pemUgPSB0cnVlOwotICAgIH0KKyAgICBpdFByb3AtPnNl
Y29uZC5zZXROZWVkc1N5bmNocm9uaXphdGlvbigpOwogfQogCiB2b2lkIFN5bmNocm9uaXphYmxl
UHJvcGVydHlDb250cm9sbGVyOjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFN0cmluZyYgbmFt
ZSkKQEAgLTc2LDIxICsxMDcsNyBAQCB2b2lkIFN5bmNocm9uaXphYmxlUHJvcGVydHlDb250cm9s
bGVyOjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICBpZiAoaXRQ
cm9wID09IG1fbWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBQcm9wZXJ0aWVzJiBw
cm9wZXJ0aWVzID0gaXRQcm9wLT5zZWNvbmQ7Ci0gICAgQVNTRVJUKCFwcm9wZXJ0aWVzLmlzRW1w
dHkoKSk7Ci0KLSAgICBQcm9wZXJ0aWVzOjppdGVyYXRvciBpdCA9IHByb3BlcnRpZXMuYmVnaW4o
KTsKLSAgICBQcm9wZXJ0aWVzOjppdGVyYXRvciBlbmQgPSBwcm9wZXJ0aWVzLmVuZCgpOwotCi0g
ICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBTeW5jaHJvbml6YWJsZVByb3Bl
cnR5JiBwcm9wZXJ0eSA9ICppdDsKLSAgICAgICAgQVNTRVJUKHByb3BlcnR5LmJhc2UpOwotCi0g
ICAgICAgIGlmICghcHJvcGVydHkuc2hvdWxkU3luY2hyb25pemUpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICBwcm9wZXJ0eS5iYXNlLT5zeW5jaHJvbml6ZSgpOwotICAgIH0KKyAg
ICBpdFByb3AtPnNlY29uZC5zeW5jaHJvbml6ZSgpOwogfQogCiB2b2lkIFN5bmNocm9uaXphYmxl
UHJvcGVydHlDb250cm9sbGVyOjpzeW5jaHJvbml6ZUFsbFByb3BlcnRpZXMoKQpAQCAtMTAxLDIz
ICsxMTgsOCBAQCB2b2lkIFN5bmNocm9uaXphYmxlUHJvcGVydHlDb250cm9sbGVyOjpzeW5jaHJv
bml6ZUFsbFByb3BlcnRpZXMoKQogICAgIFByb3BlcnR5TWFwOjppdGVyYXRvciBpdFByb3AgPSBt
X21hcC5iZWdpbigpOwogICAgIFByb3BlcnR5TWFwOjppdGVyYXRvciBlbmRQcm9wID0gbV9tYXAu
ZW5kKCk7CiAKLSAgICBmb3IgKDsgaXRQcm9wICE9IGVuZFByb3A7ICsraXRQcm9wKSB7Ci0gICAg
ICAgIFByb3BlcnRpZXMmIHByb3BlcnRpZXMgPSBpdFByb3AtPnNlY29uZDsKLSAgICAgICAgQVNT
RVJUKCFwcm9wZXJ0aWVzLmlzRW1wdHkoKSk7Ci0KLSAgICAgICAgUHJvcGVydGllczo6aXRlcmF0
b3IgaXQgPSBwcm9wZXJ0aWVzLmJlZ2luKCk7Ci0gICAgICAgIFByb3BlcnRpZXM6Oml0ZXJhdG9y
IGVuZCA9IHByb3BlcnRpZXMuZW5kKCk7Ci0KLSAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICAgICAgU3luY2hyb25pemFibGVQcm9wZXJ0eSYgcHJvcGVydHkgPSAqaXQ7
Ci0gICAgICAgICAgICBBU1NFUlQocHJvcGVydHkuYmFzZSk7Ci0KLSAgICAgICAgICAgIGlmICgh
cHJvcGVydHkuc2hvdWxkU3luY2hyb25pemUpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgICAgIHByb3BlcnR5LmJhc2UtPnN5bmNocm9uaXplKCk7Ci0gICAgICAgIH0KLSAg
ICB9CisgICAgZm9yICg7IGl0UHJvcCAhPSBlbmRQcm9wOyArK2l0UHJvcCkKKyAgICAgICAgaXRQ
cm9wLT5zZWNvbmQuc3luY2hyb25pemUoKTsKIH0KIAogdm9pZCBTeW5jaHJvbml6YWJsZVByb3Bl
cnR5Q29udHJvbGxlcjo6c3RhcnRBbmltYXRpb24oY29uc3QgU3RyaW5nJiBuYW1lKQpAQCAtMTI2
LDE3ICsxMjgsNyBAQCB2b2lkIFN5bmNocm9uaXphYmxlUHJvcGVydHlDb250cm9sbGVyOjpzdGFy
dEFuaW1hdGlvbihjb25zdCBTdHJpbmcmIG5hbWUpCiAgICAgaWYgKGl0UHJvcCA9PSBtX21hcC5l
bmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUHJvcGVydGllcyYgcHJvcGVydGllcyA9IGl0
UHJvcC0+c2Vjb25kOwotICAgIEFTU0VSVCghcHJvcGVydGllcy5pc0VtcHR5KCkpOwotCi0gICAg
UHJvcGVydGllczo6aXRlcmF0b3IgaXQgPSBwcm9wZXJ0aWVzLmJlZ2luKCk7Ci0gICAgUHJvcGVy
dGllczo6aXRlcmF0b3IgZW5kID0gcHJvcGVydGllcy5lbmQoKTsKLQotICAgIGZvciAoOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgU3luY2hyb25pemFibGVQcm9wZXJ0eSYgcHJvcGVydHkg
PSAqaXQ7Ci0gICAgICAgIEFTU0VSVChwcm9wZXJ0eS5iYXNlKTsKLSAgICAgICAgcHJvcGVydHku
YmFzZS0+c3RhcnRBbmltYXRpb24oKTsKLSAgICB9CisgICAgaXRQcm9wLT5zZWNvbmQuc3RhcnRB
bmltYXRpb24oKTsKIH0KIAogdm9pZCBTeW5jaHJvbml6YWJsZVByb3BlcnR5Q29udHJvbGxlcjo6
c3RvcEFuaW1hdGlvbihjb25zdCBTdHJpbmcmIG5hbWUpCkBAIC0xNDUsMTcgKzEzNyw3IEBAIHZv
aWQgU3luY2hyb25pemFibGVQcm9wZXJ0eUNvbnRyb2xsZXI6OnN0b3BBbmltYXRpb24oY29uc3Qg
U3RyaW5nJiBuYW1lKQogICAgIGlmIChpdFByb3AgPT0gbV9tYXAuZW5kKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFByb3BlcnRpZXMmIHByb3BlcnRpZXMgPSBpdFByb3AtPnNlY29uZDsKLSAg
ICBBU1NFUlQoIXByb3BlcnRpZXMuaXNFbXB0eSgpKTsKLQotICAgIFByb3BlcnRpZXM6Oml0ZXJh
dG9yIGl0ID0gcHJvcGVydGllcy5iZWdpbigpOwotICAgIFByb3BlcnRpZXM6Oml0ZXJhdG9yIGVu
ZCA9IHByb3BlcnRpZXMuZW5kKCk7Ci0KLSAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIFN5bmNocm9uaXphYmxlUHJvcGVydHkmIHByb3BlcnR5ID0gKml0OwotICAgICAgICBB
U1NFUlQocHJvcGVydHkuYmFzZSk7Ci0gICAgICAgIHByb3BlcnR5LmJhc2UtPnN0b3BBbmltYXRp
b24oKTsKLSAgICB9CisgICAgaXRQcm9wLT5zZWNvbmQuc3RvcEFuaW1hdGlvbigpOwogfQogCiB9
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TeW5jaHJvbml6YWJsZVByb3BlcnR5Q29udHJvbGxl
ci5oIGIvV2ViQ29yZS9zdmcvU3luY2hyb25pemFibGVQcm9wZXJ0eUNvbnRyb2xsZXIuaAppbmRl
eCBiN2YxMDFiLi4xZWM1MDI2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TeW5jaHJvbml6YWJs
ZVByb3BlcnR5Q29udHJvbGxlci5oCisrKyBiL1dlYkNvcmUvc3ZnL1N5bmNocm9uaXphYmxlUHJv
cGVydHlDb250cm9sbGVyLmgKQEAgLTMxLDY1ICszMSwyOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBjbGFzcyBRdWFsaWZpZWROYW1lOwogY2xhc3MgU1ZHQW5pbWF0ZWRQcm9wZXJ0eUJhc2U7CiAK
LXN0cnVjdCBTeW5jaHJvbml6YWJsZVByb3BlcnR5IHsKLSAgICBTeW5jaHJvbml6YWJsZVByb3Bl
cnR5KCkKLSAgICAgICAgOiBiYXNlKDApCi0gICAgICAgICwgc2hvdWxkU3luY2hyb25pemUoZmFs
c2UpCi0gICAgewotICAgIH0KLQotICAgIGV4cGxpY2l0IFN5bmNocm9uaXphYmxlUHJvcGVydHko
U1ZHQW5pbWF0ZWRQcm9wZXJ0eUJhc2UqIF9iYXNlKQotICAgICAgICA6IGJhc2UoX2Jhc2UpCi0g
ICAgICAgICwgc2hvdWxkU3luY2hyb25pemUoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAgIGV4
cGxpY2l0IFN5bmNocm9uaXphYmxlUHJvcGVydHkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVU
eXBlKQotICAgICAgICA6IGJhc2UocmVpbnRlcnByZXRfY2FzdDxTVkdBbmltYXRlZFByb3BlcnR5
QmFzZSo+KC0xKSkKLSAgICAgICAgLCBzaG91bGRTeW5jaHJvbml6ZShmYWxzZSkKLSAgICB7Ci0g
ICAgfQotCi0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gYmFzZSA9PSByZWludGVycHJldF9jYXN0PFNWR0FuaW1hdGVkUHJvcGVy
dHlCYXNlKj4oLTEpOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTeW5jaHJv
bml6YWJsZVByb3BlcnR5JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBiYXNl
ID09IG90aGVyLmJhc2UgJiYgc2hvdWxkU3luY2hyb25pemUgPT0gb3RoZXIuc2hvdWxkU3luY2hy
b25pemU7Ci0gICAgfQotCi0gICAgU1ZHQW5pbWF0ZWRQcm9wZXJ0eUJhc2UqIGJhc2U7Ci0gICAg
Ym9vbCBzaG91bGRTeW5jaHJvbml6ZTsKLX07Ci0KLXN0cnVjdCBTeW5jaHJvbml6YWJsZVByb3Bl
cnR5SGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgU3luY2hyb25pemFibGVQ
cm9wZXJ0eSYga2V5KQorY2xhc3MgU3luY2hyb25pemFibGVQcm9wZXJ0aWVzIHsKK3B1YmxpYzoK
KyAgICBTeW5jaHJvbml6YWJsZVByb3BlcnRpZXMoKQorICAgICAgICA6IG1fc2hvdWxkU3luY2hy
b25pemUoZmFsc2UpCiAgICAgewotICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y29tcHV0ZUhh
c2gocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KCZrZXkpLCBzaXplb2YoU3luY2hyb25p
emFibGVQcm9wZXJ0eSkgLyBzaXplb2YoVUNoYXIpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9v
bCBlcXVhbChjb25zdCBTeW5jaHJvbml6YWJsZVByb3BlcnR5JiBhLCBjb25zdCBTeW5jaHJvbml6
YWJsZVByb3BlcnR5JiBiKQorICAgIHZvaWQgc2V0TmVlZHNTeW5jaHJvbml6YXRpb24oKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICAgICAgbV9zaG91bGRTeW5jaHJvbml6ZSA9
IHRydWU7CiAgICAgfQogCi0gICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSB0cnVlOwotfTsKLQotc3RydWN0IFN5bmNocm9uaXphYmxlUHJvcGVydHlI
YXNoVHJhaXRzIDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxTeW5jaHJvbml6YWJsZVByb3BlcnR5
PiB7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IHRydWU7CisgICAg
dm9pZCBhZGRQcm9wZXJ0eShTVkdBbmltYXRlZFByb3BlcnR5QmFzZSopOworICAgIHZvaWQgc3lu
Y2hyb25pemUoKTsKKyAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uKCk7CisgICAgdm9pZCBzdG9wQW5p
bWF0aW9uKCk7CiAKLSAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoU3luY2hy
b25pemFibGVQcm9wZXJ0eSYgc2xvdCkKLSAgICB7Ci0gICAgICAgIG5ldyAoJnNsb3QpIFN5bmNo
cm9uaXphYmxlUHJvcGVydHkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpOwotICAgIH0KK3By
aXZhdGU6CisgICAgdHlwZWRlZiBIYXNoU2V0PFNWR0FuaW1hdGVkUHJvcGVydHlCYXNlKj4gQmFz
ZVNldDsKIAotICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IFN5bmNocm9uaXph
YmxlUHJvcGVydHkmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLmlzSGFzaFRh
YmxlRGVsZXRlZFZhbHVlKCk7Ci0gICAgfQorICAgIEJhc2VTZXQgbV9iYXNlczsKKyAgICBib29s
IG1fc2hvdWxkU3luY2hyb25pemU7CiB9OwogCiAvLyBIZWxwZXIgY2xhc3MgdXNlZCBleGNsdXNp
dmVseSBieSBTVkdFbGVtZW50IHRvIGtlZXAgdHJhY2sgb2YgYWxsIGFuaW1hdGFibGUgcHJvcGVy
dGllcyB3aXRoaW4gYSBTVkdFbGVtZW50LApAQCAtMTEwLDggKzczLDcgQEAgcHJpdmF0ZToKICAg
ICBTeW5jaHJvbml6YWJsZVByb3BlcnR5Q29udHJvbGxlcigpOwogCiBwcml2YXRlOgotICAgIHR5
cGVkZWYgSGFzaFNldDxTeW5jaHJvbml6YWJsZVByb3BlcnR5LCBTeW5jaHJvbml6YWJsZVByb3Bl
cnR5SGFzaCwgU3luY2hyb25pemFibGVQcm9wZXJ0eUhhc2hUcmFpdHM+IFByb3BlcnRpZXM7Ci0g
ICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUHJvcGVydGllcz4gUHJvcGVydHlNYXA7CisgICAg
dHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3luY2hyb25pemFibGVQcm9wZXJ0aWVzPiBQcm9wZXJ0
eU1hcDsKIAogICAgIFByb3BlcnR5TWFwIG1fbWFwOwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41911</attachid>
            <date>2009-10-26 16:05:19 -0700</date>
            <delta_ts>2009-10-26 20:39:03 -0700</delta_ts>
            <desc>Use a HashSet&lt;SVGAnimatedPropertyBase*&gt; and a bool.</desc>
            <filename>webkit_30658_3.diff</filename>
            <type>text/plain</type>
            <size>10465</size>
            <attacher name="Matt Mueller">mattm</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTM0YTQ5OS4uMTBjYzQ1ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAwOS0xMC0yNiAgTWF0dCBNdWVsbGVy
ICA8bWF0dG1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFJlZmFjdG9yIHN5bmNocm9uaXphYmxlIHByb3BlcnR5IGhhbmRsaW5n
IHRvIHN0b3JlIG9uZSBzaG91bGRTeW5jaHJvbml6ZSBmbGFnIHBlciBzZXQgb2YgcHJvcGVydGll
cyByYXRoZXIgdGhhbiBvbmUgcGVyIHByb3BlcnR5LgorCisgICAgICAgIEZpeGVzIHJlYWRpbmcg
dW5pbml0aWFsaXplZCBtZW1vcnkgaW4gU3luY2hyb25pemFibGVQcm9wZXJ0eSBoYXNoIGZ1bmN0
aW9uIGFzIHdlbGwgYXMgc2ltcGxpZnlpbmcgdGhlIGNvZGUuCisKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwNjU4CisKKyAgICAgICAgQ292ZXJlZCBi
eSBydW5uaW5nIHZhcmlvdXMgc3ZnIHRlc3RzIHVuZGVyIHZhbGdyaW5kLCBleDoKKyAgICAgICAg
TGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9qcy1sYXRlLW1hc2stYW5kLW9iamVjdC1jcmVhdGlvbi5z
dmcKKworICAgICAgICAqIHN2Zy9TeW5jaHJvbml6YWJsZVByb3BlcnR5Q29udHJvbGxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbml6YWJsZVByb3BlcnRpZXM6OmFkZFByb3BlcnR5
KToKKyAgICAgICAgKFdlYkNvcmU6OlN5bmNocm9uaXphYmxlUHJvcGVydGllczo6c3luY2hyb25p
emUpOgorICAgICAgICAoV2ViQ29yZTo6U3luY2hyb25pemFibGVQcm9wZXJ0aWVzOjpzdGFydEFu
aW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbml6YWJsZVByb3BlcnRpZXM6OnN0
b3BBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3luY2hyb25pemFibGVQcm9wZXJ0eUNv
bnRyb2xsZXI6OnJlZ2lzdGVyUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3luY2hyb25p
emFibGVQcm9wZXJ0eUNvbnRyb2xsZXI6OnNldFByb3BlcnR5TmVlZHNTeW5jaHJvbml6YXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6U3luY2hyb25pemFibGVQcm9wZXJ0eUNvbnRyb2xsZXI6OnN5
bmNocm9uaXplUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3luY2hyb25pemFibGVQcm9w
ZXJ0eUNvbnRyb2xsZXI6OnN5bmNocm9uaXplQWxsUHJvcGVydGllcyk6CisgICAgICAgIChXZWJD
b3JlOjpTeW5jaHJvbml6YWJsZVByb3BlcnR5Q29udHJvbGxlcjo6c3RhcnRBbmltYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6U3luY2hyb25pemFibGVQcm9wZXJ0eUNvbnRyb2xsZXI6OnN0b3BB
bmltYXRpb24pOgorICAgICAgICAqIHN2Zy9TeW5jaHJvbml6YWJsZVByb3BlcnR5Q29udHJvbGxl
ci5oOgorICAgICAgICAoV2ViQ29yZTo6U3luY2hyb25pemFibGVQcm9wZXJ0aWVzOjpTeW5jaHJv
bml6YWJsZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3luY2hyb25pemFibGVQcm9w
ZXJ0aWVzOjpzZXROZWVkc1N5bmNocm9uaXphdGlvbik6CisKIDIwMDktMTAtMjYgIExhc3psbyBH
b21ib3MgIDxsYXN6bG8uMS5nb21ib3NAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU3luY2hyb25pemFibGVQcm9w
ZXJ0eUNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9zdmcvU3luY2hyb25pemFibGVQcm9wZXJ0eUNv
bnRyb2xsZXIuY3BwCmluZGV4IGU5Njk1MTQuLmJlOGFiNzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
c3ZnL1N5bmNocm9uaXphYmxlUHJvcGVydHlDb250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL3N2
Zy9TeW5jaHJvbml6YWJsZVByb3BlcnR5Q29udHJvbGxlci5jcHAKQEAgLTI4LDYgKzI4LDUyIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordm9pZCBTeW5jaHJvbml6YWJsZVByb3BlcnRpZXM6
OmFkZFByb3BlcnR5KFNWR0FuaW1hdGVkUHJvcGVydHlCYXNlKiBiYXNlKQoreworICAgIG1fYmFz
ZXMuYWRkKGJhc2UpOworfQorCit2b2lkIFN5bmNocm9uaXphYmxlUHJvcGVydGllczo6c3luY2hy
b25pemUoKQoreworICAgIEFTU0VSVCghbV9iYXNlcy5pc0VtcHR5KCkpOworICAgIGlmIChtX3No
b3VsZFN5bmNocm9uaXplKSB7CisgICAgICAgIEJhc2VTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9iYXNl
cy5iZWdpbigpOworICAgICAgICBCYXNlU2V0OjppdGVyYXRvciBlbmQgPSBtX2Jhc2VzLmVuZCgp
OworCisgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIFNWR0Fu
aW1hdGVkUHJvcGVydHlCYXNlKiBiYXNlID0gKml0OworICAgICAgICAgICAgQVNTRVJUKGJhc2Up
OworICAgICAgICAgICAgYmFzZS0+c3luY2hyb25pemUoKTsKKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCBTeW5jaHJvbml6YWJsZVByb3BlcnRpZXM6OnN0YXJ0QW5pbWF0aW9uKCkKK3sKKyAg
ICBBU1NFUlQoIW1fYmFzZXMuaXNFbXB0eSgpKTsKKyAgICBCYXNlU2V0OjppdGVyYXRvciBpdCA9
IG1fYmFzZXMuYmVnaW4oKTsKKyAgICBCYXNlU2V0OjppdGVyYXRvciBlbmQgPSBtX2Jhc2VzLmVu
ZCgpOworCisgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBTVkdBbmltYXRl
ZFByb3BlcnR5QmFzZSogYmFzZSA9ICppdDsKKyAgICAgICAgQVNTRVJUKGJhc2UpOworICAgICAg
ICBiYXNlLT5zdGFydEFuaW1hdGlvbigpOworICAgIH0KK30KKwordm9pZCBTeW5jaHJvbml6YWJs
ZVByb3BlcnRpZXM6OnN0b3BBbmltYXRpb24oKQoreworICAgIEFTU0VSVCghbV9iYXNlcy5pc0Vt
cHR5KCkpOworICAgIEJhc2VTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9iYXNlcy5iZWdpbigpOworICAg
IEJhc2VTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fYmFzZXMuZW5kKCk7CisKKyAgICBmb3IgKDsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgIFNWR0FuaW1hdGVkUHJvcGVydHlCYXNlKiBiYXNlID0g
Kml0OworICAgICAgICBBU1NFUlQoYmFzZSk7CisgICAgICAgIGJhc2UtPnN0b3BBbmltYXRpb24o
KTsKKyAgICB9Cit9CisKIFN5bmNocm9uaXphYmxlUHJvcGVydHlDb250cm9sbGVyOjpTeW5jaHJv
bml6YWJsZVByb3BlcnR5Q29udHJvbGxlcigpCiB7CiB9CkBAIC0zNiwyMCArODIsMTUgQEAgdm9p
ZCBTeW5jaHJvbml6YWJsZVByb3BlcnR5Q29udHJvbGxlcjo6cmVnaXN0ZXJQcm9wZXJ0eShjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHQKIHsKICAgICAvLyAnYXR0ck5hbWUnIGlzIGFtYmlnaW91cy4g
Rm9yIGluc3RhbmNlIGluIFNWR01hcmtlckVsZW1lbnQgYm90aCAnb3JpZW50VHlwZScgLyAnb3Jp
ZW50QW5nbGUnCiAgICAgLy8gU1ZHIERPTSBvYmplY3RzIGFyZSBzeW5jaHJvbml6ZWQgd2l0aCB0
aGUgJ29yaWVudCcgYXR0cmlidXRlLiBUaGlzIHdoeSB3ZSBuZWVkIGEgSGFzaFNldC4KLSAgICBT
eW5jaHJvbml6YWJsZVByb3BlcnR5IHByb3BlcnR5KGJhc2UpOwotCiAgICAgUHJvcGVydHlNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9tYXAuZmluZChhdHRyTmFtZS5sb2NhbE5hbWUoKSk7CiAgICAgaWYg
KGl0ID09IG1fbWFwLmVuZCgpKSB7Ci0gICAgICAgIFByb3BlcnRpZXMgcHJvcGVydGllczsKLSAg
ICAgICAgcHJvcGVydGllcy5hZGQocHJvcGVydHkpOworICAgICAgICBTeW5jaHJvbml6YWJsZVBy
b3BlcnRpZXMgcHJvcGVydGllczsKKyAgICAgICAgcHJvcGVydGllcy5hZGRQcm9wZXJ0eShiYXNl
KTsKICAgICAgICAgbV9tYXAuc2V0KGF0dHJOYW1lLmxvY2FsTmFtZSgpLCBwcm9wZXJ0aWVzKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFByb3BlcnRpZXMmIHByb3BlcnRpZXMgPSBp
dC0+c2Vjb25kOwotICAgIEFTU0VSVCghcHJvcGVydGllcy5pc0VtcHR5KCkpOwotCi0gICAgcHJv
cGVydGllcy5hZGQocHJvcGVydHkpOworICAgIGl0LT5zZWNvbmQuYWRkUHJvcGVydHkoYmFzZSk7
CiB9CiAKIHZvaWQgU3luY2hyb25pemFibGVQcm9wZXJ0eUNvbnRyb2xsZXI6OnNldFByb3BlcnR5
TmVlZHNTeW5jaHJvbml6YXRpb24oY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCkBAIC01
NywxNyArOTgsNyBAQCB2b2lkIFN5bmNocm9uaXphYmxlUHJvcGVydHlDb250cm9sbGVyOjpzZXRQ
cm9wZXJ0eU5lZWRzU3luY2hyb25pemF0aW9uKGNvbnN0IFF1YQogICAgIFByb3BlcnR5TWFwOjpp
dGVyYXRvciBpdFByb3AgPSBtX21hcC5maW5kKGF0dHJOYW1lLmxvY2FsTmFtZSgpKTsKICAgICBB
U1NFUlQoaXRQcm9wICE9IG1fbWFwLmVuZCgpKTsKIAotICAgIFByb3BlcnRpZXMmIHByb3BlcnRp
ZXMgPSBpdFByb3AtPnNlY29uZDsKLSAgICBBU1NFUlQoIXByb3BlcnRpZXMuaXNFbXB0eSgpKTsK
LQotICAgIFByb3BlcnRpZXM6Oml0ZXJhdG9yIGl0ID0gcHJvcGVydGllcy5iZWdpbigpOwotICAg
IFByb3BlcnRpZXM6Oml0ZXJhdG9yIGVuZCA9IHByb3BlcnRpZXMuZW5kKCk7Ci0KLSAgICBmb3Ig
KDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFN5bmNocm9uaXphYmxlUHJvcGVydHkmIHBy
b3BlcnR5ID0gKml0OwotICAgICAgICBBU1NFUlQocHJvcGVydHkuYmFzZSk7Ci0gICAgICAgIHBy
b3BlcnR5LnNob3VsZFN5bmNocm9uaXplID0gdHJ1ZTsKLSAgICB9CisgICAgaXRQcm9wLT5zZWNv
bmQuc2V0TmVlZHNTeW5jaHJvbml6YXRpb24oKTsKIH0KIAogdm9pZCBTeW5jaHJvbml6YWJsZVBy
b3BlcnR5Q29udHJvbGxlcjo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBTdHJpbmcmIG5hbWUp
CkBAIC03NiwyMSArMTA3LDcgQEAgdm9pZCBTeW5jaHJvbml6YWJsZVByb3BlcnR5Q29udHJvbGxl
cjo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBTdHJpbmcmIG5hbWUpCiAgICAgaWYgKGl0UHJv
cCA9PSBtX21hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUHJvcGVydGllcyYgcHJv
cGVydGllcyA9IGl0UHJvcC0+c2Vjb25kOwotICAgIEFTU0VSVCghcHJvcGVydGllcy5pc0VtcHR5
KCkpOwotCi0gICAgUHJvcGVydGllczo6aXRlcmF0b3IgaXQgPSBwcm9wZXJ0aWVzLmJlZ2luKCk7
Ci0gICAgUHJvcGVydGllczo6aXRlcmF0b3IgZW5kID0gcHJvcGVydGllcy5lbmQoKTsKLQotICAg
IGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgU3luY2hyb25pemFibGVQcm9wZXJ0
eSYgcHJvcGVydHkgPSAqaXQ7Ci0gICAgICAgIEFTU0VSVChwcm9wZXJ0eS5iYXNlKTsKLQotICAg
ICAgICBpZiAoIXByb3BlcnR5LnNob3VsZFN5bmNocm9uaXplKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgcHJvcGVydHkuYmFzZS0+c3luY2hyb25pemUoKTsKLSAgICB9CisgICAg
aXRQcm9wLT5zZWNvbmQuc3luY2hyb25pemUoKTsKIH0KIAogdm9pZCBTeW5jaHJvbml6YWJsZVBy
b3BlcnR5Q29udHJvbGxlcjo6c3luY2hyb25pemVBbGxQcm9wZXJ0aWVzKCkKQEAgLTEwMSwyMyAr
MTE4LDggQEAgdm9pZCBTeW5jaHJvbml6YWJsZVByb3BlcnR5Q29udHJvbGxlcjo6c3luY2hyb25p
emVBbGxQcm9wZXJ0aWVzKCkKICAgICBQcm9wZXJ0eU1hcDo6aXRlcmF0b3IgaXRQcm9wID0gbV9t
YXAuYmVnaW4oKTsKICAgICBQcm9wZXJ0eU1hcDo6aXRlcmF0b3IgZW5kUHJvcCA9IG1fbWFwLmVu
ZCgpOwogCi0gICAgZm9yICg7IGl0UHJvcCAhPSBlbmRQcm9wOyArK2l0UHJvcCkgewotICAgICAg
ICBQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzID0gaXRQcm9wLT5zZWNvbmQ7Ci0gICAgICAgIEFTU0VS
VCghcHJvcGVydGllcy5pc0VtcHR5KCkpOwotCi0gICAgICAgIFByb3BlcnRpZXM6Oml0ZXJhdG9y
IGl0ID0gcHJvcGVydGllcy5iZWdpbigpOwotICAgICAgICBQcm9wZXJ0aWVzOjppdGVyYXRvciBl
bmQgPSBwcm9wZXJ0aWVzLmVuZCgpOwotCi0gICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgICAgIFN5bmNocm9uaXphYmxlUHJvcGVydHkmIHByb3BlcnR5ID0gKml0Owot
ICAgICAgICAgICAgQVNTRVJUKHByb3BlcnR5LmJhc2UpOwotCi0gICAgICAgICAgICBpZiAoIXBy
b3BlcnR5LnNob3VsZFN5bmNocm9uaXplKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgICAgICBwcm9wZXJ0eS5iYXNlLT5zeW5jaHJvbml6ZSgpOwotICAgICAgICB9Ci0gICAg
fQorICAgIGZvciAoOyBpdFByb3AgIT0gZW5kUHJvcDsgKytpdFByb3ApCisgICAgICAgIGl0UHJv
cC0+c2Vjb25kLnN5bmNocm9uaXplKCk7CiB9CiAKIHZvaWQgU3luY2hyb25pemFibGVQcm9wZXJ0
eUNvbnRyb2xsZXI6OnN0YXJ0QW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKQEAgLTEyNiwx
NyArMTI4LDcgQEAgdm9pZCBTeW5jaHJvbml6YWJsZVByb3BlcnR5Q29udHJvbGxlcjo6c3RhcnRB
bmltYXRpb24oY29uc3QgU3RyaW5nJiBuYW1lKQogICAgIGlmIChpdFByb3AgPT0gbV9tYXAuZW5k
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFByb3BlcnRpZXMmIHByb3BlcnRpZXMgPSBpdFBy
b3AtPnNlY29uZDsKLSAgICBBU1NFUlQoIXByb3BlcnRpZXMuaXNFbXB0eSgpKTsKLQotICAgIFBy
b3BlcnRpZXM6Oml0ZXJhdG9yIGl0ID0gcHJvcGVydGllcy5iZWdpbigpOwotICAgIFByb3BlcnRp
ZXM6Oml0ZXJhdG9yIGVuZCA9IHByb3BlcnRpZXMuZW5kKCk7Ci0KLSAgICBmb3IgKDsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIFN5bmNocm9uaXphYmxlUHJvcGVydHkmIHByb3BlcnR5ID0g
Kml0OwotICAgICAgICBBU1NFUlQocHJvcGVydHkuYmFzZSk7Ci0gICAgICAgIHByb3BlcnR5LmJh
c2UtPnN0YXJ0QW5pbWF0aW9uKCk7Ci0gICAgfQorICAgIGl0UHJvcC0+c2Vjb25kLnN0YXJ0QW5p
bWF0aW9uKCk7CiB9CiAKIHZvaWQgU3luY2hyb25pemFibGVQcm9wZXJ0eUNvbnRyb2xsZXI6OnN0
b3BBbmltYXRpb24oY29uc3QgU3RyaW5nJiBuYW1lKQpAQCAtMTQ1LDE3ICsxMzcsNyBAQCB2b2lk
IFN5bmNocm9uaXphYmxlUHJvcGVydHlDb250cm9sbGVyOjpzdG9wQW5pbWF0aW9uKGNvbnN0IFN0
cmluZyYgbmFtZSkKICAgICBpZiAoaXRQcm9wID09IG1fbWFwLmVuZCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzID0gaXRQcm9wLT5zZWNvbmQ7Ci0gICAg
QVNTRVJUKCFwcm9wZXJ0aWVzLmlzRW1wdHkoKSk7Ci0KLSAgICBQcm9wZXJ0aWVzOjppdGVyYXRv
ciBpdCA9IHByb3BlcnRpZXMuYmVnaW4oKTsKLSAgICBQcm9wZXJ0aWVzOjppdGVyYXRvciBlbmQg
PSBwcm9wZXJ0aWVzLmVuZCgpOwotCi0gICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBTeW5jaHJvbml6YWJsZVByb3BlcnR5JiBwcm9wZXJ0eSA9ICppdDsKLSAgICAgICAgQVNT
RVJUKHByb3BlcnR5LmJhc2UpOwotICAgICAgICBwcm9wZXJ0eS5iYXNlLT5zdG9wQW5pbWF0aW9u
KCk7Ci0gICAgfQorICAgIGl0UHJvcC0+c2Vjb25kLnN0b3BBbmltYXRpb24oKTsKIH0KIAogfQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU3luY2hyb25pemFibGVQcm9wZXJ0eUNvbnRyb2xsZXIu
aCBiL1dlYkNvcmUvc3ZnL1N5bmNocm9uaXphYmxlUHJvcGVydHlDb250cm9sbGVyLmgKaW5kZXgg
YjdmMTAxYi4uMWVjNTAyNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU3luY2hyb25pemFibGVQ
cm9wZXJ0eUNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL3N2Zy9TeW5jaHJvbml6YWJsZVByb3Bl
cnR5Q29udHJvbGxlci5oCkBAIC0zMSw2NSArMzEsMjggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
Y2xhc3MgUXVhbGlmaWVkTmFtZTsKIGNsYXNzIFNWR0FuaW1hdGVkUHJvcGVydHlCYXNlOwogCi1z
dHJ1Y3QgU3luY2hyb25pemFibGVQcm9wZXJ0eSB7Ci0gICAgU3luY2hyb25pemFibGVQcm9wZXJ0
eSgpCi0gICAgICAgIDogYmFzZSgwKQotICAgICAgICAsIHNob3VsZFN5bmNocm9uaXplKGZhbHNl
KQotICAgIHsKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBTeW5jaHJvbml6YWJsZVByb3BlcnR5KFNW
R0FuaW1hdGVkUHJvcGVydHlCYXNlKiBfYmFzZSkKLSAgICAgICAgOiBiYXNlKF9iYXNlKQotICAg
ICAgICAsIHNob3VsZFN5bmNocm9uaXplKGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICBleHBs
aWNpdCBTeW5jaHJvbml6YWJsZVByb3BlcnR5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlw
ZSkKLSAgICAgICAgOiBiYXNlKHJlaW50ZXJwcmV0X2Nhc3Q8U1ZHQW5pbWF0ZWRQcm9wZXJ0eUJh
c2UqPigtMSkpCi0gICAgICAgICwgc2hvdWxkU3luY2hyb25pemUoZmFsc2UpCi0gICAgewotICAg
IH0KLQotICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGJhc2UgPT0gcmVpbnRlcnByZXRfY2FzdDxTVkdBbmltYXRlZFByb3BlcnR5
QmFzZSo+KC0xKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3luY2hyb25p
emFibGVQcm9wZXJ0eSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gYmFzZSA9
PSBvdGhlci5iYXNlICYmIHNob3VsZFN5bmNocm9uaXplID09IG90aGVyLnNob3VsZFN5bmNocm9u
aXplOwotICAgIH0KLQotICAgIFNWR0FuaW1hdGVkUHJvcGVydHlCYXNlKiBiYXNlOwotICAgIGJv
b2wgc2hvdWxkU3luY2hyb25pemU7Ci19OwotCi1zdHJ1Y3QgU3luY2hyb25pemFibGVQcm9wZXJ0
eUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFN5bmNocm9uaXphYmxlUHJv
cGVydHkmIGtleSkKK2NsYXNzIFN5bmNocm9uaXphYmxlUHJvcGVydGllcyB7CitwdWJsaWM6Cisg
ICAgU3luY2hyb25pemFibGVQcm9wZXJ0aWVzKCkKKyAgICAgICAgOiBtX3Nob3VsZFN5bmNocm9u
aXplKGZhbHNlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNo
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPigma2V5KSwgc2l6ZW9mKFN5bmNocm9uaXph
YmxlUHJvcGVydHkpIC8gc2l6ZW9mKFVDaGFyKSk7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wg
ZXF1YWwoY29uc3QgU3luY2hyb25pemFibGVQcm9wZXJ0eSYgYSwgY29uc3QgU3luY2hyb25pemFi
bGVQcm9wZXJ0eSYgYikKKyAgICB2b2lkIHNldE5lZWRzU3luY2hyb25pemF0aW9uKCkKICAgICB7
Ci0gICAgICAgIHJldHVybiBhID09IGI7CisgICAgICAgIG1fc2hvdWxkU3luY2hyb25pemUgPSB0
cnVlOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5
T3JEZWxldGVkID0gdHJ1ZTsKLX07Ci0KLXN0cnVjdCBTeW5jaHJvbml6YWJsZVByb3BlcnR5SGFz
aFRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8U3luY2hyb25pemFibGVQcm9wZXJ0eT4g
ewotICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOworICAgIHZv
aWQgYWRkUHJvcGVydHkoU1ZHQW5pbWF0ZWRQcm9wZXJ0eUJhc2UqKTsKKyAgICB2b2lkIHN5bmNo
cm9uaXplKCk7CisgICAgdm9pZCBzdGFydEFuaW1hdGlvbigpOworICAgIHZvaWQgc3RvcEFuaW1h
dGlvbigpOwogCi0gICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFN5bmNocm9u
aXphYmxlUHJvcGVydHkmIHNsb3QpCi0gICAgewotICAgICAgICBuZXcgKCZzbG90KSBTeW5jaHJv
bml6YWJsZVByb3BlcnR5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKLSAgICB9Citwcml2
YXRlOgorICAgIHR5cGVkZWYgSGFzaFNldDxTVkdBbmltYXRlZFByb3BlcnR5QmFzZSo+IEJhc2VT
ZXQ7CiAKLSAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBTeW5jaHJvbml6YWJs
ZVByb3BlcnR5JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5pc0hhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSgpOwotICAgIH0KKyAgICBCYXNlU2V0IG1fYmFzZXM7CisgICAgYm9vbCBt
X3Nob3VsZFN5bmNocm9uaXplOwogfTsKIAogLy8gSGVscGVyIGNsYXNzIHVzZWQgZXhjbHVzaXZl
bHkgYnkgU1ZHRWxlbWVudCB0byBrZWVwIHRyYWNrIG9mIGFsbCBhbmltYXRhYmxlIHByb3BlcnRp
ZXMgd2l0aGluIGEgU1ZHRWxlbWVudCwKQEAgLTExMCw4ICs3Myw3IEBAIHByaXZhdGU6CiAgICAg
U3luY2hyb25pemFibGVQcm9wZXJ0eUNvbnRyb2xsZXIoKTsKIAogcHJpdmF0ZToKLSAgICB0eXBl
ZGVmIEhhc2hTZXQ8U3luY2hyb25pemFibGVQcm9wZXJ0eSwgU3luY2hyb25pemFibGVQcm9wZXJ0
eUhhc2gsIFN5bmNocm9uaXphYmxlUHJvcGVydHlIYXNoVHJhaXRzPiBQcm9wZXJ0aWVzOwotICAg
IHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFByb3BlcnRpZXM+IFByb3BlcnR5TWFwOworICAgIHR5
cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN5bmNocm9uaXphYmxlUHJvcGVydGllcz4gUHJvcGVydHlN
YXA7CiAKICAgICBQcm9wZXJ0eU1hcCBtX21hcDsKIH07Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>