<?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>208906</bug_id>
          
          <creation_ts>2020-03-10 22:49:46 -0700</creation_ts>
          <short_desc>Change all return values in TextIterator header from live ranges to SimpleRange</short_desc>
          <delta_ts>2020-03-15 12:36:41 -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>HTML Editing</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andersca</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kangil.han</cc>
    
    <cc>koivisto</cc>
    
    <cc>mifenton</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1628540</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-10 22:49:46 -0700</bug_when>
    <thetext>Change all return values in TextIterator header from live ranges to SimpleRange</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1628544</commentid>
    <comment_count>1</comment_count>
      <attachid>393207</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-10 23:06:09 -0700</bug_when>
    <thetext>Created attachment 393207
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1628653</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-11 08:22:50 -0700</bug_when>
    <thetext>Hooray this one passed all the tests on the first try</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630036</commentid>
    <comment_count>3</comment_count>
      <attachid>393207</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-03-14 03:05:42 -0700</bug_when>
    <thetext>Comment on attachment 393207
Patch

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

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:2667
&gt; +    Node&amp; node = it.atEnd() ? searchRange-&gt;startContainer() : it.range().start.container.get();

auto

&gt; Source/WebCore/editing/TextIterator.cpp:1494
&gt; -    Ref&lt;Range&gt; r = m_underlyingIterator.range();
&gt; +    SimpleRange range = m_underlyingIterator.range();

auto

&gt; Source/WebCore/editing/TextIterator.cpp:1499
&gt; +            Node&amp; node = range.start.container;

auto

