<?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>51828</bug_id>
          
          <creation_ts>2011-01-03 10:16:35 -0800</creation_ts>
          <short_desc>[GTK] Port combo box painting to GtkStyleContext</short_desc>
          <delta_ts>2011-01-10 12:24:39 -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>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>51764</dependson>
          <blocked>50820</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
    
    <cc>mrobinson</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>328610</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-01-03 10:16:35 -0800</bug_when>
    <thetext>This depends on bug #51764 since the patch for stock icons contains the initial GtkStyleContext port</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328613</commentid>
    <comment_count>1</comment_count>
      <attachid>77818</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-01-03 10:20:15 -0800</bug_when>
    <thetext>Created attachment 77818
Paint combo boxes using GtkStyleContext API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331587</commentid>
    <comment_count>2</comment_count>
      <attachid>78392</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-01-10 04:21:29 -0800</bug_when>
    <thetext>Created attachment 78392
Updated patch for current git master

Patch updated to current git master, cleaned it up, fixed some minor issues and refactored paintButton to reuse the code to paint the combobox button.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331588</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-10 04:24:25 -0800</bug_when>
    <thetext>Attachment 78392 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/platform/gtk/RenderThemeGtk3.cpp&apos;]&quot; exit_code: 1
Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:328:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:345:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:416:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:436:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:453:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:485:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 6 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331641</commentid>
    <comment_count>4</comment_count>
      <attachid>78392</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-10 08:51:00 -0800</bug_when>
    <thetext>Comment on attachment 78392
Updated patch for current git master

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

Look good, but there are a few minor things that you could possibly address. Do all comboboxes have separators now? Menulists are very complicated. :)

&gt; Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:53
&gt; +// Default value defined by GTK+.
&gt; +static const int minArrowSize = 15;

Do you mind including a little bit more information to help future readers find where this is defined in GTK+?

&gt; Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:321
&gt; +    GtkBorder borderWidth;
&gt; +    gtk_style_context_get_border(context, static_cast&lt;GtkStateFlags&gt;(0), &amp;borderWidth);
&gt; +    border = borderWidth;

I think if you used gtk_style_context_get_border(context, static_cast&lt;GtkStateFlags&gt;(0), &amp;border); here you could do away totally with borderWidth.

&gt; Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:348
&gt; +    if (!wideSeparators)
&gt; +        separatorWidth = border.left;

Why the left border? Is this arbitrary of does it depend on the text direction?

&gt; Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:362
&gt; +    if (style-&gt;direction() == RTL)
&gt; +        left += separatorWidth + minArrowSize;

If I&apos;m not mistaken, if the combo box doesn&apos;t have a separator we technically shouldn&apos;t do this. Is there any way to check for that?

&gt; Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:464
&gt; +    gfloat xalign = 0.5;
&gt; +    gfloat yalign = 0.5;
&gt; +    if (direction != GTK_TEXT_DIR_LTR)
&gt; +        xalign = 1.0 - xalign;

Doesn&apos;t this mean that xalign is always 0.5? If so wouldn&apos;t it just be better to use / 2 below and avoid xalign and yalign completely? In any case, yalign can go.

&gt; Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:465
&gt; +    arrowPosition.move(floor((arrowSize.width() - extent) * xalign), floor((arrowSize.height() - extent) * yalign));

Why is this adjustment necessary. A comment might be good here.

&gt; Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:514
&gt; +        paintInfo.context-&gt;save();

I&apos;d much rather there be a cairo_clip here for consistency.

&gt; Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:515
&gt; +        cairo_rectangle(paintInfo.context-&gt;platformContext(), separatorPosition.x(), separatorPosition.y(), border.left, innerRect.height());

Why is this extra clip necessary? A comment is probably needed.

&gt; Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:519
&gt; +        paintInfo.context-&gt;restore();

I&apos;d prefer cairo_restore here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331657</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-01-10 09:29:02 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 78392 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=78392&amp;action=review
&gt; 
&gt; Look good, but there are a few minor things that you could possibly address. Do all comboboxes have separators now? Menulists are very complicated. :)
&gt; 
&gt; &gt; Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:53
&gt; &gt; +// Default value defined by GTK+.
&gt; &gt; +static const int minArrowSize = 15;
&gt; 
&gt; Do you mind including a little bit more information to help future readers find where this is defined in GTK+?

Sure, I&apos;ll do

&gt; &gt; Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:321
&gt; &gt; +    GtkBorder borderWidth;
&gt; &gt; +    gtk_style_context_get_border(context, static_cast&lt;GtkStateFlags&gt;(0), &amp;borderWidth);
&gt; &gt; +    border = borderWidth;
&gt; 
&gt; I think if you used gtk_style_context_get_border(context, static_cast&lt;GtkStateFlags&gt;(0), &amp;border); here you could do away totally with borderWidth.

Ok

&gt; &gt; Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:348
&gt; &gt; +    if (!wideSeparators)
&gt; &gt; +        separatorWidth = border.left;
&gt; 
&gt; Why the left border? Is this arbitrary of does it depend on the text direction?

it doesn&apos;t depend on text direction, it&apos;s border.left because we know the separator will be vertical. See how it&apos;s done in gtk+

http://git.gnome.org/browse/gtk+/tree/gtk/gtkseparator.c#n156

&gt; &gt; Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:362
&gt; &gt; +    if (style-&gt;direction() == RTL)
&gt; &gt; +        left += separatorWidth + minArrowSize;
&gt; 
&gt; If I&apos;m not mistaken, if the combo box doesn&apos;t have a separator we technically shouldn&apos;t do this. Is there any way to check for that?

if the combo box doesn&apos;t have a separator is becase separatorWidth == 0. 

&gt; &gt; Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:464
&gt; &gt; +    gfloat xalign = 0.5;
&gt; &gt; +    gfloat yalign = 0.5;
&gt; &gt; +    if (direction != GTK_TEXT_DIR_LTR)
&gt; &gt; +        xalign = 1.0 - xalign;
&gt; 
&gt; Doesn&apos;t this mean that xalign is always 0.5? If so wouldn&apos;t it just be better to use / 2 below and avoid xalign and yalign completely? In any case, yalign can go.

Both xalign and yalign are 0.5 by default in gtk+, I left the code this way to make it closer to gtk+ code, so that it will be easier to maintain in case gtk+ code changes. 

&gt; &gt; Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:465
&gt; &gt; +    arrowPosition.move(floor((arrowSize.width() - extent) * xalign), floor((arrowSize.height() - extent) * yalign));
&gt; 
&gt; Why is this adjustment necessary. A comment might be good here.

To center the arrow, this is also based on gtk+ code:

http://git.gnome.org/browse/gtk+/tree/gtk/gtkarrow.c#n306

&gt; &gt; Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:514
&gt; &gt; +        paintInfo.context-&gt;save();
&gt; 
&gt; I&apos;d much rather there be a cairo_clip here for consistency.

what do you mean?

&gt; &gt; Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:515
&gt; &gt; +        cairo_rectangle(paintInfo.context-&gt;platformContext(), separatorPosition.x(), separatorPosition.y(), border.left, innerRect.height());
&gt; 
&gt; Why is this extra clip necessary? A comment is probably needed.

Otherwhise there will be an extra vertical white line, I think it&apos;s because of pixel alignment, but I&apos;m not sure.

&gt; &gt; Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:519
&gt; &gt; +        paintInfo.context-&gt;restore();
&gt; 
&gt; I&apos;d prefer cairo_restore here.

Me too :-), I thought I should use WebCore stuff always when possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331664</commentid>
    <comment_count>6</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-10 09:42:15 -0800</bug_when>
    <thetext>(In reply to comment #5)

&gt; &gt; &gt; Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:464
&gt; &gt; &gt; +    gfloat xalign = 0.5;
&gt; &gt; &gt; +    gfloat yalign = 0.5;
&gt; &gt; &gt; +    if (direction != GTK_TEXT_DIR_LTR)
&gt; &gt; &gt; +        xalign = 1.0 - xalign;

&gt; &gt; Doesn&apos;t this mean that xalign is always 0.5? If so wouldn&apos;t it just be better to use / 2 below and avoid xalign and yalign completely? In any case, yalign can go.

&gt; Both xalign and yalign are 0.5 by default in gtk+, I left the code this way to make it closer to gtk+ code, so that it will be easier to maintain in case gtk+ code changes. 
&gt; To center the arrow, this is also based on gtk+ code:
&gt; http://git.gnome.org/browse/gtk+/tree/gtk/gtkarrow.c#n306

I still think it&apos;s better to use &quot;/ 2&quot; then here. We should favor clarity. The GTK+ code fetches the xalign and valign via gtk_misc_get_alignment. I think that&apos;s why it uses xalign and valign. Wouldn&apos;t it be safer to do the same thing here?

&gt; &gt; I&apos;d prefer cairo_restore here.
&gt; Me too :-), I thought I should use WebCore stuff always when possible.

Hrm. Interesting point. In my opinion, if code can be made simpler by using WebCore conveniences such as IntRect (which provides niceties like inflate), then I say we should use them. On the other hand, some WebCore classes exist only to wrap platform differences (like GraphicsContext). In platform-dependent code there is little reason to use them and it might add unecessary and unexpected overhead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331729</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-01-10 11:15:55 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:464
&gt; &gt; &gt; &gt; +    gfloat xalign = 0.5;
&gt; &gt; &gt; &gt; +    gfloat yalign = 0.5;
&gt; &gt; &gt; &gt; +    if (direction != GTK_TEXT_DIR_LTR)
&gt; &gt; &gt; &gt; +        xalign = 1.0 - xalign;
&gt; 
&gt; &gt; &gt; Doesn&apos;t this mean that xalign is always 0.5? If so wouldn&apos;t it just be better to use / 2 below and avoid xalign and yalign completely? In any case, yalign can go.
&gt; 
&gt; &gt; Both xalign and yalign are 0.5 by default in gtk+, I left the code this way to make it closer to gtk+ code, so that it will be easier to maintain in case gtk+ code changes. 
&gt; &gt; To center the arrow, this is also based on gtk+ code:
&gt; &gt; http://git.gnome.org/browse/gtk+/tree/gtk/gtkarrow.c#n306
&gt; 
&gt; I still think it&apos;s better to use &quot;/ 2&quot; then here. We should favor clarity.

Ok.

&gt; The GTK+ code fetches the xalign and valign via gtk_misc_get_alignment. I think that&apos;s why it uses xalign and valign.

Yes, indeed.

&gt; Wouldn&apos;t it be safer to do the same thing here?

We can&apos;t, we don&apos;t have a widget to get the alignment from, that&apos;s why I&apos;m using the default values. 

&gt; &gt; &gt; I&apos;d prefer cairo_restore here.
&gt; &gt; Me too :-), I thought I should use WebCore stuff always when possible.
&gt; 
&gt; Hrm. Interesting point. In my opinion, if code can be made simpler by using WebCore conveniences such as IntRect (which provides niceties like inflate), then I say we should use them. On the other hand, some WebCore classes exist only to wrap platform differences (like GraphicsContext). In platform-dependent code there is little reason to use them and it might add unecessary and unexpected overhead.

ok, I&apos;ll use cairo api directly here which is much cleaner indeed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331794</commentid>
    <comment_count>8</comment_count>
      <attachid>78422</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-10 11:57:25 -0800</bug_when>
    <thetext>Created attachment 78422
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331797</commentid>
    <comment_count>9</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-10 11:58:31 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Created an attachment (id=78422) [details]
&gt; Patch

I&apos;m the interest of making sure this work is complete for the release, I&apos;ve made the changes I suggested to the patch and also changed the generic variable &quot;context&quot; to &quot;buttonStyleContext&quot;, &quot;separatorStyleContext&quot; and &quot;arrowStyleContext&quot; for the sake of clarity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331801</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-10 12:00:19 -0800</bug_when>
    <thetext>Attachment 78422 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/platform/gtk/RenderThemeGtk3.cpp&apos;]&quot; exit_code: 1
Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:385:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:402:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:471:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:493:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:510:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:540:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 6 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331819</commentid>
    <comment_count>11</comment_count>
      <attachid>78422</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2011-01-10 12:11:08 -0800</bug_when>
    <thetext>Comment on attachment 78422
Patch

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

r=me

&gt; Source/WebCore/platform/gtk/RenderThemeGtk3.cpp:48
&gt; +using namespace std;

Why is this needed?

PS: Martin says it might be for &apos;floor&apos;. Better to include whatever is needed and/or do std::floor instead of doing this for just two calls?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331830</commentid>
    <comment_count>12</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-10 12:19:03 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; PS: Martin says it might be for &apos;floor&apos;. Better to include whatever is needed and/or do std::floor instead of doing this for just two calls?

