<?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>43716</bug_id>
          
          <creation_ts>2010-08-09 04:39:04 -0700</creation_ts>
          <short_desc>Use a HashMap for m_continuation to save memory</short_desc>
          <delta_ts>2010-12-29 20:20:09 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenichi Ishibashi">bashi</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>hamaji</cc>
    
    <cc>hyatt</cc>
    
    <cc>sam</cc>
    
    <cc>slewis</cc>
    
    <cc>thomas</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>262086</commentid>
    <comment_count>0</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-08-09 04:39:04 -0700</bug_when>
    <thetext>Applying a HashMap convention to continuation pointers of RenderInline and RenderBlock would save chunk of memory. See https://bugs.webkit.org/show_bug.cgi?id=42309 for a detailed discussion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262118</commentid>
    <comment_count>1</comment_count>
      <attachid>63892</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-08-09 06:10:05 -0700</bug_when>
    <thetext>Created attachment 63892
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262146</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-08-09 08:28:39 -0700</bug_when>
    <thetext>Hyatt should do the review (as it is his idea and he promised he would) but this also needs some performance numbers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262183</commentid>
    <comment_count>3</comment_count>
      <attachid>63892</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-09 09:29:46 -0700</bug_when>
    <thetext>Comment on attachment 63892
Patch

This is good if continuations are rare. If continuations are common, then it makes the render tree use less memory, but makes things slower. How did you test the performance implications of the change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262184</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-09 09:30:05 -0700</bug_when>
    <thetext>Oh, I see that Sam already mentioned that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262441</commentid>
    <comment_count>5</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-08-09 18:14:39 -0700</bug_when>
    <thetext>Thank you for your comments. Actually, I didn&apos;t conduct performance test because I&apos;m new to WebKit and I don&apos;t know how should I test for that purpose. I would very appreciate if there are usual ways to test performance and letting me know these, if available.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271180</commentid>
    <comment_count>6</comment_count>
      <attachid>63892</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-29 12:19:47 -0700</bug_when>
    <thetext>Comment on attachment 63892
Patch

&gt; +     RenderBoxModelObject* cont = continuation();
&gt; +     if (cont) {
&gt; +         cont-&gt;destroy();
&gt; +         setContinuation(0);
&gt; +     }

Please don&apos;t abbreviate continuation to &quot;cont&quot;; abbreviations are harder to read and recognize than words, and can also be confusing and ambiguous. We typically use this style in cases like this:

    if (RenderBoxModelObject* continuation = this-&gt;continuation()) {
        continuation-&gt;destroy();
        setContinuation(0);
    }

&gt; +// The HashMap for storing continuation pointers.
&gt; +// An inline can be split with blocks occuring in between the inline content.
&gt; +// When this occurs we need a pointer to the next object. We can basically be
&gt; +// split into a sequence of inlines and blocks. The continuation will either be
&gt; +// an anonymous block (that houses other blocks) or it will be an inline flow.
&gt; +// &lt;b&gt;&lt;i&gt;&lt;p&gt;Hello&lt;/p&gt;&lt;/i&gt;&lt;/b&gt;. In this example the &lt;i&gt; will have a block as
&gt; +// its continuation but the &lt;b&gt; will just have an inline as its continuation.
&gt; +typedef HashMap&lt;const RenderBoxModelObject*, RenderBoxModelObject*&gt; ContinuationMap;
&gt; +static ContinuationMap* gContinuationMap = 0;

I presume that the motivation for moving the continuation pointer into a map is to save memory. Do you have any data on the memory and performance impact of this change?

&gt; --- a/WebCore/rendering/RenderInline.h
&gt; +++ b/WebCore/rendering/RenderInline.h
&gt; @@ -59,8 +59,8 @@ public:
&gt;      InlineFlowBox* firstLineBox() const { return m_lineBoxes.firstLineBox(); }
&gt;      InlineFlowBox* lastLineBox() const { return m_lineBoxes.lastLineBox(); }
&gt;  
&gt; -    RenderBoxModelObject* continuation() const { return m_continuation; }
&gt; -    void setContinuation(RenderBoxModelObject* c) { m_continuation = c; }
&gt; +    RenderBoxModelObject* continuation() const { return RenderBoxModelObject::continuation(); }
&gt; +    void setContinuation(RenderBoxModelObject* c) { RenderBoxModelObject::setContinuation(c); }

Instead of forwarding functions, you can use the &quot;using&quot; statement:

    using RenderBoxModelObject::continuation;
    using RenderBoxModelObject::setContinuation;

I’d like to see a new patch that eliminates the abbreviations and is accompanied by some performance data to show this is a good change.

I’m also not entirely sure that having this be a protected function in RenderBoxModelObject that then is made public in both RenderInline and RenderBlock is a helpful design. We may simply want it to be public in RenderBoxModelObject instead. Hyatt can weigh in on that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271181</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-29 12:20:24 -0700</bug_when>
    <thetext>If we can’t do any performance tests to prove this is a good idea, then we should not make the change!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271932</commentid>
    <comment_count>8</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-08-30 22:16:42 -0700</bug_when>
    <thetext>Hi Darin,

Thank you for your review. I agree with you that we need to performance test for this patch. For performance check, I run i-Bench HTML test suites.  Although the results are unstable for each test, I didn&apos;t observe any measurable performance regression. Just for information, three results are shown below:

- with the patch
All iterations	  39.94
First iteration (downloaded)	  4.6
Subsequent iteration (cached)	  5.05

All iterations	  39.58
First iteration (downloaded)	  4.57
Subsequent iteration (cached)	  5

All iterations	  39.87
First iteration (downloaded)	  4.58
Subsequent iteration (cached)	  5.04

- without the patch
All iterations	  40.19
First iteration (downloaded)	  5.19
Subsequent iteration (cached)	  5

All iterations	  40.12
First iteration (downloaded)	  5.19
Subsequent iteration (cached)	  4.99

All iterations	  39.7
First iteration (downloaded)	  4.56
Subsequent iteration (cached)	  5.02

For memory consumption, I couldn&apos;t find good way to test for this patch. I&apos;m going to continue to look for the way to test memory consumption.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272566</commentid>
    <comment_count>9</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-08-31 18:53:48 -0700</bug_when>
    <thetext>I counted up how many RenderBlock and RenderInline are created, and check how many continuations are created for some web pages. Continuations are rarely created. For instance, when I load cnn.com, the total creation number of RenderBlock and RenderInline objects is 1081, while the number of continuation created is just 9. In this case, approximately 4KBytes might be able to reduce on 32bit machines ideally (Of course, there are many other factors affecting memory usage, such as memory allocation strategy and alignments, so it&apos;s just for expectation).

I also checked actual memory usage by using activity monitor. In most cases, this change would consume less memory. As an instance, when I load cnn.com, I observed following memory usage on my 64bit SnowLeopard:
- with the patch
Real Mem: 72.7MB, Private Mem: 43.2MB
- without the patch
Real Mem: 73.8MB, Private Mem: 43.4MB

Needless to say, this result doesn&apos;t convince that this change will reduce memory usage in general, but I think it might show the effect of this patch.

I&apos;ll send the revised patch later.

Thanks,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272714</commentid>
    <comment_count>10</comment_count>
      <attachid>66184</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-09-01 02:55:40 -0700</bug_when>
    <thetext>Created attachment 66184
Patch V1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272715</commentid>
    <comment_count>11</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-09-01 02:58:03 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Please don&apos;t abbreviate continuation to &quot;cont&quot;; abbreviations are harder to read and recognize than words, and can also be confusing and ambiguous. We typically use this style in cases like this:
&gt; 
&gt;     if (RenderBoxModelObject* continuation = this-&gt;continuation()) {
&gt;         continuation-&gt;destroy();
&gt;         setContinuation(0);
&gt;     }

Thank you letting me know this. I&apos;ve fixed it.

&gt; I presume that the motivation for moving the continuation pointer into a map is to save memory. Do you have any data on the memory and performance impact of this change?

Please refer the previous comment. I&apos;m aware that it&apos;s not enough, but since there are many factors affecting memory and performance, I couldn&apos;t find a way to see the actual effect of the change.

&gt; Instead of forwarding functions, you can use the &quot;using&quot; statement:
&gt; 
&gt;     using RenderBoxModelObject::continuation;
&gt;     using RenderBoxModelObject::setContinuation;

I couldn&apos;t use &quot;using&quot; at this time because I defined these functions as protected. The reason of why these functions were defined as protected comes from the inheritance hierarchy. The RenderBlock class isn&apos;t derived from RenderBoxModelObject directry; There is RenderBox class between RenderBoxModelObject and RenderBlock, and RenderBox doesn&apos;t define these functions. While the code and the hash table should share between RenderBlock and RenderInline (because these are almost the same), it might not be good idea making these functions to be public because RenderBox should not provide these functions. However, I&apos;m not sure why RenderBox doesn&apos;t provide these functions, so I&apos;d like to ask your opinions.

&gt; I&apos;m also not entirely sure that having this be a protected function in RenderBoxModelObject that then is made public in both RenderInline and RenderBlock is a helpful design. We may simply want it to be public in RenderBoxModelObject instead. Hyatt can weigh in on that.

As mentioned above, I&apos;d like to ask some advice on that.

Thanks,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320783</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-12 02:35:52 -0800</bug_when>
    <thetext>CCing folks who have historically been interested in performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321192</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-13 10:08:19 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt; Instead of forwarding functions, you can use the &quot;using&quot; statement:
&gt; &gt; 
&gt; &gt;     using RenderBoxModelObject::continuation;
&gt; &gt;     using RenderBoxModelObject::setContinuation;
&gt; 
&gt; I couldn&apos;t use &quot;using&quot; at this time because I defined these functions as protected.

I don’t know what you mean. The using statement can be used to change the visibility of functions. Defining the functions as protected and then making use of using to make them public in a derived class is perfectly normal; it’s exactly what the using statement is good for.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321202</commentid>
    <comment_count>14</comment_count>
      <attachid>66184</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-13 10:11:47 -0800</bug_when>
    <thetext>Comment on attachment 66184
Patch V1

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

&gt; WebCore/rendering/RenderBlock.h:135
&gt; +    RenderBoxModelObject* continuation() const { return RenderBoxModelObject::continuation(); }
&gt; +    void setContinuation(RenderBoxModelObject* continuation) { RenderBoxModelObject::setContinuation(continuation); }

As I said before, this should be “using” rather than a forwarding inline function.

&gt; WebCore/rendering/RenderBoxModelObject.cpp:63
&gt; +static ContinuationMap* gContinuationMap = 0;

The use of the “g” prefix here is not common in WebKit code. I did a search and found that most global variables of this type do not use this sort of prefix.

&gt; WebCore/rendering/RenderBoxModelObject.cpp:1796
&gt; +    if (!gContinuationMap)
&gt; +        gContinuationMap = new ContinuationMap;
&gt; +
&gt; +    if (continuation)
&gt; +        gContinuationMap-&gt;set(this, continuation);
&gt; +    else
&gt; +        gContinuationMap-&gt;remove(this);

The creation of the map could be moved inside the non-zero case, since is no need to create the map to remove something from it. Probably OK the way it is, though, since we’d still need a null check of gContinuationMap.

