<?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>204953</bug_id>
          
          <creation_ts>2019-12-06 11:13:58 -0800</creation_ts>
          <short_desc>[LFC][IFC] Paint partial trailing run with hyphen when needed</short_desc>
          <delta_ts>2019-12-06 13:43:37 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1596292</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-12-06 11:13:58 -0800</bug_when>
    <thetext>ssia</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596293</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-12-06 11:14:25 -0800</bug_when>
    <thetext>&lt;rdar://problem/57705169&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596299</commentid>
    <comment_count>2</comment_count>
      <attachid>385028</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-12-06 11:24:29 -0800</bug_when>
    <thetext>Created attachment 385028
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596302</commentid>
    <comment_count>3</comment_count>
      <attachid>385028</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-12-06 11:34:03 -0800</bug_when>
    <thetext>Comment on attachment 385028
Patch

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

&gt; Source/WebCore/layout/displaytree/DisplayRun.h:48
&gt; -        TextContext(unsigned position, unsigned length, const String&amp;, Optional&lt;ExpansionContext&gt; = { });
&gt; +        TextContext(unsigned position, unsigned length, const String&amp;, bool needsHyphen = false, Optional&lt;ExpansionContext&gt; = { });

I can&apos;t find where you are using the optional constructor parameters. They seem to be set via the setters. Can you remove them?