Okay!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331835</commentid>
    <comment_count>13</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-10 12:23:59 -0800</bug_when>
    <thetext>Committed r75409: &lt;http://trac.webkit.org/changeset/75409&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77818</attachid>
            <date>2011-01-03 10:20:15 -0800</date>
            <delta_ts>2011-01-10 04:21:29 -0800</delta_ts>
            <desc>Paint combo boxes using GtkStyleContext API</desc>
            <filename>style-context-combobox.diff</filename>
            <type>text/plain</type>
            <size>12259</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MWUxZWQ1OC4uOWVlOWQzMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAxMS0wMS0wMyAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gUG9ydCBjb21ibyBib3ggcGFpbnRpbmcgdG8g
R3RrU3R5bGVDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01MTgyOAorCisgICAgICAgIFVzZSBHdGtTdHlsZUNvbnRleHQgQVBJIHRvIHBhaW50
IGNvbWJvIGJveGVzIHdoZW4gYnVpbGRpbmcgd2l0aAorICAgICAgICBHVEsrIDMueC4KKworICAg
ICAgICBObyBuZXcgdGVzdHMuIFRoaXMgc2hvdWxkIG5vdCBjaGFuZ2UgZnVuY3Rpb25hbGl0eS4K
KworICAgICAgICAqIHBsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Z2V0Q29tYm9Cb3hNZXRyaWNzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51TGlzdCk6CisKIDIwMTEtMDEt
MDIgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXItc3Rh
bXBlZCBieSBTaW1vbiBGcmFzZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9S
ZW5kZXJUaGVtZUd0azMuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsz
LmNwcAppbmRleCA0ODU0ZjU5Li4yOWU2NGRkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRl
clRoZW1lR3RrMy5jcHAKQEAgLTQ1LDggKzQ1LDEzIEBACiAjaW5jbHVkZSAiUmVuZGVyUHJvZ3Jl
c3MuaCIKICNlbmRpZgogCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKKy8vIEFzIGRlZmluZWQgaW4gZ3RrYXJyb3cuYworc3RhdGljIGNvbnN0IGludCBtaW5B
cnJvd1NpemUgPSAxNTsKKwogdHlwZWRlZiBIYXNoTWFwPEdUeXBlLCBQbGF0Zm9ybVJlZlB0cjxH
dGtTdHlsZUNvbnRleHQ+ID4gU3R5bGVDb250ZXh0TWFwOwogc3RhdGljIFN0eWxlQ29udGV4dE1h
cCYgc3R5bGVDb250ZXh0TWFwKCk7CiAKQEAgLTMxMSw0NyArMzE2LDIzMiBAQCBib29sIFJlbmRl
clRoZW1lR3RrOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3Qg
UGFpbnRJbmZvJiBwYQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIHZvaWQgZ2V0Q29t
Ym9Cb3hQYWRkaW5nKFJlbmRlclN0eWxlKiBzdHlsZSwgaW50JiBsZWZ0LCBpbnQmIHRvcCwgaW50
JiByaWdodCwgaW50JiBib3R0b20pCitzdGF0aWMgdm9pZCBnZXRDb21ib0JveE1ldHJpY3MoUmVu
ZGVyU3R5bGUqIHN0eWxlLCBHdGtCb3JkZXImIGJvcmRlciwgaW50JiBmb2N1cywgaW50JiBzZXBh
cmF0b3IpCiB7CiAgICAgLy8gSWYgdGhpcyBtZW51IGxpc3QgYnV0dG9uIGlzbid0IGRyYXduIHVz
aW5nIHRoZSBuYXRpdmUgdGhlbWUsIHdlCiAgICAgLy8gZG9uJ3QgYWRkIGFueSBleHRyYSBwYWRk
aW5nIGJleW9uZCB3aGF0IFdlYkNvcmUgYWxyZWFkeSB1c2VzLgogICAgIGlmIChzdHlsZS0+YXBw
ZWFyYW5jZSgpID09IE5vQ29udHJvbFBhcnQpCiAgICAgICAgIHJldHVybjsKLSAgICBtb3pfZ3Rr
X2dldF93aWRnZXRfYm9yZGVyKE1PWl9HVEtfRFJPUERPV04sICZsZWZ0LCAmdG9wLCAmcmlnaHQs
ICZib3R0b20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndGtUZXh0RGlyZWN0aW9u
KHN0eWxlLT5kaXJlY3Rpb24oKSksIFRSVUUpOworCisgICAgR3RrU3R5bGVDb250ZXh0KiBjb250
ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0JVVFRPTik7CisgICAgZ3RrX3N0eWxlX2Nv
bnRleHRfc2F2ZShjb250ZXh0KTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhj
b250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9z
ZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1Rl
eHREaXJlY3Rpb24oc3R5bGUtPmRpcmVjdGlvbigpKSkpOworCisgICAgR3RrQm9yZGVyIGJvcmRl
cldpZHRoOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9ib3JkZXIoY29udGV4dCwgc3RhdGlj
X2Nhc3Q8R3RrU3RhdGVGbGFncz4oMCksICZib3JkZXJXaWR0aCk7CisgICAgYm9yZGVyID0gYm9y
ZGVyV2lkdGg7CisKKyAgICBnaW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOworICAgIGd0a19zdHls
ZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZm9jdXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCk7CisKKyAgICBmb2N1cyA9IGZvY3VzV2lkdGggKyBmb2N1c1Bh
ZDsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7CisKKyAgICBjb250
ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NFUEFSQVRPUik7CisgICAgZ3RrX3N0eWxl
X2NvbnRleHRfc2F2ZShjb250ZXh0KTsKKworICAgIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9u
ID0gc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihzdHlsZS0+
ZGlyZWN0aW9uKCkpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRl
eHQsIGRpcmVjdGlvbik7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQs
ICJzZXBhcmF0b3IiKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwg
R1RLX1NUWUxFX0NMQVNTX0JVVFRPTik7CisKKyAgICBnYm9vbGVhbiB3aWRlU2VwYXJhdG9yczsK
KyAgICBnaW50IHNlcGFyYXRvcldpZHRoOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHls
ZShjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2lkZS1zZXBhcmF0
b3JzIiwgJndpZGVTZXBhcmF0b3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
c2VwYXJhdG9yLXdpZHRoIiwgJnNlcGFyYXRvcldpZHRoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwKTsKKworICAgIGlmICghd2lkZVNlcGFyYXRvcnMpCisgICAgICAgIHNlcGFy
YXRvcldpZHRoID0gYm9yZGVyLmxlZnQ7CisKKyAgICBzZXBhcmF0b3IgPSBzZXBhcmF0b3JXaWR0
aDsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7CiB9CiAKIGludCBS
ZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKiBzdHls
ZSkgY29uc3QKIHsKLSAgICBpbnQgbGVmdCA9IDAsIHRvcCA9IDAsIHJpZ2h0ID0gMCwgYm90dG9t
ID0gMDsKLSAgICBnZXRDb21ib0JveFBhZGRpbmcoc3R5bGUsIGxlZnQsIHRvcCwgcmlnaHQsIGJv
dHRvbSk7CisgICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoID0geyAwLCAwLCAwLCAwIH07CisgICAg
aW50IGZvY3VzV2lkdGggPSAwLCBzZXBhcmF0b3JXaWR0aCA9IDA7CisgICAgZ2V0Q29tYm9Cb3hN
ZXRyaWNzKHN0eWxlLCBib3JkZXJXaWR0aCwgZm9jdXNXaWR0aCwgc2VwYXJhdG9yV2lkdGgpOwor
ICAgIGludCBsZWZ0ID0gYm9yZGVyV2lkdGgubGVmdCArIGZvY3VzV2lkdGg7CisgICAgaWYgKHN0
eWxlLT5kaXJlY3Rpb24oKSA9PSBSVEwpCisgICAgICAgIGxlZnQgKz0gc2VwYXJhdG9yV2lkdGgg
KyBtaW5BcnJvd1NpemU7CiAgICAgcmV0dXJuIGxlZnQ7CiB9CiAKIGludCBSZW5kZXJUaGVtZUd0
azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7
Ci0gICAgaW50IGxlZnQgPSAwLCB0b3AgPSAwLCByaWdodCA9IDAsIGJvdHRvbSA9IDA7Ci0gICAg
Z2V0Q29tYm9Cb3hQYWRkaW5nKHN0eWxlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAg
IEd0a0JvcmRlciBib3JkZXJXaWR0aCA9IHsgMCwgMCwgMCwgMCB9OworICAgIGludCBmb2N1c1dp
ZHRoID0gMCwgc2VwYXJhdG9yV2lkdGggPSAwOworICAgIGdldENvbWJvQm94TWV0cmljcyhzdHls
ZSwgYm9yZGVyV2lkdGgsIGZvY3VzV2lkdGgsIHNlcGFyYXRvcldpZHRoKTsKKyAgICBpbnQgcmln
aHQgPSBib3JkZXJXaWR0aC5yaWdodCArIGZvY3VzV2lkdGg7CisgICAgaWYgKHN0eWxlLT5kaXJl
Y3Rpb24oKSA9PSBMVFIpCisgICAgICAgIHJpZ2h0ICs9IHNlcGFyYXRvcldpZHRoICsgbWluQXJy
b3dTaXplOwogICAgIHJldHVybiByaWdodDsKIH0KIAogaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1
cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7Ci0gICAgaW50
IGxlZnQgPSAwLCB0b3AgPSAwLCByaWdodCA9IDAsIGJvdHRvbSA9IDA7Ci0gICAgZ2V0Q29tYm9C
b3hQYWRkaW5nKHN0eWxlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwotICAgIHJldHVybiB0
b3A7CisgICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoID0geyAwLCAwLCAwLCAwIH07CisgICAgaW50
IGZvY3VzV2lkdGggPSAwLCBzZXBhcmF0b3JXaWR0aCA9IDA7CisgICAgZ2V0Q29tYm9Cb3hNZXRy
aWNzKHN0eWxlLCBib3JkZXJXaWR0aCwgZm9jdXNXaWR0aCwgc2VwYXJhdG9yV2lkdGgpOworICAg
IHJldHVybiBib3JkZXJXaWR0aC50b3AgKyBmb2N1c1dpZHRoOwogfQogCiBpbnQgUmVuZGVyVGhl
bWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKiBzdHlsZSkgY29u
c3QKIHsKLSAgICBpbnQgbGVmdCA9IDAsIHRvcCA9IDAsIHJpZ2h0ID0gMCwgYm90dG9tID0gMDsK
LSAgICBnZXRDb21ib0JveFBhZGRpbmcoc3R5bGUsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7
Ci0gICAgcmV0dXJuIGJvdHRvbTsKKyAgICBHdGtCb3JkZXIgYm9yZGVyV2lkdGggPSB7IDAsIDAs
IDAsIDAgfTsKKyAgICBpbnQgZm9jdXNXaWR0aCA9IDAsIHNlcGFyYXRvcldpZHRoID0gMDsKKyAg
ICBnZXRDb21ib0JveE1ldHJpY3Moc3R5bGUsIGJvcmRlcldpZHRoLCBmb2N1c1dpZHRoLCBzZXBh
cmF0b3JXaWR0aCk7CisgICAgcmV0dXJuIGJvcmRlcldpZHRoLmJvdHRvbSArIGZvY3VzV2lkdGg7
CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBv
YmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wg
UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3Qs
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAg
IHJldHVybiBwYWludFJlbmRlck9iamVjdChNT1pfR1RLX0RST1BET1dOLCBvYmplY3QsIGluZm8u
Y29udGV4dCwgcmVjdCk7CisgICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNf
Y2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5
bGUoKS0+ZGlyZWN0aW9uKCkpKTsKKyAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRT
dHlsZUNvbnRleHQoR1RLX1RZUEVfQlVUVE9OKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zYXZl
KGNvbnRleHQpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0
LCBkaXJlY3Rpb24pOworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBH
VEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKKworICAgIEludFJlY3QgY29tYm9SZWN0ID0gcmVjdDsK
KworICAgIGd1aW50IGZsYWdzID0gMDsKKyAgICBpZiAoIWlzRW5hYmxlZChyZW5kZXJPYmplY3Qp
IHx8IGlzUmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVjdCkpCisgICAgICAgIGZsYWdzIHw9IEdU
S19TVEFURV9GTEFHX0lOU0VOU0lUSVZFOworICAgIGVsc2UgaWYgKGlzUHJlc3NlZChyZW5kZXJP
YmplY3QpKQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19BQ1RJVkU7CisgICAgZWxz
ZSBpZiAoaXNIb3ZlcmVkKHJlbmRlck9iamVjdCkpCisgICAgICAgIGZsYWdzIHw9IEdUS19TVEFU
RV9GTEFHX1BSRUxJR0hUOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0
LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykpOworCisgICAgZ3RrX3JlbmRlcl9i
YWNrZ3JvdW5kKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwg
Y29tYm9SZWN0LngoKSwgY29tYm9SZWN0LnkoKSwgY29tYm9SZWN0LndpZHRoKCksIGNvbWJvUmVj
dC5oZWlnaHQoKSk7CisgICAgZ3RrX3JlbmRlcl9mcmFtZShjb250ZXh0LCBwYWludEluZm8uY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIGNvbWJvUmVjdC54KCksIGNvbWJvUmVjdC55KCksIGNv
bWJvUmVjdC53aWR0aCgpLCBjb21ib1JlY3QuaGVpZ2h0KCkpOworCisgICAgR3RrQm9yZGVyIGJv
cmRlcldpZHRoOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9ib3JkZXIoY29udGV4dCwgc3Rh
dGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3MpLCAmYm9yZGVyV2lkdGgpOworCisgICAgZ2lu
dCBmb2N1c1dpZHRoLCBmb2N1c1BhZDsKKyAgICBHdGtCb3JkZXIqIGlubmVyQm9yZGVyUHRyID0g
MDsKKyAgICBHdGtCb3JkZXIgaW5uZXJCb3JkZXIgPSB7IDEsIDEsIDEsIDEgfTsKKyAgICBndGtf
c3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImlubmVyLWJvcmRlciIsICZpbm5lckJvcmRlclB0ciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImZvY3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNXaWR0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLXBhZGRpbmciLCAmZm9jdXNQYWQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworICAgIGlmIChpbm5lckJvcmRlclB0
cikgeworICAgICAgICBpbm5lckJvcmRlciA9ICppbm5lckJvcmRlclB0cjsKKyAgICAgICAgZ3Rr
X2JvcmRlcl9mcmVlKGlubmVyQm9yZGVyUHRyKTsKKyAgICB9CisKKyAgICBpZiAoaXNGb2N1c2Vk
KHJlbmRlck9iamVjdCkpIHsKKyAgICAgICAgSW50UmVjdCBmb2N1c1JlY3QgPSBjb21ib1JlY3Q7
CisgICAgICAgIGZvY3VzUmVjdC5tb3ZlKGJvcmRlcldpZHRoLmxlZnQgKyBmb2N1c1BhZCwgYm9y
ZGVyV2lkdGgudG9wICsgZm9jdXNQYWQpOworICAgICAgICBmb2N1c1JlY3Quc2V0V2lkdGgoZm9j
dXNSZWN0LndpZHRoKCkgLSAoMiAqIGZvY3VzUGFkICsgYm9yZGVyV2lkdGgubGVmdCArIGJvcmRl
cldpZHRoLnJpZ2h0KSk7CisgICAgICAgIGZvY3VzUmVjdC5zZXRIZWlnaHQoZm9jdXNSZWN0Lmhl
aWdodCgpIC0gKDIgKiBmb2N1c1BhZCArIGJvcmRlcldpZHRoLnRvcCArIGJvcmRlcldpZHRoLmJv
dHRvbSkpOworICAgICAgICBndGtfcmVuZGVyX2ZvY3VzKGNvbnRleHQsIHBhaW50SW5mby5jb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgZm9jdXNSZWN0LngoKSwgZm9jdXNSZWN0LnkoKSwgZm9j
dXNSZWN0LndpZHRoKCksIGZvY3VzUmVjdC5oZWlnaHQoKSk7CisgICAgfQorCisgICAgZ3RrX3N0
eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKKworICAgIEludFJlY3QgaW5uZXJSZWN0Owor
ICAgIGlubmVyUmVjdC5zZXRYKGNvbWJvUmVjdC54KCkgKyBib3JkZXJXaWR0aC5sZWZ0ICsgZm9j
dXNXaWR0aCArIGZvY3VzUGFkKTsKKyAgICBpZiAoZGlyZWN0aW9uID09IEdUS19URVhUX0RJUl9M
VFIpCisgICAgICAgIGlubmVyUmVjdC5tb3ZlKGlubmVyQm9yZGVyLmxlZnQsIDApOworICAgIGVs
c2UKKyAgICAgICAgaW5uZXJSZWN0Lm1vdmUoaW5uZXJCb3JkZXIucmlnaHQsIDApOworICAgIGlu
bmVyUmVjdC5zZXRZKGNvbWJvUmVjdC55KCkgKyBpbm5lckJvcmRlci50b3AgKyBib3JkZXJXaWR0
aC50b3AgKyBmb2N1c1dpZHRoICsgZm9jdXNQYWQpOworICAgIGlubmVyUmVjdC5zZXRXaWR0aCht
YXgoMSwgY29tYm9SZWN0LndpZHRoKCkgLSBpbm5lckJvcmRlci5sZWZ0IC0gaW5uZXJCb3JkZXIu
cmlnaHQgLSAoMiAqIChmb2N1c1dpZHRoICsgZm9jdXNQYWQpICsgYm9yZGVyV2lkdGgubGVmdCAr
IGJvcmRlcldpZHRoLnJpZ2h0KSkpOworICAgIGlubmVyUmVjdC5zZXRIZWlnaHQobWF4KDEsIGNv
bWJvUmVjdC5oZWlnaHQoKSAtIGlubmVyQm9yZGVyLnRvcCAtIGlubmVyQm9yZGVyLmJvdHRvbSAt
ICgyICogKGZvY3VzV2lkdGggKyBmb2N1c1BhZCkgKyBib3JkZXJXaWR0aC50b3AgKyBib3JkZXJX
aWR0aC5ib3R0b20pKSk7CisKKyAgICBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBF
X0FSUk9XKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOworCisgICAgZ3Rr
X3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBkaXJlY3Rpb24pOworICAgIGd0
a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCAiYXJyb3ciKTsKKyAgICBndGtfc3R5
bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0JVVFRPTik7CisK
KyAgICBnZmxvYXQgYXJyb3dTY2FsaW5nOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHls
ZShjb250ZXh0LCAiYXJyb3ctc2NhbGluZyIsICZhcnJvd1NjYWxpbmcsIDApOworCisgICAgSW50
U2l6ZSBhcnJvd1NpemUobWluQXJyb3dTaXplLCBpbm5lclJlY3QuaGVpZ2h0KCkpOworICAgIElu
dFBvaW50IGFycm93UG9zaXRpb24gPSBpbm5lclJlY3QubG9jYXRpb24oKTsKKyAgICBpZiAoZGly
ZWN0aW9uID09IEdUS19URVhUX0RJUl9MVFIpCisgICAgICAgIGFycm93UG9zaXRpb24ubW92ZShp
bm5lclJlY3Qud2lkdGgoKSAtIGFycm93U2l6ZS53aWR0aCgpLCAwKTsKKworICAgIGdpbnQgZXh0
ZW50ID0gbWluKGFycm93U2l6ZS53aWR0aCgpLCBhcnJvd1NpemUuaGVpZ2h0KCkpICogYXJyb3dT
Y2FsaW5nOworICAgIGdmbG9hdCB4YWxpZ24gPSAwLjU7CisgICAgZ2Zsb2F0IHlhbGlnbiA9IDAu
NTsKKyAgICBpZiAoZGlyZWN0aW9uICE9IEdUS19URVhUX0RJUl9MVFIpCisgICAgICAgIHhhbGln
biA9IDEuMCAtIHhhbGlnbjsKKyAgICBhcnJvd1Bvc2l0aW9uLm1vdmUoZmxvb3IoKGFycm93U2l6
ZS53aWR0aCgpIC0gZXh0ZW50KSAqIHhhbGlnbiksIGZsb29yKChhcnJvd1NpemUuaGVpZ2h0KCkg
LSBleHRlbnQpICogeWFsaWduKSk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUo
Y29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKKyAgICBndGtfcmVu
ZGVyX2Fycm93KGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwg
R19QSSwgYXJyb3dQb3NpdGlvbi54KCksIGFycm93UG9zaXRpb24ueSgpLCBleHRlbnQpOworCisg
ICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKKworICAgIGNvbnRleHQgPSBn
ZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfU0VQQVJBVE9SKTsKKyAgICBndGtfc3R5bGVfY29udGV4
dF9zYXZlKGNvbnRleHQpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihj
b250ZXh0LCBkaXJlY3Rpb24pOworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250
ZXh0LCAic2VwYXJhdG9yIik7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRl
eHQsIEdUS19TVFlMRV9DTEFTU19CVVRUT04pOworCisgICAgZ2Jvb2xlYW4gd2lkZVNlcGFyYXRv
cnM7CisgICAgZ2ludCBzZXBhcmF0b3JXaWR0aDsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRf
c3R5bGUoY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpZGUtc2Vw
YXJhdG9ycyIsICZ3aWRlU2VwYXJhdG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInNlcGFyYXRvci13aWR0aCIsICZzZXBhcmF0b3JXaWR0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCk7CisgICAgaWYgKHdpZGVTZXBhcmF0b3JzICYmICFzZXBhcmF0b3JX
aWR0aCkgeworICAgICAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0
YXRlKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSk7CisKKyAgICBJ
bnRQb2ludCBzZXBhcmF0b3JQb3NpdGlvbihhcnJvd1Bvc2l0aW9uLngoKSwgaW5uZXJSZWN0Lnko
KSk7CisKKyAgICBpZiAod2lkZVNlcGFyYXRvcnMpIHsKKyAgICAgICAgaWYgKGRpcmVjdGlvbiA9
PSBHVEtfVEVYVF9ESVJfTFRSKQorICAgICAgICAgICAgc2VwYXJhdG9yUG9zaXRpb24ubW92ZSgt
c2VwYXJhdG9yV2lkdGgsIDApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXBhcmF0b3JQ
b3NpdGlvbi5tb3ZlKGFycm93U2l6ZS53aWR0aCgpLCAwKTsKKworICAgICAgICBndGtfcmVuZGVy
X2ZyYW1lKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgc2Vw
YXJhdG9yUG9zaXRpb24ueCgpLCBzZXBhcmF0b3JQb3NpdGlvbi55KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VwYXJhdG9yV2lkdGgsIGlubmVyUmVjdC5oZWlnaHQoKSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgR3RrQm9yZGVyIHBhZGRpbmc7CisgICAgICAgIGd0a19zdHlsZV9jb250
ZXh0X2dldF9wYWRkaW5nKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdz
KSwgJnBhZGRpbmcpOworICAgICAgICBHdGtCb3JkZXIgYm9yZGVyOworICAgICAgICBndGtfc3R5
bGVfY29udGV4dF9nZXRfYm9yZGVyKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+
KGZsYWdzKSwgJmJvcmRlcik7CisKKyAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBHVEtfVEVYVF9E
SVJfTFRSKQorICAgICAgICAgICAgc2VwYXJhdG9yUG9zaXRpb24ubW92ZSgtKHBhZGRpbmcubGVm
dCArIGJvcmRlci5sZWZ0KSwgMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNlcGFyYXRv
clBvc2l0aW9uLm1vdmUoYXJyb3dTaXplLndpZHRoKCksIDApOworCisgICAgICAgIHBhaW50SW5m
by5jb250ZXh0LT5zYXZlKCk7CisgICAgICAgIGNhaXJvX3JlY3RhbmdsZShwYWludEluZm8uY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHNlcGFyYXRvclBvc2l0aW9uLngoKSwgc2VwYXJhdG9y
UG9zaXRpb24ueSgpLCBib3JkZXIubGVmdCwgaW5uZXJSZWN0LmhlaWdodCgpKTsKKyAgICAgICAg
Y2Fpcm9fY2xpcChwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOworICAgICAg
ICBndGtfcmVuZGVyX2xpbmUoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpLCBzZXBhcmF0b3JQb3NpdGlvbi54KCksIHNlcGFyYXRvclBvc2l0aW9uLnkoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRvclBvc2l0aW9uLngoKSwgaW5uZXJSZWN0LmJv
dHRvbSgpKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICB9CisK
KyAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOworCisgICAgcmV0dXJuIGZh
bHNlOwogfQogCiBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRl
ck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78392</attachid>
            <date>2011-01-10 04:21:29 -0800</date>
            <delta_ts>2011-01-10 11:57:21 -0800</delta_ts>
            <desc>Updated patch for current git master</desc>
            <filename>style-context-combos2.diff</filename>
            <type>text/plain</type>
            <size>15890</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmOWJhNDQ3Li5iMTU5OTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzAg
QEAKIDIwMTEtMDEtMTAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtd
IFBvcnQgY29tYm8gYm94IHBhaW50aW5nIHRvIEd0a1N0eWxlQ29udGV4dAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE4MjgKKworICAgICAgICBVc2Ug
R3RrU3R5bGVDb250ZXh0IEFQSSB0byBwYWludCBjb21ibyBib3hlcyB3aGVuIGJ1aWxkaW5nIHdp
dGgKKyAgICAgICAgR1RLKyAzLnguIE1ldGhvZCBwYWludEJ1dHRvbigpIGhhcyBiZWVuIGZhY3Rv
cmVkIG91dCBhbmQgdGhlIG5ldworICAgICAgICBzdGF0aWMgbWV0aG9kIHJlbmRlckJ1dHRvbigp
IGlzIHVzZWQgYnkgYm90aCBwYWludEJ1dHRvbigpIGFuZAorICAgICAgICBwYWludE1lbnVMaXN0
KCkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlzIHNob3VsZCBub3QgY2hhbmdlIGZ1bmN0
aW9uYWxpdHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RSZXBhaW50UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpyZW5kZXJCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVHdGs6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OmdldENvbWJvQm94TWV0
cmljcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBh
ZGRpbmdMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVy
bmFsUGFkZGluZ1JpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwb3B1
cEludGVybmFsUGFkZGluZ1RvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6
cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVHdGs6OnBhaW50TWVudUxpc3QpOgorCisyMDExLTAxLTEwICBDYXJsb3MgR2FyY2lhIENhbXBv
cyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKwogICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9i
aW5zb24uCiAKICAgICAgICAgW0dUS10gUG9ydCBwcm9ncmVzc2JhciBwYWludGluZyB0byBHdGtT
dHlsZUNvbnRleHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5k
ZXJUaGVtZUd0azMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1l
R3RrMy5jcHAKaW5kZXggMGUzMDExZi4uNGRhNWU0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAKQEAgLTQ1LDggKzQ1LDEzIEBACiAjaW5j
bHVkZSAiUmVuZGVyUHJvZ3Jlc3MuaCIKICNlbmRpZgogCit1c2luZyBuYW1lc3BhY2Ugc3RkOwor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIERlZmF1bHQgdmFsdWUgZGVmaW5lZCBieSBHVEsr
Lgorc3RhdGljIGNvbnN0IGludCBtaW5BcnJvd1NpemUgPSAxNTsKKwogdHlwZWRlZiBIYXNoTWFw
PEdUeXBlLCBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gPiBTdHlsZUNvbnRleHRNYXA7CiBzdGF0
aWMgU3R5bGVDb250ZXh0TWFwJiBzdHlsZUNvbnRleHRNYXAoKTsKIApAQCAtMTIwLDYgKzEyNSw4
IEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9i
amVjdCogcmVuZGVyT2JqZWN0LCBJbnRSZWN0CiAgICAgICAgIGNvbnRleHQgPSBnZXRTdHlsZUNv
bnRleHQocGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0ID8gIEdUS19UWVBFX0hTQ0FM
RSA6IEdUS19UWVBFX1ZTQ0FMRSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQnV0dG9uUGFy
dDoKKyAgICBjYXNlIE1lbnVsaXN0QnV0dG9uUGFydDoKKyAgICBjYXNlIE1lbnVsaXN0UGFydDoK
ICAgICAgICAgY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9CVVRUT04pOwogCiAg
ICAgICAgIGdib29sZWFuIGludGVyaW9yRm9jdXM7CkBAIC0yMTUsMTcgKzIyMiwyMCBAQCBib29s
IFJlbmRlclRoZW1lR3RrOjpwYWludFJhZGlvKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQ
YWludEluZm8mIGluZm8sIGNvbgogICAgIHJldHVybiBwYWludFJlbmRlck9iamVjdChNT1pfR1RL
X1JBRElPQlVUVE9OLCBvYmplY3QsIGluZm8uY29udGV4dCwgcmVjdCwgaXNDaGVja2VkKG9iamVj
dCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3Qq
IHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCitzdGF0aWMgdm9pZCByZW5kZXJCdXR0b24oUmVuZGVyVGhlbWUqIHRoZW1lLCBHdGtT
dHlsZUNvbnRleHQqIGNvbnRleHQsIFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBHdGtTdHls
ZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQlVUVE9OKTsKLSAg
ICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRl
eHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihn
dGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKSk7Ci0g
ICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19C
VVRUT04pOwotCiAgICAgSW50UmVjdCBidXR0b25SZWN0KHJlY3QpOwogCi0gICAgaWYgKGlzRGVm
YXVsdChyZW5kZXJPYmplY3QpKSB7CisgICAgZ3VpbnQgZmxhZ3MgPSAwOworICAgIGlmICghdGhl
bWUtPmlzRW5hYmxlZChyZW5kZXJPYmplY3QpIHx8IHRoZW1lLT5pc1JlYWRPbmx5Q29udHJvbChy
ZW5kZXJPYmplY3QpKQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElW
RTsKKyAgICBlbHNlIGlmICh0aGVtZS0+aXNIb3ZlcmVkKHJlbmRlck9iamVjdCkpCisgICAgICAg
IGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX1BSRUxJR0hUOworICAgIGlmICh0aGVtZS0+aXNQcmVz
c2VkKHJlbmRlck9iamVjdCkpCisgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0FDVElW
RTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dCwgc3RhdGljX2Nhc3Q8
R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKKworICAgIGlmICh0aGVtZS0+aXNEZWZhdWx0KHJlbmRl
ck9iamVjdCkpIHsKICAgICAgICAgR3RrQm9yZGVyKiBib3JkZXJQdHIgPSAwOwogICAgICAgICBH
dGtCb3JkZXIgYm9yZGVyID0geyAxLCAxLCAxLCAxIH07CiAKQEAgLTI0MiwxOSArMjUyLDEwIEBA
IGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogcmVuZGVyT2Jq
ZWN0LCBjb25zdCBQYWludEluZm8mIHBhCiAgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9j
bGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfREVGQVVMVCk7CiAgICAgfQogCi0gICAgZ3Vp
bnQgZmxhZ3MgPSAwOwotICAgIGlmICghaXNFbmFibGVkKHJlbmRlck9iamVjdCkgfHwgaXNSZWFk
T25seUNvbnRyb2wocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZM
QUdfSU5TRU5TSVRJVkU7Ci0gICAgZWxzZSBpZiAoaXNIb3ZlcmVkKHJlbmRlck9iamVjdCkpCi0g
ICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX1BSRUxJR0hUOwotICAgIGlmIChpc1ByZXNz
ZWQocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfQUNUSVZF
OwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxH
dGtTdGF0ZUZsYWdzPihmbGFncykpOwotCiAgICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5kKGNvbnRl
eHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgYnV0dG9uUmVjdC54KCks
IGJ1dHRvblJlY3QueSgpLCBidXR0b25SZWN0LndpZHRoKCksIGJ1dHRvblJlY3QuaGVpZ2h0KCkp
OwogICAgIGd0a19yZW5kZXJfZnJhbWUoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpLCBidXR0b25SZWN0LngoKSwgYnV0dG9uUmVjdC55KCksIGJ1dHRvblJlY3Qu
d2lkdGgoKSwgYnV0dG9uUmVjdC5oZWlnaHQoKSk7CiAKLSAgICBpZiAoaXNGb2N1c2VkKHJlbmRl
ck9iamVjdCkpIHsKKyAgICBpZiAodGhlbWUtPmlzRm9jdXNlZChyZW5kZXJPYmplY3QpKSB7CiAg
ICAgICAgIGdpbnQgZm9jdXNXaWR0aCwgZm9jdXNQYWQ7CiAgICAgICAgIGdib29sZWFuIGRpc3Bs
YWNlRm9jdXMsIGludGVyaW9yRm9jdXM7CiAgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9z
dHlsZShjb250ZXh0LApAQCAtMjc0LDcgKzI3NSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBh
aW50QnV0dG9uKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBh
CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgYnV0dG9uUmVjdC5pbmZsYXRlKGZvY3VzV2lk
dGggKyBmb2N1c1BhZCk7CiAKLSAgICAgICAgaWYgKGRpc3BsYWNlRm9jdXMgJiYgaXNQcmVzc2Vk
KHJlbmRlck9iamVjdCkpIHsKKyAgICAgICAgaWYgKGRpc3BsYWNlRm9jdXMgJiYgdGhlbWUtPmlz
UHJlc3NlZChyZW5kZXJPYmplY3QpKSB7CiAgICAgICAgICAgICBnaW50IGNoaWxkRGlzcGxhY2Vt
ZW50WDsKICAgICAgICAgICAgIGdpbnQgY2hpbGREaXNwbGFjZW1lbnRZOwogICAgICAgICAgICAg
Z3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsCkBAIC0yODYsNTMgKzI4NywyNDEg
QEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJP
YmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGEKIAogICAgICAgICBndGtfcmVuZGVyX2ZvY3VzKGNv
bnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgYnV0dG9uUmVjdC54
KCksIGJ1dHRvblJlY3QueSgpLCBidXR0b25SZWN0LndpZHRoKCksIGJ1dHRvblJlY3QuaGVpZ2h0
KCkpOwogICAgIH0KK30KK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50QnV0dG9uKFJlbmRlck9i
amVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNv
bnRleHQoR1RLX1RZUEVfQlVUVE9OKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRl
eHQpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBzdGF0
aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+
c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNz
KGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19CVVRUT04pOworCisgICAgcmVuZGVyQnV0dG9uKHRo
aXMsIGNvbnRleHQsIHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKIAogICAgIGd0a19z
dHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXN0YXRpYyB2b2lkIGdldENvbWJvQm94UGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUsIGludCYg
bGVmdCwgaW50JiB0b3AsIGludCYgcmlnaHQsIGludCYgYm90dG9tKQorc3RhdGljIHZvaWQgZ2V0
Q29tYm9Cb3hNZXRyaWNzKFJlbmRlclN0eWxlKiBzdHlsZSwgR3RrQm9yZGVyJiBib3JkZXIsIGlu
dCYgZm9jdXMsIGludCYgc2VwYXJhdG9yKQogewogICAgIC8vIElmIHRoaXMgbWVudSBsaXN0IGJ1
dHRvbiBpc24ndCBkcmF3biB1c2luZyB0aGUgbmF0aXZlIHRoZW1lLCB3ZQogICAgIC8vIGRvbid0
IGFkZCBhbnkgZXh0cmEgcGFkZGluZyBiZXlvbmQgd2hhdCBXZWJDb3JlIGFscmVhZHkgdXNlcy4K
ICAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBOb0NvbnRyb2xQYXJ0KQogICAgICAgICBy
ZXR1cm47Ci0gICAgbW96X2d0a19nZXRfd2lkZ2V0X2JvcmRlcihNT1pfR1RLX0RST1BET1dOLCAm
bGVmdCwgJnRvcCwgJnJpZ2h0LCAmYm90dG9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ3RrVGV4dERpcmVjdGlvbihzdHlsZS0+ZGlyZWN0aW9uKCkpLCBUUlVFKTsKKworICAgIEd0
a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9CVVRUT04p
OworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7CisKKyAgICBndGtfc3R5bGVf
Y29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0JVVFRPTik7CisgICAg
Z3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtU
ZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHN0eWxlLT5kaXJlY3Rpb24oKSkpKTsKKwor
ICAgIEd0a0JvcmRlciBib3JkZXJXaWR0aDsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfYm9y
ZGVyKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KDApLCAmYm9yZGVyV2lkdGgp
OworICAgIGJvcmRlciA9IGJvcmRlcldpZHRoOworCisgICAgZ2Jvb2xlYW4gaW50ZXJpb3JGb2N1
czsKKyAgICBnaW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOworICAgIGd0a19zdHlsZV9jb250ZXh0
X2dldF9zdHlsZShjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50
ZXJpb3ItZm9jdXMiLCAmaW50ZXJpb3JGb2N1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImZvY3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNXaWR0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImZvY3VzLXBhZGRpbmciLCAmZm9jdXNQYWQsIE5VTEwpOworICAgIGZv
Y3VzID0gaW50ZXJpb3JGb2N1cyA/IGZvY3VzV2lkdGggKyBmb2N1c1BhZCA6IDA7CisKKyAgICBn
dGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOworCisgICAgY29udGV4dCA9IGdldFN0
eWxlQ29udGV4dChHVEtfVFlQRV9TRVBBUkFUT1IpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3Nh
dmUoY29udGV4dCk7CisKKyAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0YXRpY19j
YXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24oc3R5bGUtPmRpcmVjdGlvbigp
KSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBkaXJlY3Rp
b24pOworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCAic2VwYXJhdG9y
Iik7CisKKyAgICBnYm9vbGVhbiB3aWRlU2VwYXJhdG9yczsKKyAgICBnaW50IHNlcGFyYXRvcldp
ZHRoOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAid2lkZS1zZXBhcmF0b3JzIiwgJndpZGVTZXBhcmF0b3Jz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VwYXJhdG9yLXdpZHRoIiwgJnNl
cGFyYXRvcldpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKwor
ICAgIGlmICghd2lkZVNlcGFyYXRvcnMpCisgICAgICAgIHNlcGFyYXRvcldpZHRoID0gYm9yZGVy
LmxlZnQ7CisKKyAgICBzZXBhcmF0b3IgPSBzZXBhcmF0b3JXaWR0aDsKKworICAgIGd0a19zdHls
ZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7CiB9CiAKIGludCBSZW5kZXJUaGVtZUd0azo6cG9w
dXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKLSAgICBp
bnQgbGVmdCA9IDAsIHRvcCA9IDAsIHJpZ2h0ID0gMCwgYm90dG9tID0gMDsKLSAgICBnZXRDb21i
b0JveFBhZGRpbmcoc3R5bGUsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgR3RrQm9y
ZGVyIGJvcmRlcldpZHRoID0geyAwLCAwLCAwLCAwIH07CisgICAgaW50IGZvY3VzV2lkdGggPSAw
LCBzZXBhcmF0b3JXaWR0aCA9IDA7CisgICAgZ2V0Q29tYm9Cb3hNZXRyaWNzKHN0eWxlLCBib3Jk
ZXJXaWR0aCwgZm9jdXNXaWR0aCwgc2VwYXJhdG9yV2lkdGgpOworICAgIGludCBsZWZ0ID0gYm9y
ZGVyV2lkdGgubGVmdCArIGZvY3VzV2lkdGg7CisgICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9
PSBSVEwpCisgICAgICAgIGxlZnQgKz0gc2VwYXJhdG9yV2lkdGggKyBtaW5BcnJvd1NpemU7CiAg
ICAgcmV0dXJuIGxlZnQ7CiB9CiAKIGludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBh
ZGRpbmdSaWdodChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7Ci0gICAgaW50IGxlZnQgPSAw
LCB0b3AgPSAwLCByaWdodCA9IDAsIGJvdHRvbSA9IDA7Ci0gICAgZ2V0Q29tYm9Cb3hQYWRkaW5n
KHN0eWxlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIEd0a0JvcmRlciBib3JkZXJX
aWR0aCA9IHsgMCwgMCwgMCwgMCB9OworICAgIGludCBmb2N1c1dpZHRoID0gMCwgc2VwYXJhdG9y
V2lkdGggPSAwOworICAgIGdldENvbWJvQm94TWV0cmljcyhzdHlsZSwgYm9yZGVyV2lkdGgsIGZv
Y3VzV2lkdGgsIHNlcGFyYXRvcldpZHRoKTsKKyAgICBpbnQgcmlnaHQgPSBib3JkZXJXaWR0aC5y
aWdodCArIGZvY3VzV2lkdGg7CisgICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBMVFIpCisg
ICAgICAgIHJpZ2h0ICs9IHNlcGFyYXRvcldpZHRoICsgbWluQXJyb3dTaXplOwogICAgIHJldHVy
biByaWdodDsKIH0KIAogaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ1Rv
cChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7Ci0gICAgaW50IGxlZnQgPSAwLCB0b3AgPSAw
LCByaWdodCA9IDAsIGJvdHRvbSA9IDA7Ci0gICAgZ2V0Q29tYm9Cb3hQYWRkaW5nKHN0eWxlLCBs
ZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwotICAgIHJldHVybiB0b3A7CisgICAgR3RrQm9yZGVy
IGJvcmRlcldpZHRoID0geyAwLCAwLCAwLCAwIH07CisgICAgaW50IGZvY3VzV2lkdGggPSAwLCBz
ZXBhcmF0b3JXaWR0aCA9IDA7CisgICAgZ2V0Q29tYm9Cb3hNZXRyaWNzKHN0eWxlLCBib3JkZXJX
aWR0aCwgZm9jdXNXaWR0aCwgc2VwYXJhdG9yV2lkdGgpOworICAgIHJldHVybiBib3JkZXJXaWR0
aC50b3AgKyBmb2N1c1dpZHRoOwogfQogCiBpbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJu
YWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKLSAgICBpbnQgbGVm
dCA9IDAsIHRvcCA9IDAsIHJpZ2h0ID0gMCwgYm90dG9tID0gMDsKLSAgICBnZXRDb21ib0JveFBh
ZGRpbmcoc3R5bGUsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7Ci0gICAgcmV0dXJuIGJvdHRv
bTsKKyAgICBHdGtCb3JkZXIgYm9yZGVyV2lkdGggPSB7IDAsIDAsIDAsIDAgfTsKKyAgICBpbnQg
Zm9jdXNXaWR0aCA9IDAsIHNlcGFyYXRvcldpZHRoID0gMDsKKyAgICBnZXRDb21ib0JveE1ldHJp
Y3Moc3R5bGUsIGJvcmRlcldpZHRoLCBmb2N1c1dpZHRoLCBzZXBhcmF0b3JXaWR0aCk7CisgICAg
cmV0dXJuIGJvcmRlcldpZHRoLmJvdHRvbSArIGZvY3VzV2lkdGg7CiB9CiAKLWJvb2wgUmVuZGVy
VGhlbWVHdGs6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50
SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBh
aW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIHJldHVybiBwYWludFJlbmRl
ck9iamVjdChNT1pfR1RLX0RST1BET1dOLCBvYmplY3QsIGluZm8uY29udGV4dCwgcmVjdCk7Cisg
ICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0
aW9uPihndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkp
KTsKKworICAgIC8vIFBhaW50IHRoZSBidXR0b24uCisgICAgR3RrU3R5bGVDb250ZXh0KiBjb250
ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0JVVFRPTik7CisgICAgZ3RrX3N0eWxlX2Nv
bnRleHRfc2F2ZShjb250ZXh0KTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9u
KGNvbnRleHQsIGRpcmVjdGlvbik7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNv
bnRleHQsIEdUS19TVFlMRV9DTEFTU19CVVRUT04pOworCisgICAgcmVuZGVyQnV0dG9uKHRoaXMs
IGNvbnRleHQsIHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKKworICAgIC8vIFNhdmUg
dGhlIHN0YXRlLgorICAgIEd0a1N0YXRlRmxhZ3Mgc3RhdGUgPSBndGtfc3R5bGVfY29udGV4dF9n
ZXRfc3RhdGUoY29udGV4dCk7CisKKyAgICAvLyBHZXQgdGhlIGlubmVyIHJlY3RhbmdsZS4KKyAg
ICBnaW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOworICAgIEd0a0JvcmRlciogaW5uZXJCb3JkZXJQ
dHIgPSAwOworICAgIEd0a0JvcmRlciBpbm5lckJvcmRlciA9IHsgMSwgMSwgMSwgMSB9OworICAg
IGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiaW5uZXItYm9yZGVyIiwgJmlubmVyQm9yZGVyUHRyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZm9jdXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1Bh
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgaWYgKGlubmVy
Qm9yZGVyUHRyKSB7CisgICAgICAgIGlubmVyQm9yZGVyID0gKmlubmVyQm9yZGVyUHRyOworICAg
ICAgICBndGtfYm9yZGVyX2ZyZWUoaW5uZXJCb3JkZXJQdHIpOworICAgIH0KKyAgICBHdGtCb3Jk
ZXIgYm9yZGVyV2lkdGg7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JvcmRlcihjb250ZXh0
LCBzdGF0ZSwgJmJvcmRlcldpZHRoKTsKKworICAgIGZvY3VzV2lkdGggKz0gZm9jdXNQYWQ7Cisg
ICAgSW50UmVjdCBpbm5lclJlY3QocmVjdC54KCkgKyBpbm5lckJvcmRlci5sZWZ0ICsgYm9yZGVy
V2lkdGgubGVmdCArIGZvY3VzV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgcmVjdC55KCkg
KyBpbm5lckJvcmRlci50b3AgKyBib3JkZXJXaWR0aC50b3AgKyBmb2N1c1dpZHRoLAorICAgICAg
ICAgICAgICAgICAgICAgIHJlY3Qud2lkdGgoKSAtIGJvcmRlcldpZHRoLmxlZnQgLSBib3JkZXJX
aWR0aC5yaWdodCAtIGlubmVyQm9yZGVyLmxlZnQgLSBpbm5lckJvcmRlci5yaWdodCAtICgyICog
Zm9jdXNXaWR0aCksCisgICAgICAgICAgICAgICAgICAgICAgcmVjdC5oZWlnaHQoKSAtIGJvcmRl
cldpZHRoLnRvcCAtIGJvcmRlcldpZHRoLmJvdHRvbSAtIGlubmVyQm9yZGVyLnRvcCAtIGlubmVy
Qm9yZGVyLmJvdHRvbSAtICgyICogZm9jdXNXaWR0aCkpOworCisgICAgaWYgKGlzUHJlc3NlZChy
ZW5kZXJPYmplY3QpKSB7CisgICAgICAgIGdpbnQgY2hpbGREaXNwbGFjZW1lbnRYOworICAgICAg
ICBnaW50IGNoaWxkRGlzcGxhY2VtZW50WTsKKyAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0
X3N0eWxlKGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hp
bGQtZGlzcGxhY2VtZW50LXgiLCAmY2hpbGREaXNwbGFjZW1lbnRYLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImNoaWxkLWRpc3BsYWNlbWVudC15IiwgJmNoaWxkRGlzcGxh
Y2VtZW50WSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAg
ICAgICBpbm5lclJlY3QubW92ZShjaGlsZERpc3BsYWNlbWVudFgsIGNoaWxkRGlzcGxhY2VtZW50
WSk7CisgICAgfQorICAgIGlubmVyUmVjdC5zZXRXaWR0aChtYXgoMSwgaW5uZXJSZWN0LndpZHRo
KCkpKTsKKyAgICBpbm5lclJlY3Quc2V0SGVpZ2h0KG1heCgxLCBpbm5lclJlY3QuaGVpZ2h0KCkp
KTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7CisKKyAgICAvLyBQ
YWludCB0aGUgYXJyb3cuCisgICAgY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9B
UlJPVyk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKKworICAgIGd0a19z
dHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgZGlyZWN0aW9uKTsKKyAgICBndGtf
c3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgImFycm93Iik7CisgICAgZ3RrX3N0eWxl
X2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19CVVRUT04pOworCisg
ICAgZ2Zsb2F0IGFycm93U2NhbGluZzsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUo
Y29udGV4dCwgImFycm93LXNjYWxpbmciLCAmYXJyb3dTY2FsaW5nLCBOVUxMKTsKKworICAgIElu
dFNpemUgYXJyb3dTaXplKG1pbkFycm93U2l6ZSwgaW5uZXJSZWN0LmhlaWdodCgpKTsKKyAgICBJ
bnRQb2ludCBhcnJvd1Bvc2l0aW9uID0gaW5uZXJSZWN0LmxvY2F0aW9uKCk7CisgICAgaWYgKGRp
cmVjdGlvbiA9PSBHVEtfVEVYVF9ESVJfTFRSKQorICAgICAgICBhcnJvd1Bvc2l0aW9uLm1vdmUo
aW5uZXJSZWN0LndpZHRoKCkgLSBhcnJvd1NpemUud2lkdGgoKSwgMCk7CisKKyAgICBnaW50IGV4
dGVudCA9IG1pbihhcnJvd1NpemUud2lkdGgoKSwgYXJyb3dTaXplLmhlaWdodCgpKSAqIGFycm93
U2NhbGluZzsKKyAgICBnZmxvYXQgeGFsaWduID0gMC41OworICAgIGdmbG9hdCB5YWxpZ24gPSAw
LjU7CisgICAgaWYgKGRpcmVjdGlvbiAhPSBHVEtfVEVYVF9ESVJfTFRSKQorICAgICAgICB4YWxp
Z24gPSAxLjAgLSB4YWxpZ247CisgICAgYXJyb3dQb3NpdGlvbi5tb3ZlKGZsb29yKChhcnJvd1Np
emUud2lkdGgoKSAtIGV4dGVudCkgKiB4YWxpZ24pLCBmbG9vcigoYXJyb3dTaXplLmhlaWdodCgp
IC0gZXh0ZW50KSAqIHlhbGlnbikpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRl
KGNvbnRleHQsIHN0YXRlKTsKKyAgICBndGtfcmVuZGVyX2Fycm93KGNvbnRleHQsIHBhaW50SW5m
by5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgR19QSSwgYXJyb3dQb3NpdGlvbi54KCksIGFy
cm93UG9zaXRpb24ueSgpLCBleHRlbnQpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9y
ZShjb250ZXh0KTsKKworICAgIC8vIFBhaW50IHRoZSBzZXBhcmF0b3IgaWYgbmVlZGVkLgorICAg
IGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfU0VQQVJBVE9SKTsKKyAgICBndGtf
c3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0
X2RpcmVjdGlvbihjb250ZXh0LCBkaXJlY3Rpb24pOworICAgIGd0a19zdHlsZV9jb250ZXh0X2Fk
ZF9jbGFzcyhjb250ZXh0LCAic2VwYXJhdG9yIik7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRk
X2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19CVVRUT04pOworCisgICAgZ2Jvb2xlYW4g
d2lkZVNlcGFyYXRvcnM7CisgICAgZ2ludCBzZXBhcmF0b3JXaWR0aDsKKyAgICBndGtfc3R5bGVf
Y29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIndpZGUtc2VwYXJhdG9ycyIsICZ3aWRlU2VwYXJhdG9ycywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInNlcGFyYXRvci13aWR0aCIsICZzZXBhcmF0b3JXaWR0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgaWYgKHdpZGVTZXBhcmF0b3Jz
ICYmICFzZXBhcmF0b3JXaWR0aCkgeworICAgICAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3Jl
KGNvbnRleHQpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZ3RrX3N0eWxl
X2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIHN0YXRlKTsKKworICAgIEludFBvaW50IHNlcGFy
YXRvclBvc2l0aW9uKGFycm93UG9zaXRpb24ueCgpLCBpbm5lclJlY3QueSgpKTsKKworICAgIGlm
ICh3aWRlU2VwYXJhdG9ycykgeworICAgICAgICBpZiAoZGlyZWN0aW9uID09IEdUS19URVhUX0RJ
Ul9MVFIpCisgICAgICAgICAgICBzZXBhcmF0b3JQb3NpdGlvbi5tb3ZlKC1zZXBhcmF0b3JXaWR0
aCwgMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNlcGFyYXRvclBvc2l0aW9uLm1vdmUo
YXJyb3dTaXplLndpZHRoKCksIDApOworCisgICAgICAgIGd0a19yZW5kZXJfZnJhbWUoY29udGV4
dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBzZXBhcmF0b3JQb3NpdGlv
bi54KCksIHNlcGFyYXRvclBvc2l0aW9uLnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBz
ZXBhcmF0b3JXaWR0aCwgaW5uZXJSZWN0LmhlaWdodCgpKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBHdGtCb3JkZXIgcGFkZGluZzsKKyAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3BhZGRp
bmcoY29udGV4dCwgc3RhdGUsICZwYWRkaW5nKTsKKyAgICAgICAgR3RrQm9yZGVyIGJvcmRlcjsK
KyAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JvcmRlcihjb250ZXh0LCBzdGF0ZSwgJmJv
cmRlcik7CisKKyAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBHVEtfVEVYVF9ESVJfTFRSKQorICAg
ICAgICAgICAgc2VwYXJhdG9yUG9zaXRpb24ubW92ZSgtKHBhZGRpbmcubGVmdCArIGJvcmRlci5s
ZWZ0KSwgMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNlcGFyYXRvclBvc2l0aW9uLm1v
dmUoYXJyb3dTaXplLndpZHRoKCksIDApOworCisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5z
YXZlKCk7CisgICAgICAgIGNhaXJvX3JlY3RhbmdsZShwYWludEluZm8uY29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCksIHNlcGFyYXRvclBvc2l0aW9uLngoKSwgc2VwYXJhdG9yUG9zaXRpb24ueSgp
LCBib3JkZXIubGVmdCwgaW5uZXJSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgY2Fpcm9fY2xpcChw
YWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOworICAgICAgICBndGtfcmVuZGVy
X2xpbmUoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBzZXBh
cmF0b3JQb3NpdGlvbi54KCksIHNlcGFyYXRvclBvc2l0aW9uLnkoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHNlcGFyYXRvclBvc2l0aW9uLngoKSwgaW5uZXJSZWN0LmJvdHRvbSgpKTsKKyAg
ICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICB9CisKKyAgICBndGtfc3R5
bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOworCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBi
b29sIFJlbmRlclRoZW1lR3RrOjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG9iamVjdCwg
Y29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78422</attachid>
            <date>2011-01-10 11:57:25 -0800</date>
            <delta_ts>2011-01-10 12:24:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51828-20110110115725.patch</filename>
            <type>text/plain</type>
            <size>16557</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1NjJmYzljYTRiZjJiMjY5ZjdjNGQ5NzA5YjQ3MjBkN2ViNjQ1OWU4Li45