&gt; WebCore/rendering/RenderInline.h:63
&gt; +    RenderBoxModelObject* continuation() const { return RenderBoxModelObject::continuation(); }
&gt; +    void setContinuation(RenderBoxModelObject* continuation) { RenderBoxModelObject::setContinuation(continuation); }

Again, I think “using” is the way to go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321579</commentid>
    <comment_count>15</comment_count>
      <attachid>66184</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-12-13 17:46:59 -0800</bug_when>
    <thetext>Comment on attachment 66184
Patch V1

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

Hi Darin,

Thank you very much for reviewing! I&apos;ve applied your comments and updated to ToT. I&apos;ll send the patch soon.

&gt;&gt; WebCore/rendering/RenderBlock.h:135
&gt;&gt; +    void setContinuation(RenderBoxModelObject* continuation) { RenderBoxModelObject::setContinuation(continuation); }
&gt; 
&gt; As I said before, this should be “using” rather than a forwarding inline function.

Done. I misunderstood the usage of &quot;using.&quot; Thank you!

&gt;&gt; WebCore/rendering/RenderBoxModelObject.cpp:63
&gt;&gt; +static ContinuationMap* gContinuationMap = 0;
&gt; 
&gt; The use of the “g” prefix here is not common in WebKit code. I did a search and found that most global variables of this type do not use this sort of prefix.

Thanks for the advice. Removed the &quot;g&quot; prefix.

&gt;&gt; WebCore/rendering/RenderBoxModelObject.cpp:1796
&gt;&gt; +        gContinuationMap-&gt;remove(this);
&gt; 
&gt; The creation of the map could be moved inside the non-zero case, since is no need to create the map to remove something from it. Probably OK the way it is, though, since we’d still need a null check of gContinuationMap.

I agree with you. Moved the creation of the map inside the non-zero case.

&gt;&gt; WebCore/rendering/RenderInline.h:63
&gt;&gt; +    void setContinuation(RenderBoxModelObject* continuation) { RenderBoxModelObject::setContinuation(continuation); }
&gt; 
&gt; Again, I think “using” is the way to go.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321582</commentid>
    <comment_count>16</comment_count>
      <attachid>76472</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-12-13 17:49:45 -0800</bug_when>
    <thetext>Created attachment 76472
Patch V2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327798</commentid>
    <comment_count>17</comment_count>
      <attachid>76472</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-29 19:16:17 -0800</bug_when>
    <thetext>Comment on attachment 76472
Patch V2

Clearing flags on attachment: 76472

Committed r74775: &lt;http://trac.webkit.org/changeset/74775&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327799</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-29 19:16:25 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327817</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-29 20:20:09 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/74775 might have broken Leopard Intel Debug (Tests)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63892</attachid>
            <date>2010-08-09 06:10:05 -0700</date>
            <delta_ts>2010-09-01 02:55:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43716-20100809221003.patch</filename>
            <type>text/plain</type>
            <size>10907</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NmFkMTA2ZGY3NTRkYmE0YmUwZGZhNzg3MzQ0Y2JjOGNhNWEwNGUwMi4uOGViMjdjNTI0NWQ3MWE5
