<?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>200426</bug_id>
          
          <creation_ts>2019-08-04 00:59:33 -0700</creation_ts>
          <short_desc>[LFC] Cleanup preferred width computation</short_desc>
          <delta_ts>2019-08-04 03:16:14 -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>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>commit-queue</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>1558347</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-08-04 00:59:33 -0700</bug_when>
    <thetext>it needs some cleanup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558348</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-04 00:59:56 -0700</bug_when>
    <thetext>&lt;rdar://problem/53912607&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558352</commentid>
    <comment_count>2</comment_count>
      <attachid>375504</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-08-04 02:09:50 -0700</bug_when>
    <thetext>Created attachment 375504
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558353</commentid>
    <comment_count>3</comment_count>
      <attachid>375504</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-08-04 02:42:16 -0700</bug_when>
    <thetext>Comment on attachment 375504
Patch

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

&gt; Source/WebCore/ChangeLog:45
&gt; +        In LFC, we start with the following layout tree
&gt; +        &lt;container&gt; -&gt; block formatting context
&gt; +          &lt;container&gt; -&gt; inline formatting context
&gt; +            &lt;anonymous inline box&gt;
&gt; +          &lt;container&gt; -&gt; inline formatting context
&gt; +            &lt;anonymous inline box&gt;
&gt; +          &lt;container&gt; -&gt; inline formatting context
&gt; +        and when the style change happens, we don&apos;t need to tear down the tree at all. Not only that, but since every formatting contexts stay the same
&gt; +        we can just reuse their states and actually skip all the steps (even the positioning since the absolutely positioned container has static top/bottom/left/right).
&gt; +
&gt; +        Surprisingly the final layout produces the exact same &quot;display boxes&quot; as the original layout.

Nice!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558357</commentid>
    <comment_count>4</comment_count>
      <attachid>375504</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-04 03:16:12 -0700</bug_when>
    <thetext>Comment on attachment 375504
Patch

Clearing flags on attachment: 375504

Committed r248262: &lt;https://trac.webkit.org/changeset/248262&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558358</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-04 03:16:14 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375504</attachid>
            <date>2019-08-04 02:09:50 -0700</date>
            <delta_ts>2019-08-04 03:16:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200426-20190804020949.patch</filename>
            <type>text/plain</type>
            <size>34524</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4MjAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmMzNWUwOWM5MTQ2N2U1