OTRjMDM5YTJjOTAyZWNkOGEzNmQyNTU0NTFiNWZjZTUwZWQ5ZmJjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjggQEAKKzIwMTEtMDEtMTAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBp
Z2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFtHVEtdIFBvcnQgY29tYm8gYm94IHBhaW50aW5nIHRvIEd0a1N0eWxlQ29udGV4dAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE4MjgKKworICAg
ICAgICBVc2UgR3RrU3R5bGVDb250ZXh0IEFQSSB0byBwYWludCBjb21ibyBib3hlcyB3aGVuIGJ1
aWxkaW5nIHdpdGgKKyAgICAgICAgR1RLKyAzLnguIE1ldGhvZCBwYWludEJ1dHRvbigpIGhhcyBi
ZWVuIGZhY3RvcmVkIG91dCBhbmQgdGhlIG5ldworICAgICAgICBzdGF0aWMgbWV0aG9kIHJlbmRl
ckJ1dHRvbigpIGlzIHVzZWQgYnkgYm90aCBwYWludEJ1dHRvbigpIGFuZAorICAgICAgICBwYWlu
dE1lbnVMaXN0KCkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlzIHNob3VsZCBub3QgY2hh
bmdlIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVH
dGszLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RSZXBhaW50
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpyZW5kZXJCdXR0b24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OmdldENv
bWJvQm94TWV0cmljcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cG9wdXBJ
bnRlcm5hbFBhZGRpbmdMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpw
b3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
R3RrOjpwb3B1cEludGVybmFsUGFkZGluZ1RvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3QpOgorCiAyMDExLTAxLTEwICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQ7IGJ1aWxkIGZpeCBm
b3Igcjc1Mzg1LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRl
clRoZW1lR3RrMy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVH
dGszLmNwcAppbmRleCA2ZDQxNGI3Y2ZmOGM3ZDhhMGU3N2FlZDJiOWZkODkyNzZmNThiNGMyLi41
OWVlZDVjZjQzNjRmYjBiYmQyMzUyM2JiNjZlMDU1M2QxMWI1MTkyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcApAQCAtNDUsOCArNDUsMTMg
QEAKICNpbmNsdWRlICJSZW5kZXJQcm9ncmVzcy5oIgogI2VuZGlmCiAKK3VzaW5nIG5hbWVzcGFj
ZSBzdGQ7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gVGhpcyBpcyB0aGUgZGVmYXVsdCB2
YWx1ZSBkZWZpbmVkIGJ5IEdUSyssIHdoZXJlIGl0IHdhcyBkZWZpbmVkIGFzIE1JTl9BUlJPV19T
SVpFIGluIGd0a2Fycm93LmMuCitzdGF0aWMgY29uc3QgaW50IG1pbkFycm93U2l6ZSA9IDE1Owor
CiB0eXBlZGVmIEhhc2hNYXA8R1R5cGUsIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiA+IFN0eWxl
Q29udGV4dE1hcDsKIHN0YXRpYyBTdHlsZUNvbnRleHRNYXAmIHN0eWxlQ29udGV4dE1hcCgpOwog
CkBAIC0xMzAsNiArMTM1LDggQEAgdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0UmVwYWludFJl
Y3QoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIEludFJlY3QKICAgICAgICAgY29u
dGV4dCA9IGdldFN0eWxlQ29udGV4dChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQg
PyAgR1RLX1RZUEVfSFNDQUxFIDogR1RLX1RZUEVfVlNDQUxFKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBCdXR0b25QYXJ0OgorICAgIGNhc2UgTWVudWxpc3RCdXR0b25QYXJ0OgorICAgIGNh
c2UgTWVudWxpc3RQYXJ0OgogICAgICAgICBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19U
WVBFX0JVVFRPTik7CiAgICAgICAgIGNoZWNrSW50ZXJpb3JGb2N1cyA9IHRydWU7CiAgICAgICAg
IGJyZWFrOwpAQCAtMjc0LDE3ICsyODEsMjAgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRS
YWRpbyhSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWkKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50QnV0dG9uKFJl
bmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcmVjdCkKK3N0YXRpYyB2b2lkIHJlbmRlckJ1dHRvbihSZW5kZXJUaGVtZSog
dGhlbWUsIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmpl
Y3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewot
ICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9C
VVRUT04pOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7Ci0KLSAgICBndGtf
c3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1RleHRE
aXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rp
b24oKSkpKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NU
WUxFX0NMQVNTX0JVVFRPTik7Ci0KICAgICBJbnRSZWN0IGJ1dHRvblJlY3QocmVjdCk7CiAKLSAg
ICBpZiAoaXNEZWZhdWx0KHJlbmRlck9iamVjdCkpIHsKKyAgICBndWludCBmbGFncyA9IDA7Cisg
ICAgaWYgKCF0aGVtZS0+aXNFbmFibGVkKHJlbmRlck9iamVjdCkgfHwgdGhlbWUtPmlzUmVhZE9u
bHlDb250cm9sKHJlbmRlck9iamVjdCkpCisgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFH
X0lOU0VOU0lUSVZFOworICAgIGVsc2UgaWYgKHRoZW1lLT5pc0hvdmVyZWQocmVuZGVyT2JqZWN0
KSkKKyAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfUFJFTElHSFQ7CisgICAgaWYgKHRo
ZW1lLT5pc1ByZXNzZWQocmVuZGVyT2JqZWN0KSkKKyAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRF
X0ZMQUdfQUNUSVZFOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBz
dGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykpOworCisgICAgaWYgKHRoZW1lLT5pc0Rl
ZmF1bHQocmVuZGVyT2JqZWN0KSkgewogICAgICAgICBHdGtCb3JkZXIqIGJvcmRlclB0ciA9IDA7
CiAgICAgICAgIEd0a0JvcmRlciBib3JkZXIgPSB7IDEsIDEsIDEsIDEgfTsKIApAQCAtMzAxLDE5
ICszMTEsMTAgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0
KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGEKICAgICAgICAgZ3RrX3N0eWxlX2Nv
bnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19ERUZBVUxUKTsKICAgICB9
CiAKLSAgICBndWludCBmbGFncyA9IDA7Ci0gICAgaWYgKCFpc0VuYWJsZWQocmVuZGVyT2JqZWN0
KSB8fCBpc1JlYWRPbmx5Q29udHJvbChyZW5kZXJPYmplY3QpKQotICAgICAgICBmbGFncyB8PSBH
VEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsKLSAgICBlbHNlIGlmIChpc0hvdmVyZWQocmVuZGVy
T2JqZWN0KSkKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfUFJFTElHSFQ7Ci0gICAg
aWYgKGlzUHJlc3NlZChyZW5kZXJPYmplY3QpKQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVf
RkxBR19BQ1RJVkU7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIHN0
YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSk7Ci0KICAgICBndGtfcmVuZGVyX2JhY2tn
cm91bmQoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBidXR0
b25SZWN0LngoKSwgYnV0dG9uUmVjdC55KCksIGJ1dHRvblJlY3Qud2lkdGgoKSwgYnV0dG9uUmVj
dC5oZWlnaHQoKSk7CiAgICAgZ3RrX3JlbmRlcl9mcmFtZShjb250ZXh0LCBwYWludEluZm8uY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIGJ1dHRvblJlY3QueCgpLCBidXR0b25SZWN0LnkoKSwg
YnV0dG9uUmVjdC53aWR0aCgpLCBidXR0b25SZWN0LmhlaWdodCgpKTsKIAotICAgIGlmIChpc0Zv
Y3VzZWQocmVuZGVyT2JqZWN0KSkgeworICAgIGlmICh0aGVtZS0+aXNGb2N1c2VkKHJlbmRlck9i
amVjdCkpIHsKICAgICAgICAgZ2ludCBmb2N1c1dpZHRoLCBmb2N1c1BhZDsKICAgICAgICAgZ2Jv
b2xlYW4gZGlzcGxhY2VGb2N1cywgaW50ZXJpb3JGb2N1czsKICAgICAgICAgZ3RrX3N0eWxlX2Nv
bnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsCkBAIC0zMzMsNyArMzM0LDcgQEAgYm9vbCBSZW5kZXJU
aGVtZUd0azo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBh
aW50SW5mbyYgcGEKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBidXR0b25SZWN0LmluZmxh
dGUoZm9jdXNXaWR0aCArIGZvY3VzUGFkKTsKIAotICAgICAgICBpZiAoZGlzcGxhY2VGb2N1cyAm
JiBpc1ByZXNzZWQocmVuZGVyT2JqZWN0KSkgeworICAgICAgICBpZiAoZGlzcGxhY2VGb2N1cyAm
JiB0aGVtZS0+aXNQcmVzc2VkKHJlbmRlck9iamVjdCkpIHsKICAgICAgICAgICAgIGdpbnQgY2hp
bGREaXNwbGFjZW1lbnRYOwogICAgICAgICAgICAgZ2ludCBjaGlsZERpc3BsYWNlbWVudFk7CiAg
ICAgICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwKQEAgLTM0NSw1
MyArMzQ2LDIzOCBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludEJ1dHRvbihSZW5kZXJPYmpl
Y3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYQogCiAgICAgICAgIGd0a19yZW5k
ZXJfZm9jdXMoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBi
dXR0b25SZWN0LngoKSwgYnV0dG9uUmVjdC55KCksIGJ1dHRvblJlY3Qud2lkdGgoKSwgYnV0dG9u
UmVjdC5oZWlnaHQoKSk7CiAgICAgfQorfQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRCdXR0
b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9
IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9CVVRUT04pOworICAgIGd0a19zdHlsZV9jb250ZXh0
X3NhdmUoY29udGV4dCk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNv
bnRleHQsIHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24ocmVu
ZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpKTsKKyAgICBndGtfc3R5bGVfY29udGV4
dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0JVVFRPTik7CisKKyAgICByZW5k
ZXJCdXR0b24odGhpcywgY29udGV4dCwgcmVuZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwog
CiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKIAogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotc3RhdGljIHZvaWQgZ2V0Q29tYm9Cb3hQYWRkaW5nKFJlbmRlclN0eWxlKiBz
dHlsZSwgaW50JiBsZWZ0LCBpbnQmIHRvcCwgaW50JiByaWdodCwgaW50JiBib3R0b20pCitzdGF0
aWMgdm9pZCBnZXRDb21ib0JveE1ldHJpY3MoUmVuZGVyU3R5bGUqIHN0eWxlLCBHdGtCb3JkZXIm
IGJvcmRlciwgaW50JiBmb2N1cywgaW50JiBzZXBhcmF0b3IpCiB7CiAgICAgLy8gSWYgdGhpcyBt
ZW51IGxpc3QgYnV0dG9uIGlzbid0IGRyYXduIHVzaW5nIHRoZSBuYXRpdmUgdGhlbWUsIHdlCiAg
ICAgLy8gZG9uJ3QgYWRkIGFueSBleHRyYSBwYWRkaW5nIGJleW9uZCB3aGF0IFdlYkNvcmUgYWxy
ZWFkeSB1c2VzLgogICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE5vQ29udHJvbFBhcnQp
CiAgICAgICAgIHJldHVybjsKLSAgICBtb3pfZ3RrX2dldF93aWRnZXRfYm9yZGVyKE1PWl9HVEtf
RFJPUERPV04sICZsZWZ0LCAmdG9wLCAmcmlnaHQsICZib3R0b20sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBndGtUZXh0RGlyZWN0aW9uKHN0eWxlLT5kaXJlY3Rpb24oKSksIFRSVUUp
OworCisgICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19U
WVBFX0JVVFRPTik7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKKworICAg
IGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfQlVU
VE9OKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0YXRp
Y19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24oc3R5bGUtPmRpcmVjdGlv
bigpKSkpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JvcmRlcihjb250ZXh0LCBzdGF0
aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPigwKSwgJmJvcmRlcik7CisKKyAgICBnYm9vbGVhbiBpbnRl
cmlvckZvY3VzOworICAgIGdpbnQgZm9jdXNXaWR0aCwgZm9jdXNQYWQ7CisgICAgZ3RrX3N0eWxl
X2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJpbnRlcmlvci1mb2N1cyIsICZpbnRlcmlvckZvY3VzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZm9jdXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZCwgTlVMTCk7
CisgICAgZm9jdXMgPSBpbnRlcmlvckZvY3VzID8gZm9jdXNXaWR0aCArIGZvY3VzUGFkIDogMDsK
KworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7CisKKyAgICBjb250ZXh0
ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NFUEFSQVRPUik7CisgICAgZ3RrX3N0eWxlX2Nv
bnRleHRfc2F2ZShjb250ZXh0KTsKKworICAgIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uID0g
c3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihzdHlsZS0+ZGly
ZWN0aW9uKCkpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQs
IGRpcmVjdGlvbik7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsICJz
ZXBhcmF0b3IiKTsKKworICAgIGdib29sZWFuIHdpZGVTZXBhcmF0b3JzOworICAgIGdpbnQgc2Vw
YXJhdG9yV2lkdGg7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWRlLXNlcGFyYXRvcnMiLCAmd2lkZVNl
cGFyYXRvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXBhcmF0b3Itd2lk
dGgiLCAmc2VwYXJhdG9yV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V
TEwpOworCisgICAgLy8gR1RLKyBhbHdheXMgdXNlcyBib3JkZXIubGVmdCwgcmVnYXJkbGVzcyBv
ZiB0ZXh0IGRpcmVjdGlvbi4gU2VlIGd0a3NlcGVyYXRvci5jLgorICAgIGlmICghd2lkZVNlcGFy
YXRvcnMpCisgICAgICAgIHNlcGFyYXRvcldpZHRoID0gYm9yZGVyLmxlZnQ7CisKKyAgICBzZXBh
cmF0b3IgPSBzZXBhcmF0b3JXaWR0aDsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUo
Y29udGV4dCk7CiB9CiAKIGludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdM
ZWZ0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKLSAgICBpbnQgbGVmdCA9IDAsIHRvcCA9
IDAsIHJpZ2h0ID0gMCwgYm90dG9tID0gMDsKLSAgICBnZXRDb21ib0JveFBhZGRpbmcoc3R5bGUs
IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoID0g
eyAwLCAwLCAwLCAwIH07CisgICAgaW50IGZvY3VzV2lkdGggPSAwLCBzZXBhcmF0b3JXaWR0aCA9
IDA7CisgICAgZ2V0Q29tYm9Cb3hNZXRyaWNzKHN0eWxlLCBib3JkZXJXaWR0aCwgZm9jdXNXaWR0
aCwgc2VwYXJhdG9yV2lkdGgpOworICAgIGludCBsZWZ0ID0gYm9yZGVyV2lkdGgubGVmdCArIGZv
Y3VzV2lkdGg7CisgICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBSVEwpCisgICAgICAgIGxl
ZnQgKz0gc2VwYXJhdG9yV2lkdGggKyBtaW5BcnJvd1NpemU7CiAgICAgcmV0dXJuIGxlZnQ7CiB9
CiAKIGludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJT
dHlsZSogc3R5bGUpIGNvbnN0CiB7Ci0gICAgaW50IGxlZnQgPSAwLCB0b3AgPSAwLCByaWdodCA9
IDAsIGJvdHRvbSA9IDA7Ci0gICAgZ2V0Q29tYm9Cb3hQYWRkaW5nKHN0eWxlLCBsZWZ0LCB0b3As
IHJpZ2h0LCBib3R0b20pOworICAgIEd0a0JvcmRlciBib3JkZXJXaWR0aCA9IHsgMCwgMCwgMCwg
MCB9OworICAgIGludCBmb2N1c1dpZHRoID0gMCwgc2VwYXJhdG9yV2lkdGggPSAwOworICAgIGdl
dENvbWJvQm94TWV0cmljcyhzdHlsZSwgYm9yZGVyV2lkdGgsIGZvY3VzV2lkdGgsIHNlcGFyYXRv
cldpZHRoKTsKKyAgICBpbnQgcmlnaHQgPSBib3JkZXJXaWR0aC5yaWdodCArIGZvY3VzV2lkdGg7
CisgICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBMVFIpCisgICAgICAgIHJpZ2h0ICs9IHNl
cGFyYXRvcldpZHRoICsgbWluQXJyb3dTaXplOwogICAgIHJldHVybiByaWdodDsKIH0KIAogaW50
IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSogc3R5
bGUpIGNvbnN0CiB7Ci0gICAgaW50IGxlZnQgPSAwLCB0b3AgPSAwLCByaWdodCA9IDAsIGJvdHRv
bSA9IDA7Ci0gICAgZ2V0Q29tYm9Cb3hQYWRkaW5nKHN0eWxlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBi
b3R0b20pOwotICAgIHJldHVybiB0b3A7CisgICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoID0geyAw
LCAwLCAwLCAwIH07CisgICAgaW50IGZvY3VzV2lkdGggPSAwLCBzZXBhcmF0b3JXaWR0aCA9IDA7
CisgICAgZ2V0Q29tYm9Cb3hNZXRyaWNzKHN0eWxlLCBib3JkZXJXaWR0aCwgZm9jdXNXaWR0aCwg
c2VwYXJhdG9yV2lkdGgpOworICAgIHJldHVybiBib3JkZXJXaWR0aC50b3AgKyBmb2N1c1dpZHRo
OwogfQogCiBpbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKLSAgICBpbnQgbGVmdCA9IDAsIHRvcCA9IDAsIHJp
Z2h0ID0gMCwgYm90dG9tID0gMDsKLSAgICBnZXRDb21ib0JveFBhZGRpbmcoc3R5bGUsIGxlZnQs
IHRvcCwgcmlnaHQsIGJvdHRvbSk7Ci0gICAgcmV0dXJuIGJvdHRvbTsKKyAgICBHdGtCb3JkZXIg
Ym9yZGVyV2lkdGggPSB7IDAsIDAsIDAsIDAgfTsKKyAgICBpbnQgZm9jdXNXaWR0aCA9IDAsIHNl
cGFyYXRvcldpZHRoID0gMDsKKyAgICBnZXRDb21ib0JveE1ldHJpY3Moc3R5bGUsIGJvcmRlcldp
ZHRoLCBmb2N1c1dpZHRoLCBzZXBhcmF0b3JXaWR0aCk7CisgICAgcmV0dXJuIGJvcmRlcldpZHRo
LmJvdHRvbSArIGZvY3VzV2lkdGg7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVu
dUxpc3QoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3QoUmVuZGVy
T2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQogewotICAgIHJldHVybiBwYWludFJlbmRlck9iamVjdChNT1pfR1RLX0RS
T1BET1dOLCBvYmplY3QsIGluZm8uY29udGV4dCwgcmVjdCk7CisgICAgY2Fpcm9fdCogY2Fpcm9D
b250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIEd0a1Rl
eHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3Rr
VGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSk7CisKKyAg
ICAvLyBQYWludCB0aGUgYnV0dG9uLgorICAgIEd0a1N0eWxlQ29udGV4dCogYnV0dG9uU3R5bGVD
b250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0JVVFRPTik7CisgICAgZ3RrX3N0eWxl
X2NvbnRleHRfc2F2ZShidXR0b25TdHlsZUNvbnRleHQpOworICAgIGd0a19zdHlsZV9jb250ZXh0
X3NldF9kaXJlY3Rpb24oYnV0dG9uU3R5bGVDb250ZXh0LCBkaXJlY3Rpb24pOworICAgIGd0a19z
dHlsZV9jb250ZXh0X2FkZF9jbGFzcyhidXR0b25TdHlsZUNvbnRleHQsIEdUS19TVFlMRV9DTEFT
U19CVVRUT04pOworICAgIHJlbmRlckJ1dHRvbih0aGlzLCBidXR0b25TdHlsZUNvbnRleHQsIHJl
bmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKKworICAgIC8vIEdldCB0aGUgaW5uZXIgcmVj
dGFuZ2xlLgorICAgIGdpbnQgZm9jdXNXaWR0aCwgZm9jdXNQYWQ7CisgICAgR3RrQm9yZGVyKiBp
bm5lckJvcmRlclB0ciA9IDA7CisgICAgR3RrQm9yZGVyIGlubmVyQm9yZGVyID0geyAxLCAxLCAx
LCAxIH07CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGJ1dHRvblN0eWxlQ29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlubmVyLWJvcmRlciIsICZpbm5l
ckJvcmRlclB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLWxpbmUt
d2lkdGgiLCAmZm9jdXNXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZv
Y3VzLXBhZGRpbmciLCAmZm9jdXNQYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5VTEwpOworICAgIGlmIChpbm5lckJvcmRlclB0cikgeworICAgICAgICBpbm5lckJvcmRlciA9
ICppbm5lckJvcmRlclB0cjsKKyAgICAgICAgZ3RrX2JvcmRlcl9mcmVlKGlubmVyQm9yZGVyUHRy
KTsKKyAgICB9CisKKyAgICBHdGtCb3JkZXIgYm9yZGVyV2lkdGg7CisgICAgR3RrU3RhdGVGbGFn
cyBzdGF0ZSA9IGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZShidXR0b25TdHlsZUNvbnRleHQp
OworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9ib3JkZXIoYnV0dG9uU3R5bGVDb250ZXh0LCBz
dGF0ZSwgJmJvcmRlcldpZHRoKTsKKworICAgIGZvY3VzV2lkdGggKz0gZm9jdXNQYWQ7CisgICAg
SW50UmVjdCBpbm5lclJlY3QocmVjdC54KCkgKyBpbm5lckJvcmRlci5sZWZ0ICsgYm9yZGVyV2lk
dGgubGVmdCArIGZvY3VzV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgcmVjdC55KCkgKyBp
bm5lckJvcmRlci50b3AgKyBib3JkZXJXaWR0aC50b3AgKyBmb2N1c1dpZHRoLAorICAgICAgICAg
ICAgICAgICAgICAgIHJlY3Qud2lkdGgoKSAtIGJvcmRlcldpZHRoLmxlZnQgLSBib3JkZXJXaWR0
aC5yaWdodCAtIGlubmVyQm9yZGVyLmxlZnQgLSBpbm5lckJvcmRlci5yaWdodCAtICgyICogZm9j
dXNXaWR0aCksCisgICAgICAgICAgICAgICAgICAgICAgcmVjdC5oZWlnaHQoKSAtIGJvcmRlcldp
ZHRoLnRvcCAtIGJvcmRlcldpZHRoLmJvdHRvbSAtIGlubmVyQm9yZGVyLnRvcCAtIGlubmVyQm9y
ZGVyLmJvdHRvbSAtICgyICogZm9jdXNXaWR0aCkpOworCisgICAgaWYgKGlzUHJlc3NlZChyZW5k
ZXJPYmplY3QpKSB7CisgICAgICAgIGdpbnQgY2hpbGREaXNwbGFjZW1lbnRYOworICAgICAgICBn
aW50IGNoaWxkRGlzcGxhY2VtZW50WTsKKyAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0
eWxlKGJ1dHRvblN0eWxlQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJjaGlsZC1kaXNwbGFjZW1lbnQteCIsICZjaGlsZERpc3BsYWNlbWVudFgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hpbGQtZGlzcGxhY2VtZW50LXkiLCAmY2hp
bGREaXNwbGFjZW1lbnRZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM
TCk7CisgICAgICAgIGlubmVyUmVjdC5tb3ZlKGNoaWxkRGlzcGxhY2VtZW50WCwgY2hpbGREaXNw
bGFjZW1lbnRZKTsKKyAgICB9CisgICAgaW5uZXJSZWN0LnNldFdpZHRoKG1heCgxLCBpbm5lclJl
Y3Qud2lkdGgoKSkpOworICAgIGlubmVyUmVjdC5zZXRIZWlnaHQobWF4KDEsIGlubmVyUmVjdC5o
ZWlnaHQoKSkpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShidXR0b25TdHlsZUNv
bnRleHQpOworCisgICAgLy8gUGFpbnQgdGhlIGFycm93LgorICAgIEd0a1N0eWxlQ29udGV4dCog
YXJyb3dTdHlsZUNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQVJST1cpOworICAg
IGd0a19zdHlsZV9jb250ZXh0X3NhdmUoYXJyb3dTdHlsZUNvbnRleHQpOworCisgICAgZ3RrX3N0
eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihhcnJvd1N0eWxlQ29udGV4dCwgZGlyZWN0aW9uKTsK
KyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoYXJyb3dTdHlsZUNvbnRleHQsICJhcnJv
dyIpOworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhhcnJvd1N0eWxlQ29udGV4dCwg
R1RLX1NUWUxFX0NMQVNTX0JVVFRPTik7CisKKyAgICBnZmxvYXQgYXJyb3dTY2FsaW5nOworICAg
IGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShhcnJvd1N0eWxlQ29udGV4dCwgImFycm93LXNj
YWxpbmciLCAmYXJyb3dTY2FsaW5nLCBOVUxMKTsKKworICAgIEludFNpemUgYXJyb3dTaXplKG1p
bkFycm93U2l6ZSwgaW5uZXJSZWN0LmhlaWdodCgpKTsKKyAgICBJbnRQb2ludCBhcnJvd1Bvc2l0
aW9uID0gaW5uZXJSZWN0LmxvY2F0aW9uKCk7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBHVEtfVEVY
VF9ESVJfTFRSKQorICAgICAgICBhcnJvd1Bvc2l0aW9uLm1vdmUoaW5uZXJSZWN0LndpZHRoKCkg
LSBhcnJvd1NpemUud2lkdGgoKSwgMCk7CisKKyAgICAvLyBHVEsrIGFjdHVhbGx5IGZldGNoZXMg
dGhlIHhhbGlnbiBhbmQgdmFsaWduIHZhbHVlcyBmcm9tIHRoZSB3aWRnZXQsIGJ1dCBzaW5jZSB3
ZQorICAgIC8vIGRvbid0IGhhdmUgYSB3aWRnZXQgaGVyZSwgd2UgYXJlIGp1c3QgdXNpbmcgdGhl
IGRlZmF1bHQgeGFsaWduIGFuZCB2YWxpZ24gdmFsdWVzIG9mIDAuNS4KKyAgICBnaW50IGV4dGVu
dCA9IG1pbihhcnJvd1NpemUud2lkdGgoKSwgYXJyb3dTaXplLmhlaWdodCgpKSAqIGFycm93U2Nh
bGluZzsKKyAgICBhcnJvd1Bvc2l0aW9uLm1vdmUoZmxvb3IoKGFycm93U2l6ZS53aWR0aCgpIC0g
ZXh0ZW50KSAvIDIpLCBmbG9vcigoYXJyb3dTaXplLmhlaWdodCgpIC0gZXh0ZW50KSAvIDIpKTsK
KworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShhcnJvd1N0eWxlQ29udGV4dCwgc3Rh
dGUpOworICAgIGd0a19yZW5kZXJfYXJyb3coYXJyb3dTdHlsZUNvbnRleHQsIGNhaXJvQ29udGV4
dCwgR19QSSwgYXJyb3dQb3NpdGlvbi54KCksIGFycm93UG9zaXRpb24ueSgpLCBleHRlbnQpOwor
CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShhcnJvd1N0eWxlQ29udGV4dCk7CisKKyAg
ICAvLyBQYWludCB0aGUgc2VwYXJhdG9yIGlmIG5lZWRlZC4KKyAgICBHdGtTdHlsZUNvbnRleHQq
IHNlcGFyYXRvclN0eWxlQ29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TRVBBUkFU
T1IpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoc2VwYXJhdG9yU3R5bGVDb250ZXh0KTsK
KworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oc2VwYXJhdG9yU3R5bGVDb250
ZXh0LCBkaXJlY3Rpb24pOworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhzZXBhcmF0
b3JTdHlsZUNvbnRleHQsICJzZXBhcmF0b3IiKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRf
Y2xhc3Moc2VwYXJhdG9yU3R5bGVDb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKKwor
ICAgIGdib29sZWFuIHdpZGVTZXBhcmF0b3JzOworICAgIGdpbnQgc2VwYXJhdG9yV2lkdGg7Cisg
ICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKHNlcGFyYXRvclN0eWxlQ29udGV4dCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpZGUtc2VwYXJhdG9ycyIsICZ3aWRlU2Vw
YXJhdG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlcGFyYXRvci13aWR0
aCIsICZzZXBhcmF0b3JXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM
TCk7CisgICAgaWYgKHdpZGVTZXBhcmF0b3JzICYmICFzZXBhcmF0b3JXaWR0aCkgeworICAgICAg
ICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKHNlcGFyYXRvclN0eWxlQ29udGV4dCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3Rh
dGUoc2VwYXJhdG9yU3R5bGVDb250ZXh0LCBzdGF0ZSk7CisgICAgSW50UG9pbnQgc2VwYXJhdG9y
UG9zaXRpb24oYXJyb3dQb3NpdGlvbi54KCksIGlubmVyUmVjdC55KCkpOworICAgIGlmICh3aWRl
U2VwYXJhdG9ycykgeworICAgICAgICBpZiAoZGlyZWN0aW9uID09IEdUS19URVhUX0RJUl9MVFIp
CisgICAgICAgICAgICBzZXBhcmF0b3JQb3NpdGlvbi5tb3ZlKC1zZXBhcmF0b3JXaWR0aCwgMCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNlcGFyYXRvclBvc2l0aW9uLm1vdmUoYXJyb3dT
aXplLndpZHRoKCksIDApOworCisgICAgICAgIGd0a19yZW5kZXJfZnJhbWUoc2VwYXJhdG9yU3R5
bGVDb250ZXh0LCBjYWlyb0NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJh
dG9yUG9zaXRpb24ueCgpLCBzZXBhcmF0b3JQb3NpdGlvbi55KCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VwYXJhdG9yV2lkdGgsIGlubmVyUmVjdC5oZWlnaHQoKSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgR3RrQm9yZGVyIHBhZGRpbmc7CisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0
X2dldF9wYWRkaW5nKHNlcGFyYXRvclN0eWxlQ29udGV4dCwgc3RhdGUsICZwYWRkaW5nKTsKKyAg
ICAgICAgR3RrQm9yZGVyIGJvcmRlcjsKKyAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2Jv
cmRlcihzZXBhcmF0b3JTdHlsZUNvbnRleHQsIHN0YXRlLCAmYm9yZGVyKTsKKworICAgICAgICBp
ZiAoZGlyZWN0aW9uID09IEdUS19URVhUX0RJUl9MVFIpCisgICAgICAgICAgICBzZXBhcmF0b3JQ
b3NpdGlvbi5tb3ZlKC0ocGFkZGluZy5sZWZ0ICsgYm9yZGVyLmxlZnQpLCAwKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgc2VwYXJhdG9yUG9zaXRpb24ubW92ZShhcnJvd1NpemUud2lkdGgo
KSwgMCk7CisKKyAgICAgICAgY2Fpcm9fc2F2ZShjYWlyb0NvbnRleHQpOworCisgICAgICAgIC8v
IEFuIGV4dHJhIGNsaXAgcHJldmVudHMgdGhlIHNlcGFyYXRvciBibGVlZGluZyBvdXRzaWRlIG9m
IHRoZSBzcGVjaWZpZWQgcmVjdGFuZ2xlIGJlY2F1c2Ugb2Ygc3VicGl4ZWwgcG9zaXRpb25pbmcu
CisgICAgICAgIGNhaXJvX3JlY3RhbmdsZShjYWlyb0NvbnRleHQsIHNlcGFyYXRvclBvc2l0aW9u
LngoKSwgc2VwYXJhdG9yUG9zaXRpb24ueSgpLCBib3JkZXIubGVmdCwgaW5uZXJSZWN0LmhlaWdo
dCgpKTsKKyAgICAgICAgY2Fpcm9fY2xpcChjYWlyb0NvbnRleHQpOworICAgICAgICBndGtfcmVu
ZGVyX2xpbmUoc2VwYXJhdG9yU3R5bGVDb250ZXh0LCBjYWlyb0NvbnRleHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICBzZXBhcmF0b3JQb3NpdGlvbi54KCksIHNlcGFyYXRvclBvc2l0aW9uLnko
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRvclBvc2l0aW9uLngoKSwgaW5uZXJS
ZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgY2Fpcm9fcmVzdG9yZShjYWlyb0NvbnRleHQpOworICAg
IH0KKworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoc2VwYXJhdG9yU3R5bGVDb250ZXh0
KTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50VGV4
dEZpZWxkKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>