MmJkODZlODM2Y2ZjM2I5YTJiMzZlNDg5MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAorMjAxMC0wOC0wOSAgS2Vu
aWNoaSBJc2hpYmFzaGkgIDxiYXNoaUBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1pZ3JhdGluZyBtX2NvbnRpbnVhdGlvbiB0byBh
IEhhc2hNYXAuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00MzcxNgorCisgICAgICAgIFNhdmluZyBtZW1vcnkgY29uc3VtcHRpb24gYnkgYXBweWluZyBh
IEhhc2hNYXAgY29udmVudGlvbiB0byBjb250aW51YXRpb24gcG9pbnRlcnMKKyAgICAgICAgb2Yg
UmVuZGVySW5saW5lIGFuZCBSZW5kZXJCbG9jayBjbGFzc2VzLgorCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpSZW5k
ZXJCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZGVzdHJveSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aW5saW5lRWxlbWVudENvbnRpbnVhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YmxvY2tFbGVtZW50Q29udGludWF0aW9uKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpjb250aW51YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OnNldENvbnRpbnVhdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpkZXN0cm95
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb250aW51YXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnNldENvbnRpbnVhdGlv
bik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0Lmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJ
bmxpbmU6OlJlbmRlcklubGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmRl
c3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjppbmxpbmVFbGVtZW50Q29u
dGludWF0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmg6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmNvbnRpbnVhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJJbmxpbmU6OnNldENvbnRpbnVhdGlvbik6CisKIDIwMTAtMDgtMDggIENzYWJhIE9z
enRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmlj
IFNlaWRlbC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCA5NTUwZWJmNjU0MDczZDY1
MTU2NTAyNmRlMTMyODBlMWIxMDY0ZTFjLi4zZGQ0NDFhYzNhYmYyYTBjNTA0Yjg3YTI5OThmN2M5
MTVlOTJjYmVmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAK
KysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0xMjIsNyArMTIyLDYg
QEAgUmVuZGVyQmxvY2s6OlJlbmRlckJsb2NrKE5vZGUqIG5vZGUpCiAgICAgICA6IFJlbmRlckJv
eChub2RlKQogICAgICAgLCBtX2Zsb2F0aW5nT2JqZWN0cygwKQogICAgICAgLCBtX3Bvc2l0aW9u
ZWRPYmplY3RzKDApCi0gICAgICAsIG1fY29udGludWF0aW9uKDApCiAgICAgICAsIG1fbWF4TWFy
Z2luKDApCiAgICAgICAsIG1fbGluZUhlaWdodCgtMSkKIHsKQEAgLTE2NywxMCArMTY2LDExIEBA
IHZvaWQgUmVuZGVyQmxvY2s6OmRlc3Ryb3koKQogICAgIC8vIERlc3Ryb3kgb3VyIGNvbnRpbnVh
dGlvbiBiZWZvcmUgYW55dGhpbmcgb3RoZXIgdGhhbiBhbm9ueW1vdXMgY2hpbGRyZW4uCiAgICAg
Ly8gVGhlIHJlYXNvbiB3ZSBkb24ndCBkZXN0cm95IGl0IGJlZm9yZSBhbm9ueW1vdXMgY2hpbGRy
ZW4gaXMgdGhhdCB0aGV5IG1heQogICAgIC8vIGhhdmUgY29udGludWF0aW9ucyBvZiB0aGVpciBv
d24gdGhhdCBhcmUgYW5vbnltb3VzIGNoaWxkcmVuIG9mIG91ciBjb250aW51YXRpb24uCi0gICAg
aWYgKG1fY29udGludWF0aW9uKSB7Ci0gICAgICAgIG1fY29udGludWF0aW9uLT5kZXN0cm95KCk7
Ci0gICAgICAgIG1fY29udGludWF0aW9uID0gMDsKLSAgICB9CisgICAgIFJlbmRlckJveE1vZGVs
T2JqZWN0KiBjb250ID0gY29udGludWF0aW9uKCk7CisgICAgIGlmIChjb250KSB7CisgICAgICAg
ICBjb250LT5kZXN0cm95KCk7CisgICAgICAgICBzZXRDb250aW51YXRpb24oMCk7CisgICAgIH0K
ICAgICAKICAgICBpZiAoIWRvY3VtZW50QmVpbmdEZXN0cm95ZWQoKSkgewogICAgICAgICBpZiAo
Zmlyc3RMaW5lQm94KCkpIHsKQEAgLTIyOTUsMTUgKzIyOTUsMTcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6cGFpbnRFbGxpcHNpc0JveGVzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0
eSkKIH0KIAogUmVuZGVySW5saW5lKiBSZW5kZXJCbG9jazo6aW5saW5lRWxlbWVudENvbnRpbnVh
dGlvbigpIGNvbnN0Ci17IAotICAgIHJldHVybiBtX2NvbnRpbnVhdGlvbiAmJiBtX2NvbnRpbnVh
dGlvbi0+aXNJbmxpbmUoKSA/IHRvUmVuZGVySW5saW5lKG1fY29udGludWF0aW9uKSA6IDA7Cit7
CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnQgPSBjb250aW51YXRpb24oKTsKKyAgICBy
ZXR1cm4gY29udCAmJiBjb250LT5pc0lubGluZSgpID8gdG9SZW5kZXJJbmxpbmUoY29udCkgOiAw
OwogfQogCiBSZW5kZXJCbG9jayogUmVuZGVyQmxvY2s6OmJsb2NrRWxlbWVudENvbnRpbnVhdGlv
bigpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2NvbnRpbnVhdGlvbiB8fCBtX2NvbnRpbnVhdGlvbi0+
aXNJbmxpbmUoKSkKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29udCA9IGNvbnRpbnVhdGlv
bigpOworICAgIGlmICghY29udCB8fCBjb250LT5pc0lubGluZSgpKQogICAgICAgICByZXR1cm4g
MDsKLSAgICBSZW5kZXJCbG9jayogbmV4dENvbnRpbnVhdGlvbiA9IHRvUmVuZGVyQmxvY2sobV9j
b250aW51YXRpb24pOworICAgIFJlbmRlckJsb2NrKiBuZXh0Q29udGludWF0aW9uID0gdG9SZW5k
ZXJCbG9jayhjb250KTsKICAgICBpZiAobmV4dENvbnRpbnVhdGlvbi0+aXNBbm9ueW1vdXNCbG9j
aygpKQogICAgICAgICByZXR1cm4gbmV4dENvbnRpbnVhdGlvbi0+YmxvY2tFbGVtZW50Q29udGlu
dWF0aW9uKCk7CiAgICAgcmV0dXJuIG5leHRDb250aW51YXRpb247CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suaAppbmRleCA5NWQwYzI5YTBiODkzNWM3MGEwMWNiODhmZDI0NzI4OTVmYTViZGIxLi5mYzFl
MDk1N2IxYjI1MjI2YzY0MzI5YWQ4MDdhZTFkMWE5YzA2Y2NmIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmgKQEAgLTEzMSw4ICsxMzEsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZENvbnRpbnVh
dGlvbldpdGhPdXRsaW5lKFJlbmRlcklubGluZSopOwogCi0gICAgUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIGNvbnRpbnVhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGludWF0aW9uOyB9Ci0gICAg
dm9pZCBzZXRDb250aW51YXRpb24oUmVuZGVyQm94TW9kZWxPYmplY3QqIGMpIHsgbV9jb250aW51
YXRpb24gPSBjOyB9CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRpbnVhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb250aW51YXRpb24oKTsgfQorICAg
IHZvaWQgc2V0Q29udGludWF0aW9uKFJlbmRlckJveE1vZGVsT2JqZWN0KiBjKSB7IFJlbmRlckJv
eE1vZGVsT2JqZWN0OjpzZXRDb250aW51YXRpb24oYyk7IH0KICAgICB2aXJ0dWFsIFJlbmRlckJv
eE1vZGVsT2JqZWN0KiB2aXJ0dWFsQ29udGludWF0aW9uKCkgY29uc3QgeyByZXR1cm4gY29udGlu
dWF0aW9uKCk7IH0KICAgICBib29sIGlzQW5vbnltb3VzQmxvY2tDb250aW51YXRpb24oKSBjb25z
dCB7IHJldHVybiBjb250aW51YXRpb24oKSAmJiBpc0Fub255bW91c0Jsb2NrKCk7IH0KICAgICBS
ZW5kZXJJbmxpbmUqIGlubGluZUVsZW1lbnRDb250aW51YXRpb24oKSBjb25zdDsKQEAgLTU0Miwx
MiArNTQyLDYgQEAgcHJpdmF0ZToKICAgICAKICAgICBQb3NpdGlvbmVkT2JqZWN0c0xpc3RIYXNo
U2V0KiBtX3Bvc2l0aW9uZWRPYmplY3RzOwogCi0gICAgLy8gQW4gaW5saW5lIGNhbiBiZSBzcGxp
dCB3aXRoIGJsb2NrcyBvY2N1cnJpbmcgaW4gYmV0d2VlbiB0aGUgaW5saW5lIGNvbnRlbnQuCi0g
ICAgLy8gV2hlbiB0aGlzIG9jY3VycyB3ZSBuZWVkIGEgcG9pbnRlciB0byBvdXIgbmV4dCBvYmpl
Y3QuICBXZSBjYW4gYmFzaWNhbGx5IGJlCi0gICAgLy8gc3BsaXQgaW50byBhIHNlcXVlbmNlIG9m
IGlubGluZXMgYW5kIGJsb2Nrcy4gIFRoZSBjb250aW51YXRpb24gd2lsbCBlaXRoZXIgYmUKLSAg
ICAvLyBhbiBhbm9ueW1vdXMgYmxvY2sgKHRoYXQgaG91c2VzIG90aGVyIGJsb2Nrcykgb3IgaXQg
d2lsbCBiZSBhbiBpbmxpbmUgZmxvdy4KLSAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogbV9jb250
aW51YXRpb247Ci0KICAgICAvLyBBbGxvY2F0ZWQgb25seSB3aGVuIHNvbWUgb2YgdGhlc2UgZmll
bGRzIGhhdmUgbm9uLWRlZmF1bHQgdmFsdWVzCiAgICAgc3RydWN0IE1heE1hcmdpbiA6IE5vbmNv
cHlhYmxlIHsKICAgICAgICAgTWF4TWFyZ2luKGNvbnN0IFJlbmRlckJsb2NrKiBvKSAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRleCA5MTE3ZWQ4YzU5MzU2
ZjQwMzgwOTgwMzU4MmYzZDRiNmNiMDZhNDA0Li4yYzg4OTk2ZjRkNGNhMWZkYTA0OGQxZTNjY2Ux
MTU5N2UxMTc1MzhiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2Rl
bE9iamVjdC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
Y3BwCkBAIC01Miw2ICs1MiwxNiBAQCBzdGF0aWMgY29uc3QgZG91YmxlIGNMb3dRdWFsaXR5VGlt
ZVRocmVzaG9sZCA9IDAuNTAwOyAvLyA1MDAgbXMKIAogdHlwZWRlZiBIYXNoTWFwPFJlbmRlckJv
eE1vZGVsT2JqZWN0KiwgSW50U2l6ZT4gTGFzdFBhaW50U2l6ZU1hcDsKIAorLy8gVGhlIEhhc2hN
YXAgZm9yIHN0b3JpbmcgY29udGludWF0aW9uIHBvaW50ZXJzLgorLy8gQW4gaW5saW5lIGNhbiBi
ZSBzcGxpdCB3aXRoIGJsb2NrcyBvY2N1cmluZyBpbiBiZXR3ZWVuIHRoZSBpbmxpbmUgY29udGVu
dC4KKy8vIFdoZW4gdGhpcyBvY2N1cnMgd2UgbmVlZCBhIHBvaW50ZXIgdG8gdGhlIG5leHQgb2Jq
ZWN0LiBXZSBjYW4gYmFzaWNhbGx5IGJlCisvLyBzcGxpdCBpbnRvIGEgc2VxdWVuY2Ugb2YgaW5s
aW5lcyBhbmQgYmxvY2tzLiBUaGUgY29udGludWF0aW9uIHdpbGwgZWl0aGVyIGJlCisvLyBhbiBh
bm9ueW1vdXMgYmxvY2sgKHRoYXQgaG91c2VzIG90aGVyIGJsb2Nrcykgb3IgaXQgd2lsbCBiZSBh
biBpbmxpbmUgZmxvdy4KKy8vIDxiPjxpPjxwPkhlbGxvPC9wPjwvaT48L2I+LiBJbiB0aGlzIGV4
YW1wbGUgdGhlIDxpPiB3aWxsIGhhdmUgYSBibG9jayBhcworLy8gaXRzIGNvbnRpbnVhdGlvbiBi
dXQgdGhlIDxiPiB3aWxsIGp1c3QgaGF2ZSBhbiBpbmxpbmUgYXMgaXRzIGNvbnRpbnVhdGlvbi4K
K3R5cGVkZWYgSGFzaE1hcDxjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCosIFJlbmRlckJveE1v
ZGVsT2JqZWN0Kj4gQ29udGludWF0aW9uTWFwOworc3RhdGljIENvbnRpbnVhdGlvbk1hcCogZ0Nv
bnRpbnVhdGlvbk1hcCA9IDA7CisKIGNsYXNzIEltYWdlUXVhbGl0eUNvbnRyb2xsZXIgOiBwdWJs
aWMgTm9uY29weWFibGUgewogcHVibGljOgogICAgIEltYWdlUXVhbGl0eUNvbnRyb2xsZXIoKTsK
QEAgLTIxNiw2ICsyMjYsOSBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpkZXN0cm95KCkK
ICAgICBpZiAobV9sYXllcikKICAgICAgICAgbV9sYXllci0+Y2xlYXJDbGlwUmVjdHMoKTsKIAor
ICAgIC8vIEEgY29udGludWF0aW9uIG9mIHRoaXMgUmVuZGVyT2JqZWN0IHNob3VsZCBiZSBkZXN0
cm95ZWQgYXQgc3ViY2xhc3Nlcy4KKyAgICBBU1NFUlQoIWNvbnRpbnVhdGlvbigpKTsKKwogICAg
IC8vIFJlbmRlck9iamVjdDo6ZGVzdHJveSBjYWxscyBiYWNrIHRvIGRlc3Ryb3lMYXllcigpIGZv
ciBsYXllciBkZXN0cnVjdGlvbgogICAgIFJlbmRlck9iamVjdDo6ZGVzdHJveSgpOwogfQpAQCAt
MTc1MCw0ICsxNzYzLDIyIEBAIGludCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29udGFpbmluZ0Js
b2NrV2lkdGhGb3JDb250ZW50KCkgY29uc3QKICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrKCkt
PmF2YWlsYWJsZVdpZHRoKCk7CiB9CiAKK1JlbmRlckJveE1vZGVsT2JqZWN0KiBSZW5kZXJCb3hN
b2RlbE9iamVjdDo6Y29udGludWF0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoIWdDb250aW51YXRp
b25NYXApCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBnQ29udGludWF0aW9uTWFwLT5n
ZXQodGhpcyk7Cit9CisKK3ZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnNldENvbnRpbnVhdGlv
bihSZW5kZXJCb3hNb2RlbE9iamVjdCogYykKK3sKKyAgICBpZiAoIWdDb250aW51YXRpb25NYXAp
CisgICAgICAgIGdDb250aW51YXRpb25NYXAgPSBuZXcgQ29udGludWF0aW9uTWFwOworCisgICAg
aWYgKGMpCisgICAgICAgIGdDb250aW51YXRpb25NYXAtPnNldCh0aGlzLCBjKTsKKyAgICBlbHNl
CisgICAgICAgIGdDb250aW51YXRpb25NYXAtPnJlbW92ZSh0aGlzKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgKaW5k
ZXggNDlkNWYzZGQzNzI0ZTE4OTRhYjM4YWFmNmYyZDUwM2YzNWZiYmM0YS4uNjg3ZDk0N2YzMTIw
YzA4MmRlY2VlZmMyMWM5ODBiNTdiMGU2OTcxNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3hNb2RlbE9iamVjdC5oCkBAIC0xMTAsNiArMTEwLDkgQEAgcHJvdGVjdGVkOgogCiAgICAgYm9v
bCBzaG91bGRQYWludEF0TG93UXVhbGl0eShHcmFwaGljc0NvbnRleHQqLCBJbWFnZSosIGNvbnN0
IEludFNpemUmKTsKIAorICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250aW51YXRpb24oKSBj
b25zdDsKKyAgICB2b2lkIHNldENvbnRpbnVhdGlvbihSZW5kZXJCb3hNb2RlbE9iamVjdCogYyk7
CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzQm94TW9kZWxPYmplY3QoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklu
bGluZS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCmluZGV4IGU5MTgy
MmVhODY2MjhmZWZlN2NmZTNkYmUwODEwZTRkMTBjMTg0ZGMuLjUyNmQ1MzQ3MjM2OGQ1YjViZWYy
NDZjNzhlN2I4ZTcxZjhkYzdmMmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cklubGluZS5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcApAQCAt
NDUsNyArNDUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlbmRlcklubGluZTo6UmVuZGVy
SW5saW5lKE5vZGUqIG5vZGUpCiAgICAgOiBSZW5kZXJCb3hNb2RlbE9iamVjdChub2RlKQotICAg
ICwgbV9jb250aW51YXRpb24oMCkKICAgICAsIG1fbGluZUhlaWdodCgtMSkKICAgICAsIG1fdmVy
dGljYWxQb3NpdGlvbihQb3NpdGlvblVuZGVmaW5lZCkKIHsKQEAgLTYxLDkgKzYwLDEwIEBAIHZv
aWQgUmVuZGVySW5saW5lOjpkZXN0cm95KCkKICAgICAvLyBEZXN0cm95IG91ciBjb250aW51YXRp
b24gYmVmb3JlIGFueXRoaW5nIG90aGVyIHRoYW4gYW5vbnltb3VzIGNoaWxkcmVuLgogICAgIC8v
IFRoZSByZWFzb24gd2UgZG9uJ3QgZGVzdHJveSBpdCBiZWZvcmUgYW5vbnltb3VzIGNoaWxkcmVu
IGlzIHRoYXQgdGhleSBtYXkKICAgICAvLyBoYXZlIGNvbnRpbnVhdGlvbnMgb2YgdGhlaXIgb3du
IHRoYXQgYXJlIGFub255bW91cyBjaGlsZHJlbiBvZiBvdXIgY29udGludWF0aW9uLgotICAgIGlm
IChtX2NvbnRpbnVhdGlvbikgewotICAgICAgICBtX2NvbnRpbnVhdGlvbi0+ZGVzdHJveSgpOwot
ICAgICAgICBtX2NvbnRpbnVhdGlvbiA9IDA7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNv
bnQgPSBjb250aW51YXRpb24oKTsKKyAgICBpZiAoY29udCkgeworICAgICAgICBjb250LT5kZXN0
cm95KCk7CisgICAgICAgIHNldENvbnRpbnVhdGlvbigwKTsKICAgICB9CiAgICAgCiAgICAgaWYg
KCFkb2N1bWVudEJlaW5nRGVzdHJveWVkKCkpIHsKQEAgLTk1LDkgKzk1LDEwIEBAIHZvaWQgUmVu
ZGVySW5saW5lOjpkZXN0cm95KCkKIAogUmVuZGVySW5saW5lKiBSZW5kZXJJbmxpbmU6OmlubGlu
ZUVsZW1lbnRDb250aW51YXRpb24oKSBjb25zdAogewotICAgIGlmICghbV9jb250aW51YXRpb24g
fHwgbV9jb250aW51YXRpb24tPmlzSW5saW5lKCkpCi0gICAgICAgIHJldHVybiB0b1JlbmRlcklu
bGluZShtX2NvbnRpbnVhdGlvbik7Ci0gICAgcmV0dXJuIHRvUmVuZGVyQmxvY2sobV9jb250aW51
YXRpb24pLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7CisgICAgUmVuZGVyQm94TW9kZWxP
YmplY3QqIGNvbnQgPSBjb250aW51YXRpb24oKTsKKyAgICBpZiAoIWNvbnQgfHwgY29udC0+aXNJ
bmxpbmUoKSkKKyAgICAgICAgcmV0dXJuIHRvUmVuZGVySW5saW5lKGNvbnQpOworICAgIHJldHVy
biB0b1JlbmRlckJsb2NrKGNvbnQpLT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7CiB9CiAK
IHZvaWQgUmVuZGVySW5saW5lOjp1cGRhdGVCb3hNb2RlbEluZm9Gcm9tU3R5bGUoKQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmggYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuaAppbmRleCA3MWE4YTg5MWIxMDI4OWEwNzQ2YjliMmE2ZGI3MWQxYzE5
NWY4ZWZiLi5hYTVkNDRjYzhhYTY5YjNmYjAwNWFlODNmMDA2N2ZmNjhjN2UzNTY2IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAorKysgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJJbmxpbmUuaApAQCAtNTksOCArNTksOCBAQCBwdWJsaWM6CiAgICAgSW5saW5l
Rmxvd0JveCogZmlyc3RMaW5lQm94KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94ZXMuZmlyc3RM
aW5lQm94KCk7IH0KICAgICBJbmxpbmVGbG93Qm94KiBsYXN0TGluZUJveCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGluZUJveGVzLmxhc3RMaW5lQm94KCk7IH0KIAotICAgIFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiBjb250aW51YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbnRpbnVhdGlvbjsgfQotICAg
IHZvaWQgc2V0Q29udGludWF0aW9uKFJlbmRlckJveE1vZGVsT2JqZWN0KiBjKSB7IG1fY29udGlu
dWF0aW9uID0gYzsgfQorICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250aW51YXRpb24oKSBj
b25zdCB7IHJldHVybiBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29udGludWF0aW9uKCk7IH0KKyAg
ICB2b2lkIHNldENvbnRpbnVhdGlvbihSZW5kZXJCb3hNb2RlbE9iamVjdCogYykgeyBSZW5kZXJC
b3hNb2RlbE9iamVjdDo6c2V0Q29udGludWF0aW9uKGMpOyB9CiAgICAgdmlydHVhbCBSZW5kZXJC
b3hNb2RlbE9iamVjdCogdmlydHVhbENvbnRpbnVhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGNvbnRp
bnVhdGlvbigpOyB9CiAgICAgUmVuZGVySW5saW5lKiBpbmxpbmVFbGVtZW50Q29udGludWF0aW9u
KCkgY29uc3Q7CiAKQEAgLTE1Miw4ICsxNTIsNiBAQCBwcml2YXRlOgogICAgIFJlbmRlck9iamVj
dENoaWxkTGlzdCBtX2NoaWxkcmVuOwogICAgIFJlbmRlckxpbmVCb3hMaXN0IG1fbGluZUJveGVz
OyAgIC8vIEFsbCBvZiB0aGUgbGluZSBib3hlcyBjcmVhdGVkIGZvciB0aGlzIGlubGluZSBmbG93
LiAgRm9yIGV4YW1wbGUsIDxpPkhlbGxvPGJyPndvcmxkLjwvaT4gd2lsbCBoYXZlIHR3byA8aT4g
bGluZSBib3hlcy4KIAotICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBtX2NvbnRpbnVhdGlvbjsg
Ly8gQ2FuIGJlIGVpdGhlciBhIGJsb2NrIG9yIGFuIGlubGluZS4gPGI+PGk+PHA+SGVsbG88L3A+
PC9pPjwvYj4uIEluIHRoaXMgZXhhbXBsZSB0aGUgPGk+IHdpbGwgaGF2ZSBhIGJsb2NrIGFzIGl0
cyBjb250aW51YXRpb24gYnV0IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gPGI+IHdpbGwganVzdCBoYXZlIGFuIGlubGluZSBhcyBpdHMgY29udGludWF0
aW9uLgogICAgIG11dGFibGUgaW50IG1fbGluZUhlaWdodDsKICAgICBtdXRhYmxlIGludCBtX3Zl
cnRpY2FsUG9zaXRpb247CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66184</attachid>
            <date>2010-09-01 02:55:40 -0700</date>
            <delta_ts>2010-12-13 17:49:39 -0800</delta_ts>
            <desc>Patch V1</desc>
            <filename>bug-43716-20100901185538.patch</filename>
            <type>text/plain</type>
            <size>11201</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OTk4YWQxMThhNTZhOGI2OTRhYTJkZTM3ODQ2YWI0ZmM3NTlmZTZkMS4uZGE0ODc5N2UxNDExMzdk
