<?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>95559</bug_id>
          
          <creation_ts>2012-08-31 05:02:32 -0700</creation_ts>
          <short_desc>[CSS Regions] Implement region styling for font-size</short_desc>
          <delta_ts>2022-07-13 09:26:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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>101332</dependson>
          <blocked>71487</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Andrei Bucur">abucur</reporter>
          <assigned_to name="Andrei Bucur">abucur</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>donggwan.kim</cc>
    
    <cc>eric</cc>
    
    <cc>esprehn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hyatt</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mibalan</cc>
    
    <cc>mihnea</cc>
    
    <cc>rhudea</cc>
    
    <cc>WebkitBugTracker</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>709497</commentid>
    <comment_count>0</comment_count>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2012-08-31 05:02:32 -0700</bug_when>
    <thetext>The CSS Regions spec mentions that font properties support region styling:
http://www.w3.org/TR/css3-regions/#the-at-region-style-rule

Add support for the font-size property.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709606</commentid>
    <comment_count>1</comment_count>
      <attachid>161694</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2012-08-31 07:41:48 -0700</bug_when>
    <thetext>Created attachment 161694
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709612</commentid>
    <comment_count>2</comment_count>
      <attachid>161696</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2012-08-31 07:47:45 -0700</bug_when>
    <thetext>Created attachment 161696
A test file to play with

A test file to play with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709613</commentid>
    <comment_count>3</comment_count>
      <attachid>161696</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2012-08-31 07:48:10 -0700</bug_when>
    <thetext>Comment on attachment 161696
A test file to play with

Move the loupe with the mouse or the buttons.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709658</commentid>
    <comment_count>4</comment_count>
      <attachid>161694</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2012-08-31 08:42:43 -0700</bug_when>
    <thetext>Comment on attachment 161694
Patch

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

r-

&gt; Source/WebCore/rendering/RenderBlock.cpp:6136
&gt; +    updateRegionStyleForOffset(logicalHeight() + paginationStrut());

Add an if (inRenderFlowThread()) check to avoid the function call for normal layout.

&gt; Source/WebCore/rendering/RenderBlock.cpp:7180
&gt; -    return rootBox-&gt;paginatedLineWidth() != availableLogicalWidthForContent(rootBox-&gt;lineTopWithLeading() + lineDelta);
&gt; +    return rootBox-&gt;paginatedLineWidth() != availableLogicalWidthForContent(rootBox-&gt;lineBottomWithLeading() + lineDelta);

This change is questionable. We use the top of lines for floats, and the intent here is to match that heuristic. Not sure why a change is necessary here?

&gt; Source/WebCore/rendering/RenderBlock.cpp:7211
&gt; +    // HACK to skip the regions with height 0.
&gt; +    LayoutUnit pageLogicalHeight = pageLogicalHeightForOffset(blockOffset);
&gt; +    if (!pageLogicalHeight)
&gt; +        return;

Can&apos;t we just fix regionAtBlockOffset to never return a zero-height region?

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:1287
&gt; +    // FIXME: styleToUse can be cached because no region stylable property is used below