ZWE2M2FiNTg3Y2M2NDYwNTQ3MjRiMDU2ZC4uYWZlZjQ5ZTY0ZjhiOTdiNmUyYmMwODU1YzI1NDll
ZjJmNGE4ODIzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDE5LTA4LTA0ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ10gQ2xlYW51cCBwcmVm
ZXJyZWQgd2lkdGggY29tcHV0YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwMDQyNgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTM5MTI2MDc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGlu
dHJpbnNpYyB3aWR0aCBmb3IgYSBmb3JtYXR0aW5nIHJvb3QgYm94IGhhcyAyIHNldHMgb2YgdmFs
dWVzIG5vdy4gT25lIHNldChtaW4vbWF4KSBpcyBzdG9yZWQgaW4gdGhlIGVzdGFibGlzaGVkIGZv
cm1hdHRpbmcgY29udGV4dCdzIHN0YXRlCisgICAgICAgIHdoaWxlIHRoZSBvdGhlciBpcyBpbiB0
aGUgZm9ybWF0dGluZyBjb250ZXh0J3Mgc3RhdGUgd2hlcmUgdGhlIGJveCBsaXZlcy4KKworICAg
ICAgICA8ZGl2IHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGUiPjxkaXYgc3R5bGU9ImZsb2F0OiBs
ZWZ0OyBib3JkZXI6IDFweCBzb2xpZCBncmVlbiI+Zm9vYmFyPC9kaXY+PC9kaXY+CisKKyAgICAg
ICAgVGhlIGZsb2F0IGJveCBwYXJ0aWNpcGF0ZXMgaW4gdGhlIGZvcm1hdHRpbmcgY29udGV4dCBl
c3RhYmxpc2hlZCBieSB0aGUgYWJzb2x1dGVseSBwb3NpdGlvbiBib3gsIGJ1dCBpdCBhbHNvIGVz
dGFibGlzaGVzIGFuIGlubGluZSBmb3JtYXR0aW5nIGNvbnRleHQuCisgICAgICAgIFRoZSBtaW4v
bWF4IHdpZHRoIHBhaXIgaW4gdGhlIGVzdGFibGlzaGVkIGNvbnRleHQgaXMgdGhlIHdpZHRoIG9m
IHRoZSAiZm9vYmFyIiAoc2FtZSB2YWx1ZSBmb3IgbWluL21heCkuIFRoaXMgc2V0IGlzIHN0b3Jl
ZCBpbiB0aGUgaW5saW5lIGZvcm1hdHRpbmcgc3RhdGUuCisgICAgICAgIEhvd2V2ZXIgdGhlIGZs
b2F0IGJveCBoYXMgaG9yaXpvbnRhbCBib3JkZXIgc28gdGhlICJmaW5hbCIgbWluL21heCB3aWR0
aCBwYWlyIGlzIGV4cGFuZGVkIGJ5IHRoaXMgYm9yZGVyIHZhbHVlIGFuZCBzdG9yZWQgaW4gdGhl
IGZvcm1hdHRpbmcgc3RhdGUgd2hlcmUKKyAgICAgICAgdGhlIGJveCBsaXZlcyAod2hpY2ggaXMg
ZGlmZmVyZW50IGZyb20gdGhlIG9uZSBpdCBlc3RhYmxpc2hlcykuCisKKyAgICAgICAgVGhpcyBh
bmQgdGhlICJyZW1vdmUgdGhlIGZvcm1hdHRpbmcgY29udGV4dCB0eXBlIGNsYXNzZXMgZnJvbSB0
aGUgdHJlZSIgY2hhbmdlcyBvcGVuIHVwIGludGVyZXN0aW5nIG9wdGltaXphdGlvbiBvcHBvcnR1
bml0aWVzLgorICAgICAgICBIZXJlIGlzIGEgdmVyeSBzaW1wbGUgY2FzZToKKyAgICAgICAgPGRp
diBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogYXV0bzsiPgorICAgICAgICAg
IDxkaXYgc3R5bGU9ImZsb2F0OiBsZWZ0Ij5zb21lIHRleHQ8L2Rpdj4KKyAgICAgICAgICA8ZGl2
IHN0eWxlPSJmbG9hdDogbGVmdCI+c29tZSBzdXBlciBsb25nIC4uLi4gdGV4dDwvZGl2PgorICAg
ICAgICAgIDxkaXY+PC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICBJbiBvcmRlciB0byBs
YXkgb3V0IHRoaXMgY29udGVudCBwcm9wZXJseSwgd2UKKyAgICAgICAgMS4gQ29tcHV0ZSB0aGUg
bWluL21heCB3aWR0aCBvZiB0aGUgZmlyc3QgZmxvYXQgKGV4cGVuc2l2ZSB0ZXh0IG1lYXN1cmlu
ZykKKyAgICAgICAgMi4gQ29tcHV0ZSB0aGUgbWluL21heCB3aWR0aCBvZiB0aGUgc2Vjb25kIGZs
b2F0IChzb21lIG1vcmUgZXhwZW5zaXZlIHRleHQgbWVhc3VyaW5nKQorICAgICAgICAzLiBDb21w
dXRlIHRoZSBtaW4vbWF4IHdpZHRoIG9mIHRoZSBpbmxpbmUtYmxvY2sgKHRoYXQgaXMgcHJldHR5
IG11Y2ggdGhlIDIgZmxvYXQncyBtaW4vbWF4KQorICAgICAgICA0LiBMYXkgb3V0IHRoZSAyIGZs
b2F0cywgdGhlIGVtcHR5IGRpdiBhbmQgdGhlIGlubGluZS1ibG9jayB1c2luZyB0aGVzZSBtaW4v
bWF4IHdpZHRoIHBhaXJzLgorCisgICAgICAgIE5vdyBpZiB0aGUgaW5saW5lLWJsb2NrIGJveCdz
IGRpc3BsYXkgdmFsdWUgaXMgY2hhbmdlZCB0byAiYmxvY2siIGFuZCB0aGUgcG9zaXRpb25pbmcg
aXMgdG8gYWJzb2x1dGUgKHN0eWxlPSJkaXNwbGF5OiBib3g7IHBvc2l0aW9uOiBhYnNvbHV0ZTsi
KQorICAgICAgICB3ZSBjdXJyZW50bHkob24gdHJ1bmspIHRlYXIgZG93biB0aGUgcmVuZGVyIHRy
ZWUsIGJ1aWxkIGEgbmV3IG9uZSBhbmQgcnVuIGFsbCB0aGUgc3RlcHMgYWdhaW4gZnJvbSAjMSB0
byAjNC4KKworICAgICAgICBJbiBMRkMsIHdlIHN0YXJ0IHdpdGggdGhlIGZvbGxvd2luZyBsYXlv
dXQgdHJlZQorICAgICAgICA8Y29udGFpbmVyPiAtPiBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQK
KyAgICAgICAgICA8Y29udGFpbmVyPiAtPiBpbmxpbmUgZm9ybWF0dGluZyBjb250ZXh0CisgICAg
ICAgICAgICA8YW5vbnltb3VzIGlubGluZSBib3g+CisgICAgICAgICAgPGNvbnRhaW5lcj4gLT4g
aW5saW5lIGZvcm1hdHRpbmcgY29udGV4dAorICAgICAgICAgICAgPGFub255bW91cyBpbmxpbmUg
Ym94PgorICAgICAgICAgIDxjb250YWluZXI+IC0+IGlubGluZSBmb3JtYXR0aW5nIGNvbnRleHQK
KyAgICAgICAgYW5kIHdoZW4gdGhlIHN0eWxlIGNoYW5nZSBoYXBwZW5zLCB3ZSBkb24ndCBuZWVk
IHRvIHRlYXIgZG93biB0aGUgdHJlZSBhdCBhbGwuIE5vdCBvbmx5IHRoYXQsIGJ1dCBzaW5jZSBl
dmVyeSBmb3JtYXR0aW5nIGNvbnRleHRzIHN0YXkgdGhlIHNhbWUKKyAgICAgICAgd2UgY2FuIGp1
c3QgcmV1c2UgdGhlaXIgc3RhdGVzIGFuZCBhY3R1YWxseSBza2lwIGFsbCB0aGUgc3RlcHMgKGV2
ZW4gdGhlIHBvc2l0aW9uaW5nIHNpbmNlIHRoZSBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgY29udGFp
bmVyIGhhcyBzdGF0aWMgdG9wL2JvdHRvbS9sZWZ0L3JpZ2h0KS4KKworICAgICAgICBTdXJwcmlz
aW5nbHkgdGhlIGZpbmFsIGxheW91dCBwcm9kdWNlcyB0aGUgZXhhY3Qgc2FtZSAiZGlzcGxheSBi
b3hlcyIgYXMgdGhlIG9yaWdpbmFsIGxheW91dC4KKworICAgICAgICAqIGxheW91dC9Gb3JtYXR0
aW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4
dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50czo6ZXhwYW5kKToKKyAgICAgICAgKiBsYXlvdXQv
Rm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6c2hyaW5rVG9GaXRXaWR0aCk6CisgICAgICAg
ICogbGF5b3V0L0Zvcm1hdHRpbmdTdGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpG
b3JtYXR0aW5nU3RhdGU6OnNldEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nU3RhdGU6OmludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nU3RhdGU6OnNl
dEludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3gpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpGb3JtYXR0aW5nU3RhdGU6OmNsZWFySW50cmluc2ljV2lkdGhDb25zdHJhaW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdTdGF0ZTo6aW50cmluc2ljV2lkdGhD
b25zdHJhaW50c0ZvckJveCBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2Jsb2NrZm9ybWF0dGlu
Zy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4
dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIGxheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oOgor
ICAgICAgICAqIGxheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdl
b21ldHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29u
dGV4dDo6R2VvbWV0cnk6OmludHJpbnNpY1dpZHRoQ29uc3RyYWludHMpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW50cmluc2lj
V2lkdGhDb25zdHJhaW50c05lZWRDaGlsZHJlbldpZHRoKTogRGVsZXRlZC4KKyAgICAgICAgKiBs
YXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUJveC5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eTo6Qm94Ojpob3Jpem9udGFsTWFyZ2luQm9yZGVyQW5kUGFkZGluZyBjb25zdCk6CisgICAgICAg
ICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpuZXh0SW5QcmVPcmRlcik6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9yRm9ybWF0dGluZ1Jvb3Qg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUlu
dHJpbnNpY1dpZHRoRm9yRmxvYXRCb3ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRo
Rm9ySW5saW5lQmxvY2sgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAgICogbGF5b3V0L3Rh
YmxlZm9ybWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzIGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvdGFibGVmb3JtYXR0aW5nL1Rh
YmxlRm9ybWF0dGluZ0NvbnRleHQuaDoKKwogMjAxOS0wOC0wMyAgWmFsYW4gQnVqdGFzICA8emFs
YW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdIFJlbW92ZSBmb3JtYXR0aW5nIGNvbnRleHQg
dHlwZSBsZWFmIGNsYXNzZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3Jt
YXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0
LmgKaW5kZXggNjk1MzdmYmM4MjAyNDkxZDczNTVlNTVhMGE1ZTYxYmJiYTI3NjUxMi4uZDE3M2E0
ZWY2OTQ3MjA0OWU4MWE5NWE5M2IwYjY2YWZhYTcwYzNmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTUzLDEwICs1MywxMiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBsYXlvdXRPdXRPZkZsb3dEZXNjZW5kYW50cyhjb25zdCBCb3gmKSBjb25zdDsKIAogICAg
IHN0cnVjdCBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIHsKKyAgICAgICAgdm9pZCBleHBhbmQo
TGF5b3V0VW5pdCBob3Jpem9udGFsVmFsdWUpOworCiAgICAgICAgIExheW91dFVuaXQgbWluaW11
bTsKICAgICAgICAgTGF5b3V0VW5pdCBtYXhpbXVtOwogICAgIH07Ci0gICAgdmlydHVhbCB2b2lk
IGNvbXB1dGVJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHMoKSBjb25zdCA9IDA7CiAKICAgICBzdGF0aWMgRGlzcGxheTo6Qm94IG1hcEJveFRvQW5j
ZXN0b3IoY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmLCBjb25zdCBDb250YWluZXImIGFu
Y2VzdG9yKTsKICAgICBzdGF0aWMgTGF5b3V0VW5pdCBtYXBUb3BUb0FuY2VzdG9yKGNvbnN0IExh
eW91dFN0YXRlJiwgY29uc3QgQm94JiwgY29uc3QgQ29udGFpbmVyJiBhbmNlc3Rvcik7CkBAIC0x
MzksNiArMTQxLDEyIEBAIHByaXZhdGU6CiAgICAgRm9ybWF0dGluZ1N0YXRlJiBtX2Zvcm1hdHRp
bmdTdGF0ZTsKIH07CiAKK2lubGluZSB2b2lkIEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNX
aWR0aENvbnN0cmFpbnRzOjpleHBhbmQoTGF5b3V0VW5pdCBob3Jpem9udGFsVmFsdWUpCit7Cisg
ICAgbWluaW11bSArPSBob3Jpem9udGFsVmFsdWU7CisgICAgbWF4aW11bSArPSBob3Jpem9udGFs
VmFsdWU7Cit9CisKIH0KIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCmluZGV4IDQ1NjAwZTA1MjFlZDU0NDgwZDI0
M2UzMTFkNDViMGM0ZDA2MjY2NWYuLjRhN2RiN2Q1ZDRkYTFlYjMxZmY4NGQ5N2NkZGMxN2NjZjI1
ZjNkYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4
dEdlb21ldHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRl
eHRHZW9tZXRyeS5jcHAKQEAgLTI1MCwxMiArMjUwLDEwIEBAIExheW91dFVuaXQgRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5OjpzaHJpbmtUb0ZpdFdpZHRoKExheW91dFN0YXRlJiBsYXlvdXRT
dGF0CiAgICAgLy8gJ3BhZGRpbmctbGVmdCcsICdwYWRkaW5nLXJpZ2h0JywgJ2JvcmRlci1yaWdo
dC13aWR0aCcsICdtYXJnaW4tcmlnaHQnLCBhbmQgdGhlIHdpZHRocyBvZiBhbnkgcmVsZXZhbnQg
c2Nyb2xsIGJhcnMuCiAKICAgICAvLyBUaGVuIHRoZSBzaHJpbmstdG8tZml0IHdpZHRoIGlzOiBt
aW4obWF4KHByZWZlcnJlZCBtaW5pbXVtIHdpZHRoLCBhdmFpbGFibGUgd2lkdGgpLCBwcmVmZXJy
ZWQgd2lkdGgpLgotICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZUZvclJvb3QgPSBsYXlvdXRTdGF0
ZS5mb3JtYXR0aW5nU3RhdGVGb3JCb3goZm9ybWF0dGluZ1Jvb3QpOwotICAgIGF1dG8gaW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cyA9IGZvcm1hdHRpbmdTdGF0ZUZvclJvb3QuaW50cmluc2ljV2lk
dGhDb25zdHJhaW50cyhmb3JtYXR0aW5nUm9vdCk7Ci0gICAgaWYgKCFpbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzKSB7Ci0gICAgICAgIGxheW91dFN0YXRlLmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0
KGZvcm1hdHRpbmdSb290KS0+Y29tcHV0ZUludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKTsKLSAg
ICAgICAgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IGZvcm1hdHRpbmdTdGF0ZUZvclJvb3Qu
aW50cmluc2ljV2lkdGhDb25zdHJhaW50cyhmb3JtYXR0aW5nUm9vdCk7Ci0gICAgfQorICAgIGF1
dG8mIGZvcm1hdHRpbmdTdGF0ZUZvclJvb3QgPSBsYXlvdXRTdGF0ZS5jcmVhdGVGb3JtYXR0aW5n
U3RhdGVGb3JGb3JtYXR0aW5nUm9vdElmTmVlZGVkKGZvcm1hdHRpbmdSb290KTsKKyAgICBhdXRv
IGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBmb3JtYXR0aW5nU3RhdGVGb3JSb290LmludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMoKTsKKyAgICBpZiAoIWludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMpCisgICAgICAgIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBsYXlvdXRTdGF0ZS5jcmVh
dGVGb3JtYXR0aW5nQ29udGV4dChmb3JtYXR0aW5nUm9vdCktPmNvbXB1dGVkSW50cmluc2ljV2lk
dGhDb25zdHJhaW50cygpOwogICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSAqdXNlZFZhbHVlcy5j
b250YWluaW5nQmxvY2tXaWR0aDsKICAgICByZXR1cm4gc3RkOjptaW4oc3RkOjptYXgoaW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cy0+bWluaW11bSwgYXZhaWxhYmxlV2lkdGgpLCBpbnRyaW5zaWNX
aWR0aENvbnN0cmFpbnRzLT5tYXhpbXVtKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9Gb3JtYXR0aW5nU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0
aW5nU3RhdGUuaAppbmRleCA2NjdlYmQ3NTU3NDU3NzNhMjhlMTE3OGQ4ZTZjN2ZlZTQ1NmExNGQz
Li4wZGE3MzA5ZTIyMjc4MGRmZjVlNzY0MjY5ZGNhOGFlNGRkMjljYzgwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ1N0YXRlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L0Zvcm1hdHRpbmdTdGF0ZS5oCkBAIC01MSw5ICs1MSwxMiBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBtYXJrTmVlZHNMYXlvdXQoY29uc3QgQm94JiwgU3R5bGVEaWZmKTsKICAgICBib29s
IG5lZWRzTGF5b3V0KGNvbnN0IEJveCYpOwogCi0gICAgdm9pZCBzZXRJbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzKGNvbnN0IEJveCYsICBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhD
b25zdHJhaW50cyk7CisgICAgdm9pZCBzZXRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQm94
KGNvbnN0IEJveCYsICBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50
cyk7CisgICAgT3B0aW9uYWw8Rm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHM+IGludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3goY29uc3QgQm94JikgY29uc3Q7
CiAgICAgdm9pZCBjbGVhckludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoY29uc3QgQm94Jik7Ci0g
ICAgT3B0aW9uYWw8Rm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHM+
IGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoY29uc3QgQm94JikgY29uc3Q7CisKKyAgICB2b2lk
IHNldEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNp
Y1dpZHRoQ29uc3RyYWludHMgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cykgeyBtX2ludHJpbnNp
Y1dpZHRoQ29uc3RyYWludHMgPSBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzOyB9CisgICAgT3B0
aW9uYWw8Rm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHM+IGludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMoKSBjb25zdCB7IHJldHVybiBtX2ludHJpbnNpY1dpZHRoQ29u
c3RyYWludHM7IH0KIAogICAgIGJvb2wgaXNCbG9ja0Zvcm1hdHRpbmdTdGF0ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpCbG9jazsgfQogICAgIGJvb2wgaXNJbmxpbmVGb3JtYXR0
aW5nU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6SW5saW5lOyB9CkBAIC02
OCwyNyArNzEsMjkgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBMYXlvdXRTdGF0ZSYgbV9s
YXlvdXRTdGF0ZTsKICAgICBSZWY8RmxvYXRpbmdTdGF0ZT4gbV9mbG9hdGluZ1N0YXRlOwotICAg
IEhhc2hNYXA8Y29uc3QgQm94KiwgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29u
c3RyYWludHM+IG1faW50cmluc2ljV2lkdGhDb25zdHJhaW50czsKKyAgICBIYXNoTWFwPGNvbnN0
IEJveCosIEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzPiBtX2lu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3hlczsKKyAgICBPcHRpb25hbDxGb3JtYXR0aW5n
Q29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cz4gbV9pbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzOwogICAgIFR5cGUgbV90eXBlOwogfTsKIAotaW5saW5lIHZvaWQgRm9ybWF0dGluZ1N0
YXRlOjpzZXRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBG
b3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBpbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzKQoraW5saW5lIHZvaWQgRm9ybWF0dGluZ1N0YXRlOjpzZXRJbnRyaW5zaWNX
aWR0aENvbnN0cmFpbnRzRm9yQm94KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBGb3JtYXR0aW5nQ29u
dGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
KQogewotICAgIEFTU0VSVCghbV9pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLmNvbnRhaW5zKCZs
YXlvdXRCb3gpKTsKKyAgICBBU1NFUlQoIW1faW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckJv
eGVzLmNvbnRhaW5zKCZsYXlvdXRCb3gpKTsKICAgICBBU1NFUlQoJm1fbGF5b3V0U3RhdGUuZm9y
bWF0dGluZ1N0YXRlRm9yQm94KGxheW91dEJveCkgPT0gdGhpcyk7Ci0gICAgbV9pbnRyaW5zaWNX
aWR0aENvbnN0cmFpbnRzLnNldCgmbGF5b3V0Qm94LCBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
KTsKKyAgICBtX2ludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3hlcy5zZXQoJmxheW91dEJv
eCwgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cyk7CiB9CiAKIGlubGluZSB2b2lkIEZvcm1hdHRp
bmdTdGF0ZTo6Y2xlYXJJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKGNvbnN0IEJveCYgbGF5b3V0
Qm94KQogewotICAgIG1faW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5yZW1vdmUoJmxheW91dEJv
eCk7CisgICAgbV9pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0geyB9OworICAgIG1faW50cmlu
c2ljV2lkdGhDb25zdHJhaW50c0ZvckJveGVzLnJlbW92ZSgmbGF5b3V0Qm94KTsKIH0KIAotaW5s
aW5lIE9wdGlvbmFsPEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
PiBGb3JtYXR0aW5nU3RhdGU6OmludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoY29uc3QgQm94JiBs
YXlvdXRCb3gpIGNvbnN0CitpbmxpbmUgT3B0aW9uYWw8Rm9ybWF0dGluZ0NvbnRleHQ6OkludHJp
bnNpY1dpZHRoQ29uc3RyYWludHM+IEZvcm1hdHRpbmdTdGF0ZTo6aW50cmluc2ljV2lkdGhDb25z
dHJhaW50c0ZvckJveChjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKIHsKICAgICBBU1NFUlQo
Jm1fbGF5b3V0U3RhdGUuZm9ybWF0dGluZ1N0YXRlRm9yQm94KGxheW91dEJveCkgPT0gdGhpcyk7
Ci0gICAgYXV0byBpdGVyYXRvciA9IG1faW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5maW5kKCZs
YXlvdXRCb3gpOwotICAgIGlmIChpdGVyYXRvciA9PSBtX2ludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMuZW5kKCkpCisgICAgYXV0byBpdGVyYXRvciA9IG1faW50cmluc2ljV2lkdGhDb25zdHJhaW50
c0ZvckJveGVzLmZpbmQoJmxheW91dEJveCk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1faW50cmlu
c2ljV2lkdGhDb25zdHJhaW50c0ZvckJveGVzLmVuZCgpKQogICAgICAgICByZXR1cm4geyB9Owog
ICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0
LmNwcAppbmRleCA1YjVmOTMxNzc0MTk1NjU2MTc1ZmY0YTI4OTMxMjA2YTQyMWM4NzMwLi42NGFj
YzZjMjA4OWY3OTRmZjMzZGIzM2I2OGM0YzYyYTExMDE4ZmNhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0
aW5nQ29udGV4dC5jcHAKQEAgLTQ1MiwxNiArNDUyLDEyIEBAIHZvaWQgQmxvY2tGb3JtYXR0aW5n
Q29udGV4dDo6Y29tcHV0ZUhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCkgY29u
c3QKICAgICBNYXJnaW5Db2xsYXBzZTo6dXBkYXRlTWFyZ2luQWZ0ZXJGb3JQcmV2aW91c1NpYmxp
bmcobGF5b3V0U3RhdGUsIGxheW91dEJveCk7CiB9CiAKLXZvaWQgQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKSBjb25zdAorRm9ybWF0dGlu
Z0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgQmxvY2tGb3JtYXR0aW5nQ29udGV4
dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkgY29uc3QKIHsKICAgICBhdXRv
JiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7CiAgICAgYXV0byYgZm9ybWF0dGlu
Z1Jvb3QgPSByb290KCk7Ci0gICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlRm9yUm9vdCA9IGxheW91
dFN0YXRlLmZvcm1hdHRpbmdTdGF0ZUZvckJveChmb3JtYXR0aW5nUm9vdCk7Ci0gICAgQVNTRVJU
KCFmb3JtYXR0aW5nU3RhdGVGb3JSb290LmludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoZm9ybWF0
dGluZ1Jvb3QpKTsKLQotICAgIC8vIENhbiB3ZSBqdXN0IGNvbXB1dGUgdGhlbSB3aXRob3V0IGNo
ZWNraW5nIHRoZSBjaGlsZHJlbj8KLSAgICBpZiAoIUdlb21ldHJ5OjppbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzTmVlZENoaWxkcmVuV2lkdGgoZm9ybWF0dGluZ1Jvb3QpKQotICAgICAgICByZXR1
cm4gZm9ybWF0dGluZ1N0YXRlRm9yUm9vdC5zZXRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKGZv
cm1hdHRpbmdSb290LCBHZW9tZXRyeTo6aW50cmluc2ljV2lkdGhDb25zdHJhaW50cyhsYXlvdXRT
dGF0ZSwgZm9ybWF0dGluZ1Jvb3QpKTsKKyAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSB0aGlz
LT5mb3JtYXR0aW5nU3RhdGUoKTsKKyAgICBBU1NFUlQoIWZvcm1hdHRpbmdTdGF0ZS5pbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzKCkpOwogCiAgICAgLy8gVmlzaXQgdGhlIGluLWZsb3cgZGVzY2Vu
ZGFudHMgYW5kIGNvbXB1dGUgdGhlaXIgbWluL21heCBpbnRyaW5zaWMgd2lkdGggaWYgbmVlZGVk
LgogICAgIC8vIDEuIEdvIGFsbCB0aGUgd2F5IGRvd24gdG8gdGhlIGxlYWYgbm9kZQpAQCAtNDY5
LDUwICs0NjUsMzggQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cygpIGNvbnN0CiAgICAgLy8gMy4gQXMgd2UgY2xpbWIgYmFjayBv
biB0aGUgdHJlZSwgY29tcHV0ZSBtaW4vbWF4IGludHJpbnNpYyB3aWR0aAogICAgIC8vIChBbnkg
c3VidHJlZXMgd2l0aCBuZXcgZm9ybWF0dGluZyBjb250ZXh0cyBuZWVkIHRvIGxheW91dCBzeW5j
aHJvbm91c2x5KQogICAgIFZlY3Rvcjxjb25zdCBCb3gqPiBxdWV1ZTsKLSAgICBBU1NFUlQoaXM8
Q29udGFpbmVyPihmb3JtYXR0aW5nUm9vdCkpOwotICAgIGlmIChhdXRvKiBmaXJzdENoaWxkID0g
ZG93bmNhc3Q8Q29udGFpbmVyPihmb3JtYXR0aW5nUm9vdCkuZmlyc3RJbkZsb3dPckZsb2F0aW5n
Q2hpbGQoKSkKLSAgICAgICAgcXVldWUuYXBwZW5kKGZpcnN0Q2hpbGQpOworICAgIGlmIChpczxD
b250YWluZXI+KGZvcm1hdHRpbmdSb290KSAmJiBkb3duY2FzdDxDb250YWluZXI+KGZvcm1hdHRp
bmdSb290KS5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKSkKKyAgICAgICAgcXVldWUuYXBwZW5k
KGRvd25jYXN0PENvbnRhaW5lcj4oZm9ybWF0dGluZ1Jvb3QpLmZpcnN0SW5GbG93T3JGbG9hdGlu
Z0NoaWxkKCkpOwogCi0gICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gdGhpcy0+Zm9ybWF0dGlu
Z1N0YXRlKCk7CisgICAgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBjb25zdHJhaW50czsKICAg
ICB3aGlsZSAoIXF1ZXVlLmlzRW1wdHkoKSkgewogICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAg
ICAgICAgICAgYXV0byYgY2hpbGRCb3ggPSAqcXVldWUubGFzdCgpOwotICAgICAgICAgICAgYXV0
byBjaGlsZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBmb3JtYXR0aW5nU3RhdGUuaW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cyhjaGlsZEJveCk7Ci0gICAgICAgICAgICBhdXRvIHNraXBEZXNj
ZW5kYW50cyA9IGNoaWxkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyB8fCAhR2VvbWV0cnk6Omlu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHNOZWVkQ2hpbGRyZW5XaWR0aChjaGlsZEJveCkgfHwgY2hp
bGRCb3guZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpOwotCi0gICAgICAgICAgICBpZiAo
c2tpcERlc2NlbmRhbnRzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjaGlsZEludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFHZW9tZXRyeTo6aW50
cmluc2ljV2lkdGhDb25zdHJhaW50c05lZWRDaGlsZHJlbldpZHRoKGNoaWxkQm94KSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5zZXRJbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzKGNoaWxkQm94LCBHZW9tZXRyeTo6aW50cmluc2ljV2lkdGhDb25zdHJhaW50cyhsYXlv
dXRTdGF0ZSwgY2hpbGRCb3gpKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hpbGRC
b3guZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgbGF5b3V0U3RhdGUuY3JlYXRlRm9ybWF0dGluZ0NvbnRleHQoY2hpbGRCb3gpLT5jb21wdXRl
SW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgcXVldWUucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAg
ICAgIGlmICghY2hpbGRCb3gubmV4dEluRmxvd09yRmxvYXRpbmdTaWJsaW5nKCkpCi0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIHF1ZXVlLmFwcGVuZChjaGlsZEJv
eC5uZXh0SW5GbG93T3JGbG9hdGluZ1NpYmxpbmcoKSk7Ci0gICAgICAgICAgICAgICAgLy8gU2tp
cCBkZXNjZW5kYW50cwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKCFpczxDb250YWluZXI+KGNoaWxkQm94KSB8fCAhZG93bmNhc3Q8Q29u
dGFpbmVyPihjaGlsZEJveCkuaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxkKCkpCisgICAgICAgICAg
ICBhdXRvJiBsYXlvdXRCb3ggPSAqcXVldWUubGFzdCgpOworICAgICAgICAgICAgYXV0byBoYXNJ
bkZsb3dPckZsb2F0aW5nQ2hpbGQgPSBpczxDb250YWluZXI+KGxheW91dEJveCkgJiYgZG93bmNh
c3Q8Q29udGFpbmVyPihsYXlvdXRCb3gpLmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpOworICAg
ICAgICAgICAgYXV0byBza2lwRGVzY2VuZGFudHMgPSBmb3JtYXR0aW5nU3RhdGUuaW50cmluc2lj
V2lkdGhDb25zdHJhaW50c0ZvckJveChsYXlvdXRCb3gpIHx8ICFoYXNJbkZsb3dPckZsb2F0aW5n
Q2hpbGQgfHwgbGF5b3V0Qm94LmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSB8fCBsYXlv
dXRCb3guc3R5bGUoKS53aWR0aCgpLmlzRml4ZWQoKTsKKyAgICAgICAgICAgIGlmIChza2lwRGVz
Y2VuZGFudHMpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBxdWV1ZS5hcHBl
bmQoZG93bmNhc3Q8Q29udGFpbmVyPihjaGlsZEJveCkuZmlyc3RJbkZsb3dPckZsb2F0aW5nQ2hp
bGQoKSk7CisgICAgICAgICAgICBxdWV1ZS5hcHBlbmQoZG93bmNhc3Q8Q29udGFpbmVyPihsYXlv
dXRCb3gpLmZpcnN0SW5GbG93T3JGbG9hdGluZ0NoaWxkKCkpOwogICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gQ29tcHV0ZSBtaW4vbWF4IGludHJpbnNpYyB3aWR0aCBib3R0b20gdXAuCisgICAgICAg
IC8vIENvbXB1dGUgbWluL21heCBpbnRyaW5zaWMgd2lkdGggYm90dG9tIHVwIGlmIG5lZWRlZC4K
ICAgICAgICAgd2hpbGUgKCFxdWV1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGF1dG8mIGNo
aWxkQm94ID0gKnF1ZXVlLnRha2VMYXN0KCk7Ci0gICAgICAgICAgICBmb3JtYXR0aW5nU3RhdGUu
c2V0SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyhjaGlsZEJveCwgR2VvbWV0cnk6OmludHJpbnNp
Y1dpZHRoQ29uc3RyYWludHMobGF5b3V0U3RhdGUsIGNoaWxkQm94KSk7IAorICAgICAgICAgICAg
YXV0byYgbGF5b3V0Qm94ID0gKnF1ZXVlLnRha2VMYXN0KCk7CisgICAgICAgICAgICBhdXRvIGRl
c2RlbmRhbnRDb25zdHJhaW50cyA9IGZvcm1hdHRpbmdTdGF0ZS5pbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzRm9yQm94KGxheW91dEJveCk7IAorICAgICAgICAgICAgaWYgKCFkZXNkZW5kYW50Q29u
c3RyYWludHMpIHsKKyAgICAgICAgICAgICAgICBkZXNkZW5kYW50Q29uc3RyYWludHMgPSBHZW9t
ZXRyeTo6aW50cmluc2ljV2lkdGhDb25zdHJhaW50cyhsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94KTsK
KyAgICAgICAgICAgICAgICBmb3JtYXR0aW5nU3RhdGUuc2V0SW50cmluc2ljV2lkdGhDb25zdHJh
aW50c0ZvckJveChsYXlvdXRCb3gsICpkZXNkZW5kYW50Q29uc3RyYWludHMpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY29uc3RyYWludHMubWluaW11bSA9IHN0ZDo6bWF4KGNvbnN0cmFp
bnRzLm1pbmltdW0sIGRlc2RlbmRhbnRDb25zdHJhaW50cy0+bWluaW11bSk7CisgICAgICAgICAg
ICBjb25zdHJhaW50cy5tYXhpbXVtID0gc3RkOjptYXgoY29uc3RyYWludHMubWF4aW11bSwgZGVz
ZGVuZGFudENvbnN0cmFpbnRzLT5tYXhpbXVtKTsKICAgICAgICAgICAgIC8vIE1vdmUgb3ZlciB0
byB0aGUgbmV4dCBzaWJsaW5nIG9yIHRha2UgdGhlIG5leHQgYm94IGluIHRoZSBxdWV1ZS4KLSAg
ICAgICAgICAgIGlmIChhdXRvKiBuZXh0U2libGluZyA9IGNoaWxkQm94Lm5leHRJbkZsb3dPckZs
b2F0aW5nU2libGluZygpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogbmV4dFNpYmxpbmcgPSBs
YXlvdXRCb3gubmV4dEluRmxvd09yRmxvYXRpbmdTaWJsaW5nKCkpIHsKICAgICAgICAgICAgICAg
ICBxdWV1ZS5hcHBlbmQobmV4dFNpYmxpbmcpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIGZvcm1hdHRpbmdTdGF0ZUZvclJvb3Qu
c2V0SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyhmb3JtYXR0aW5nUm9vdCwgR2VvbWV0cnk6Omlu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHMobGF5b3V0U3RhdGUsIGZvcm1hdHRpbmdSb290KSk7Cisg
ICAgZm9ybWF0dGluZ1N0YXRlLnNldEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoY29uc3RyYWlu
dHMpOworICAgIHJldHVybiBjb25zdHJhaW50czsKIH0KIAogTGF5b3V0VW5pdCBCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0Ojp2ZXJ0aWNhbFBvc2l0aW9uV2l0aE1hcmdpbihjb25zdCBCb3gmIGxheW91
dEJveCwgY29uc3QgVXNlZFZlcnRpY2FsTWFyZ2luJiB2ZXJ0aWNhbE1hcmdpbikgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9C
bG9ja0Zvcm1hdHRpbmdDb250ZXh0LmgKaW5kZXggNWUzYWRmMzE2NjQxMWZhYmM2OGZkMDdhMWU4
ZjRlYzE1NGJhZjA5YS4uM2QwZjY2NmY4OGViYWExNWJlNzU0OTY2MTdmNGRmYWI2M2EwYWZjYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zv
cm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0
dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTY5LDcgKzY5LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGNvbXB1dGVFc3RpbWF0ZWRWZXJ0aWNhbFBvc2l0aW9uRm9yRm9ybWF0dGluZ1Jv
b3QoY29uc3QgQm94JikgY29uc3Q7CiAgICAgdm9pZCBjb21wdXRlRXN0aW1hdGVkVmVydGljYWxQ
b3NpdGlvbkZvckZsb2F0Q2xlYXIoY29uc3QgRmxvYXRpbmdDb250ZXh0JiwgY29uc3QgQm94Jikg
Y29uc3Q7CiAKLSAgICB2b2lkIGNvbXB1dGVJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBjb21wdXRlZEludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMoKSBjb25zdCBvdmVycmlkZTsKICAgICBMYXlvdXRVbml0IHZl
cnRpY2FsUG9zaXRpb25XaXRoTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IFVzZWRWZXJ0aWNhbE1h
cmdpbiYpIGNvbnN0OwogCiAgICAgLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHBvc2l0aW9uaW5n
IGFuZCBzaXppbmcgZm9yIGJveGVzIHBhcnRpY2lwYXRpbmcgaW4gYSBibG9jayBmb3JtYXR0aW5n
IGNvbnRleHQuCkBAIC04Miw4ICs4Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBMYXlv
dXRVbml0IHN0YXRpY1ZlcnRpY2FsUG9zaXRpb24oY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBC
b3gmKTsKICAgICAgICAgc3RhdGljIExheW91dFVuaXQgc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9u
KGNvbnN0IExheW91dFN0YXRlJiwgY29uc3QgQm94Jik7CiAKLSAgICAgICAgc3RhdGljIGJvb2wg
aW50cmluc2ljV2lkdGhDb25zdHJhaW50c05lZWRDaGlsZHJlbldpZHRoKGNvbnN0IEJveCYpOwot
ICAgICAgICBzdGF0aWMgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBpbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzKGNvbnN0IExheW91dFN0YXRlJiwgY29uc3QgQm94Jik7CisgICAgICAgIHN0YXRp
YyBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoTGF5
b3V0U3RhdGUmLCBjb25zdCBCb3gmKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBI
ZWlnaHRBbmRNYXJnaW4gaW5GbG93Tm9uUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4oY29uc3QgTGF5
b3V0U3RhdGUmLCBjb25zdCBCb3gmLCBVc2VkVmVydGljYWxWYWx1ZXMpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250
ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9C
bG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCmluZGV4IDRiZjNlYTVmZWM3NzJhNjc5
YTViNWEyMjM2MzhlNDM2NzRjNzcxOGQuLjA5ODk4YzIwNGM3NDc5MTMzMjMyNjQ5MDQ3NDgxM2I0
NWM2MzU1NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRp
bmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5j
cHAKQEAgLTI4NSwxNSArMjg1LDE4IEBAIFdpZHRoQW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6Okdlb21ldHJ5OjppbkZsb3dXaWR0aEFuZE1hcmdpbihjb25zdCBMYXlvCiAgICAgcmV0
dXJuIGluRmxvd1JlcGxhY2VkV2lkdGhBbmRNYXJnaW4obGF5b3V0U3RhdGUsIGxheW91dEJveCwg
dXNlZFZhbHVlcyk7CiB9CiAKLWJvb2wgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6
OmludHJpbnNpY1dpZHRoQ29uc3RyYWludHNOZWVkQ2hpbGRyZW5XaWR0aChjb25zdCBCb3gmIGxh
eW91dEJveCkKK0Zvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIEJs
b2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
KExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gpCiB7Ci0gICAg
aWYgKCFpczxDb250YWluZXI+KGxheW91dEJveCkgfHwgIWRvd25jYXN0PENvbnRhaW5lcj4obGF5
b3V0Qm94KS5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHJldHVybiBsYXlvdXRCb3guc3R5bGUoKS53aWR0aCgpLmlzQXV0bygpOwotfQorICAg
IGF1dG8gZml4ZWRNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nID0gWyZdKGF1dG8mIGxheW91dEJveCkg
eworICAgICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOworICAgICAgICByZXR1
cm4gZml4ZWRWYWx1ZShzdHlsZS5tYXJnaW5TdGFydCgpKS52YWx1ZU9yKDApCisgICAgICAgICAg
ICArIExheW91dFVuaXQgeyBzdHlsZS5ib3JkZXJMZWZ0V2lkdGgoKSB9CisgICAgICAgICAgICAr
IGZpeGVkVmFsdWUoc3R5bGUucGFkZGluZ0xlZnQoKSkudmFsdWVPcigwKQorICAgICAgICAgICAg
KyBmaXhlZFZhbHVlKHN0eWxlLnBhZGRpbmdSaWdodCgpKS52YWx1ZU9yKDApCisgICAgICAgICAg
ICArIExheW91dFVuaXQgeyBzdHlsZS5ib3JkZXJSaWdodFdpZHRoKCkgfQorICAgICAgICAgICAg
KyBmaXhlZFZhbHVlKHN0eWxlLm1hcmdpbkVuZCgpKS52YWx1ZU9yKDApOworICAgIH07CiAKLUZv
cm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIEJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5OjppbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKGNvbnN0IExheW91
dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gpCi17CiAgICAgYXV0byBj
b21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBbJl0oKSAtPiBJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzIHsKICAgICAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsK
ICAgICAgICAgaWYgKGF1dG8gd2lkdGggPSBmaXhlZFZhbHVlKHN0eWxlLmxvZ2ljYWxXaWR0aCgp
KSkKQEAgLTMxMSwzMiArMzE0LDMxIEBAIEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppCiAgICAgICAg
ICAgICByZXR1cm4geyB9OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFpczxDb250YWluZXI+
KGxheW91dEJveCkpCisgICAgICAgIGlmIChsYXlvdXRCb3guZXN0YWJsaXNoZXNGb3JtYXR0aW5n
Q29udGV4dCgpKQorICAgICAgICAgICAgcmV0dXJuIGxheW91dFN0YXRlLmNyZWF0ZUZvcm1hdHRp
bmdDb250ZXh0KGxheW91dEJveCktPmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygp
OworCisgICAgICAgIGlmICghaXM8Q29udGFpbmVyPihsYXlvdXRCb3gpIHx8ICFkb3duY2FzdDxD
b250YWluZXI+KGxheW91dEJveCkuaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxkKCkpCiAgICAgICAg
ICAgICByZXR1cm4geyB9OwogCiAgICAgICAgIGF1dG8gaW50cmluc2ljV2lkdGhDb25zdHJhaW50
cyA9IEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgeyB9OworICAgICAgICBhdXRvJiBmb3JtYXR0
aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZS5mb3JtYXR0aW5nU3RhdGVGb3JCb3gobGF5b3V0Qm94KTsK
ICAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPEJveD4oZG93bmNhc3Q8
Q29udGFpbmVyPihsYXlvdXRCb3gpKSkgewogICAgICAgICAgICAgaWYgKGNoaWxkLmlzT3V0T2ZG
bG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
Y29uc3QgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0U3RhdGUuZm9ybWF0dGluZ1N0YXRl
Rm9yQm94KGNoaWxkKTsKLSAgICAgICAgICAgIEFTU0VSVChmb3JtYXR0aW5nU3RhdGUuaXNCbG9j
a0Zvcm1hdHRpbmdTdGF0ZSgpKTsKLSAgICAgICAgICAgIGF1dG8gY2hpbGRJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzID0gZm9ybWF0dGluZ1N0YXRlLmludHJpbnNpY1dpZHRoQ29uc3RyYWludHMo
Y2hpbGQpOworICAgICAgICAgICAgYXV0byBjaGlsZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMg
PSBmb3JtYXR0aW5nU3RhdGUuaW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckJveChjaGlsZCk7
CiAgICAgICAgICAgICBBU1NFUlQoY2hpbGRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKTsKIAot
ICAgICAgICAgICAgYXV0byYgY2hpbGRTdHlsZSA9IGNoaWxkLnN0eWxlKCk7Ci0gICAgICAgICAg
ICBhdXRvIG1hcmdpbkJvcmRlckFuZFBhZGRpbmcgPSBmaXhlZFZhbHVlKGNoaWxkU3R5bGUubWFy
Z2luU3RhcnQoKSkudmFsdWVPcigwKQotICAgICAgICAgICAgICAgICsgTGF5b3V0VW5pdCB7IGNo
aWxkU3R5bGUuYm9yZGVyTGVmdFdpZHRoKCkgfQotICAgICAgICAgICAgICAgICsgZml4ZWRWYWx1
ZShjaGlsZFN0eWxlLnBhZGRpbmdMZWZ0KCkpLnZhbHVlT3IoMCkKLSAgICAgICAgICAgICAgICAr
IGZpeGVkVmFsdWUoY2hpbGRTdHlsZS5wYWRkaW5nUmlnaHQoKSkudmFsdWVPcigwKQotICAgICAg
ICAgICAgICAgICsgTGF5b3V0VW5pdCB7IGNoaWxkU3R5bGUuYm9yZGVyUmlnaHRXaWR0aCgpIH0K
LSAgICAgICAgICAgICAgICArIGZpeGVkVmFsdWUoY2hpbGRTdHlsZS5tYXJnaW5FbmQoKSkudmFs
dWVPcigwKTsKKyAgICAgICAgICAgIC8vIEZJWE1FIENoZWNrIGZvciBib3gtc2l6aW5nOiBib3Jk
ZXItYm94OworICAgICAgICAgICAgYXV0byBtYXJnaW5Cb3JkZXJBbmRQYWRkaW5nID0gZml4ZWRN
YXJnaW5Cb3JkZXJBbmRQYWRkaW5nKGNoaWxkKTsKICAgICAgICAgICAgIGludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMubWluaW11bSA9IHN0ZDo6bWF4KGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMu
bWluaW11bSwgY2hpbGRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLT5taW5pbXVtICsgbWFyZ2lu
Qm9yZGVyQW5kUGFkZGluZyk7CiAgICAgICAgICAgICBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
Lm1heGltdW0gPSBzdGQ6Om1heChpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1heGltdW0sIGNo
aWxkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cy0+bWF4aW11bSArIG1hcmdpbkJvcmRlckFuZFBh
ZGRpbmcpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBpbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzOwogICAgIH07Ci0KLSAgICByZXR1cm4gY29uc3RyYWluQnlNaW5NYXhXaWR0aChsYXlvdXRC
b3gsIGNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpKTsKKyAgICAvLyBGSVhNRSBD
aGVjayBmb3IgYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICBhdXRvIGludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMgPSBjb25zdHJhaW5CeU1pbk1heFdpZHRoKGxheW91dEJveCwgY29tcHV0ZWRJ
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkpOworICAgIGludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMuZXhwYW5kKGZpeGVkTWFyZ2luQm9yZGVyQW5kUGFkZGluZyhsYXlvdXRCb3gpKTsKKyAgICBy
ZXR1cm4gaW50cmluc2ljV2lkdGhDb25zdHJhaW50czsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3guaCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5Qm94LmgKaW5kZXggNGRmMDFhM2QyMDhjZWFm
MjI5NmExNDZlMmNiY2IzZTgyMDMyOTY0Ni4uYjE2NTNmMmFhYTRjMjM2MmVkZDg5ODMzY2JhZjFi
NzYxOTE1YmE0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVl
L0Rpc3BsYXlCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlz
cGxheUJveC5oCkBAIC0xMjQsNiArMTI0LDggQEAgcHVibGljOgogICAgIExheW91dFVuaXQgbWFy
Z2luQm94SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbWFyZ2luQmVmb3JlKCkgKyBib3JkZXJCb3hI
ZWlnaHQoKSArIG1hcmdpbkFmdGVyKCk7IH0KICAgICBMYXlvdXRVbml0IG1hcmdpbkJveFdpZHRo
KCkgY29uc3QgeyByZXR1cm4gbWFyZ2luU3RhcnQoKSArIGJvcmRlckJveFdpZHRoKCkgKyBtYXJn
aW5FbmQoKTsgfQogCisgICAgTGF5b3V0VW5pdCBob3Jpem9udGFsTWFyZ2luQm9yZGVyQW5kUGFk
ZGluZygpIGNvbnN0IHsgcmV0dXJuIG1hcmdpblN0YXJ0KCkgKyBob3Jpem9udGFsQm9yZGVyKCkg
KyBob3Jpem9udGFsUGFkZGluZygpLnZhbHVlT3IoMCkgKyBtYXJnaW5FbmQoKTsgfQorCiAgICAg
UmVjdCBtYXJnaW5Cb3goKSBjb25zdDsKICAgICBSZWN0IG5vbkNvbGxhcHNlZE1hcmdpbkJveCgp
IGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXggOTk1MzRm
ZmRiYjNlZDMzMTBkMGQ0NDFiMDMwYmRhZTdmZDRiN2E2My4uMTk4MGE5NTMxOWUzNThhNzU0NmE2
NDA2YTk1OGUxOTk4YTJiZmVmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNw
cApAQCAtNDksMTMgKzQ5LDEzIEBAIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dChjb25zdCBCb3gmIGZvcm1hdHRpbmdDb250ZXh0Um9vCiB7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgY29uc3QgQm94KiBuZXh0SW5QcmVPcmRlcihjb25zdCBCb3gmIGxheW91dEJv
eCwgY29uc3QgQ29udGFpbmVyJiByb290KQorc3RhdGljIGlubGluZSBjb25zdCBCb3gqIG5leHRJ
blByZU9yZGVyKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBDb250YWluZXImIHN0YXlXaXRo
aW4pCiB7CiAgICAgY29uc3QgQm94KiBuZXh0SW5QcmVPcmRlciA9IG51bGxwdHI7CiAgICAgaWYg
KCFsYXlvdXRCb3guZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpICYmIGlzPENvbnRhaW5l
cj4obGF5b3V0Qm94KSAmJiBkb3duY2FzdDxDb250YWluZXI+KGxheW91dEJveCkuaGFzSW5GbG93
T3JGbG9hdGluZ0NoaWxkKCkpCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxDb250YWluZXI+KGxh
eW91dEJveCkuZmlyc3RJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKTsKIAotICAgIGZvciAobmV4dElu
UHJlT3JkZXIgPSAmbGF5b3V0Qm94OyBuZXh0SW5QcmVPcmRlciAmJiBuZXh0SW5QcmVPcmRlciAh
PSAmcm9vdDsgbmV4dEluUHJlT3JkZXIgPSBuZXh0SW5QcmVPcmRlci0+cGFyZW50KCkpIHsKKyAg
ICBmb3IgKG5leHRJblByZU9yZGVyID0gJmxheW91dEJveDsgbmV4dEluUHJlT3JkZXIgJiYgbmV4
dEluUHJlT3JkZXIgIT0gJnN0YXlXaXRoaW47IG5leHRJblByZU9yZGVyID0gbmV4dEluUHJlT3Jk
ZXItPnBhcmVudCgpKSB7CiAgICAgICAgIGlmIChhdXRvKiBuZXh0U2libGluZyA9IG5leHRJblBy
ZU9yZGVyLT5uZXh0SW5GbG93T3JGbG9hdGluZ1NpYmxpbmcoKSkKICAgICAgICAgICAgIHJldHVy
biBuZXh0U2libGluZzsKICAgICB9CkBAIC05OSwzNCArOTksMjkgQEAgdm9pZCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6bGF5b3V0KCkgY29uc3QKICAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0
dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW0VuZF0gLT4gaW5saW5lIGZvcm1hdHRpbmcg
Y29udGV4dCAtPiBmb3JtYXR0aW5nIHJvb3QoIiA8PCAmcm9vdCA8PCAiKSIpOwogfQogCi12b2lk
IElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSW50cmluc2ljV2lkdGhDb25zdHJhaW50
cygpIGNvbnN0CitGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
KCkgY29uc3QKIHsKICAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7
Ci0gICAgQVNTRVJUKCFsYXlvdXRTdGF0ZS5mb3JtYXR0aW5nU3RhdGVGb3JCb3gocm9vdCgpKS5p
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKHJvb3QoKSkpOworICAgIEFTU0VSVCghZm9ybWF0dGlu
Z1N0YXRlKCkuaW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpKTsKIAotICAgIEFTU0VSVChpczxD
b250YWluZXI+KHJvb3QoKSkpOwotICAgIGF1dG8mIHJvb3QgPSBkb3duY2FzdDxDb250YWluZXI+
KHRoaXMtPnJvb3QoKSk7Ci0gICAgaWYgKCFyb290Lmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgp
KSB7Ci0gICAgICAgIGxheW91dFN0YXRlLmZvcm1hdHRpbmdTdGF0ZUZvckJveChyb290KS5zZXRJ
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKHJvb3QsIEdlb21ldHJ5Ojpjb25zdHJhaW5CeU1pbk1h
eFdpZHRoKHJvb3QsIHsgMCwgMCB9KSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlzPENv
bnRhaW5lcj4ocm9vdCgpKSB8fCAhZG93bmNhc3Q8Q29udGFpbmVyPihyb290KCkpLmhhc0luRmxv
d09yRmxvYXRpbmdDaGlsZCgpKSB7CisgICAgICAgIGF1dG8gY29uc3RyYWludHMgPSBHZW9tZXRy
eTo6Y29uc3RyYWluQnlNaW5NYXhXaWR0aChyb290KCksIHsgfSk7CisgICAgICAgIGZvcm1hdHRp
bmdTdGF0ZSgpLnNldEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoY29uc3RyYWludHMpOworICAg
ICAgICByZXR1cm4gY29uc3RyYWludHM7CiAgICAgfQogCisgICAgYXV0byYgcm9vdCA9IGRvd25j
YXN0PENvbnRhaW5lcj4odGhpcy0+cm9vdCgpKTsKICAgICBWZWN0b3I8Y29uc3QgQm94Kj4gZm9y
bWF0dGluZ0NvbnRleHRSb290TGlzdDsKICAgICBhdXRvIHVzZWRWYWx1ZXMgPSBVc2VkSG9yaXpv
bnRhbFZhbHVlcyB7IH07CiAgICAgYXV0byogbGF5b3V0Qm94ID0gcm9vdC5maXJzdEluRmxvd09y
RmxvYXRpbmdDaGlsZCgpOwogICAgIHdoaWxlIChsYXlvdXRCb3gpIHsKICAgICAgICAgaWYgKGxh
eW91dEJveC0+ZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpKSB7CiAgICAgICAgICAgICBm
b3JtYXR0aW5nQ29udGV4dFJvb3RMaXN0LmFwcGVuZChsYXlvdXRCb3gpOwotICAgICAgICAgICAg
aWYgKGxheW91dEJveC0+aXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgICAgICBj
b21wdXRlSW50cmluc2ljV2lkdGhGb3JGbG9hdEJveCgqbGF5b3V0Qm94KTsKLSAgICAgICAgICAg
IGVsc2UgaWYgKGxheW91dEJveC0+aXNJbmxpbmVCbG9ja0JveCgpKQotICAgICAgICAgICAgICAg
IGNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvcklubGluZUJsb2NrKCpsYXlvdXRCb3gpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgY29tcHV0ZUludHJpbnNpY1dpZHRoRm9yRm9ybWF0dGluZ1Jvb3QoKmxheW91dEJveCk7
CiAgICAgICAgIH0gZWxzZSBpZiAobGF5b3V0Qm94LT5pc1JlcGxhY2VkKCkgfHwgaXM8Q29udGFp
bmVyPigqbGF5b3V0Qm94KSkgewogICAgICAgICAgICAgY29tcHV0ZUJvcmRlckFuZFBhZGRpbmco
KmxheW91dEJveCwgdXNlZFZhbHVlcyk7CiAgICAgICAgICAgICAvLyBpbmxpbmUtYmxvY2sgYW5k
IHJlcGxhY2VkLgotICAgICAgICAgICAgYXV0byBuZWVkc1dpZHRoQ29tcHV0YXRpb24gPSBsYXlv
dXRCb3gtPmlzUmVwbGFjZWQoKSB8fCBsYXlvdXRCb3gtPmVzdGFibGlzaGVzRm9ybWF0dGluZ0Nv
bnRleHQoKTsKKyAgICAgICAgICAgIGF1dG8gbmVlZHNXaWR0aENvbXB1dGF0aW9uID0gbGF5b3V0
Qm94LT5pc1JlcGxhY2VkKCk7CiAgICAgICAgICAgICBpZiAobmVlZHNXaWR0aENvbXB1dGF0aW9u
KQogICAgICAgICAgICAgICAgIGNvbXB1dGVXaWR0aEFuZE1hcmdpbigqbGF5b3V0Qm94LCB1c2Vk
VmFsdWVzKTsKICAgICAgICAgICAgIGVsc2UgewpAQCAtMTQyLDE0ICsxMzcsMTcgQEAgdm9pZCBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoQ29uc3RyYWludHMo
KSBjb25zdAogICAgIGF1dG8gbWF4aW11bUxpbmVXaWR0aCA9IFsmXShhdXRvIGF2YWlsYWJsZVdp
ZHRoKSB7CiAgICAgICAgIC8vIFN3aXRjaCB0byB0aGUgbWluL21heCBmb3JtYXR0aW5nIHJvb3Qg
d2lkdGggdmFsdWVzIGJlZm9yZSBmb3JtYXR0aW5nIHRoZSBsaW5lcy4KICAgICAgICAgZm9yIChh
dXRvKiBmb3JtYXR0aW5nUm9vdCA6IGZvcm1hdHRpbmdDb250ZXh0Um9vdExpc3QpIHsKLSAgICAg
ICAgICAgIGF1dG8gaW50cmluc2ljV2lkdGhzID0gbGF5b3V0U3RhdGUuZm9ybWF0dGluZ1N0YXRl
Rm9yQm94KCpmb3JtYXR0aW5nUm9vdCkuaW50cmluc2ljV2lkdGhDb25zdHJhaW50cygqZm9ybWF0
dGluZ1Jvb3QpOwotICAgICAgICAgICAgbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJv
eCgqZm9ybWF0dGluZ1Jvb3QpLnNldENvbnRlbnRCb3hXaWR0aChhdmFpbGFibGVXaWR0aCA/IGlu
dHJpbnNpY1dpZHRocy0+bWF4aW11bSA6IGludHJpbnNpY1dpZHRocy0+bWluaW11bSk7CisgICAg
ICAgICAgICBhdXRvIGludHJpbnNpY1dpZHRocyA9IGxheW91dFN0YXRlLmZvcm1hdHRpbmdTdGF0
ZUZvckJveCgqZm9ybWF0dGluZ1Jvb3QpLmludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3go
KmZvcm1hdHRpbmdSb290KTsKKyAgICAgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRT
dGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpmb3JtYXR0aW5nUm9vdCk7CisgICAgICAgICAg
ICBhdXRvIGNvbnRlbnRXaWR0aCA9IChhdmFpbGFibGVXaWR0aCA/IGludHJpbnNpY1dpZHRocy0+
bWF4aW11bSA6IGludHJpbnNpY1dpZHRocy0+bWluaW11bSkgLSBkaXNwbGF5Qm94Lmhvcml6b250
YWxNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nKCk7CisgICAgICAgICAgICBkaXNwbGF5Qm94LnNldENv
bnRlbnRCb3hXaWR0aChjb250ZW50V2lkdGgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBJ
bmxpbmVMYXlvdXQoKnRoaXMpLmNvbXB1dGVkSW50cmluc2ljV2lkdGgoZm9ybWF0dGluZ1N0YXRl
KCkuaW5saW5lSXRlbXMoKSwgYXZhaWxhYmxlV2lkdGgpOwogICAgIH07CiAKLSAgICBhdXRvIGlu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBHZW9tZXRyeTo6Y29uc3RyYWluQnlNaW5NYXhXaWR0
aChyb290LCB7IG1heGltdW1MaW5lV2lkdGgoMCksIG1heGltdW1MaW5lV2lkdGgoTGF5b3V0VW5p
dDo6bWF4KCkpIH0pOwotICAgIGxheW91dFN0YXRlLmZvcm1hdHRpbmdTdGF0ZUZvckJveChyb290
KS5zZXRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKHJvb3QsIGludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHMpOworICAgIGF1dG8gY29uc3RyYWludHMgPSBHZW9tZXRyeTo6Y29uc3RyYWluQnlNaW5N
YXhXaWR0aChyb290LCB7IG1heGltdW1MaW5lV2lkdGgoMCksIG1heGltdW1MaW5lV2lkdGgoTGF5
b3V0VW5pdDo6bWF4KCkpIH0pOworICAgIGZvcm1hdHRpbmdTdGF0ZSgpLnNldEludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHMoY29uc3RyYWludHMpOworICAgIHJldHVybiBjb25zdHJhaW50czsKIH0K
IAogdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6aW5pdGlhbGl6ZU1hcmdpbkJvcmRlckFu
ZFBhZGRpbmdGb3JHZW5lcmljSW5saW5lQm94KGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdApA
QCAtMTcxLDI0ICsxNjksMjMgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0
ZU1hcmdpbkJvcmRlckFuZFBhZGRpbmdGb3JJbmxpbmVDb250YWluZXIoY28KICAgICBsYXlvdXRT
dGF0ZSgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goY29udGFpbmVyKS5zZXRWZXJ0aWNhbE1hcmdp
bih7IHsgfSwgeyB9IH0pOwogfQogCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21w
dXRlSW50cmluc2ljV2lkdGhGb3JGbG9hdEJveChjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QK
K3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvckZv
cm1hdHRpbmdSb290KGNvbnN0IEJveCYgZm9ybWF0dGluZ1Jvb3QpIGNvbnN0CiB7Ci0gICAgQVNT
RVJUKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKTsKKyAgICBBU1NFUlQoZm9ybWF0
dGluZ1Jvb3QuZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpKTsKKyAgICBhdXRvJiBsYXlv
dXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7CiAKICAgICBhdXRvIHVzZWRWYWx1ZXMgPSBV
c2VkSG9yaXpvbnRhbFZhbHVlcyB7IH07Ci0gICAgY29tcHV0ZUJvcmRlckFuZFBhZGRpbmcobGF5
b3V0Qm94LCB1c2VkVmFsdWVzKTsKLSAgICBjb21wdXRlSG9yaXpvbnRhbE1hcmdpbihsYXlvdXRC
b3gsIHVzZWRWYWx1ZXMpOwotICAgIGxheW91dFN0YXRlKCkuY3JlYXRlRm9ybWF0dGluZ0NvbnRl
eHQobGF5b3V0Qm94KS0+Y29tcHV0ZUludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKTsKLX0KKyAg
ICBjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhmb3JtYXR0aW5nUm9vdCwgdXNlZFZhbHVlcyk7Cisg
ICAgY29tcHV0ZUhvcml6b250YWxNYXJnaW4oZm9ybWF0dGluZ1Jvb3QsIHVzZWRWYWx1ZXMpOwog
Ci12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSW50cmluc2ljV2lkdGhGb3JJ
bmxpbmVCbG9jayhjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKLXsKLSAgICBBU1NFUlQobGF5
b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSk7Ci0KLSAgICBhdXRvIHVzZWRWYWx1ZXMgPSBVc2Vk
SG9yaXpvbnRhbFZhbHVlcyB7IH07Ci0gICAgY29tcHV0ZUJvcmRlckFuZFBhZGRpbmcobGF5b3V0
Qm94LCB1c2VkVmFsdWVzKTsKLSAgICBjb21wdXRlSG9yaXpvbnRhbE1hcmdpbihsYXlvdXRCb3gs
IHVzZWRWYWx1ZXMpOwotICAgIGxheW91dFN0YXRlKCkuY3JlYXRlRm9ybWF0dGluZ0NvbnRleHQo
bGF5b3V0Qm94KS0+Y29tcHV0ZUludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKTsKKyAgICBJbnRy
aW5zaWNXaWR0aENvbnN0cmFpbnRzIGNvbnN0cmFpbnRzOworICAgIGlmIChhdXRvIGZpeGVkV2lk
dGggPSBHZW9tZXRyeTo6Zml4ZWRWYWx1ZShmb3JtYXR0aW5nUm9vdC5zdHlsZSgpLmxvZ2ljYWxX
aWR0aCgpKSkKKyAgICAgICAgY29uc3RyYWludHMgPSB7ICpmaXhlZFdpZHRoLCAqZml4ZWRXaWR0
aCB9OworICAgIGVsc2UKKyAgICAgICAgY29uc3RyYWludHMgPSBsYXlvdXRTdGF0ZS5jcmVhdGVG
b3JtYXR0aW5nQ29udGV4dChmb3JtYXR0aW5nUm9vdCktPmNvbXB1dGVkSW50cmluc2ljV2lkdGhD
b25zdHJhaW50cygpOworICAgIGNvbnN0cmFpbnRzID0gR2VvbWV0cnk6OmNvbnN0cmFpbkJ5TWlu
TWF4V2lkdGgoZm9ybWF0dGluZ1Jvb3QsIGNvbnN0cmFpbnRzKTsKKyAgICBjb25zdHJhaW50cy5l
eHBhbmQobGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChmb3JtYXR0aW5nUm9vdCku
aG9yaXpvbnRhbE1hcmdpbkJvcmRlckFuZFBhZGRpbmcoKSk7CisgICAgZm9ybWF0dGluZ1N0YXRl
KCkuc2V0SW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckJveChmb3JtYXR0aW5nUm9vdCwgY29u
c3RyYWludHMpOwogfQogCiB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSG9y
aXpvbnRhbE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZEhvcml6b250YWxWYWx1ZXMg
dXNlZFZhbHVlcykgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCmluZGV4IDFl
NjU1ZTAwNWQ1MDg2MmU1MjM3ODVjOTMzOWEwODZiY2VlYzVmMDkuLmZmYzQ5MmQwZDJiNzRhYmUx
Mjc5MzkzNDJjYjU3M2I3M2NkOGJkM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQu
aApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBsYXlvdXQoKSBjb25zdCBvdmVy
cmlkZTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGNvbXB1dGVJbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBjb21w
dXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGNs
YXNzIElubGluZUxheW91dCB7CiAgICAgcHVibGljOgpAQCAtODEsMTAgKzgxLDkgQEAgcHJpdmF0
ZToKICAgICB9OwogCiAgICAgdm9pZCBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dFJvb3QoY29uc3Qg
Qm94JiwgVXNlZEhvcml6b250YWxWYWx1ZXMpIGNvbnN0OwotICAgIHZvaWQgY29tcHV0ZUludHJp
bnNpY1dpZHRoRm9yRmxvYXRCb3goY29uc3QgQm94JikgY29uc3Q7CiAgICAgdm9pZCBjb21wdXRl
TWFyZ2luQm9yZGVyQW5kUGFkZGluZ0ZvcklubGluZUNvbnRhaW5lcihjb25zdCBDb250YWluZXIm
LCBVc2VkSG9yaXpvbnRhbFZhbHVlcykgY29uc3Q7CiAgICAgdm9pZCBpbml0aWFsaXplTWFyZ2lu
Qm9yZGVyQW5kUGFkZGluZ0ZvckdlbmVyaWNJbmxpbmVCb3goY29uc3QgQm94JikgY29uc3Q7Ci0g
ICAgdm9pZCBjb21wdXRlSW50cmluc2ljV2lkdGhGb3JJbmxpbmVCbG9jayhjb25zdCBCb3gmKSBj
b25zdDsKKyAgICB2b2lkIGNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvckZvcm1hdHRpbmdSb290KGNv
bnN0IEJveCYpIGNvbnN0OwogICAgIHZvaWQgY29tcHV0ZVdpZHRoQW5kSGVpZ2h0Rm9yUmVwbGFj
ZWRJbmxpbmVCb3goY29uc3QgQm94JiwgVXNlZEhvcml6b250YWxWYWx1ZXMpIGNvbnN0OwogICAg
IHZvaWQgY29tcHV0ZUhvcml6b250YWxNYXJnaW4oY29uc3QgQm94JiwgVXNlZEhvcml6b250YWxW
YWx1ZXMpIGNvbnN0OwogICAgIHZvaWQgY29tcHV0ZUhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gm
KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC90YWJsZWZvcm1hdHRp
bmcvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFi
bGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IGIzNjllNGZkZTg5
ZWNjZTk4YTY0M2RmMzQ1Y2E3YTg1N2JkOTQ0N2EuLmRhZmQ0YjU0N2I0OTRjYTE3Nzg4NDExYWMw
M2VlNTc1N2JmMTQ1OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC90YWJsZWZv
cm1hdHRpbmcvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtNDYs
NiArNDYsMTEgQEAgdm9pZCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXQoKSBjb25zdAog
ewogfQogCitGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBUYWJs
ZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKSBj
b25zdAoreworICAgIHJldHVybiB7IH07Cit9CisKIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0Nv
bnRleHQuaAppbmRleCAxODJjNTE0YWRkM2M4NGY2MjZhMDVkOTgzNjkzNjg4NDMwYTMxOGUyLi45
YjkxYjIzNjgyMjFjYWQ0OGFiM2EzNzBkMWFkNGMzMmJkYmEwMTJmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0
dGluZ0NvbnRleHQuaApAQCAtNDEsNiArNDEsOSBAQCBjbGFzcyBUYWJsZUZvcm1hdHRpbmdDb250
ZXh0IDogcHVibGljIEZvcm1hdHRpbmdDb250ZXh0IHsKIHB1YmxpYzoKICAgICBUYWJsZUZvcm1h
dHRpbmdDb250ZXh0KGNvbnN0IEJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290LCBUYWJsZUZvcm1h
dHRpbmdTdGF0ZSYpOwogICAgIHZvaWQgbGF5b3V0KCkgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZh
dGU6CisgICAgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBjb21wdXRlZEludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMoKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>