OTRlMDYzZDcwYjAzZjFkY2IxM2Y0OTdhNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAorMjAxMC0wOC0zMSAgS2Vu
aWNoaSBJc2hpYmFzaGkgIDxiYXNoaUBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1pZ3JhdGluZyBtX2NvbnRpbnVhdGlvbiB0byBh
IEhhc2hNYXAuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00MzcxNgorCisgICAgICAgIFNhdmluZyBtZW1vcnkgY29uc3VtcHRpb24gYnkgYXBweWluZyBh
IEhhc2hNYXAgY29udmVudGlvbiB0byBjb250aW51YXRpb24gcG9pbnRlcnMKKyAgICAgICAgb2Yg
UmVuZGVySW5saW5lIGFuZCBSZW5kZXJCbG9jayBjbGFzc2VzLgorCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpSZW5k
ZXJCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZGVzdHJveSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aW5saW5lRWxlbWVudENvbnRpbnVhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YmxvY2tFbGVtZW50Q29udGludWF0aW9uKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpjb250aW51YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OnNldENvbnRpbnVhdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpkZXN0cm95
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb250aW51YXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnNldENvbnRpbnVhdGlv
bik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0Lmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJ
bmxpbmU6OlJlbmRlcklubGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmRl
c3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjppbmxpbmVFbGVtZW50Q29u
dGludWF0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmg6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmNvbnRpbnVhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJJbmxpbmU6OnNldENvbnRpbnVhdGlvbik6CisKIDIwMTAtMDgtMzAgIExlaSBaaGFu
ZyAgPHRoZXN0aWdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNoaW5pY2hp
cm8gSGFtYWppLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDA0ZDhmZDA1ZDk2NDk1
MWQwMWY0ZTZhMzg2NGRhNGU1NmNhNTVkMTkuLjAzZmIyODNhYmEyNzM1NjRhNzU0NGQ2MWQ0YzY0
N2JjMmYwZDY2YzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTEyMiw3ICsxMjIs
NiBAQCBSZW5kZXJCbG9jazo6UmVuZGVyQmxvY2soTm9kZSogbm9kZSkKICAgICAgIDogUmVuZGVy
Qm94KG5vZGUpCiAgICAgICAsIG1fZmxvYXRpbmdPYmplY3RzKDApCiAgICAgICAsIG1fcG9zaXRp
b25lZE9iamVjdHMoMCkKLSAgICAgICwgbV9jb250aW51YXRpb24oMCkKICAgICAgICwgbV9tYXhN
YXJnaW4oMCkKICAgICAgICwgbV9saW5lSGVpZ2h0KC0xKQogewpAQCAtMTY3LDEwICsxNjYsMTEg
QEAgdm9pZCBSZW5kZXJCbG9jazo6ZGVzdHJveSgpCiAgICAgLy8gRGVzdHJveSBvdXIgY29udGlu
dWF0aW9uIGJlZm9yZSBhbnl0aGluZyBvdGhlciB0aGFuIGFub255bW91cyBjaGlsZHJlbi4KICAg
ICAvLyBUaGUgcmVhc29uIHdlIGRvbid0IGRlc3Ryb3kgaXQgYmVmb3JlIGFub255bW91cyBjaGls
ZHJlbiBpcyB0aGF0IHRoZXkgbWF5CiAgICAgLy8gaGF2ZSBjb250aW51YXRpb25zIG9mIHRoZWly
IG93biB0aGF0IGFyZSBhbm9ueW1vdXMgY2hpbGRyZW4gb2Ygb3VyIGNvbnRpbnVhdGlvbi4KLSAg
ICBpZiAobV9jb250aW51YXRpb24pIHsKLSAgICAgICAgbV9jb250aW51YXRpb24tPmRlc3Ryb3ko
KTsKLSAgICAgICAgbV9jb250aW51YXRpb24gPSAwOwotICAgIH0KKyAgICAgUmVuZGVyQm94TW9k
ZWxPYmplY3QqIGNvbnRpbnVhdGlvbiA9IHRoaXMtPmNvbnRpbnVhdGlvbigpOworICAgICBpZiAo
Y29udGludWF0aW9uKSB7CisgICAgICAgICBjb250aW51YXRpb24tPmRlc3Ryb3koKTsKKyAgICAg
ICAgIHNldENvbnRpbnVhdGlvbigwKTsKKyAgICAgfQogICAgIAogICAgIGlmICghZG9jdW1lbnRC
ZWluZ0Rlc3Ryb3llZCgpKSB7CiAgICAgICAgIGlmIChmaXJzdExpbmVCb3goKSkgewpAQCAtMjI5
NSwxNSArMjI5NSwxNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludEVsbGlwc2lzQm94ZXMoUGFp
bnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQogfQogCiBSZW5kZXJJbmxpbmUqIFJl
bmRlckJsb2NrOjppbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkgY29uc3QKLXsgCi0gICAgcmV0
dXJuIG1fY29udGludWF0aW9uICYmIG1fY29udGludWF0aW9uLT5pc0lubGluZSgpID8gdG9SZW5k
ZXJJbmxpbmUobV9jb250aW51YXRpb24pIDogMDsKK3sKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVj
dCogY29udGludWF0aW9uID0gdGhpcy0+Y29udGludWF0aW9uKCk7CisgICAgcmV0dXJuIGNvbnRp
bnVhdGlvbiAmJiBjb250aW51YXRpb24tPmlzSW5saW5lKCkgPyB0b1JlbmRlcklubGluZShjb250
aW51YXRpb24pIDogMDsKIH0KIAogUmVuZGVyQmxvY2sqIFJlbmRlckJsb2NrOjpibG9ja0VsZW1l
bnRDb250aW51YXRpb24oKSBjb25zdAogewotICAgIGlmICghbV9jb250aW51YXRpb24gfHwgbV9j
b250aW51YXRpb24tPmlzSW5saW5lKCkpCisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGN1cnJl
bnRDb250aW51YXRpb24gPSBjb250aW51YXRpb24oKTsKKyAgICBpZiAoIWN1cnJlbnRDb250aW51
YXRpb24gfHwgY3VycmVudENvbnRpbnVhdGlvbi0+aXNJbmxpbmUoKSkKICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgUmVuZGVyQmxvY2sqIG5leHRDb250aW51YXRpb24gPSB0b1JlbmRlckJsb2NrKG1f
Y29udGludWF0aW9uKTsKKyAgICBSZW5kZXJCbG9jayogbmV4dENvbnRpbnVhdGlvbiA9IHRvUmVu
ZGVyQmxvY2soY3VycmVudENvbnRpbnVhdGlvbik7CiAgICAgaWYgKG5leHRDb250aW51YXRpb24t
PmlzQW5vbnltb3VzQmxvY2soKSkKICAgICAgICAgcmV0dXJuIG5leHRDb250aW51YXRpb24tPmJs
b2NrRWxlbWVudENvbnRpbnVhdGlvbigpOwogICAgIHJldHVybiBuZXh0Q29udGludWF0aW9uOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaCBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmgKaW5kZXggOTVkMGMyOWEwYjg5MzVjNzBhMDFjYjg4ZmQyNDcy
ODk1ZmE1YmRiMS4uNzg2OTBmMGVhYjJhYWM2YWE4ZWRmYjI5ZTBkZDFkYTZiYzAwOTlmNSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAorKysgYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5oCkBAIC0xMzEsOCArMTMxLDggQEAgcHVibGljOgogCiAgICAg
dm9pZCBhZGRDb250aW51YXRpb25XaXRoT3V0bGluZShSZW5kZXJJbmxpbmUqKTsKIAotICAgIFJl
bmRlckJveE1vZGVsT2JqZWN0KiBjb250aW51YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbnRp
bnVhdGlvbjsgfQotICAgIHZvaWQgc2V0Q29udGludWF0aW9uKFJlbmRlckJveE1vZGVsT2JqZWN0
KiBjKSB7IG1fY29udGludWF0aW9uID0gYzsgfQorICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBj
b250aW51YXRpb24oKSBjb25zdCB7IHJldHVybiBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29udGlu
dWF0aW9uKCk7IH0KKyAgICB2b2lkIHNldENvbnRpbnVhdGlvbihSZW5kZXJCb3hNb2RlbE9iamVj
dCogY29udGludWF0aW9uKSB7IFJlbmRlckJveE1vZGVsT2JqZWN0OjpzZXRDb250aW51YXRpb24o
Y29udGludWF0aW9uKTsgfQogICAgIHZpcnR1YWwgUmVuZGVyQm94TW9kZWxPYmplY3QqIHZpcnR1
YWxDb250aW51YXRpb24oKSBjb25zdCB7IHJldHVybiBjb250aW51YXRpb24oKTsgfQogICAgIGJv
b2wgaXNBbm9ueW1vdXNCbG9ja0NvbnRpbnVhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGNvbnRpbnVh
dGlvbigpICYmIGlzQW5vbnltb3VzQmxvY2soKTsgfQogICAgIFJlbmRlcklubGluZSogaW5saW5l
RWxlbWVudENvbnRpbnVhdGlvbigpIGNvbnN0OwpAQCAtNTQyLDEyICs1NDIsNiBAQCBwcml2YXRl
OgogICAgIAogICAgIFBvc2l0aW9uZWRPYmplY3RzTGlzdEhhc2hTZXQqIG1fcG9zaXRpb25lZE9i
amVjdHM7CiAKLSAgICAvLyBBbiBpbmxpbmUgY2FuIGJlIHNwbGl0IHdpdGggYmxvY2tzIG9jY3Vy
cmluZyBpbiBiZXR3ZWVuIHRoZSBpbmxpbmUgY29udGVudC4KLSAgICAvLyBXaGVuIHRoaXMgb2Nj
dXJzIHdlIG5lZWQgYSBwb2ludGVyIHRvIG91ciBuZXh0IG9iamVjdC4gIFdlIGNhbiBiYXNpY2Fs
bHkgYmUKLSAgICAvLyBzcGxpdCBpbnRvIGEgc2VxdWVuY2Ugb2YgaW5saW5lcyBhbmQgYmxvY2tz
LiAgVGhlIGNvbnRpbnVhdGlvbiB3aWxsIGVpdGhlciBiZQotICAgIC8vIGFuIGFub255bW91cyBi
bG9jayAodGhhdCBob3VzZXMgb3RoZXIgYmxvY2tzKSBvciBpdCB3aWxsIGJlIGFuIGlubGluZSBm
bG93LgotICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBtX2NvbnRpbnVhdGlvbjsKLQogICAgIC8v
IEFsbG9jYXRlZCBvbmx5IHdoZW4gc29tZSBvZiB0aGVzZSBmaWVsZHMgaGF2ZSBub24tZGVmYXVs
dCB2YWx1ZXMKICAgICBzdHJ1Y3QgTWF4TWFyZ2luIDogTm9uY29weWFibGUgewogICAgICAgICBN
YXhNYXJnaW4oY29uc3QgUmVuZGVyQmxvY2sqIG8pIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuY3BwCmluZGV4IDBmYmM5ZjI2OWQ2YzllYmQ5MTJkYWNjZmNlNjQ2OWY1
Mjc3NmJlZTUuLjRhNWM5MjRlY2YwZWQ1ZTgyNGNkODU0ZTAxZDg0ZDk1OGQ1ZTI1NTkgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTUyLDYgKzUyLDE2
IEBAIHN0YXRpYyBjb25zdCBkb3VibGUgY0xvd1F1YWxpdHlUaW1lVGhyZXNob2xkID0gMC41MDA7
IC8vIDUwMCBtcwogCiB0eXBlZGVmIEhhc2hNYXA8UmVuZGVyQm94TW9kZWxPYmplY3QqLCBJbnRT
aXplPiBMYXN0UGFpbnRTaXplTWFwOwogCisvLyBUaGUgSGFzaE1hcCBmb3Igc3RvcmluZyBjb250
aW51YXRpb24gcG9pbnRlcnMuCisvLyBBbiBpbmxpbmUgY2FuIGJlIHNwbGl0IHdpdGggYmxvY2tz
IG9jY3VyaW5nIGluIGJldHdlZW4gdGhlIGlubGluZSBjb250ZW50LgorLy8gV2hlbiB0aGlzIG9j
Y3VycyB3ZSBuZWVkIGEgcG9pbnRlciB0byB0aGUgbmV4dCBvYmplY3QuIFdlIGNhbiBiYXNpY2Fs
bHkgYmUKKy8vIHNwbGl0IGludG8gYSBzZXF1ZW5jZSBvZiBpbmxpbmVzIGFuZCBibG9ja3MuIFRo
ZSBjb250aW51YXRpb24gd2lsbCBlaXRoZXIgYmUKKy8vIGFuIGFub255bW91cyBibG9jayAodGhh
dCBob3VzZXMgb3RoZXIgYmxvY2tzKSBvciBpdCB3aWxsIGJlIGFuIGlubGluZSBmbG93LgorLy8g
PGI+PGk+PHA+SGVsbG88L3A+PC9pPjwvYj4uIEluIHRoaXMgZXhhbXBsZSB0aGUgPGk+IHdpbGwg
aGF2ZSBhIGJsb2NrIGFzCisvLyBpdHMgY29udGludWF0aW9uIGJ1dCB0aGUgPGI+IHdpbGwganVz
dCBoYXZlIGFuIGlubGluZSBhcyBpdHMgY29udGludWF0aW9uLgordHlwZWRlZiBIYXNoTWFwPGNv
bnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiwgUmVuZGVyQm94TW9kZWxPYmplY3QqPiBDb250aW51
YXRpb25NYXA7CitzdGF0aWMgQ29udGludWF0aW9uTWFwKiBnQ29udGludWF0aW9uTWFwID0gMDsK
KwogY2xhc3MgSW1hZ2VRdWFsaXR5Q29udHJvbGxlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBw
dWJsaWM6CiAgICAgSW1hZ2VRdWFsaXR5Q29udHJvbGxlcigpOwpAQCAtMjE2LDYgKzIyNiw5IEBA
IHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmRlc3Ryb3koKQogICAgIGlmIChtX2xheWVyKQog
ICAgICAgICBtX2xheWVyLT5jbGVhckNsaXBSZWN0cygpOwogCisgICAgLy8gQSBjb250aW51YXRp
b24gb2YgdGhpcyBSZW5kZXJPYmplY3Qgc2hvdWxkIGJlIGRlc3Ryb3llZCBhdCBzdWJjbGFzc2Vz
LgorICAgIEFTU0VSVCghY29udGludWF0aW9uKCkpOworCiAgICAgLy8gUmVuZGVyT2JqZWN0Ojpk
ZXN0cm95IGNhbGxzIGJhY2sgdG8gZGVzdHJveUxheWVyKCkgZm9yIGxheWVyIGRlc3RydWN0aW9u
CiAgICAgUmVuZGVyT2JqZWN0OjpkZXN0cm95KCk7CiB9CkBAIC0xNzY1LDQgKzE3NzgsMjIgQEAg
aW50IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb250YWluaW5nQmxvY2tXaWR0aEZvckNvbnRlbnQo
KSBjb25zdAogICAgIHJldHVybiBjb250YWluaW5nQmxvY2soKS0+YXZhaWxhYmxlV2lkdGgoKTsK
IH0KIAorUmVuZGVyQm94TW9kZWxPYmplY3QqIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb250aW51
YXRpb24oKSBjb25zdAoreworICAgIGlmICghZ0NvbnRpbnVhdGlvbk1hcCkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgcmV0dXJuIGdDb250aW51YXRpb25NYXAtPmdldCh0aGlzKTsKK30KKwordm9p
ZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6c2V0Q29udGludWF0aW9uKFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiBjb250aW51YXRpb24pCit7CisgICAgaWYgKCFnQ29udGludWF0aW9uTWFwKQorICAgICAg
ICBnQ29udGludWF0aW9uTWFwID0gbmV3IENvbnRpbnVhdGlvbk1hcDsKKworICAgIGlmIChjb250
aW51YXRpb24pCisgICAgICAgIGdDb250aW51YXRpb25NYXAtPnNldCh0aGlzLCBjb250aW51YXRp
b24pOworICAgIGVsc2UKKyAgICAgICAgZ0NvbnRpbnVhdGlvbk1hcC0+cmVtb3ZlKHRoaXMpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuaAppbmRleCA0OWQ1ZjNkZDM3MjRlMTg5NGFiMzhhYWY2ZjJkNTAzZjM1ZmJiYzRh
Li42YTgxNzg5Zjc5NjVmYjk5NDJhOGJhNGJkZjY3ZDNiZjY1MTg4NGJkIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCisrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgKQEAgLTExMCw2ICsxMTAsOSBAQCBwcm90ZWN0
ZWQ6CiAKICAgICBib29sIHNob3VsZFBhaW50QXRMb3dRdWFsaXR5KEdyYXBoaWNzQ29udGV4dCos
IEltYWdlKiwgY29uc3QgSW50U2l6ZSYpOwogCisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNv
bnRpbnVhdGlvbigpIGNvbnN0OworICAgIHZvaWQgc2V0Q29udGludWF0aW9uKFJlbmRlckJveE1v
ZGVsT2JqZWN0KiBjb250aW51YXRpb24pOworCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBp
c0JveE1vZGVsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySW5saW5lLmNwcAppbmRleCBlOTE4MjJlYTg2NjI4ZmVmZTdjZmUzZGJlMDgxMGU0ZDEwYzE4
NGRjLi5mMGNhY2I1YzgxZWQzZjFiMWJlOTRkNDljYjE0ZGE5OWRhZjIyMWU2IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlcklubGluZS5jcHAKQEAgLTQ1LDcgKzQ1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBSZW5kZXJJbmxpbmU6OlJlbmRlcklubGluZShOb2RlKiBub2RlKQogICAgIDogUmVuZGVy
Qm94TW9kZWxPYmplY3Qobm9kZSkKLSAgICAsIG1fY29udGludWF0aW9uKDApCiAgICAgLCBtX2xp
bmVIZWlnaHQoLTEpCiAgICAgLCBtX3ZlcnRpY2FsUG9zaXRpb24oUG9zaXRpb25VbmRlZmluZWQp
CiB7CkBAIC02MSw5ICs2MCwxMCBAQCB2b2lkIFJlbmRlcklubGluZTo6ZGVzdHJveSgpCiAgICAg
Ly8gRGVzdHJveSBvdXIgY29udGludWF0aW9uIGJlZm9yZSBhbnl0aGluZyBvdGhlciB0aGFuIGFu
b255bW91cyBjaGlsZHJlbi4KICAgICAvLyBUaGUgcmVhc29uIHdlIGRvbid0IGRlc3Ryb3kgaXQg
YmVmb3JlIGFub255bW91cyBjaGlsZHJlbiBpcyB0aGF0IHRoZXkgbWF5CiAgICAgLy8gaGF2ZSBj
b250aW51YXRpb25zIG9mIHRoZWlyIG93biB0aGF0IGFyZSBhbm9ueW1vdXMgY2hpbGRyZW4gb2Yg
b3VyIGNvbnRpbnVhdGlvbi4KLSAgICBpZiAobV9jb250aW51YXRpb24pIHsKLSAgICAgICAgbV9j
b250aW51YXRpb24tPmRlc3Ryb3koKTsKLSAgICAgICAgbV9jb250aW51YXRpb24gPSAwOworICAg
IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250aW51YXRpb24gPSB0aGlzLT5jb250aW51YXRpb24o
KTsKKyAgICBpZiAoY29udGludWF0aW9uKSB7CisgICAgICAgIGNvbnRpbnVhdGlvbi0+ZGVzdHJv
eSgpOworICAgICAgICBzZXRDb250aW51YXRpb24oMCk7CiAgICAgfQogICAgIAogICAgIGlmICgh
ZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CkBAIC05NSw5ICs5NSwxMCBAQCB2b2lkIFJlbmRl
cklubGluZTo6ZGVzdHJveSgpCiAKIFJlbmRlcklubGluZSogUmVuZGVySW5saW5lOjppbmxpbmVF
bGVtZW50Q29udGludWF0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fY29udGludWF0aW9uIHx8
IG1fY29udGludWF0aW9uLT5pc0lubGluZSgpKQotICAgICAgICByZXR1cm4gdG9SZW5kZXJJbmxp
bmUobV9jb250aW51YXRpb24pOwotICAgIHJldHVybiB0b1JlbmRlckJsb2NrKG1fY29udGludWF0
aW9uKS0+aW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpOworICAgIFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiBjb250aW51YXRpb24gPSB0aGlzLT5jb250aW51YXRpb24oKTsKKyAgICBpZiAoIWNvbnRp
bnVhdGlvbiB8fCBjb250aW51YXRpb24tPmlzSW5saW5lKCkpCisgICAgICAgIHJldHVybiB0b1Jl
bmRlcklubGluZShjb250aW51YXRpb24pOworICAgIHJldHVybiB0b1JlbmRlckJsb2NrKGNvbnRp
bnVhdGlvbiktPmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKTsKIH0KIAogdm9pZCBSZW5kZXJJ
bmxpbmU6OnVwZGF0ZUJveE1vZGVsSW5mb0Zyb21TdHlsZSgpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGlu
ZS5oCmluZGV4IDcxYThhODkxYjEwMjg5YTA3NDZiOWIyYTZkYjcxZDFjMTk1ZjhlZmIuLmRkZmE1
Mzc0ZDZkZmViMjljMmJkYmI1ZDk0YTE0YmJjMjRmMTIzNzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlcklubGluZS5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklu
bGluZS5oCkBAIC01OSw4ICs1OSw4IEBAIHB1YmxpYzoKICAgICBJbmxpbmVGbG93Qm94KiBmaXJz
dExpbmVCb3goKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3hlcy5maXJzdExpbmVCb3goKTsgfQog
ICAgIElubGluZUZsb3dCb3gqIGxhc3RMaW5lQm94KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94
ZXMubGFzdExpbmVCb3goKTsgfQogCi0gICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRpbnVh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGludWF0aW9uOyB9Ci0gICAgdm9pZCBzZXRDb250
aW51YXRpb24oUmVuZGVyQm94TW9kZWxPYmplY3QqIGMpIHsgbV9jb250aW51YXRpb24gPSBjOyB9
CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRpbnVhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb250aW51YXRpb24oKTsgfQorICAgIHZvaWQgc2V0Q29u
dGludWF0aW9uKFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250aW51YXRpb24pIHsgUmVuZGVyQm94
TW9kZWxPYmplY3Q6OnNldENvbnRpbnVhdGlvbihjb250aW51YXRpb24pOyB9CiAgICAgdmlydHVh
bCBSZW5kZXJCb3hNb2RlbE9iamVjdCogdmlydHVhbENvbnRpbnVhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIGNvbnRpbnVhdGlvbigpOyB9CiAgICAgUmVuZGVySW5saW5lKiBpbmxpbmVFbGVtZW50Q29u
dGludWF0aW9uKCkgY29uc3Q7CiAKQEAgLTE1Miw4ICsxNTIsNiBAQCBwcml2YXRlOgogICAgIFJl
bmRlck9iamVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOwogICAgIFJlbmRlckxpbmVCb3hMaXN0IG1f
bGluZUJveGVzOyAgIC8vIEFsbCBvZiB0aGUgbGluZSBib3hlcyBjcmVhdGVkIGZvciB0aGlzIGlu
bGluZSBmbG93LiAgRm9yIGV4YW1wbGUsIDxpPkhlbGxvPGJyPndvcmxkLjwvaT4gd2lsbCBoYXZl
IHR3byA8aT4gbGluZSBib3hlcy4KIAotICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBtX2NvbnRp
bnVhdGlvbjsgLy8gQ2FuIGJlIGVpdGhlciBhIGJsb2NrIG9yIGFuIGlubGluZS4gPGI+PGk+PHA+
SGVsbG88L3A+PC9pPjwvYj4uIEluIHRoaXMgZXhhbXBsZSB0aGUgPGk+IHdpbGwgaGF2ZSBhIGJs
b2NrIGFzIGl0cyBjb250aW51YXRpb24gYnV0IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gPGI+IHdpbGwganVzdCBoYXZlIGFuIGlubGluZSBhcyBpdHMg
Y29udGludWF0aW9uLgogICAgIG11dGFibGUgaW50IG1fbGluZUhlaWdodDsKICAgICBtdXRhYmxl
IGludCBtX3ZlcnRpY2FsUG9zaXRpb247CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76472</attachid>
            <date>2010-12-13 17:49:45 -0800</date>
            <delta_ts>2010-12-29 19:16:17 -0800</delta_ts>
            <desc>Patch V2</desc>
            <filename>bug-43716-20101214104943.patch</filename>
            <type>text/plain</type>
            <size>11512</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTZlMTJkNDA1MzZlMDcyOWZhYjU4NjA2ZjEyYmZmMjkzNGExYjM1Yy4uY2E4OTdlZTZiM2QyYTlh