I don&apos;t understand this FIXME.

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:1389
&gt; +                    // If the block got shifted for pagination; we need to take the strut into consideration.
&gt; +                    if (adjustment || oldPaginationStrut != newPaginationStrut) {

Not quite following this. The strut value changed but the adjustment is 0? When does that occur?

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:1395
&gt; +                        if (availableLogicalWidthForLine(oldLogicalHeight + adjustment + newPaginationStrut, layoutState.lineInfo().isFirstLine()) != oldLineWidth) {

This seems confusing to me. Why wasn&apos;t the newPaginationStrut factored into the adjustment if you&apos;re actually adding it in here?

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:1681
&gt; +                updateRegionStyleForOffset(curr-&gt;lineBottomWithLeading());
&gt; +                if (m_lineHeight == -1) {
&gt; +                    layoutState.markForFullLayout();
&gt; +                    break;
&gt; +                }

You&apos;re probably going to want updateRegionStyleForOffset to return a hint similar to RenderStyle::diff that helps you know what you have to do, e.g., a repaint, a relayout, etc. Just checking if line height cleared is way too specific to font-size, and you should be thinking more generally here.

I&apos;d pick lineTopWithLeading rather than the bottom, unless you have a compelling reason why bottom should be used.

&gt; Source/WebCore/rendering/RenderText.cpp:203
&gt; +void RenderText::styleInRegionDidChange(const RenderStyle* oldStyle)
&gt; +{
&gt; +    RenderObject::styleInRegionDidChange(oldStyle);
&gt; +    RenderBlock* containingBlock = this-&gt;containingBlock();
&gt; +    ASSERT(containingBlock);
&gt; +    // FIXME: Is this accurate? We want to invalidate the preferred width only at layout time.
&gt; +    if (!containingBlock-&gt;needsLayout())
&gt; +        return;
&gt; +    if (oldStyle-&gt;fontSize() != style()-&gt;fontSize())
&gt; +        setPreferredLogicalWidthsDirty(true, MarkOnlyThis);
&gt; +}
&gt; +

I really want to avoid class-specific methods for everything like this. You need to try to implement something that leverages the style diff stuff we&apos;ve already got to know if something is a repaint vs. a layout etc. and then do the right thing based off that hint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709677</commentid>
    <comment_count>5</comment_count>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2012-08-31 09:00:15 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 161694 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=161694&amp;action=review
&gt; 
&gt; r-
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBlock.cpp:6136
&gt; &gt; +    updateRegionStyleForOffset(logicalHeight() + paginationStrut());
&gt; 
&gt; Add an if (inRenderFlowThread()) check to avoid the function call for normal layout.
Will do.

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBlock.cpp:7180
&gt; &gt; -    return rootBox-&gt;paginatedLineWidth() != availableLogicalWidthForContent(rootBox-&gt;lineTopWithLeading() + lineDelta);
&gt; &gt; +    return rootBox-&gt;paginatedLineWidth() != availableLogicalWidthForContent(rootBox-&gt;lineBottomWithLeading() + lineDelta);
&gt; 
&gt; This change is questionable. We use the top of lines for floats, and the intent here is to match that heuristic. Not sure why a change is necessary here?
Because if we look at the top of the lines we don&apos;t catch the lines that fall in the middle of the region break (the top is in the good region, the bottom is in the bad region). Actually I think we should look both at the top of the line and at the bottom to be 100% certain a line crosses region boundaries.

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBlock.cpp:7211
&gt; &gt; +    // HACK to skip the regions with height 0.
&gt; &gt; +    LayoutUnit pageLogicalHeight = pageLogicalHeightForOffset(blockOffset);
&gt; &gt; +    if (!pageLogicalHeight)
&gt; &gt; +        return;
&gt; 
&gt; Can&apos;t we just fix regionAtBlockOffset to never return a zero-height region?
I wasn&apos;t sure it&apos;s ok to do it. If there&apos;s no problem, I&apos;ll change it.

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:1287
&gt; &gt; +    // FIXME: styleToUse can be cached because no region stylable property is used below
&gt; 
&gt; I don&apos;t understand this FIXME.
Yes, bad FIXME. Sorry about that. It was informative only.

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:1389
&gt; &gt; +                    // If the block got shifted for pagination; we need to take the strut into consideration.
&gt; &gt; +                    if (adjustment || oldPaginationStrut != newPaginationStrut) {
&gt; 
&gt; Not quite following this. The strut value changed but the adjustment is 0? When does that occur?
If the first line is the one that gets adjusted in adjustLinePositionForPagination, the whole block is shifted for pagination, leaving adjustment to 0. adjustment reflects the line shifts. paginationStrut reflects the block shifts.

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:1395
&gt; &gt; +                        if (availableLogicalWidthForLine(oldLogicalHeight + adjustment + newPaginationStrut, layoutState.lineInfo().isFirstLine()) != oldLineWidth) {
&gt; 
&gt; This seems confusing to me. Why wasn&apos;t the newPaginationStrut factored into the adjustment if you&apos;re actually adding it in here?
I didn&apos;t want to touch the adjustLinePositionForPagination just yet. As I said before, adjustment is for shifting the lines. There&apos;s no point in doing that if the block is already shifted with pagination strut.
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:1681
&gt; &gt; +                updateRegionStyleForOffset(curr-&gt;lineBottomWithLeading());
&gt; &gt; +                if (m_lineHeight == -1) {
&gt; &gt; +                    layoutState.markForFullLayout();
&gt; &gt; +                    break;
&gt; &gt; +                }
&gt; 
&gt; You&apos;re probably going to want updateRegionStyleForOffset to return a hint similar to RenderStyle::diff that helps you know what you have to do, e.g., a repaint, a relayout, etc. Just checking if line height cleared is way too specific to font-size, and you should be thinking more generally here.
I think I understand. My intent was to minimize the impact surface of this change, that is doing the full layout as less often as possible. Fine grained property invalidation seemed like a good option. A new type of Diff is necessary or using the old one is fine?
&gt; 
&gt; I&apos;d pick lineTopWithLeading rather than the bottom, unless you have a compelling reason why bottom should be used.
Again, this is about catching lines that fall in between regions. If the previous line was in a region, it&apos;s known (I think? or floats can change that?) that the current line top is also in that region. So checking the bottom seemed like a good option. We can look at the top as well and invalidate starting from the previous line. Is this how you see it?
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderText.cpp:203
&gt; &gt; +void RenderText::styleInRegionDidChange(const RenderStyle* oldStyle)
&gt; &gt; +{
&gt; &gt; +    RenderObject::styleInRegionDidChange(oldStyle);
&gt; &gt; +    RenderBlock* containingBlock = this-&gt;containingBlock();
&gt; &gt; +    ASSERT(containingBlock);
&gt; &gt; +    // FIXME: Is this accurate? We want to invalidate the preferred width only at layout time.
&gt; &gt; +    if (!containingBlock-&gt;needsLayout())
&gt; &gt; +        return;
&gt; &gt; +    if (oldStyle-&gt;fontSize() != style()-&gt;fontSize())
&gt; &gt; +        setPreferredLogicalWidthsDirty(true, MarkOnlyThis);
&gt; &gt; +}
&gt; &gt; +
&gt; 
&gt; I really want to avoid class-specific methods for everything like this. You need to try to implement something that leverages the style diff stuff we&apos;ve already got to know if something is a repaint vs. a layout etc. and then do the right thing based off that hint.
You mean that a class specific styleDidChange is not appropriate or that it needs to know only about the Diff, not the old style?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1883079</commentid>
    <comment_count>6</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2022-07-13 09:26:53 -0700</bug_when>
    <thetext>CSS Regions were removed in Bug 174978.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161694</attachid>
            <date>2012-08-31 07:41:48 -0700</date>
            <delta_ts>2012-08-31 08:42:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95559-20120831174135.patch</filename>
            <type>text/plain</type>
            <size>20128</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3MTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODQwYjM5MDFkNTI3NzBm
YjUwY2Y1NzE4ZmU0Mjk3ZjdjMjI5ZDViOS4uNGI0NzJmNmYzNTc1ZThlMzQyOGE1MDE1ZmE2ODc5
NWI0NjRjMGMwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDEyLTA4LTMxICBBbmRy
ZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgorCisgICAgICAgIFtDU1MgUmVnaW9uc10gSW1w
bGVtZW50IHJlZ2lvbiBzdHlsaW5nIGZvciBmb250LXNpemUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NTU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHByb3Bvc2VkIHBhdGNoIGxheXMgdGhlIGZv
dW5kYXRpb24gb2YgcmVnaW9uIHN0eWxpbmcgZm9yIGxheW91dCBwcm9wZXJ0aWVzLiBUaGUgYXBw
cm9hY2ggaW1wbGVtZW50cyBob29rcyBmb3IgZWFjaCByZW5kZXJlcgorICAgICAgICB0byBpbnZh
bGlkYXRlIGNhY2hlZCBwcm9wZXJ0aWVzIHdoZW4gdGhlIGN1cnJlbnQgcmVnaW9uIHN0eWxlIGNo
YW5nZXMgKFJlbmRlck9iamVjdDo6c3R5bGVJblJlZ2lvbkRpZENoYW5nZSkuCisgICAgICAgIFRo
ZSBwcm9wZXJ0eSB0aGF0J3MgYmVpbmcgaW1wbGVtZW50ZWQgaXMgZm9udC1zaXplLiBUaGUgYmln
Z2VzdCBrbm93biBpc3N1ZSB3aXRoIHRoaXMgaXMgdGhlIGZhY3QgdGhhdCBmb250LXJlbGF0aXZl
IHVuaXRzIGRvIG5vdAorICAgICAgICB3b3JrIGNvcnJlY3RseS4gVGhpcyBoYXBwZW5zIGJlY2F1
c2UgdGhlIHN0eWxlIG9iamVjdHMgYWxyZWFkeSBjb250YWluIHRoZSBjb3JyZWN0bHkgY29tcHV0
ZWQgdmFsdWVzIGluIHBpeGVscywgbWVhbmluZyBlYWNoIHByb3BlcnR5CisgICAgICAgIG5lZWRz
IHRvIGJlIHRyZWF0ZWQgc2VwYXJhdGVseSBmb3IgY2hhbmdlcyAobWFyZ2lucyBldGMuKTsKKwor
ICAgICAgICBUZXN0czogTm8gbmV3IHRlc3RzIHlldCwgd2FpdGluZyBmb3IgYXBwcm92YWwuCisK
KyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAqIHJlbmRl
cmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGbG93VGhy
ZWFkQ29udHJvbGxlcjo6bGF5b3V0UmVuZGVyTmFtZWRGbG93VGhyZWFkcyk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpzdHlsZUluUmVnaW9uRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OmxpbmVIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmxpbmVXaWR0aEZvclBhZ2luYXRlZExpbmVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjp1cGRhdGVSZWdpb25TdHlsZUZvck9mZnNldCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgIChSZW5kZXJCbG9jayk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OmRldGVybWluZVN0YXJ0UG9zaXRpb24pOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TmFtZWRGbG93VGhyZWFkOjpSZW5kZXJOYW1lZEZsb3dUaHJlYWQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjp1cGRhdGVSZWdpb25TdHlsZUlmTmVjZXNzYXJ5KToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dU
aHJlYWQuaDoKKyAgICAgICAgKFJlbmRlck5hbWVkRmxvd1RocmVhZCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6
OnVwZGF0ZVN0eWxlSW5SZWdpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoUmVuZGVyT2JqZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c3R5bGVJblJlZ2lvbkRpZENoYW5nZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJS
ZWdpb246OnJlc3RvcmVSZWdpb25PYmplY3RzT3JpZ2luYWxTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJSZWdpb246OnNldE9iamVjdFN0eWxlSW5SZWdpb24pOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJSZWdpb24uaDoKKyAgICAgICAgKFJlbmRlclJlZ2lvbik6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4
dDo6c3R5bGVJblJlZ2lvbkRpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGV4dC5oOgorICAgICAgICAoUmVuZGVyVGV4dCk6CisKIDIwMTIt
MDgtMjkgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBbVjhdIFNj
cmlwdENvbnRyb2xsZXI6Om1hdGNoZXNDdXJyZW50Q29udGV4dCBkdXBsaWNhdGVzIGNvZGUgZnJv
bSBTY3JpcHRDb250cm9sbGVyOjpjdXJyZW50V29ybGRDb250ZXh0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAKaW5kZXggNWY0ZTRlNTYyMDY5NzcxYWU5ZmU5MWEwOTM4OGM5MzI3NGFh
MzhlMS4uMWQ4MTVhOGNhM2Y0NTMxNTI0NWFiZTBkMjMyYWViNTVkOTY1ZWE4MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtMzI3Nyw2ICszMjc3LDcgQEAgaW5saW5lIGJv
b2wgU3R5bGVSZXNvbHZlcjo6aXNWYWxpZFJlZ2lvblN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCkKICAgICBzd2l0Y2ggKGlkKSB7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRD
b2xvcjoKICAgICBjYXNlIENTU1Byb3BlcnR5Q29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZv
bnRTaXplOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVh
azsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJv
bGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIu
Y3BwCmluZGV4IDllZGQwYWE3ZThmODBlNjJkYWU2MzE2ZWZiMDczN2ExZTEzMTcyMTUuLjlmYjVl
MGM3ZTFkMTgwODk3YjVjYTE3OGQ5MTA5ZDY5YTg5YTY1ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcApAQCAtMTMyLDYgKzEzMiw3
IEBAIHZvaWQgRmxvd1RocmVhZENvbnRyb2xsZXI6OmxheW91dFJlbmRlck5hbWVkRmxvd1RocmVh
ZHMoKQogICAgIGZvciAoUmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdDo6aXRlcmF0b3IgaXRlciA9
IG1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdC0+YmVnaW4oKTsgaXRlciAhPSBtX3JlbmRlck5h
bWVkRmxvd1RocmVhZExpc3QtPmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgUmVuZGVyTmFtZWRG
bG93VGhyZWFkKiBmbG93UmVuZGVyZXIgPSAqaXRlcjsKICAgICAgICAgZmxvd1JlbmRlcmVyLT5s
YXlvdXRJZk5lZWRlZCgpOworICAgICAgICBmbG93UmVuZGVyZXItPnVwZGF0ZVJlZ2lvblN0eWxl
SWZOZWNlc3NhcnkoMCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcAppbmRleCBhNmE5ZjJlZDE3MDQwMTMzZDc1MjE5MTQ4NzM5NDhiOWMxZTZhNDJj
Li45OGE5M2U4NTFjMjMyMzhlOTM2OTY5MDkwYjBkYWU1NWQ1NzY0OWY4IDEwMDc1NQotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTMyMyw2ICszMjMsMTQgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBS
ZW5kZXJTdHlsZSogbmV3U3QKICAgICBSZW5kZXJCb3g6OnN0eWxlV2lsbENoYW5nZShkaWZmLCBu
ZXdTdHlsZSk7CiB9CiAKK3ZvaWQgUmVuZGVyQmxvY2s6OnN0eWxlSW5SZWdpb25EaWRDaGFuZ2Uo
Y29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQoreworICAgIFJlbmRlckJveDo6c3R5bGVJblJl
Z2lvbkRpZENoYW5nZShvbGRTdHlsZSk7CisKKyAgICBpZiAob2xkU3R5bGUtPmZvbnRTaXplKCkg
IT0gc3R5bGUoKS0+Zm9udFNpemUoKSkKKyAgICAgICAgbV9saW5lSGVpZ2h0ID0gLTE7Cit9CisK
IHZvaWQgUmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBj
b25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7CiAgICAgUmVuZGVyQm94OjpzdHlsZURpZENo
YW5nZShkaWZmLCBvbGRTdHlsZSk7CkBAIC0yNTAxLDYgKzI1MDksNyBAQCB2b2lkIFJlbmRlckJs
b2NrOjpsYXlvdXRCbG9ja0NoaWxkKFJlbmRlckJveCogY2hpbGQsIE1hcmdpbkluZm8mIG1hcmdp
bkluZm8sIExheQogCiAgICAgLy8gVXBkYXRlIG91ciBoZWlnaHQgbm93IHRoYXQgdGhlIGNoaWxk
IGhhcyBiZWVuIHBsYWNlZCBpbiB0aGUgY29ycmVjdCBwb3NpdGlvbi4KICAgICBzZXRMb2dpY2Fs
SGVpZ2h0KGxvZ2ljYWxIZWlnaHQoKSArIGxvZ2ljYWxIZWlnaHRGb3JDaGlsZChjaGlsZCkpOwor
ICAgIGNoaWxkU3R5bGUgPSBjaGlsZC0+c3R5bGUoKTsKICAgICBpZiAoY2hpbGRTdHlsZS0+bWFy
Z2luQWZ0ZXJDb2xsYXBzZSgpID09IE1TRVBBUkFURSkgewogICAgICAgICBzZXRMb2dpY2FsSGVp
Z2h0KGxvZ2ljYWxIZWlnaHQoKSArIG1hcmdpbkFmdGVyRm9yQ2hpbGQoY2hpbGQpKTsKICAgICAg
ICAgbWFyZ2luSW5mby5jbGVhck1hcmdpbigpOwpAQCAtNjEyNCw2ICs2MTMzLDcgQEAgTGF5b3V0
VW5pdCBSZW5kZXJCbG9jazo6bGluZUhlaWdodChib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlv
bk1vZGUgZGlyZWN0aW9uLAogICAgICAgICAgICAgcmV0dXJuIHMtPmNvbXB1dGVkTGluZUhlaWdo
dCh2aWV3KCkpOwogICAgIH0KICAgICAKKyAgICB1cGRhdGVSZWdpb25TdHlsZUZvck9mZnNldChs
b2dpY2FsSGVpZ2h0KCkgKyBwYWdpbmF0aW9uU3RydXQoKSk7CiAgICAgaWYgKG1fbGluZUhlaWdo
dCA9PSAtMSkKICAgICAgICAgbV9saW5lSGVpZ2h0ID0gc3R5bGUoKS0+Y29tcHV0ZWRMaW5lSGVp
Z2h0KHZpZXcoKSk7CiAKQEAgLTcxNjcsNyArNzE3Nyw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6Omxp
bmVXaWR0aEZvclBhZ2luYXRlZExpbmVDaGFuZ2VkKFJvb3RJbmxpbmVCb3gqIHJvb3RCb3gsIExh
eW91CiAgICAgaWYgKCFpblJlbmRlckZsb3dUaHJlYWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgcmV0dXJuIHJvb3RCb3gtPnBhZ2luYXRlZExpbmVXaWR0aCgpICE9IGF2YWlsYWJs
ZUxvZ2ljYWxXaWR0aEZvckNvbnRlbnQocm9vdEJveC0+bGluZVRvcFdpdGhMZWFkaW5nKCkgKyBs
aW5lRGVsdGEpOworICAgIHJldHVybiByb290Qm94LT5wYWdpbmF0ZWRMaW5lV2lkdGgoKSAhPSBh
dmFpbGFibGVMb2dpY2FsV2lkdGhGb3JDb250ZW50KHJvb3RCb3gtPmxpbmVCb3R0b21XaXRoTGVh
ZGluZygpICsgbGluZURlbHRhKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6b2Zmc2V0
RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpIGNvbnN0CkBAIC03MTg4LDYgKzcxOTgsMjMgQEAg
TGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgp
IGNvbnN0CiAgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBvZmZzZXREZWx0
YS5oZWlnaHQoKSA6IG9mZnNldERlbHRhLndpZHRoKCk7CiB9CiAKKy8vIENhbGwgdGhpcyB0byB0
cmlnZ2VyIGEgcmVnaW9uIHN0eWxlIHVwZGF0ZSBpbiB0aGUgcmVuZGVyIHRyZWUuCit2b2lkIFJl
bmRlckJsb2NrOjp1cGRhdGVSZWdpb25TdHlsZUZvck9mZnNldChMYXlvdXRVbml0IGJsb2NrT2Zm
c2V0KSBjb25zdAoreworICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gcmVnaW9uQXRCbG9ja09m
ZnNldChibG9ja09mZnNldCk7CisgICAgaWYgKCFyZWdpb24pCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIEhBQ0sgdG8gc2tpcCB0aGUgcmVnaW9ucyB3aXRoIGhlaWdodCAwLgorICAgIExheW91
dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSBwYWdlTG9naWNhbEhlaWdodEZvck9mZnNldChibG9j
a09mZnNldCk7CisgICAgaWYgKCFwYWdlTG9naWNhbEhlaWdodCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGVuY2xvc2luZ1JlbmRlckZsb3dU
aHJlYWQoKTsKKyAgICBpZiAoZmxvd1RocmVhZC0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSkK
KyAgICAgICAgdG9SZW5kZXJOYW1lZEZsb3dUaHJlYWQoZmxvd1RocmVhZCktPnVwZGF0ZVJlZ2lv
blN0eWxlSWZOZWNlc3NhcnkocmVnaW9uKTsKK30KKwogUmVuZGVyUmVnaW9uKiBSZW5kZXJCbG9j
azo6cmVnaW9uQXRCbG9ja09mZnNldChMYXlvdXRVbml0IGJsb2NrT2Zmc2V0KSBjb25zdAogewog
ICAgIGlmICghaW5SZW5kZXJGbG93VGhyZWFkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5oCmluZGV4IDE0ODViMmIxYWQ4MGQ1N2QwZWQzNDcyOTkxMjU2Yjk1ZjYzOGI3ZmEu
LjZkNDYyMjBiNDg3NjdkZjRhYTE5ZjUwNzU4YTcxOWNlM2RiN2YyNWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCkBAIC00NjIsNiArNDYyLDcgQEAgcHJvdGVjdGVkOgog
CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0
IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdl
KFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc3R5bGVJblJlZ2lvbkRpZENoYW5nZShjb25zdCBSZW5kZXJTdHlsZSopOwogCiAg
ICAgdmlydHVhbCBib29sIGhhc0xpbmVJZkVtcHR5KCkgY29uc3Q7CiAgICAgCkBAIC01MzksNiAr
NTQwLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgYm9yZGVyRml0QWRqdXN0KExheW91
dFJlY3QmKSBjb25zdDsgLy8gU2hyaW5rIHRoZSBib3ggaW4gd2hpY2ggdGhlIGJvcmRlciBwYWlu
dHMgaWYgYm9yZGVyLWZpdCBpcyBzZXQuCiAKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQmVmb3Jl
QWZ0ZXJDb250ZW50KFBzZXVkb0lkKTsKKyAgICB2b2lkIHVwZGF0ZVJlZ2lvblN0eWxlRm9yT2Zm
c2V0KExheW91dFVuaXQpIGNvbnN0OwogICAgIAogICAgIHZpcnR1YWwgUm9vdElubGluZUJveCog
Y3JlYXRlUm9vdElubGluZUJveCgpOyAvLyBTdWJjbGFzc2VkIGJ5IFNWRyBhbmQgUnVieS4KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNw
cAppbmRleCA4Yjk2MGYwNTkxYjA1MWY3NDI4YmMzN2UyMDI3Y2Y2OWUyYjE5MThkLi5kODdlNDlk
NjMzMjI1MzMyNmJkNGY3NmU0MzI1YjMxMTMzYjEwODlmIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcApAQCAtMTI4NCw2ICsxMjg0
LDcgQEAgUmVuZGVyQmxvY2s6OlJlbmRlclRleHRJbmZvOjp+UmVuZGVyVGV4dEluZm8oKQogCiB2
b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0U3Rh
dGUmIGxheW91dFN0YXRlLCBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBjb25zdCBJbmxp
bmVJdGVyYXRvciYgY2xlYW5MaW5lU3RhcnQsIGNvbnN0IEJpZGlTdGF0dXMmIGNsZWFuTGluZUJp
ZGlTdGF0dXMsIHVuc2lnbmVkIGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzKQogeworICAgIC8v
IEZJWE1FOiBzdHlsZVRvVXNlIGNhbiBiZSBjYWNoZWQgYmVjYXVzZSBubyByZWdpb24gc3R5bGFi
bGUgcHJvcGVydHkgaXMgdXNlZCBiZWxvdwogICAgIFJlbmRlclN0eWxlKiBzdHlsZVRvVXNlID0g
c3R5bGUoKTsKICAgICBib29sIHBhZ2luYXRlZCA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKSAmJiB2
aWV3KCktPmxheW91dFN0YXRlKCktPmlzUGFnaW5hdGVkKCk7CiAgICAgTGluZU1pZHBvaW50U3Rh
dGUmIGxpbmVNaWRwb2ludFN0YXRlID0gcmVzb2x2ZXIubWlkcG9pbnRTdGF0ZSgpOwpAQCAtMTMw
Miw2ICsxMzAzLDggQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0c0luUmFu
Z2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSW5saW4KICNlbmRpZgogCiAgICAgd2hp
bGUgKCFlbmQuYXRFbmQoKSkgeworICAgICAgICB1cGRhdGVSZWdpb25TdHlsZUZvck9mZnNldChs
b2dpY2FsSGVpZ2h0KCkgKyBwYWdpbmF0aW9uU3RydXQoKSk7CisKICAgICAgICAgLy8gRklYTUU6
IElzIHRoaXMgY2hlY2sgbmVjZXNzYXJ5IGJlZm9yZSB0aGUgZmlyc3QgaXRlcmF0aW9uIG9yIGNh
biBpdCBiZSBtb3ZlZCB0byB0aGUgZW5kPwogICAgICAgICBpZiAoY2hlY2tGb3JFbmRMaW5lTWF0
Y2gpIHsKICAgICAgICAgICAgIGxheW91dFN0YXRlLnNldEVuZExpbmVNYXRjaGVkKG1hdGNoZWRF
bmRMaW5lKGxheW91dFN0YXRlLCByZXNvbHZlciwgY2xlYW5MaW5lU3RhcnQsIGNsZWFuTGluZUJp
ZGlTdGF0dXMpKTsKQEAgLTEzNzksMTQgKzEzODIsMTcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5
b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSW5s
aW4KIAogICAgICAgICAgICAgICAgIGlmIChwYWdpbmF0ZWQpIHsKICAgICAgICAgICAgICAgICAg
ICAgTGF5b3V0VW5pdCBhZGp1c3RtZW50ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgTGF5b3V0
VW5pdCBvbGRQYWdpbmF0aW9uU3RydXQgPSBwYWdpbmF0aW9uU3RydXQoKTsKICAgICAgICAgICAg
ICAgICAgICAgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihsaW5lQm94LCBhZGp1c3Rt
ZW50KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFkanVzdG1lbnQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgTGF5b3V0VW5pdCBuZXdQYWdpbmF0aW9uU3RydXQgPSBwYWdpbmF0aW9uU3RydXQo
KTsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJsb2NrIGdvdCBzaGlmdGVkIGZvciBw
YWdpbmF0aW9uOyB3ZSBuZWVkIHRvIHRha2UgdGhlIHN0cnV0IGludG8gY29uc2lkZXJhdGlvbi4K
KyAgICAgICAgICAgICAgICAgICAgaWYgKGFkanVzdG1lbnQgfHwgb2xkUGFnaW5hdGlvblN0cnV0
ICE9IG5ld1BhZ2luYXRpb25TdHJ1dCkgewogICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0
VW5pdCBvbGRMaW5lV2lkdGggPSBhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JMaW5lKG9sZExvZ2lj
YWxIZWlnaHQsIGxheW91dFN0YXRlLmxpbmVJbmZvKCkuaXNGaXJzdExpbmUoKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5lQm94LT5hZGp1c3RCbG9ja0RpcmVjdGlvblBvc2l0aW9uKGFk
anVzdG1lbnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxheW91dFN0YXRlLnVzZXNS
ZXBhaW50Qm91bmRzKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0U3RhdGUu
dXBkYXRlUmVwYWludFJhbmdlRnJvbUJveChsaW5lQm94KTsKIAotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUob2xkTG9naWNhbEhlaWdodCAr
IGFkanVzdG1lbnQsIGxheW91dFN0YXRlLmxpbmVJbmZvKCkuaXNGaXJzdExpbmUoKSkgIT0gb2xk
TGluZVdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlTG9naWNh
bFdpZHRoRm9yTGluZShvbGRMb2dpY2FsSGVpZ2h0ICsgYWRqdXN0bWVudCArIG5ld1BhZ2luYXRp
b25TdHJ1dCwgbGF5b3V0U3RhdGUubGluZUluZm8oKS5pc0ZpcnN0TGluZSgpKSAhPSBvbGRMaW5l
V2lkdGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGRlbGV0
ZSB0aGlzIGxpbmUsIHJlbW92ZSBhbGwgZmxvYXRzIHRoYXQgZ290IGFkZGVkLCBhbmQgbGV0IGxp
bmUgbGF5b3V0IHJlLXJ1bi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lQm94LT5k
ZWxldGVMaW5lKHJlbmRlckFyZW5hKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
bW92ZUZsb2F0aW5nT2JqZWN0c0JlbG93KGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIG9sZExv
Z2ljYWxIZWlnaHQpOwpAQCAtMTY2Nyw2ICsxNjczLDEyIEBAIFJvb3RJbmxpbmVCb3gqIFJlbmRl
ckJsb2NrOjpkZXRlcm1pbmVTdGFydFBvc2l0aW9uKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3Rh
dGUsCiAgICAgICAgIHNpemVfdCBmbG9hdEluZGV4ID0gMDsKICAgICAgICAgZm9yIChjdXJyID0g
Zmlyc3RSb290Qm94KCk7IGN1cnIgJiYgIWN1cnItPmlzRGlydHkoKTsgY3VyciA9IGN1cnItPm5l
eHRSb290Qm94KCkpIHsKICAgICAgICAgICAgIGlmIChwYWdpbmF0ZWQpIHsKKyAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogSXMgdGhpcyBjb3JyZWN0PyBGaW5kIGEgd2F5IHRvIGludmFsaWRhdGUg
b25seSB0aGUgbGluZXMgc3RhcnRpbmcgZnJvbSB0aGUgbmV3IHJlZ2lvbi4KKyAgICAgICAgICAg
ICAgICB1cGRhdGVSZWdpb25TdHlsZUZvck9mZnNldChjdXJyLT5saW5lQm90dG9tV2l0aExlYWRp
bmcoKSk7CisgICAgICAgICAgICAgICAgaWYgKG1fbGluZUhlaWdodCA9PSAtMSkgeworICAgICAg
ICAgICAgICAgICAgICBsYXlvdXRTdGF0ZS5tYXJrRm9yRnVsbExheW91dCgpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYg
KGxpbmVXaWR0aEZvclBhZ2luYXRlZExpbmVDaGFuZ2VkKGN1cnIpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGN1cnItPm1hcmtEaXJ0eSgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAK
aW5kZXggMmE5MTAyZTZkZmM3M2MwNGQ3N2E5MjBhY2FkYTkxYWI4ZmJlNjA1Yi4uYmE4YzU4NTZk
YzdjMzM5OWY1NjFmN2Q2ODA5ZWQzMTI1NWQ5MDhiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKQEAgLTM3LDYgKzM3LDcgQEAg
UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpSZW5kZXJOYW1lZEZsb3dUaHJlYWQoTm9kZSogbm9kZSwg
UGFzc1JlZlB0cjxXZWJLaXROYW1lZEYKICAgICA6IFJlbmRlckZsb3dUaHJlYWQobm9kZSkKICAg
ICAsIG1fbmFtZWRGbG93KG5hbWVkRmxvdykKICAgICAsIG1fcmVnaW9uTGF5b3V0VXBkYXRlRXZl
bnRUaW1lcih0aGlzLCAmUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpyZWdpb25MYXlvdXRVcGRhdGVF
dmVudFRpbWVyRmlyZWQpCisgICAgLCBtX2N1cnJlbnRSZWdpb24oMCkKIHsKIH0KIApAQCAtMzM5
LDQgKzM0MCwyMCBAQCBib29sIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6aXNNYXJrZWRGb3JEZXN0
cnVjdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIG1fbmFtZWRGbG93LT5mbG93U3RhdGUoKSA9PSBX
ZWJLaXROYW1lZEZsb3c6OkZsb3dTdGF0ZU51bGw7CiB9CiAKK3ZvaWQgUmVuZGVyTmFtZWRGbG93
VGhyZWFkOjp1cGRhdGVSZWdpb25TdHlsZUlmTmVjZXNzYXJ5KFJlbmRlclJlZ2lvbiogcmVnaW9u
KQoreworICAgIGlmIChtX2N1cnJlbnRSZWdpb24gPT0gcmVnaW9uKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBGSVhNRTogQ3JlYXRlIGEgbW9yZSBzdWl0ZWQgY2FjaGUgZm9yIHN0eWxlIHVw
ZGF0ZXMgZHVyaW5nIGxheW91dAorICAgIGlmIChtX2N1cnJlbnRSZWdpb24pCisgICAgICAgIG1f
Y3VycmVudFJlZ2lvbi0+cmVzdG9yZVJlZ2lvbk9iamVjdHNPcmlnaW5hbFN0eWxlKCk7CisKKyAg
ICBtX2N1cnJlbnRSZWdpb24gPSByZWdpb247CisKKyAgICBpZiAobV9jdXJyZW50UmVnaW9uKQor
ICAgICAgICBtX2N1cnJlbnRSZWdpb24tPnNldFJlZ2lvbk9iamVjdHNSZWdpb25TdHlsZSgpOwor
Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1l
ZEZsb3dUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dU
aHJlYWQuaAppbmRleCA4NWM1MjNiODAwZTQxNzYzNWVkZGZhYzVlNzIzY2M2ZWY4M2Y0NTNkLi43
MjlkNjI4YzdkZjA5NDI4MjNiOWYwYzI5NmFjNjRlNTQ4MjI3ZGQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5oCkBAIC03MCw2ICs3MCw3
IEBAIHB1YmxpYzoKICAgICBjb25zdCBOYW1lZEZsb3dDb250ZW50Tm9kZXMmIGNvbnRlbnROb2Rl
cygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudE5vZGVzOyB9CiAgICAgYm9vbCBoYXNDb250ZW50
Tm9kZShOb2RlKiBjb250ZW50Tm9kZSkgY29uc3QgeyBBU1NFUlQoY29udGVudE5vZGUpOyByZXR1
cm4gbV9jb250ZW50Tm9kZXMuY29udGFpbnMoY29udGVudE5vZGUpOyB9CiAgICAgYm9vbCBpc01h
cmtlZEZvckRlc3RydWN0aW9uKCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVSZWdpb25TdHlsZUlm
TmVjZXNzYXJ5KFJlbmRlclJlZ2lvbiopOwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRNYXJr
Rm9yRGVzdHJ1Y3Rpb24oKTsKQEAgLTEwOSw2ICsxMTAsOCBAQCBwcml2YXRlOgogICAgIFJlZlB0
cjxXZWJLaXROYW1lZEZsb3c+IG1fbmFtZWRGbG93OwogCiAgICAgVGltZXI8UmVuZGVyTmFtZWRG
bG93VGhyZWFkPiBtX3JlZ2lvbkxheW91dFVwZGF0ZUV2ZW50VGltZXI7CisKKyAgICBSZW5kZXJS
ZWdpb24qIG1fY3VycmVudFJlZ2lvbjsKIH07CiAKIGlubGluZSBSZW5kZXJOYW1lZEZsb3dUaHJl
YWQqIHRvUmVuZGVyTmFtZWRGbG93VGhyZWFkKFJlbmRlck9iamVjdCogb2JqZWN0KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCBjNjBkNzYwNmJhMjRmNmU2
MDdiZDUwODBiMjA5N2M4MmNkZWU2ZjNjLi45Mjg3NDM2NDc0OTNhM2ZiYzE0OWIwMTQ3NzcwZDA5
MzM0ZDdiZDllIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApA
QCAtMTgxMSw2ICsxODExLDEzIEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRTdHlsZUludGVybmFs
KFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlKQogICAgIG1fc3R5bGUgPSBzdHlsZTsKIH0K
IAordm9pZCBSZW5kZXJPYmplY3Q6OnVwZGF0ZVN0eWxlSW5SZWdpb24oUmVuZGVyU3R5bGUqIHJl
Z2lvblN0eWxlKQoreworICAgIFJlbmRlclN0eWxlKiBvbGRTdHlsZSA9IHN0eWxlKCk7CisgICAg
c2V0U3R5bGVJbnRlcm5hbChyZWdpb25TdHlsZSk7CisgICAgc3R5bGVJblJlZ2lvbkRpZENoYW5n
ZShvbGRTdHlsZSk7Cit9CisKIHZvaWQgUmVuZGVyT2JqZWN0OjpzdHlsZVdpbGxDaGFuZ2UoU3R5
bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKIHsKICAgICBp
ZiAobV9zdHlsZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4
IDg3YjA3NzE4ZjUxMTc3ZGEzNmY2MTIxMWRkYTMyYjE3NDA2MDNhNjAuLjA3YjVmODg2YTNkZGMw
ZWU5MDUwZTcyMmIwNzkyOTUwOTBjODBmNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmgKQEAgLTkxNyw2ICs5MTcsOCBAQCBwdWJsaWM6CiAKICAgICBSZXNwZWN0SW1h
Z2VPcmllbnRhdGlvbkVudW0gc2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSBjb25zdDsK
IAorICAgIHZvaWQgdXBkYXRlU3R5bGVJblJlZ2lvbihSZW5kZXJTdHlsZSopOworCiBwcm90ZWN0
ZWQ6CiAgICAgaW5saW5lIGJvb2wgbGF5ZXJDcmVhdGlvbkFsbG93ZWRGb3JTdWJ0cmVlKCkgY29u
c3Q7CiAKQEAgLTkyNCw2ICs5MjYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHN0
eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHls
ZSk7CiAgICAgLy8gT3ZlcnJpZGVzIHNob3VsZCBjYWxsIHRoZSBzdXBlcmNsYXNzIGF0IHRoZSBz
dGFydAogICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNv
bnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CisgICAgdmlydHVhbCB2b2lkIHN0eWxlSW5SZWdp
b25EaWRDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqKSB7IH07CiAgICAgdm9pZCBwcm9wYWdhdGVT
dHlsZVRvQW5vbnltb3VzQ2hpbGRyZW4oYm9vbCBibG9ja0NoaWxkcmVuT25seSA9IGZhbHNlKTsK
IAogICAgIHZvaWQgZHJhd0xpbmVGb3JCb3hTaWRlKEdyYXBoaWNzQ29udGV4dCosIGludCB4MSwg
aW50IHkxLCBpbnQgeDIsIGludCB5MiwgQm94U2lkZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclJlZ2lvbi5jcHAKaW5kZXggZTIyZjE5OTFjZTljNDAzNzM5NzYxMDYxZWRmYWNiNzRj
MTU1YTU4ZS4uMGQxMjBhYmI2ZGVkNDQyNzUyOWFmZWUzZWI0ZDUzZGZiZWM0YjM1NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAKQEAgLTM1MywyMCArMzUzLDEy
IEBAIHZvaWQgUmVuZGVyUmVnaW9uOjpyZXN0b3JlUmVnaW9uT2JqZWN0c09yaWdpbmFsU3R5bGUo
KQogICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG9iamVjdE9yaWdpbmFsU3R5bGUgPSBpdGVy
LT5zZWNvbmQuc3R5bGU7CiAgICAgICAgIG9iamVjdC0+c2V0U3R5bGVJbnRlcm5hbChvYmplY3RP
cmlnaW5hbFN0eWxlKTsKIAotICAgICAgICBib29sIHNob3VsZENhY2hlUmVnaW9uU3R5bGUgPSBp
dGVyLT5zZWNvbmQuY2FjaGVkOwotICAgICAgICBpZiAoIXNob3VsZENhY2hlUmVnaW9uU3R5bGUp
IHsKLSAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgd2Ugc2hvdWxkIGNhY2hlIHRoZSBjb21w
dXRlZCBzdHlsZSBpbiByZWdpb24uCi0gICAgICAgICAgICB1bnNpZ25lZCBjaGFuZ2VkQ29udGV4
dFNlbnNpdGl2ZVByb3BlcnRpZXMgPSBDb250ZXh0U2Vuc2l0aXZlUHJvcGVydHlOb25lOwotICAg
ICAgICAgICAgU3R5bGVEaWZmZXJlbmNlIHN0eWxlRGlmZiA9IG9iamVjdE9yaWdpbmFsU3R5bGUt
PmRpZmYob2JqZWN0UmVnaW9uU3R5bGUuZ2V0KCksIGNoYW5nZWRDb250ZXh0U2Vuc2l0aXZlUHJv
cGVydGllcyk7Ci0gICAgICAgICAgICBpZiAoc3R5bGVEaWZmIDwgU3R5bGVEaWZmZXJlbmNlTGF5
b3V0UG9zaXRpb25lZE1vdmVtZW50T25seSkKLSAgICAgICAgICAgICAgICBzaG91bGRDYWNoZVJl
Z2lvblN0eWxlID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc2hvdWxkQ2FjaGVSZWdp
b25TdHlsZSkgewotICAgICAgICAgICAgT2JqZWN0UmVnaW9uU3R5bGVJbmZvIHN0eWxlSW5mbzsK
LSAgICAgICAgICAgIHN0eWxlSW5mby5zdHlsZSA9IG9iamVjdFJlZ2lvblN0eWxlOwotICAgICAg
ICAgICAgc3R5bGVJbmZvLmNhY2hlZCA9IHRydWU7Ci0gICAgICAgICAgICB0ZW1wLnNldChvYmpl
Y3QsIHN0eWxlSW5mbyk7Ci0gICAgICAgIH0KKyAgICAgICAgLy8gQWx3YXlzIGNhY2hlIHRoZSBy
ZWdpb24gc3R5bGUKKyAgICAgICAgLy8gRklYTUU6IFJlbW92aW5nIHRoaXMgcmlza3MgdHJpZ2dl
cmluZyB1c2UtYWZ0ZXItZnJlZSBmb3IgdGhlIHN0eWxlcyBjYWNoZWQgZHVyaW5nIGxheW91dC4K
KyAgICAgICAgT2JqZWN0UmVnaW9uU3R5bGVJbmZvIHN0eWxlSW5mbzsKKyAgICAgICAgc3R5bGVJ
bmZvLnN0eWxlID0gb2JqZWN0UmVnaW9uU3R5bGU7CisgICAgICAgIHN0eWxlSW5mby5jYWNoZWQg
PSB0cnVlOworICAgICAgICB0ZW1wLnNldChvYmplY3QsIHN0eWxlSW5mbyk7CiAgICAgfQogCiAg
ICAgbV9yZW5kZXJPYmplY3RSZWdpb25TdHlsZS5zd2FwKHRlbXApOwpAQCAtNDMzLDcgKzQyNSw3
IEBAIHZvaWQgUmVuZGVyUmVnaW9uOjpzZXRPYmplY3RTdHlsZUluUmVnaW9uKFJlbmRlck9iamVj
dCogb2JqZWN0LCBQYXNzUmVmUHRyPFJlbmRlCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0
cjxSZW5kZXJTdHlsZT4gb2JqZWN0T3JpZ2luYWxTdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsKLSAg
ICBvYmplY3QtPnNldFN0eWxlSW50ZXJuYWwoc3R5bGVJblJlZ2lvbik7CisgICAgb2JqZWN0LT51
cGRhdGVTdHlsZUluUmVnaW9uKHN0eWxlSW5SZWdpb24uZ2V0KCkpOwogCiAgICAgaWYgKG9iamVj
dC0+aXNCb3hNb2RlbE9iamVjdCgpICYmICFvYmplY3QtPmhhc0JveERlY29yYXRpb25zKCkpIHsK
ICAgICAgICAgYm9vbCBoYXNCb3hEZWNvcmF0aW9ucyA9IG9iamVjdC0+aXNUYWJsZUNlbGwoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5oCmluZGV4IDEyNzU5MTcyNWNmY2Ux
ZGRlNzExNjBkNDRkZTIxODA4MzEyNzkyNTAuLjMzNmMyNjBmOTQ0ZmVhNTUwNjQ4MmY3NzQxYzkz
NTQwMDRmN2FmMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJS
ZWdpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmgKQEAg
LTEwOCwxMCArMTA4LDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBleHBhbmRUb0Vu
Y29tcGFzc0Zsb3dUaHJlYWRDb250ZW50c0lmTmVlZGVkKCkge307CiAKLXByb3RlY3RlZDoKICAg
ICB2b2lkIHNldFJlZ2lvbk9iamVjdHNSZWdpb25TdHlsZSgpOwogICAgIHZvaWQgcmVzdG9yZVJl
Z2lvbk9iamVjdHNPcmlnaW5hbFN0eWxlKCk7CiAKK3Byb3RlY3RlZDoKICAgICBMYXlvdXRSZWN0
IG92ZXJmbG93UmVjdEZvckZsb3dUaHJlYWRQb3J0aW9uKExheW91dFJlY3QgZmxvd1RocmVhZFBv
cnRpb25SZWN0LCBib29sIGlzRmlyc3RQb3J0aW9uLCBib29sIGlzTGFzdFBvcnRpb24pIGNvbnN0
OwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCmluZGV4
IDczZTU3NzU0YWQ3NzVkMWRiYTNjY2IzZjdhY2M4OTIxNGZkMjYzZDcuLjZiMDBiMmVlN2E4Mjg1
YzFmNDk5NjQzY2Y3OWUzYjIzNDhhY2QzZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dC5jcHAKQEAgLTE4OSw2ICsxODksMTggQEAgdm9pZCBSZW5kZXJUZXh0Ojp1cGRhdGVO
ZWVkc1RyYW5zY29kaW5nKCkKICAgICBtX25lZWRzVHJhbnNjb2RpbmcgPSBmb250VHJhbnNjb2Rl
cigpLm5lZWRzVHJhbnNjb2Rpbmcoc3R5bGUoKS0+Zm9udCgpLmZvbnREZXNjcmlwdGlvbigpLCBl
bmNvZGluZyk7CiB9CiAKK3ZvaWQgUmVuZGVyVGV4dDo6c3R5bGVJblJlZ2lvbkRpZENoYW5nZShj
b25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCit7CisgICAgUmVuZGVyT2JqZWN0OjpzdHlsZUlu
UmVnaW9uRGlkQ2hhbmdlKG9sZFN0eWxlKTsKKyAgICBSZW5kZXJCbG9jayogY29udGFpbmluZ0Js
b2NrID0gdGhpcy0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgQVNTRVJUKGNvbnRhaW5pbmdCbG9j
ayk7CisgICAgLy8gRklYTUU6IElzIHRoaXMgYWNjdXJhdGU/IFdlIHdhbnQgdG8gaW52YWxpZGF0
ZSB0aGUgcHJlZmVycmVkIHdpZHRoIG9ubHkgYXQgbGF5b3V0IHRpbWUuCisgICAgaWYgKCFjb250
YWluaW5nQmxvY2stPm5lZWRzTGF5b3V0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAob2xk
U3R5bGUtPmZvbnRTaXplKCkgIT0gc3R5bGUoKS0+Zm9udFNpemUoKSkKKyAgICAgICAgc2V0UHJl
ZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KHRydWUsIE1hcmtPbmx5VGhpcyk7Cit9CisKIHZvaWQg
UmVuZGVyVGV4dDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJl
bmRlclN0eWxlKiBvbGRTdHlsZSkKIHsKICAgICAvLyBUaGVyZSBpcyBubyBuZWVkIHRvIGV2ZXIg
c2NoZWR1bGUgcmVwYWludHMgZnJvbSBhIHN0eWxlIGNoYW5nZSBvZiBhIHRleHQgcnVuLCBzaW5j
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKaW5kZXggY2I4ZjE4MzEwYTY2YWM1
YjM1NDc5MzUyMDI1NTIyY2NmZTkwY2QxZi4uMjE2YzI0Mjc1MDllMjU4NjBjMTRiOGZkNjg0YmQ4
MjBhNWJhMjYyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCkBAIC0xMzgs
NiArMTM4LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCB2b2lkIHN0eWxlV2lsbENoYW5n
ZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKikgeyB9CiAgICAgdmlydHVhbCB2
b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9s
ZFN0eWxlKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3R5bGVJblJlZ2lvbkRpZENoYW5nZShjb25zdCBS
ZW5kZXJTdHlsZSopOwogCiAgICAgdmlydHVhbCB2b2lkIHNldFRleHRJbnRlcm5hbChQYXNzUmVm
UHRyPFN0cmluZ0ltcGw+KTsKICAgICB2aXJ0dWFsIFVDaGFyIHByZXZpb3VzQ2hhcmFjdGVyKCkg
Y29uc3Q7Cg==
</data>
<flag name="review"
          id="172588"
          type_id="1"
          status="-"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>161696</attachid>
            <date>2012-08-31 07:47:45 -0700</date>
            <delta_ts>2012-08-31 07:48:10 -0700</delta_ts>
            <desc>A test file to play with</desc>
            <filename>advanced-region-magnifier.html</filename>
            <type>text/html</type>
            <size>5112</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIEhUTUw+CjxodG1sIGxhbmc9ImVuLVVTIj4KPGhlYWQ+Cgk8bWV0YSBjaGFyc2V0
PSJVVEYtOCI+Cgk8dGl0bGU+PC90aXRsZT4KCTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CglodG1s
LCBib2R5IHsKCQl3aWR0aDogMTAwJTsKCQloZWlnaHQ6IDEwMCU7CgkJbWFyZ2luOiAwOwoJCWZv
bnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOwoJfQoJZGl2LCBwLCBoMSwg
aDIsIGgzIHsKCQltYXJnaW46IDEwcHg7Cgl9CglhcnRpY2xlIHsKCQktd2Via2l0LWZsb3ctaW50
bzogYXJ0aWNsZTsKCX0KCS5yZWdpb24gewoJCS13ZWJraXQtZmxvdy1mcm9tOiBhcnRpY2xlOwoJ
CS13ZWJraXQtcmVnaW9uLW92ZXJmbG93OiBicmVhazsKCQlvdmVyZmxvdzogaGlkZGVuOwoJCW1h
cmdpbjogMCBhdXRvOwoJCXdpZHRoOiA1MCU7CgkJYm9yZGVyOiB0aGluIHNvbGlkIGxpZ2h0Z3Jh
eTsKCQloZWlnaHQ6IDMwJTsKCQlib3gtc2l6aW5nOiBib3JkZXItYm94OwoJfQoJLnJlZ2lvbjpm
aXJzdC1jaGlsZCB7CgkJbWFyZ2luLXRvcDogMWVtOwoJfQoJI2NvbnRhaW5lciB7CgkJaGVpZ2h0
OiA5MCU7CgkJd2lkdGg6IDEwMCU7Cgl9CgkjbG91cGUgewoJCXdpZHRoOiA3MCU7CgkJYm9yZGVy
OiB0aGljayBzb2xpZCBncmF5OwoJCXBhZGRpbmc6IDFlbTsKCX0KCSN0b3AgewoJCWhlaWdodDog
MTAlOwoJfQoJI3dhcm5pbmcgewoJCXBvc2l0aW9uOiBmaXhlZDsKCQlwYWRkaW5nOiAxZW07CgkJ
YmFja2dyb3VuZC1jb2xvcjogeWVsbG93OwoJCWZvbnQtd2VpZ2h0OiBib2xkOwoJCXRleHQtYWxp
Z246IGNlbnRlcjsKCQlib3R0b206IDA7CgkJbGVmdDogMDsKCQl3aWR0aDogMTAwJTsKCX0KCUAt
d2Via2l0LXJlZ2lvbiAucmVnaW9uIHsKCQlhcnRpY2xlIHsKCQkJY29sb3I6IGdyYXk7CgkJfQoJ
fQoJQC13ZWJraXQtcmVnaW9uICNsb3VwZSB7CgkJaDEsIGgyLCBoMyB7CgkJCWNvbG9yOiByZWQ7
CgkJCWZvbnQtc2l6ZTogMzVweDsKCQl9CgkJYXJ0aWNsZSB7CgkJCWNvbG9yOiBibGFjazsKCQkJ
Zm9udC1zaXplOiAyNXB4OwoJCX0KCX0KCTwvc3R5bGU+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCI+CglmdW5jdGlvbiBub3JtYWxpemVQZXJjZW50KHZhbHVlKSB7CgkJaWYgKHZhbHVl
IDwgMCkgewoJCQlyZXR1cm4gMDsKCQl9IGVsc2UgaWYgKHZhbHVlID4gMTAwKSB7CgkJCXJldHVy
biAxMDA7CgkJfSBlbHNlIHsKCQkJcmV0dXJuIHZhbHVlOwoJCX0KCX0KCXZhciB0b3BTaXplID0g
MTA7CglmdW5jdGlvbiBoYW5kbGVVcChlKSB7CgkJdG9wU2l6ZSAtPSAxOwoJCXRvcFNpemUgPSBN
YXRoLm1heCh0b3BTaXplLCAwKTsKCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidG9wIikuc3R5
bGUuaGVpZ2h0ID0gdG9wU2l6ZSArICIlIjsKCX0KCWZ1bmN0aW9uIGhhbmRsZURvd24oZSkgewoJ
CXRvcFNpemUgKz0gMTsKCQl0b3BTaXplID0gTWF0aC5taW4odG9wU2l6ZSwgMTAwKTsKCQlkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgidG9wIikuc3R5bGUuaGVpZ2h0ID0gdG9wU2l6ZSArICIlIjsK
CX0KCWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBmdW5jdGlv
bigpIHsKCQl3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgZnVuY3Rpb24oZXZ0
KSB7CgkJCXZhciBsb3VwZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb3VwZSIpLAoJCQkJ
dG90YWxIZWlnaHQgPSBsb3VwZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgKiAzOwoJ
CQl2YXIgcG9zaXRpb24gPSBldnQuY2xpZW50WSA8PSB0b3RhbEhlaWdodCA/IGV2dC5jbGllbnRZ
IDogdG90YWxIZWlnaHQgOwoJCQlpZiAocG9zaXRpb24gPCB0b3RhbEhlaWdodCAqIDAuMTUpIHsK
CQkJCXBvc2l0aW9uID0gdG90YWxIZWlnaHQgKiAwLjE1OwoJCQl9CgkJCWlmIChwb3NpdGlvbiA+
IHRvdGFsSGVpZ2h0ICogMC44NSkgewoJCQkJcG9zaXRpb24gPSB0b3RhbEhlaWdodCAqIDAuODU7
CgkJCX0KCgkJCXZhciBsb3VwZVRvcCA9IChwb3NpdGlvbiAtIHRvdGFsSGVpZ2h0ICogMC4xNSkg
LyB0b3RhbEhlaWdodDsKCQkJbG91cGVUb3AgPSBub3JtYWxpemVQZXJjZW50KGxvdXBlVG9wICog
MTAwKTsKCQkJdmFyIGxvdXBlQm90dG9tID0gKHRvdGFsSGVpZ2h0IC0gcG9zaXRpb24gKyB0b3Rh
bEhlaWdodCAqIDAuMTUpIC8gdG90YWxIZWlnaHQ7CgkJCWxvdXBlQm90dG9tID0gbm9ybWFsaXpl
UGVyY2VudChsb3VwZUJvdHRvbSAqIDEwMCAtIDMwKTsKCgkJCXZhciB0b3BSZWdpb24gPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgidG9wIik7CgkJCXZhciBib3R0b21SZWdpb24gPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiYm90dG9tIik7CgkJCQoKCQkJY29uc29sZS5sb2coIk5vcm1hbGl6
ZWQgdG9wIGhlaWdodDogIiArIGxvdXBlVG9wICsgIiUiKTsKCQkJY29uc29sZS5sb2coIk5vcm1h
bGl6ZWQgYm90dG9tIGhlaWdodDogIiArIGxvdXBlQm90dG9tICsgIiUiKTsKCQkJCgkJCXRvcFJl
Z2lvbi5zdHlsZS5oZWlnaHQgPSBsb3VwZVRvcCArICIlIjsKCQkJYm90dG9tUmVnaW9uLnN0eWxl
LmhlaWdodCA9IGxvdXBlQm90dG9tICsgIiUiOwoJCX0pOwoJfSk7Cgk8L3NjcmlwdD4KPC9oZWFk
Pgo8Ym9keT4KCTxkaXYgaWQ9Indhcm5pbmciPgoJCTxidXR0b24gaWQ9InVwX2IiIG9uY2xpY2s9
ImhhbmRsZVVwKCkiPgoJCQlVcAoJCTwvYnV0dG9uPgoJCTxidXR0b24gaWQ9ImRvd25fYiIgb25j
bGljaz0iaGFuZGxlRG93bigpIj4KCQkJRG93bgoJCTwvYnV0dG9uPgoJCVRoaXMgc2FtcGxlIGlz
IGludGVuZGVkIHRvIGJlIHZpZXdlZCBpbiBhIFdlYktpdCBwcm90b3R5cGUuIE5vdCBmb3IgcHVi
bGljCgkJZGlzdHJpYnV0aW9uICh5ZXQgOikgKS4KCTwvZGl2PgoJPGFydGljbGU+CgkJPGgxPlJl
Z2lvbiB6b29tYWJsZSB0ZXh0PC9oMT4KCQk8cCBjbGFzcz0nYWJzdHJhY3QnPkxvcmVtIGlwc3Vt
IGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1
c21vZAoJCXRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVh
LiBVdCBlbmltIGFkIG1pbmltIHZlbmlhbSwKCQlxdWlzIG5vc3RydWQgZXhlcmNpdGF0aW9uIHVs
bGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbwoJCWNvbnNlcXVhdC4g
RHVpcyBhdXRlIGlydXJlIGRvbG9yIGluIHJlcHJlaGVuZGVyaXQgaW4gdm9sdXB0YXRlIGNpbGx1
bSBkb2xvcmUgZXUgZnVnaWF0IG51bGxhIHBhcmlhdHVyLiBFeGNlcHRldXIgc2ludCBvY2NhZWNh
dCBjdXBpZGF0YXQgbm9uCgkJcHJvaWRlbnQsIHN1bnQgaW4gY3VscGEgcXVpIG9mZmljaWEgZGVz
ZXJ1bnQgbW9sbGl0IGFuaW0gaWQgZXN0IGxhYm9ydW0uPC9wPgoJCTxoMj5Tb21lIG1vcmUgZXhw
bGFuYXRvcnkgdGV4dCBoZXJlPC9oMj4KCQk8cD5Mb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwg
Y29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QKCQl0ZW1wb3IgaW5j
aWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4gVXQgZW5pbSBhZCBtaW5p
bSB2ZW5pYW0sCgkJcXVpcyBub3N0cnVkIGV4ZXJjaXRhdGlvbiB1bGxhbWNvIGxhYm9yaXMgbmlz
aSB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8KCQljb25zZXF1YXQuIER1aXMgYXV0ZSBpcnVyZSBk
b2xvciBpbiByZXByZWhlbmRlcml0IGluIHZvbHVwdGF0ZSB2ZWxpdCBlc3NlCgkJY2lsbHVtIGRv
bG9yZSBldSBmdWdpYXQgbnVsbGEgcGFyaWF0dXIuIEV4Y2VwdGV1ciBzaW50IG9jY2FlY2F0IGN1
cGlkYXRhdCBub24KCQlwcm9pZGVudCwgc3VudCBpbiBjdWxwYSBxdWkgb2ZmaWNpYSBkZXNlcnVu
dCBtb2xsaXQgYW5pbSBpZCBlc3QgbGFib3J1bS48L3A+CgkJPGgyPlNvbWUgbW9yZSBleHBsYW5h
dG9yeSB0ZXh0IGhlcmU8L2gyPgoJCTxwPkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25z
ZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZAoJCXRlbXBvciBpbmNpZGlk
dW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLiBVdCBlbmltIGFkIG1pbmltIHZl
bmlhbSwKCQlxdWlzIG5vc3RydWQgZXhlcmNpdGF0aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0
IGFsaXF1aXAgZXggZWEgY29tbW9kbwoJCWNvbnNlcXVhdC4gRHVpcyBhdXRlIGlydXJlIGRvbG9y
IGluIHJlcHJlaGVuZGVyaXQgaW4gdm9sdXB0YXRlIHZlbGl0IGVzc2UKCQljaWxsdW0gZG9sb3Jl
IGV1IGZ1Z2lhdCBudWxsYSBwYXJpYXR1ci4gRXhjZXB0ZXVyIHNpbnQgb2NjYWVjYXQgY3VwaWRh
dGF0IG5vbgoJCXByb2lkZW50LCBzdW50IGluIGN1bHBhIHF1aSBvZmZpY2lhIGRlc2VydW50IG1v
bGxpdCBhbmltIGlkIGVzdCBsYWJvcnVtLjwvcD4KCQk8aDM+TWFraW5nIGEgY2FzZSBmb3IgYSAz
LWxldmVsIGRlZXAgaGVhZGVyPC9oMz4KCQk8cD5Mb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwg
Y29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QKCQl0ZW1wb3IgaW5j
aWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4gVXQgZW5pbSBhZCBtaW5p
bSB2ZW5pYW0sCgkJcXVpcyBub3N0cnVkIGV4ZXJjaXRhdGlvbiB1bGxhbWNvIGxhYm9yaXMgbmlz
aSB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8KCQljb25zZXF1YXQuIER1aXMgYXV0ZSBpcnVyZSBk
b2xvciBpbiByZXByZWhlbmRlcml0IGluIHZvbHVwdGF0ZSB2ZWxpdCBlc3NlCgkJY2lsbHVtIGRv
bG9yZSBldSBmdWdpYXQgbnVsbGEgcGFyaWF0dXIuIEV4Y2VwdGV1ciBzaW50IG9jY2FlY2F0IGN1
cGlkYXRhdCBub24KCQlwcm9pZGVudCwgc3VudCBpbiBjdWxwYSBxdWkgb2ZmaWNpYSBkZXNlcnVu
dCBtb2xsaXQgYW5pbSBpZCBlc3QgbGFib3J1bS48L3A+Cgk8L2FydGljbGU+Cgk8ZGl2IGlkPSJj
b250YWluZXIiPgoJCTxkaXYgY2xhc3M9InJlZ2lvbiIgaWQ9InRvcCI+PC9kaXY+CgkJPGRpdiBj
bGFzcz0icmVnaW9uIiBpZD0ibG91cGUiPjwvZGl2PgoJCTxkaXYgY2xhc3M9InJlZ2lvbiIgaWQ9
ImJvdHRvbSI+PC9kaXY+Cgk8L2Rpdj4KPC9ib2R5Pgo8L2h0bWw+
</data>

          </attachment>
      

    </bug>

</bugzilla>