&gt; Source/WebCore/editing/TextIterator.cpp:2508
&gt; +    for (TextIterator iterator { createLiveRange(range).ptr(), behavior }; !iterator.atEnd(); iterator.advance()) {

I suppose the plan to also make TextIterator take SimpleRange at some point?

&gt; Source/WebCore/editing/VisibleUnits.cpp:638
&gt; +    Node&amp; node = it.atEnd() ? searchRange-&gt;startContainer() : it.range().start.container.get();

auto

&gt; Source/WebCore/editing/VisibleUnits.cpp:649
&gt; +    return VisiblePosition(createLegacyEditingPosition(charIt.range().end), DOWNSTREAM);

Could just use { }

&gt; Source/WebCore/editing/VisibleUnits.cpp:685
&gt; +        SimpleRange characterRange = charIt.range();

auto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630107</commentid>
    <comment_count>4</comment_count>
      <attachid>393207</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-14 15:54:39 -0700</bug_when>
    <thetext>Comment on attachment 393207
Patch

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

Thanks very much for the review.

&gt;&gt; Source/WebCore/accessibility/AXObjectCache.cpp:2667
&gt;&gt; +    Node&amp; node = it.atEnd() ? searchRange-&gt;startContainer() : it.range().start.container.get();
&gt; 
&gt; auto

You mean auto, and not auto&amp;? For now I did auto&amp;.

&gt;&gt; Source/WebCore/editing/TextIterator.cpp:1494
&gt;&gt; +    SimpleRange range = m_underlyingIterator.range();
&gt; 
&gt; auto

Done.

&gt;&gt; Source/WebCore/editing/TextIterator.cpp:1499
&gt;&gt; +            Node&amp; node = range.start.container;
&gt; 
&gt; auto

Did auto&amp; for now.

&gt;&gt; Source/WebCore/editing/TextIterator.cpp:2508
&gt;&gt; +    for (TextIterator iterator { createLiveRange(range).ptr(), behavior }; !iterator.atEnd(); iterator.advance()) {
&gt; 
&gt; I suppose the plan to also make TextIterator take SimpleRange at some point?

Yes, that&apos;s right. Just doing the changes one step at a time, but will get to that soon.

&gt;&gt; Source/WebCore/editing/VisibleUnits.cpp:638
&gt;&gt; +    Node&amp; node = it.atEnd() ? searchRange-&gt;startContainer() : it.range().start.container.get();
&gt; 
&gt; auto

Did auto&amp;.

&gt;&gt; Source/WebCore/editing/VisibleUnits.cpp:649
&gt;&gt; +    return VisiblePosition(createLegacyEditingPosition(charIt.range().end), DOWNSTREAM);
&gt; 
&gt; Could just use { }

Trying that (waiting for it to compile right now).

&gt;&gt; Source/WebCore/editing/VisibleUnits.cpp:685
&gt;&gt; +        SimpleRange characterRange = charIt.range();
&gt; 
&gt; auto

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630108</commentid>
    <comment_count>5</comment_count>
      <attachid>393207</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-14 15:55:39 -0700</bug_when>
    <thetext>Comment on attachment 393207
Patch

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

&gt;&gt;&gt; Source/WebCore/editing/TextIterator.cpp:1499
&gt;&gt;&gt; +            Node&amp; node = range.start.container;
&gt;&gt; 
&gt;&gt; auto
&gt; 
&gt; Did auto&amp; for now.

Turns out this one needs to be Node&amp;; changed it back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630111</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-14 15:59:39 -0700</bug_when>
    <thetext>Committed r258475: &lt;https://trac.webkit.org/changeset/258475&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630112</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-03-14 16:00:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/60460158&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630149</commentid>
    <comment_count>8</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-03-15 01:06:28 -0700</bug_when>
    <thetext>&gt; You mean auto, and not auto&amp;? For now I did auto&amp;.

Right, I mean &quot;auto in a way that builds and follows WebKit coding style&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630150</commentid>
    <comment_count>9</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-03-15 01:07:52 -0700</bug_when>
    <thetext>...and doesn&apos;t alter the behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630203</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-15 12:36:41 -0700</bug_when>
    <thetext>Consider it done, then!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393207</attachid>
            <date>2020-03-10 23:06:09 -0700</date>
            <delta_ts>2020-03-14 03:05:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208906-20200310230606.patch</filename>
            <type>text/plain</type>
            <size>46001</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4MjUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzFlYjkxOGUwNjZjZmNm
MjE2ZDZkODUzOTFkMWE3NzA2ZDMxYjQxOC4uYzE0NmFiYzFmZjhjZGJlMjcyMGVmMWUwOTJmM2I5
Zjk4MzU5ZjFjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMSBAQAorMjAyMC0wMy0xMCAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgQ2hhbmdlIGFsbCByZXR1cm4g
dmFsdWVzIGluIFRleHRJdGVyYXRvciBoZWFkZXIgZnJvbSBsaXZlIHJhbmdlcyB0byBTaW1wbGVS
YW5nZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4
OTA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBpcyBhbm90aGVyIHN0ZXAgaW4gbW92aW5nIG9mZiBvZiBsaXZlIHJhbmdlcyBmb3IgV2ViS2l0
IGludGVybmFscy4KKworICAgICAgICAtIENoYW5nZSByZXR1cm4gdmFsdWVzIG9mIHJlbWFpbmlu
ZyBmdW5jdGlvbnMgdGhhdCB3ZXJlIHJldHVybmluZyBsaXZlIHJhbmdlcyBpbgorICAgICAgICAg
IHRoZSBUZXh0SXRlcmF0b3IgaGVhZGVyIHRvIHJldHVybiBTaW1wbGVSYW5nZS4KKyAgICAgICAg
LSBDaGFuZ2Ugc29tZSBhcmd1bWVudHMgZnJvbSBsaXZlIHJhbmdlcyB0byBTaW1wbGVSYW5nZS4K
KyAgICAgICAgLSBBdCBzb21lIGNhbGwgc2l0ZXMsIHVzZSBjcmVhdGVMaXZlUmFuZ2UgdG8gY29u
dmVydCB0aGUgU2ltcGxlUmFuZ2UgaW50byBhIGxpdmUKKyAgICAgICAgICByYW5nZSAoZm9yIG5v
dyksIGJ1dCBhdCBvdGhlcnMgdXBkYXRlIHRoZSBjb2RlIHRvIHVzZSBTaW1wbGVSYW5nZS4KKyAg
ICAgICAgLSBSZW5hbWVkIGEgdmVyc2lvbiBvZiBmaW5kUGxhaW5UZXh0IHRoYXQgcmV0dXJucyBh
IGJvb2xlYW4gdG8gY29udGFpbnNQbGFpblRleHQuCisgICAgICAgIC0gQ29udmVydCBjYWxsIHNp
dGVzIHRoYXQgd2VyZSB1c2luZyBjcmVhdGVMaXZlUmFuZ2UganVzdCB0byB1c2UgdGhlCisgICAg
ICAgICAgUmFuZ2U6OnN0YXJ0UG9zaXRpb24gYW5kIFJhbmdlOjplbmRQb3NpdGlvbiBmdW5jdGlv
bnMgdG8gaW5zdGVhZCB1c2UgYSBuZXcKKyAgICAgICAgICBvdmVybG9hZCBvZiB0aGUgY3JlYXRl
TGVnYWN5RWRpdGluZ1Bvc2l0aW9uIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgd2l0aAorICAg
ICAgICAgIFNpbXBsZVJhbmdlOjpzdGFydCBhbmQgU2ltcGxlUmFuZ2U6OmVuZCBiZWNhdXNlIGl0
IHRha2VzIGEgQm91bmRhcnlQb2ludC4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpyYW5nZU1hdGNo
ZXNUZXh0TmVhclJhbmdlKTogUmV0dXJuIE9wdGlvbmFsPFNpbXBsZVJhbmdlPgorICAgICAgICBh
bmQgdGFrZSBTaW1wbGVSYW5nZSBhcmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6OnByZXZpb3VzQm91bmRhcnkpOiBVcGRhdGVkIHNpbmNlCisgICAgICAgIFNpbXBsaWZp
ZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OnJhbmdlIG5vdyByZXR1cm5zIFNpbXBsZVJhbmdlLgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oOiBVcGRhdGVkIGZvciB0aGUg
YWJvdmUuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRl
cmZhY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFYQ29yZU9iamVjdDo6Y29udGFpbnNUZXh0IGNv
bnN0KTogVXBkYXRlZCBmb3IgbmFtZSBjaGFuZ2UuCisgICAgICAgIE5vdyBjb250YWluc1BsYWlu
VGV4dCBpbnN0ZWFkIG9mIGZpbmRQbGFpblRleHQuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbToKKyAgICAgICAgKC1bV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYXJyYXlPZlRleHRGb3JUZXh0TWFya2VyczphdHRy
aWJ1dGVkOl0pOgorICAgICAgICBVc2UgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uIGluc3Rl
YWQgb2YgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciByYW5nZUZyb21NYXJrZXJzOndpdGhUZXh0Ol0pOiBVc2UgY3JlYXRlTGl2ZVJhbmdl
LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJNYWMubW06CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGRv
QVhBdHRyaWJ1dGVkU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlOnNwZWxsQ2hlY2s6XSk6CisgICAg
ICAgIFVzZSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24gaW5zdGVhZCBvZiBjcmVhdGVMaXZl
UmFuZ2UuCisKKyAgICAgICAgKiBkb20vUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKTogQWRkZWQgYW4gb3ZlcmxvYWQgdGhhdCB0YWtl
cyBhIEJvdW5kYXJ5UG9pbnQuCisgICAgICAgICogZG9tL1Bvc2l0aW9uLmg6IFVwZGF0ZWQgZm9y
IHRoZSBhYm92ZSwgYWxzbyByZW1vdmVkIHVubmVlZGVkIGluY2x1ZGVzIGFuZCBmb3J3YXJkCisg
ICAgICAgIGRlY2xhcmF0aW9ucy4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjp2aXNpYmxlUG9zaXRpb25Gb3JJbmRleFVzaW5nQ2hhcmFjdGVySXRl
cmF0b3IpOiBVcGRhdGVkIHNpbmNlCisgICAgICAgIENoYXJhY3Rlckl0ZXJhdG9yOjpyYW5nZSBp
cyBub3cgYSBTaW1wbGVSYW5nZSwgdXNlIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbi4KKwor
ICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKTogVXBkYXRlZCBzaW5jZSBDaGFyYWN0ZXJJdGVyYXRv
cjo6cmFuZ2UKKyAgICAgICAgaXMgbm93IGEgU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OnJhbmdlT2ZTdHJpbmcpOiBVcGRhdGVkIHNpbmNlIGZpbmRQbGFpblRleHQgbm93
IHJldHVybnMgYQorICAgICAgICBTaW1wbGVSYW5nZTsgdXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dCk6IERpdHRvLgorCisg
ICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6cmFuZ2UgY29uc3QpOiBSZXR1cm4gYSBTaW1w
bGVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3Rlckl0ZXJhdG9yOjpyYW5nZSBjb25z
dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y2hhcmFjdGVyU3VicmFuZ2UpOiBVcGRhdGVk
IHNpbmNlIENoYXJhY3Rlckl0ZXJhdG9yOjpyYW5nZSByZXR1cm5zCisgICAgICAgIGEgU2ltcGxl
UmFuZ2UuIFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpCYWNrd2FyZHND
aGFyYWN0ZXJJdGVyYXRvcjo6QmFja3dhcmRzQ2hhcmFjdGVySXRlcmF0b3IpOiBDdXQgZG93bgor
ICAgICAgICBjb2RlIGhlcmUgYnkgaW5pdGlhbGl6aW5nIGRhdGEgbWVtYmVycyBpbiB0aGUgY2xh
c3MgZGVmaW5pdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkJhY2t3YXJkc0NoYXJhY3Rlckl0ZXJh
dG9yOjpyYW5nZSBjb25zdCk6IFJldHVybiBhIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29y
ZTo6V29yZEF3YXJlSXRlcmF0b3I6OldvcmRBd2FyZUl0ZXJhdG9yKTogQ3V0IGRvd24gY29kZSBo
ZXJlIGJ5CisgICAgICAgIGluaXRpYWxpemluZyBkYXRhIG1lbWJlcnMgaW4gdGhlIGNsYXNzIGRl
ZmluaXRpb24uCisgICAgICAgIChXZWJDb3JlOjpoYXNBbnlQbGFpblRleHQpOiBUYWtlIGEgU2lt
cGxlUmFuZ2UsIHVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpwbGFpblRl
eHRVc2luZ0JhY2t3YXJkc1RleHRJdGVyYXRvckZvclRlc3RpbmcpOiBUYWtlIGEgU2ltcGxlUmFu
Z2UsCisgICAgICAgIHVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpjb2xs
YXBzZWRUb0JvdW5kYXJ5KTogVGFrZSBhbmQgcmV0dXJuIGEgU2ltcGxlUmFuZ2UuCisgICAgICAg
IChXZWJDb3JlOjpmaW5kUGxhaW5UZXh0TWF0Y2hlcyk6IFRha2UgYSBTaW1wbGVSYW5nZSwgdXNl
IGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OnJhbmdlRm9yTWF0Y2gpOiBUYWtl
IGFuZCByZXR1cm4gYSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OmZpbmRDbG9zZXN0
UGxhaW5UZXh0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpmaW5kUGxhaW5UZXh0KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpjb250YWluc1BsYWluVGV4dCk6IFJlbmFtZWQgZnJvbSBm
aW5kUGxhaW5UZXh0IHNpbmNlIHRoaXMgcmV0dXJucworICAgICAgICBhIGJvb2xlYW4sIG5vdCBh
IGZvdW5kIGxvY2F0aW9uIG9mIHNvbWUgdGV4dC4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVy
YXRvci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuIEFsc28gY2hhbmdlZCBzb21lIGRhdGEKKyAg
ICAgICAgbWVtYmVycyB0byB1c2UgdW5zaWduZWQgZm9yIG9mZnNldHMgcmF0aGVyIHRoYW4gaW50
LgorCisgICAgICAgICogZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXJhZ3JhcGhDb250ZW50SXRlcmF0b3I6OnN0YXJ0UG9zaXRpb24p
OiBVc2UKKyAgICAgICAgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uIGluc3RlYWQgb2YgY3Jl
YXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6UGFyYWdyYXBoQ29udGVudEl0ZXJhdG9y
OjplbmRQb3NpdGlvbik6IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9WaXNpYmxlUG9zaXRp
b24uaDogQWRkZWQgYSBmb3J3YXJkIGRlY2xhcmF0aW9uIGhlcmUgc2luY2UgUG9zaXRpb24uaAor
ICAgICAgICBubyBsb25nZXIgZm9yd2FyZCBkZWNsYXJlcyBpdC4KKworICAgICAgICAqIGVkaXRp
bmcvVmlzaWJsZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0
aW9uOjphcHBlbmRUcmFpbGluZ1doaXRlc3BhY2UpOiBVcGRhdGVkIHNpbmNlCisgICAgICAgIENo
YXJhY3Rlckl0ZXJhdG9yOjpyYW5nZSBpcyBub3cgYSBTaW1wbGVSYW5nZSwgdXNlIGNyZWF0ZUxl
Z2FjeUVkaXRpbmdQb3NpdGlvbi4KKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVVbml0cy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpwcmV2aW91c0JvdW5kYXJ5KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpuZXh0Qm91bmRhcnkpOiBEaXR0by4KKworICAgICAgICAqIHRlc3RpbmcvSW50ZXJu
YWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cmFuZ2VPZlN0cmluZ05lYXJM
b2NhdGlvbik6IFVwZGF0ZWQgc2luY2UKKyAgICAgICAgZmluZENsb3Nlc3RQbGFpblRleHQgbm93
IHJldHVybnMgYSBTaW1wbGVSYW5nZSwgdXNlIGNyZWF0ZUxpdmVSYW5nZS4KKwogMjAyMC0wMy0w
OCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBUZXh0SXRl
cmF0b3I6OnJhbmdlIHJldHVybiBhIFNpbXBsZVJhbmdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGQxMmJhM2E1YTJm
Y2NlNGIzMDUyOGI5MjdmZGM2MTVmN2FkMzVhNGUuLmZjNzU2ZTY5ZjQwODRjZTY0OTUyOTE2NDBm
NmEwMWY3YTM5NzViNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMjAtMDMtMTAgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIENoYW5nZSBhbGwgcmV0dXJu
IHZhbHVlcyBpbiBUZXh0SXRlcmF0b3IgaGVhZGVyIGZyb20gbGl2ZSByYW5nZXMgdG8gU2ltcGxl
UmFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
ODkwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbTogUmVtb3ZlZCB1bm5lZWRl
ZCBpbmNsdWRlIG9mCisgICAgICAgIFRleHRJdGVyYXRvci5oLgorCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpyYW5nZU5l
YXJQb3NpdGlvbk1hdGNoZXNUZXh0KTogUmVtb3ZlZCB1bnVzZWQgb3JpZ2luYWxSYW5nZSBhcmd1
bWVudCwKKyAgICAgICAgY2hhbmdlZCByZXR1cm4gdHlwZSB0byBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4gc2luY2UgZmluZENsb3Nlc3RQbGFpblRleHQgbm93CisgICAgICAgIHJldHVybnMgYSBTaW1w
bGVSYW5nZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0UmVjdHNBdFNlbGVjdGlvbk9m
ZnNldFdpdGhUZXh0KTogVXBkYXRlZCBzaW5jZQorICAgICAgICByYW5nZU5lYXJQb3NpdGlvbk1h
dGNoZXNUZXh0IG5vdyByZXR1cm5zIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiwgdXNlIGNyZWF0ZUxp
dmVSYW5nZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVxdWVzdERvY3VtZW50RWRpdGlu
Z0NvbnRleHQpOiBVcGRhdGVkIHNpbmNlCisgICAgICAgIENoYXJhY3Rlckl0ZXJhdG9yOjpyYW5n
ZSByZXR1cm5zIFNpbXBsZVJhbmdlLCB1c2UgY3JlYXRlTGl2ZVJhbmdlLgorCiAyMDIwLTAzLTA4
ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIFRleHRJdGVy
YXRvcjo6cmFuZ2UgcmV0dXJuIGEgU2ltcGxlUmFuZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmluZGV4IGQ0OTM0MDIwY2NkNzI5NGE4NmRiMWMy
NjU2MDY2OTY3N2JhN2YyZTMuLmIwYTUwMTI2ZDRlYzU1YTkxOTgxMTE3ZDZjM2Q2M2RiYTlmYmE5
NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNw
cApAQCAtMTkzMywyOCArMTkzMywyNSBAQCBSZWZQdHI8UmFuZ2U+IEFYT2JqZWN0Q2FjaGU6OnJh
bmdlRm9yTm9kZUNvbnRlbnRzKE5vZGUqIG5vZGUpCiAgICAgcmV0dXJuIHJhbmdlOwogfQogICAg
IAotUmVmUHRyPFJhbmdlPiBBWE9iamVjdENhY2hlOjpyYW5nZU1hdGNoZXNUZXh0TmVhclJhbmdl
KFJlZlB0cjxSYW5nZT4gb3JpZ2luYWxSYW5nZSwgY29uc3QgU3RyaW5nJiBtYXRjaFRleHQpCitP
cHRpb25hbDxTaW1wbGVSYW5nZT4gQVhPYmplY3RDYWNoZTo6cmFuZ2VNYXRjaGVzVGV4dE5lYXJS
YW5nZShjb25zdCBTaW1wbGVSYW5nZSYgb3JpZ2luYWxSYW5nZSwgY29uc3QgU3RyaW5nJiBtYXRj
aFRleHQpCiB7Ci0gICAgaWYgKCFvcmlnaW5hbFJhbmdlKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICAKICAgICAvLyBDcmVhdGUgYSBsYXJnZSBlbm91Z2ggcmFuZ2UgZm9yIHNlYXJjaGlu
ZyB0aGUgdGV4dCB3aXRoaW4uCiAgICAgdW5zaWduZWQgdGV4dExlbmd0aCA9IG1hdGNoVGV4dC5s
ZW5ndGgoKTsKLSAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JQb3Np
dGlvbldpdGhPZmZzZXQob3JpZ2luYWxSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCAtdGV4dExlbmd0
aCk7Ci0gICAgYXV0byBlbmRQb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkZvclBvc2l0aW9uV2l0
aE9mZnNldChvcmlnaW5hbFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIDIgKiB0ZXh0TGVuZ3RoKTsK
LSAgICAKKyAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JQb3NpdGlv
bldpdGhPZmZzZXQoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG9yaWdpbmFsUmFuZ2Uuc3Rh
cnQpLCAtdGV4dExlbmd0aCk7CisgICAgYXV0byBlbmRQb3NpdGlvbiA9IHZpc2libGVQb3NpdGlv
bkZvclBvc2l0aW9uV2l0aE9mZnNldChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ob3JpZ2lu
YWxSYW5nZS5zdGFydCksIDIgKiB0ZXh0TGVuZ3RoKTsKKwogICAgIGlmIChzdGFydFBvc2l0aW9u
LmlzTnVsbCgpKQotICAgICAgICBzdGFydFBvc2l0aW9uID0gZmlyc3RQb3NpdGlvbkluT3JCZWZv
cmVOb2RlKCZvcmlnaW5hbFJhbmdlLT5zdGFydENvbnRhaW5lcigpKTsKKyAgICAgICAgc3RhcnRQ
b3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShvcmlnaW5hbFJhbmdlLnN0YXJ0
LmNvbnRhaW5lci5wdHIoKSk7CiAgICAgaWYgKGVuZFBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAg
ICBlbmRQb3NpdGlvbiA9IGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUoJm9yaWdpbmFsUmFuZ2Ut
PmVuZENvbnRhaW5lcigpKTsKLSAgICAKKyAgICAgICAgZW5kUG9zaXRpb24gPSBsYXN0UG9zaXRp
b25Jbk9yQWZ0ZXJOb2RlKG9yaWdpbmFsUmFuZ2UuZW5kLmNvbnRhaW5lci5wdHIoKSk7CisKICAg
ICBhdXRvIHNlYXJjaFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBzdGFydFBvc2l0
aW9uLCBlbmRQb3NpdGlvbik7CiAgICAgaWYgKHNlYXJjaFJhbmdlLT5jb2xsYXBzZWQoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVh
dGUobV9kb2N1bWVudCwgc3RhcnRQb3NpdGlvbiwgb3JpZ2luYWxSYW5nZS0+c3RhcnRQb3NpdGlv
bigpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGF1dG8gcmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIHN0YXJ0UG9zaXRpb24sIGNyZWF0ZUxlZ2FjeUVkaXRp
bmdQb3NpdGlvbihvcmlnaW5hbFJhbmdlLnN0YXJ0KSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0T2Zm
c2V0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5wdHIoKSwgdHJ1ZSk7Ci0gICAg
cmV0dXJuIGZpbmRDbG9zZXN0UGxhaW5UZXh0KHNlYXJjaFJhbmdlLmdldCgpLCBtYXRjaFRleHQs
IHsgfSwgdGFyZ2V0T2Zmc2V0KTsKKyAgICByZXR1cm4gZmluZENsb3Nlc3RQbGFpblRleHQoc2Vh
cmNoUmFuZ2UsIG1hdGNoVGV4dCwgeyB9LCB0YXJnZXRPZmZzZXQpOwogfQogCiBzdGF0aWMgYm9v
bCBpc1JlcGxhY2VkTm9kZU9yQlIoTm9kZSogbm9kZSkKQEAgLTI2NjcsNyArMjY2NCw3IEBAIENo
YXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IENoYXJh
Y3Rlck9mZnNldCYgY2hhcmFjdGVyCiAgICAgaWYgKCFuZXh0KQogICAgICAgICByZXR1cm4gaXQu
YXRFbmQoKSA/IHN0YXJ0IDogY2hhcmFjdGVyT2Zmc2V0OwogICAgIAotICAgIE5vZGUmIG5vZGUg
PSBpdC5hdEVuZCgpID8gc2VhcmNoUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgOiBpdC5yYW5nZSgp
LT5zdGFydENvbnRhaW5lcigpOworICAgIE5vZGUmIG5vZGUgPSBpdC5hdEVuZCgpID8gc2VhcmNo
UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgOiBpdC5yYW5nZSgpLnN0YXJ0LmNvbnRhaW5lci5nZXQo
KTsKICAgICAKICAgICAvLyBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGlnbm9yZXMg
cmVwbGFjZWQgZWxlbWVudHMuCiAgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJlcGxhY2Vk
Tm9kZU5lZWRzQ2hhcmFjdGVyKGNoYXJhY3Rlck9mZnNldC5ub2RlKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKaW5kZXggNzZkZTg5MDA0MTE5MDJmMTFm
M2FjZTMwZTM5YmI5MTBiN2MxOTYyNi4uMmRkYzY4ZDc4ZGVkM2I4ZTMyZDdhNmUxZDQzMGQ4Y2M4
ODhmOTU0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hl
LmgKQEAgLTM0OSw3ICszNDksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwZXJmb3JtRGVmZXJyZWRD
YWNoZVVwZGF0ZSgpOwogICAgIHZvaWQgZGVmZXJUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb25G
b3JUZXh0Q29udHJvbChIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCYsIGNvbnN0IFN0cmluZyYg
cHJldmlvdXNWYWx1ZSk7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlTWF0Y2hlc1RleHROZWFy
UmFuZ2UoUmVmUHRyPFJhbmdlPiwgY29uc3QgU3RyaW5nJik7CisgICAgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IHJhbmdlTWF0Y2hlc1RleHROZWFyUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25z
dCBTdHJpbmcmKTsKIAogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCiAg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgaXNJc29sYXRlZFRyZWVFbmFibGVkKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmpl
Y3RJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdEludGVyZmFjZS5oCmluZGV4IDk4MDYxMzgyNWExM2Y4OGNkMTI0M2NmNTUxZmJjYjI5
YzEzZjA0ZjEuLjJmMjliMjk2ZWUwNjk2NzA2M2ViZmNhMTM3NDMyNjQ1OGIxYTFiZGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdElu
dGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdEludGVyZmFjZS5oCkBAIC04MTEsOSArODExLDkgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgLy8gSWYgdGV4dCBpcyBlbXB0eSB3ZSByZXR1cm4gdHJ1ZS4KICAgICAgICAgcmV0dXJu
IHRleHQuaXNFbXB0eSgpCi0gICAgICAgICAgICB8fCBmaW5kUGxhaW5UZXh0KHRpdGxlKCksIHRl
eHQsIENhc2VJbnNlbnNpdGl2ZSkKLSAgICAgICAgICAgIHx8IGZpbmRQbGFpblRleHQoYWNjZXNz
aWJpbGl0eURlc2NyaXB0aW9uKCksIHRleHQsIENhc2VJbnNlbnNpdGl2ZSkKLSAgICAgICAgICAg
IHx8IGZpbmRQbGFpblRleHQoc3RyaW5nVmFsdWUoKSwgdGV4dCwgQ2FzZUluc2Vuc2l0aXZlKTsK
KyAgICAgICAgICAgIHx8IGNvbnRhaW5zUGxhaW5UZXh0KHRpdGxlKCksIHRleHQsIENhc2VJbnNl
bnNpdGl2ZSkKKyAgICAgICAgICAgIHx8IGNvbnRhaW5zUGxhaW5UZXh0KGFjY2Vzc2liaWxpdHlE
ZXNjcmlwdGlvbigpLCB0ZXh0LCBDYXNlSW5zZW5zaXRpdmUpCisgICAgICAgICAgICB8fCBjb250
YWluc1BsYWluVGV4dChzdHJpbmdWYWx1ZSgpLCB0ZXh0LCBDYXNlSW5zZW5zaXRpdmUpOwogICAg
IH0KIAogICAgIC8vIE1ldGhvZHMgZm9yIGRldGVybWluaW5nIGFjY2Vzc2liaWxpdHkgdGV4dC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9p
b3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KaW5kZXggMDJkOWEwNmZjZTc4
YjFlOWU5OTRlYjcwYWE4YzUyYTRiM2I4MGQ4NS4uYzMxMzA4ZTQwM2VhYzU5MDExYjJmMTNhYjdk
MjljYzhjNmMyYjI4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9p
b3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0K
QEAgLTIyNzMsMTQgKzIyNzMsMTQgQEAgLSAoTlNBcnJheSAqKWFycmF5T2ZUZXh0Rm9yVGV4dE1h
cmtlcnM6KE5TQXJyYXkgKiltYXJrZXJzIGF0dHJpYnV0ZWQ6KEJPT0wpYXR0cmkKICAgICAgICAg
ICAgICAgICBpZiAoW3NlbGYgX2FkZEFjY2Vzc2liaWxpdHlPYmplY3Q6aGVhZGluZ09iamVjdCB0
b1RleHRNYXJrZXJBcnJheTphcnJheV0pCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGxpc3RNYXJrZXJUZXh0ID0gQWNjZXNzaWJpbGl0eU9i
amVjdDo6bGlzdE1hcmtlclRleHRGb3JOb2RlQW5kUG9zaXRpb24oJm5vZGUsIFZpc2libGVQb3Np
dGlvbihjcmVhdGVMaXZlUmFuZ2UoaXQucmFuZ2UoKSktPnN0YXJ0UG9zaXRpb24oKSkpOworICAg
ICAgICAgICAgICAgIFN0cmluZyBsaXN0TWFya2VyVGV4dCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6
Omxpc3RNYXJrZXJUZXh0Rm9yTm9kZUFuZFBvc2l0aW9uKCZub2RlLCBWaXNpYmxlUG9zaXRpb24o
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGl0LnJhbmdlKCkuc3RhcnQpKSk7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFsaXN0TWFya2VyVGV4dC5pc0VtcHR5KCkp
IAogICAgICAgICAgICAgICAgICAgICBbYXJyYXkgYWRkT2JqZWN0Omxpc3RNYXJrZXJUZXh0XTsK
ICAgICAgICAgICAgICAgICAvLyBUaGVyZSB3YXMgbm90IGFuIGVsZW1lbnQgcmVwcmVzZW50YXRp
b24sIHNvIGp1c3QgcmV0dXJuIHRoZSB0ZXh0LgogICAgICAgICAgICAgICAgIFthcnJheSBhZGRP
YmplY3Q6aXQudGV4dCgpLmNyZWF0ZU5TU3RyaW5nKCkuZ2V0KCldOwogICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgbGlzdE1hcmtlclRleHQgPSBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpsaXN0TWFya2VyVGV4dEZvck5vZGVBbmRQb3NpdGlvbigmbm9kZSwgVmlzaWJs
ZVBvc2l0aW9uKGNyZWF0ZUxpdmVSYW5nZShpdC5yYW5nZSgpKS0+c3RhcnRQb3NpdGlvbigpKSk7
CisgICAgICAgICAgICAgICAgU3RyaW5nIGxpc3RNYXJrZXJUZXh0ID0gQWNjZXNzaWJpbGl0eU9i
amVjdDo6bGlzdE1hcmtlclRleHRGb3JOb2RlQW5kUG9zaXRpb24oJm5vZGUsIFZpc2libGVQb3Np
dGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oaXQucmFuZ2UoKS5zdGFydCkpKTsKIAog
ICAgICAgICAgICAgICAgIGlmICghbGlzdE1hcmtlclRleHQuaXNFbXB0eSgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcgPSBbW05T
TXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRdOwpAQCAtMjcxMSw3ICsyNzExLDcg
QEAgLSAoUmVmUHRyPFJhbmdlPilyYW5nZUZyb21NYXJrZXJzOihOU0FycmF5ICopbWFya2VycyB3
aXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0CiAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgcmV0dXJu
IG5pbDsKICAgICAKLSAgICByZXR1cm4gY2FjaGUtPnJhbmdlTWF0Y2hlc1RleHROZWFyUmFuZ2Uo
b3JpZ2luYWxSYW5nZSwgdGV4dCk7CisgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShjYWNoZS0+
cmFuZ2VNYXRjaGVzVGV4dE5lYXJSYW5nZSgqb3JpZ2luYWxSYW5nZSwgdGV4dCkpOwogfQogCiAv
LyBUaGlzIGlzIG9ubHkgdXNlZCBpbiB0aGUgbGF5b3V0IHRlc3QuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyTWFjLm1tCmluZGV4IDkwMDE3YWQ5OTQ5N2I5NTdkYWQyZTljYWMyYTky
M2U3YThjN2ViMTIuLjJkYjEyMjQ0YjkzYjk5OGVkZTNmODkzYzVjMzUzMDNhYTNmZjdlNjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
bWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCkBAIC0xMjYyLDcgKzEyNjIs
NyBAQCAtIChOU0F0dHJpYnV0ZWRTdHJpbmcqKWRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yVGV4dE1h
cmtlclJhbmdlOihpZCl0ZXh0TWFya2VyUmFuZwogICAgICAgICAgICAgLy8gbm9uLXplcm8gbGVu
Z3RoIG1lYW5zIHRleHR1YWwgbm9kZSwgemVybyBsZW5ndGggbWVhbnMgcmVwbGFjZWQgbm9kZSAo
QUtBICJhdHRhY2htZW50cyIgaW4gQVgpCiAgICAgICAgICAgICBpZiAoaXQudGV4dCgpLmxlbmd0
aCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSB0ZXh0IG9mIHRoZSBsaXN0IG1hcmtl
ciBpdGVtIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgICAgICAgICBTdHJpbmcgbGlzdE1hcmtlclRl
eHQgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpsaXN0TWFya2VyVGV4dEZvck5vZGVBbmRQb3NpdGlv
bigmbm9kZSwgVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxpdmVSYW5nZShpdC5yYW5nZSgpKS0+c3Rh
cnRQb3NpdGlvbigpKSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIGxpc3RNYXJrZXJUZXh0ID0g
QWNjZXNzaWJpbGl0eU9iamVjdDo6bGlzdE1hcmtlclRleHRGb3JOb2RlQW5kUG9zaXRpb24oJm5v
ZGUsIFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oaXQucmFuZ2Uo
KS5zdGFydCkpKTsKICAgICAgICAgICAgICAgICBpZiAoIWxpc3RNYXJrZXJUZXh0LmlzRW1wdHko
KSkKICAgICAgICAgICAgICAgICAgICAgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChhdHRy
U3RyaW5nLCAmbm9kZSwgbGlzdE1hcmtlclRleHQsIHNwZWxsQ2hlY2spOwogICAgICAgICAgICAg
ICAgIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoYXR0clN0cmluZywgJm5vZGUsIGl0LnRl
eHQoKSwgc3BlbGxDaGVjayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAppbmRleCAzM2RiYjRlMWRl
MGQ4MWQ3NTBlMmJmZmNiMzk4NWM5NDI2ZDgyOGM1Li5hODIwMDk4OGVjYzIxNjI2MjcxMGNjYjM1
NWJmYTFiMWExMTQzNjk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKQEAgLTI2LDYgKzI2LDcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQb3NpdGlvbi5oIgogCisjaW5jbHVk
ZSAiQm91bmRhcnlQb2ludC5oIgogI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bi5oIgogI2luY2x1ZGUgIkVkaXRpbmcuaCIKICNpbmNsdWRlICJIVE1MQlJFbGVtZW50LmgiCkBA
IC0xNTkyLDYgKzE1OTMsMTEgQEAgUG9zaXRpb24gcG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShO
b2RlKiBub2RlKQogICAgIHJldHVybiBQb3NpdGlvbihhbmNlc3Rvciwgbm9kZS0+Y29tcHV0ZU5v
ZGVJbmRleCgpICsgMSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CiB9CiAK
K1Bvc2l0aW9uIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjb25zdCBCb3VuZGFyeVBvaW50
JiBwb2ludCkKK3sKKyAgICByZXR1cm4gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHBvaW50
LmNvbnRhaW5lci5wdHIoKSwgcG9pbnQub2Zmc2V0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1Bvc2l0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uaAppbmRl
eCAyMTdiNDFkODAwNzIxYzI2MzllM2YxZTYzMjcxMDgzZDU4Y2UwMjIwLi42NGMyZDE4ZTBlMWNj
OTI0YWEzZTJjMzkwOThhM2FiNDU0M2VmZmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vUG9zaXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uaApAQCAtMjgs
OCArMjgsNiBAQAogI2luY2x1ZGUgIkNvbnRhaW5lck5vZGUuaCIKICNpbmNsdWRlICJFZGl0aW5n
Qm91bmRhcnkuaCIKICNpbmNsdWRlICJUZXh0QWZmaW5pdHkuaCIKLSNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdURiB7CiBj
bGFzcyBUZXh0U3RyZWFtOwpAQCAtMzcsMTUgKzM1LDEyIEBAIGNsYXNzIFRleHRTdHJlYW07CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
OwotY2xhc3MgRWxlbWVudDsKIGNsYXNzIElubGluZUJveDsKLWNsYXNzIE5vZGU7Ci1jbGFzcyBS
YW5nZTsKIGNsYXNzIFJlbmRlckVsZW1lbnQ7Ci1jbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBU
ZXh0OwogCitzdHJ1Y3QgQm91bmRhcnlQb2ludDsKKwogZW51bSBQb3NpdGlvbk1vdmVUeXBlIHsK
ICAgICBDb2RlUG9pbnQsICAgICAgIC8vIE1vdmUgYnkgYSBzaW5nbGUgY29kZSBwb2ludC4KICAg
ICBDaGFyYWN0ZXIsICAgICAgIC8vIE1vdmUgdG8gdGhlIG5leHQgVW5pY29kZSBjaGFyYWN0ZXIg
YnJlYWsuCkBAIC0yMjIsNiArMjE3LDggQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNMZWdhY3lF
ZGl0aW5nUG9zaXRpb24gOiAxOwogfTsKIAorUG9zaXRpb24gY3JlYXRlTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uKGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKKwogaW5saW5lIFBvc2l0aW9uIGNyZWF0ZUxl
Z2FjeUVkaXRpbmdQb3NpdGlvbihOb2RlKiBub2RlLCB1bnNpZ25lZCBvZmZzZXQpCiB7CiAgICAg
cmV0dXJuIHsgbm9kZSwgb2Zmc2V0LCBQb3NpdGlvbjo6TGVnYWN5RWRpdGluZ1Bvc2l0aW9uRmxh
Zzo6T24gfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCmluZGV4IGZkNWU1OTVhY2I1MTVi
NGY3ZTU1ODI4NGM4NTVlYjNlYTRjOGM1ZWEuLmZmOTFmZTAwOGVmYjk0NWU4ZDRhNmI1ZmFmMGIx
NmMwMTI1MTNiYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcApAQCAtNTEsNiArNTEs
NyBAQAogI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNl
bGwuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCisjaW5jbHVkZSAiU2ltcGxlUmFuZ2UuaCIK
ICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAi
VmlzaWJsZVVuaXRzLmgiCkBAIC0xMTI4LDEwICsxMTI5LDEwIEBAIFZpc2libGVQb3NpdGlvbiB2
aXNpYmxlUG9zaXRpb25Gb3JJbmRleFVzaW5nQ2hhcmFjdGVySXRlcmF0b3IoTm9kZSYgbm9kZSwg
aW50IGluCiAgICAgICAgIC8vIEZJWE1FOiB3b3JrYXJvdW5kIGZvciBjb2xsYXBzZWQgcmFuZ2Ug
KHdoZXJlIG9ubHkgc3RhcnQgcG9zaXRpb24gaXMgY29ycmVjdCkgZW1pdHRlZCBmb3Igc29tZSBl
bWl0dGVkIG5ld2xpbmVzLgogICAgICAgICBpdC5hZHZhbmNlKDEpOwogICAgICAgICBpZiAoIWl0
LmF0RW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGl0LnJhbmdlKCkt
PnN0YXJ0UG9zaXRpb24oKSk7CisgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGNy
ZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihpdC5yYW5nZSgpLnN0YXJ0KSk7CiAgICAgfQogCi0g
ICAgcmV0dXJuIHsgaXQuYXRFbmQoKSA/IHJhbmdlLT5lbmRQb3NpdGlvbigpIDogaXQucmFuZ2Uo
KS0+ZW5kUG9zaXRpb24oKSwgVVBTVFJFQU0gfTsKKyAgICByZXR1cm4geyBpdC5hdEVuZCgpID8g
cmFuZ2UtPmVuZFBvc2l0aW9uKCkgOiBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oaXQucmFu
Z2UoKS5lbmQpLCBVUFNUUkVBTSB9OwogfQogCiAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgdHdvIHBv
c2l0aW9ucyBhcmUgdmlzaWJseSBuZXh0IHRvIGVhY2ggb3RoZXIgKGZpcnN0IHRoZW4gc2Vjb25k
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IGM0MDhhZjcwMjE5ZmU0MjIzZDU0NGE2
YWJkYjlkNDE4MWQxZTU2MWMuLmI5ZmJmYzMzMTY1MzYwYTFjYzgyOWRjNDhmMjI1YWI4NjA3N2Fj
NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTIyNDcsMTQgKzIyNDcsMTQgQEAg
dm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2Vs
ZWN0aW9uKQogICAgICAgICAgICAgLy8gU3RvcCBsb29raW5nIGF0IHN0YXJ0IG9mIG5leHQgbWlz
c3BlbGxlZCB3b3JkCiAgICAgICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBjaGFycygqZ3JhbW1h
clNlYXJjaFJhbmdlKTsKICAgICAgICAgICAgIGNoYXJzLmFkdmFuY2UobWlzc3BlbGxpbmdPZmZz
ZXQpOwotICAgICAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdlLT5zZXRFbmQoY2hhcnMucmFuZ2Uo
KS0+c3RhcnRDb250YWluZXIoKSwgY2hhcnMucmFuZ2UoKS0+c3RhcnRPZmZzZXQoKSk7CisgICAg
ICAgICAgICBncmFtbWFyU2VhcmNoUmFuZ2UtPnNldEVuZChjaGFycy5yYW5nZSgpLnN0YXJ0LmNv
bnRhaW5lciwgY2hhcnMucmFuZ2UoKS5zdGFydC5vZmZzZXQpOwogICAgICAgICB9Ci0gICAgCisK
ICAgICAgICAgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQogICAgICAgICAgICAgYmFk
R3JhbW1hclBocmFzZSA9IFRleHRDaGVja2luZ0hlbHBlcigqY2xpZW50KCksICpncmFtbWFyU2Vh
cmNoUmFuZ2UpLmZpbmRGaXJzdEJhZEdyYW1tYXIoZ3JhbW1hckRldGFpbCwgZ3JhbW1hclBocmFz
ZU9mZnNldCwgZmFsc2UpOwogI2VuZGlmCiAgICAgfQotICAgIAorCiAgICAgLy8gSWYgd2UgZm91
bmQgbmVpdGhlciBiYWQgZ3JhbW1hciBub3IgYSBtaXNzcGVsbGVkIHdvcmQsIHdyYXAgYW5kIHRy
eSBhZ2FpbiAoYnV0IGRvbid0IGJvdGhlciBpZiB3ZSBzdGFydGVkIGF0IHRoZSBiZWdpbm5pbmcg
b2YgdGhlCiAgICAgLy8gYmxvY2sgcmF0aGVyIHRoYW4gYXQgYSBzZWxlY3Rpb24pLgogICAgIGlm
IChzdGFydGVkV2l0aFNlbGVjdGlvbiAmJiAhbWlzc3BlbGxlZFdvcmQgJiYgIWJhZEdyYW1tYXJQ
aHJhc2UpIHsKQEAgLTIyODIsNyArMjI4Miw3IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0
TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAgICAgICAgICAgICAv
LyBTdG9wIGxvb2tpbmcgYXQgc3RhcnQgb2YgbmV4dCBtaXNzcGVsbGVkIHdvcmQKICAgICAgICAg
ICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBjaGFycygqZ3JhbW1hclNlYXJjaFJhbmdlKTsKICAg
ICAgICAgICAgICAgICBjaGFycy5hZHZhbmNlKG1pc3NwZWxsaW5nT2Zmc2V0KTsKLSAgICAgICAg
ICAgICAgICBncmFtbWFyU2VhcmNoUmFuZ2UtPnNldEVuZChjaGFycy5yYW5nZSgpLT5zdGFydENv
bnRhaW5lcigpLCBjaGFycy5yYW5nZSgpLT5zdGFydE9mZnNldCgpKTsKKyAgICAgICAgICAgICAg
ICBncmFtbWFyU2VhcmNoUmFuZ2UtPnNldEVuZChjaGFycy5yYW5nZSgpLnN0YXJ0LmNvbnRhaW5l
ciwgY2hhcnMucmFuZ2UoKS5zdGFydC5vZmZzZXQpOwogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBpZiAoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCkBAIC0zNTI4LDcgKzM1MjgsNyBA
QCBSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6cmFuZ2VPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdl
dCwgUmFuZ2UqIHJlZmVyZW5jZVJhbmdlLAogICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0
YXJ0KCpzaGFkb3dUcmVlUm9vdCwgMCk7CiAgICAgfQogCi0gICAgUmVmUHRyPFJhbmdlPiByZXN1
bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoKnNlYXJjaFJhbmdlLCB0YXJnZXQsIG9wdGlvbnMpOwor
ICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UoZmluZFBsYWlu
VGV4dCgqc2VhcmNoUmFuZ2UsIHRhcmdldCwgb3B0aW9ucykpOwogICAgIC8vIElmIHdlIHN0YXJ0
ZWQgaW4gdGhlIHJlZmVyZW5jZSByYW5nZSBhbmQgdGhlIGZvdW5kIHJhbmdlIGV4YWN0bHkgbWF0
Y2hlcyB0aGUgcmVmZXJlbmNlIHJhbmdlLCBmaW5kIGFnYWluLgogICAgIC8vIEJ1aWxkIGEgc2Vs
ZWN0aW9uIHdpdGggdGhlIGZvdW5kIHJhbmdlIHRvIHJlbW92ZSBjb2xsYXBzZWQgd2hpdGVzcGFj
ZS4KICAgICAvLyBDb21wYXJlIHJhbmdlcyBpbnN0ZWFkIG9mIHNlbGVjdGlvbiBvYmplY3RzIHRv
IGlnbm9yZSB0aGUgd2F5IHRoYXQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHdhcyBtYWRlLgpAQCAt
MzU0Niw3ICszNTQ2LDcgQEAgUmVmUHRyPFJhbmdlPiBFZGl0b3I6OnJhbmdlT2ZTdHJpbmcoY29u
c3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByZWZlcmVuY2VSYW5nZSwKICAgICAgICAgICAgICAg
ICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoKnNoYWRvd1RyZWVSb290LCAwKTsKICAgICAgICAgfQog
Ci0gICAgICAgIHJlc3VsdFJhbmdlID0gZmluZFBsYWluVGV4dCgqc2VhcmNoUmFuZ2UsIHRhcmdl
dCwgb3B0aW9ucyk7CisgICAgICAgIHJlc3VsdFJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKGZpbmRQ
bGFpblRleHQoKnNlYXJjaFJhbmdlLCB0YXJnZXQsIG9wdGlvbnMpKTsKICAgICB9CiAKICAgICAv
LyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbiB0aGUgc2hhZG93IHRyZWUsIHNlYXJjaCBpbiBtYWlu
IGNvbnRlbnQgZm9sbG93aW5nIHRoZSBzaGFkb3cgdHJlZS4KQEAgLTM1NTksMTQgKzM1NTksMTMg
QEAgUmVmUHRyPFJhbmdlPiBFZGl0b3I6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJn
ZXQsIFJhbmdlKiByZWZlcmVuY2VSYW5nZSwKICAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZS0+
c2V0RW5kQmVmb3JlKCpzaGFkb3dUcmVlUm9vdC0+c2hhZG93SG9zdCgpKTsKICAgICAgICAgfQog
Ci0gICAgICAgIHJlc3VsdFJhbmdlID0gZmluZFBsYWluVGV4dCgqc2VhcmNoUmFuZ2UsIHRhcmdl
dCwgb3B0aW9ucyk7CisgICAgICAgIHJlc3VsdFJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKGZpbmRQ
bGFpblRleHQoKnNlYXJjaFJhbmdlLCB0YXJnZXQsIG9wdGlvbnMpKTsKICAgICB9CiAKICAgICAv
LyBJZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZyBhbmQgd2UncmUgd3JhcHBpbmcsIHNlYXJjaCBh
Z2FpbiBpbiB0aGUgZW50aXJlIGRvY3VtZW50ICh0aGlzIHdpbGwKICAgICAvLyByZWR1bmRhbnRs
eSByZS1zZWFyY2ggdGhlIGFyZWEgYWxyZWFkeSBzZWFyY2hlZCBpbiBzb21lIGNhc2VzKS4KICAg
ICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNlZCgpICYmIG9wdGlvbnMuY29udGFpbnMoV3JhcEFy
b3VuZCkpIHsKLSAgICAgICAgc2VhcmNoUmFuZ2UgPSByYW5nZU9mQ29udGVudHMoZG9jdW1lbnQo
KSk7Ci0gICAgICAgIHJlc3VsdFJhbmdlID0gZmluZFBsYWluVGV4dCgqc2VhcmNoUmFuZ2UsIHRh
cmdldCwgb3B0aW9ucyk7CisgICAgICAgIHJlc3VsdFJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKGZp
bmRQbGFpblRleHQocmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpLCB0YXJnZXQsIG9wdGlvbnMp
KTsKICAgICAgICAgLy8gV2UgdXNlZCB0byByZXR1cm4gZmFsc2UgaGVyZSBpZiB3ZSBlbmRlZCB1
cCB3aXRoIHRoZSBzYW1lIHJhbmdlIHRoYXQgd2Ugc3RhcnRlZCB3aXRoCiAgICAgICAgIC8vIChl
LmcuLCB0aGUgcmVmZXJlbmNlIHJhbmdlIHdhcyBhbHJlYWR5IHRoZSBvbmx5IGluc3RhbmNlIG9m
IHRoaXMgdGV4dCkuIEJ1dCB3ZSBkZWNpZGVkIHRoYXQKICAgICAgICAgLy8gdGhpcyBzaG91bGQg
YmUgYSBzdWNjZXNzIGNhc2UgaW5zdGVhZCwgc28gd2UnbGwganVzdCBmYWxsIHRocm91Z2ggaW4g
dGhhdCBjYXNlLgpAQCAtMzYwNywyMSArMzYwNiwyMSBAQCB1bnNpZ25lZCBFZGl0b3I6OmNvdW50
TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByYW5nZSwgRmluZE9w
dAogICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSAwOwogICAgIGRvIHsKICAgICAgICAgYXV0byBy
ZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoKnNlYXJjaFJhbmdlLCB0YXJnZXQsIG9wdGlvbnMg
LSBCYWNrd2FyZHMpOwotICAgICAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNlZCgpKSB7Ci0g
ICAgICAgICAgICBpZiAoIXJlc3VsdFJhbmdlLT5zdGFydENvbnRhaW5lcigpLmlzSW5TaGFkb3dU
cmVlKCkpCisgICAgICAgIGlmIChyZXN1bHRSYW5nZS5jb2xsYXBzZWQoKSkgeworICAgICAgICAg
ICAgaWYgKCFyZXN1bHRSYW5nZS5zdGFydC5jb250YWluZXItPmlzSW5TaGFkb3dUcmVlKCkpCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFy
dEFmdGVyKCpyZXN1bHRSYW5nZS0+c3RhcnRDb250YWluZXIoKS5zaGFkb3dIb3N0KCkpOworICAg
ICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0QWZ0ZXIoKnJlc3VsdFJhbmdlLnN0YXJ0LmNv
bnRhaW5lci0+c2hhZG93SG9zdCgpKTsKICAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQo
b3JpZ2luYWxFbmRDb250YWluZXIsIG9yaWdpbmFsRW5kT2Zmc2V0KTsKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICB9CiAKICAgICAgICAgKyttYXRjaENvdW50OwogICAgICAgICBpZiAo
bWF0Y2hlcykKLSAgICAgICAgICAgIG1hdGNoZXMtPmFwcGVuZChyZXN1bHRSYW5nZS5wdHIoKSk7
Ci0gICAgICAgIAorICAgICAgICAgICAgbWF0Y2hlcy0+YXBwZW5kKGNyZWF0ZUxpdmVSYW5nZShy
ZXN1bHRSYW5nZSkpOworCiAgICAgICAgIGlmIChtYXJrTWF0Y2hlcykKLSAgICAgICAgICAgIGRv
Y3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihyZXN1bHRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6
OlRleHRNYXRjaCk7CisgICAgICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIo
Y3JlYXRlTGl2ZVJhbmdlKHJlc3VsdFJhbmdlKSwgRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7
CiAKICAgICAgICAgLy8gU3RvcCBsb29raW5nIGlmIHdlIGhpdCB0aGUgc3BlY2lmaWVkIGxpbWl0
LiBBIGxpbWl0IG9mIDAgbWVhbnMgbm8gbGltaXQuCiAgICAgICAgIGlmIChsaW1pdCA+IDAgJiYg
bWF0Y2hDb3VudCA+PSBsaW1pdCkKQEAgLTM2MzEsNyArMzYzMCw3IEBAIHVuc2lnbmVkIEVkaXRv
cjo6Y291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJhbmdl
LCBGaW5kT3B0CiAgICAgICAgIC8vIHJlc3VsdCByYW5nZS4gVGhlcmUgaXMgbm8gbmVlZCB0byB1
c2UgYSBWaXNpYmxlUG9zaXRpb24gaGVyZSwKICAgICAgICAgLy8gc2luY2UgZmluZFBsYWluVGV4
dCB3aWxsIHVzZSBhIFRleHRJdGVyYXRvciB0byBnbyBvdmVyIHRoZSB2aXNpYmxlCiAgICAgICAg
IC8vIHRleHQgbm9kZXMuIAotICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQocmVzdWx0UmFu
Z2UtPmVuZENvbnRhaW5lcigpLCByZXN1bHRSYW5nZS0+ZW5kT2Zmc2V0KCkpOworICAgICAgICBz
ZWFyY2hSYW5nZS0+c2V0U3RhcnQoV1RGTW92ZShyZXN1bHRSYW5nZS5lbmQuY29udGFpbmVyKSwg
cmVzdWx0UmFuZ2UuZW5kLm9mZnNldCk7CiAKICAgICAgICAgTm9kZSogc2hhZG93VHJlZVJvb3Qg
PSBzZWFyY2hSYW5nZS0+c2hhZG93Um9vdCgpOwogICAgICAgICBpZiAoc2VhcmNoUmFuZ2UtPmNv
bGxhcHNlZCgpICYmIHNoYWRvd1RyZWVSb290KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRl
cmF0b3IuY3BwCmluZGV4IDcwMWE3OTY5ZjVhZTFiNjkwMTc2YjU2MzNkYTU1Y2NmMjAzMDAwOTcu
LjAxMzkwNmJhYzZhNTIwNjg4NjY4NmUxYTg2OGRiYjAzNWQ2M2ZlMWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKQEAgLTEzODEsMTEgKzEzODEsMTEgQEAgYm9vbCBT
aW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjphZHZhbmNlUmVzcGVjdGluZ1JhbmdlKE5v
ZGUqIG5leHQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVJlZjxSYW5nZT4gU2ltcGxpZmllZEJh
Y2t3YXJkc1RleHRJdGVyYXRvcjo6cmFuZ2UoKSBjb25zdAorU2ltcGxlUmFuZ2UgU2ltcGxpZmll
ZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6cmFuZ2UoKSBjb25zdAogewogICAgIEFTU0VSVCghYXRF
bmQoKSk7CiAKLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShtX3Bvc2l0aW9uTm9kZS0+ZG9jdW1l
bnQoKSwgbV9wb3NpdGlvbk5vZGUsIG1fcG9zaXRpb25TdGFydE9mZnNldCwgbV9wb3NpdGlvbk5v
ZGUsIG1fcG9zaXRpb25FbmRPZmZzZXQpOworICAgIHJldHVybiB7IHsgKm1fcG9zaXRpb25Ob2Rl
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9wb3NpdGlvblN0YXJ0T2Zmc2V0KSB9LCB7ICptX3Bv
c2l0aW9uTm9kZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fcG9zaXRpb25FbmRPZmZzZXQpIH0g
fTsKIH0KIAogLy8gLS0tLS0tLS0KQEAgLTE0MDQsNyArMTQwNCw3IEBAIENoYXJhY3Rlckl0ZXJh
dG9yOjpDaGFyYWN0ZXJJdGVyYXRvcihQb3NpdGlvbiBzdGFydCwgUG9zaXRpb24gZW5kLCBUZXh0
SXRlcmF0b3JCCiAgICAgICAgIG1fdW5kZXJseWluZ0l0ZXJhdG9yLmFkdmFuY2UoKTsKIH0KIAot
UmVmPFJhbmdlPiBDaGFyYWN0ZXJJdGVyYXRvcjo6cmFuZ2UoKSBjb25zdAorU2ltcGxlUmFuZ2Ug
Q2hhcmFjdGVySXRlcmF0b3I6OnJhbmdlKCkgY29uc3QKIHsKICAgICBTaW1wbGVSYW5nZSByYW5n
ZSA9IG1fdW5kZXJseWluZ0l0ZXJhdG9yLnJhbmdlKCk7CiAgICAgaWYgKCFtX3VuZGVybHlpbmdJ
dGVyYXRvci5hdEVuZCgpKSB7CkBAIC0xNDE2LDcgKzE0MTYsNyBAQCBSZWY8UmFuZ2U+IENoYXJh
Y3Rlckl0ZXJhdG9yOjpyYW5nZSgpIGNvbnN0CiAgICAgICAgICAgICByYW5nZSA9IHsgeyBub2Rl
LCBvZmZzZXQgfSwgeyBub2RlLCBvZmZzZXQgKyAxIH0gfTsKICAgICAgICAgfQogICAgIH0KLSAg
ICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKTsKKyAgICByZXR1cm4gcmFuZ2U7CiB9CiAK
IHZvaWQgQ2hhcmFjdGVySXRlcmF0b3I6OmFkdmFuY2UoaW50IGNvdW50KQpAQCAtMTQ3MCw0MyAr
MTQ3MCwzOCBAQCBzdGF0aWMgUmVmPFJhbmdlPiBjaGFyYWN0ZXJTdWJyYW5nZShEb2N1bWVudCYg
ZG9jdW1lbnQsIENoYXJhY3Rlckl0ZXJhdG9yJiBpdCwgaQogICAgIGlmIChpdC5hdEVuZCgpKQog
ICAgICAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCk7CiAKLSAgICBSZWY8UmFuZ2U+
IHN0YXJ0ID0gaXQucmFuZ2UoKTsKKyAgICBhdXRvIHN0YXJ0ID0gaXQucmFuZ2UoKS5zdGFydDsK
IAogICAgIGlmIChsZW5ndGggPiAxKQogICAgICAgICBpdC5hZHZhbmNlKGxlbmd0aCAtIDEpOwog
ICAgIGlmIChpdC5hdEVuZCgpKQogICAgICAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShkb2N1bWVu
dCk7CiAKLSAgICBSZWY8UmFuZ2U+IGVuZCA9IGl0LnJhbmdlKCk7CisgICAgYXV0byBlbmQgPSBp
dC5yYW5nZSgpLmVuZDsKIAotICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50LCAmc3Rh
cnQtPnN0YXJ0Q29udGFpbmVyKCksIHN0YXJ0LT5zdGFydE9mZnNldCgpLCAmZW5kLT5lbmRDb250
YWluZXIoKSwgZW5kLT5lbmRPZmZzZXQoKSk7CisgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShT
aW1wbGVSYW5nZSB7IHN0YXJ0LCBlbmQgfSk7CiB9CiAKIEJhY2t3YXJkc0NoYXJhY3Rlckl0ZXJh
dG9yOjpCYWNrd2FyZHNDaGFyYWN0ZXJJdGVyYXRvcihjb25zdCBSYW5nZSYgcmFuZ2UpCiAgICAg
OiBtX3VuZGVybHlpbmdJdGVyYXRvcihyYW5nZSkKLSAgICAsIG1fb2Zmc2V0KDApCi0gICAgLCBt
X3J1bk9mZnNldCgwKQotICAgICwgbV9hdEJyZWFrKHRydWUpCiB7CiAgICAgd2hpbGUgKCFhdEVu
ZCgpICYmICFtX3VuZGVybHlpbmdJdGVyYXRvci50ZXh0KCkubGVuZ3RoKCkpCiAgICAgICAgIG1f
dW5kZXJseWluZ0l0ZXJhdG9yLmFkdmFuY2UoKTsKIH0KIAotUmVmPFJhbmdlPiBCYWNrd2FyZHND
aGFyYWN0ZXJJdGVyYXRvcjo6cmFuZ2UoKSBjb25zdAorU2ltcGxlUmFuZ2UgQmFja3dhcmRzQ2hh
cmFjdGVySXRlcmF0b3I6OnJhbmdlKCkgY29uc3QKIHsKLSAgICBSZWY8UmFuZ2U+IHIgPSBtX3Vu
ZGVybHlpbmdJdGVyYXRvci5yYW5nZSgpOworICAgIFNpbXBsZVJhbmdlIHJhbmdlID0gbV91bmRl
cmx5aW5nSXRlcmF0b3IucmFuZ2UoKTsKICAgICBpZiAoIW1fdW5kZXJseWluZ0l0ZXJhdG9yLmF0
RW5kKCkpIHsKICAgICAgICAgaWYgKG1fdW5kZXJseWluZ0l0ZXJhdG9yLnRleHQoKS5sZW5ndGgo
KSA8PSAxKQogICAgICAgICAgICAgQVNTRVJUKG1fcnVuT2Zmc2V0ID09IDApOwogICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSByLT5zdGFydENvbnRhaW5lcigpOwotICAg
ICAgICAgICAgQVNTRVJUKCZub2RlID09ICZyLT5lbmRDb250YWluZXIoKSk7Ci0gICAgICAgICAg
ICBpbnQgb2Zmc2V0ID0gci0+ZW5kT2Zmc2V0KCkgLSBtX3J1bk9mZnNldDsKLSAgICAgICAgICAg
IHItPnNldFN0YXJ0KG5vZGUsIG9mZnNldCAtIDEpOwotICAgICAgICAgICAgci0+c2V0RW5kKG5v
ZGUsIG9mZnNldCk7CisgICAgICAgICAgICBOb2RlJiBub2RlID0gcmFuZ2Uuc3RhcnQuY29udGFp
bmVyOworICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gcmFuZ2UuZW5kLm9mZnNldCAtIG1f
cnVuT2Zmc2V0OworICAgICAgICAgICAgcmFuZ2UgPSB7IHsgbm9kZSwgb2Zmc2V0IC0gMSB9LCB7
IG5vZGUsIG9mZnNldCB9IH07CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIHI7CisgICAg
cmV0dXJuIHJhbmdlOwogfQogCiB2b2lkIEJhY2t3YXJkc0NoYXJhY3Rlckl0ZXJhdG9yOjphZHZh
bmNlKGludCBjb3VudCkKQEAgLTE1NTIsNyArMTU0Nyw2IEBAIHZvaWQgQmFja3dhcmRzQ2hhcmFj
dGVySXRlcmF0b3I6OmFkdmFuY2UoaW50IGNvdW50KQogCiBXb3JkQXdhcmVJdGVyYXRvcjo6V29y
ZEF3YXJlSXRlcmF0b3IoY29uc3QgUmFuZ2UmIHJhbmdlKQogICAgIDogbV91bmRlcmx5aW5nSXRl
cmF0b3IoJnJhbmdlKQotICAgICwgbV9kaWRMb29rQWhlYWQodHJ1ZSkgLy8gc28gd2UgY29uc2lk
ZXIgdGhlIGZpcnN0IGNodW5rIGZyb20gdGhlIHRleHQgaXRlcmF0b3IKIHsKICAgICBhZHZhbmNl
KCk7IC8vIGdldCBpbiBwb3NpdGlvbiBvdmVyIHRoZSBmaXJzdCBjaHVuayBvZiB0ZXh0CiB9CkBA
IC0yNTA5LDkgKzI1MDMsOSBAQCBib29sIFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5n
dGhGcm9tUmFuZ2UoTm9kZSogc2NvcGUsIGNvbnN0IFJhbmdlKiByYW5nZQogCiAvLyAtLS0tLS0t
LQogCi1ib29sIGhhc0FueVBsYWluVGV4dChjb25zdCBSYW5nZSYgcmFuZ2UsIFRleHRJdGVyYXRv
ckJlaGF2aW9yIGJlaGF2aW9yKQorYm9vbCBoYXNBbnlQbGFpblRleHQoY29uc3QgU2ltcGxlUmFu
Z2UmIHJhbmdlLCBUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikKIHsKLSAgICBmb3IgKFRl
eHRJdGVyYXRvciBpdGVyYXRvciB7ICZyYW5nZSwgYmVoYXZpb3IgfTsgIWl0ZXJhdG9yLmF0RW5k
KCk7IGl0ZXJhdG9yLmFkdmFuY2UoKSkgeworICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0ZXJhdG9y
IHsgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5wdHIoKSwgYmVoYXZpb3IgfTsgIWl0ZXJhdG9yLmF0
RW5kKCk7IGl0ZXJhdG9yLmFkdmFuY2UoKSkgewogICAgICAgICBpZiAoIWl0ZXJhdG9yLnRleHQo
KS5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0yNTYyLDEw
ICsyNTU2LDEwIEBAIFN0cmluZyBwbGFpblRleHQoY29uc3QgUmFuZ2UqIHJhbmdlLCBUZXh0SXRl
cmF0b3JCZWhhdmlvciBkZWZhdWx0QmVoYXZpb3IsIGJvb2wKICAgICByZXR1cm4gcGxhaW5UZXh0
KHJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHJhbmdlLT5lbmRQb3NpdGlvbigpLCBkZWZhdWx0QmVo
YXZpb3IsIGlzRGlzcGxheVN0cmluZyk7CiB9CiAKLVN0cmluZyBwbGFpblRleHRVc2luZ0JhY2t3
YXJkc1RleHRJdGVyYXRvckZvclRlc3RpbmcoY29uc3QgUmFuZ2UmIHJhbmdlKQorU3RyaW5nIHBs
YWluVGV4dFVzaW5nQmFja3dhcmRzVGV4dEl0ZXJhdG9yRm9yVGVzdGluZyhjb25zdCBTaW1wbGVS
YW5nZSYgcmFuZ2UpCiB7CiAgICAgU3RyaW5nIHJlc3VsdDsKLSAgICBmb3IgKFNpbXBsaWZpZWRC
YWNrd2FyZHNUZXh0SXRlcmF0b3IgYmFja3dhcmRzSXRlcmF0b3IocmFuZ2UpOyAhYmFja3dhcmRz
SXRlcmF0b3IuYXRFbmQoKTsgYmFja3dhcmRzSXRlcmF0b3IuYWR2YW5jZSgpKQorICAgIGZvciAo
U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvciBiYWNrd2FyZHNJdGVyYXRvcihjcmVhdGVM
aXZlUmFuZ2UocmFuZ2UpKTsgIWJhY2t3YXJkc0l0ZXJhdG9yLmF0RW5kKCk7IGJhY2t3YXJkc0l0
ZXJhdG9yLmFkdmFuY2UoKSkKICAgICAgICAgcmVzdWx0Lmluc2VydChiYWNrd2FyZHNJdGVyYXRv
ci50ZXh0KCkudG9TdHJpbmcoKSwgMCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTI1NzUs
MTEgKzI1NjksMTAgQEAgU3RyaW5nIHBsYWluVGV4dFJlcGxhY2luZ05vQnJlYWtTcGFjZShjb25z
dCBSYW5nZSogcmFuZ2UsIFRleHRJdGVyYXRvckJlaGF2aW9yIGQKICAgICByZXR1cm4gcGxhaW5U
ZXh0KHJhbmdlLCBkZWZhdWx0QmVoYXZpb3IsIGlzRGlzcGxheVN0cmluZykucmVwbGFjZShub0Jy
ZWFrU3BhY2UsICcgJyk7CiB9CiAKLXN0YXRpYyBSZWY8UmFuZ2U+IGNvbGxhcHNlZFRvQm91bmRh
cnkoY29uc3QgUmFuZ2UmIHJhbmdlLCBib29sIGZvcndhcmQpCitzdGF0aWMgU2ltcGxlUmFuZ2Ug
Y29sbGFwc2VkVG9Cb3VuZGFyeShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGJvb2wgZm9yd2Fy
ZCkKIHsKLSAgICBSZWY8UmFuZ2U+IHJlc3VsdCA9IHJhbmdlLmNsb25lUmFuZ2UoKTsKLSAgICBy
ZXN1bHQtPmNvbGxhcHNlKCFmb3J3YXJkKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIGF1dG8m
IGJvdW5kYXJ5ID0gZm9yd2FyZCA/IHJhbmdlLmVuZCA6IHJhbmdlLnN0YXJ0OworICAgIHJldHVy
biB7IGJvdW5kYXJ5LCBib3VuZGFyeSB9OwogfQogCiBzdGF0aWMgVGV4dEl0ZXJhdG9yQmVoYXZp
b3IgZmluZEl0ZXJhdG9yT3B0aW9ucyhGaW5kT3B0aW9ucyBvcHRpb25zKQpAQCAtMjU5MCwxMiAr
MjU4MywxMiBAQCBzdGF0aWMgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgZmluZEl0ZXJhdG9yT3B0aW9u
cyhGaW5kT3B0aW9ucyBvcHRpb25zKQogICAgIHJldHVybiBpdGVyYXRvck9wdGlvbnM7CiB9CiAK
LXN0YXRpYyB2b2lkIGZpbmRQbGFpblRleHRNYXRjaGVzKGNvbnN0IFJhbmdlJiByYW5nZSwgY29u
c3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIGNvbnN0IFdURjo6RnVuY3Rp
b248Ym9vbChzaXplX3QsIHNpemVfdCk+JiBtYXRjaCkKK3N0YXRpYyB2b2lkIGZpbmRQbGFpblRl
eHRNYXRjaGVzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgU3RyaW5nJiB0YXJnZXQs
IEZpbmRPcHRpb25zIG9wdGlvbnMsIGNvbnN0IFdURjo6RnVuY3Rpb248Ym9vbChzaXplX3QsIHNp
emVfdCk+JiBtYXRjaCkKIHsKICAgICBTZWFyY2hCdWZmZXIgYnVmZmVyKHRhcmdldCwgb3B0aW9u
cyk7CiAgICAgaWYgKGJ1ZmZlci5uZWVkc01vcmVDb250ZXh0KCkpIHsKLSAgICAgICAgUmVmPFJh
bmdlPiBiZWZvcmVTdGFydFJhbmdlID0gcmFuZ2Uub3duZXJEb2N1bWVudCgpLmNyZWF0ZVJhbmdl
KCk7Ci0gICAgICAgIGJlZm9yZVN0YXJ0UmFuZ2UtPnNldEVuZChyYW5nZS5zdGFydENvbnRhaW5l
cigpLCByYW5nZS5zdGFydE9mZnNldCgpKTsKKyAgICAgICAgUmVmPFJhbmdlPiBiZWZvcmVTdGFy
dFJhbmdlID0gcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS5jcmVhdGVSYW5nZSgpOworICAgICAgICBi
ZWZvcmVTdGFydFJhbmdlLT5zZXRFbmQocmFuZ2Uuc3RhcnQuY29udGFpbmVyLmNvcHlSZWYoKSwg
cmFuZ2Uuc3RhcnQub2Zmc2V0KTsKICAgICAgICAgZm9yIChTaW1wbGlmaWVkQmFja3dhcmRzVGV4
dEl0ZXJhdG9yIGJhY2t3YXJkc0l0ZXJhdG9yKGJlZm9yZVN0YXJ0UmFuZ2UuZ2V0KCkpOyAhYmFj
a3dhcmRzSXRlcmF0b3IuYXRFbmQoKTsgYmFja3dhcmRzSXRlcmF0b3IuYWR2YW5jZSgpKSB7CiAg
ICAgICAgICAgICBidWZmZXIucHJlcGVuZENvbnRleHQoYmFja3dhcmRzSXRlcmF0b3IudGV4dCgp
KTsKICAgICAgICAgICAgIGlmICghYnVmZmVyLm5lZWRzTW9yZUNvbnRleHQoKSkKQEAgLTI2MDMs
NyArMjU5Niw3IEBAIHN0YXRpYyB2b2lkIGZpbmRQbGFpblRleHRNYXRjaGVzKGNvbnN0IFJhbmdl
JiByYW5nZSwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPCiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBDaGFyYWN0ZXJJdGVyYXRvciBmaW5kSXRlcmF0b3IocmFuZ2UsIGZpbmRJdGVyYXRvck9w
dGlvbnMob3B0aW9ucykpOworICAgIENoYXJhY3Rlckl0ZXJhdG9yIGZpbmRJdGVyYXRvcihjcmVh
dGVMaXZlUmFuZ2UocmFuZ2UpLCBmaW5kSXRlcmF0b3JPcHRpb25zKG9wdGlvbnMpKTsKICAgICB3
aGlsZSAoIWZpbmRJdGVyYXRvci5hdEVuZCgpKSB7CiAgICAgICAgIGZpbmRJdGVyYXRvci5hZHZh
bmNlKGJ1ZmZlci5hcHBlbmQoZmluZEl0ZXJhdG9yLnRleHQoKSkpOwogICAgICAgICB3aGlsZSAo
MSkgewpAQCAtMjYyNCwxNSArMjYxNywxNSBAQCBzdGF0aWMgdm9pZCBmaW5kUGxhaW5UZXh0TWF0
Y2hlcyhjb25zdCBSYW5nZSYgcmFuZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kTwogICAg
IH0KIH0KIAotc3RhdGljIFJlZjxSYW5nZT4gcmFuZ2VGb3JNYXRjaChjb25zdCBSYW5nZSYgcmFu
Z2UsIEZpbmRPcHRpb25zIG9wdGlvbnMsIHNpemVfdCBtYXRjaFN0YXJ0LCBzaXplX3QgbWF0Y2hM
ZW5ndGgsIGJvb2wgc2VhcmNoRm9yd2FyZCkKK3N0YXRpYyBTaW1wbGVSYW5nZSByYW5nZUZvck1h
dGNoKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgRmluZE9wdGlvbnMgb3B0aW9ucywgc2l6ZV90
IG1hdGNoU3RhcnQsIHNpemVfdCBtYXRjaExlbmd0aCwgYm9vbCBzZWFyY2hGb3J3YXJkKQogewog
ICAgIGlmICghbWF0Y2hMZW5ndGgpCiAgICAgICAgIHJldHVybiBjb2xsYXBzZWRUb0JvdW5kYXJ5
KHJhbmdlLCBzZWFyY2hGb3J3YXJkKTsKLSAgICBDaGFyYWN0ZXJJdGVyYXRvciByYW5nZUNvbXB1
dGVJdGVyYXRvcihyYW5nZSwgZmluZEl0ZXJhdG9yT3B0aW9ucyhvcHRpb25zKSk7Ci0gICAgcmV0
dXJuIGNoYXJhY3RlclN1YnJhbmdlKHJhbmdlLm93bmVyRG9jdW1lbnQoKSwgcmFuZ2VDb21wdXRl
SXRlcmF0b3IsIG1hdGNoU3RhcnQsIG1hdGNoTGVuZ3RoKTsKKyAgICBDaGFyYWN0ZXJJdGVyYXRv
ciByYW5nZUNvbXB1dGVJdGVyYXRvcihjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLCBmaW5kSXRlcmF0
b3JPcHRpb25zKG9wdGlvbnMpKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyU3VicmFuZ2UocmFuZ2Uu
c3RhcnQuZG9jdW1lbnQoKSwgcmFuZ2VDb21wdXRlSXRlcmF0b3IsIG1hdGNoU3RhcnQsIG1hdGNo
TGVuZ3RoKTsKIH0KIAotUmVmPFJhbmdlPiBmaW5kQ2xvc2VzdFBsYWluVGV4dChjb25zdCBSYW5n
ZSYgcmFuZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCB1bnNp
Z25lZCB0YXJnZXRPZmZzZXQpCitTaW1wbGVSYW5nZSBmaW5kQ2xvc2VzdFBsYWluVGV4dChjb25z
dCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBv
cHRpb25zLCB1bnNpZ25lZCB0YXJnZXRPZmZzZXQpCiB7CiAgICAgc2l6ZV90IG1hdGNoU3RhcnQg
PSAwOwogICAgIHNpemVfdCBtYXRjaExlbmd0aCA9IDA7CkBAIC0yNjUxLDcgKzI2NDQsNyBAQCBS
ZWY8UmFuZ2U+IGZpbmRDbG9zZXN0UGxhaW5UZXh0KGNvbnN0IFJhbmdlJiByYW5nZSwgY29uc3Qg
U3RyaW5nJiB0YXJnZXQsIEZpbmRPcAogICAgIHJldHVybiByYW5nZUZvck1hdGNoKHJhbmdlLCBv
cHRpb25zLCBtYXRjaFN0YXJ0LCBtYXRjaExlbmd0aCwgIW9wdGlvbnMuY29udGFpbnMoQmFja3dh
cmRzKSk7CiB9CiAKLVJlZjxSYW5nZT4gZmluZFBsYWluVGV4dChjb25zdCBSYW5nZSYgcmFuZ2Us
IGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zKQorU2ltcGxlUmFuZ2Ug
ZmluZFBsYWluVGV4dChjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IFN0cmluZyYgdGFy
Z2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zKQogewogICAgIGJvb2wgc2VhcmNoRm9yd2FyZCA9ICFv
cHRpb25zLmNvbnRhaW5zKEJhY2t3YXJkcyk7CiAgICAgc2l6ZV90IG1hdGNoU3RhcnQgPSAwOwpA
QCAtMjY2Nyw3ICsyNjYwLDcgQEAgUmVmPFJhbmdlPiBmaW5kUGxhaW5UZXh0KGNvbnN0IFJhbmdl
JiByYW5nZSwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG8KICAgICByZXR1cm4g
cmFuZ2VGb3JNYXRjaChyYW5nZSwgb3B0aW9ucywgbWF0Y2hTdGFydCwgbWF0Y2hMZW5ndGgsIHNl
YXJjaEZvcndhcmQpOwogfQogCi1ib29sIGZpbmRQbGFpblRleHQoY29uc3QgU3RyaW5nJiBkb2N1
bWVudCwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMpCitib29sIGNv
bnRhaW5zUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGFy
Z2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zKQogewogICAgIFNlYXJjaEJ1ZmZlciBidWZmZXIgeyB0
YXJnZXQsIG9wdGlvbnMgfTsKICAgICBTdHJpbmdWaWV3IHJlbWFpbmluZ1RleHQgeyBkb2N1bWVu
dCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKaW5kZXggZWNiMTBkNzUxMzhj
MDdkNmE5ZjU2ZjcxOGFkMjgyMTcwZDgyMTNlNC4uMDkyMDE4NGQ4NTcxMGVjMjQzZWRjZjY5ZDAy
YTQ0ZTYzMWQ3Y2E0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRl
cmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCkBAIC00
NCwxMiArNDQsMTIgQEAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHBsYWluVGV4dFJlcGxhY2luZ05v
QnJlYWtTcGFjZShQb3NpdGlvbiBzdGFydCwgUG9zaXRpb24gZW4KIAogV0VCQ09SRV9FWFBPUlQg
U3RyaW5nIHBsYWluVGV4dChjb25zdCBSYW5nZSosIFRleHRJdGVyYXRvckJlaGF2aW9yID0gVGV4
dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yLCBib29sIGlzRGlzcGxheVN0cmluZyA9IGZhbHNlKTsK
IFdFQkNPUkVfRVhQT1JUIFN0cmluZyBwbGFpblRleHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UoY29u
c3QgUmFuZ2UqLCBUZXh0SXRlcmF0b3JCZWhhdmlvciA9IFRleHRJdGVyYXRvckRlZmF1bHRCZWhh
dmlvciwgYm9vbCBpc0Rpc3BsYXlTdHJpbmcgPSBmYWxzZSk7Ci1XRUJDT1JFX0VYUE9SVCBTdHJp
bmcgcGxhaW5UZXh0VXNpbmdCYWNrd2FyZHNUZXh0SXRlcmF0b3JGb3JUZXN0aW5nKGNvbnN0IFJh
bmdlJik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgcGxhaW5UZXh0VXNpbmdCYWNrd2FyZHNUZXh0
SXRlcmF0b3JGb3JUZXN0aW5nKGNvbnN0IFNpbXBsZVJhbmdlJik7CiAKLVJlZjxSYW5nZT4gZmlu
ZFBsYWluVGV4dChjb25zdCBSYW5nZSYsIGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zKTsKLVdF
QkNPUkVfRVhQT1JUIFJlZjxSYW5nZT4gZmluZENsb3Nlc3RQbGFpblRleHQoY29uc3QgUmFuZ2Um
LCBjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQpOwotV0VCQ09SRV9FWFBPUlQg
Ym9vbCBoYXNBbnlQbGFpblRleHQoY29uc3QgUmFuZ2UmLCBUZXh0SXRlcmF0b3JCZWhhdmlvciA9
IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcik7Ci1ib29sIGZpbmRQbGFpblRleHQoY29uc3Qg
U3RyaW5nJiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMpOyAvLyBMZXRzIHVz
IHVzZSB0aGUgc2VhcmNoIGFsZ29yaXRobSBvbiBhIHN0cmluZy4KK1NpbXBsZVJhbmdlIGZpbmRQ
bGFpblRleHQoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucyk7
CitXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZSBmaW5kQ2xvc2VzdFBsYWluVGV4dChjb25zdCBT
aW1wbGVSYW5nZSYsIGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1bnNpZ25lZCk7CitXRUJD
T1JFX0VYUE9SVCBib29sIGhhc0FueVBsYWluVGV4dChjb25zdCBTaW1wbGVSYW5nZSYsIFRleHRJ
dGVyYXRvckJlaGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yKTsKK2Jvb2wgY29u
dGFpbnNQbGFpblRleHQoY29uc3QgU3RyaW5nJiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiwgRmlu
ZE9wdGlvbnMpOyAvLyBMZXRzIHVzIHVzZSB0aGUgc2VhcmNoIGFsZ29yaXRobSBvbiBhIHN0cmlu
Zy4KIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBmb2xkUXVvdGVNYXJrcyhjb25zdCBTdHJpbmcmKTsK
IAogLy8gRklYTUU6IE1vdmUgdGhpcyBzb21ld2hlcmUgZWxzZSBpbiB0aGUgZWRpdGluZyBkaXJl
Y3RvcnkuIEl0IGRvZXNuJ3QgYmVsb25nIGhlcmUuCkBAIC0xODQsNyArMTg0LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgYWR2YW5jZSgpOwogCiAgICAgU3RyaW5nVmlldyB0ZXh0KCkgY29uc3QgeyBB
U1NFUlQoIWF0RW5kKCkpOyByZXR1cm4gbV90ZXh0OyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVm
PFJhbmdlPiByYW5nZSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdlIHJh
bmdlKCkgY29uc3Q7CiAgICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgQVNTRVJUKCFhdEVuZCgpKTsg
cmV0dXJuIG1fbm9kZTsgfQogCiBwcml2YXRlOgpAQCAtMjQwLDE2ICsyNDAsMTYgQEAgcHVibGlj
OgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWR2YW5jZShpbnQgbnVtQ2hhcmFjdGVycyk7CiAg
ICAgCiAgICAgU3RyaW5nVmlldyB0ZXh0KCkgY29uc3QgeyByZXR1cm4gbV91bmRlcmx5aW5nSXRl
cmF0b3IudGV4dCgpLnN1YnN0cmluZyhtX3J1bk9mZnNldCk7IH0KLSAgICBXRUJDT1JFX0VYUE9S
VCBSZWY8UmFuZ2U+IHJhbmdlKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFu
Z2UgcmFuZ2UoKSBjb25zdDsKIAogICAgIGJvb2wgYXRCcmVhaygpIGNvbnN0IHsgcmV0dXJuIG1f
YXRCcmVhazsgfQotICAgIGludCBjaGFyYWN0ZXJPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29m
ZnNldDsgfQorICAgIHVuc2lnbmVkIGNoYXJhY3Rlck9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
b2Zmc2V0OyB9CiAKIHByaXZhdGU6CiAgICAgVGV4dEl0ZXJhdG9yIG1fdW5kZXJseWluZ0l0ZXJh
dG9yOwogCi0gICAgaW50IG1fb2Zmc2V0IHsgMCB9OwotICAgIGludCBtX3J1bk9mZnNldCB7IDAg
fTsKKyAgICB1bnNpZ25lZCBtX29mZnNldCB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX3J1bk9mZnNl
dCB7IDAgfTsKICAgICBib29sIG1fYXRCcmVhayB7IHRydWUgfTsKIH07CiAgICAgCkBAIC0yNjAs
MTQgKzI2MCwxNCBAQCBwdWJsaWM6CiAgICAgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
dW5kZXJseWluZ0l0ZXJhdG9yLmF0RW5kKCk7IH0KICAgICB2b2lkIGFkdmFuY2UoaW50IG51bUNo
YXJhY3RlcnMpOwogCi0gICAgUmVmPFJhbmdlPiByYW5nZSgpIGNvbnN0OworICAgIFNpbXBsZVJh
bmdlIHJhbmdlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgU2ltcGxpZmllZEJhY2t3YXJkc1Rl
eHRJdGVyYXRvciBtX3VuZGVybHlpbmdJdGVyYXRvcjsKIAotICAgIGludCBtX29mZnNldDsKLSAg
ICBpbnQgbV9ydW5PZmZzZXQ7Ci0gICAgYm9vbCBtX2F0QnJlYWs7CisgICAgdW5zaWduZWQgbV9v
ZmZzZXQgeyAwIH07CisgICAgdW5zaWduZWQgbV9ydW5PZmZzZXQgeyAwIH07CisgICAgYm9vbCBt
X2F0QnJlYWsgeyB0cnVlIH07CiB9OwogCiAvLyBTaW1pbGFyIHRvIHRoZSBUZXh0SXRlcmF0b3Is
IGV4Y2VwdCB0aGF0IHRoZSBjaHVua3Mgb2YgdGV4dCByZXR1cm5lZCBhcmUgIndlbGwgYmVoYXZl
ZCIsIG1lYW5pbmcKQEAgLTI4OSw5ICsyODksOSBAQCBwcml2YXRlOgogCiAgICAgLy8gTWFueSBj
aHVua3MgZnJvbSB0ZXh0IGl0ZXJhdG9yIGNvbmNhdGVuYXRlZC4KICAgICBWZWN0b3I8VUNoYXI+
IG1fYnVmZmVyOwotICAgIAorCiAgICAgLy8gRGlkIHdlIGhhdmUgdG8gbG9vayBhaGVhZCBpbiB0
aGUgdGV4dCBpdGVyYXRvciB0byBjb25maXJtIHRoZSBjdXJyZW50IGNodW5rPwotICAgIGJvb2wg
bV9kaWRMb29rQWhlYWQ7CisgICAgYm9vbCBtX2RpZExvb2tBaGVhZCB7IHRydWUgfTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAKaW5kZXggNmNkMTdkMTMyZWNmOTg3ZmM0
Y2M0NGY1NjllNDlkYzgxMWJkYjg2ZC4uOTc5ZjdhYTlhODZiODYxNWFiODc1ZTBlYmRmOTc5NzM4
NWNhZmYxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTE5MywxMiArMTkzLDEyIEBAIHB1YmxpYzoKIAogICAg
IFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUxp
dmVSYW5nZShtX2l0ZXJhdG9yLnJhbmdlKCkpLT5zdGFydFBvc2l0aW9uKCk7CisgICAgICAgIHJl
dHVybiBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9pdGVyYXRvci5yYW5nZSgpLnN0YXJ0
KTsKICAgICB9CiAKICAgICBQb3NpdGlvbiBlbmRQb3NpdGlvbigpCiAgICAgewotICAgICAgICBy
ZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKG1faXRlcmF0b3IucmFuZ2UoKSktPmVuZFBvc2l0aW9uKCk7
CisgICAgICAgIHJldHVybiBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9pdGVyYXRvci5y
YW5nZSgpLmVuZCk7CiAgICAgfQogCiAgICAgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
aXRlcmF0b3IuYXRFbmQoKSAmJiBtX2N1cnJlbnROb2RlRm9yRmluZGluZ0ludmlzaWJsZUNvbnRl
bnQgPT0gbV9wYXN0RW5kTm9kZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlUG9zaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0
aW9uLmgKaW5kZXggNmM2NzM0NGQ4NGMwNWNmZjBiNzQ0M2Q0ODg2MDFhMjAxY2E1NTcxZi4uNDg1
NjY4MjRlZDczZmRhY2QyNTcwOGRlMzE5MzE0ZTYxOTJjMDJmMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oCkBAIC0zNCw2ICszNCw4IEBAIGNsYXNzIFRleHRTdHJl
YW07CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgUmFuZ2U7CisKIC8vIFZpc2libGVQ
b3NpdGlvbiBkZWZhdWx0IGFmZmluaXR5IGlzIGRvd25zdHJlYW0gYmVjYXVzZQogLy8gdGhlIGNh
bGxlcnMgZG8gbm90IHJlYWxseSBjYXJlICh0aGV5IGp1c3Qgd2FudCB0aGUKIC8vIGRlZXAgcG9z
aXRpb24gd2l0aG91dCByZWdhcmQgdG8gbGluZSBwb3NpdGlvbiksIGFuZCB0aGlzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAppbmRleCAwZDIxY2MwODRlZWY2
ZWE2MDA3ZjYxNzU1ZDJmOGNjOWExODQ1NmJmLi4wODcyZTVlNWZkMWVhNDg4ZTg0NDNhOTI5NGI5
OTkzNmYzMGMzMjg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVT
ZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlv
bi5jcHAKQEAgLTI0Myw3ICsyNDMsNyBAQCB2b2lkIFZpc2libGVTZWxlY3Rpb246OmFwcGVuZFRy
YWlsaW5nV2hpdGVzcGFjZSgpCiAgICAgICAgIFVDaGFyIGMgPSBjaGFySXQudGV4dCgpWzBdOwog
ICAgICAgICBpZiAoKCFpc1NwYWNlT3JOZXdsaW5lKGMpICYmIGMgIT0gbm9CcmVha1NwYWNlKSB8
fCBjID09ICdcbicpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgbV9lbmQgPSBjaGFySXQu
cmFuZ2UoKS0+ZW5kUG9zaXRpb24oKTsKKyAgICAgICAgbV9lbmQgPSBjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24oY2hhckl0LnJhbmdlKCkuZW5kKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAppbmRleCA0NDc4YWRmMjJiYWY5ZThmYzU4MmFkMjc1
MjhhMDM0YzVlNGNjODQ1Li4xZTEwZjE1ZDljZDNmNTUyYjMxMTg0NzQ1OTIwMjk3ZGNlODQ5MDc2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCkBAIC02MzUsNyArNjM1
LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgYywgQm91bmRhcnlTZWFyY2gKICAgICBpZiAoIW5leHQpCiAgICAgICAgIHJl
dHVybiBWaXNpYmxlUG9zaXRpb24oaXQuYXRFbmQoKSA/IHNlYXJjaFJhbmdlLT5zdGFydFBvc2l0
aW9uKCkgOiBwb3MsIERPV05TVFJFQU0pOwogCi0gICAgTm9kZSYgbm9kZSA9IGl0LmF0RW5kKCkg
PyBzZWFyY2hSYW5nZS0+c3RhcnRDb250YWluZXIoKSA6IGl0LnJhbmdlKCktPnN0YXJ0Q29udGFp
bmVyKCk7CisgICAgTm9kZSYgbm9kZSA9IGl0LmF0RW5kKCkgPyBzZWFyY2hSYW5nZS0+c3RhcnRD
b250YWluZXIoKSA6IGl0LnJhbmdlKCkuc3RhcnQuY29udGFpbmVyLmdldCgpOwogICAgIGlmICgo
IXN1ZmZpeExlbmd0aCAmJiBub2RlLmlzVGV4dE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxpbnQ+KG5l
eHQpIDw9IG5vZGUubWF4Q2hhcmFjdGVyT2Zmc2V0KCkpIHx8IChub2RlLnJlbmRlcmVyKCkgJiYg
bm9kZS5yZW5kZXJlcigpLT5pc0JSKCkgJiYgIW5leHQpKSB7CiAgICAgICAgIC8vIFRoZSBuZXh0
IHZhcmlhYmxlIGNvbnRhaW5zIGEgdXNhYmxlIGluZGV4IGludG8gYSB0ZXh0IG5vZGUKICAgICAg
ICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oJm5v
ZGUsIG5leHQpLCBET1dOU1RSRUFNKTsKQEAgLTY0Niw3ICs2NDYsNyBAQCBzdGF0aWMgVmlzaWJs
ZVBvc2l0aW9uIHByZXZpb3VzQm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBCb3Vu
ZGFyeVNlYXJjaAogICAgIGlmIChuZXh0IDwgc3RyaW5nLnNpemUoKSAtIHN1ZmZpeExlbmd0aCkK
ICAgICAgICAgY2hhckl0LmFkdmFuY2Uoc3RyaW5nLnNpemUoKSAtIHN1ZmZpeExlbmd0aCAtIG5l
eHQpOwogICAgIC8vIEZJWE1FOiBjaGFySXQgY2FuIGdldCBvdXQgb2Ygc2hhZG93IGhvc3QuCi0g
ICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihjaGFySXQucmFuZ2UoKS0+ZW5kUG9zaXRpb24oKSwg
RE9XTlNUUkVBTSk7CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24oY2hhckl0LnJhbmdlKCkuZW5kKSwgRE9XTlNUUkVBTSk7CiB9CiAKIHN0YXRp
YyBWaXNpYmxlUG9zaXRpb24gbmV4dEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywg
Qm91bmRhcnlTZWFyY2hGdW5jdGlvbiBzZWFyY2hGdW5jdGlvbikKQEAgLTY4MiwyMCArNjgyLDE4
IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gbmV4dEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgYywgQm91bmRhcnlTZWFyY2hGdW5jCiAgICAgICAgIC8vIFVzZSB0aGUgY2hhcmFjdGVy
IGl0ZXJhdG9yIHRvIHRyYW5zbGF0ZSB0aGUgbmV4dCB2YWx1ZSBpbnRvIGEgRE9NIHBvc2l0aW9u
LgogICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBjaGFySXQoc2VhcmNoUmFuZ2UsIFRleHRJdGVy
YXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKICAgICAgICAg
Y2hhckl0LmFkdmFuY2UobmV4dCAtIHByZWZpeExlbmd0aCAtIDEpOwotICAgICAgICBSZWZQdHI8
UmFuZ2U+IGNoYXJhY3RlclJhbmdlID0gY2hhckl0LnJhbmdlKCk7Ci0gICAgICAgIHBvcyA9IGNo
YXJhY3RlclJhbmdlLT5lbmRQb3NpdGlvbigpOworICAgICAgICBTaW1wbGVSYW5nZSBjaGFyYWN0
ZXJSYW5nZSA9IGNoYXJJdC5yYW5nZSgpOworICAgICAgICBwb3MgPSBjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24oY2hhcmFjdGVyUmFuZ2UuZW5kKTsKICAgICAgICAgCiAgICAgICAgIGlmIChj
aGFySXQudGV4dCgpWzBdID09ICdcbicpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiB3b3JrYXJv
dW5kIGZvciBjb2xsYXBzZWQgcmFuZ2UgKHdoZXJlIG9ubHkgc3RhcnQgcG9zaXRpb24gaXMgY29y
cmVjdCkgZW1pdHRlZCBmb3Igc29tZSBlbWl0dGVkIG5ld2xpbmVzIChzZWUgcmRhcjovLzUxOTI1
OTMpCi0gICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzUG9zID0gVmlzaWJsZVBvc2l0aW9u
KHBvcyk7Ci0gICAgICAgICAgICBpZiAodmlzUG9zID09IFZpc2libGVQb3NpdGlvbihjaGFyYWN0
ZXJSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSkgeworICAgICAgICAgICAgaWYgKFZpc2libGVQb3Np
dGlvbihwb3MpID09IFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24o
Y2hhcmFjdGVyUmFuZ2Uuc3RhcnQpKSkgewogICAgICAgICAgICAgICAgIGNoYXJJdC5hZHZhbmNl
KDEpOwotICAgICAgICAgICAgICAgIHBvcyA9IGNoYXJJdC5yYW5nZSgpLT5zdGFydFBvc2l0aW9u
KCk7CisgICAgICAgICAgICAgICAgcG9zID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNo
YXJJdC5yYW5nZSgpLnN0YXJ0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAot
ICAgIC8vIGdlbmVyYXRlIFZpc2libGVQb3NpdGlvbiwgdXNlIFVQU1RSRUFNIGFmZmluaXR5IGlm
IHBvc3NpYmxlCiAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihwb3MsIFZQX1VQU1RSRUFNX0lG
X1BPU1NJQkxFKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IGU4
ZDg0YzQxODVkZTA0MmUyZGQ5ZmQ2N2MxNDhkN2ZmOTdhN2E4OTMuLjhiYjVjMjZiZTZlN2JiNTg1
MDM4M2U3ZWRiYjIyODQ0OGVjYjk2MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5j
cHAKQEAgLTE3NCw2ICsxNzQsNyBAQAogI2luY2x1ZGUgIlNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25EYXRhLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFkb3dSb290Lmgi
CisjaW5jbHVkZSAiU2ltcGxlUmFuZ2UuaCIKICNpbmNsdWRlICJTb3VyY2VCdWZmZXIuaCIKICNp
bmNsdWRlICJTcGVsbENoZWNrZXIuaCIKICNpbmNsdWRlICJTdGF0aWNOb2RlTGlzdC5oIgpAQCAt
MjA1Myw3ICsyMDU0LDcgQEAgUmVmPFJhbmdlPiBJbnRlcm5hbHM6OnN1YnJhbmdlKFJhbmdlJiBy
YW5nZSwgaW50IHJhbmdlTG9jYXRpb24sIGludCByYW5nZUxlbmd0aCkKIAogUmVmUHRyPFJhbmdl
PiBJbnRlcm5hbHM6OnJhbmdlT2ZTdHJpbmdOZWFyTG9jYXRpb24oY29uc3QgUmFuZ2UmIHNlYXJj
aFJhbmdlLCBjb25zdCBTdHJpbmcmIHRleHQsIHVuc2lnbmVkIHRhcmdldE9mZnNldCkKIHsKLSAg
ICByZXR1cm4gZmluZENsb3Nlc3RQbGFpblRleHQoc2VhcmNoUmFuZ2UsIHRleHQsIHsgfSwgdGFy
Z2V0T2Zmc2V0KTsKKyAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKGZpbmRDbG9zZXN0UGxhaW5U
ZXh0KHNlYXJjaFJhbmdlLCB0ZXh0LCB7IH0sIHRhcmdldE9mZnNldCkpOwogfQogCiAjaWYgIVBM
QVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0NvY29hL1dlYlBhZ2VDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0NvY29hL1dlYlBhZ2VDb2NvYS5tbQppbmRleCAwN2UwZTI0MjE5ZGNmMjRmZDU1OWRkMjcyOWM1
ZTVlNjI4MzEzM2U1Li4xMTAxM2NlNWVjOGE5N2E5YTEyMTRlODU5Yjk1ZmJlODRiNGY2Y2U2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdl
Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2Vi
UGFnZUNvY29hLm1tCkBAIC00Nyw3ICs0Nyw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL1JhbmdlLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2lt
cGxlUmFuZ2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUvVGV4dEl0ZXJhdG9yLmg+CiAKICNpZiBQTEFU
Rk9STShDT0NPQSkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9p
b3MvV2ViUGFnZUlPUy5tbQppbmRleCBlMDAzNzUzNzk1Mzc3NGIxNTUzMTE5NzE1MzdjYTlmNGRh
ZjU0NjZlLi5mZWQ2YzA0YmVjOGM1ZGEyNmU2NTE5MzU2YzYyMDBlMjNiZWUwMzUwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpA
QCAtMTI0LDYgKzEyNCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1NldHRpbmdzLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1NoYWRvd1Jvb3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+
CisjaW1wb3J0IDxXZWJDb3JlL1NpbXBsZVJhbmdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1N0eWxl
UHJvcGVydGllcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9UZXh0SW5kaWNhdG9yLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1RleHRJdGVyYXRvci5oPgpAQCAtMTk3NCwxMSArMTk3NSwxMyBAQCB2b2lkIFdl
YlBhZ2U6OnN0b3JlU2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0eShib29sIHNob3VsZFN0b3JlKQog
ICAgIH0KIH0KIAotc3RhdGljIFJlZlB0cjxSYW5nZT4gcmFuZ2VOZWFyUG9zaXRpb25NYXRjaGVz
VGV4dChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBSZWZQdHI8UmFuZ2U+IG9yaWdp
bmFsUmFuZ2UsIGNvbnN0IFN0cmluZyYgbWF0Y2hUZXh0LCBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlv
blJhbmdlKQorc3RhdGljIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZU5lYXJQb3NpdGlvbk1h
dGNoZXNUZXh0KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYg
bWF0Y2hUZXh0LCBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdlKQogeworICAgIGlmICghc2Vs
ZWN0aW9uUmFuZ2UpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgYXV0byByYW5n
ZSA9IFJhbmdlOjpjcmVhdGUoc2VsZWN0aW9uUmFuZ2UtPm93bmVyRG9jdW1lbnQoKSwgc2VsZWN0
aW9uUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJl
bnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0T2Zmc2V0ID0gVGV4
dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5wdHIoKSwgdHJ1ZSk7Ci0gICAgcmV0dXJuIGZp
bmRDbG9zZXN0UGxhaW5UZXh0KCpzZWxlY3Rpb25SYW5nZS5nZXQoKSwgbWF0Y2hUZXh0LCB7IH0s
IHRhcmdldE9mZnNldCk7CisgICAgcmV0dXJuIGZpbmRDbG9zZXN0UGxhaW5UZXh0KCpzZWxlY3Rp
b25SYW5nZSwgbWF0Y2hUZXh0LCB7IH0sIHRhcmdldE9mZnNldCk7CiB9CiAKIHZvaWQgV2ViUGFn
ZTo6Z2V0UmVjdHNBdFNlbGVjdGlvbk9mZnNldFdpdGhUZXh0KGludDMyX3Qgb2Zmc2V0LCBjb25z
dCBTdHJpbmcmIHRleHQsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKQEAgLTIwMDMsMTMgKzIwMDYs
MTEgQEAgdm9pZCBXZWJQYWdlOjpnZXRSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0V2l0aFRleHQoaW50
MzJfdCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgdGUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIFN0cmluZyByYW5nZVRleHQgPSBwbGFpblRleHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UocmFu
Z2UucHRyKCksIFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvciwgdHJ1ZSk7Ci0gICAgaWYgKHJh
bmdlVGV4dCAhPSB0ZXh0KSB7Ci0gICAgICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAocGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVh
a1NwYWNlKHJhbmdlLnB0cigpLCBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IsIHRydWUpICE9
IHRleHQpIHsKICAgICAgICAgLy8gVHJ5IHRvIHNlYXJjaCBmb3IgYSByYW5nZSB3aGljaCBpcyB0
aGUgY2xvc2VzdCB0byB0aGUgcG9zaXRpb24gd2l0aGluIHRoZSBzZWxlY3Rpb24gcmFuZ2UgdGhh
dCBtYXRjaGVzIHRoZSBwYXNzZWQgaW4gdGV4dC4KLSAgICAgICAgaWYgKGF1dG8gd29yZFJhbmdl
ID0gcmFuZ2VOZWFyUG9zaXRpb25NYXRjaGVzVGV4dChzdGFydFBvc2l0aW9uLCByYW5nZS5wdHIo
KSwgdGV4dCwgc2VsZWN0aW9uUmFuZ2UpKSB7CisgICAgICAgIGlmIChhdXRvIHdvcmRSYW5nZSA9
IHJhbmdlTmVhclBvc2l0aW9uTWF0Y2hlc1RleHQoc3RhcnRQb3NpdGlvbiwgdGV4dCwgc2VsZWN0
aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpKSB7CiAgICAgICAgICAgICBpZiAoIXdvcmRSYW5nZS0+
Y29sbGFwc2VkKCkpCi0gICAgICAgICAgICAgICAgcmFuZ2UgPSAqd29yZFJhbmdlOworICAgICAg
ICAgICAgICAgIHJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKCp3b3JkUmFuZ2UpOwogICAgICAgICB9
CiAgICAgfQogCkBAIC00MjE0LDcgKzQyMTUsNyBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REb2N1
bWVudEVkaXRpbmdDb250ZXh0KERvY3VtZW50RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVlcwog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBy
ZWN0cy5hcHBlbmQoeyBjb250ZXh0SXRlcmF0b3IucmFuZ2UoKS0+YWJzb2x1dGVCb3VuZGluZ0Jv
eChSYW5nZTo6Qm91bmRpbmdSZWN0QmVoYXZpb3I6Oklnbm9yZUVtcHR5VGV4dFNlbGVjdGlvbnMp
LCB7IGN1cnJlbnRMb2NhdGlvbiwgMSB9IH0pOworICAgICAgICAgICAgcmVjdHMuYXBwZW5kKHsg
Y3JlYXRlTGl2ZVJhbmdlKGNvbnRleHRJdGVyYXRvci5yYW5nZSgpKS0+YWJzb2x1dGVCb3VuZGlu
Z0JveChSYW5nZTo6Qm91bmRpbmdSZWN0QmVoYXZpb3I6Oklnbm9yZUVtcHR5VGV4dFNlbGVjdGlv
bnMpLCB7IGN1cnJlbnRMb2NhdGlvbiwgMSB9IH0pOwogICAgICAgICAgICAgY3VycmVudExvY2F0
aW9uKys7CiAgICAgICAgICAgICBjb250ZXh0SXRlcmF0b3IuYWR2YW5jZSgxKTsKICAgICAgICAg
fQo=
</data>
<flag name="review"
          id="408619"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>