<?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>109093</bug_id>
          
          <creation_ts>2013-02-06 14:03:18 -0800</creation_ts>
          <short_desc>[Text Autosizing] Split isAutosizingCluster into three independent checks</short_desc>
          <delta_ts>2013-02-12 05:59:41 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>107300</blocked>
    
    <blocked>109573</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Anton Vayvod">avayvod</reporter>
          <assigned_to name="Anton Vayvod">avayvod</assigned_to>
          <cc>eric</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>johnme</cc>
    
    <cc>kenneth</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>826743</commentid>
    <comment_count>0</comment_count>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2013-02-06 14:03:18 -0800</bug_when>
    <thetext>[Text Autosizing] Introduce an enum representing different types of renderers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826750</commentid>
    <comment_count>1</comment_count>
      <attachid>186918</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2013-02-06 14:13:56 -0800</bug_when>
    <thetext>Created attachment 186918
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826754</commentid>
    <comment_count>2</comment_count>
      <attachid>186919</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2013-02-06 14:16:39 -0800</bug_when>
    <thetext>Created attachment 186919
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826965</commentid>
    <comment_count>3</comment_count>
      <attachid>186919</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2013-02-06 18:31:55 -0800</bug_when>
    <thetext>Comment on attachment 186919
Patch

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

&gt; Source/WebCore/rendering/TextAutosizer.cpp:122
&gt; +    while (cluster &amp;&amp; getRendererType(cluster) != IndependentAutosizingCluster)

We don&apos;t prefix getters with get (Rule 6 of the coding style: &quot;Use bare words for getters.&quot;)

&gt; Source/WebCore/rendering/TextAutosizer.cpp:155
&gt; -void TextAutosizer::processContainer(float multiplier, RenderBlock* container, TextAutosizingClusterInfo* clusterInfo, RenderObject* subtreeRoot, const TextAutosizingWindowInfo&amp; windowInfo)
&gt; +void TextAutosizer::processContainer(float multiplier, RenderBlock* container, TextAutosizingClusterInfo&amp; clusterInfo, RenderObject* subtreeRoot, const TextAutosizingWindowInfo&amp; windowInfo)

Not a super fan of squashing the pointer -&gt; reference change as part of this one.