&gt; Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp:514
&gt; +        for (auto index = inlineContent.runs.size(); index--;) {
&gt; +            auto&amp; displayRun = inlineContent.runs[index];
&gt; +            if (!displayRun.textContext())
&gt; +                continue;
&gt; +            // This has to be a run on this new line.
&gt; +            ASSERT(!previousRunCount || index &gt; previousRunCount - 1);

Is the assert important? This would be nicer with range-for.

&gt; Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp:519
&gt; +            break;

Not a fan of for loops that don&apos;t loop over the body.

&gt; Source/WebCore/layout/integration/LayoutIntegrationLineLayout.cpp:227
&gt; -        TextRun textRun { textContext.content(), logicalLeft, horizontalExpansion, behavior };
&gt; +        String textWithHyphen;
&gt; +        if (textContext.needsHyphen())
&gt; +            textWithHyphen = makeString(textContext.content(), style.hyphenString());
&gt; +        TextRun textRun { !textWithHyphen.isEmpty() ? textWithHyphen : textContext.content(), logicalLeft, horizontalExpansion, behavior };

Isn&apos;t there are FIXME here you remove?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596304</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-12-06 11:37:22 -0800</bug_when>
    <thetext>&gt; Is the assert important? This would be nicer with range-for.

that is

for (auto&amp; run : WTF::makeReversedRange(inlineContent.runs))
    ....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596339</commentid>
    <comment_count>5</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-12-06 13:42:25 -0800</bug_when>
    <thetext>Committed r253214: &lt;https://trac.webkit.org/changeset/253214&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596340</commentid>
    <comment_count>6</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-12-06 13:43:37 -0800</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #3)
&gt; Comment on attachment 385028 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=385028&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/layout/displaytree/DisplayRun.h:48
&gt; &gt; -        TextContext(unsigned position, unsigned length, const String&amp;, Optional&lt;ExpansionContext&gt; = { });
&gt; &gt; +        TextContext(unsigned position, unsigned length, const String&amp;, bool needsHyphen = false, Optional&lt;ExpansionContext&gt; = { });
&gt; 
&gt; I can&apos;t find where you are using the optional constructor parameters. They
&gt; seem to be set via the setters. Can you remove them?
Done.

&gt; 
&gt; &gt; Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp:514
&gt; &gt; +        for (auto index = inlineContent.runs.size(); index--;) {
&gt; &gt; +            auto&amp; displayRun = inlineContent.runs[index];
&gt; &gt; +            if (!displayRun.textContext())
&gt; &gt; +                continue;
&gt; &gt; +            // This has to be a run on this new line.
&gt; &gt; +            ASSERT(!previousRunCount || index &gt; previousRunCount - 1);
&gt; 
&gt; Is the assert important? This would be nicer with range-for.
&gt; 
&gt; &gt; Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp:519
&gt; &gt; +            break;
&gt; 
&gt; Not a fan of for loops that don&apos;t loop over the body.
Not a good practice indeed. I ended up doing it differently by tracking the index of the last text item instead.

&gt; 
&gt; &gt; Source/WebCore/layout/integration/LayoutIntegrationLineLayout.cpp:227
&gt; &gt; -        TextRun textRun { textContext.content(), logicalLeft, horizontalExpansion, behavior };
&gt; &gt; +        String textWithHyphen;
&gt; &gt; +        if (textContext.needsHyphen())
&gt; &gt; +            textWithHyphen = makeString(textContext.content(), style.hyphenString());
&gt; &gt; +        TextRun textRun { !textWithHyphen.isEmpty() ? textWithHyphen : textContext.content(), logicalLeft, horizontalExpansion, behavior };
&gt; 
&gt; Isn&apos;t there are FIXME here you remove?
Oh right! Removed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385028</attachid>
            <date>2019-12-06 11:24:29 -0800</date>
            <delta_ts>2019-12-06 11:34:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204953-20191206112428.patch</filename>
            <type>text/plain</type>
            <size>23157</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMjA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGViYmYxYzEyYTIxYmYw
MjY1YWRiZmVhYjZiMjA3OTkzYWNmMTUyMi4uZDJlZWUxNGQ1NDRiYjQ1ZDRlMzkxODRhNjMyOTY5
MjZjOGFkMDIzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDE5LTEyLTA2ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBQYWludCBw
YXJ0aWFsIHRyYWlsaW5nIHJ1biB3aXRoIGh5cGhlbiB3aGVuIG5lZWRlZAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTUzCisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS81NzcwNTE2OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBXaGVuIExpbmVCcmVha2VyIGNvbWVzIGJhY2sgd2l0aCBhIHBhcnRpYWwg
Y29udGVudCB0aGF0IG5lZWRzIGh5cGhlbiwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpbmZv
cm1hdGlvbgorICAgICAgICBlbmRzIHVwIGluIHRoZSBmaW5hbCBEaXNwbGF5OjpSdW4gc28gdGhh
dCB0aGUgcmVuZGVyZWQgY29udGVudCBpbmNsdWRlcyB0aGUgaHlwaGVuIHN0cmluZy4gTm90ZSB0
aGF0IHRoaXMgb25seSBuZWVkcyB0bworICAgICAgICBiZSBkb25lIHdoZW4gdGhlIGNvbnRlbnQg
ZG9lcyBfbm90XyBoYXZlIHRoZSBoeXBoZW4gYWxyZWFkeSAob3Bwb3J0dW5pdHkgdnMuIG9wcG9y
LXR1bml0eSkuCisgICAgICAgIChUaGlzIHBhdGNoIGFsc28gcmVuYW1lcyB0cmFpbGluZ1BhcnRp
YWwgdG8gcGFydGlhbFRyYWlsaW5nIGJlY2F1c2UgdGhlIGZhY3QgdGhhdCBpdCBpcyBwYXJ0aWFs
IHJ1biBpcyBtb3JlIGltcG9ydGFudCB0aGFuIHRoYXQgaXQgaXMgdHJhaWxpbmcgcnVuLikKKwor
ICAgICAgICAqIGxheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UnVuLmg6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5OjpSdW46OlRleHRDb250ZXh0OjpUZXh0Q29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5OjpSdW46OlRleHRDb250ZXh0OjpuZWVkc0h5cGhlbiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OlRleHRDb250ZXh0OjpzZXROZWVkc0h5cGhl
bik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OnRleHRDb250ZXh0KToKKyAgICAg
ICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsaW5l
TGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUpOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJyZWFrZXI6OmJyZWFraW5nQ29udGV4dEZvcklubGluZUNvbnRlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpMaW5lQnJlYWtlcjo6d29yZEJyZWFraW5nQmVoYXZpb3IgY29uc3Qp
OgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmg6
CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lTGF5b3V0Q29udGV4dDo6bGF5b3V0TGlu
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVMYXlvdXRDb250ZXh0OjpjbG9zZSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVMYXlvdXRDb250ZXh0Ojpwcm9jZXNzVW5j
b21taXR0ZWRDb250ZW50KToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5l
TGF5b3V0Q29udGV4dC5oOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRl
Z3JhdGlvbkxpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRp
b246OkxpbmVMYXlvdXQ6OnBhaW50KToKKwogMjAxOS0xMi0wNSAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFN0b3AgdXNpbmcgcmVzZXJ2ZUNhcGFjaXR5KCkgLyBy
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KCkgaW4gSVBDIGRlY29kZXJzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheVJ1bi5oIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlSdW4uaAppbmRleCA0NDg4MTE4OGMxODgzMDEw
YWVkNmYwMGQzYmI2Yjk3YjRlOWIzMDdkLi4yMGNhOTZmZWY5ZDcxNmE5YWZkOWU3YjMxNzg2ZGFm
YjMyZDUzYTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUv
RGlzcGxheVJ1bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNw
bGF5UnVuLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgc3RydWN0IFJ1biB7CiAgICAgICAgIFdURl9NQUtF
X1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0cnVjdCBFeHBh
bnNpb25Db250ZXh0OwotICAgICAgICBUZXh0Q29udGV4dCh1bnNpZ25lZCBwb3NpdGlvbiwgdW5z
aWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmLCBPcHRpb25hbDxFeHBhbnNpb25Db250ZXh0PiA9
IHsgfSk7CisgICAgICAgIFRleHRDb250ZXh0KHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCBs
ZW5ndGgsIGNvbnN0IFN0cmluZyYsIGJvb2wgbmVlZHNIeXBoZW4gPSBmYWxzZSwgT3B0aW9uYWw8
RXhwYW5zaW9uQ29udGV4dD4gPSB7IH0pOwogCiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0KCkgY29u
c3QgeyByZXR1cm4gbV9zdGFydDsgfQogICAgICAgICB1bnNpZ25lZCBlbmQoKSBjb25zdCB7IHJl
dHVybiBzdGFydCgpICsgbGVuZ3RoKCk7IH0KQEAgLTU5LDExICs1OSwxNSBAQCBzdHJ1Y3QgUnVu
IHsKICAgICAgICAgdm9pZCBzZXRFeHBhbnNpb24oRXhwYW5zaW9uQ29udGV4dCBleHBhbnNpb25D
b250ZXh0KSB7IG1fZXhwYW5zaW9uQ29udGV4dCA9IGV4cGFuc2lvbkNvbnRleHQ7IH0KICAgICAg
ICAgT3B0aW9uYWw8RXhwYW5zaW9uQ29udGV4dD4gZXhwYW5zaW9uKCkgY29uc3QgeyByZXR1cm4g
bV9leHBhbnNpb25Db250ZXh0OyB9CiAKKyAgICAgICAgYm9vbCBuZWVkc0h5cGhlbigpIGNvbnN0
IHsgcmV0dXJuIG1fbmVlZHNIeXBoZW47IH0KKwogICAgICAgICB2b2lkIGV4cGFuZCh1bnNpZ25l
ZCBleHBhbmRlZExlbmd0aCk7CisgICAgICAgIHZvaWQgc2V0TmVlZHNIeXBoZW4oKSB7IG1fbmVl
ZHNIeXBoZW4gPSB0cnVlOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBtX3N0
YXJ0IHsgMCB9OwogICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aCB7IDAgfTsKKyAgICAgICAgYm9v
bCBtX25lZWRzSHlwaGVuIHsgZmFsc2UgfTsKICAgICAgICAgU3RyaW5nIG1fY29udGVudFN0cmlu
ZzsKICAgICAgICAgT3B0aW9uYWw8RXhwYW5zaW9uQ29udGV4dD4gbV9leHBhbnNpb25Db250ZXh0
OwogICAgIH07CkBAIC05NCw2ICs5OCw3IEBAIHN0cnVjdCBSdW4gewogCiAgICAgdm9pZCBzZXRU
ZXh0Q29udGV4dChjb25zdCBUZXh0Q29udGV4dCYmIHRleHRDb250ZXh0KSB7IG1fdGV4dENvbnRl
eHQuZW1wbGFjZSh0ZXh0Q29udGV4dCk7IH0KICAgICBjb25zdCBPcHRpb25hbDxUZXh0Q29udGV4
dD4mIHRleHRDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Q29udGV4dDsgfQorICAgIE9w
dGlvbmFsPFRleHRDb250ZXh0PiYgdGV4dENvbnRleHQoKSB7IHJldHVybiBtX3RleHRDb250ZXh0
OyB9CiAKICAgICB2b2lkIHNldEltYWdlKENhY2hlZEltYWdlJiBpbWFnZSkgeyBtX2NhY2hlZElt
YWdlID0gJmltYWdlOyB9CiAgICAgQ2FjaGVkSW1hZ2UqIGltYWdlKCkgY29uc3QgeyByZXR1cm4g
bV9jYWNoZWRJbWFnZTsgfQpAQCAtMTIwLDkgKzEyNSwxMCBAQCBpbmxpbmUgUnVuOjpSdW4oc2l6
ZV90IGxpbmVJbmRleCwgY29uc3QgTGF5b3V0OjpCb3gmIGxheW91dEJveCwgY29uc3QgUmVjdCYg
bG9naQogewogfQogCi1pbmxpbmUgUnVuOjpUZXh0Q29udGV4dDo6VGV4dENvbnRleHQodW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBjb250ZW50U3RyaW5nLCBP
cHRpb25hbDxFeHBhbnNpb25Db250ZXh0PiBleHBhbnNpb25Db250ZXh0KQoraW5saW5lIFJ1bjo6
VGV4dENvbnRleHQ6OlRleHRDb250ZXh0KHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgs
IGNvbnN0IFN0cmluZyYgY29udGVudFN0cmluZywgYm9vbCBuZWVkc0h5cGhlbiwgT3B0aW9uYWw8
RXhwYW5zaW9uQ29udGV4dD4gZXhwYW5zaW9uQ29udGV4dCkKICAgICA6IG1fc3RhcnQoc3RhcnQp
CiAgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgLCBtX25lZWRzSHlwaGVuKG5lZWRzSHlwaGVu
KQogICAgICwgbV9jb250ZW50U3RyaW5nKGNvbnRlbnRTdHJpbmcpCiAgICAgLCBtX2V4cGFuc2lv
bkNvbnRleHQoZXhwYW5zaW9uQ29udGV4dCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0LmNwcAppbmRleCA2MjFmYjhiNGI2ZTdhZTdhYjdkNTIwMzZhYjgzYjQxMmMxMjNiNjcxLi43
M2U4OWMyOWU5YWE0MjJjN2FkNDdjYWJlZTc1ZWQ1NTEwM2U4ZDQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQuY3BwCkBAIC05NCwyNCArOTQsMjQgQEAgdm9pZCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6bGluZUxheW91dChjb25zdCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYgdXNl
ZEhvcml6b24KICAgICBhdXRvJiBpbmxpbmVJdGVtcyA9IGZvcm1hdHRpbmdTdGF0ZSgpLmlubGlu
ZUl0ZW1zKCk7CiAgICAgYXV0byBsaW5lTG9naWNhbFRvcCA9IGdlb21ldHJ5Rm9yQm94KHJvb3Qo
KSkuY29udGVudEJveFRvcCgpOwogICAgIHVuc2lnbmVkIGxlYWRpbmdJbmxpbmVJdGVtSW5kZXgg
PSAwOwotICAgIE9wdGlvbmFsPExpbmVMYXlvdXRDb250ZXh0OjpQYXJ0aWFsQ29udGVudD4gbGVh
ZGluZ1BhcnRpYWxDb250ZW50OworICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBwYXJ0aWFsTGVhZGlu
Z0NvbnRlbnRMZW5ndGg7CiAgICAgYXV0byBsaW5lQnVpbGRlciA9IExpbmVCdWlsZGVyIHsgKnRo
aXMsIHJvb3QoKS5zdHlsZSgpLnRleHRBbGlnbigpLCBMaW5lQnVpbGRlcjo6U2tpcEFsaWdubWVu
dDo6Tm8gfTsKICAgICBhdXRvIGxpbmVMYXlvdXRDb250ZXh0ID0gTGluZUxheW91dENvbnRleHQg
eyAqdGhpcywgcm9vdCgpLCBpbmxpbmVJdGVtcyB9OwogCiAgICAgd2hpbGUgKGxlYWRpbmdJbmxp
bmVJdGVtSW5kZXggPCBpbmxpbmVJdGVtcy5zaXplKCkpIHsKICAgICAgICAgbGluZUJ1aWxkZXIu
aW5pdGlhbGl6ZShjb25zdHJhaW50c0ZvckxpbmUodXNlZEhvcml6b250YWxWYWx1ZXMsIGxpbmVM
b2dpY2FsVG9wKSk7Ci0gICAgICAgIGF1dG8gbGluZUNvbnRlbnQgPSBsaW5lTGF5b3V0Q29udGV4
dC5sYXlvdXRMaW5lKGxpbmVCdWlsZGVyLCBsZWFkaW5nSW5saW5lSXRlbUluZGV4LCBsZWFkaW5n
UGFydGlhbENvbnRlbnQpOworICAgICAgICBhdXRvIGxpbmVDb250ZW50ID0gbGluZUxheW91dENv
bnRleHQubGF5b3V0TGluZShsaW5lQnVpbGRlciwgbGVhZGluZ0lubGluZUl0ZW1JbmRleCwgcGFy
dGlhbExlYWRpbmdDb250ZW50TGVuZ3RoKTsKICAgICAgICAgc2V0RGlzcGxheUJveGVzRm9yTGlu
ZShsaW5lQ29udGVudCwgdXNlZEhvcml6b250YWxWYWx1ZXMpOwogCi0gICAgICAgIGxlYWRpbmdQ
YXJ0aWFsQ29udGVudCA9IHsgfTsKKyAgICAgICAgcGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3Ro
ID0geyB9OwogICAgICAgICBpZiAobGluZUNvbnRlbnQudHJhaWxpbmdJbmxpbmVJdGVtSW5kZXgp
IHsKICAgICAgICAgICAgIGxpbmVMb2dpY2FsVG9wID0gbGluZUNvbnRlbnQubGluZUJveC5sb2dp
Y2FsQm90dG9tKCk7CiAgICAgICAgICAgICAvLyBXaGVuIHRoZSB0cmFpbGluZyBjb250ZW50IGlz
IHBhcnRpYWwsIHdlIG5lZWQgdG8gcmV1c2UgdGhlIGxhc3QgSW5saW5JdGVtLgotICAgICAgICAg
ICAgaWYgKGxpbmVDb250ZW50Lm92ZXJmbG93UGFydGlhbENvbnRlbnQpIHsKKyAgICAgICAgICAg
IGlmIChsaW5lQ29udGVudC5wYXJ0aWFsQ29udGVudCkgewogICAgICAgICAgICAgICAgIGxlYWRp
bmdJbmxpbmVJdGVtSW5kZXggPSAqbGluZUNvbnRlbnQudHJhaWxpbmdJbmxpbmVJdGVtSW5kZXg7
CiAgICAgICAgICAgICAgICAgLy8gVHVybiBwcmV2aW91cyBsaW5lJ3Mgb3ZlcmZsb3cgY29udGVu
dCBsZW5ndGggaW50byB0aGUgbmV4dCBsaW5lJ3MgbGVhZGluZyBjb250ZW50IHBhcnRpYWwgbGVu
Z3RoLgogICAgICAgICAgICAgICAgIC8vICJzcDwtPmxpdGNvbnRlbnQiIC0+IG92ZXJmbG93IGxl
bmd0aDogMTAgLT4gbGVhZGluZyBwYXJ0aWFsIGNvbnRlbnQgbGVuZ3RoOiAxMC4gCi0gICAgICAg
ICAgICAgICAgbGVhZGluZ1BhcnRpYWxDb250ZW50ID0gTGluZUxheW91dENvbnRleHQ6OlBhcnRp
YWxDb250ZW50IHsgbGluZUNvbnRlbnQub3ZlcmZsb3dQYXJ0aWFsQ29udGVudC0+bGVuZ3RoIH07
CisgICAgICAgICAgICAgICAgcGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoID0gbGluZUNvbnRl
bnQucGFydGlhbENvbnRlbnQtPm92ZXJsZm93Q29udGVudExlbmd0aDsKICAgICAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgICAgIGxlYWRpbmdJbmxpbmVJdGVtSW5kZXggPSAqbGluZUNvbnRl
bnQudHJhaWxpbmdJbmxpbmVJdGVtSW5kZXggKyAxOwogICAgICAgICB9IGVsc2UgewpAQCAtNDI3
LDEwICs0MjcsMTIgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6c2V0RGlzcGxheUJv
eGVzRm9yTGluZShjb25zdCBMaW5lTGF5b3V0Q29udGV4dDo6TGkKICAgICB9CiAKICAgICBhdXRv
JiBpbmxpbmVDb250ZW50ID0gZm9ybWF0dGluZ1N0YXRlLmVuc3VyZURpc3BsYXlJbmxpbmVDb250
ZW50KCk7CisjaWZuZGVmIE5ERUJVRworICAgIGF1dG8gcHJldmlvdXNSdW5Db3VudCA9IGlubGlu
ZUNvbnRlbnQucnVucy5zaXplKCk7CisjZW5kaWYKIAogICAgIGF1dG8gbGluZUluZGV4ID0gaW5s
aW5lQ29udGVudC5saW5lQm94ZXMuc2l6ZSgpOwogICAgIGlubGluZUNvbnRlbnQubGluZUJveGVz
LmFwcGVuZChMaW5lQm94IHsgbGluZUNvbnRlbnQubGluZUJveCB9KTsKLQogICAgIC8vIENvbXB1
dGUgYm94IGZpbmFsIGdlb21ldHJ5LgogICAgIGF1dG8mIGxpbmVSdW5zID0gbGluZUNvbnRlbnQu
cnVuTGlzdDsKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBsaW5lUnVucy5z
aXplKCk7ICsraW5kZXgpIHsKQEAgLTQ5Nyw2ICs0OTksMjcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6c2V0RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5lTGF5b3V0Q29udGV4
dDo6TGkKICAgICAgICAgfQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Cisg
ICAgLy8gTWFrZSBzdXJlIHRoZSB0cmFpbGluZyB0ZXh0IHJ1biBnZXRzIGEgaHlwaGVuIHdoZW4g
aXQgbmVlZHMgb25lLgorICAgIGlmIChsaW5lQ29udGVudC5wYXJ0aWFsQ29udGVudCAmJiBsaW5l
Q29udGVudC5wYXJ0aWFsQ29udGVudC0+dHJhaWxpbmdDb250ZW50TmVlZHNIeXBoZW4pIHsKKyAg
ICAgICAgLy8gRmluZCB0aGUgbGFzdCB0ZXh0IHJ1biBhbmQgdHVybiB0aGUgbmVlZHNIeXBoZW4g
ZmxhZyBvbi4KKyAgICAgICAgQVNTRVJUKGlubGluZUNvbnRlbnQucnVucy5zaXplKCkgPiBwcmV2
aW91c1J1bkNvdW50KTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGF1dG8gZGlkRmluZFRleHRS
dW4gPSBmYWxzZTsKKyNlbmRpZgorICAgICAgICBmb3IgKGF1dG8gaW5kZXggPSBpbmxpbmVDb250
ZW50LnJ1bnMuc2l6ZSgpOyBpbmRleC0tOykgeworICAgICAgICAgICAgYXV0byYgZGlzcGxheVJ1
biA9IGlubGluZUNvbnRlbnQucnVuc1tpbmRleF07CisgICAgICAgICAgICBpZiAoIWRpc3BsYXlS
dW4udGV4dENvbnRleHQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IC8vIFRoaXMgaGFzIHRvIGJlIGEgcnVuIG9uIHRoaXMgbmV3IGxpbmUuCisgICAgICAgICAgICBB
U1NFUlQoIXByZXZpb3VzUnVuQ291bnQgfHwgaW5kZXggPiBwcmV2aW91c1J1bkNvdW50IC0gMSk7
CisgICAgICAgICAgICBkaXNwbGF5UnVuLnRleHRDb250ZXh0KCktPnNldE5lZWRzSHlwaGVuKCk7
CisjaWZuZGVmIE5ERUJVRworICAgICAgICAgICAgZGlkRmluZFRleHRSdW4gPSB0cnVlOworI2Vu
ZGlmCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoZGlkRmlu
ZFRleHRSdW4pOworICAgIH0KIH0KIAogdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6aW52
YWxpZGF0ZUZvcm1hdHRpbmdTdGF0ZShjb25zdCBJbnZhbGlkYXRpb25TdGF0ZSYpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJl
YWtlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVM
aW5lQnJlYWtlci5jcHAKaW5kZXggNTdlYmFmYmU0ZGE1OWE2NjliOGNmZWZhZWYxODhhYTdhMTcx
ZDU4YS4uYzg0ZDFjMWQ4MDEzN2E3ZjNjNWNlODk4NjMwZjgwY2UyOWUwOTRhZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFr
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUxpbmVCcmVha2VyLmNwcApAQCAtNzIsOCArNzIsOCBAQCBMaW5lQnJlYWtlcjo6QnJlYWtpbmdD
b250ZXh0IExpbmVCcmVha2VyOjpicmVha2luZ0NvbnRleHRGb3JJbmxpbmVDb250ZW50KGNvbnN0
CiAKICAgICBpZiAoY2FuZGlkYXRlUnVucy5oYXNUZXh0Q29udGVudE9ubHkoKSkgewogICAgICAg
ICBhdXRvJiBydW5zID0gY2FuZGlkYXRlUnVucy5ydW5zKCk7Ci0gICAgICAgIGlmIChhdXRvIHRy
YWlsaW5nUGFydGlhbENvbnRlbnQgPSB3b3JkQnJlYWtpbmdCZWhhdmlvcihydW5zLCBsaW5lU3Rh
dHVzLmF2YWlsYWJsZVdpZHRoKSkKLSAgICAgICAgICAgIHJldHVybiB7IEJyZWFraW5nQ29udGV4
dDo6Q29udGVudEJyZWFrOjpTcGxpdCwgdHJhaWxpbmdQYXJ0aWFsQ29udGVudCB9OworICAgICAg
ICBpZiAoYXV0byBwYXJ0aWFsVHJhaWxpbmdDb250ZW50ID0gd29yZEJyZWFraW5nQmVoYXZpb3Io
cnVucywgbGluZVN0YXR1cy5hdmFpbGFibGVXaWR0aCkpCisgICAgICAgICAgICByZXR1cm4geyBC
cmVha2luZ0NvbnRleHQ6OkNvbnRlbnRCcmVhazo6U3BsaXQsIHBhcnRpYWxUcmFpbGluZ0NvbnRl
bnQgfTsKICAgICAgICAgLy8gSWYgd2UgZGlkIG5vdCBtYW5hZ2UgdG8gYnJlYWsgdGhpcyBjb250
ZW50LCB3ZSBzdGlsbCBuZWVkIHRvIGRlY2lkZSB3aGV0aGVyIGtlZXAgaXQgb3Igd3JhcCBpdCB0
byB0aGUgbmV4dCBsaW5lLgogICAgICAgICAvLyBGSVhNRTogS2VlcCB0cmFja2luZyB0aGUgbGFz
dCBicmVha2luZyBvcHBvcnR1bml0eSB3aGVyZSB3ZSBjYW4gd3JhcCB0aGUgY29udGVudDoKICAg
ICAgICAgLy8gPHNwYW4gc3R5bGU9IndoaXRlLXNwYWNlOiBwcmU7Ij50aGlzIGZpdHM8L3NwYW4+
IDxzcGFuIHN0eWxlPSJ3aGl0ZS1zcGFjZTogcHJlOyI+dGhpcyBkb2VzIG5vdCBmaXQgYnV0IGRv
ZXMgbm90IHdyYXAgZWl0aGVyPC9zcGFuPgpAQCAtOTUsNyArOTUsNyBAQCBib29sIExpbmVCcmVh
a2VyOjpzaG91bGRXcmFwRmxvYXRCb3goTGF5b3V0VW5pdCBmbG9hdExvZ2ljYWxXaWR0aCwgTGF5
b3V0VW5pdCBhdgogICAgIHJldHVybiAhbGluZUlzRW1wdHkgJiYgZmxvYXRMb2dpY2FsV2lkdGgg
PiBhdmFpbGFibGVXaWR0aDsKIH0KIAotT3B0aW9uYWw8TGluZUJyZWFrZXI6OkJyZWFraW5nQ29u
dGV4dDo6VHJhaWxpbmdQYXJ0aWFsQ29udGVudD4gTGluZUJyZWFrZXI6OndvcmRCcmVha2luZ0Jl
aGF2aW9yKGNvbnN0IENvbnRlbnQ6OlJ1bkxpc3QmIHJ1bnMsIExheW91dFVuaXQgYXZhaWxhYmxl
V2lkdGgpIGNvbnN0CitPcHRpb25hbDxMaW5lQnJlYWtlcjo6QnJlYWtpbmdDb250ZXh0OjpQYXJ0
aWFsVHJhaWxpbmdDb250ZW50PiBMaW5lQnJlYWtlcjo6d29yZEJyZWFraW5nQmVoYXZpb3IoY29u
c3QgQ29udGVudDo6UnVuTGlzdCYgcnVucywgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCkgY29u
c3QKIHsKICAgICAvLyBDaGVjayB3aGVyZSB0aGUgb3ZlcmZsb3cgb2NjdXJzIGFuZCB1c2UgdGhl
IGNvcnJlc3BvbmRpbmcgc3R5bGUgdG8gZmlndXJlIG91dCB0aGUgYnJlYWtpbmcgYmVoYXZpb3Vy
LgogICAgIC8vIDxzcGFuIHN0eWxlPSJ3b3JkLWJyZWFrOiBub3JtYWwiPmZpcnN0PC9zcGFuPjxz
cGFuIHN0eWxlPSJ3b3JkLWJyZWFrOiBicmVhay1hbGwiPnNlY29uZDwvc3Bhbj48c3BhbiBzdHls
ZT0id29yZC1icmVhazogbm9ybWFsIj50aGlyZDwvc3Bhbj4KQEAgLTEyMiw3ICsxMjIsNyBAQCBP
cHRpb25hbDxMaW5lQnJlYWtlcjo6QnJlYWtpbmdDb250ZXh0OjpUcmFpbGluZ1BhcnRpYWxDb250
ZW50PiBMaW5lQnJlYWtlcjo6d29yZAogICAgICAgICAvLyBXaGVuIHRoZSBmaXJzdCBzcGFuIGNv
bXB1dGVzIGxvbmdlciB0aGFuIHRoZSBhdmFpbGFibGUgc3BhY2UsIGJ5IHRoZSB0aW1lIHdlIGdl
dCB0byB0aGUgc2Vjb25kIHNwYW4sIHRoZSBhZGp1c3RlZCBhdmFpbGFibGUgc3BhY2UgYmVjb21l
cyBuZWdhdGl2ZS4KICAgICAgICAgYXV0byBhZGp1c3RlZEF2YWlsYWJsZVdpZHRoID0gc3RkOjpt
YXgoTGF5b3V0VW5pdCB7IH0sIGF2YWlsYWJsZVdpZHRoIC0gcnVuc1dpZHRoICsgcnVuLmxvZ2lj
YWxXaWR0aCk7CiAgICAgICAgIGlmIChhdXRvIGxlZnRTaWRlID0gdHJ5QnJlYWtpbmdUZXh0UnVu
KHJ1biwgYWRqdXN0ZWRBdmFpbGFibGVXaWR0aCkpCi0gICAgICAgICAgICByZXR1cm4gQnJlYWtp
bmdDb250ZXh0OjpUcmFpbGluZ1BhcnRpYWxDb250ZW50IHsgaSwgbGVmdFNpZGUtPmxlbmd0aCwg
bGVmdFNpZGUtPmxvZ2ljYWxXaWR0aCwgbGVmdFNpZGUtPmhhc0h5cGhlbiB9OworICAgICAgICAg
ICAgcmV0dXJuIEJyZWFraW5nQ29udGV4dDo6UGFydGlhbFRyYWlsaW5nQ29udGVudCB7IGksIGxl
ZnRTaWRlLT5sZW5ndGgsIGxlZnRTaWRlLT5sb2dpY2FsV2lkdGgsIGxlZnRTaWRlLT5uZWVkc0h5
cGhlbiB9OwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICAgICAvLyBXZSBkaWQgbm90IG1h
bmFnZSB0byBicmVhayBpbiB0aGlzIHNlcXVlbmNlIG9mIHJ1bnMuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5oIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIu
aAppbmRleCA4NTJhYzBjZDdkZmU3NmJhZWM2YmU4MGE2OTIzNDM3YWU4N2Q1Mzc5Li4wZDUyM2Fl
NmZmMGZjMzgyNGJkMWRhNWE2ZmU4ZTg4YjcxOTk1YjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmgK
QEAgLTQwLDEzICs0MCwxMyBAQCBwdWJsaWM6CiAgICAgc3RydWN0IEJyZWFraW5nQ29udGV4dCB7
CiAgICAgICAgIGVudW0gY2xhc3MgQ29udGVudEJyZWFrIHsgS2VlcCwgU3BsaXQsIFdyYXAgfTsK
ICAgICAgICAgQ29udGVudEJyZWFrIGNvbnRlbnRCcmVhazsKLSAgICAgICAgc3RydWN0IFRyYWls
aW5nUGFydGlhbENvbnRlbnQgeworICAgICAgICBzdHJ1Y3QgUGFydGlhbFRyYWlsaW5nQ29udGVu
dCB7CiAgICAgICAgICAgICB1bnNpZ25lZCBydW5JbmRleCB7IDAgfTsKICAgICAgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCB7IDAgfTsKICAgICAgICAgICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRo
OwotICAgICAgICAgICAgYm9vbCBoYXNIeXBoZW4geyBmYWxzZSB9OworICAgICAgICAgICAgYm9v
bCBuZWVkc0h5cGhlbiB7IGZhbHNlIH07CiAgICAgICAgIH07Ci0gICAgICAgIE9wdGlvbmFsPFRy
YWlsaW5nUGFydGlhbENvbnRlbnQ+IHRyYWlsaW5nUGFydGlhbENvbnRlbnQ7CisgICAgICAgIE9w
dGlvbmFsPFBhcnRpYWxUcmFpbGluZ0NvbnRlbnQ+IHBhcnRpYWxUcmFpbGluZ0NvbnRlbnQ7CiAg
ICAgfTsKIAogICAgIC8vIFRoaXMgc3RydWN0IHJlcHJlc2VudHMgdGhlIGFtb3VudCBvZiBjb250
ZW50IGNvbW1pdHRlZCB0byBsaW5lIGJyZWFraW5nIGF0IGEgdGltZSBlLmcuCkBAIC0xMDcsMTEg
KzEwNywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIeXBoZW5hdGlvbkRpc2FibGVkKCkgeyBu
X2h5cGhlbmF0aW9uSXNEaXNhYmxlZCA9IHRydWU7IH0KIAogcHJpdmF0ZToKLSAgICBPcHRpb25h
bDxCcmVha2luZ0NvbnRleHQ6OlRyYWlsaW5nUGFydGlhbENvbnRlbnQ+IHdvcmRCcmVha2luZ0Jl
aGF2aW9yKGNvbnN0IENvbnRlbnQ6OlJ1bkxpc3QmLCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRo
KSBjb25zdDsKKyAgICBPcHRpb25hbDxCcmVha2luZ0NvbnRleHQ6OlBhcnRpYWxUcmFpbGluZ0Nv
bnRlbnQ+IHdvcmRCcmVha2luZ0JlaGF2aW9yKGNvbnN0IENvbnRlbnQ6OlJ1bkxpc3QmLCBMYXlv
dXRVbml0IGF2YWlsYWJsZVdpZHRoKSBjb25zdDsKICAgICBzdHJ1Y3QgTGVmdFNpZGUgewogICAg
ICAgICB1bnNpZ25lZCBsZW5ndGggeyAwIH07CiAgICAgICAgIExheW91dFVuaXQgbG9naWNhbFdp
ZHRoOwotICAgICAgICBib29sIGhhc0h5cGhlbiB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgbmVl
ZHNIeXBoZW4geyBmYWxzZSB9OwogICAgIH07CiAgICAgT3B0aW9uYWw8TGVmdFNpZGU+IHRyeUJy
ZWFraW5nVGV4dFJ1bihjb25zdCBDb250ZW50OjpSdW4mIG92ZXJmbG93UnVuLCBMYXlvdXRVbml0
IGF2YWlsYWJsZVdpZHRoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuY3BwCmluZGV4IDIy
YWQwNzRiMGVlZDg4MTlmMjkxYTE4ZmU5ZDJkOTIzNmVjZTYxZjEuLjNkNDUxYWJlZGYzMDljODQ5
YzI2MDg1M2QwMzZhNTljNmYzNTUwNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5jcHAKQEAgLTc3
LDI3ICs3NywyNyBAQCBMaW5lTGF5b3V0Q29udGV4dDo6TGluZUxheW91dENvbnRleHQoY29uc3Qg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdAogewogfQogCi1MaW5lTGF5b3V0
Q29udGV4dDo6TGluZUNvbnRlbnQgTGluZUxheW91dENvbnRleHQ6OmxheW91dExpbmUoTGluZUJ1
aWxkZXImIGxpbmUsIHVuc2lnbmVkIGxlYWRpbmdJbmxpbmVJdGVtSW5kZXgsIE9wdGlvbmFsPFBh
cnRpYWxDb250ZW50PiBsZWFkaW5nUGFydGlhbENvbnRlbnQpCitMaW5lTGF5b3V0Q29udGV4dDo6
TGluZUNvbnRlbnQgTGluZUxheW91dENvbnRleHQ6OmxheW91dExpbmUoTGluZUJ1aWxkZXImIGxp
bmUsIHVuc2lnbmVkIGxlYWRpbmdJbmxpbmVJdGVtSW5kZXgsIE9wdGlvbmFsPHVuc2lnbmVkPiBw
YXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgpCiB7CiAgICAgYXV0byBpbml0aWFsaXplID0gWyZd
IHsKICAgICAgICAgbV9jb21taXR0ZWRJbmxpbmVJdGVtQ291bnQgPSAwOwogICAgICAgICBtX3Vu
Y29tbWl0dGVkQ29udGVudC5yZXNldCgpOwotICAgICAgICBtX2xlYWRpbmdQYXJ0aWFsVGV4dEl0
ZW0gPSB7IH07Ci0gICAgICAgIG1fdHJhaWxpbmdQYXJ0aWFsVGV4dEl0ZW0gPSB7IH07Ci0gICAg
ICAgIG1fb3ZlcmZsb3dQYXJ0aWFsQ29udGVudCA9IHsgfTsKKyAgICAgICAgbV9wYXJ0aWFsTGVh
ZGluZ1RleHRJdGVtID0geyB9OworICAgICAgICBtX3BhcnRpYWxUcmFpbGluZ1RleHRJdGVtID0g
eyB9OworICAgICAgICBtX3BhcnRpYWxDb250ZW50ID0geyB9OwogICAgIH07CiAgICAgaW5pdGlh
bGl6ZSgpOwogICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgaW5saW5lIGNvbnRlbnQgYW5kIHBs
YWNlIHRoZSBpbmxpbmUgYm94ZXMgb24gdGhlIGN1cnJlbnQgbGluZS4KICAgICAvLyBTdGFydCB3
aXRoIHRoZSBwYXJ0aWFsIGxlYWRpbmcgdGV4dCBmcm9tIHRoZSBwcmV2aW91cyBsaW5lLgogICAg
IGF1dG8gZmlyc3ROb25QYXJ0aWFsSW5saW5lSXRlbUluZGV4ID0gbGVhZGluZ0lubGluZUl0ZW1J
bmRleDsKLSAgICBpZiAobGVhZGluZ1BhcnRpYWxDb250ZW50KSB7CisgICAgaWYgKHBhcnRpYWxM
ZWFkaW5nQ29udGVudExlbmd0aCkgewogICAgICAgICAvLyBIYW5kbGUgcGFydGlhbCBpbmxpbmUg
aXRlbSAoc3BsaXQgdGV4dCBmcm9tIHRoZSBwcmV2aW91cyBsaW5lKS4KICAgICAgICAgYXV0byYg
bGVhZGluZ1RleHRJdGVtID0gbV9pbmxpbmVJdGVtc1tsZWFkaW5nSW5saW5lSXRlbUluZGV4XTsK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGVhZGluZ1RleHRJdGVtLT5pc1RleHQoKSk7CiAgICAg
ICAgIC8vIENvbnN0cnVjdCBhIHBhcnRpYWwgbGVhZGluZyBpbmxpbmUgaXRlbS4KLSAgICAgICAg
QVNTRVJUKCFtX2xlYWRpbmdQYXJ0aWFsVGV4dEl0ZW0pOwotICAgICAgICBtX2xlYWRpbmdQYXJ0
aWFsVGV4dEl0ZW0gPSBkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4oKmxlYWRpbmdUZXh0SXRlbSku
cmlnaHQobGVhZGluZ1BhcnRpYWxDb250ZW50LT5sZW5ndGgpOwotICAgICAgICBpZiAocGxhY2VJ
bmxpbmVJdGVtKGxpbmUsICptX2xlYWRpbmdQYXJ0aWFsVGV4dEl0ZW0pID09IElzRW5kT2ZMaW5l
OjpZZXMpCisgICAgICAgIEFTU0VSVCghbV9wYXJ0aWFsTGVhZGluZ1RleHRJdGVtKTsKKyAgICAg
ICAgbV9wYXJ0aWFsTGVhZGluZ1RleHRJdGVtID0gZG93bmNhc3Q8SW5saW5lVGV4dEl0ZW0+KCps
ZWFkaW5nVGV4dEl0ZW0pLnJpZ2h0KCpwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgpOworICAg
ICAgICBpZiAocGxhY2VJbmxpbmVJdGVtKGxpbmUsICptX3BhcnRpYWxMZWFkaW5nVGV4dEl0ZW0p
ID09IElzRW5kT2ZMaW5lOjpZZXMpCiAgICAgICAgICAgICByZXR1cm4gY2xvc2UobGluZSwgbGVh
ZGluZ0lubGluZUl0ZW1JbmRleCk7CiAgICAgICAgICsrZmlyc3ROb25QYXJ0aWFsSW5saW5lSXRl
bUluZGV4OwogICAgIH0KQEAgLTEzMiw3ICsxMzIsNyBAQCBMaW5lTGF5b3V0Q29udGV4dDo6TGlu
ZUNvbnRlbnQgTGluZUxheW91dENvbnRleHQ6OmNsb3NlKExpbmVCdWlsZGVyJiBsaW5lLCB1bnNp
ZwogCiAgICAgYXV0byB0cmFpbGluZ0lubGluZUl0ZW1JbmRleCA9IGxlYWRpbmdJbmxpbmVJdGVt
SW5kZXggKyBtX2NvbW1pdHRlZElubGluZUl0ZW1Db3VudCAtIDE7CiAgICAgYXV0byBpc0xhc3RM
aW5lV2l0aElubGluZUNvbnRlbnQgPSBbJl0gewotICAgICAgICBpZiAobV9vdmVyZmxvd1BhcnRp
YWxDb250ZW50KQorICAgICAgICBpZiAobV9wYXJ0aWFsQ29udGVudCkKICAgICAgICAgICAgIHJl
dHVybiBMaW5lQnVpbGRlcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpObzsKICAgICAg
ICAgLy8gU2tpcCBmbG9hdHMgYmFja3dhcmRzIHRvIHNlZSBpZiB0aGlzIGlzIGdvaW5nIHRvIGJl
IHRoZSBsYXN0IGxpbmUgd2l0aCBpbmxpbmUgY29udGVudC4KICAgICAgICAgZm9yIChhdXRvIGkg
PSBtX2lubGluZUl0ZW1zLnNpemUoKTsgaS0tOykgewpAQCAtMTQ0LDcgKzE0NCw3IEBAIExpbmVM
YXlvdXRDb250ZXh0OjpMaW5lQ29udGVudCBMaW5lTGF5b3V0Q29udGV4dDo6Y2xvc2UoTGluZUJ1
aWxkZXImIGxpbmUsIHVuc2lnCiAgICAgICAgIHJldHVybiBMaW5lQnVpbGRlcjo6SXNMYXN0TGlu
ZVdpdGhJbmxpbmVDb250ZW50OjpObzsKICAgICB9OwogCi0gICAgcmV0dXJuIExpbmVDb250ZW50
IHsgdHJhaWxpbmdJbmxpbmVJdGVtSW5kZXgsIG1fb3ZlcmZsb3dQYXJ0aWFsQ29udGVudCwgV1RG
TW92ZShtX2Zsb2F0cyksIGxpbmUuY2xvc2UoaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KCkp
LCBsaW5lLmxpbmVCb3goKSB9OworICAgIHJldHVybiBMaW5lQ29udGVudCB7IHRyYWlsaW5nSW5s
aW5lSXRlbUluZGV4LCBtX3BhcnRpYWxDb250ZW50LCBXVEZNb3ZlKG1fZmxvYXRzKSwgbGluZS5j
bG9zZShpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQoKSksIGxpbmUubGluZUJveCgpIH07CiB9
CiAKIExpbmVMYXlvdXRDb250ZXh0OjpJc0VuZE9mTGluZSBMaW5lTGF5b3V0Q29udGV4dDo6cGxh
Y2VJbmxpbmVJdGVtKExpbmVCdWlsZGVyJiBsaW5lLCBjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJ
dGVtKQpAQCAtMjE1LDI3ICsyMTUsMjcgQEAgTGluZUxheW91dENvbnRleHQ6OklzRW5kT2ZMaW5l
IExpbmVMYXlvdXRDb250ZXh0Ojpwcm9jZXNzVW5jb21taXR0ZWRDb250ZW50KExpbmUKICAgICBp
ZiAoYnJlYWtpbmdDb250ZXh0LmNvbnRlbnRCcmVhayA9PSBMaW5lQnJlYWtlcjo6QnJlYWtpbmdD
b250ZXh0OjpDb250ZW50QnJlYWs6OktlZXApCiAgICAgICAgIGNvbW1pdFBlbmRpbmdDb250ZW50
KGxpbmUpOwogICAgIGVsc2UgaWYgKGJyZWFraW5nQ29udGV4dC5jb250ZW50QnJlYWsgPT0gTGlu
ZUJyZWFrZXI6OkJyZWFraW5nQ29udGV4dDo6Q29udGVudEJyZWFrOjpTcGxpdCkgewotICAgICAg
ICBBU1NFUlQoYnJlYWtpbmdDb250ZXh0LnRyYWlsaW5nUGFydGlhbENvbnRlbnQpOwotICAgICAg
ICBBU1NFUlQobV91bmNvbW1pdHRlZENvbnRlbnQucnVucygpW2JyZWFraW5nQ29udGV4dC50cmFp
bGluZ1BhcnRpYWxDb250ZW50LT5ydW5JbmRleF0uaW5saW5lSXRlbS5pc1RleHQoKSk7CisgICAg
ICAgIEFTU0VSVChicmVha2luZ0NvbnRleHQucGFydGlhbFRyYWlsaW5nQ29udGVudCk7CisgICAg
ICAgIEFTU0VSVChtX3VuY29tbWl0dGVkQ29udGVudC5ydW5zKClbYnJlYWtpbmdDb250ZXh0LnBh
cnRpYWxUcmFpbGluZ0NvbnRlbnQtPnJ1bkluZGV4XS5pbmxpbmVJdGVtLmlzVGV4dCgpKTsKICAg
ICAgICAgLy8gVHVybiB0aGUgdW5jb21taXR0ZWQgdHJhaWxpbmcgcnVuIGludG8gYSBwYXJ0aWFs
IHRyYWlsaW5nIHJ1bi4KLSAgICAgICAgYXV0byBvdmVyZmxvd0lubGluZVRleHRJdGVtSW5kZXgg
PSBicmVha2luZ0NvbnRleHQudHJhaWxpbmdQYXJ0aWFsQ29udGVudC0+cnVuSW5kZXg7CisgICAg
ICAgIGF1dG8gb3ZlcmZsb3dJbmxpbmVUZXh0SXRlbUluZGV4ID0gYnJlYWtpbmdDb250ZXh0LnBh
cnRpYWxUcmFpbGluZ0NvbnRlbnQtPnJ1bkluZGV4OwogICAgICAgICBhdXRvJiBvdmVyZmxvd0lu
bGluZVRleHRJdGVtID0gZG93bmNhc3Q8SW5saW5lVGV4dEl0ZW0+KG1fdW5jb21taXR0ZWRDb250
ZW50LnJ1bnMoKVtvdmVyZmxvd0lubGluZVRleHRJdGVtSW5kZXhdLmlubGluZUl0ZW0pOwogCiAg
ICAgICAgIC8vIENvbnN0cnVjdCBhIHBhcnRpYWwgdHJhaWxpbmcgaW5saW5lIHJ1bi4KLSAgICAg
ICAgQVNTRVJUKCFtX3RyYWlsaW5nUGFydGlhbFRleHRJdGVtKTsKLSAgICAgICAgYXV0byB0cmFp
bGluZ0NvbnRlbnRMZW5ndGggPSBicmVha2luZ0NvbnRleHQudHJhaWxpbmdQYXJ0aWFsQ29udGVu
dC0+bGVuZ3RoOwotICAgICAgICBtX3RyYWlsaW5nUGFydGlhbFRleHRJdGVtID0gb3ZlcmZsb3dJ
bmxpbmVUZXh0SXRlbS5sZWZ0KHRyYWlsaW5nQ29udGVudExlbmd0aCk7Ci0gICAgICAgIG1fb3Zl
cmZsb3dQYXJ0aWFsQ29udGVudCA9IFBhcnRpYWxDb250ZW50IHsgb3ZlcmZsb3dJbmxpbmVUZXh0
SXRlbS5sZW5ndGgoKSAtIHRyYWlsaW5nQ29udGVudExlbmd0aCB9OworICAgICAgICBBU1NFUlQo
IW1fcGFydGlhbFRyYWlsaW5nVGV4dEl0ZW0pOworICAgICAgICBhdXRvIHRyYWlsaW5nQ29udGVu
dExlbmd0aCA9IGJyZWFraW5nQ29udGV4dC5wYXJ0aWFsVHJhaWxpbmdDb250ZW50LT5sZW5ndGg7
CisgICAgICAgIG1fcGFydGlhbFRyYWlsaW5nVGV4dEl0ZW0gPSBvdmVyZmxvd0lubGluZVRleHRJ
dGVtLmxlZnQodHJhaWxpbmdDb250ZW50TGVuZ3RoKTsKKyAgICAgICAgbV9wYXJ0aWFsQ29udGVu
dCA9IExpbmVDb250ZW50OjpQYXJ0aWFsQ29udGVudCB7IGJyZWFraW5nQ29udGV4dC5wYXJ0aWFs
VHJhaWxpbmdDb250ZW50LT5uZWVkc0h5cGhlbiwgb3ZlcmZsb3dJbmxpbmVUZXh0SXRlbS5sZW5n
dGgoKSAtIHRyYWlsaW5nQ29udGVudExlbmd0aCB9OwogICAgICAgICAvLyBLZWVwIHRoZSBub24t
b3ZlcmZsb3cgcGFydCBvZiB0aGUgdW5jb21taXR0ZWQgcnVucyBhbmQgYWRkIHRoZSB0cmFpbGlu
ZyBwYXJ0aWFsIGNvbnRlbnQuCiAgICAgICAgIG1fdW5jb21taXR0ZWRDb250ZW50LnRyaW0ob3Zl
cmZsb3dJbmxpbmVUZXh0SXRlbUluZGV4KTsKLSAgICAgICAgbV91bmNvbW1pdHRlZENvbnRlbnQu
YXBwZW5kKCptX3RyYWlsaW5nUGFydGlhbFRleHRJdGVtLCBicmVha2luZ0NvbnRleHQudHJhaWxp
bmdQYXJ0aWFsQ29udGVudC0+bG9naWNhbFdpZHRoKTsKKyAgICAgICAgbV91bmNvbW1pdHRlZENv
bnRlbnQuYXBwZW5kKCptX3BhcnRpYWxUcmFpbGluZ1RleHRJdGVtLCBicmVha2luZ0NvbnRleHQu
cGFydGlhbFRyYWlsaW5nQ29udGVudC0+bG9naWNhbFdpZHRoKTsKICAgICAgICAgY29tbWl0UGVu
ZGluZ0NvbnRlbnQobGluZSk7CiAgICAgfSBlbHNlIGlmIChicmVha2luZ0NvbnRleHQuY29udGVu
dEJyZWFrID09IExpbmVCcmVha2VyOjpCcmVha2luZ0NvbnRleHQ6OkNvbnRlbnRCcmVhazo6V3Jh
cCkKICAgICAgICAgbV91bmNvbW1pdHRlZENvbnRlbnQucmVzZXQoKTsKICAgICBlbHNlCiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIC8vIEFkanVzdCBoeXBoZW5hdGVkIGxpbmUg
Y291bnQKLSAgICBtX3N1Y2Nlc3NpdmVIeXBoZW5hdGVkTGluZUNvdW50ID0gYnJlYWtpbmdDb250
ZXh0LnRyYWlsaW5nUGFydGlhbENvbnRlbnQgJiYgYnJlYWtpbmdDb250ZXh0LnRyYWlsaW5nUGFy
dGlhbENvbnRlbnQtPmhhc0h5cGhlbiA/IG1fc3VjY2Vzc2l2ZUh5cGhlbmF0ZWRMaW5lQ291bnQg
KyAxIDogMDsKKyAgICBtX3N1Y2Nlc3NpdmVIeXBoZW5hdGVkTGluZUNvdW50ID0gYnJlYWtpbmdD
b250ZXh0LnBhcnRpYWxUcmFpbGluZ0NvbnRlbnQgJiYgYnJlYWtpbmdDb250ZXh0LnBhcnRpYWxU
cmFpbGluZ0NvbnRlbnQtPm5lZWRzSHlwaGVuID8gbV9zdWNjZXNzaXZlSHlwaGVuYXRlZExpbmVD
b3VudCArIDEgOiAwOwogICAgIHJldHVybiBicmVha2luZ0NvbnRleHQuY29udGVudEJyZWFrID09
IExpbmVCcmVha2VyOjpCcmVha2luZ0NvbnRleHQ6OkNvbnRlbnRCcmVhazo6S2VlcCA/IElzRW5k
T2ZMaW5lOjpObyA6SXNFbmRPZkxpbmU6OlllczsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmgKaW5k
ZXggNjJhNTEzOTA4YjM2NGQxYWU4OWViY2E3OTE0ZTNjMzY2NzVlMDYzMy4uMGZiODBiNmY3MzBk
ZjkyZDY0YWJlMGE5M2I2Zjg0NWZjMTk0ODJlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5oCkBAIC0z
NywxOCArMzcsMTggQEAgY2xhc3MgTGluZUxheW91dENvbnRleHQgewogcHVibGljOgogICAgIExp
bmVMYXlvdXRDb250ZXh0KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiwgY29uc3QgQ29u
dGFpbmVyJiBmb3JtYXR0aW5nQ29udGV4dFJvb3QsIGNvbnN0IElubGluZUl0ZW1zJik7CiAKLSAg
ICBzdHJ1Y3QgUGFydGlhbENvbnRlbnQgewotICAgICAgICAvLyBUaGlzIHdpbGwgcG90ZW50aWFs
bHkgZ2FpbiBzb21lIG1vcmUgbWVtYmVycy4gCi0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCB7IDAg
fTsKLSAgICB9OwogICAgIHN0cnVjdCBMaW5lQ29udGVudCB7CisgICAgICAgIHN0cnVjdCBQYXJ0
aWFsQ29udGVudCB7CisgICAgICAgICAgICBib29sIHRyYWlsaW5nQ29udGVudE5lZWRzSHlwaGVu
IHsgZmFsc2UgfTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG92ZXJsZm93Q29udGVudExlbmd0aCB7
IDAgfTsKKyAgICAgICAgfTsKICAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IHRyYWlsaW5nSW5s
aW5lSXRlbUluZGV4OwotICAgICAgICBPcHRpb25hbDxQYXJ0aWFsQ29udGVudD4gb3ZlcmZsb3dQ
YXJ0aWFsQ29udGVudDsKKyAgICAgICAgT3B0aW9uYWw8UGFydGlhbENvbnRlbnQ+IHBhcnRpYWxD
b250ZW50OwogICAgICAgICBWZWN0b3I8V2Vha1B0cjxJbmxpbmVJdGVtPj4gZmxvYXRzOwogICAg
ICAgICBjb25zdCBMaW5lQnVpbGRlcjo6UnVuTGlzdCBydW5MaXN0OwogICAgICAgICBjb25zdCBM
aW5lQm94IGxpbmVCb3g7CiAgICAgfTsKLSAgICBMaW5lQ29udGVudCBsYXlvdXRMaW5lKExpbmVC
dWlsZGVyJiwgdW5zaWduZWQgbGVhZGluZ0lubGluZUl0ZW1JbmRleCwgT3B0aW9uYWw8UGFydGlh
bENvbnRlbnQ+IGxlYWRpbmdQYXJ0aWFsQ29udGVudCk7CisgICAgTGluZUNvbnRlbnQgbGF5b3V0
TGluZShMaW5lQnVpbGRlciYsIHVuc2lnbmVkIGxlYWRpbmdJbmxpbmVJdGVtSW5kZXgsIE9wdGlv
bmFsPHVuc2lnbmVkPiBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgpOwogCiBwcml2YXRlOgog
ICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7IH0KQEAgLTY1LDkgKzY1LDkg
QEAgcHJpdmF0ZToKICAgICBMaW5lQnJlYWtlcjo6Q29udGVudCBtX3VuY29tbWl0dGVkQ29udGVu
dDsKICAgICB1bnNpZ25lZCBtX2NvbW1pdHRlZElubGluZUl0ZW1Db3VudCB7IDAgfTsKICAgICBW
ZWN0b3I8V2Vha1B0cjxJbmxpbmVJdGVtPj4gbV9mbG9hdHM7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PElubGluZVRleHRJdGVtPiBtX2xlYWRpbmdQYXJ0aWFsVGV4dEl0ZW07Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPElubGluZVRleHRJdGVtPiBtX3RyYWlsaW5nUGFydGlhbFRleHRJdGVtOwotICAgIE9w
dGlvbmFsPFBhcnRpYWxDb250ZW50PiBtX292ZXJmbG93UGFydGlhbENvbnRlbnQ7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPElubGluZVRleHRJdGVtPiBtX3BhcnRpYWxMZWFkaW5nVGV4dEl0ZW07Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPElubGluZVRleHRJdGVtPiBtX3BhcnRpYWxUcmFpbGluZ1RleHRJ
dGVtOworICAgIE9wdGlvbmFsPExpbmVDb250ZW50OjpQYXJ0aWFsQ29udGVudD4gbV9wYXJ0aWFs
Q29udGVudDsKICAgICB1bnNpZ25lZCBtX3N1Y2Nlc3NpdmVIeXBoZW5hdGVkTGluZUNvdW50IHsg
MCB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9u
L0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcAppbmRleCA5MGQwOThk
N2UxYWMyODlhNGFhNjI0NGRkM2Q0ZjczNzdlYTNjNzVkLi43YWYzNzgyYTgyOTczNWZlYjYyOTk4
MDRhYjgzZDlmMmNmNDYwYTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50
ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcApA
QCAtMjIxLDcgKzIyMSwxMCBAQCB2b2lkIExpbmVMYXlvdXQ6OnBhaW50KFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgICAgIGF1dG8gaG9y
aXpvbnRhbEV4cGFuc2lvbiA9IHRleHRDb250ZXh0LmV4cGFuc2lvbigpID8gdGV4dENvbnRleHQu
ZXhwYW5zaW9uKCktPmhvcml6b250YWxFeHBhbnNpb24gOiAwX2x1OwogICAgICAgICBhdXRvIGxv
Z2ljYWxMZWZ0ID0gcGFpbnRPZmZzZXQueCgpICsgcnVuLmxvZ2ljYWxMZWZ0KCk7CiAKLSAgICAg
ICAgVGV4dFJ1biB0ZXh0UnVuIHsgdGV4dENvbnRleHQuY29udGVudCgpLCBsb2dpY2FsTGVmdCwg
aG9yaXpvbnRhbEV4cGFuc2lvbiwgYmVoYXZpb3IgfTsKKyAgICAgICAgU3RyaW5nIHRleHRXaXRo
SHlwaGVuOworICAgICAgICBpZiAodGV4dENvbnRleHQubmVlZHNIeXBoZW4oKSkKKyAgICAgICAg
ICAgIHRleHRXaXRoSHlwaGVuID0gbWFrZVN0cmluZyh0ZXh0Q29udGV4dC5jb250ZW50KCksIHN0
eWxlLmh5cGhlblN0cmluZygpKTsKKyAgICAgICAgVGV4dFJ1biB0ZXh0UnVuIHsgIXRleHRXaXRo
SHlwaGVuLmlzRW1wdHkoKSA/IHRleHRXaXRoSHlwaGVuIDogdGV4dENvbnRleHQuY29udGVudCgp
LCBsb2dpY2FsTGVmdCwgaG9yaXpvbnRhbEV4cGFuc2lvbiwgYmVoYXZpb3IgfTsKICAgICAgICAg
dGV4dFJ1bi5zZXRUYWJTaXplKCFzdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSwgc3R5bGUudGFi
U2l6ZSgpKTsKICAgICAgICAgRmxvYXRQb2ludCB0ZXh0T3JpZ2luIHsgcmVjdC54KCkgKyBwYWlu
dE9mZnNldC54KCksIHJvdW5kVG9EZXZpY2VQaXhlbChiYXNlbGluZU9mZnNldCwgZGV2aWNlU2Nh
bGVGYWN0b3IpIH07CiAK
</data>
<flag name="review"
          id="400875"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>