MmZjMjNhNjRmOTY5ZDIyZDNkOTBlZTdjMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxMC0xMi0xMyAgS2Vu
aWNoaSBJc2hpYmFzaGkgIDxiYXNoaUBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBhIEhhc2hNYXAgZm9yIG1fY29udGludWF0
aW9uIHRvIHNhdmUgbWVtb3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00MzcxNgorCisgICAgICAgIFNhdmluZyBtZW1vcnkgY29uc3VtcHRpb24gYnkg
YXBwbHlpbmcgYSBIYXNoTWFwIGNvbnZlbnRpb24gdG8KKyAgICAgICAgY29udGludWF0aW9uIHBv
aW50ZXJzIG9mIFJlbmRlcklubGluZSBhbmQgUmVuZGVyQmxvY2sgY2xhc3Nlcy4KKworICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6IFJlbW92ZWQgbV9jb250aW51YXRpb24uCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6UmVuZGVyQmxvY2spOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmlubGluZUVsZW1lbnRDb250aW51YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OmJsb2NrRWxlbWVudENvbnRpbnVhdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmg6IFJlbW92ZWQgbV9jb250aW51YXRpb24uCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDogQWRkZWQgYSBoYXNoIG1hcCBmb3IgY29udGludWF0
aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpkZXN0cm95KTog
QWRkZWQgYW4gYXNzZXJ0aW9uLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OmNvbnRpbnVhdGlvbik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9k
ZWxPYmplY3Q6OnNldENvbnRpbnVhdGlvbik6IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUu
Y3BwOiBSZW1vdmVkIG1fY29udGludWF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5s
aW5lOjpSZW5kZXJJbmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpkZXN0
cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6aW5saW5lRWxlbWVudENvbnRp
bnVhdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5oOiBSZW1vdmVkIG1f
Y29udGludWF0aW9uLgorCiAyMDEwLTEyLTEzICBNYXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+
CiAKICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgSm9uIEhvbmV5Y3V0dC4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcAppbmRleCA0MzZkZWY5MmNkNjczNDc3OTc5ODk3Mzc3OWMzZWRlM2IxZWRm
YjgzLi41YmVmZGRhNjA3MWM2NzVlMjRiMmIwNjkwOTJmN2E5NjdiNjM0ZDhkIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwCkBAIC0xMTAsNyArMTEwLDYgQEAgUmVuZGVyQmxvY2s6OlJlbmRl
ckJsb2NrKE5vZGUqIG5vZGUpCiAgICAgICA6IFJlbmRlckJveChub2RlKQogICAgICAgLCBtX2Zs
b2F0aW5nT2JqZWN0cygwKQogICAgICAgLCBtX3Bvc2l0aW9uZWRPYmplY3RzKDApCi0gICAgICAs
IG1fY29udGludWF0aW9uKDApCiAgICAgICAsIG1fcmFyZURhdGEoMCkKICAgICAgICwgbV9saW5l
SGVpZ2h0KC0xKQogewpAQCAtMTU0LDkgKzE1MywxMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpkZXN0
cm95KCkKICAgICAvLyBEZXN0cm95IG91ciBjb250aW51YXRpb24gYmVmb3JlIGFueXRoaW5nIG90
aGVyIHRoYW4gYW5vbnltb3VzIGNoaWxkcmVuLgogICAgIC8vIFRoZSByZWFzb24gd2UgZG9uJ3Qg
ZGVzdHJveSBpdCBiZWZvcmUgYW5vbnltb3VzIGNoaWxkcmVuIGlzIHRoYXQgdGhleSBtYXkKICAg
ICAvLyBoYXZlIGNvbnRpbnVhdGlvbnMgb2YgdGhlaXIgb3duIHRoYXQgYXJlIGFub255bW91cyBj
aGlsZHJlbiBvZiBvdXIgY29udGludWF0aW9uLgotICAgIGlmIChtX2NvbnRpbnVhdGlvbikgewot
ICAgICAgICBtX2NvbnRpbnVhdGlvbi0+ZGVzdHJveSgpOwotICAgICAgICBtX2NvbnRpbnVhdGlv
biA9IDA7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRpbnVhdGlvbiA9IHRoaXMtPmNv
bnRpbnVhdGlvbigpOworICAgIGlmIChjb250aW51YXRpb24pIHsKKyAgICAgICAgY29udGludWF0
aW9uLT5kZXN0cm95KCk7CisgICAgICAgIHNldENvbnRpbnVhdGlvbigwKTsKICAgICB9CiAgICAg
CiAgICAgaWYgKCFkb2N1bWVudEJlaW5nRGVzdHJveWVkKCkpIHsKQEAgLTI1MTYsMTQgKzI1MTYs
MTYgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRFbGxpcHNpc0JveGVzKFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIAogUmVuZGVySW5saW5lKiBSZW5kZXJCbG9jazo6aW5s
aW5lRWxlbWVudENvbnRpbnVhdGlvbigpIGNvbnN0CiB7IAotICAgIHJldHVybiBtX2NvbnRpbnVh
dGlvbiAmJiBtX2NvbnRpbnVhdGlvbi0+aXNJbmxpbmUoKSA/IHRvUmVuZGVySW5saW5lKG1fY29u
dGludWF0aW9uKSA6IDA7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRpbnVhdGlvbiA9
IHRoaXMtPmNvbnRpbnVhdGlvbigpOworICAgIHJldHVybiBjb250aW51YXRpb24gJiYgY29udGlu
dWF0aW9uLT5pc0lubGluZSgpID8gdG9SZW5kZXJJbmxpbmUoY29udGludWF0aW9uKSA6IDA7CiB9
CiAKIFJlbmRlckJsb2NrKiBSZW5kZXJCbG9jazo6YmxvY2tFbGVtZW50Q29udGludWF0aW9uKCkg
Y29uc3QKIHsKLSAgICBpZiAoIW1fY29udGludWF0aW9uIHx8IG1fY29udGludWF0aW9uLT5pc0lu
bGluZSgpKQorICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBjdXJyZW50Q29udGludWF0aW9uID0g
Y29udGludWF0aW9uKCk7CisgICAgaWYgKCFjdXJyZW50Q29udGludWF0aW9uIHx8IGN1cnJlbnRD
b250aW51YXRpb24tPmlzSW5saW5lKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIFJlbmRlckJs
b2NrKiBuZXh0Q29udGludWF0aW9uID0gdG9SZW5kZXJCbG9jayhtX2NvbnRpbnVhdGlvbik7Cisg
ICAgUmVuZGVyQmxvY2sqIG5leHRDb250aW51YXRpb24gPSB0b1JlbmRlckJsb2NrKGN1cnJlbnRD
b250aW51YXRpb24pOwogICAgIGlmIChuZXh0Q29udGludWF0aW9uLT5pc0Fub255bW91c0Jsb2Nr
KCkpCiAgICAgICAgIHJldHVybiBuZXh0Q29udGludWF0aW9uLT5ibG9ja0VsZW1lbnRDb250aW51
YXRpb24oKTsKICAgICByZXR1cm4gbmV4dENvbnRpbnVhdGlvbjsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5oCmluZGV4IDk0ZDY5ODBlZjZhNTVmODY3YWE1OWU5MzAxNDFkNzM5NTA4MWJlZDUuLmQxZDgw
OTFlZDlhNDc2NWNiMzhlMTdjMmNiMzZlYWRhNGYwNjliM2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suaApAQCAtMTI4LDEzICsxMjgsMTQgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRDb250aW51
YXRpb25XaXRoT3V0bGluZShSZW5kZXJJbmxpbmUqKTsKIAotICAgIFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiBjb250aW51YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbnRpbnVhdGlvbjsgfQotICAg
IHZvaWQgc2V0Q29udGludWF0aW9uKFJlbmRlckJveE1vZGVsT2JqZWN0KiBjKSB7IG1fY29udGlu
dWF0aW9uID0gYzsgfQogICAgIHZpcnR1YWwgUmVuZGVyQm94TW9kZWxPYmplY3QqIHZpcnR1YWxD
b250aW51YXRpb24oKSBjb25zdCB7IHJldHVybiBjb250aW51YXRpb24oKTsgfQogICAgIGJvb2wg
aXNBbm9ueW1vdXNCbG9ja0NvbnRpbnVhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGNvbnRpbnVhdGlv
bigpICYmIGlzQW5vbnltb3VzQmxvY2soKTsgfQogICAgIFJlbmRlcklubGluZSogaW5saW5lRWxl
bWVudENvbnRpbnVhdGlvbigpIGNvbnN0OwogICAgIFJlbmRlckJsb2NrKiBibG9ja0VsZW1lbnRD
b250aW51YXRpb24oKSBjb25zdDsKIAorICAgIHVzaW5nIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpj
b250aW51YXRpb247CisgICAgdXNpbmcgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnNldENvbnRpbnVh
dGlvbjsKKwogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgYSBjb252ZW5pZW5jZSBoZWxwZXIgZm9y
IGNyZWF0aW5nIGFuIGFub255bW91cyBibG9jayB0aGF0IGluaGVyaXRzIGl0cwogICAgIC8vIHN0
eWxlIGZyb20gdGhpcyBSZW5kZXJCbG9jay4KICAgICBSZW5kZXJCbG9jayogY3JlYXRlQW5vbnlt
b3VzQmxvY2soYm9vbCBpc0ZsZXhpYmxlQm94ID0gZmFsc2UpIGNvbnN0OwpAQCAtNjcxLDEyICs2
NzIsNiBAQCBwcml2YXRlOgogICAgIAogICAgIFBvc2l0aW9uZWRPYmplY3RzTGlzdEhhc2hTZXQq
IG1fcG9zaXRpb25lZE9iamVjdHM7CiAKLSAgICAvLyBBbiBpbmxpbmUgY2FuIGJlIHNwbGl0IHdp
dGggYmxvY2tzIG9jY3VycmluZyBpbiBiZXR3ZWVuIHRoZSBpbmxpbmUgY29udGVudC4KLSAgICAv
LyBXaGVuIHRoaXMgb2NjdXJzIHdlIG5lZWQgYSBwb2ludGVyIHRvIG91ciBuZXh0IG9iamVjdC4g
IFdlIGNhbiBiYXNpY2FsbHkgYmUKLSAgICAvLyBzcGxpdCBpbnRvIGEgc2VxdWVuY2Ugb2YgaW5s
aW5lcyBhbmQgYmxvY2tzLiAgVGhlIGNvbnRpbnVhdGlvbiB3aWxsIGVpdGhlciBiZQotICAgIC8v
IGFuIGFub255bW91cyBibG9jayAodGhhdCBob3VzZXMgb3RoZXIgYmxvY2tzKSBvciBpdCB3aWxs
IGJlIGFuIGlubGluZSBmbG93LgotICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBtX2NvbnRpbnVh
dGlvbjsKLSAgICAKICAgICAvLyBBbGxvY2F0ZWQgb25seSB3aGVuIHNvbWUgb2YgdGhlc2UgZmll
bGRzIGhhdmUgbm9uLWRlZmF1bHQgdmFsdWVzCiAgICAgc3RydWN0IFJlbmRlckJsb2NrUmFyZURh
dGEgOiBOb25jb3B5YWJsZSB7CiAgICAgICAgIFJlbmRlckJsb2NrUmFyZURhdGEoY29uc3QgUmVu
ZGVyQmxvY2sqIGJsb2NrKSAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmNwcAppbmRleCBmOTg1YTIwNjQ0ZTg3OTNiNjJiMWEzMTI4YWY0YzU5YjZhOGY4ODc4Li5hMTY3
YzFjZTA3NjMwOWNkODIzZGUwMzQ5ZmQ2NDQ2MmVmMzZjOGQ5IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC01Myw2ICs1MywxNiBAQCBzdGF0aWMgY29u
c3QgZG91YmxlIGNMb3dRdWFsaXR5VGltZVRocmVzaG9sZCA9IDAuNTAwOyAvLyA1MDAgbXMKIHR5
cGVkZWYgcGFpcjxSZW5kZXJCb3hNb2RlbE9iamVjdCosIGNvbnN0IHZvaWQqPiBMYXN0UGFpbnRT
aXplTWFwS2V5OwogdHlwZWRlZiBIYXNoTWFwPExhc3RQYWludFNpemVNYXBLZXksIEludFNpemU+
IExhc3RQYWludFNpemVNYXA7CiAKKy8vIFRoZSBIYXNoTWFwIGZvciBzdG9yaW5nIGNvbnRpbnVh
dGlvbiBwb2ludGVycy4KKy8vIEFuIGlubGluZSBjYW4gYmUgc3BsaXQgd2l0aCBibG9ja3Mgb2Nj
dXJpbmcgaW4gYmV0d2VlbiB0aGUgaW5saW5lIGNvbnRlbnQuCisvLyBXaGVuIHRoaXMgb2NjdXJz
IHdlIG5lZWQgYSBwb2ludGVyIHRvIHRoZSBuZXh0IG9iamVjdC4gV2UgY2FuIGJhc2ljYWxseSBi
ZQorLy8gc3BsaXQgaW50byBhIHNlcXVlbmNlIG9mIGlubGluZXMgYW5kIGJsb2Nrcy4gVGhlIGNv
bnRpbnVhdGlvbiB3aWxsIGVpdGhlciBiZQorLy8gYW4gYW5vbnltb3VzIGJsb2NrICh0aGF0IGhv
dXNlcyBvdGhlciBibG9ja3MpIG9yIGl0IHdpbGwgYmUgYW4gaW5saW5lIGZsb3cuCisvLyA8Yj48
aT48cD5IZWxsbzwvcD48L2k+PC9iPi4gSW4gdGhpcyBleGFtcGxlIHRoZSA8aT4gd2lsbCBoYXZl
IGEgYmxvY2sgYXMKKy8vIGl0cyBjb250aW51YXRpb24gYnV0IHRoZSA8Yj4gd2lsbCBqdXN0IGhh
dmUgYW4gaW5saW5lIGFzIGl0cyBjb250aW51YXRpb24uCit0eXBlZGVmIEhhc2hNYXA8Y29uc3Qg
UmVuZGVyQm94TW9kZWxPYmplY3QqLCBSZW5kZXJCb3hNb2RlbE9iamVjdCo+IENvbnRpbnVhdGlv
bk1hcDsKK3N0YXRpYyBDb250aW51YXRpb25NYXAqIGNvbnRpbnVhdGlvbk1hcCA9IDA7CisKIGNs
YXNzIEltYWdlUXVhbGl0eUNvbnRyb2xsZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGlj
OgogICAgIEltYWdlUXVhbGl0eUNvbnRyb2xsZXIoKTsKQEAgLTIyOSw2ICsyMzksOSBAQCB2b2lk
IFJlbmRlckJveE1vZGVsT2JqZWN0OjpkZXN0cm95KCkKICAgICBpZiAobV9sYXllcikKICAgICAg
ICAgbV9sYXllci0+Y2xlYXJDbGlwUmVjdHMoKTsKIAorICAgIC8vIEEgY29udGludWF0aW9uIG9m
IHRoaXMgUmVuZGVyT2JqZWN0IHNob3VsZCBiZSBkZXN0cm95ZWQgYXQgc3ViY2xhc3Nlcy4KKyAg
ICBBU1NFUlQoIWNvbnRpbnVhdGlvbigpKTsKKwogICAgIC8vIFJlbmRlck9iamVjdDo6ZGVzdHJv
eSBjYWxscyBiYWNrIHRvIGRlc3Ryb3lMYXllcigpIGZvciBsYXllciBkZXN0cnVjdGlvbgogICAg
IFJlbmRlck9iamVjdDo6ZGVzdHJveSgpOwogfQpAQCAtMTgxOSw0ICsxODMyLDIzIEBAIGludCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVu
dCgpIGNvbnN0CiAgICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9jaygpLT5hdmFpbGFibGVMb2dpY2Fs
V2lkdGgoKTsKIH0KIAorUmVuZGVyQm94TW9kZWxPYmplY3QqIFJlbmRlckJveE1vZGVsT2JqZWN0
Ojpjb250aW51YXRpb24oKSBjb25zdAoreworICAgIGlmICghY29udGludWF0aW9uTWFwKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY29udGludWF0aW9uTWFwLT5nZXQodGhpcyk7Cit9
CisKK3ZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnNldENvbnRpbnVhdGlvbihSZW5kZXJCb3hN
b2RlbE9iamVjdCogY29udGludWF0aW9uKQoreworICAgIGlmIChjb250aW51YXRpb24pIHsKKyAg
ICAgICAgaWYgKCFjb250aW51YXRpb25NYXApCisgICAgICAgICAgICBjb250aW51YXRpb25NYXAg
PSBuZXcgQ29udGludWF0aW9uTWFwOworICAgICAgICBjb250aW51YXRpb25NYXAtPnNldCh0aGlz
LCBjb250aW51YXRpb24pOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChjb250aW51YXRpb25N
YXApCisgICAgICAgICAgICBjb250aW51YXRpb25NYXAtPnJlbW92ZSh0aGlzKTsKKyAgICB9Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2Rl
bE9iamVjdC5oCmluZGV4IGI2OTcyMTdiZDIyM2MyOTRlMTU4YjYyZmIxYjBiMTVkMDkyYWE2MjQu
Ljk4ZTM4NmI2ODM2OTg4MWM4YjBkZmRlYmM2MTdiMDdiNTBjNmI5NjYgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgKKysrIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaApAQCAtMTI1LDYgKzEyNSw5IEBAIHByb3RlY3Rl
ZDoKIAogICAgIGJvb2wgc2hvdWxkUGFpbnRBdExvd1F1YWxpdHkoR3JhcGhpY3NDb250ZXh0Kiwg
SW1hZ2UqLCBjb25zdCB2b2lkKiwgY29uc3QgSW50U2l6ZSYpOwogCisgICAgUmVuZGVyQm94TW9k
ZWxPYmplY3QqIGNvbnRpbnVhdGlvbigpIGNvbnN0OworICAgIHZvaWQgc2V0Q29udGludWF0aW9u
KFJlbmRlckJveE1vZGVsT2JqZWN0Kik7CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlz
Qm94TW9kZWxPYmplY3QoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuY3BwCmluZGV4IDRiNTI5OGM1OGVkNTY5NTdkZDk4ZjMwZTA5OWYxNDA3Y2ZhZGU2
ODkuLjc0NjZhY2UyMDQxN2ViZWZkZDM1MzdkMjNkMzBhMDQzNzY1OGVlNzUgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW5saW5lLmNwcApAQCAtNDYsNyArNDYsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIFJlbmRlcklubGluZTo6UmVuZGVySW5saW5lKE5vZGUqIG5vZGUpCiAgICAgOiBSZW5kZXJC
b3hNb2RlbE9iamVjdChub2RlKQotICAgICwgbV9jb250aW51YXRpb24oMCkKICAgICAsIG1fbGlu
ZUhlaWdodCgtMSkKIHsKICAgICBzZXRDaGlsZHJlbklubGluZSh0cnVlKTsKQEAgLTYxLDkgKzYw
LDEwIEBAIHZvaWQgUmVuZGVySW5saW5lOjpkZXN0cm95KCkKICAgICAvLyBEZXN0cm95IG91ciBj
b250aW51YXRpb24gYmVmb3JlIGFueXRoaW5nIG90aGVyIHRoYW4gYW5vbnltb3VzIGNoaWxkcmVu
LgogICAgIC8vIFRoZSByZWFzb24gd2UgZG9uJ3QgZGVzdHJveSBpdCBiZWZvcmUgYW5vbnltb3Vz
IGNoaWxkcmVuIGlzIHRoYXQgdGhleSBtYXkKICAgICAvLyBoYXZlIGNvbnRpbnVhdGlvbnMgb2Yg
dGhlaXIgb3duIHRoYXQgYXJlIGFub255bW91cyBjaGlsZHJlbiBvZiBvdXIgY29udGludWF0aW9u
LgotICAgIGlmIChtX2NvbnRpbnVhdGlvbikgewotICAgICAgICBtX2NvbnRpbnVhdGlvbi0+ZGVz
dHJveSgpOwotICAgICAgICBtX2NvbnRpbnVhdGlvbiA9IDA7CisgICAgUmVuZGVyQm94TW9kZWxP
YmplY3QqIGNvbnRpbnVhdGlvbiA9IHRoaXMtPmNvbnRpbnVhdGlvbigpOworICAgIGlmIChjb250
aW51YXRpb24pIHsKKyAgICAgICAgY29udGludWF0aW9uLT5kZXN0cm95KCk7CisgICAgICAgIHNl
dENvbnRpbnVhdGlvbigwKTsKICAgICB9CiAgICAgCiAgICAgaWYgKCFkb2N1bWVudEJlaW5nRGVz
dHJveWVkKCkpIHsKQEAgLTk1LDkgKzk1LDEwIEBAIHZvaWQgUmVuZGVySW5saW5lOjpkZXN0cm95
KCkKIAogUmVuZGVySW5saW5lKiBSZW5kZXJJbmxpbmU6OmlubGluZUVsZW1lbnRDb250aW51YXRp
b24oKSBjb25zdAogewotICAgIGlmICghbV9jb250aW51YXRpb24gfHwgbV9jb250aW51YXRpb24t
PmlzSW5saW5lKCkpCi0gICAgICAgIHJldHVybiB0b1JlbmRlcklubGluZShtX2NvbnRpbnVhdGlv
bik7Ci0gICAgcmV0dXJuIHRvUmVuZGVyQmxvY2sobV9jb250aW51YXRpb24pLT5pbmxpbmVFbGVt
ZW50Q29udGludWF0aW9uKCk7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRpbnVhdGlv
biA9IHRoaXMtPmNvbnRpbnVhdGlvbigpOworICAgIGlmICghY29udGludWF0aW9uIHx8IGNvbnRp
bnVhdGlvbi0+aXNJbmxpbmUoKSkKKyAgICAgICAgcmV0dXJuIHRvUmVuZGVySW5saW5lKGNvbnRp
bnVhdGlvbik7CisgICAgcmV0dXJuIHRvUmVuZGVyQmxvY2soY29udGludWF0aW9uKS0+aW5saW5l
RWxlbWVudENvbnRpbnVhdGlvbigpOwogfQogCiB2b2lkIFJlbmRlcklubGluZTo6dXBkYXRlQm94
TW9kZWxJbmZvRnJvbVN0eWxlKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cklubGluZS5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKaW5kZXggZjZmMzkw
OGZhNWFhODZjMGRlNjcyMzIxYzY5YzQyZTkyOWNkMDZmMi4uMThiNGEzYzI5MDIxZDYwZWRiZTVk
Y2E4OWVhNDc4NjY2NGM3YTNhYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW5saW5lLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKQEAgLTY1LDgg
KzY1LDYgQEAgcHVibGljOgogICAgIElubGluZUZsb3dCb3gqIGZpcnN0TGluZUJveCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGluZUJveGVzLmZpcnN0TGluZUJveCgpOyB9CiAgICAgSW5saW5lRmxvd0Jv
eCogbGFzdExpbmVCb3goKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3hlcy5sYXN0TGluZUJveCgp
OyB9CiAKLSAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29udGludWF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250aW51YXRpb247IH0KLSAgICB2b2lkIHNldENvbnRpbnVhdGlvbihSZW5kZXJC
b3hNb2RlbE9iamVjdCogYykgeyBtX2NvbnRpbnVhdGlvbiA9IGM7IH0KICAgICB2aXJ0dWFsIFJl
bmRlckJveE1vZGVsT2JqZWN0KiB2aXJ0dWFsQ29udGludWF0aW9uKCkgY29uc3QgeyByZXR1cm4g
Y29udGludWF0aW9uKCk7IH0KICAgICBSZW5kZXJJbmxpbmUqIGlubGluZUVsZW1lbnRDb250aW51
YXRpb24oKSBjb25zdDsKIApAQCAtNzcsNiArNzUsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0eCwgaW50IHR5KTsK
ICAgICB2b2lkIHBhaW50T3V0bGluZShHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSk7
CiAKKyAgICB1c2luZyBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29udGludWF0aW9uOworICAgIHVz
aW5nIFJlbmRlckJveE1vZGVsT2JqZWN0OjpzZXRDb250aW51YXRpb247CisKIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBS
ZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCkBAIC0xNTMsOCArMTU0LDYgQEAgcHJpdmF0ZToKICAg
ICBSZW5kZXJPYmplY3RDaGlsZExpc3QgbV9jaGlsZHJlbjsKICAgICBSZW5kZXJMaW5lQm94TGlz
dCBtX2xpbmVCb3hlczsgICAvLyBBbGwgb2YgdGhlIGxpbmUgYm94ZXMgY3JlYXRlZCBmb3IgdGhp
cyBpbmxpbmUgZmxvdy4gIEZvciBleGFtcGxlLCA8aT5IZWxsbzxicj53b3JsZC48L2k+IHdpbGwg
aGF2ZSB0d28gPGk+IGxpbmUgYm94ZXMuCiAKLSAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogbV9j
b250aW51YXRpb247IC8vIENhbiBiZSBlaXRoZXIgYSBibG9jayBvciBhbiBpbmxpbmUuIDxiPjxp
PjxwPkhlbGxvPC9wPjwvaT48L2I+LiBJbiB0aGlzIGV4YW1wbGUgdGhlIDxpPiB3aWxsIGhhdmUg
YSBibG9jayBhcyBpdHMgY29udGludWF0aW9uIGJ1dCB0aGUKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIDxiPiB3aWxsIGp1c3QgaGF2ZSBhbiBpbmxpbmUgYXMg
aXRzIGNvbnRpbnVhdGlvbi4KICAgICBtdXRhYmxlIGludCBtX2xpbmVIZWlnaHQ7CiB9OwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>