&gt; Source/WebCore/rendering/TextAutosizer.cpp:172
&gt; +                {

This is not in line with our coding style: we don&apos;t indent the parentheses like that.

&gt; Source/WebCore/rendering/TextAutosizer.cpp:184
&gt; +                    break;

This code is now super hard to read. By exporting the reason, I didn&apos;t mean you can&apos;t use the previous boolean methods for clarity. It just gave you much more flexibility if you needed it.

&gt; Source/WebCore/rendering/TextAutosizer.h:62
&gt; +    enum RendererType {

Probably more ClusterType or ContainerType instead of RendererType which is already way overloaded.

&gt; Source/WebCore/rendering/TextAutosizer.h:72
&gt; +        NarrowDescendant,
&gt; +        // A wider descendant, considered to be an autosizing cluster because of its width greater
&gt; +        // than that of the text width of the parent autosizing cluster.
&gt; +        WiderDescendant,

These 2 names really don&apos;t convey the idea that they are AutosizingContainer too. Suggestions: AutosizingContainerWithNarrawDescendant, AutosizingContainerWithWiderDescendant (isn&apos;t WiderDescendant just a synonym of OverflowingDescendant?).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827252</commentid>
    <comment_count>4</comment_count>
      <attachid>186919</attachid>
    <who name="John Mellor">johnme</who>
    <bug_when>2013-02-07 03:20:45 -0800</bug_when>
    <thetext>Comment on attachment 186919
Patch

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

The overall change does seem to make things clearer. Two nits.

&gt; Source/WebCore/rendering/TextAutosizer.cpp:313
&gt;      // the |blockContainingAllText| of their enclosing cluster also become clusters,

&quot;become clusters&quot; is a bit unclear, since we&apos;re now just terming these &quot;Narrow/WiderDescendant&quot;.

It might make sense to move most of the above comment to isIndependentAutosizingCluster? Though I&apos;m not sure where you&apos;d put this last paragraph then...

&gt; Source/WebCore/rendering/TextAutosizer.cpp:456
&gt; +            RendererType rendererType(getRendererType(descendant, &amp;clusterInfo));

Micro-nit: nothing wrong with this, but as it&apos;s just an enum, perhaps clearer to assign the value using &apos;=&apos; instead of a copy constructor?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827506</commentid>
    <comment_count>5</comment_count>
      <attachid>187108</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2013-02-07 07:38:37 -0800</bug_when>
    <thetext>Created attachment 187108
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827587</commentid>
    <comment_count>6</comment_count>
      <attachid>186919</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2013-02-07 08:59:45 -0800</bug_when>
    <thetext>Comment on attachment 186919
Patch

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

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:122
&gt;&gt; +    while (cluster &amp;&amp; getRendererType(cluster) != IndependentAutosizingCluster)
&gt; 
&gt; We don&apos;t prefix getters with get (Rule 6 of the coding style: &quot;Use bare words for getters.&quot;)

Sorry, mixed with another style guide.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:155
&gt;&gt; +void TextAutosizer::processContainer(float multiplier, RenderBlock* container, TextAutosizingClusterInfo&amp; clusterInfo, RenderObject* subtreeRoot, const TextAutosizingWindowInfo&amp; windowInfo)
&gt; 
&gt; Not a super fan of squashing the pointer -&gt; reference change as part of this one.

Done.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:172
&gt;&gt; +                {
&gt; 
&gt; This is not in line with our coding style: we don&apos;t indent the parentheses like that.

Done.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:184
&gt;&gt; +                    break;
&gt; 
&gt; This code is now super hard to read. By exporting the reason, I didn&apos;t mean you can&apos;t use the previous boolean methods for clarity. It just gave you much more flexibility if you needed it.

I think if we just have three separate methods with clear naming that indicate if one of the reasons is true, we don&apos;t need an enum at all. Enum will require a switch and readability will probably suffer in most cases.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:313
&gt;&gt;      // the |blockContainingAllText| of their enclosing cluster also become clusters,
&gt; 
&gt; &quot;become clusters&quot; is a bit unclear, since we&apos;re now just terming these &quot;Narrow/WiderDescendant&quot;.
&gt; 
&gt; It might make sense to move most of the above comment to isIndependentAutosizingCluster? Though I&apos;m not sure where you&apos;d put this last paragraph then...

Done. Removed the last paragraph and introduced comments in isNarrow/WiderDescendant

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:456
&gt;&gt; +            RendererType rendererType(getRendererType(descendant, &amp;clusterInfo));
&gt; 
&gt; Micro-nit: nothing wrong with this, but as it&apos;s just an enum, perhaps clearer to assign the value using &apos;=&apos; instead of a copy constructor?

Ack

&gt;&gt; Source/WebCore/rendering/TextAutosizer.h:62
&gt;&gt; +    enum RendererType {
&gt; 
&gt; Probably more ClusterType or ContainerType instead of RendererType which is already way overloaded.

Removed the enum.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.h:72
&gt;&gt; +        WiderDescendant,
&gt; 
&gt; These 2 names really don&apos;t convey the idea that they are AutosizingContainer too. Suggestions: AutosizingContainerWithNarrawDescendant, AutosizingContainerWithWiderDescendant (isn&apos;t WiderDescendant just a synonym of OverflowingDescendant?).

I think overflowing might be confused with overflow CSS property which is a different thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827699</commentid>
    <comment_count>7</comment_count>
      <attachid>187108</attachid>
    <who name="John Mellor">johnme</who>
    <bug_when>2013-02-07 10:58:11 -0800</bug_when>
    <thetext>Comment on attachment 187108
Patch

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

This seems reasonable. Just a few minor comment nits.

&gt; Source/WebCore/ChangeLog:3
&gt; +        [Text Autosizing] Refactor isAutosizingCluster.

You should probably rename the bug to match this.

&gt; Source/WebCore/ChangeLog:33
&gt; +            Handful method to check all separate conditions together.

s/Handful/Handy/ ?

&gt; Source/WebCore/rendering/TextAutosizer.cpp:241
&gt; +    // their enclosing cluster need to be autosized separately and thus treated the same way as

It&apos;s a little confusing to talk about &quot;treated the same way as autosizing clusters&quot;, since based on the new method names, being narrower makes it by definition a cluster (i.e. isAutosizingCluster will return true). Perhaps:

    // Autosizing containers that are significantly narrower than the |blockContainingAllText| of
    // their enclosing cluster may be acting as separate columns, hence must be autosized
    // separately. For example the 2nd div in:
    // &lt;body&gt;
    //     &lt;div style=&quot;float: right; width: 50%;&quot;&gt;&lt;/div&gt;
    //     &lt;div style=&quot;width: 50%;&quot;&gt;&lt;/div&gt;
    // &lt;body&gt;
    // becomes the left column, and should be autosized differently from the body.

&gt; Source/WebCore/rendering/TextAutosizer.cpp:244
&gt; +    // the enclosing cluster and this upper limit of 200 units is a

&quot;is a&quot; what?

&gt; Source/WebCore/rendering/TextAutosizer.cpp:263
&gt; +    // cluster are treated the same way as autosizing clusters to be autosized separately.

Similarly, it&apos;s a little confusing to talk about &quot;treated the same way as autosizing clusters&quot;, since based on the new method names, being wider makes it by definition a cluster. Perhaps &quot;Autosizing containers that are wider than the |blockContainingAllText| of their enclosing cluster violate our assumption that all the descendants are narrower than the |blockContainingAllText|, and hence must be autosized separately.&quot;

&gt; Source/WebCore/rendering/TextAutosizer.cpp:304
&gt; +bool TextAutosizer::isAutosizingCluster(const RenderBlock* renderer, TextAutosizingClusterInfo* parentClusterInfo)

It would be nice to have an |ASSERT(isAutosizingContainer(renderer));| at the start of this (or perhaps the 3 is*Descendant methods should each have the assert, since they can be called individually?).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827785</commentid>
    <comment_count>8</comment_count>
      <attachid>187145</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2013-02-07 12:18:44 -0800</bug_when>
    <thetext>Created attachment 187145
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827788</commentid>
    <comment_count>9</comment_count>
      <attachid>187108</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2013-02-07 12:20:36 -0800</bug_when>
    <thetext>Comment on attachment 187108
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:33
&gt;&gt; +            Handful method to check all separate conditions together.
&gt; 
&gt; s/Handful/Handy/ ?

Done.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:241
&gt;&gt; +    // their enclosing cluster need to be autosized separately and thus treated the same way as
&gt; 
&gt; It&apos;s a little confusing to talk about &quot;treated the same way as autosizing clusters&quot;, since based on the new method names, being narrower makes it by definition a cluster (i.e. isAutosizingCluster will return true). Perhaps:
&gt; 
&gt;     // Autosizing containers that are significantly narrower than the |blockContainingAllText| of
&gt;     // their enclosing cluster may be acting as separate columns, hence must be autosized
&gt;     // separately. For example the 2nd div in:
&gt;     // &lt;body&gt;
&gt;     //     &lt;div style=&quot;float: right; width: 50%;&quot;&gt;&lt;/div&gt;
&gt;     //     &lt;div style=&quot;width: 50%;&quot;&gt;&lt;/div&gt;
&gt;     // &lt;body&gt;
&gt;     // becomes the left column, and should be autosized differently from the body.

Done.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:244
&gt;&gt; +    // the enclosing cluster and this upper limit of 200 units is a
&gt; 
&gt; &quot;is a&quot; what?

Finished the sentence.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:263
&gt;&gt; +    // cluster are treated the same way as autosizing clusters to be autosized separately.
&gt; 
&gt; Similarly, it&apos;s a little confusing to talk about &quot;treated the same way as autosizing clusters&quot;, since based on the new method names, being wider makes it by definition a cluster. Perhaps &quot;Autosizing containers that are wider than the |blockContainingAllText| of their enclosing cluster violate our assumption that all the descendants are narrower than the |blockContainingAllText|, and hence must be autosized separately.&quot;

Done. Thanks for the suggestions!

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:304
&gt;&gt; +bool TextAutosizer::isAutosizingCluster(const RenderBlock* renderer, TextAutosizingClusterInfo* parentClusterInfo)
&gt; 
&gt; It would be nice to have an |ASSERT(isAutosizingContainer(renderer));| at the start of this (or perhaps the 3 is*Descendant methods should each have the assert, since they can be called individually?).

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827791</commentid>
    <comment_count>10</comment_count>
      <attachid>187145</attachid>
    <who name="John Mellor">johnme</who>
    <bug_when>2013-02-07 12:23:43 -0800</bug_when>
    <thetext>Comment on attachment 187145
Patch

Looks good. What do you think Julien?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827818</commentid>
    <comment_count>11</comment_count>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2013-02-07 12:56:18 -0800</bug_when>
    <thetext>Since Julien is OOO for a couple of days, adding Kenneth as a reviewer. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828552</commentid>
    <comment_count>12</comment_count>
      <attachid>187145</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-08 07:25:56 -0800</bug_when>
    <thetext>Comment on attachment 187145
Patch

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

LGTM

&gt; Source/WebCore/rendering/TextAutosizer.cpp:243
&gt; +bool TextAutosizer::isNarrowDescendant(const RenderBlock* renderer, TextAutosizingClusterInfo* parentClusterInfo)
&gt; +{
&gt; +    ASSERT(isAutosizingContainer(renderer));
&gt; +
&gt; +    // Autosizing containers that are significantly narrower than the |blockContainingAllText| of
&gt; +    // their enclosing cluster may be acting as separate columns, hence must be autosized

I like this change, makes the code much more clear

&gt; Source/WebCore/rendering/TextAutosizer.cpp:319
&gt; +    return isNarrowDescendant(renderer, parentClusterInfo)
&gt; +        || isWiderDescendant(renderer, parentClusterInfo)
&gt; +        || isIndependentDescendant(renderer);

Do you know if one of these is much more common that the others? Maybe the order matters</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828566</commentid>
    <comment_count>13</comment_count>
      <attachid>187145</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2013-02-08 07:43:20 -0800</bug_when>
    <thetext>Comment on attachment 187145
Patch

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

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:319
&gt;&gt; +        || isIndependentDescendant(renderer);
&gt; 
&gt; Do you know if one of these is much more common that the others? Maybe the order matters

At the first glance there&apos;re no expensive checks in either of these methods so it shouldn&apos;t matter much, I believe. Then since the first two methods were introduced to fix only certain types of sites, both cases should probably happen less frequent than the style checks combined.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828584</commentid>
    <comment_count>14</comment_count>
      <attachid>187145</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-08 08:09:35 -0800</bug_when>
    <thetext>Comment on attachment 187145
Patch

r=me as this is an improvement</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828600</commentid>
    <comment_count>15</comment_count>
      <attachid>187145</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-08 08:42:28 -0800</bug_when>
    <thetext>Comment on attachment 187145
Patch

Clearing flags on attachment: 187145

Committed r142287: &lt;http://trac.webkit.org/changeset/142287&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828601</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-08 08:42:33 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186918</attachid>
            <date>2013-02-06 14:13:56 -0800</date>
            <delta_ts>2013-02-06 14:16:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109093-20130206221032.patch</filename>
            <type>text/plain</type>
            <size>20761</size>
            <attacher name="Anton Vayvod">avayvod</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxOTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODE4NGQwMjhlOWUzNGZi
NzMzZGQyZGI2ZWRkZTRiOGYwNGJhMDVkMy4uNGI3ZDVjOTcxOWQ1YmNiOTFlMDNiMDc1NWUxYjlj
Y2NlYTc4ZmNhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEzLTAyLTA2ICBBbnRv
biBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9yZz4KKworICAgICAgICBbVGV4dCBBdXRvc2l6
aW5nXSBJbnRyb2R1Y2UgYW4gZW51bSByZXByZXNlbnRpbmcgZGlmZmVyZW50IHR5cGVzIG9mIHJl
bmRlcmVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA5MDkzCisKKyAgICAgICAgUmVmYWN0b3JpbmcgdG8gY3JlYXRlIG1vcmUgZmxleGlibGUgdmVy
c2lvbiBvZiBpc0F1dG9zaXppbmdDbHVzdGVyIHNpbmNlIHRoZXJlJ3JlIG1vcmUgdHlwZXMKKyAg
ICAgICAgb2YgYXV0b3NpemluZyBjbHVzdGVyIG5vdzogbmFycm93ZXIgdGhhbiB0aGUgcGFyZW50
IGNsdXN0ZXIsIHdpZGVyIHRoYW4gdGhlIHBhcmVudCBjbHVzdGVyCisgICAgICAgIGFuZCB0aGUg
b25lIHRoYXQgZG9lc24ndCBkZXBlbmQgb24gdGhlIHBhcmVudCBjbHVzdGVyLgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yaW5nLCBubyB0
ZXN0IGNoYW5nZXMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHA6CisK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OmdldFJlbmRlcmVyVHlwZSk6CisKKyAg
ICAgICAgICAgIEdpdmVuIGEgcmVuZGVyZXIgYW5kIGFuIG9wdGlvbmFsIHBhcmVudCBhdXRvc2l6
aW5nIGNsdXN0ZXIgaW5mbywgZGV0ZXJtaW5lcyB0aGUgdHlwZSBvZgorICAgICAgICAgICAgdGhl
IHJlbmRlcmVyIGFuZCByZXR1cm5zIGl0LgorCisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3Np
emVyOjppc05hcnJvd0Rlc2NlbmRhbnQpOgorCisgICAgICAgICAgICBTZXBhcmF0ZSBjaGVjayBm
b3IgdGhlIGNsdXN0ZXIgdG8gYmUgb2YgdGhlIG5hcnJvdy1kZXNjZW5kYW50IHR5cGUuIFdhcyBh
IHBhcnQgb2YKKyAgICAgICAgICAgIGlzQXV0b3NpemluZ0NsdXN0ZXIoKS4KKworICAgICAgICAo
V2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6aXNXaWRlckRlc2NlbmRhbnQpOgorCisgICAgICAgICAg
ICBTZXBhcmF0ZSBjaGVjayBmb3IgdGhlIGNsdXN0ZXIgdG8gYmUgb2YgdGhlIHdpZGVyLWRlc2Nl
bmRhbnQgdHlwZS4gV2FzIGEgcGFydCBvZgorICAgICAgICAgICAgaXNBdXRvc2l6aW5nQ2x1c3Rl
cigpLgorCisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjppc0luZGVwZW5kZW50QXV0
b3NpemluZ0NsdXN0ZXIpOgorCisgICAgICAgICAgICBUaGUgcGFydCBvZiBpc0F1dG9zaXppbmdD
bHVzdGVyIHRoYXQgZGlkbid0IGRlcGVuZCBvbiB0aGUgcGFyZW50IGNsdXN0ZXIgaW5mb3JtYXRp
b24uCisKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NTdWJ0cmVlKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDbHVzdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDb250YWluZXIpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6Y2x1c3RlclNob3VsZEJlQXV0b3NpemVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6Om1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OmZpbmRGaXJzdFRleHRMZWFmTm90SW5D
bHVzdGVyKToKKworICAgICAgICAgICAgVGhlIG1ldGhvZHMgYWJvdmUgd2VyZSB1cGRhdGVkIHRv
IHVzZSBuZXcgZnVuY3Rpb25zL2FyZ3VtZW50cy4KKworICAgICAgICAqIHJlbmRlcmluZy9UZXh0
QXV0b3NpemVyLmg6CisKKyAgICAgICAgICAgIFVwZGF0ZWQvYWRkZWQgbWV0aG9kIGRlZmluaXRp
b25zLgorCiAyMDEzLTAyLTA1ICBKdWxpZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFtDU1MgR3JpZCBMYXlvdXRdIEdyaWQgaXRlbSdzIGxvZ2ljYWwgaGVp
Z2h0IGlzIG5vdCBwcm9wZXJseSByZWNvbXB1dGVkIGFmdGVyIC13ZWJraXQtZ3JpZC1jb2x1bW4g
LyAtd2Via2l0LWdyaWQtcm93IGNoYW5nZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
QXV0b3NpemVyLmNwcAppbmRleCA5MWRiYTFjZjU1MTdiNzQ5ZDhlMjE3OTk2MDYzNTY2N2Y4ZGVk
ZDMxLi5mN2FhMTQ3ZTQzZTgyNjJjZDE4YTNlODAzYzFlOWNkNzAzNWE5MjUxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwCkBAIC0xMTksMjggKzExOSwyOCBA
QCBib29sIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NTdWJ0cmVlKFJlbmRlck9iamVjdCogbGF5b3V0
Um9vdCkKICAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLT5jb250YWluaW5nQmxvY2soKTsK
IAogICAgIFJlbmRlckJsb2NrKiBjbHVzdGVyID0gY29udGFpbmVyOwotICAgIHdoaWxlIChjbHVz
dGVyICYmICFpc0F1dG9zaXppbmdDbHVzdGVyKGNsdXN0ZXIpKQorICAgIHdoaWxlIChjbHVzdGVy
ICYmIGdldFJlbmRlcmVyVHlwZShjbHVzdGVyKSAhPSBJbmRlcGVuZGVudEF1dG9zaXppbmdDbHVz
dGVyKQogICAgICAgICBjbHVzdGVyID0gY2x1c3Rlci0+Y29udGFpbmluZ0Jsb2NrKCk7CiAKICAg
ICBUZXh0QXV0b3NpemluZ0NsdXN0ZXJJbmZvIGNsdXN0ZXJJbmZvKGNsdXN0ZXIpOwotICAgIHBy
b2Nlc3NDbHVzdGVyKCZjbHVzdGVySW5mbywgY29udGFpbmVyLCBsYXlvdXRSb290LCB3aW5kb3dJ
bmZvKTsKKyAgICBwcm9jZXNzQ2x1c3RlcihjbHVzdGVySW5mbywgY29udGFpbmVyLCBsYXlvdXRS
b290LCB3aW5kb3dJbmZvKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBUZXh0QXV0b3Np
emVyOjpwcm9jZXNzQ2x1c3RlcihUZXh0QXV0b3NpemluZ0NsdXN0ZXJJbmZvKiBjbHVzdGVySW5m
bywgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29u
c3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJiB3aW5kb3dJbmZvKQordm9pZCBUZXh0QXV0b3Np
emVyOjpwcm9jZXNzQ2x1c3RlcihUZXh0QXV0b3NpemluZ0NsdXN0ZXJJbmZvJiBjbHVzdGVySW5m
bywgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29u
c3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJiB3aW5kb3dJbmZvKQogewogICAgIC8vIE1hbnkg
cGFnZXMgc2V0IGEgbWF4LXdpZHRoIG9uIHRoZWlyIGNvbnRlbnQuIFNvIGVzcGVjaWFsbHkgZm9y
IHRoZQogICAgIC8vIFJlbmRlclZpZXcsIGluc3RlYWQgb2YganVzdCB0YWtpbmcgdGhlIHdpZHRo
IG9mIHxjbHVzdGVyfCB3ZSBmaW5kCiAgICAgLy8gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Ig
b2YgdGhlIGZpcnN0IGFuZCBsYXN0IGRlc2NlbmRhbnQgdGV4dCBub2RlIG9mCiAgICAgLy8gdGhl
IGNsdXN0ZXIgKGkuZS4gdGhlIGRlZXBlc3Qgd3JhcHBlciBibG9jayB0aGF0IGNvbnRhaW5zIGFs
bCB0aGUgdGV4dCksCiAgICAgLy8gYW5kIHVzZSBpdHMgd2lkdGggaW5zdGVhZC4KLSAgICBjbHVz
dGVySW5mby0+YmxvY2tDb250YWluaW5nQWxsVGV4dCA9IGZpbmREZWVwZXN0QmxvY2tDb250YWlu
aW5nQWxsVGV4dChjbHVzdGVySW5mby0+cm9vdCk7Ci0gICAgZmxvYXQgdGV4dFdpZHRoID0gY2x1
c3RlckluZm8tPmJsb2NrQ29udGFpbmluZ0FsbFRleHQtPmNvbnRlbnRMb2dpY2FsV2lkdGgoKTsK
KyAgICBjbHVzdGVySW5mby5ibG9ja0NvbnRhaW5pbmdBbGxUZXh0ID0gZmluZERlZXBlc3RCbG9j
a0NvbnRhaW5pbmdBbGxUZXh0KGNsdXN0ZXJJbmZvLnJvb3QpOworICAgIGZsb2F0IHRleHRXaWR0
aCA9IGNsdXN0ZXJJbmZvLmJsb2NrQ29udGFpbmluZ0FsbFRleHQtPmNvbnRlbnRMb2dpY2FsV2lk
dGgoKTsKIAogICAgIGZsb2F0IG11bHRpcGxpZXIgPSAxOwogICAgIGlmIChjbHVzdGVyU2hvdWxk
QmVBdXRvc2l6ZWQoY2x1c3RlckluZm8sIHRleHRXaWR0aCkpIHsKLSAgICAgICAgaW50IGxvZ2lj
YWxXaW5kb3dXaWR0aCA9IGNsdXN0ZXJJbmZvLT5yb290LT5pc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpID8gd2luZG93SW5mby53aW5kb3dTaXplLndpZHRoKCkgOiB3aW5kb3dJbmZvLndpbmRvd1Np
emUuaGVpZ2h0KCk7Ci0gICAgICAgIGludCBsb2dpY2FsTGF5b3V0V2lkdGggPSBjbHVzdGVySW5m
by0+cm9vdC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHdpbmRvd0luZm8ubWluTGF5b3V0
U2l6ZS53aWR0aCgpIDogd2luZG93SW5mby5taW5MYXlvdXRTaXplLmhlaWdodCgpOworICAgICAg
ICBpbnQgbG9naWNhbFdpbmRvd1dpZHRoID0gY2x1c3RlckluZm8ucm9vdC0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSA/IHdpbmRvd0luZm8ud2luZG93U2l6ZS53aWR0aCgpIDogd2luZG93SW5m
by53aW5kb3dTaXplLmhlaWdodCgpOworICAgICAgICBpbnQgbG9naWNhbExheW91dFdpZHRoID0g
Y2x1c3RlckluZm8ucm9vdC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHdpbmRvd0luZm8u
bWluTGF5b3V0U2l6ZS53aWR0aCgpIDogd2luZG93SW5mby5taW5MYXlvdXRTaXplLmhlaWdodCgp
OwogICAgICAgICAvLyBJZ25vcmUgYm94IHdpZHRoIGluIGV4Y2VzcyBvZiB0aGUgbGF5b3V0IHdp
ZHRoLCB0byBhdm9pZCBleHRyZW1lIG11bHRpcGxpZXJzLgogICAgICAgICBmbG9hdCBsb2dpY2Fs
Q2x1c3RlcldpZHRoID0gc3RkOjptaW48ZmxvYXQ+KHRleHRXaWR0aCwgbG9naWNhbExheW91dFdp
ZHRoKTsKIApAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc0Ns
dXN0ZXIoVGV4dEF1dG9zaXppbmdDbHVzdGVySW5mbyogY2x1c3RlckluZm8sIFJlbmRlCiAgICAg
cHJvY2Vzc0NvbnRhaW5lcihtdWx0aXBsaWVyLCBjb250YWluZXIsIGNsdXN0ZXJJbmZvLCBzdWJ0
cmVlUm9vdCwgd2luZG93SW5mbyk7CiB9CiAKLXZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc0Nv
bnRhaW5lcihmbG9hdCBtdWx0aXBsaWVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBUZXh0QXV0
b3NpemluZ0NsdXN0ZXJJbmZvKiBjbHVzdGVySW5mbywgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9v
dCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJiB3aW5kb3dJbmZvKQordm9pZCBUZXh0
QXV0b3NpemVyOjpwcm9jZXNzQ29udGFpbmVyKGZsb2F0IG11bHRpcGxpZXIsIFJlbmRlckJsb2Nr
KiBjb250YWluZXIsIFRleHRBdXRvc2l6aW5nQ2x1c3RlckluZm8mIGNsdXN0ZXJJbmZvLCBSZW5k
ZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mIHdp
bmRvd0luZm8pCiB7CiAgICAgQVNTRVJUKGlzQXV0b3NpemluZ0NvbnRhaW5lcihjb250YWluZXIp
KTsKIApAQCAtMTY2LDEzICsxNjYsMjYgQEAgdm9pZCBUZXh0QXV0b3NpemVyOjpwcm9jZXNzQ29u
dGFpbmVyKGZsb2F0IG11bHRpcGxpZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIFQKICAgICAg
ICAgICAgICAgICBzZXRNdWx0aXBsaWVyKGRlc2NlbmRhbnQtPnBhcmVudCgpLCBsb2NhbE11bHRp
cGxpZXIpOyAvLyBQYXJlbnQgZG9lcyBsaW5lIHNwYWNpbmcuCiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAvLyBGSVhNRTogSW5jcmVhc2UgbGlzdCBtYXJrZXIgc2l6ZSBwcm9wb3J0aW9uYXRl
bHkuCi0gICAgICAgIH0gZWxzZSBpZiAoaXNBdXRvc2l6aW5nQ29udGFpbmVyKGRlc2NlbmRhbnQp
KSB7Ci0gICAgICAgICAgICBSZW5kZXJCbG9jayogZGVzY2VuZGFudEJsb2NrID0gdG9SZW5kZXJC
bG9jayhkZXNjZW5kYW50KTsKLSAgICAgICAgICAgIGlmIChpc0F1dG9zaXppbmdDbHVzdGVyKGRl
c2NlbmRhbnRCbG9jaywgY2x1c3RlckluZm8pKSB7Ci0gICAgICAgICAgICAgICAgVGV4dEF1dG9z
aXppbmdDbHVzdGVySW5mbyBkZXNjZW5kYW50Q2x1c3RlckluZm8oZGVzY2VuZGFudEJsb2NrKTsK
LSAgICAgICAgICAgICAgICBwcm9jZXNzQ2x1c3RlcigmZGVzY2VuZGFudENsdXN0ZXJJbmZvLCBk
ZXNjZW5kYW50QmxvY2ssIGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7Ci0gICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICBwcm9jZXNzQ29udGFpbmVyKG11bHRpcGxpZXIsIGRl
c2NlbmRhbnRCbG9jaywgY2x1c3RlckluZm8sIGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzd2l0Y2ggKGdldFJlbmRlcmVyVHlwZShk
ZXNjZW5kYW50LCAmY2x1c3RlckluZm8pKSB7CisgICAgICAgICAgICBjYXNlIEF1dG9zaXppbmdD
b250YWluZXI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBSZW5kZXJC
bG9jayogZGVzY2VuZGFudEJsb2NrID0gdG9SZW5kZXJCbG9jayhkZXNjZW5kYW50KTsKKyAgICAg
ICAgICAgICAgICAgICAgcHJvY2Vzc0NvbnRhaW5lcihtdWx0aXBsaWVyLCBkZXNjZW5kYW50Qmxv
Y2ssIGNsdXN0ZXJJbmZvLCBkZXNjZW5kYW50QmxvY2ssIHdpbmRvd0luZm8pOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIE5h
cnJvd0Rlc2NlbmRhbnQ6CisgICAgICAgICAgICBjYXNlIFdpZGVyRGVzY2VuZGFudDoKKyAgICAg
ICAgICAgIGNhc2UgSW5kZXBlbmRlbnRBdXRvc2l6aW5nQ2x1c3RlcjoKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBkZXNjZW5kYW50QmxvY2sgPSB0
b1JlbmRlckJsb2NrKGRlc2NlbmRhbnQpOworICAgICAgICAgICAgICAgICAgICBUZXh0QXV0b3Np
emluZ0NsdXN0ZXJJbmZvIGRlc2NlbmRhbnRDbHVzdGVySW5mbyhkZXNjZW5kYW50QmxvY2spOwor
ICAgICAgICAgICAgICAgICAgICBwcm9jZXNzQ2x1c3RlcihkZXNjZW5kYW50Q2x1c3RlckluZm8s
IGRlc2NlbmRhbnRCbG9jaywgZGVzY2VuZGFudEJsb2NrLCB3aW5kb3dJbmZvKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBO
b25lOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgICAgIGRlc2NlbmRhbnQgPSBuZXh0SW5QcmVPcmRlclNraXBwaW5nRGVzY2VuZGFudHNPZkNv
bnRhaW5lcnMoZGVzY2VuZGFudCwgc3VidHJlZVJvb3QpOwogICAgIH0KQEAgLTIxMywyOSArMjI2
LDcgQEAgZmxvYXQgVGV4dEF1dG9zaXplcjo6Y29tcHV0ZUF1dG9zaXplZEZvbnRTaXplKGZsb2F0
IHNwZWNpZmllZFNpemUsIGZsb2F0IG11bHRpcGwKICAgICByZXR1cm4gY29tcHV0ZWRTaXplOwog
fQogCi1ib29sIFRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NvbnRhaW5lcihjb25zdCBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyKQotewotICAgIC8vICJBdXRvc2l6aW5nIGNvbnRhaW5lcnMiIGFy
ZSB0aGUgc21hbGxlc3QgdW5pdCBmb3Igd2hpY2ggd2UgY2FuCi0gICAgLy8gZW5hYmxlL2Rpc2Fi
bGUgVGV4dCBBdXRvc2l6aW5nLgotICAgIC8vIC0gTXVzdCBub3QgYmUgaW5saW5lLCBhcyBkaWZm
ZXJlbnQgbXVsdGlwbGllcnMgb24gb25lIGxpbmUgbG9va3MgdGVycmlibGUuCi0gICAgLy8gICBF
eGNlcHRpb25zIGFyZSBpbmxpbmUtYmxvY2sgYW5kIGFsaWtlIGVsZW1lbnRzIChpbmxpbmUtdGFi
bGUsIC13ZWJraXQtaW5saW5lLSopLAotICAgIC8vICAgYXMgdGhleSBvZnRlbiBjb250YWluIGVu
dGlyZSBtdWx0aS1saW5lIGNvbHVtbnMgb2YgdGV4dC4KLSAgICAvLyAtIE11c3Qgbm90IGJlIGxp
c3QgaXRlbXMsIGFzIGl0ZW1zIGluIHRoZSBzYW1lIGxpc3Qgc2hvdWxkIGxvb2sgY29uc2lzdGVu
dCAoKikuCi0gICAgLy8gLSBNdXN0IG5vdCBiZSBub3JtYWwgbGlzdCBpdGVtcywgYXMgaXRlbXMg
aW4gdGhlIHNhbWUgbGlzdCBzaG91bGQgbG9vawotICAgIC8vICAgY29uc2lzdGVudCwgdW5sZXNz
IHRoZXkgYXJlIGZsb2F0aW5nIG9yIHBvc2l0aW9uOmFic29sdXRlL2ZpeGVkLgotICAgIGlmICgh
cmVuZGVyZXItPmlzUmVuZGVyQmxvY2soKSB8fCAocmVuZGVyZXItPmlzSW5saW5lKCkgJiYgIXJl
bmRlcmVyLT5zdHlsZSgpLT5pc0Rpc3BsYXlSZXBsYWNlZFR5cGUoKSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAocmVuZGVyZXItPmlzTGlzdEl0ZW0oKSkKLSAgICAgICAgcmV0dXJu
IHJlbmRlcmVyLT5pc0Zsb2F0aW5nKCkgfHwgcmVuZGVyZXItPmlzT3V0T2ZGbG93UG9zaXRpb25l
ZCgpOwotICAgIC8vIEF2b2lkIGNyZWF0aW5nIGNvbnRhaW5lcnMgZm9yIHRleHQgd2l0aGluIHRl
eHQgY29udHJvbHMsIGJ1dHRvbnMsIG9yIDxzZWxlY3Q+IGJ1dHRvbnMuCi0gICAgTm9kZSogcGFy
ZW50Tm9kZSA9IHJlbmRlcmVyLT5wYXJlbnQoKSA/IHJlbmRlcmVyLT5wYXJlbnQoKS0+Z2VuZXJh
dGluZ05vZGUoKSA6IDA7Ci0gICAgaWYgKHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS0+aXNFbGVt
ZW50Tm9kZSgpICYmIGZvcm1JbnB1dFRhZ3MoKS5jb250YWlucyh0b0VsZW1lbnQocGFyZW50Tm9k
ZSktPnRhZ1FOYW1lKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBUZXh0QXV0b3NpemVyOjppc0F1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJl
bmRlckJsb2NrKiByZW5kZXJlciwgVGV4dEF1dG9zaXppbmdDbHVzdGVySW5mbyogcGFyZW50Q2x1
c3RlckluZm8pCitUZXh0QXV0b3NpemVyOjpSZW5kZXJlclR5cGUgVGV4dEF1dG9zaXplcjo6Z2V0
UmVuZGVyZXJUeXBlKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFRleHRBdXRvc2l6aW5n
Q2x1c3RlckluZm8qIHBhcmVudENsdXN0ZXJJbmZvKQogewogICAgIC8vICJBdXRvc2l6aW5nIGNs
dXN0ZXJzIiBhcmUgc3BlY2lhbCBhdXRvc2l6aW5nIGNvbnRhaW5lcnMgd2l0aGluIHdoaWNoIHdl
CiAgICAgLy8gd2FudCB0byBlbmZvcmNlIGEgdW5pZm9ybSB0ZXh0IHNpemUgbXVsdGlwbGllciwg
aW4gdGhlIGhvcGVzIG9mIG1ha2luZwpAQCAtMjU5LDI1ICsyNTAsNzQgQEAgYm9vbCBUZXh0QXV0
b3NpemVyOjppc0F1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlciwg
VGV4dEF1dG9zaXoKICAgICAvLyBBZGRpdGlvbmFsbHksIGFueSBjb250YWluZXJzIHRoYXQgYXJl
IHdpZGVyIG9yIGF0IGxlYXN0IDIwMHB4IG5hcnJvd2VyIHRoYW4KICAgICAvLyB0aGUgfGJsb2Nr
Q29udGFpbmluZ0FsbFRleHR8IG9mIHRoZWlyIGVuY2xvc2luZyBjbHVzdGVyIGFsc28gYmVjb21l
IGNsdXN0ZXJzLAogICAgIC8vIHNpbmNlIHRoZXkgbmVlZCBzcGVjaWFsIHRyZWF0bWVudCBkdWUg
dG8gdGhlaXIgd2lkdGguCi0gICAgQVNTRVJUKGlzQXV0b3NpemluZ0NvbnRhaW5lcihyZW5kZXJl
cikpOwotCi0gICAgaWYgKHBhcmVudENsdXN0ZXJJbmZvLT5ibG9ja0NvbnRhaW5pbmdBbGxUZXh0
KSB7Ci0gICAgICAgIGZsb2F0IGNvbnRlbnRXaWR0aCA9IHJlbmRlcmVyLT5jb250ZW50TG9naWNh
bFdpZHRoKCk7Ci0gICAgICAgIGZsb2F0IGNsdXN0ZXJUZXh0V2lkdGggPSBwYXJlbnRDbHVzdGVy
SW5mby0+YmxvY2tDb250YWluaW5nQWxsVGV4dC0+Y29udGVudExvZ2ljYWxXaWR0aCgpOwotICAg
ICAgICBpZiAoY29udGVudFdpZHRoID4gY2x1c3RlclRleHRXaWR0aCkKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgICAgIC8vIFRoZSB1cHBlciBsaW1pdCBvbiBob3cgbWFueSBwaXhl
bHMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgcmVuZGVyZXIgd2lkdGgKLSAgICAgICAgLy8g
YW5kIGl0cyBwYXJlbnQgY2x1c3RlciB3aWR0aCBjYW4gZXhjZWVkIHRoZSBjdXJyZW50IG1heGlt
dW0gZGlmZmVyZW5jZSBieQotICAgICAgICAvLyBiZWZvcmUgdGhlIG9iamVjdCBpcyBjb25zaWRl
cmVkIHRvIGJlIGEgc2VwYXJhdGUgYXV0b3NpemluZyBjbHVzdGVyLgotICAgICAgICBjb25zdCBm
bG9hdCBkaWZmZXJlbmNlRnJvbU1heFdpZHRoRGlmZmVyZW5jZSA9IDUwOwotCi0gICAgICAgIGZs
b2F0IHdpZHRoRGlmZmVyZW5jZSA9IGNsdXN0ZXJUZXh0V2lkdGggLSBjb250ZW50V2lkdGg7Ci0g
ICAgICAgIGlmICh3aWR0aERpZmZlcmVuY2UgLSBwYXJlbnRDbHVzdGVySW5mby0+bWF4QWxsb3dl
ZERpZmZlcmVuY2VGcm9tVGV4dFdpZHRoID4gZGlmZmVyZW5jZUZyb21NYXhXaWR0aERpZmZlcmVu
Y2UpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcGFyZW50Q2x1c3RlckluZm8t
Pm1heEFsbG93ZWREaWZmZXJlbmNlRnJvbVRleHRXaWR0aCA9IHN0ZDo6bWF4KHdpZHRoRGlmZmVy
ZW5jZSwgcGFyZW50Q2x1c3RlckluZm8tPm1heEFsbG93ZWREaWZmZXJlbmNlRnJvbVRleHRXaWR0
aCk7CisKKyAgICBpZiAoIWlzQXV0b3NpemluZ0NvbnRhaW5lcihyZW5kZXJlcikpCisgICAgICAg
IHJldHVybiBOb25lOworCisgICAgLy8gQSBjb250YWluZXIgaXMgYWx3YXlzIGEgUmVuZGVyQmxv
Y2suCisgICAgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrID0gdG9SZW5kZXJCbG9jayhyZW5kZXJl
cik7CisKKyAgICBpZiAocGFyZW50Q2x1c3RlckluZm8gJiYgcGFyZW50Q2x1c3RlckluZm8tPmJs
b2NrQ29udGFpbmluZ0FsbFRleHQpIHsKKyAgICAgICAgaWYgKGlzTmFycm93RGVzY2VuZGFudChi
bG9jaywgKnBhcmVudENsdXN0ZXJJbmZvKSkKKyAgICAgICAgICAgIHJldHVybiBOYXJyb3dEZXNj
ZW5kYW50OworICAgICAgICBpZiAoaXNXaWRlckRlc2NlbmRhbnQoYmxvY2ssICpwYXJlbnRDbHVz
dGVySW5mbykpCisgICAgICAgICAgICByZXR1cm4gV2lkZXJEZXNjZW5kYW50OwogICAgIH0KIAor
ICAgIGlmIChpc0luZGVwZW5kZW50QXV0b3NpemluZ0NsdXN0ZXIoYmxvY2spKQorICAgICAgICBy
ZXR1cm4gSW5kZXBlbmRlbnRBdXRvc2l6aW5nQ2x1c3RlcjsKKworICAgIHJldHVybiBBdXRvc2l6
aW5nQ29udGFpbmVyOworfQorCitib29sIFRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NvbnRh
aW5lcihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIC8vICJBdXRvc2l6aW5n
IGNvbnRhaW5lcnMiIGFyZSB0aGUgc21hbGxlc3QgdW5pdCBmb3Igd2hpY2ggd2UgY2FuCisgICAg
Ly8gZW5hYmxlL2Rpc2FibGUgVGV4dCBBdXRvc2l6aW5nLgorICAgIC8vIC0gTXVzdCBub3QgYmUg
aW5saW5lLCBhcyBkaWZmZXJlbnQgbXVsdGlwbGllcnMgb24gb25lIGxpbmUgbG9va3MgdGVycmli
bGUuCisgICAgLy8gICBFeGNlcHRpb25zIGFyZSBpbmxpbmUtYmxvY2sgYW5kIGFsaWtlIGVsZW1l
bnRzIChpbmxpbmUtdGFibGUsIC13ZWJraXQtaW5saW5lLSopLAorICAgIC8vICAgYXMgdGhleSBv
ZnRlbiBjb250YWluIGVudGlyZSBtdWx0aS1saW5lIGNvbHVtbnMgb2YgdGV4dC4KKyAgICAvLyAt
IE11c3Qgbm90IGJlIGxpc3QgaXRlbXMsIGFzIGl0ZW1zIGluIHRoZSBzYW1lIGxpc3Qgc2hvdWxk
IGxvb2sgY29uc2lzdGVudCAoKikuCisgICAgLy8gLSBNdXN0IG5vdCBiZSBub3JtYWwgbGlzdCBp
dGVtcywgYXMgaXRlbXMgaW4gdGhlIHNhbWUgbGlzdCBzaG91bGQgbG9vaworICAgIC8vICAgY29u
c2lzdGVudCwgdW5sZXNzIHRoZXkgYXJlIGZsb2F0aW5nIG9yIHBvc2l0aW9uOmFic29sdXRlL2Zp
eGVkLgorICAgIGlmICghcmVuZGVyZXItPmlzUmVuZGVyQmxvY2soKSB8fCAocmVuZGVyZXItPmlz
SW5saW5lKCkgJiYgIXJlbmRlcmVyLT5zdHlsZSgpLT5pc0Rpc3BsYXlSZXBsYWNlZFR5cGUoKSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAocmVuZGVyZXItPmlzTGlzdEl0ZW0oKSkK
KyAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5pc0Zsb2F0aW5nKCkgfHwgcmVuZGVyZXItPmlzT3V0
T2ZGbG93UG9zaXRpb25lZCgpOworICAgIC8vIEF2b2lkIGNyZWF0aW5nIGNvbnRhaW5lcnMgZm9y
IHRleHQgd2l0aGluIHRleHQgY29udHJvbHMsIGJ1dHRvbnMsIG9yIDxzZWxlY3Q+IGJ1dHRvbnMu
CisgICAgTm9kZSogcGFyZW50Tm9kZSA9IHJlbmRlcmVyLT5wYXJlbnQoKSA/IHJlbmRlcmVyLT5w
YXJlbnQoKS0+Z2VuZXJhdGluZ05vZGUoKSA6IDA7CisgICAgaWYgKHBhcmVudE5vZGUgJiYgcGFy
ZW50Tm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIGZvcm1JbnB1dFRhZ3MoKS5jb250YWlucyh0b0Vs
ZW1lbnQocGFyZW50Tm9kZSktPnRhZ1FOYW1lKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUZXh0QXV0b3NpemVyOjppc05hcnJvd0Rlc2Nl
bmRhbnQoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyLCBUZXh0QXV0b3NpemluZ0NsdXN0ZXJJ
bmZvJiBwYXJlbnRDbHVzdGVySW5mbykKK3sKKyAgICBmbG9hdCBjb250ZW50V2lkdGggPSByZW5k
ZXJlci0+Y29udGVudExvZ2ljYWxXaWR0aCgpOworICAgIGZsb2F0IGNsdXN0ZXJUZXh0V2lkdGgg
PSBwYXJlbnRDbHVzdGVySW5mby5ibG9ja0NvbnRhaW5pbmdBbGxUZXh0LT5jb250ZW50TG9naWNh
bFdpZHRoKCk7CisKKyAgICAvLyBUaGUgdXBwZXIgbGltaXQgb24gaG93IG1hbnkgcGl4ZWxzIHRo
ZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHJlbmRlcmVyIHdpZHRoCisgICAgLy8gYW5kIGl0cyBw
YXJlbnQgY2x1c3RlciB3aWR0aCBjYW4gZXhjZWVkIHRoZSBjdXJyZW50IG1heGltdW0gZGlmZmVy
ZW5jZSBieQorICAgIC8vIGJlZm9yZSB0aGUgb2JqZWN0IGlzIGNvbnNpZGVyZWQgdG8gYmUgYSBz
ZXBhcmF0ZSBhdXRvc2l6aW5nIGNsdXN0ZXIuCisgICAgY29uc3QgZmxvYXQgZGlmZmVyZW5jZUZy
b21NYXhXaWR0aERpZmZlcmVuY2UgPSA1MDsKKworICAgIGZsb2F0IHdpZHRoRGlmZmVyZW5jZSA9
IGNsdXN0ZXJUZXh0V2lkdGggLSBjb250ZW50V2lkdGg7CisgICAgaWYgKHdpZHRoRGlmZmVyZW5j
ZSAtIHBhcmVudENsdXN0ZXJJbmZvLm1heEFsbG93ZWREaWZmZXJlbmNlRnJvbVRleHRXaWR0aCA+
IGRpZmZlcmVuY2VGcm9tTWF4V2lkdGhEaWZmZXJlbmNlKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBwYXJlbnRDbHVzdGVySW5mby5tYXhBbGxvd2VkRGlmZmVyZW5jZUZyb21UZXh0V2lkdGgg
PSBzdGQ6Om1heCh3aWR0aERpZmZlcmVuY2UsIHBhcmVudENsdXN0ZXJJbmZvLm1heEFsbG93ZWRE
aWZmZXJlbmNlRnJvbVRleHRXaWR0aCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRl
eHRBdXRvc2l6ZXI6OmlzV2lkZXJEZXNjZW5kYW50KGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJl
ciwgY29uc3QgVGV4dEF1dG9zaXppbmdDbHVzdGVySW5mbyYgcGFyZW50Q2x1c3RlckluZm8pCit7
CisgICAgZmxvYXQgY29udGVudFdpZHRoID0gcmVuZGVyZXItPmNvbnRlbnRMb2dpY2FsV2lkdGgo
KTsKKyAgICBmbG9hdCBjbHVzdGVyVGV4dFdpZHRoID0gcGFyZW50Q2x1c3RlckluZm8uYmxvY2tD
b250YWluaW5nQWxsVGV4dC0+Y29udGVudExvZ2ljYWxXaWR0aCgpOworICAgIHJldHVybiBjb250
ZW50V2lkdGggPiBjbHVzdGVyVGV4dFdpZHRoOworfQorCitib29sIFRleHRBdXRvc2l6ZXI6Omlz
SW5kZXBlbmRlbnRBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIp
Cit7CiAgICAgcmV0dXJuIHJlbmRlcmVyLT5pc1JlbmRlclZpZXcoKQogICAgICAgICB8fCByZW5k
ZXJlci0+aXNGbG9hdGluZygpCiAgICAgICAgIHx8IHJlbmRlcmVyLT5pc091dE9mRmxvd1Bvc2l0
aW9uZWQoKQpAQCAtMjkyLDEyICszMzIsNiBAQCBib29sIFRleHRBdXRvc2l6ZXI6OmlzQXV0b3Np
emluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyLCBUZXh0QXV0b3NpegogICAg
IC8vIGNvbnRhaW5lcnMsIGFuZCBwcm9iYWJseSBmbGV4Ym94ZXMuLi4KIH0KIAotYm9vbCBUZXh0
QXV0b3NpemVyOjppc0F1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0
KQotewotICAgIFRleHRBdXRvc2l6aW5nQ2x1c3RlckluZm8gZW1wdHlDbHVzdGVySW5mbygwKTsK
LSAgICByZXR1cm4gaXNBdXRvc2l6aW5nQ29udGFpbmVyKG9iamVjdCkgJiYgaXNBdXRvc2l6aW5n
Q2x1c3Rlcih0b1JlbmRlckJsb2NrKG9iamVjdCksICZlbXB0eUNsdXN0ZXJJbmZvKTsKLX0KLQog
Ym9vbCBUZXh0QXV0b3NpemVyOjpjb250YWluZXJTaG91bGRCZUF1dG9zaXplZChjb25zdCBSZW5k
ZXJCbG9jayogY29udGFpbmVyKQogewogICAgIGlmIChjb250YWluZXJDb250YWluc09uZU9mVGFn
cyhjb250YWluZXIsIGZvcm1JbnB1dFRhZ3MoKSkpCkBAIC0zODksNyArNDIzLDcgQEAgYm9vbCBU
ZXh0QXV0b3NpemVyOjpjb250ZW50SGVpZ2h0SXNDb25zdHJhaW5lZChjb25zdCBSZW5kZXJCbG9j
ayogY29udGFpbmVyKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBUZXh0QXV0b3NpemVy
OjpjbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQoVGV4dEF1dG9zaXppbmdDbHVzdGVySW5mbyogY2x1
c3RlckluZm8sIGZsb2F0IGJsb2NrV2lkdGgpCitib29sIFRleHRBdXRvc2l6ZXI6OmNsdXN0ZXJT
aG91bGRCZUF1dG9zaXplZChUZXh0QXV0b3NpemluZ0NsdXN0ZXJJbmZvJiBjbHVzdGVySW5mbywg
ZmxvYXQgYmxvY2tXaWR0aCkKIHsKICAgICAvLyBEb24ndCBhdXRvc2l6ZSBjbHVzdGVycyB0aGF0
IGNvbnRhaW4gbGVzcyB0aGFuIDQgbGluZXMgb2YgdGV4dCAoaW4KICAgICAvLyBwcmFjdGljZSBs
ZXNzIGxpbmVzIGFyZSByZXF1aXJlZCwgc2luY2UgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgK
QEAgLTQwNCwyNCArNDM4LDI0IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6Y2x1c3RlclNob3VsZEJl
QXV0b3NpemVkKFRleHRBdXRvc2l6aW5nQ2x1c3RlckluZm8qIGNsdXN0ZXJJCiAgICAgY29uc3Qg
ZmxvYXQgbWluTGluZXNPZlRleHQgPSA0OwogICAgIGZsb2F0IG1pblRleHRXaWR0aCA9IGJsb2Nr
V2lkdGggKiBtaW5MaW5lc09mVGV4dDsKICAgICBmbG9hdCB0ZXh0V2lkdGggPSAwOwotICAgIG1l
YXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNsdXN0ZXJJbmZvLT5ibG9ja0NvbnRhaW5pbmdBbGxU
ZXh0LCBjbHVzdGVySW5mbywgbWluVGV4dFdpZHRoLCB0ZXh0V2lkdGgpOworICAgIG1lYXN1cmVE
ZXNjZW5kYW50VGV4dFdpZHRoKGNsdXN0ZXJJbmZvLmJsb2NrQ29udGFpbmluZ0FsbFRleHQsIGNs
dXN0ZXJJbmZvLCBtaW5UZXh0V2lkdGgsIHRleHRXaWR0aCk7CiAgICAgaWYgKHRleHRXaWR0aCA+
PSBtaW5UZXh0V2lkdGgpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotdm9pZCBUZXh0QXV0b3NpemVyOjptZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChjb25z
dCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBUZXh0QXV0b3NpemluZ0NsdXN0ZXJJbmZvKiBjbHVz
dGVySW5mbywgZmxvYXQgbWluVGV4dFdpZHRoLCBmbG9hdCYgdGV4dFdpZHRoKQordm9pZCBUZXh0
QXV0b3NpemVyOjptZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChjb25zdCBSZW5kZXJCbG9jayog
Y29udGFpbmVyLCBUZXh0QXV0b3NpemluZ0NsdXN0ZXJJbmZvJiBjbHVzdGVySW5mbywgZmxvYXQg
bWluVGV4dFdpZHRoLCBmbG9hdCYgdGV4dFdpZHRoKQogewogICAgIGJvb2wgc2tpcExvY2FsVGV4
dCA9ICFjb250YWluZXJTaG91bGRCZUF1dG9zaXplZChjb250YWluZXIpOwogCiAgICAgUmVuZGVy
T2JqZWN0KiBkZXNjZW5kYW50ID0gbmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2NlbmRhbnRzT2ZD
b250YWluZXJzKGNvbnRhaW5lciwgY29udGFpbmVyKTsKICAgICB3aGlsZSAoZGVzY2VuZGFudCkg
ewotICAgICAgICBpZiAoIXNraXBMb2NhbFRleHQgJiYgZGVzY2VuZGFudC0+aXNUZXh0KCkpIHsK
KyAgICAgICAgaWYgKCFza2lwTG9jYWxUZXh0ICYmIGRlc2NlbmRhbnQtPmlzVGV4dCgpKQogICAg
ICAgICAgICAgdGV4dFdpZHRoICs9IHRvUmVuZGVyVGV4dChkZXNjZW5kYW50KS0+cmVuZGVyZWRU
ZXh0TGVuZ3RoKCkgKiBkZXNjZW5kYW50LT5zdHlsZSgpLT5zcGVjaWZpZWRGb250U2l6ZSgpOwot
ICAgICAgICB9IGVsc2UgaWYgKGlzQXV0b3NpemluZ0NvbnRhaW5lcihkZXNjZW5kYW50KSkgewot
ICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGRlc2NlbmRhbnRCbG9jayA9IHRvUmVuZGVyQmxvY2so
ZGVzY2VuZGFudCk7Ci0gICAgICAgICAgICBpZiAoIWlzQXV0b3NpemluZ0NsdXN0ZXIoZGVzY2Vu
ZGFudEJsb2NrLCBjbHVzdGVySW5mbykpCi0gICAgICAgICAgICAgICAgbWVhc3VyZURlc2NlbmRh
bnRUZXh0V2lkdGgoZGVzY2VuZGFudEJsb2NrLCBjbHVzdGVySW5mbywgbWluVGV4dFdpZHRoLCB0
ZXh0V2lkdGgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFJlbmRlcmVyVHlwZSByZW5k
ZXJlclR5cGUoZ2V0UmVuZGVyZXJUeXBlKGRlc2NlbmRhbnQsICZjbHVzdGVySW5mbykpOworICAg
ICAgICAgICAgaWYgKHJlbmRlcmVyVHlwZSA9PSBBdXRvc2l6aW5nQ29udGFpbmVyKQorICAgICAg
ICAgICAgICAgIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKHRvUmVuZGVyQmxvY2soZGVzY2Vu
ZGFudCksIGNsdXN0ZXJJbmZvLCBtaW5UZXh0V2lkdGgsIHRleHRXaWR0aCk7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKHRleHRXaWR0aCA+PSBtaW5UZXh0V2lkdGgpCiAgICAgICAgICAgICByZXR1
cm47CkBAIC00ODYsNyArNTIwLDcgQEAgY29uc3QgUmVuZGVyT2JqZWN0KiBUZXh0QXV0b3NpemVy
OjpmaW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3Rlcihjb25zdCBSZW5kZXJPYmoKICAgICArK2Rl
cHRoOwogICAgIGNvbnN0IFJlbmRlck9iamVjdCogY2hpbGQgPSAoZGlyZWN0aW9uID09IEZpcnN0
VG9MYXN0KSA/IHBhcmVudC0+Zmlyc3RDaGlsZCgpIDogcGFyZW50LT5sYXN0Q2hpbGQoKTsKICAg
ICB3aGlsZSAoY2hpbGQpIHsKLSAgICAgICAgaWYgKCFpc0F1dG9zaXppbmdDbHVzdGVyKGNoaWxk
KSkgeworICAgICAgICBpZiAoZ2V0UmVuZGVyZXJUeXBlKGNoaWxkKSAhPSBJbmRlcGVuZGVudEF1
dG9zaXppbmdDbHVzdGVyKSB7CiAgICAgICAgICAgICBjb25zdCBSZW5kZXJPYmplY3QqIGxlYWYg
PSBmaW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3RlcihjaGlsZCwgZGVwdGgsIGRpcmVjdGlvbik7
CiAgICAgICAgICAgICBpZiAobGVhZikKICAgICAgICAgICAgICAgICByZXR1cm4gbGVhZjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5oCmluZGV4IDE2NmUwNTZkMTFiZDNm
N2JkN2U2MmJlNWUyNTZkZDJlYjNiODRkMzQuLjg4MTllNGY4ODI0YjkzNTdhNmJhZWMyOTlhYzA4
NWQ2NDk5NTI3OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0
b3NpemVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaApA
QCAtNTksMjMgKzU5LDQwIEBAIHByaXZhdGU6CiAgICAgICAgIExhc3RUb0ZpcnN0CiAgICAgfTsK
IAorICAgIGVudW0gUmVuZGVyZXJUeXBlIHsKKyAgICAgICAgLy8gTm90IGV2ZW4gYW4gYXV0b3Np
emluZyBjb250YWluZXIuCisgICAgICAgIE5vbmUsCisgICAgICAgIC8vIEFuIGF1dG9zaXppbmcg
Y29udGFpbmVyIGJ1dCBjYW4ndCBiZSBhbiBhdXRvc2l6aW5nIGNsdXN0ZXIuCisgICAgICAgIEF1
dG9zaXppbmdDb250YWluZXIsCisgICAgICAgIC8vIEEgbmFycm93IGRlc2NlbmRhbnQsIGNhbiBi
ZSBhIHNlcGFyYXRlIGF1dG9zaXppbmcgY2x1c3RlciBvciBhIHBhcnQgb2YgYSBncm91cCBvZiBu
YXJyb3cKKyAgICAgICAgLy8gZGVzY2VuYW50cy4KKyAgICAgICAgTmFycm93RGVzY2VuZGFudCwK
KyAgICAgICAgLy8gQSB3aWRlciBkZXNjZW5kYW50LCBjb25zaWRlcmVkIHRvIGJlIGFuIGF1dG9z
aXppbmcgY2x1c3RlciBiZWNhdXNlIG9mIGl0cyB3aWR0aCBncmVhdGVyCisgICAgICAgIC8vIHRo
YW4gdGhhdCBvZiB0aGUgdGV4dCB3aWR0aCBvZiB0aGUgcGFyZW50IGF1dG9zaXppbmcgY2x1c3Rl
ci4KKyAgICAgICAgV2lkZXJEZXNjZW5kYW50LAorICAgICAgICAvLyBBbiBhdXRvc2l6aW5nIGNs
dXN0ZXIgaW4gc3BpdGUgb2YgYW55IHByb3BlcnRpZXMgb2YgaXRzIHBhcmVudCBhdXRvc2l6aW5n
IGNsdXN0ZXIuCisgICAgICAgIEluZGVwZW5kZW50QXV0b3NpemluZ0NsdXN0ZXIKKyAgICB9Owor
CiAgICAgZXhwbGljaXQgVGV4dEF1dG9zaXplcihEb2N1bWVudCopOwogCi0gICAgdm9pZCBwcm9j
ZXNzQ2x1c3RlcihUZXh0QXV0b3NpemluZ0NsdXN0ZXJJbmZvKiwgUmVuZGVyQmxvY2sqIGNvbnRh
aW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5k
b3dJbmZvJik7Ci0gICAgdm9pZCBwcm9jZXNzQ29udGFpbmVyKGZsb2F0IG11bHRpcGxpZXIsIFJl
bmRlckJsb2NrKiBjb250YWluZXIsIFRleHRBdXRvc2l6aW5nQ2x1c3RlckluZm8qLCBSZW5kZXJP
YmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mKTsKKyAg
ICB2b2lkIHByb2Nlc3NDbHVzdGVyKFRleHRBdXRvc2l6aW5nQ2x1c3RlckluZm8mLCBSZW5kZXJC
bG9jayogY29udGFpbmVyLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0
b3NpemluZ1dpbmRvd0luZm8mKTsKKyAgICB2b2lkIHByb2Nlc3NDb250YWluZXIoZmxvYXQgbXVs
dGlwbGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgVGV4dEF1dG9zaXppbmdDbHVzdGVySW5m
byYsIFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93
SW5mbyYpOwogCiAgICAgdm9pZCBzZXRNdWx0aXBsaWVyKFJlbmRlck9iamVjdCosIGZsb2F0KTsK
IAogICAgIHN0YXRpYyBib29sIGlzQXV0b3NpemluZ0NvbnRhaW5lcihjb25zdCBSZW5kZXJPYmpl
Y3QqKTsKLSAgICBzdGF0aWMgYm9vbCBpc0F1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJs
b2NrKiwgVGV4dEF1dG9zaXppbmdDbHVzdGVySW5mbyogcGFyZW50Q2x1c3RlckluZm8pOwotICAg
IHN0YXRpYyBib29sIGlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyT2JqZWN0Kik7Cisg
ICAgc3RhdGljIGJvb2wgaXNOYXJyb3dEZXNjZW5kYW50KGNvbnN0IFJlbmRlckJsb2NrKiwgVGV4
dEF1dG9zaXppbmdDbHVzdGVySW5mbyYgcGFyZW50Q2x1c3RlckluZm8pOworICAgIHN0YXRpYyBi
b29sIGlzV2lkZXJEZXNjZW5kYW50KGNvbnN0IFJlbmRlckJsb2NrKiwgY29uc3QgVGV4dEF1dG9z
aXppbmdDbHVzdGVySW5mbyYgcGFyZW50Q2x1c3RlckluZm8pOworICAgIHN0YXRpYyBib29sIGlz
SW5kZXBlbmRlbnRBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayopOworICAgIHN0
YXRpYyBSZW5kZXJlclR5cGUgZ2V0UmVuZGVyZXJUeXBlKGNvbnN0IFJlbmRlck9iamVjdCosIFRl
eHRBdXRvc2l6aW5nQ2x1c3RlckluZm8qIHBhcmVudENsdXN0ZXJJbmZvID0gMCk7CiAKICAgICBz
dGF0aWMgYm9vbCBjb250YWluZXJTaG91bGRCZUF1dG9zaXplZChjb25zdCBSZW5kZXJCbG9jayog
Y29udGFpbmVyKTsKICAgICBzdGF0aWMgYm9vbCBjb250YWluZXJDb250YWluc09uZU9mVGFncyhj
b25zdCBSZW5kZXJCbG9jayogY2x1c3RlciwgY29uc3QgVmVjdG9yPFF1YWxpZmllZE5hbWU+JiB0
YWdzKTsKICAgICBzdGF0aWMgYm9vbCBjb250YWluZXJJc1Jvd09mTGlua3MoY29uc3QgUmVuZGVy
T2JqZWN0KiBjb250YWluZXIpOwogICAgIHN0YXRpYyBib29sIGNvbnRlbnRIZWlnaHRJc0NvbnN0
cmFpbmVkKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIpOwotICAgIHN0YXRpYyBib29sIGNs
dXN0ZXJTaG91bGRCZUF1dG9zaXplZChUZXh0QXV0b3NpemluZ0NsdXN0ZXJJbmZvKiwgZmxvYXQg
YmxvY2tXaWR0aCk7Ci0gICAgc3RhdGljIHZvaWQgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgo
Y29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgVGV4dEF1dG9zaXppbmdDbHVzdGVySW5mbyos
IGZsb2F0IG1pblRleHRXaWR0aCwgZmxvYXQmIHRleHRXaWR0aCk7CisgICAgc3RhdGljIGJvb2wg
Y2x1c3RlclNob3VsZEJlQXV0b3NpemVkKFRleHRBdXRvc2l6aW5nQ2x1c3RlckluZm8mLCBmbG9h
dCBibG9ja1dpZHRoKTsKKyAgICBzdGF0aWMgdm9pZCBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0
aChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBUZXh0QXV0b3NpemluZ0NsdXN0ZXJJbmZv
JiwgZmxvYXQgbWluVGV4dFdpZHRoLCBmbG9hdCYgdGV4dFdpZHRoKTsKIAogICAgIC8vIFVzZSB0
byB0cmF2ZXJzZSB0aGUgdHJlZSBvZiBkZXNjZW5kYW50cywgZXhjbHVkaW5nIGRlc2NlbmRhbnRz
IG9mIGNvbnRhaW5lcnMgKGJ1dCByZXR1cm5pbmcgdGhlIGNvbnRhaW5lcnMgdGhlbXNlbHZlcyku
CiAgICAgc3RhdGljIFJlbmRlck9iamVjdCogbmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2NlbmRh
bnRzT2ZDb250YWluZXJzKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdCog
c3RheVdpdGhpbik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186919</attachid>
            <date>2013-02-06 14:16:39 -0800</date>
            <delta_ts>2013-02-07 12:18:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109093-20130206221315.patch</filename>
            <type>text/plain</type>
            <size>19186</size>
            <attacher name="Anton Vayvod">avayvod</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxOTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODE4NGQwMjhlOWUzNGZi
NzMzZGQyZGI2ZWRkZTRiOGYwNGJhMDVkMy4uNGI3ZDVjOTcxOWQ1YmNiOTFlMDNiMDc1NWUxYjlj
Y2NlYTc4ZmNhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEzLTAyLTA2ICBBbnRv
biBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9yZz4KKworICAgICAgICBbVGV4dCBBdXRvc2l6
aW5nXSBJbnRyb2R1Y2UgYW4gZW51bSByZXByZXNlbnRpbmcgZGlmZmVyZW50IHR5cGVzIG9mIHJl
bmRlcmVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA5MDkzCisKKyAgICAgICAgUmVmYWN0b3JpbmcgdG8gY3JlYXRlIG1vcmUgZmxleGlibGUgdmVy
c2lvbiBvZiBpc0F1dG9zaXppbmdDbHVzdGVyIHNpbmNlIHRoZXJlJ3JlIG1vcmUgdHlwZXMKKyAg
ICAgICAgb2YgYXV0b3NpemluZyBjbHVzdGVyIG5vdzogbmFycm93ZXIgdGhhbiB0aGUgcGFyZW50
IGNsdXN0ZXIsIHdpZGVyIHRoYW4gdGhlIHBhcmVudCBjbHVzdGVyCisgICAgICAgIGFuZCB0aGUg
b25lIHRoYXQgZG9lc24ndCBkZXBlbmQgb24gdGhlIHBhcmVudCBjbHVzdGVyLgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yaW5nLCBubyB0
ZXN0IGNoYW5nZXMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHA6CisK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OmdldFJlbmRlcmVyVHlwZSk6CisKKyAg
ICAgICAgICAgIEdpdmVuIGEgcmVuZGVyZXIgYW5kIGFuIG9wdGlvbmFsIHBhcmVudCBhdXRvc2l6
aW5nIGNsdXN0ZXIgaW5mbywgZGV0ZXJtaW5lcyB0aGUgdHlwZSBvZgorICAgICAgICAgICAgdGhl
IHJlbmRlcmVyIGFuZCByZXR1cm5zIGl0LgorCisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3Np
emVyOjppc05hcnJvd0Rlc2NlbmRhbnQpOgorCisgICAgICAgICAgICBTZXBhcmF0ZSBjaGVjayBm
b3IgdGhlIGNsdXN0ZXIgdG8gYmUgb2YgdGhlIG5hcnJvdy1kZXNjZW5kYW50IHR5cGUuIFdhcyBh
IHBhcnQgb2YKKyAgICAgICAgICAgIGlzQXV0b3NpemluZ0NsdXN0ZXIoKS4KKworICAgICAgICAo
V2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6aXNXaWRlckRlc2NlbmRhbnQpOgorCisgICAgICAgICAg
ICBTZXBhcmF0ZSBjaGVjayBmb3IgdGhlIGNsdXN0ZXIgdG8gYmUgb2YgdGhlIHdpZGVyLWRlc2Nl
bmRhbnQgdHlwZS4gV2FzIGEgcGFydCBvZgorICAgICAgICAgICAgaXNBdXRvc2l6aW5nQ2x1c3Rl
cigpLgorCisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjppc0luZGVwZW5kZW50QXV0
b3NpemluZ0NsdXN0ZXIpOgorCisgICAgICAgICAgICBUaGUgcGFydCBvZiBpc0F1dG9zaXppbmdD
bHVzdGVyIHRoYXQgZGlkbid0IGRlcGVuZCBvbiB0aGUgcGFyZW50IGNsdXN0ZXIgaW5mb3JtYXRp
b24uCisKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NTdWJ0cmVlKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDbHVzdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDb250YWluZXIpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6Y2x1c3RlclNob3VsZEJlQXV0b3NpemVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6Om1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OmZpbmRGaXJzdFRleHRMZWFmTm90SW5D
bHVzdGVyKToKKworICAgICAgICAgICAgVGhlIG1ldGhvZHMgYWJvdmUgd2VyZSB1cGRhdGVkIHRv
IHVzZSBuZXcgZnVuY3Rpb25zL2FyZ3VtZW50cy4KKworICAgICAgICAqIHJlbmRlcmluZy9UZXh0
QXV0b3NpemVyLmg6CisKKyAgICAgICAgICAgIFVwZGF0ZWQvYWRkZWQgbWV0aG9kIGRlZmluaXRp
b25zLgorCiAyMDEzLTAyLTA1ICBKdWxpZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFtDU1MgR3JpZCBMYXlvdXRdIEdyaWQgaXRlbSdzIGxvZ2ljYWwgaGVp
Z2h0IGlzIG5vdCBwcm9wZXJseSByZWNvbXB1dGVkIGFmdGVyIC13ZWJraXQtZ3JpZC1jb2x1bW4g
LyAtd2Via2l0LWdyaWQtcm93IGNoYW5nZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
QXV0b3NpemVyLmNwcAppbmRleCA5MWRiYTFjZjU1MTdiNzQ5ZDhlMjE3OTk2MDYzNTY2N2Y4ZGVk
ZDMxLi5mMjEzYTgwZDgwMmY0YWJmZTBiOWU1ODlkODcyYjdlNjYxYzExOWRiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwCkBAIC0xMTksMjggKzExOSwyOCBA
QCBib29sIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NTdWJ0cmVlKFJlbmRlck9iamVjdCogbGF5b3V0
Um9vdCkKICAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLT5jb250YWluaW5nQmxvY2soKTsK
IAogICAgIFJlbmRlckJsb2NrKiBjbHVzdGVyID0gY29udGFpbmVyOwotICAgIHdoaWxlIChjbHVz
dGVyICYmICFpc0F1dG9zaXppbmdDbHVzdGVyKGNsdXN0ZXIpKQorICAgIHdoaWxlIChjbHVzdGVy
ICYmIGdldFJlbmRlcmVyVHlwZShjbHVzdGVyKSAhPSBJbmRlcGVuZGVudEF1dG9zaXppbmdDbHVz
dGVyKQogICAgICAgICBjbHVzdGVyID0gY2x1c3Rlci0+Y29udGFpbmluZ0Jsb2NrKCk7CiAKICAg
ICBUZXh0QXV0b3NpemluZ0NsdXN0ZXJJbmZvIGNsdXN0ZXJJbmZvKGNsdXN0ZXIpOwotICAgIHBy
b2Nlc3NDbHVzdGVyKCZjbHVzdGVySW5mbywgY29udGFpbmVyLCBsYXlvdXRSb290LCB3aW5kb3dJ
bmZvKTsKKyAgICBwcm9jZXNzQ2x1c3RlcihjbHVzdGVySW5mbywgY29udGFpbmVyLCBsYXlvdXRS
b290LCB3aW5kb3dJbmZvKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBUZXh0QXV0b3Np
emVyOjpwcm9jZXNzQ2x1c3RlcihUZXh0QXV0b3NpemluZ0NsdXN0ZXJJbmZvKiBjbHVzdGVySW5m
bywgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29u
c3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJiB3aW5kb3dJbmZvKQordm9pZCBUZXh0QXV0b3Np
emVyOjpwcm9jZXNzQ2x1c3RlcihUZXh0QXV0b3NpemluZ0NsdXN0ZXJJbmZvJiBjbHVzdGVySW5m
bywgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29u
c3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJiB3aW5kb3dJbmZvKQogewogICAgIC8vIE1hbnkg
cGFnZXMgc2V0IGEgbWF4LXdpZHRoIG9uIHRoZWlyIGNvbnRlbnQuIFNvIGVzcGVjaWFsbHkgZm9y
IHRoZQogICAgIC8vIFJlbmRlclZpZXcsIGluc3RlYWQgb2YganVzdCB0YWtpbmcgdGhlIHdpZHRo
IG9mIHxjbHVzdGVyfCB3ZSBmaW5kCiAgICAgLy8gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Ig
b2YgdGhlIGZpcnN0IGFuZCBsYXN0IGRlc2NlbmRhbnQgdGV4dCBub2RlIG9mCiAgICAgLy8gdGhl
IGNsdXN0ZXIgKGkuZS4gdGhlIGRlZXBlc3Qgd3JhcHBlciBibG9jayB0aGF0IGNvbnRhaW5zIGFs
bCB0aGUgdGV4dCksCiAgICAgLy8gYW5kIHVzZSBpdHMgd2lkdGggaW5zdGVhZC4KLSAgICBjbHVz
dGVySW5mby0+YmxvY2tDb250YWluaW5nQWxsVGV4dCA9IGZpbmREZWVwZXN0QmxvY2tDb250YWlu
aW5nQWxsVGV4dChjbHVzdGVySW5mby0+cm9vdCk7Ci0gICAgZmxvYXQgdGV4dFdpZHRoID0gY2x1
c3RlckluZm8tPmJsb2NrQ29udGFpbmluZ0FsbFRleHQtPmNvbnRlbnRMb2dpY2FsV2lkdGgoKTsK
KyAgICBjbHVzdGVySW5mby5ibG9ja0NvbnRhaW5pbmdBbGxUZXh0ID0gZmluZERlZXBlc3RCbG9j
a0NvbnRhaW5pbmdBbGxUZXh0KGNsdXN0ZXJJbmZvLnJvb3QpOworICAgIGZsb2F0IHRleHRXaWR0
aCA9IGNsdXN0ZXJJbmZvLmJsb2NrQ29udGFpbmluZ0FsbFRleHQtPmNvbnRlbnRMb2dpY2FsV2lk
dGgoKTsKIAogICAgIGZsb2F0IG11bHRpcGxpZXIgPSAxOwogICAgIGlmIChjbHVzdGVyU2hvdWxk
QmVBdXRvc2l6ZWQoY2x1c3RlckluZm8sIHRleHRXaWR0aCkpIHsKLSAgICAgICAgaW50IGxvZ2lj
YWxXaW5kb3dXaWR0aCA9IGNsdXN0ZXJJbmZvLT5yb290LT5pc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpID8gd2luZG93SW5mby53aW5kb3dTaXplLndpZHRoKCkgOiB3aW5kb3dJbmZvLndpbmRvd1Np
emUuaGVpZ2h0KCk7Ci0gICAgICAgIGludCBsb2dpY2FsTGF5b3V0V2lkdGggPSBjbHVzdGVySW5m
by0+cm9vdC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHdpbmRvd0luZm8ubWluTGF5b3V0
U2l6ZS53aWR0aCgpIDogd2luZG93SW5mby5taW5MYXlvdXRTaXplLmhlaWdodCgpOworICAgICAg
ICBpbnQgbG9naWNhbFdpbmRvd1dpZHRoID0gY2x1c3RlckluZm8ucm9vdC0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSA/IHdpbmRvd0luZm8ud2luZG93U2l6ZS53aWR0aCgpIDogd2luZG93SW5m
by53aW5kb3dTaXplLmhlaWdodCgpOworICAgICAgICBpbnQgbG9naWNhbExheW91dFdpZHRoID0g
Y2x1c3RlckluZm8ucm9vdC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHdpbmRvd0luZm8u
bWluTGF5b3V0U2l6ZS53aWR0aCgpIDogd2luZG93SW5mby5taW5MYXlvdXRTaXplLmhlaWdodCgp
OwogICAgICAgICAvLyBJZ25vcmUgYm94IHdpZHRoIGluIGV4Y2VzcyBvZiB0aGUgbGF5b3V0IHdp
ZHRoLCB0byBhdm9pZCBleHRyZW1lIG11bHRpcGxpZXJzLgogICAgICAgICBmbG9hdCBsb2dpY2Fs
Q2x1c3RlcldpZHRoID0gc3RkOjptaW48ZmxvYXQ+KHRleHRXaWR0aCwgbG9naWNhbExheW91dFdp
ZHRoKTsKIApAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc0Ns
dXN0ZXIoVGV4dEF1dG9zaXppbmdDbHVzdGVySW5mbyogY2x1c3RlckluZm8sIFJlbmRlCiAgICAg
cHJvY2Vzc0NvbnRhaW5lcihtdWx0aXBsaWVyLCBjb250YWluZXIsIGNsdXN0ZXJJbmZvLCBzdWJ0
cmVlUm9vdCwgd2luZG93SW5mbyk7CiB9CiAKLXZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc0Nv
bnRhaW5lcihmbG9hdCBtdWx0aXBsaWVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBUZXh0QXV0
b3NpemluZ0NsdXN0ZXJJbmZvKiBjbHVzdGVySW5mbywgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9v
dCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJiB3aW5kb3dJbmZvKQordm9pZCBUZXh0
QXV0b3NpemVyOjpwcm9jZXNzQ29udGFpbmVyKGZsb2F0IG11bHRpcGxpZXIsIFJlbmRlckJsb2Nr
KiBjb250YWluZXIsIFRleHRBdXRvc2l6aW5nQ2x1c3RlckluZm8mIGNsdXN0ZXJJbmZvLCBSZW5k
ZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mIHdp
bmRvd0luZm8pCiB7CiAgICAgQVNTRVJUKGlzQXV0b3NpemluZ0NvbnRhaW5lcihjb250YWluZXIp
KTsKIApAQCAtMTY2LDEzICsxNjYsMjYgQEAgdm9pZCBUZXh0QXV0b3NpemVyOjpwcm9jZXNzQ29u
dGFpbmVyKGZsb2F0IG11bHRpcGxpZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIFQKICAgICAg
ICAgICAgICAgICBzZXRNdWx0aXBsaWVyKGRlc2NlbmRhbnQtPnBhcmVudCgpLCBsb2NhbE11bHRp
cGxpZXIpOyAvLyBQYXJlbnQgZG9lcyBsaW5lIHNwYWNpbmcuCiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAvLyBGSVhNRTogSW5jcmVhc2UgbGlzdCBtYXJrZXIgc2l6ZSBwcm9wb3J0aW9uYXRl
bHkuCi0gICAgICAgIH0gZWxzZSBpZiAoaXNBdXRvc2l6aW5nQ29udGFpbmVyKGRlc2NlbmRhbnQp
KSB7Ci0gICAgICAgICAgICBSZW5kZXJCbG9jayogZGVzY2VuZGFudEJsb2NrID0gdG9SZW5kZXJC
bG9jayhkZXNjZW5kYW50KTsKLSAgICAgICAgICAgIGlmIChpc0F1dG9zaXppbmdDbHVzdGVyKGRl
c2NlbmRhbnRCbG9jaywgY2x1c3RlckluZm8pKSB7Ci0gICAgICAgICAgICAgICAgVGV4dEF1dG9z
aXppbmdDbHVzdGVySW5mbyBkZXNjZW5kYW50Q2x1c3RlckluZm8oZGVzY2VuZGFudEJsb2NrKTsK
LSAgICAgICAgICAgICAgICBwcm9jZXNzQ2x1c3RlcigmZGVzY2VuZGFudENsdXN0ZXJJbmZvLCBk
ZXNjZW5kYW50QmxvY2ssIGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7Ci0gICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICBwcm9jZXNzQ29udGFpbmVyKG11bHRpcGxpZXIsIGRl
c2NlbmRhbnRCbG9jaywgY2x1c3RlckluZm8sIGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzd2l0Y2ggKGdldFJlbmRlcmVyVHlwZShk
ZXNjZW5kYW50LCAmY2x1c3RlckluZm8pKSB7CisgICAgICAgICAgICBjYXNlIEF1dG9zaXppbmdD
b250YWluZXI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBSZW5kZXJC
bG9jayogZGVzY2VuZGFudEJsb2NrID0gdG9SZW5kZXJCbG9jayhkZXNjZW5kYW50KTsKKyAgICAg
ICAgICAgICAgICAgICAgcHJvY2Vzc0NvbnRhaW5lcihtdWx0aXBsaWVyLCBkZXNjZW5kYW50Qmxv
Y2ssIGNsdXN0ZXJJbmZvLCBkZXNjZW5kYW50QmxvY2ssIHdpbmRvd0luZm8pOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIE5h
cnJvd0Rlc2NlbmRhbnQ6CisgICAgICAgICAgICBjYXNlIFdpZGVyRGVzY2VuZGFudDoKKyAgICAg
ICAgICAgIGNhc2UgSW5kZXBlbmRlbnRBdXRvc2l6aW5nQ2x1c3RlcjoKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBkZXNjZW5kYW50QmxvY2sgPSB0
b1JlbmRlckJsb2NrKGRlc2NlbmRhbnQpOworICAgICAgICAgICAgICAgICAgICBUZXh0QXV0b3Np
emluZ0NsdXN0ZXJJbmZvIGRlc2NlbmRhbnRDbHVzdGVySW5mbyhkZXNjZW5kYW50QmxvY2spOwor
ICAgICAgICAgICAgICAgICAgICBwcm9jZXNzQ2x1c3RlcihkZXNjZW5kYW50Q2x1c3RlckluZm8s
IGRlc2NlbmRhbnRCbG9jaywgZGVzY2VuZGFudEJsb2NrLCB3aW5kb3dJbmZvKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBO
b25lOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgICAgIGRlc2NlbmRhbnQgPSBuZXh0SW5QcmVPcmRlclNraXBwaW5nRGVzY2VuZGFudHNPZkNv
bnRhaW5lcnMoZGVzY2VuZGFudCwgc3VidHJlZVJvb3QpOwogICAgIH0KQEAgLTIzNSw3ICsyNDgs
NDcgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjppc0F1dG9zaXppbmdDb250YWluZXIoY29uc3QgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBUZXh0QXV0
b3NpemVyOjppc0F1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlciwg
VGV4dEF1dG9zaXppbmdDbHVzdGVySW5mbyogcGFyZW50Q2x1c3RlckluZm8pCitib29sIFRleHRB
dXRvc2l6ZXI6OmlzTmFycm93RGVzY2VuZGFudChjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIs
IFRleHRBdXRvc2l6aW5nQ2x1c3RlckluZm8mIHBhcmVudENsdXN0ZXJJbmZvKQoreworICAgIGZs
b2F0IGNvbnRlbnRXaWR0aCA9IHJlbmRlcmVyLT5jb250ZW50TG9naWNhbFdpZHRoKCk7CisgICAg
ZmxvYXQgY2x1c3RlclRleHRXaWR0aCA9IHBhcmVudENsdXN0ZXJJbmZvLmJsb2NrQ29udGFpbmlu
Z0FsbFRleHQtPmNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKworICAgIC8vIFRoZSB1cHBlciBsaW1p
dCBvbiBob3cgbWFueSBwaXhlbHMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgcmVuZGVyZXIg
d2lkdGgKKyAgICAvLyBhbmQgaXRzIHBhcmVudCBjbHVzdGVyIHdpZHRoIGNhbiBleGNlZWQgdGhl
IGN1cnJlbnQgbWF4aW11bSBkaWZmZXJlbmNlIGJ5CisgICAgLy8gYmVmb3JlIHRoZSBvYmplY3Qg
aXMgY29uc2lkZXJlZCB0byBiZSBhIHNlcGFyYXRlIGF1dG9zaXppbmcgY2x1c3Rlci4KKyAgICBj
b25zdCBmbG9hdCBkaWZmZXJlbmNlRnJvbU1heFdpZHRoRGlmZmVyZW5jZSA9IDUwOworCisgICAg
ZmxvYXQgd2lkdGhEaWZmZXJlbmNlID0gY2x1c3RlclRleHRXaWR0aCAtIGNvbnRlbnRXaWR0aDsK
KyAgICBpZiAod2lkdGhEaWZmZXJlbmNlIC0gcGFyZW50Q2x1c3RlckluZm8ubWF4QWxsb3dlZERp
ZmZlcmVuY2VGcm9tVGV4dFdpZHRoID4gZGlmZmVyZW5jZUZyb21NYXhXaWR0aERpZmZlcmVuY2Up
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIHBhcmVudENsdXN0ZXJJbmZvLm1heEFsbG93ZWRE
aWZmZXJlbmNlRnJvbVRleHRXaWR0aCA9IHN0ZDo6bWF4KHdpZHRoRGlmZmVyZW5jZSwgcGFyZW50
Q2x1c3RlckluZm8ubWF4QWxsb3dlZERpZmZlcmVuY2VGcm9tVGV4dFdpZHRoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgVGV4dEF1dG9zaXplcjo6aXNXaWRlckRlc2NlbmRhbnQoY29u
c3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyLCBjb25zdCBUZXh0QXV0b3NpemluZ0NsdXN0ZXJJbmZv
JiBwYXJlbnRDbHVzdGVySW5mbykKK3sKKyAgICBmbG9hdCBjb250ZW50V2lkdGggPSByZW5kZXJl
ci0+Y29udGVudExvZ2ljYWxXaWR0aCgpOworICAgIGZsb2F0IGNsdXN0ZXJUZXh0V2lkdGggPSBw
YXJlbnRDbHVzdGVySW5mby5ibG9ja0NvbnRhaW5pbmdBbGxUZXh0LT5jb250ZW50TG9naWNhbFdp
ZHRoKCk7CisgICAgcmV0dXJuIGNvbnRlbnRXaWR0aCA+IGNsdXN0ZXJUZXh0V2lkdGg7Cit9CisK
K2Jvb2wgVGV4dEF1dG9zaXplcjo6aXNJbmRlcGVuZGVudEF1dG9zaXppbmdDbHVzdGVyKGNvbnN0
IFJlbmRlckJsb2NrKiByZW5kZXJlcikKK3sKKyAgICByZXR1cm4gcmVuZGVyZXItPmlzUmVuZGVy
VmlldygpCisgICAgICAgIHx8IHJlbmRlcmVyLT5pc0Zsb2F0aW5nKCkKKyAgICAgICAgfHwgcmVu
ZGVyZXItPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpCisgICAgICAgIHx8IHJlbmRlcmVyLT5pc1Rh
YmxlQ2VsbCgpCisgICAgICAgIHx8IHJlbmRlcmVyLT5pc1RhYmxlQ2FwdGlvbigpCisgICAgICAg
IHx8IHJlbmRlcmVyLT5pc0ZsZXhpYmxlQm94SW5jbHVkaW5nRGVwcmVjYXRlZCgpCisgICAgICAg
IHx8IHJlbmRlcmVyLT5oYXNDb2x1bW5zKCkKKyAgICAgICAgfHwgcmVuZGVyZXItPmNvbnRhaW5p
bmdCbG9jaygpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICE9IHJlbmRlcmVyLT5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpCisgICAgICAgIHx8IHJlbmRlcmVyLT5zdHlsZSgpLT5pc0Rpc3Bs
YXlSZXBsYWNlZFR5cGUoKTsKKyAgICAvLyBGSVhNRTogVGFibGVzIG5lZWQgc3BlY2lhbCBoYW5k
bGluZyB0byBtdWx0aXBseSBhbGwgdGhlaXIgY29sdW1ucyBieQorICAgIC8vIHRoZSBzYW1lIGFt
b3VudCBldmVuIGlmIHRoZXkncmUgZGlmZmVyZW50IHdpZHRoczsgc28gZG8gaGFzQ29sdW1ucygp
CisgICAgLy8gY29udGFpbmVycywgYW5kIHByb2JhYmx5IGZsZXhib3hlcy4uLgorfQorCitUZXh0
QXV0b3NpemVyOjpSZW5kZXJlclR5cGUgVGV4dEF1dG9zaXplcjo6Z2V0UmVuZGVyZXJUeXBlKGNv
bnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFRleHRBdXRvc2l6aW5nQ2x1c3RlckluZm8qIHBh
cmVudENsdXN0ZXJJbmZvKQogewogICAgIC8vICJBdXRvc2l6aW5nIGNsdXN0ZXJzIiBhcmUgc3Bl
Y2lhbCBhdXRvc2l6aW5nIGNvbnRhaW5lcnMgd2l0aGluIHdoaWNoIHdlCiAgICAgLy8gd2FudCB0
byBlbmZvcmNlIGEgdW5pZm9ybSB0ZXh0IHNpemUgbXVsdGlwbGllciwgaW4gdGhlIGhvcGVzIG9m
IG1ha2luZwpAQCAtMjU5LDQzICszMTIsMjQgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjppc0F1dG9z
aXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlciwgVGV4dEF1dG9zaXoKICAg
ICAvLyBBZGRpdGlvbmFsbHksIGFueSBjb250YWluZXJzIHRoYXQgYXJlIHdpZGVyIG9yIGF0IGxl
YXN0IDIwMHB4IG5hcnJvd2VyIHRoYW4KICAgICAvLyB0aGUgfGJsb2NrQ29udGFpbmluZ0FsbFRl
eHR8IG9mIHRoZWlyIGVuY2xvc2luZyBjbHVzdGVyIGFsc28gYmVjb21lIGNsdXN0ZXJzLAogICAg
IC8vIHNpbmNlIHRoZXkgbmVlZCBzcGVjaWFsIHRyZWF0bWVudCBkdWUgdG8gdGhlaXIgd2lkdGgu
Ci0gICAgQVNTRVJUKGlzQXV0b3NpemluZ0NvbnRhaW5lcihyZW5kZXJlcikpOwotCi0gICAgaWYg
KHBhcmVudENsdXN0ZXJJbmZvLT5ibG9ja0NvbnRhaW5pbmdBbGxUZXh0KSB7Ci0gICAgICAgIGZs
b2F0IGNvbnRlbnRXaWR0aCA9IHJlbmRlcmVyLT5jb250ZW50TG9naWNhbFdpZHRoKCk7Ci0gICAg
ICAgIGZsb2F0IGNsdXN0ZXJUZXh0V2lkdGggPSBwYXJlbnRDbHVzdGVySW5mby0+YmxvY2tDb250
YWluaW5nQWxsVGV4dC0+Y29udGVudExvZ2ljYWxXaWR0aCgpOwotICAgICAgICBpZiAoY29udGVu
dFdpZHRoID4gY2x1c3RlclRleHRXaWR0aCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgICAgIC8vIFRoZSB1cHBlciBsaW1pdCBvbiBob3cgbWFueSBwaXhlbHMgdGhlIGRpZmZlcmVu
Y2UgYmV0d2VlbiB0aGUgcmVuZGVyZXIgd2lkdGgKLSAgICAgICAgLy8gYW5kIGl0cyBwYXJlbnQg
Y2x1c3RlciB3aWR0aCBjYW4gZXhjZWVkIHRoZSBjdXJyZW50IG1heGltdW0gZGlmZmVyZW5jZSBi
eQotICAgICAgICAvLyBiZWZvcmUgdGhlIG9iamVjdCBpcyBjb25zaWRlcmVkIHRvIGJlIGEgc2Vw
YXJhdGUgYXV0b3NpemluZyBjbHVzdGVyLgotICAgICAgICBjb25zdCBmbG9hdCBkaWZmZXJlbmNl
RnJvbU1heFdpZHRoRGlmZmVyZW5jZSA9IDUwOwotCi0gICAgICAgIGZsb2F0IHdpZHRoRGlmZmVy
ZW5jZSA9IGNsdXN0ZXJUZXh0V2lkdGggLSBjb250ZW50V2lkdGg7Ci0gICAgICAgIGlmICh3aWR0
aERpZmZlcmVuY2UgLSBwYXJlbnRDbHVzdGVySW5mby0+bWF4QWxsb3dlZERpZmZlcmVuY2VGcm9t
VGV4dFdpZHRoID4gZGlmZmVyZW5jZUZyb21NYXhXaWR0aERpZmZlcmVuY2UpCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcGFyZW50Q2x1c3RlckluZm8tPm1heEFsbG93ZWREaWZm
ZXJlbmNlRnJvbVRleHRXaWR0aCA9IHN0ZDo6bWF4KHdpZHRoRGlmZmVyZW5jZSwgcGFyZW50Q2x1
c3RlckluZm8tPm1heEFsbG93ZWREaWZmZXJlbmNlRnJvbVRleHRXaWR0aCk7CisKKyAgICBpZiAo
IWlzQXV0b3NpemluZ0NvbnRhaW5lcihyZW5kZXJlcikpCisgICAgICAgIHJldHVybiBOb25lOwor
CisgICAgLy8gQSBjb250YWluZXIgaXMgYWx3YXlzIGEgUmVuZGVyQmxvY2suCisgICAgY29uc3Qg
UmVuZGVyQmxvY2sqIGJsb2NrID0gdG9SZW5kZXJCbG9jayhyZW5kZXJlcik7CisKKyAgICBpZiAo
cGFyZW50Q2x1c3RlckluZm8gJiYgcGFyZW50Q2x1c3RlckluZm8tPmJsb2NrQ29udGFpbmluZ0Fs
bFRleHQpIHsKKyAgICAgICAgaWYgKGlzTmFycm93RGVzY2VuZGFudChibG9jaywgKnBhcmVudENs
dXN0ZXJJbmZvKSkKKyAgICAgICAgICAgIHJldHVybiBOYXJyb3dEZXNjZW5kYW50OworICAgICAg
ICBpZiAoaXNXaWRlckRlc2NlbmRhbnQoYmxvY2ssICpwYXJlbnRDbHVzdGVySW5mbykpCisgICAg
ICAgICAgICByZXR1cm4gV2lkZXJEZXNjZW5kYW50OwogICAgIH0KIAotICAgIHJldHVybiByZW5k
ZXJlci0+aXNSZW5kZXJWaWV3KCkKLSAgICAgICAgfHwgcmVuZGVyZXItPmlzRmxvYXRpbmcoKQot
ICAgICAgICB8fCByZW5kZXJlci0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkKLSAgICAgICAgfHwg
cmVuZGVyZXItPmlzVGFibGVDZWxsKCkKLSAgICAgICAgfHwgcmVuZGVyZXItPmlzVGFibGVDYXB0
aW9uKCkKLSAgICAgICAgfHwgcmVuZGVyZXItPmlzRmxleGlibGVCb3hJbmNsdWRpbmdEZXByZWNh
dGVkKCkKLSAgICAgICAgfHwgcmVuZGVyZXItPmhhc0NvbHVtbnMoKQotICAgICAgICB8fCByZW5k
ZXJlci0+Y29udGFpbmluZ0Jsb2NrKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgIT0gcmVu
ZGVyZXItPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkKLSAgICAgICAgfHwgcmVuZGVyZXItPnN0
eWxlKCktPmlzRGlzcGxheVJlcGxhY2VkVHlwZSgpOwotICAgIC8vIEZJWE1FOiBUYWJsZXMgbmVl
ZCBzcGVjaWFsIGhhbmRsaW5nIHRvIG11bHRpcGx5IGFsbCB0aGVpciBjb2x1bW5zIGJ5Ci0gICAg
Ly8gdGhlIHNhbWUgYW1vdW50IGV2ZW4gaWYgdGhleSdyZSBkaWZmZXJlbnQgd2lkdGhzOyBzbyBk
byBoYXNDb2x1bW5zKCkKLSAgICAvLyBjb250YWluZXJzLCBhbmQgcHJvYmFibHkgZmxleGJveGVz
Li4uCi19CisgICAgaWYgKGlzSW5kZXBlbmRlbnRBdXRvc2l6aW5nQ2x1c3RlcihibG9jaykpCisg
ICAgICAgIHJldHVybiBJbmRlcGVuZGVudEF1dG9zaXppbmdDbHVzdGVyOwogCi1ib29sIFRleHRB
dXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3Qp
Ci17Ci0gICAgVGV4dEF1dG9zaXppbmdDbHVzdGVySW5mbyBlbXB0eUNsdXN0ZXJJbmZvKDApOwot
ICAgIHJldHVybiBpc0F1dG9zaXppbmdDb250YWluZXIob2JqZWN0KSAmJiBpc0F1dG9zaXppbmdD
bHVzdGVyKHRvUmVuZGVyQmxvY2sob2JqZWN0KSwgJmVtcHR5Q2x1c3RlckluZm8pOworICAgIHJl
dHVybiBBdXRvc2l6aW5nQ29udGFpbmVyOwogfQogCiBib29sIFRleHRBdXRvc2l6ZXI6OmNvbnRh
aW5lclNob3VsZEJlQXV0b3NpemVkKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIpCkBAIC0z
ODksNyArNDIzLDcgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjpjb250ZW50SGVpZ2h0SXNDb25zdHJh
aW5lZChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyKQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotYm9vbCBUZXh0QXV0b3NpemVyOjpjbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQoVGV4dEF1dG9z
aXppbmdDbHVzdGVySW5mbyogY2x1c3RlckluZm8sIGZsb2F0IGJsb2NrV2lkdGgpCitib29sIFRl
eHRBdXRvc2l6ZXI6OmNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZChUZXh0QXV0b3NpemluZ0NsdXN0
ZXJJbmZvJiBjbHVzdGVySW5mbywgZmxvYXQgYmxvY2tXaWR0aCkKIHsKICAgICAvLyBEb24ndCBh
dXRvc2l6ZSBjbHVzdGVycyB0aGF0IGNvbnRhaW4gbGVzcyB0aGFuIDQgbGluZXMgb2YgdGV4dCAo
aW4KICAgICAvLyBwcmFjdGljZSBsZXNzIGxpbmVzIGFyZSByZXF1aXJlZCwgc2luY2UgbWVhc3Vy
ZURlc2NlbmRhbnRUZXh0V2lkdGgKQEAgLTQwNCwyNCArNDM4LDI0IEBAIGJvb2wgVGV4dEF1dG9z
aXplcjo6Y2x1c3RlclNob3VsZEJlQXV0b3NpemVkKFRleHRBdXRvc2l6aW5nQ2x1c3RlckluZm8q
IGNsdXN0ZXJJCiAgICAgY29uc3QgZmxvYXQgbWluTGluZXNPZlRleHQgPSA0OwogICAgIGZsb2F0
IG1pblRleHRXaWR0aCA9IGJsb2NrV2lkdGggKiBtaW5MaW5lc09mVGV4dDsKICAgICBmbG9hdCB0
ZXh0V2lkdGggPSAwOwotICAgIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNsdXN0ZXJJbmZv
LT5ibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBjbHVzdGVySW5mbywgbWluVGV4dFdpZHRoLCB0ZXh0
V2lkdGgpOworICAgIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNsdXN0ZXJJbmZvLmJsb2Nr
Q29udGFpbmluZ0FsbFRleHQsIGNsdXN0ZXJJbmZvLCBtaW5UZXh0V2lkdGgsIHRleHRXaWR0aCk7
CiAgICAgaWYgKHRleHRXaWR0aCA+PSBtaW5UZXh0V2lkdGgpCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBUZXh0QXV0b3NpemVyOjptZWFzdXJlRGVz
Y2VuZGFudFRleHRXaWR0aChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBUZXh0QXV0b3Np
emluZ0NsdXN0ZXJJbmZvKiBjbHVzdGVySW5mbywgZmxvYXQgbWluVGV4dFdpZHRoLCBmbG9hdCYg
dGV4dFdpZHRoKQordm9pZCBUZXh0QXV0b3NpemVyOjptZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0
aChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBUZXh0QXV0b3NpemluZ0NsdXN0ZXJJbmZv
JiBjbHVzdGVySW5mbywgZmxvYXQgbWluVGV4dFdpZHRoLCBmbG9hdCYgdGV4dFdpZHRoKQogewog
ICAgIGJvb2wgc2tpcExvY2FsVGV4dCA9ICFjb250YWluZXJTaG91bGRCZUF1dG9zaXplZChjb250
YWluZXIpOwogCiAgICAgUmVuZGVyT2JqZWN0KiBkZXNjZW5kYW50ID0gbmV4dEluUHJlT3JkZXJT
a2lwcGluZ0Rlc2NlbmRhbnRzT2ZDb250YWluZXJzKGNvbnRhaW5lciwgY29udGFpbmVyKTsKICAg
ICB3aGlsZSAoZGVzY2VuZGFudCkgewotICAgICAgICBpZiAoIXNraXBMb2NhbFRleHQgJiYgZGVz
Y2VuZGFudC0+aXNUZXh0KCkpIHsKKyAgICAgICAgaWYgKCFza2lwTG9jYWxUZXh0ICYmIGRlc2Nl
bmRhbnQtPmlzVGV4dCgpKQogICAgICAgICAgICAgdGV4dFdpZHRoICs9IHRvUmVuZGVyVGV4dChk
ZXNjZW5kYW50KS0+cmVuZGVyZWRUZXh0TGVuZ3RoKCkgKiBkZXNjZW5kYW50LT5zdHlsZSgpLT5z
cGVjaWZpZWRGb250U2l6ZSgpOwotICAgICAgICB9IGVsc2UgaWYgKGlzQXV0b3NpemluZ0NvbnRh
aW5lcihkZXNjZW5kYW50KSkgewotICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGRlc2NlbmRhbnRC
bG9jayA9IHRvUmVuZGVyQmxvY2soZGVzY2VuZGFudCk7Ci0gICAgICAgICAgICBpZiAoIWlzQXV0
b3NpemluZ0NsdXN0ZXIoZGVzY2VuZGFudEJsb2NrLCBjbHVzdGVySW5mbykpCi0gICAgICAgICAg
ICAgICAgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgoZGVzY2VuZGFudEJsb2NrLCBjbHVzdGVy
SW5mbywgbWluVGV4dFdpZHRoLCB0ZXh0V2lkdGgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIFJlbmRlcmVyVHlwZSByZW5kZXJlclR5cGUoZ2V0UmVuZGVyZXJUeXBlKGRlc2NlbmRhbnQs
ICZjbHVzdGVySW5mbykpOworICAgICAgICAgICAgaWYgKHJlbmRlcmVyVHlwZSA9PSBBdXRvc2l6
aW5nQ29udGFpbmVyKQorICAgICAgICAgICAgICAgIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRo
KHRvUmVuZGVyQmxvY2soZGVzY2VuZGFudCksIGNsdXN0ZXJJbmZvLCBtaW5UZXh0V2lkdGgsIHRl
eHRXaWR0aCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRleHRXaWR0aCA+PSBtaW5UZXh0V2lk
dGgpCiAgICAgICAgICAgICByZXR1cm47CkBAIC00ODYsNyArNTIwLDcgQEAgY29uc3QgUmVuZGVy
T2JqZWN0KiBUZXh0QXV0b3NpemVyOjpmaW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3Rlcihjb25z
dCBSZW5kZXJPYmoKICAgICArK2RlcHRoOwogICAgIGNvbnN0IFJlbmRlck9iamVjdCogY2hpbGQg
PSAoZGlyZWN0aW9uID09IEZpcnN0VG9MYXN0KSA/IHBhcmVudC0+Zmlyc3RDaGlsZCgpIDogcGFy
ZW50LT5sYXN0Q2hpbGQoKTsKICAgICB3aGlsZSAoY2hpbGQpIHsKLSAgICAgICAgaWYgKCFpc0F1
dG9zaXppbmdDbHVzdGVyKGNoaWxkKSkgeworICAgICAgICBpZiAoZ2V0UmVuZGVyZXJUeXBlKGNo
aWxkKSAhPSBJbmRlcGVuZGVudEF1dG9zaXppbmdDbHVzdGVyKSB7CiAgICAgICAgICAgICBjb25z
dCBSZW5kZXJPYmplY3QqIGxlYWYgPSBmaW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3RlcihjaGls
ZCwgZGVwdGgsIGRpcmVjdGlvbik7CiAgICAgICAgICAgICBpZiAobGVhZikKICAgICAgICAgICAg
ICAgICByZXR1cm4gbGVhZjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9U
ZXh0QXV0b3NpemVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5o
CmluZGV4IDE2NmUwNTZkMTFiZDNmN2JkN2U2MmJlNWUyNTZkZDJlYjNiODRkMzQuLjg4MTllNGY4
ODI0YjkzNTdhNmJhZWMyOTlhYzA4NWQ2NDk5NTI3OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHRBdXRvc2l6ZXIuaApAQCAtNTksMjMgKzU5LDQwIEBAIHByaXZhdGU6CiAgICAgICAg
IExhc3RUb0ZpcnN0CiAgICAgfTsKIAorICAgIGVudW0gUmVuZGVyZXJUeXBlIHsKKyAgICAgICAg
Ly8gTm90IGV2ZW4gYW4gYXV0b3NpemluZyBjb250YWluZXIuCisgICAgICAgIE5vbmUsCisgICAg
ICAgIC8vIEFuIGF1dG9zaXppbmcgY29udGFpbmVyIGJ1dCBjYW4ndCBiZSBhbiBhdXRvc2l6aW5n
IGNsdXN0ZXIuCisgICAgICAgIEF1dG9zaXppbmdDb250YWluZXIsCisgICAgICAgIC8vIEEgbmFy
cm93IGRlc2NlbmRhbnQsIGNhbiBiZSBhIHNlcGFyYXRlIGF1dG9zaXppbmcgY2x1c3RlciBvciBh
IHBhcnQgb2YgYSBncm91cCBvZiBuYXJyb3cKKyAgICAgICAgLy8gZGVzY2VuYW50cy4KKyAgICAg
ICAgTmFycm93RGVzY2VuZGFudCwKKyAgICAgICAgLy8gQSB3aWRlciBkZXNjZW5kYW50LCBjb25z
aWRlcmVkIHRvIGJlIGFuIGF1dG9zaXppbmcgY2x1c3RlciBiZWNhdXNlIG9mIGl0cyB3aWR0aCBn
cmVhdGVyCisgICAgICAgIC8vIHRoYW4gdGhhdCBvZiB0aGUgdGV4dCB3aWR0aCBvZiB0aGUgcGFy
ZW50IGF1dG9zaXppbmcgY2x1c3Rlci4KKyAgICAgICAgV2lkZXJEZXNjZW5kYW50LAorICAgICAg
ICAvLyBBbiBhdXRvc2l6aW5nIGNsdXN0ZXIgaW4gc3BpdGUgb2YgYW55IHByb3BlcnRpZXMgb2Yg
aXRzIHBhcmVudCBhdXRvc2l6aW5nIGNsdXN0ZXIuCisgICAgICAgIEluZGVwZW5kZW50QXV0b3Np
emluZ0NsdXN0ZXIKKyAgICB9OworCiAgICAgZXhwbGljaXQgVGV4dEF1dG9zaXplcihEb2N1bWVu
dCopOwogCi0gICAgdm9pZCBwcm9jZXNzQ2x1c3RlcihUZXh0QXV0b3NpemluZ0NsdXN0ZXJJbmZv
KiwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29u
c3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJik7Ci0gICAgdm9pZCBwcm9jZXNzQ29udGFpbmVy
KGZsb2F0IG11bHRpcGxpZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIFRleHRBdXRvc2l6aW5n
Q2x1c3RlckluZm8qLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3Np
emluZ1dpbmRvd0luZm8mKTsKKyAgICB2b2lkIHByb2Nlc3NDbHVzdGVyKFRleHRBdXRvc2l6aW5n
Q2x1c3RlckluZm8mLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBSZW5kZXJPYmplY3QqIHN1YnRy
ZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mKTsKKyAgICB2b2lkIHByb2Nl
c3NDb250YWluZXIoZmxvYXQgbXVsdGlwbGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgVGV4
dEF1dG9zaXppbmdDbHVzdGVySW5mbyYsIFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0
IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYpOwogCiAgICAgdm9pZCBzZXRNdWx0aXBsaWVyKFJl
bmRlck9iamVjdCosIGZsb2F0KTsKIAogICAgIHN0YXRpYyBib29sIGlzQXV0b3NpemluZ0NvbnRh
aW5lcihjb25zdCBSZW5kZXJPYmplY3QqKTsKLSAgICBzdGF0aWMgYm9vbCBpc0F1dG9zaXppbmdD
bHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiwgVGV4dEF1dG9zaXppbmdDbHVzdGVySW5mbyogcGFy
ZW50Q2x1c3RlckluZm8pOwotICAgIHN0YXRpYyBib29sIGlzQXV0b3NpemluZ0NsdXN0ZXIoY29u
c3QgUmVuZGVyT2JqZWN0Kik7CisgICAgc3RhdGljIGJvb2wgaXNOYXJyb3dEZXNjZW5kYW50KGNv
bnN0IFJlbmRlckJsb2NrKiwgVGV4dEF1dG9zaXppbmdDbHVzdGVySW5mbyYgcGFyZW50Q2x1c3Rl
ckluZm8pOworICAgIHN0YXRpYyBib29sIGlzV2lkZXJEZXNjZW5kYW50KGNvbnN0IFJlbmRlckJs
b2NrKiwgY29uc3QgVGV4dEF1dG9zaXppbmdDbHVzdGVySW5mbyYgcGFyZW50Q2x1c3RlckluZm8p
OworICAgIHN0YXRpYyBib29sIGlzSW5kZXBlbmRlbnRBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBS
ZW5kZXJCbG9jayopOworICAgIHN0YXRpYyBSZW5kZXJlclR5cGUgZ2V0UmVuZGVyZXJUeXBlKGNv
bnN0IFJlbmRlck9iamVjdCosIFRleHRBdXRvc2l6aW5nQ2x1c3RlckluZm8qIHBhcmVudENsdXN0
ZXJJbmZvID0gMCk7CiAKICAgICBzdGF0aWMgYm9vbCBjb250YWluZXJTaG91bGRCZUF1dG9zaXpl
ZChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyKTsKICAgICBzdGF0aWMgYm9vbCBjb250YWlu
ZXJDb250YWluc09uZU9mVGFncyhjb25zdCBSZW5kZXJCbG9jayogY2x1c3RlciwgY29uc3QgVmVj
dG9yPFF1YWxpZmllZE5hbWU+JiB0YWdzKTsKICAgICBzdGF0aWMgYm9vbCBjb250YWluZXJJc1Jv
d09mTGlua3MoY29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXIpOwogICAgIHN0YXRpYyBib29s
IGNvbnRlbnRIZWlnaHRJc0NvbnN0cmFpbmVkKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIp
OwotICAgIHN0YXRpYyBib29sIGNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZChUZXh0QXV0b3Npemlu
Z0NsdXN0ZXJJbmZvKiwgZmxvYXQgYmxvY2tXaWR0aCk7Ci0gICAgc3RhdGljIHZvaWQgbWVhc3Vy
ZURlc2NlbmRhbnRUZXh0V2lkdGgoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgVGV4dEF1
dG9zaXppbmdDbHVzdGVySW5mbyosIGZsb2F0IG1pblRleHRXaWR0aCwgZmxvYXQmIHRleHRXaWR0
aCk7CisgICAgc3RhdGljIGJvb2wgY2x1c3RlclNob3VsZEJlQXV0b3NpemVkKFRleHRBdXRvc2l6
aW5nQ2x1c3RlckluZm8mLCBmbG9hdCBibG9ja1dpZHRoKTsKKyAgICBzdGF0aWMgdm9pZCBtZWFz
dXJlRGVzY2VuZGFudFRleHRXaWR0aChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBUZXh0
QXV0b3NpemluZ0NsdXN0ZXJJbmZvJiwgZmxvYXQgbWluVGV4dFdpZHRoLCBmbG9hdCYgdGV4dFdp
ZHRoKTsKIAogICAgIC8vIFVzZSB0byB0cmF2ZXJzZSB0aGUgdHJlZSBvZiBkZXNjZW5kYW50cywg
ZXhjbHVkaW5nIGRlc2NlbmRhbnRzIG9mIGNvbnRhaW5lcnMgKGJ1dCByZXR1cm5pbmcgdGhlIGNv
bnRhaW5lcnMgdGhlbXNlbHZlcykuCiAgICAgc3RhdGljIFJlbmRlck9iamVjdCogbmV4dEluUHJl
T3JkZXJTa2lwcGluZ0Rlc2NlbmRhbnRzT2ZDb250YWluZXJzKGNvbnN0IFJlbmRlck9iamVjdCos
IGNvbnN0IFJlbmRlck9iamVjdCogc3RheVdpdGhpbik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187108</attachid>
            <date>2013-02-07 07:38:37 -0800</date>
            <delta_ts>2013-02-07 12:20:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109093-20130207153513.patch</filename>
            <type>text/plain</type>
            <size>9259</size>
            <attacher name="Anton Vayvod">avayvod</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyMDY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTljOGRlNmQ0ZDJiMzRj
OWQ3MzE3Mzg3N2JiYjA1NjE3MGFhOTAxNS4uMjQ4MzY4ODkxYjJlYmViZmU0MWE0ZjdlYzc3NzRj
ZWIxOGI5OTVhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEzLTAyLTA3ICBBbnRv
biBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9yZz4KKworICAgICAgICBbVGV4dCBBdXRvc2l6
aW5nXSBSZWZhY3RvciBpc0F1dG9zaXppbmdDbHVzdGVyLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5MDkzCisKKyAgICAgICAgUmVmYWN0b3Jpbmcg
dG8gY3JlYXRlIG1vcmUgZmxleGlibGUgdmVyc2lvbiBvZiBpc0F1dG9zaXppbmdDbHVzdGVyIHNp
bmNlIHRoZXJlJ3JlIG1vcmUgdHlwZXMKKyAgICAgICAgb2YgYXV0b3NpemluZyBjbHVzdGVyIG5v
dzogbmFycm93ZXIgdGhhbiB0aGUgcGFyZW50IGNsdXN0ZXIsIHdpZGVyIHRoYW4gdGhlIHBhcmVu
dCBjbHVzdGVyCisgICAgICAgIGFuZCB0aGUgb25lIHRoYXQgZG9lc24ndCBkZXBlbmQgb24gdGhl
IHBhcmVudCBjbHVzdGVyLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFJlZmFjdG9yaW5nLCBubyB0ZXN0IGNoYW5nZXMuCisKKyAgICAgICAgKiByZW5k
ZXJpbmcvVGV4dEF1dG9zaXplci5jcHA6CisKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6
ZXI6OmlzTmFycm93RGVzY2VuZGFudCk6CisKKyAgICAgICAgICAgIFNlcGFyYXRlIGNoZWNrIGZv
ciB0aGUgY29udGFpbmVyIHRvIGJlIG9mIHRoZSBuYXJyb3ctZGVzY2VuZGFudCB0eXBlLiBXYXMg
YSBwYXJ0IG9mCisgICAgICAgICAgICBpc0F1dG9zaXppbmdDbHVzdGVyKCkuCisKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OmlzV2lkZXJEZXNjZW5kYW50KToKKworICAgICAgICAg
ICAgU2VwYXJhdGUgY2hlY2sgZm9yIHRoZSBjb250YWluZXIgdG8gYmUgb2YgdGhlIHdpZGVyLWRl
c2NlbmRhbnQgdHlwZS4gV2FzIGEgcGFydCBvZgorICAgICAgICAgICAgaXNBdXRvc2l6aW5nQ2x1
c3RlcigpLgorCisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjppc0luZGVwZW5kZW50
RGVzY2VuZGFudCk6CisKKyAgICAgICAgICAgIFNlcGFyYXRlIGNoZWNrIGZvciB0aGUgY29udGFp
bmVyIHRvIGJlIGF1dG9zaXplZCBzZXBhcmF0ZWx5IGZyb20gdGhlIGFuY2VzdG9yIGNsdXN0ZXIu
CisgICAgICAgICAgICBDaGVja3MgZm9yIGNvbmRpdGlvbnMgaW5kZXBlbmRlbnQgb2YgdGhlIGFm
b3JlbWVudGlvbmVkIGNsdXN0ZXIuCisKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6
OmlzQXV0b3NpemluZ0NsdXN0ZXIpOgorCisgICAgICAgICAgICBIYW5kZnVsIG1ldGhvZCB0byBj
aGVjayBhbGwgc2VwYXJhdGUgY29uZGl0aW9ucyB0b2dldGhlci4KKworICAgICAgICAoV2ViQ29y
ZTo6VGV4dEF1dG9zaXplcjo6cHJvY2Vzc1N1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dEF1dG9zaXplcjo6cHJvY2Vzc0NsdXN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9z
aXplcjo6cHJvY2Vzc0NvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVy
OjpjbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9z
aXplcjo6bWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dEF1dG9zaXplcjo6ZmluZEZpcnN0VGV4dExlYWZOb3RJbkNsdXN0ZXIpOgorCisgICAgICAgICAg
ICBUaGUgbWV0aG9kcyBhYm92ZSB3ZXJlIHVwZGF0ZWQgdG8gdXNlIG5ldyBmdW5jdGlvbnMvYXJn
dW1lbnRzLgorCisgICAgICAgICogcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaDoKKworICAgICAg
ICAgICAgVXBkYXRlZC9hZGRlZCBtZXRob2QgZGVmaW5pdGlvbnMuCisKIDIwMTMtMDItMDYgIFRv
bSBTZXBleiAgPHRzZXBlekBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgZG9jdW1lbnQucmVmZXJy
ZXIgbGVha2FnZSB3aXRoIFhTUyBBdWRpdG9yIHBhZ2UgYmxvY2sKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcAppbmRleCA5MWRiYTFjZjU1MTdiNzQ5ZDhlMjE3OTk2
MDYzNTY2N2Y4ZGVkZDMxLi41YjYwNmY1YjU0ZjliMGQxOTY5NDA0NzlhMDBlMWRlMzRkZWQ0ZWUy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwCkBAIC0xMTks
NyArMTE5LDcgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjpwcm9jZXNzU3VidHJlZShSZW5kZXJPYmpl
Y3QqIGxheW91dFJvb3QpCiAgICAgICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lci0+Y29udGFpbmlu
Z0Jsb2NrKCk7CiAKICAgICBSZW5kZXJCbG9jayogY2x1c3RlciA9IGNvbnRhaW5lcjsKLSAgICB3
aGlsZSAoY2x1c3RlciAmJiAhaXNBdXRvc2l6aW5nQ2x1c3RlcihjbHVzdGVyKSkKKyAgICB3aGls
ZSAoY2x1c3RlciAmJiAoIWlzQXV0b3NpemluZ0NvbnRhaW5lcihjbHVzdGVyKSB8fCAhaXNJbmRl
cGVuZGVudERlc2NlbmRhbnQoY2x1c3RlcikpKQogICAgICAgICBjbHVzdGVyID0gY2x1c3Rlci0+
Y29udGFpbmluZ0Jsb2NrKCk7CiAKICAgICBUZXh0QXV0b3NpemluZ0NsdXN0ZXJJbmZvIGNsdXN0
ZXJJbmZvKGNsdXN0ZXIpOwpAQCAtMjM1LDcgKzIzNSwzOCBAQCBib29sIFRleHRBdXRvc2l6ZXI6
OmlzQXV0b3NpemluZ0NvbnRhaW5lcihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIFRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0
ZXIoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyLCBUZXh0QXV0b3NpemluZ0NsdXN0ZXJJbmZv
KiBwYXJlbnRDbHVzdGVySW5mbykKK2Jvb2wgVGV4dEF1dG9zaXplcjo6aXNOYXJyb3dEZXNjZW5k
YW50KGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlciwgVGV4dEF1dG9zaXppbmdDbHVzdGVySW5m
byogcGFyZW50Q2x1c3RlckluZm8pCit7CisgICAgLy8gQXV0b3NpemluZyBjb250YWluZXJzIHRo
YXQgYXJlIHNpZ25pZmljYW50bHkgbmFycm93ZXIgdGhhbiB0aGUgfGJsb2NrQ29udGFpbmluZ0Fs
bFRleHR8IG9mCisgICAgLy8gdGhlaXIgZW5jbG9zaW5nIGNsdXN0ZXIgbmVlZCB0byBiZSBhdXRv
c2l6ZWQgc2VwYXJhdGVseSBhbmQgdGh1cyB0cmVhdGVkIHRoZSBzYW1lIHdheSBhcworICAgIC8v
IGF1dG9zaXppbmcgY2x1c3RlcnMuCisgICAgLy8gSWYgaG93ZXZlciB0aGUgY29udGFpbmVyIGlz
IG9ubHkgbmFycm93ZXIgYnkgMjAwIENTUyB1bml0cyBvciBsZXNzLCBpdCdzIGNvbnNpZGVyZWQg
YSBwYXJ0IG9mCisgICAgLy8gdGhlIGVuY2xvc2luZyBjbHVzdGVyIGFuZCB0aGlzIHVwcGVyIGxp
bWl0IG9mIDIwMCB1bml0cyBpcyBhCisgICAgZmxvYXQgY29udGVudFdpZHRoID0gcmVuZGVyZXIt
PmNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICBmbG9hdCBjbHVzdGVyVGV4dFdpZHRoID0gcGFy
ZW50Q2x1c3RlckluZm8tPmJsb2NrQ29udGFpbmluZ0FsbFRleHQtPmNvbnRlbnRMb2dpY2FsV2lk
dGgoKTsKKworICAgIC8vIFRoZSB1cHBlciBsaW1pdCBvbiBob3cgbWFueSBwaXhlbHMgdGhlIGRp
ZmZlcmVuY2UgYmV0d2VlbiB0aGUgcmVuZGVyZXIgd2lkdGgKKyAgICAvLyBhbmQgaXRzIHBhcmVu
dCBjbHVzdGVyIHdpZHRoIGNhbiBleGNlZWQgdGhlIGN1cnJlbnQgbWF4aW11bSBkaWZmZXJlbmNl
IGJ5CisgICAgLy8gYmVmb3JlIHRoZSBvYmplY3QgaXMgY29uc2lkZXJlZCB0byBiZSBhIHNlcGFy
YXRlIGF1dG9zaXppbmcgY2x1c3Rlci4KKyAgICBjb25zdCBmbG9hdCBkaWZmZXJlbmNlRnJvbU1h
eFdpZHRoRGlmZmVyZW5jZSA9IDUwOworCisgICAgZmxvYXQgd2lkdGhEaWZmZXJlbmNlID0gY2x1
c3RlclRleHRXaWR0aCAtIGNvbnRlbnRXaWR0aDsKKyAgICBpZiAod2lkdGhEaWZmZXJlbmNlIC0g
cGFyZW50Q2x1c3RlckluZm8tPm1heEFsbG93ZWREaWZmZXJlbmNlRnJvbVRleHRXaWR0aCA+IGRp
ZmZlcmVuY2VGcm9tTWF4V2lkdGhEaWZmZXJlbmNlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBwYXJlbnRDbHVzdGVySW5mby0+bWF4QWxsb3dlZERpZmZlcmVuY2VGcm9tVGV4dFdpZHRoID0g
c3RkOjptYXgod2lkdGhEaWZmZXJlbmNlLCBwYXJlbnRDbHVzdGVySW5mby0+bWF4QWxsb3dlZERp
ZmZlcmVuY2VGcm9tVGV4dFdpZHRoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVGV4
dEF1dG9zaXplcjo6aXNXaWRlckRlc2NlbmRhbnQoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVy
LCBjb25zdCBUZXh0QXV0b3NpemluZ0NsdXN0ZXJJbmZvKiBwYXJlbnRDbHVzdGVySW5mbykKK3sK
KyAgICAvLyBBdXRvc2l6aW5nIGNvbnRhaW5lcnMgdGhhdCBhcmUgd2lkZXIgdGhhbiB0aGUgfGJs
b2NrQ29udGFpbmluZ0FsbFRleHR8IG9mIHRoZWlyIGVuY2xvc2luZworICAgIC8vIGNsdXN0ZXIg
YXJlIHRyZWF0ZWQgdGhlIHNhbWUgd2F5IGFzIGF1dG9zaXppbmcgY2x1c3RlcnMgdG8gYmUgYXV0
b3NpemVkIHNlcGFyYXRlbHkuCisgICAgZmxvYXQgY29udGVudFdpZHRoID0gcmVuZGVyZXItPmNv
bnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICBmbG9hdCBjbHVzdGVyVGV4dFdpZHRoID0gcGFyZW50
Q2x1c3RlckluZm8tPmJsb2NrQ29udGFpbmluZ0FsbFRleHQtPmNvbnRlbnRMb2dpY2FsV2lkdGgo
KTsKKyAgICByZXR1cm4gY29udGVudFdpZHRoID4gY2x1c3RlclRleHRXaWR0aDsKK30KKworYm9v
bCBUZXh0QXV0b3NpemVyOjppc0luZGVwZW5kZW50RGVzY2VuZGFudChjb25zdCBSZW5kZXJCbG9j
ayogcmVuZGVyZXIpCiB7CiAgICAgLy8gIkF1dG9zaXppbmcgY2x1c3RlcnMiIGFyZSBzcGVjaWFs
IGF1dG9zaXppbmcgY29udGFpbmVycyB3aXRoaW4gd2hpY2ggd2UKICAgICAvLyB3YW50IHRvIGVu
Zm9yY2UgYSB1bmlmb3JtIHRleHQgc2l6ZSBtdWx0aXBsaWVyLCBpbiB0aGUgaG9wZXMgb2YgbWFr
aW5nCkBAIC0yNTYsMjggKzI4Nyw2IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5n
Q2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIsIFRleHRBdXRvc2l6CiAgICAgLy8g
ZnJvbSB0aGUgYm94J3MgcGFyZW50ICh3ZSB3YW50IHRvIGF2b2lkIGhhdmluZyBzaWduaWZpY2Fu
dGx5IGRpZmZlcmVudAogICAgIC8vIHdpZHRoIGJsb2NrcyB3aXRoaW4gYSBjbHVzdGVyLCBzaW5j
ZSB0aGUgbmFycm93ZXIgYmxvY2tzIHdvdWxkIGVuZCB1cAogICAgIC8vIGxhcmdlciB0aGFuIHdv
dWxkIG90aGVyd2lzZSBiZSBuZWNlc3NhcnkpLgotICAgIC8vIEFkZGl0aW9uYWxseSwgYW55IGNv
bnRhaW5lcnMgdGhhdCBhcmUgd2lkZXIgb3IgYXQgbGVhc3QgMjAwcHggbmFycm93ZXIgdGhhbgot
ICAgIC8vIHRoZSB8YmxvY2tDb250YWluaW5nQWxsVGV4dHwgb2YgdGhlaXIgZW5jbG9zaW5nIGNs
dXN0ZXIgYWxzbyBiZWNvbWUgY2x1c3RlcnMsCi0gICAgLy8gc2luY2UgdGhleSBuZWVkIHNwZWNp
YWwgdHJlYXRtZW50IGR1ZSB0byB0aGVpciB3aWR0aC4KLSAgICBBU1NFUlQoaXNBdXRvc2l6aW5n
Q29udGFpbmVyKHJlbmRlcmVyKSk7Ci0KLSAgICBpZiAocGFyZW50Q2x1c3RlckluZm8tPmJsb2Nr
Q29udGFpbmluZ0FsbFRleHQpIHsKLSAgICAgICAgZmxvYXQgY29udGVudFdpZHRoID0gcmVuZGVy
ZXItPmNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgZmxvYXQgY2x1c3RlclRleHRXaWR0
aCA9IHBhcmVudENsdXN0ZXJJbmZvLT5ibG9ja0NvbnRhaW5pbmdBbGxUZXh0LT5jb250ZW50TG9n
aWNhbFdpZHRoKCk7Ci0gICAgICAgIGlmIChjb250ZW50V2lkdGggPiBjbHVzdGVyVGV4dFdpZHRo
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgLy8gVGhlIHVwcGVyIGxpbWl0
IG9uIGhvdyBtYW55IHBpeGVscyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSByZW5kZXJlciB3
aWR0aAotICAgICAgICAvLyBhbmQgaXRzIHBhcmVudCBjbHVzdGVyIHdpZHRoIGNhbiBleGNlZWQg
dGhlIGN1cnJlbnQgbWF4aW11bSBkaWZmZXJlbmNlIGJ5Ci0gICAgICAgIC8vIGJlZm9yZSB0aGUg
b2JqZWN0IGlzIGNvbnNpZGVyZWQgdG8gYmUgYSBzZXBhcmF0ZSBhdXRvc2l6aW5nIGNsdXN0ZXIu
Ci0gICAgICAgIGNvbnN0IGZsb2F0IGRpZmZlcmVuY2VGcm9tTWF4V2lkdGhEaWZmZXJlbmNlID0g
NTA7Ci0KLSAgICAgICAgZmxvYXQgd2lkdGhEaWZmZXJlbmNlID0gY2x1c3RlclRleHRXaWR0aCAt
IGNvbnRlbnRXaWR0aDsKLSAgICAgICAgaWYgKHdpZHRoRGlmZmVyZW5jZSAtIHBhcmVudENsdXN0
ZXJJbmZvLT5tYXhBbGxvd2VkRGlmZmVyZW5jZUZyb21UZXh0V2lkdGggPiBkaWZmZXJlbmNlRnJv
bU1heFdpZHRoRGlmZmVyZW5jZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBw
YXJlbnRDbHVzdGVySW5mby0+bWF4QWxsb3dlZERpZmZlcmVuY2VGcm9tVGV4dFdpZHRoID0gc3Rk
OjptYXgod2lkdGhEaWZmZXJlbmNlLCBwYXJlbnRDbHVzdGVySW5mby0+bWF4QWxsb3dlZERpZmZl
cmVuY2VGcm9tVGV4dFdpZHRoKTsKLSAgICB9Ci0KICAgICByZXR1cm4gcmVuZGVyZXItPmlzUmVu
ZGVyVmlldygpCiAgICAgICAgIHx8IHJlbmRlcmVyLT5pc0Zsb2F0aW5nKCkKICAgICAgICAgfHwg
cmVuZGVyZXItPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpCkBAIC0yOTIsMTAgKzMwMSwxMSBAQCBi
b29sIFRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sq
IHJlbmRlcmVyLCBUZXh0QXV0b3NpegogICAgIC8vIGNvbnRhaW5lcnMsIGFuZCBwcm9iYWJseSBm
bGV4Ym94ZXMuLi4KIH0KIAotYm9vbCBUZXh0QXV0b3NpemVyOjppc0F1dG9zaXppbmdDbHVzdGVy
KGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQorYm9vbCBUZXh0QXV0b3NpemVyOjppc0F1dG9z
aXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlciwgVGV4dEF1dG9zaXppbmdD
bHVzdGVySW5mbyogcGFyZW50Q2x1c3RlckluZm8pCiB7Ci0gICAgVGV4dEF1dG9zaXppbmdDbHVz
dGVySW5mbyBlbXB0eUNsdXN0ZXJJbmZvKDApOwotICAgIHJldHVybiBpc0F1dG9zaXppbmdDb250
YWluZXIob2JqZWN0KSAmJiBpc0F1dG9zaXppbmdDbHVzdGVyKHRvUmVuZGVyQmxvY2sob2JqZWN0
KSwgJmVtcHR5Q2x1c3RlckluZm8pOworICAgIHJldHVybiBpc05hcnJvd0Rlc2NlbmRhbnQocmVu
ZGVyZXIsIHBhcmVudENsdXN0ZXJJbmZvKQorICAgICAgICB8fCBpc1dpZGVyRGVzY2VuZGFudChy
ZW5kZXJlciwgcGFyZW50Q2x1c3RlckluZm8pCisgICAgICAgIHx8IGlzSW5kZXBlbmRlbnREZXNj
ZW5kYW50KHJlbmRlcmVyKTsKIH0KIAogYm9vbCBUZXh0QXV0b3NpemVyOjpjb250YWluZXJTaG91
bGRCZUF1dG9zaXplZChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyKQpAQCAtNDg2LDcgKzQ5
Niw3IEBAIGNvbnN0IFJlbmRlck9iamVjdCogVGV4dEF1dG9zaXplcjo6ZmluZEZpcnN0VGV4dExl
YWZOb3RJbkNsdXN0ZXIoY29uc3QgUmVuZGVyT2JqCiAgICAgKytkZXB0aDsKICAgICBjb25zdCBS
ZW5kZXJPYmplY3QqIGNoaWxkID0gKGRpcmVjdGlvbiA9PSBGaXJzdFRvTGFzdCkgPyBwYXJlbnQt
PmZpcnN0Q2hpbGQoKSA6IHBhcmVudC0+bGFzdENoaWxkKCk7CiAgICAgd2hpbGUgKGNoaWxkKSB7
Ci0gICAgICAgIGlmICghaXNBdXRvc2l6aW5nQ2x1c3RlcihjaGlsZCkpIHsKKyAgICAgICAgaWYg
KCFpc0F1dG9zaXppbmdDb250YWluZXIoY2hpbGQpIHx8ICFpc0luZGVwZW5kZW50RGVzY2VuZGFu
dCh0b1JlbmRlckJsb2NrKGNoaWxkKSkpIHsKICAgICAgICAgICAgIGNvbnN0IFJlbmRlck9iamVj
dCogbGVhZiA9IGZpbmRGaXJzdFRleHRMZWFmTm90SW5DbHVzdGVyKGNoaWxkLCBkZXB0aCwgZGly
ZWN0aW9uKTsKICAgICAgICAgICAgIGlmIChsZWFmKQogICAgICAgICAgICAgICAgIHJldHVybiBs
ZWFmOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmgKaW5kZXggMTY2ZTA1
NmQxMWJkM2Y3YmQ3ZTYyYmU1ZTI1NmRkMmViM2I4NGQzNC4uYzUyMzAxZTRhZDQ5ZWRiNmU1ZTQ3
YzhiZmYzNmFhMTFkZDYwNGZkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1RleHRBdXRvc2l6ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9z
aXplci5oCkBAIC02Nyw4ICs2NywxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0TXVsdGlwbGll
cihSZW5kZXJPYmplY3QqLCBmbG9hdCk7CiAKICAgICBzdGF0aWMgYm9vbCBpc0F1dG9zaXppbmdD
b250YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0Kik7CisgICAgc3RhdGljIGJvb2wgaXNOYXJyb3dE
ZXNjZW5kYW50KGNvbnN0IFJlbmRlckJsb2NrKiwgVGV4dEF1dG9zaXppbmdDbHVzdGVySW5mbyog
cGFyZW50Q2x1c3RlckluZm8pOworICAgIHN0YXRpYyBib29sIGlzV2lkZXJEZXNjZW5kYW50KGNv
bnN0IFJlbmRlckJsb2NrKiwgY29uc3QgVGV4dEF1dG9zaXppbmdDbHVzdGVySW5mbyogcGFyZW50
Q2x1c3RlckluZm8pOworICAgIHN0YXRpYyBib29sIGlzSW5kZXBlbmRlbnREZXNjZW5kYW50KGNv
bnN0IFJlbmRlckJsb2NrKik7CiAgICAgc3RhdGljIGJvb2wgaXNBdXRvc2l6aW5nQ2x1c3Rlcihj
b25zdCBSZW5kZXJCbG9jayosIFRleHRBdXRvc2l6aW5nQ2x1c3RlckluZm8qIHBhcmVudENsdXN0
ZXJJbmZvKTsKLSAgICBzdGF0aWMgYm9vbCBpc0F1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRl
ck9iamVjdCopOwogCiAgICAgc3RhdGljIGJvb2wgY29udGFpbmVyU2hvdWxkQmVBdXRvc2l6ZWQo
Y29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lcik7CiAgICAgc3RhdGljIGJvb2wgY29udGFpbmVy
Q29udGFpbnNPbmVPZlRhZ3MoY29uc3QgUmVuZGVyQmxvY2sqIGNsdXN0ZXIsIGNvbnN0IFZlY3Rv
cjxRdWFsaWZpZWROYW1lPiYgdGFncyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187145</attachid>
            <date>2013-02-07 12:18:44 -0800</date>
            <delta_ts>2013-02-08 08:42:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109093-20130207201520.patch</filename>
            <type>text/plain</type>
            <size>9592</size>
            <attacher name="Anton Vayvod">avayvod</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyMDY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTljOGRlNmQ0ZDJiMzRj
OWQ3MzE3Mzg3N2JiYjA1NjE3MGFhOTAxNS4uYjVjZTdjMmI3NGE5NGU0YzJiMTkxNjMzMmY1ODIx
ZGQ0ZmVjZTQwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEzLTAyLTA3ICBBbnRv
biBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9yZz4KKworICAgICAgICBbVGV4dCBBdXRvc2l6
aW5nXSBTcGxpdCBpc0F1dG9zaXppbmdDbHVzdGVyIGludG8gdGhyZWUgaW5kZXBlbmRlbnQgY2hl
Y2tzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDkw
OTMKKworICAgICAgICBSZWZhY3RvcmluZyB0byBjcmVhdGUgbW9yZSBmbGV4aWJsZSB2ZXJzaW9u
IG9mIGlzQXV0b3NpemluZ0NsdXN0ZXIgc2luY2UgdGhlcmUncmUgbW9yZSB0eXBlcworICAgICAg
ICBvZiBhdXRvc2l6aW5nIGNsdXN0ZXIgbm93OiBuYXJyb3dlciB0aGFuIHRoZSBwYXJlbnQgY2x1
c3Rlciwgd2lkZXIgdGhhbiB0aGUgcGFyZW50IGNsdXN0ZXIKKyAgICAgICAgYW5kIHRoZSBvbmUg
dGhhdCBkb2Vzbid0IGRlcGVuZCBvbiB0aGUgcGFyZW50IGNsdXN0ZXIuCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3JpbmcsIG5vIHRlc3Qg
Y2hhbmdlcy4KKworICAgICAgICAqIHJlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcDoKKworICAg
ICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6aXNOYXJyb3dEZXNjZW5kYW50KToKKworICAg
ICAgICAgICAgU2VwYXJhdGUgY2hlY2sgZm9yIHRoZSBjb250YWluZXIgdG8gYmUgb2YgdGhlIG5h
cnJvdy1kZXNjZW5kYW50IHR5cGUuIFdhcyBhIHBhcnQgb2YKKyAgICAgICAgICAgIGlzQXV0b3Np
emluZ0NsdXN0ZXIoKS4KKworICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6aXNXaWRl
ckRlc2NlbmRhbnQpOgorCisgICAgICAgICAgICBTZXBhcmF0ZSBjaGVjayBmb3IgdGhlIGNvbnRh
aW5lciB0byBiZSBvZiB0aGUgd2lkZXItZGVzY2VuZGFudCB0eXBlLiBXYXMgYSBwYXJ0IG9mCisg
ICAgICAgICAgICBpc0F1dG9zaXppbmdDbHVzdGVyKCkuCisKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRBdXRvc2l6ZXI6OmlzSW5kZXBlbmRlbnREZXNjZW5kYW50KToKKworICAgICAgICAgICAgU2Vw
YXJhdGUgY2hlY2sgZm9yIHRoZSBjb250YWluZXIgdG8gYmUgYXV0b3NpemVkIHNlcGFyYXRlbHkg
ZnJvbSB0aGUgYW5jZXN0b3IgY2x1c3Rlci4KKyAgICAgICAgICAgIENoZWNrcyBmb3IgY29uZGl0
aW9ucyBpbmRlcGVuZGVudCBvZiB0aGUgYWZvcmVtZW50aW9uZWQgY2x1c3Rlci4KKworICAgICAg
ICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ2x1c3Rlcik6CisKKyAgICAg
ICAgICAgIEhhbmR5IG1ldGhvZCB0byBjaGVjayBhbGwgc2VwYXJhdGUgY29uZGl0aW9ucyB0b2dl
dGhlci4KKworICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6cHJvY2Vzc1N1YnRyZWUp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NsdXN0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NvbnRhaW5lcik6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpjbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6bWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6ZmluZEZpcnN0VGV4dExlYWZOb3RJ
bkNsdXN0ZXIpOgorCisgICAgICAgICAgICBUaGUgbWV0aG9kcyBhYm92ZSB3ZXJlIHVwZGF0ZWQg
dG8gdXNlIG5ldyBmdW5jdGlvbnMvYXJndW1lbnRzLgorCisgICAgICAgICogcmVuZGVyaW5nL1Rl
eHRBdXRvc2l6ZXIuaDoKKworICAgICAgICAgICAgVXBkYXRlZC9hZGRlZCBtZXRob2QgZGVmaW5p
dGlvbnMuCisKIDIwMTMtMDItMDYgIFRvbSBTZXBleiAgPHRzZXBlekBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgZG9jdW1lbnQucmVmZXJyZXIgbGVha2FnZSB3aXRoIFhTUyBBdWRpdG9yIHBhZ2Ug
YmxvY2sKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcAppbmRleCA5
MWRiYTFjZjU1MTdiNzQ5ZDhlMjE3OTk2MDYzNTY2N2Y4ZGVkZDMxLi40ZGVhMWUzYWE3NzEzYjNh
NGZmNGRmODcwMzUzNzY2MmNjODRhNjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvVGV4dEF1dG9zaXplci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHRBdXRvc2l6ZXIuY3BwCkBAIC0xMTksNyArMTE5LDcgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjpw
cm9jZXNzU3VidHJlZShSZW5kZXJPYmplY3QqIGxheW91dFJvb3QpCiAgICAgICAgIGNvbnRhaW5l
ciA9IGNvbnRhaW5lci0+Y29udGFpbmluZ0Jsb2NrKCk7CiAKICAgICBSZW5kZXJCbG9jayogY2x1
c3RlciA9IGNvbnRhaW5lcjsKLSAgICB3aGlsZSAoY2x1c3RlciAmJiAhaXNBdXRvc2l6aW5nQ2x1
c3RlcihjbHVzdGVyKSkKKyAgICB3aGlsZSAoY2x1c3RlciAmJiAoIWlzQXV0b3NpemluZ0NvbnRh
aW5lcihjbHVzdGVyKSB8fCAhaXNJbmRlcGVuZGVudERlc2NlbmRhbnQoY2x1c3RlcikpKQogICAg
ICAgICBjbHVzdGVyID0gY2x1c3Rlci0+Y29udGFpbmluZ0Jsb2NrKCk7CiAKICAgICBUZXh0QXV0
b3NpemluZ0NsdXN0ZXJJbmZvIGNsdXN0ZXJJbmZvKGNsdXN0ZXIpOwpAQCAtMjM1LDggKzIzNSw0
OCBAQCBib29sIFRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NvbnRhaW5lcihjb25zdCBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyKQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFRleHRBdXRv
c2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyLCBU
ZXh0QXV0b3NpemluZ0NsdXN0ZXJJbmZvKiBwYXJlbnRDbHVzdGVySW5mbykKK2Jvb2wgVGV4dEF1
dG9zaXplcjo6aXNOYXJyb3dEZXNjZW5kYW50KGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlciwg
VGV4dEF1dG9zaXppbmdDbHVzdGVySW5mbyogcGFyZW50Q2x1c3RlckluZm8pCit7CisgICAgQVNT
RVJUKGlzQXV0b3NpemluZ0NvbnRhaW5lcihyZW5kZXJlcikpOworCisgICAgLy8gQXV0b3Npemlu
ZyBjb250YWluZXJzIHRoYXQgYXJlIHNpZ25pZmljYW50bHkgbmFycm93ZXIgdGhhbiB0aGUgfGJs
b2NrQ29udGFpbmluZ0FsbFRleHR8IG9mCisgICAgLy8gdGhlaXIgZW5jbG9zaW5nIGNsdXN0ZXIg
bWF5IGJlIGFjdGluZyBhcyBzZXBhcmF0ZSBjb2x1bW5zLCBoZW5jZSBtdXN0IGJlIGF1dG9zaXpl
ZAorICAgIC8vIHNlcGFyYXRlbHkuIEZvciBleGFtcGxlIHRoZSAybmQgZGl2IGluOgorICAgIC8v
IDxib2R5PgorICAgIC8vICAgICA8ZGl2IHN0eWxlPSJmbG9hdDogcmlnaHQ7IHdpZHRoOiA1MCUi
PjwvZGl2PgorICAgIC8vICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogNTAlIj48L2Rpdj4KKyAgICAv
LyA8Ym9keT4KKyAgICAvLyBpcyB0aGUgbGVmdCBjb2x1bW4sIGFuZCBzaG91bGQgYmUgYXV0b3Np
emVkIGRpZmZlcmVudGx5IGZyb20gdGhlIGJvZHkuCisgICAgLy8gSWYgaG93ZXZlciB0aGUgY29u
dGFpbmVyIGlzIG9ubHkgbmFycm93ZXIgYnkgMTUwcHggb3IgbGVzcywgaXQncyBjb25zaWRlcmVk
IHBhcnQgb2YKKyAgICAvLyB0aGUgZW5jbG9zaW5nIGNsdXN0ZXIuIFRoaXMgMTUwcHggbGltaXQg
aXMgYWRqdXN0ZWQgd2hlbmV2ZXIgYSBkZXNjZW5kYW50IGNvbnRhaW5lciBpcworICAgIC8vIGxl
c3MgdGhhbiA1MHB4IG5hcnJvd2VyIHRoYW4gdGhlIGN1cnJlbnQgbGltaXQuCisgICAgY29uc3Qg
ZmxvYXQgZGlmZmVyZW5jZUZyb21NYXhXaWR0aERpZmZlcmVuY2UgPSA1MDsKKyAgICBmbG9hdCBj
b250ZW50V2lkdGggPSByZW5kZXJlci0+Y29udGVudExvZ2ljYWxXaWR0aCgpOworICAgIGZsb2F0
IGNsdXN0ZXJUZXh0V2lkdGggPSBwYXJlbnRDbHVzdGVySW5mby0+YmxvY2tDb250YWluaW5nQWxs
VGV4dC0+Y29udGVudExvZ2ljYWxXaWR0aCgpOworICAgIGZsb2F0IHdpZHRoRGlmZmVyZW5jZSA9
IGNsdXN0ZXJUZXh0V2lkdGggLSBjb250ZW50V2lkdGg7CisKKyAgICBpZiAod2lkdGhEaWZmZXJl
bmNlIC0gcGFyZW50Q2x1c3RlckluZm8tPm1heEFsbG93ZWREaWZmZXJlbmNlRnJvbVRleHRXaWR0
aCA+IGRpZmZlcmVuY2VGcm9tTWF4V2lkdGhEaWZmZXJlbmNlKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIHBhcmVudENsdXN0ZXJJbmZvLT5tYXhBbGxvd2VkRGlmZmVyZW5jZUZyb21UZXh0
V2lkdGggPSBzdGQ6Om1heCh3aWR0aERpZmZlcmVuY2UsIHBhcmVudENsdXN0ZXJJbmZvLT5tYXhB
bGxvd2VkRGlmZmVyZW5jZUZyb21UZXh0V2lkdGgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBUZXh0QXV0b3NpemVyOjppc1dpZGVyRGVzY2VuZGFudChjb25zdCBSZW5kZXJCbG9jayog
cmVuZGVyZXIsIGNvbnN0IFRleHRBdXRvc2l6aW5nQ2x1c3RlckluZm8qIHBhcmVudENsdXN0ZXJJ
bmZvKQogeworICAgIEFTU0VSVChpc0F1dG9zaXppbmdDb250YWluZXIocmVuZGVyZXIpKTsKKwor
ICAgIC8vIEF1dG9zaXppbmcgY29udGFpbmVycyB0aGF0IGFyZSB3aWRlciB0aGFuIHRoZSB8Ymxv
Y2tDb250YWluaW5nQWxsVGV4dHwgb2YgdGhlaXIgZW5jbG9zaW5nCisgICAgLy8gY2x1c3RlciBh
cmUgdHJlYXRlZCB0aGUgc2FtZSB3YXkgYXMgYXV0b3NpemluZyBjbHVzdGVycyB0byBiZSBhdXRv
c2l6ZWQgc2VwYXJhdGVseS4KKyAgICBmbG9hdCBjb250ZW50V2lkdGggPSByZW5kZXJlci0+Y29u
dGVudExvZ2ljYWxXaWR0aCgpOworICAgIGZsb2F0IGNsdXN0ZXJUZXh0V2lkdGggPSBwYXJlbnRD
bHVzdGVySW5mby0+YmxvY2tDb250YWluaW5nQWxsVGV4dC0+Y29udGVudExvZ2ljYWxXaWR0aCgp
OworICAgIHJldHVybiBjb250ZW50V2lkdGggPiBjbHVzdGVyVGV4dFdpZHRoOworfQorCitib29s
IFRleHRBdXRvc2l6ZXI6OmlzSW5kZXBlbmRlbnREZXNjZW5kYW50KGNvbnN0IFJlbmRlckJsb2Nr
KiByZW5kZXJlcikKK3sKKyAgICBBU1NFUlQoaXNBdXRvc2l6aW5nQ29udGFpbmVyKHJlbmRlcmVy
KSk7CisKICAgICAvLyAiQXV0b3NpemluZyBjbHVzdGVycyIgYXJlIHNwZWNpYWwgYXV0b3Npemlu
ZyBjb250YWluZXJzIHdpdGhpbiB3aGljaCB3ZQogICAgIC8vIHdhbnQgdG8gZW5mb3JjZSBhIHVu
aWZvcm0gdGV4dCBzaXplIG11bHRpcGxpZXIsIGluIHRoZSBob3BlcyBvZiBtYWtpbmcKICAgICAv
LyB0aGUgbWFqb3Igc2VjdGlvbnMgb2YgdGhlIHBhZ2UgbG9vayBpbnRlcm5hbGx5IGNvbnNpc3Rl
bnQuCkBAIC0yNTYsMjggKzI5Niw2IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5n
Q2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIsIFRleHRBdXRvc2l6CiAgICAgLy8g
ZnJvbSB0aGUgYm94J3MgcGFyZW50ICh3ZSB3YW50IHRvIGF2b2lkIGhhdmluZyBzaWduaWZpY2Fu
dGx5IGRpZmZlcmVudAogICAgIC8vIHdpZHRoIGJsb2NrcyB3aXRoaW4gYSBjbHVzdGVyLCBzaW5j
ZSB0aGUgbmFycm93ZXIgYmxvY2tzIHdvdWxkIGVuZCB1cAogICAgIC8vIGxhcmdlciB0aGFuIHdv
dWxkIG90aGVyd2lzZSBiZSBuZWNlc3NhcnkpLgotICAgIC8vIEFkZGl0aW9uYWxseSwgYW55IGNv
bnRhaW5lcnMgdGhhdCBhcmUgd2lkZXIgb3IgYXQgbGVhc3QgMjAwcHggbmFycm93ZXIgdGhhbgot
ICAgIC8vIHRoZSB8YmxvY2tDb250YWluaW5nQWxsVGV4dHwgb2YgdGhlaXIgZW5jbG9zaW5nIGNs
dXN0ZXIgYWxzbyBiZWNvbWUgY2x1c3RlcnMsCi0gICAgLy8gc2luY2UgdGhleSBuZWVkIHNwZWNp
YWwgdHJlYXRtZW50IGR1ZSB0byB0aGVpciB3aWR0aC4KLSAgICBBU1NFUlQoaXNBdXRvc2l6aW5n
Q29udGFpbmVyKHJlbmRlcmVyKSk7Ci0KLSAgICBpZiAocGFyZW50Q2x1c3RlckluZm8tPmJsb2Nr
Q29udGFpbmluZ0FsbFRleHQpIHsKLSAgICAgICAgZmxvYXQgY29udGVudFdpZHRoID0gcmVuZGVy
ZXItPmNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgZmxvYXQgY2x1c3RlclRleHRXaWR0
aCA9IHBhcmVudENsdXN0ZXJJbmZvLT5ibG9ja0NvbnRhaW5pbmdBbGxUZXh0LT5jb250ZW50TG9n
aWNhbFdpZHRoKCk7Ci0gICAgICAgIGlmIChjb250ZW50V2lkdGggPiBjbHVzdGVyVGV4dFdpZHRo
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgLy8gVGhlIHVwcGVyIGxpbWl0
IG9uIGhvdyBtYW55IHBpeGVscyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSByZW5kZXJlciB3
aWR0aAotICAgICAgICAvLyBhbmQgaXRzIHBhcmVudCBjbHVzdGVyIHdpZHRoIGNhbiBleGNlZWQg
dGhlIGN1cnJlbnQgbWF4aW11bSBkaWZmZXJlbmNlIGJ5Ci0gICAgICAgIC8vIGJlZm9yZSB0aGUg
b2JqZWN0IGlzIGNvbnNpZGVyZWQgdG8gYmUgYSBzZXBhcmF0ZSBhdXRvc2l6aW5nIGNsdXN0ZXIu
Ci0gICAgICAgIGNvbnN0IGZsb2F0IGRpZmZlcmVuY2VGcm9tTWF4V2lkdGhEaWZmZXJlbmNlID0g
NTA7Ci0KLSAgICAgICAgZmxvYXQgd2lkdGhEaWZmZXJlbmNlID0gY2x1c3RlclRleHRXaWR0aCAt
IGNvbnRlbnRXaWR0aDsKLSAgICAgICAgaWYgKHdpZHRoRGlmZmVyZW5jZSAtIHBhcmVudENsdXN0
ZXJJbmZvLT5tYXhBbGxvd2VkRGlmZmVyZW5jZUZyb21UZXh0V2lkdGggPiBkaWZmZXJlbmNlRnJv
bU1heFdpZHRoRGlmZmVyZW5jZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBw
YXJlbnRDbHVzdGVySW5mby0+bWF4QWxsb3dlZERpZmZlcmVuY2VGcm9tVGV4dFdpZHRoID0gc3Rk
OjptYXgod2lkdGhEaWZmZXJlbmNlLCBwYXJlbnRDbHVzdGVySW5mby0+bWF4QWxsb3dlZERpZmZl
cmVuY2VGcm9tVGV4dFdpZHRoKTsKLSAgICB9Ci0KICAgICByZXR1cm4gcmVuZGVyZXItPmlzUmVu
ZGVyVmlldygpCiAgICAgICAgIHx8IHJlbmRlcmVyLT5pc0Zsb2F0aW5nKCkKICAgICAgICAgfHwg
cmVuZGVyZXItPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpCkBAIC0yOTIsMTAgKzMxMCwxMyBAQCBi
b29sIFRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sq
IHJlbmRlcmVyLCBUZXh0QXV0b3NpegogICAgIC8vIGNvbnRhaW5lcnMsIGFuZCBwcm9iYWJseSBm
bGV4Ym94ZXMuLi4KIH0KIAotYm9vbCBUZXh0QXV0b3NpemVyOjppc0F1dG9zaXppbmdDbHVzdGVy
KGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQorYm9vbCBUZXh0QXV0b3NpemVyOjppc0F1dG9z
aXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlciwgVGV4dEF1dG9zaXppbmdD
bHVzdGVySW5mbyogcGFyZW50Q2x1c3RlckluZm8pCiB7Ci0gICAgVGV4dEF1dG9zaXppbmdDbHVz
dGVySW5mbyBlbXB0eUNsdXN0ZXJJbmZvKDApOwotICAgIHJldHVybiBpc0F1dG9zaXppbmdDb250
YWluZXIob2JqZWN0KSAmJiBpc0F1dG9zaXppbmdDbHVzdGVyKHRvUmVuZGVyQmxvY2sob2JqZWN0
KSwgJmVtcHR5Q2x1c3RlckluZm8pOworICAgIEFTU0VSVChpc0F1dG9zaXppbmdDb250YWluZXIo
cmVuZGVyZXIpKTsKKworICAgIHJldHVybiBpc05hcnJvd0Rlc2NlbmRhbnQocmVuZGVyZXIsIHBh
cmVudENsdXN0ZXJJbmZvKQorICAgICAgICB8fCBpc1dpZGVyRGVzY2VuZGFudChyZW5kZXJlciwg
cGFyZW50Q2x1c3RlckluZm8pCisgICAgICAgIHx8IGlzSW5kZXBlbmRlbnREZXNjZW5kYW50KHJl
bmRlcmVyKTsKIH0KIAogYm9vbCBUZXh0QXV0b3NpemVyOjpjb250YWluZXJTaG91bGRCZUF1dG9z
aXplZChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyKQpAQCAtNDg2LDcgKzUwNyw3IEBAIGNv
bnN0IFJlbmRlck9iamVjdCogVGV4dEF1dG9zaXplcjo6ZmluZEZpcnN0VGV4dExlYWZOb3RJbkNs
dXN0ZXIoY29uc3QgUmVuZGVyT2JqCiAgICAgKytkZXB0aDsKICAgICBjb25zdCBSZW5kZXJPYmpl
Y3QqIGNoaWxkID0gKGRpcmVjdGlvbiA9PSBGaXJzdFRvTGFzdCkgPyBwYXJlbnQtPmZpcnN0Q2hp
bGQoKSA6IHBhcmVudC0+bGFzdENoaWxkKCk7CiAgICAgd2hpbGUgKGNoaWxkKSB7Ci0gICAgICAg
IGlmICghaXNBdXRvc2l6aW5nQ2x1c3RlcihjaGlsZCkpIHsKKyAgICAgICAgaWYgKCFpc0F1dG9z
aXppbmdDb250YWluZXIoY2hpbGQpIHx8ICFpc0luZGVwZW5kZW50RGVzY2VuZGFudCh0b1JlbmRl
ckJsb2NrKGNoaWxkKSkpIHsKICAgICAgICAgICAgIGNvbnN0IFJlbmRlck9iamVjdCogbGVhZiA9
IGZpbmRGaXJzdFRleHRMZWFmTm90SW5DbHVzdGVyKGNoaWxkLCBkZXB0aCwgZGlyZWN0aW9uKTsK
ICAgICAgICAgICAgIGlmIChsZWFmKQogICAgICAgICAgICAgICAgIHJldHVybiBsZWFmOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmgKaW5kZXggMTY2ZTA1NmQxMWJkM2Y3
YmQ3ZTYyYmU1ZTI1NmRkMmViM2I4NGQzNC4uYzUyMzAxZTRhZDQ5ZWRiNmU1ZTQ3YzhiZmYzNmFh
MTFkZDYwNGZkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRv
c2l6ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5oCkBA
IC02Nyw4ICs2NywxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0TXVsdGlwbGllcihSZW5kZXJP
YmplY3QqLCBmbG9hdCk7CiAKICAgICBzdGF0aWMgYm9vbCBpc0F1dG9zaXppbmdDb250YWluZXIo
Y29uc3QgUmVuZGVyT2JqZWN0Kik7CisgICAgc3RhdGljIGJvb2wgaXNOYXJyb3dEZXNjZW5kYW50
KGNvbnN0IFJlbmRlckJsb2NrKiwgVGV4dEF1dG9zaXppbmdDbHVzdGVySW5mbyogcGFyZW50Q2x1
c3RlckluZm8pOworICAgIHN0YXRpYyBib29sIGlzV2lkZXJEZXNjZW5kYW50KGNvbnN0IFJlbmRl
ckJsb2NrKiwgY29uc3QgVGV4dEF1dG9zaXppbmdDbHVzdGVySW5mbyogcGFyZW50Q2x1c3Rlcklu
Zm8pOworICAgIHN0YXRpYyBib29sIGlzSW5kZXBlbmRlbnREZXNjZW5kYW50KGNvbnN0IFJlbmRl
ckJsb2NrKik7CiAgICAgc3RhdGljIGJvb2wgaXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5k
ZXJCbG9jayosIFRleHRBdXRvc2l6aW5nQ2x1c3RlckluZm8qIHBhcmVudENsdXN0ZXJJbmZvKTsK
LSAgICBzdGF0aWMgYm9vbCBpc0F1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlck9iamVjdCop
OwogCiAgICAgc3RhdGljIGJvb2wgY29udGFpbmVyU2hvdWxkQmVBdXRvc2l6ZWQoY29uc3QgUmVu
ZGVyQmxvY2sqIGNvbnRhaW5lcik7CiAgICAgc3RhdGljIGJvb2wgY29udGFpbmVyQ29udGFpbnNP
bmVPZlRhZ3MoY29uc3QgUmVuZGVyQmxvY2sqIGNsdXN0ZXIsIGNvbnN0IFZlY3RvcjxRdWFsaWZp
ZWROYW1lPiYgdGFncyk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>