<?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>213345</bug_id>
          
          <creation_ts>2020-06-18 11:40:23 -0700</creation_ts>
          <short_desc>Unify Bitmap math loops in MarkedBlock::Handle::specializedSweep().</short_desc>
          <delta_ts>2020-08-09 02:07:01 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>REOPENED</bug_status>
          <resolution></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>
          <dependson>215312</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1663932</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-18 11:40:23 -0700</bug_when>
    <thetext>Also address feedback from Robin and Saam in https://bugs.webkit.org/show_bug.cgi?id=213071.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663945</commentid>
    <comment_count>1</comment_count>
      <attachid>402224</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-18 12:10:40 -0700</bug_when>
    <thetext>Created attachment 402224
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663946</commentid>
    <comment_count>2</comment_count>
      <attachid>402225</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-18 12:19:08 -0700</bug_when>
    <thetext>Created attachment 402225
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663950</commentid>
    <comment_count>3</comment_count>
      <attachid>402225</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-18 12:27:05 -0700</bug_when>
    <thetext>Comment on attachment 402225
proposed patch.

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

&gt; Source/JavaScriptCore/ChangeLog:11
&gt; +        understand than then old code.

/then/the/

&gt; Source/JavaScriptCore/ChangeLog:38
&gt; +        5. Aldo fixed some typos in comments.

/Aldo/Also/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663951</commentid>
    <comment_count>4</comment_count>
      <attachid>402225</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2020-06-18 12:41:15 -0700</bug_when>
    <thetext>Comment on attachment 402225
proposed patch.

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

r=me

&gt; Source/JavaScriptCore/heap/MarkedBlockInlines.h:345
&gt; +    if (emptyMode == NotEmpty) {

This section is *much* more readable than before, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663954</commentid>
    <comment_count>5</comment_count>
      <attachid>402225</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-06-18 12:47:04 -0700</bug_when>
    <thetext>Comment on attachment 402225
proposed patch.

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

&gt; Source/JavaScriptCore/heap/MarkedBlockInlines.h:369
&gt; +    // At this point, a set bit in freeAtoms represents live cells.

this is no longer true, right? Opposite</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663955</commentid>
    <comment_count>6</comment_count>
      <attachid>402225</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-06-18 12:47:31 -0700</bug_when>
    <thetext>Comment on attachment 402225
proposed patch.

reinstating Robin&apos;s r+. I&apos;m not done reviewing though</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663959</commentid>
    <comment_count>7</comment_count>
      <attachid>402225</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-06-18 12:52:47 -0700</bug_when>
    <thetext>Comment on attachment 402225
proposed patch.

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

&gt; Source/JavaScriptCore/heap/MarkedBlockInlines.h:367
&gt; +    bool isEmpty = !anyBits;

alternatively, you can just set this to false, then to true when iterating freeAtoms.forEachSetBit below</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663960</commentid>
    <comment_count>8</comment_count>
      <attachid>402225</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-06-18 12:55:03 -0700</bug_when>
    <thetext>Comment on attachment 402225
proposed patch.

r=me too</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663967</commentid>
    <comment_count>9</comment_count>
      <attachid>402225</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-18 13:07:54 -0700</bug_when>
    <thetext>Comment on attachment 402225
proposed patch.

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

&gt;&gt; Source/JavaScriptCore/heap/MarkedBlockInlines.h:367
&gt;&gt; +    bool isEmpty = !anyBits;
&gt; 
&gt; alternatively, you can just set this to false, then to true when iterating freeAtoms.forEachSetBit below

Good point. Thanks.

&gt;&gt; Source/JavaScriptCore/heap/MarkedBlockInlines.h:369
&gt;&gt; +    // At this point, a set bit in freeAtoms represents live cells.
&gt; 
&gt; this is no longer true, right? Opposite

Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1664079</commentid>
    <comment_count>10</comment_count>
      <attachid>402261</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-18 19:14:17 -0700</bug_when>
    <thetext>Created attachment 402261
patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1664088</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-18 20:31:20 -0700</bug_when>
    <thetext>Thanks for the reviews.  Landed in r263252: &lt;http://trac.webkit.org/r263252&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1664089</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-18 20:32:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/64516410&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678958</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-08-09 02:07:01 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 215312</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402224</attachid>
            <date>2020-06-18 12:10:40 -0700</date>
            <delta_ts>2020-06-18 12:17:26 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-213345.patch</filename>
            <type>text/plain</type>
            <size>28889</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjYzMjIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBA
CisyMDIwLTA2LTE4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBV
bmlmeSBCaXRtYXAgbWF0aCBsb29wcyBpbiBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXpl
ZFN3ZWVwKCkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTMzNDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIGNoYW5nZSBhcHBlYXJzIHRvIGJlIHBlcmZvcm1hbmNlIG5ldXRyYWwuICBIb3dldmVy
LCB3ZSdsbCB0YWtlIHRoZSBjaGFuZ2UKKyAgICAgICAgYmVjYXVzZSB3ZSBrbm93IHRoYXQgaXQg
ZG9lcyBsZXNzIHdvcmssIGFuZCB0aGUgbmV3IHdheSBvZiBleHByZXNzaW5nIHRoZSBCaXRtYXAK
KyAgICAgICAgbWF0aCBpbiBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZWVwKCkg
ZG9lcyBhcHBlYXIgdG8gYmUgZWFzaWVyIHRvCisgICAgICAgIHVuZGVyc3RhbmQgdGhhbiB0aGVu
IG9sZCBjb2RlLgorCisgICAgICAgIEFsc28gYWRkcmVzc2VkIGZlZWRiYWNrIGZyb20gUm9iaW4g
YW5kIFNhYW0gaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzA3
MS4KKworICAgICAgICBDaGFuZ2VzIG1hZGU6CisKKyAgICAgICAgMS4gVXNlIHRoZSBuZXcgQml0
bWFwOjp3b3JkcygpIEFQSSB0byBnZXQgZGlyZWN0IGFjY2VzcyB0byB0aGUgdW5kZXJseWluZyBi
aXRzCisgICAgICAgICAgIHN0b3JhZ2UuICBXaXRoIHRoaXMsIHdlIGNhbiBkbyB0aGUgbWVyZ2lu
ZyBvZiB0aGUgbWFya2VkIGFuZCBuZXdseUFsbG9jYXRlZAorICAgICAgICAgICBiaXRzIHdpdGgg
YSBzaW5nbGUgcGFzcyBsb29waW5nIHRocnUgdGhlIGJpdG1hcCB3b3Jkcy4KKworICAgICAgICAy
LiBJbiBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZWVwKCkncyBCaXRtYXAgZnJl
ZSBsaXN0IGNvZGUsIG1vdmVkIHRoZQorICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiBvZiBoYW5k
bGVEZWFkQ2VsbHMgbGFtYmRhIGRvd24gdG8gdGhlIGNhbGwgdG8gZnJlZUF0b21zLmZvckVhY2hT
ZXRCaXQoKQorICAgICAgICAgICBiZWNhdXNlIHRoaXMgaXMgdGhlIG9ubHkgcGxhY2UgaXQgaXMg
dXNlZC4KKworICAgICAgICAzLiBGaXhlZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXpl
ZFN3ZWVwKCkncyBCaXRtYXAgZnJlZSBsaXN0IGNvZGUgdG8KKyAgICAgICAgICAgaGFuZGxlIHRo
ZSBkZWFkIGNlbGxzIHVuY29uZGl0aW9uYWxseS4gIFRoaXMgY29uZGl0aW9uIGNoZWNrIHdhcyB3
cm9uZ2x5CisgICAgICAgICAgIGFkYXB0ZWQgZnJvbSB0aGUgbGlua2VkIGxpc3QgaW1wbGVtZW50
YXRpb24gd2hlcmUgaGFuZGxlRGVhZENlbGwoKSB3YXMgY2FsbGVkCisgICAgICAgICAgIGluIDIg
cGxhY2VzIGRlcGVuZGluZyBvbiB0aGUgZGVzdHJ1Y3Rpb24gbW9kZS4gIFdpdGggdGhlIEJpdG1h
cCBmcmVlIGxpc3QsCisgICAgICAgICAgIHRoZXJlIGlzIG9ubHkgb25jZSBwbGFjZSB0byBoYW5k
bGUgdGhlIGRlYWQgY2VsbHMsIGFuZCBpdCBzaG91bGQgYmUgZXhlY3V0ZWQKKyAgICAgICAgICAg
dW5jb25kaXRpb25hbGx5LgorCisgICAgICAgICAgIFRoaXMgZml4ZXMgYSBidWcgd2hlcmUgdGhl
IEZyZWVMaXN0OjpvcmlnaW5hbFNpemUoKSBuZXZlciBnZXRzIGNvbXB1dGVkIGlmIHRoZQorICAg
ICAgICAgICBjZWxscyBpbiB0aGUgYmxvY2sgZG9lcyBub3QgbmVlZCBkZXN0cnVjdGlvbi4KKwor
ICAgICAgICA0LiBSZW5hbWVkIEZyZWVMaXN0OjpiaXRtYXBSb3dzKCkgdG8gRnJlZUxpc3Q6OmJp
dG1hcFJvd3NNaW51c09uZSgpLgorICAgICAgICAgICBSZW5hbWVkIEZyZWVMaXN0OjpvZmZzZXRP
ZkJpdG1hcFJvd3MoKSB0byBGcmVlTGlzdDo6b2Zmc2V0T2ZCaXRtYXBSb3dzTWludXNPbmUoKS4K
KworICAgICAgICA1LiBBbGRvIGZpeGVkIHNvbWUgdHlwb3MgaW4gY29tbWVudHMuCisKKyAgICAg
ICAgKiBoZWFwL0ZyZWVMaXN0Lmg6CisgICAgICAgIChKU0M6OkZyZWVMaXN0OjpiaXRtYXBJc0Vt
cHR5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6Om9mZnNldE9mQml0bWFwUm93c01p
bnVzT25lKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OmJpdG1hcFJvd3NNaW51c09uZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0OjpvZmZzZXRPZkJpdG1hcFJvd3MpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6Yml0bWFwUm93cyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogaGVhcC9GcmVlTGlzdElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6
OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OmZvckVhY2ggY29uc3QpOgorICAg
ICAgICAqIGhlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEJs
b2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXApOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhl
bHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZVdp
dGhOb25OdWxsQWxsb2NhdG9yKToKKwogMjAyMC0wNi0xOCAgQWxleGV5IFNodmF5a2EgIDxzaHZh
aWthbGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgUHJvbWlzZSBidWlsdC1pbiBmdW5jdGlvbnMg
c2hvdWxkIGJlIGFub255bW91cyBub24tY29uc3RydWN0b3JzCkBAIC0xNDgsNyArMjAxLDcgQEAK
IAogICAgICAgICA1LiBPbiB0aGUgbGF5b3V0IG9mIGZpZWxkcyBpbiBGcmVlTGlzdCAoc2VlIGNo
YW5nZXMgaW4gRnJlZUxpc3QuaCksIHdlIHRyeSB0bwogICAgICAgICAgICBwcmVzZXJ2ZSB0aGUg
cG9zaXRpb25zIG9mIHRoZSBidW1wIGFsbG9jYXRvciBmaWVsZHMuICBUaGUgb25seSBjaGFuZ2Ug
d2UgbWFkZQotICAgICAgICAgICB0aGVyZSBpcyBuIHRoZSBsb2NhdGlvbiBvZiBtX2NlbGxTaXpl
LiAgSXQgaXMgbm93IG1vdmVkIHVwIG5leHQgdG8gbV9yZW1haW5pbmcsCisgICAgICAgICAgIHRo
ZXJlIGlzIGluIHRoZSBsb2NhdGlvbiBvZiBtX2NlbGxTaXplLiAgSXQgaXMgbm93IG1vdmVkIHVw
IG5leHQgdG8gbV9yZW1haW5pbmcsCiAgICAgICAgICAgIGFuZCBtX29yaWdpbmFsU2l6ZSBpcyBt
b3ZlZCBkb3duLiAgVGhpcyBpcyBiZWNhdXNlIG1fb3JpZ2luYWxTaXplIGlzIG9ubHkKICAgICAg
ICAgICAgYWNjZXNzZWQgaW4gdGhlIHNsb3cgcGF0aCwgYW5kIG1fY2VsbFNpemUgaXMgYWNjZXNz
ZWQgaW4gdGhlIGJ1bXAgYWxsb2NhdGlvbgogICAgICAgICAgICBwYXRoLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5oCShyZXZpc2lvbiAyNjMxOTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyAr
MTA1LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgLy8gUmVtZW1iZXIsIHdlIGRvbid0IGFj
dHVhbGx5IGNsZWFyIHRoZSBiaXRzIGluIG1fYml0bWFwIGFzIHdlIGFsbG9jYXRlCiAgICAgICAg
IC8vIHRoZSBhdG9tcy4gSW5zdGVhZCwgbV9jdXJyZW50Um93Qml0bWFwIGFuZCBtX2N1cnJlbnRS
b3dJbmRleCB0ZWxscyB1cwotICAgICAgICAvLyBpZiB0aGVyZSBhdG9tcyBzdGlsbCBhdmFpbGFi
bGUgZm9yIGFsbG9jYXRpb24uIFNlZSBjb21tZW50IGJsb2IgYmVsb3cKKyAgICAgICAgLy8gaWYg
dGhlcmUgYXJlIGF0b21zIHN0aWxsIGF2YWlsYWJsZSBmb3IgYWxsb2NhdGlvbi4gU2VlIGNvbW1l
bnQgYmxvYiBiZWxvdwogICAgICAgICAvLyBhdCB0aGUgZGVjbGFyYXRpb24gb2YgbV9jdXJyZW50
Um93SW5kZXggZm9yIG1vcmUgZGV0YWlscy4KICAgICAgICAgcmV0dXJuICFtX2N1cnJlbnRSb3dC
aXRtYXAgJiYgIW1fY3VycmVudFJvd0luZGV4OwogICAgIH0KQEAgLTExNiw3ICsxMTYsNyBAQCBw
dWJsaWM6CiAgICAgLy8gV2UncmUgZGVsaWJlcmF0ZWx5IHJldHVybmluZyB0aGUgYWRkcmVzcyBv
ZiAxIHdvcmQgYmVmb3JlIG1fYml0bWFwIHNvIHRoYXQKICAgICAvLyB3ZSBjYW4gc2NoZWR1bGUg
aW5zdHJ1Y3Rpb25zIGJldHRlciBpLmUuIHRvIGRvIGEgbG9hZCBiZWZvcmUgZGVjcmVtZW50aW5n
IHRoZQogICAgIC8vIHJvdyBpbmRleC4KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQml0
bWFwUm93cygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgbV9iaXRtYXApIC0g
c2l6ZW9mKEF0b21zQml0bWFwOjpXb3JkKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZCaXRtYXBSb3dzTWludXNPbmUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3Qs
IG1fYml0bWFwKSAtIHNpemVvZihBdG9tc0JpdG1hcDo6V29yZCk7IH0KIAogICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZDdXJyZW50Um93SW5kZXgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoRnJlZUxpc3QsIG1fY3VycmVudFJvd0luZGV4KTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZDdXJyZW50TWFya2VkQmxvY2tSb3dBZGRyZXNzKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEZyZWVMaXN0LCBtX2N1cnJlbnRNYXJrZWRCbG9ja1Jvd0FkZHJlc3MpOyB9CkBAIC0x
NDEsOSArMTQxLDkgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShCSVRNQVBfRlJFRUxJU1QpCiAg
ICAgQXRvbXNCaXRtYXAmIGF0b21zQml0bWFwKCkgeyByZXR1cm4gbV9iaXRtYXA7IH0KLSAgICBB
dG9tc0JpdG1hcDo6V29yZCogYml0bWFwUm93cygpIGNvbnN0CisgICAgQXRvbXNCaXRtYXA6Oldv
cmQqIGJpdG1hcFJvd3NNaW51c09uZSgpIGNvbnN0CiAgICAgewotICAgICAgICAvLyBTZWUgY29t
bWVudCBhYm91dCBvZmZzZXRPZkJpdG1hcFJvd3MoKS4KKyAgICAgICAgLy8gU2VlIGNvbW1lbnQg
YWJvdXQgb2Zmc2V0T2ZCaXRtYXBSb3dzTWludXNPbmUoKS4KICAgICAgICAgcmV0dXJuIGJpdHdp
c2VfY2FzdDxBdG9tc0JpdG1hcDo6V29yZCo+KCZtX2JpdG1hcCkgLSAxOwogICAgIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3RJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3RJbmxpbmVzLmgJKHJldmlz
aW9uIDI2MzE5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0SW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMCArNTYsMTAgQEAgQUxXQVlTX0lOTElORSBIZWFw
Q2VsbCogRnJlZUxpc3Q6OmFsbG9jYQogICAgICAgICB1bnNpZ25lZCByb3dJbmRleCA9IG1fY3Vy
cmVudFJvd0luZGV4OwogICAgICAgICBhdXRvKiByb3dBZGRyZXNzID0gbV9jdXJyZW50TWFya2Vk
QmxvY2tSb3dBZGRyZXNzOwogICAgICAgICB3aGlsZSAocm93SW5kZXgpIHsKLSAgICAgICAgICAg
IC8vIFdlIGxvYWQgYmVmb3JlIGRlY3JlbWVudGluZyByb3dJbmRleCBiZWNhdXNlIGJpdG1hcFJv
d3MoKSBwb2ludHMKLSAgICAgICAgICAgIC8vIHRvIDEgd29yZCBiZWZvcmUgbV9iaXRtYXAuIFNl
ZSBjb21tZW50cyBhYm91dCBvZmZzZXRPZkJpdG1hcFJvd3MoKQorICAgICAgICAgICAgLy8gV2Ug
bG9hZCBiZWZvcmUgZGVjcmVtZW50aW5nIHJvd0luZGV4IGJlY2F1c2UgYml0bWFwUm93c01pbnVz
T25lKCkgcG9pbnRzCisgICAgICAgICAgICAvLyB0byAxIHdvcmQgYmVmb3JlIG1fYml0bWFwLiBT
ZWUgY29tbWVudHMgYWJvdXQgb2Zmc2V0T2ZCaXRtYXBSb3dzTWludXNPbmUoKQogICAgICAgICAg
ICAgLy8gZm9yIHdoeSB3ZSBkbyB0aGlzLgotICAgICAgICAgICAgcm93Qml0bWFwID0gYml0bWFw
Um93cygpW3Jvd0luZGV4LS1dOworICAgICAgICAgICAgcm93Qml0bWFwID0gYml0bWFwUm93c01p
bnVzT25lKClbcm93SW5kZXgtLV07CiAgICAgICAgICAgICByb3dBZGRyZXNzIC09IGF0b21zUGVy
Um93OwogICAgICAgICAgICAgaWYgKHJvd0JpdG1hcCkKICAgICAgICAgICAgICAgICBicmVhazsK
QEAgLTEwNiwxMCArMTA2LDEwIEBAIHZvaWQgRnJlZUxpc3Q6OmZvckVhY2goY29uc3QgRnVuYyYg
ZnVuYykKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgd2hpbGUgKHJvd0luZGV4KSB7Ci0g
ICAgICAgICAgICAgICAgLy8gV2UgbG9hZCBiZWZvcmUgZGVjcmVtZW50aW5nIHJvd0luZGV4IGJl
Y2F1c2UgYml0bWFwUm93cygpIHBvaW50cwotICAgICAgICAgICAgICAgIC8vIHRvIDEgd29yZCBi
ZWZvcmUgbV9iaXRtYXAuIFNlZSBjb21tZW50cyBhYm91dCBvZmZzZXRPZkJpdG1hcFJvd3MoKQor
ICAgICAgICAgICAgICAgIC8vIFdlIGxvYWQgYmVmb3JlIGRlY3JlbWVudGluZyByb3dJbmRleCBi
ZWNhdXNlIGJpdG1hcFJvd3NNaW51c09uZSgpIHBvaW50cworICAgICAgICAgICAgICAgIC8vIHRv
IDEgd29yZCBiZWZvcmUgbV9iaXRtYXAuIFNlZSBjb21tZW50cyBhYm91dCBvZmZzZXRPZkJpdG1h
cFJvd3NNaW51c09uZSgpCiAgICAgICAgICAgICAgICAgLy8gZm9yIHdoeSB3ZSBkbyB0aGlzLgot
ICAgICAgICAgICAgICAgIHJvd0JpdG1hcCA9IGJpdG1hcFJvd3MoKVtyb3dJbmRleC0tXTsKKyAg
ICAgICAgICAgICAgICByb3dCaXRtYXAgPSBiaXRtYXBSb3dzTWludXNPbmUoKVtyb3dJbmRleC0t
XTsKICAgICAgICAgICAgICAgICBjdXJyZW50TWFya2VkQmxvY2tSb3dBZGRyZXNzIC09IGF0b21z
UGVyUm93OwogICAgICAgICAgICAgICAgIGlmIChyb3dCaXRtYXApCiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDI2MzE5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQsNDQgKzMw
NCw3NCBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlCiAgICAgfQog
CiAjaWYgRU5BQkxFKEJJVE1BUF9GUkVFTElTVCkKKyAgICAvLyBUaGUgY29kZSBiZWxvdyBpcyBh
biBvcHRpbWl6ZWQgdmVyc2lvbiBvZiB0aGUgZm9sbG93aW5nIGJ5IG1lcmdpbmcgdGhlCisgICAg
Ly8gdmFyaW91cyBsb29wcyBvdmVyIHRoZSBiaXRtYXBzLgorICAgIC8vCisgICAgLy8gICAgQXRv
bXNCaXRtYXAgY2VsbExvY2F0aW9uczsKKyAgICAvLyAgICBjZWxsTG9jYXRpb25zLnNldEVhY2hO
dGhCaXQobV9hdG9tc1BlckNlbGwsIDAsIG1fZW5kQXRvbSk7CisgICAgLy8KKyAgICAvLyAgICBp
ZiAoZW1wdHlNb2RlID09IE5vdEVtcHR5KSB7CisgICAgLy8gICAgICAgIGlmIChtYXJrc01vZGUg
PT0gTWFya3NOb3RTdGFsZSkgeworICAgIC8vICAgICAgICAgICAgZnJlZUF0b21zID0gZm9vdGVy
Lm1fbWFya3M7CisgICAgLy8gICAgICAgICAgICBpZiAobmV3bHlBbGxvY2F0ZWRNb2RlID09IEhh
c05ld2x5QWxsb2NhdGVkKQorICAgIC8vICAgICAgICAgICAgICAgIGZyZWVBdG9tcyB8PSBmb290
ZXIubV9uZXdseUFsbG9jYXRlZDsKKyAgICAvLyAgICAgICAgfSBlbHNlIGlmIChuZXdseUFsbG9j
YXRlZE1vZGUgPT0gSGFzTmV3bHlBbGxvY2F0ZWQpCisgICAgLy8gICAgICAgICAgICBmcmVlQXRv
bXMgPSBmb290ZXIubV9uZXdseUFsbG9jYXRlZDsKKyAgICAvLyAgICAgICAgLy8gQXQgdGhpcyBw
b2ludCwgYSBzZXQgYml0IGluIGZyZWVBdG9tcyByZXByZXNlbnRzIGxpdmUgY2VsbHMuCisgICAg
Ly8gICAgICAgIGlzRW1wdHkgPSBmcmVlQXRvbXMuaXNFbXB0eSgpOworICAgIC8vCisgICAgLy8g
ICAgICAgIC8vIEludmVydCB0aGUgYml0cyBhdCBlYWNoIGNlbGwgbG9jYXRpb24gc28gdGhhdCB0
aGUgb25lcyBmb3IgbGl2ZSBjZWxscworICAgIC8vICAgICAgICAvLyBhcmUgY2xlYXJlZCwgYW5k
IHRoZSBvbmVzIGZvciBkZWFkIGNlbGxzIGFyZSBzZXQuCisgICAgLy8gICAgICAgIGZyZWVBdG9t
cyBePSBjZWxsTG9jYXRpb25zOworICAgIC8vICAgIH0gZWxzZQorICAgIC8vICAgICAgICBmcmVl
QXRvbXMgPSBjZWxsTG9jYXRpb25zOyAvLyBhbGwgY2VsbHMgYXJlIGZyZWUuCisKICAgICBBdG9t
c0JpdG1hcCBsb2NhbEZyZWVBdG9tczsKICAgICBBdG9tc0JpdG1hcCYgZnJlZUF0b21zID0gZnJl
ZUxpc3QgPyBmcmVlTGlzdC0+YXRvbXNCaXRtYXAoKSA6IGxvY2FsRnJlZUF0b21zOwotICAgIHNp
emVfdCBjb3VudCA9IDA7CiAKLSAgICBhdXRvIGhhbmRsZURlYWRDZWxsID0gWyZdIChzaXplX3Qg
aSkgewotICAgICAgICBIZWFwQ2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEhlYXBD
ZWxsKj4oYXRvbUF0KGkpKTsKKyAgICBBdG9tc0JpdG1hcDo6V29yZCogZnJlZSA9IGZyZWVBdG9t
cy53b3JkcygpOworICAgIEF0b21zQml0bWFwOjpXb3JkKiBtYXJrcyA9IGZvb3Rlci5tX21hcmtz
LndvcmRzKCk7CisgICAgQXRvbXNCaXRtYXA6OldvcmQqIG5ld2x5QWxsb2NhdGVkID0gZm9vdGVy
Lm1fbmV3bHlBbGxvY2F0ZWQud29yZHMoKTsKKyAgICBBdG9tc0JpdG1hcDo6V29yZCBhbnlCaXRz
ID0gMDsKKworICAgIGNvbnN0ZXhwciBBdG9tc0JpdG1hcDo6V29yZCBvbmUgPSAxOworCisgICAg
dW5zaWduZWQgcm91bmRlZFVwRW5kQXRvbXMgPSByb3VuZFVwVG9NdWx0aXBsZU9mPEF0b21zQml0
bWFwOjpiaXRzSW5Xb3JkPihtX2VuZEF0b20pOworICAgIHVuc2lnbmVkIGVuZFdvcmRJbmRleCA9
IHJvdW5kZWRVcEVuZEF0b21zIC8gQXRvbXNCaXRtYXA6OmJpdHNJbldvcmQ7CisgICAgQVNTRVJU
KG1fZW5kQXRvbSA8PSBlbmRXb3JkSW5kZXggKiBBdG9tc0JpdG1hcDo6Yml0c0luV29yZCk7CisK
KyAgICB1bnNpZ25lZCB1bnVzZWFibGVBdG9tc0luTGFzdFJvdyA9IHJvdW5kZWRVcEVuZEF0b21z
IC0gbV9lbmRBdG9tOworCisgICAgaWYgKGZyZWVMaXN0KQorICAgICAgICBmcmVlQXRvbXMuY2xl
YXJBbGwoKTsKKyAgICBmcmVlQXRvbXMuc2V0RWFjaE50aEJpdChtX2F0b21zUGVyQ2VsbCwgMCwg
bV9lbmRBdG9tKTsKIAotICAgICAgICBpZiAoZGVzdHJ1Y3Rpb25Nb2RlICE9IEJsb2NrSGFzTm9E
ZXN0cnVjdG9ycykKLSAgICAgICAgICAgIGRlc3Ryb3koY2VsbCk7Ci0KLSAgICAgICAgaWYgKHN3
ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpIHsKLSAgICAgICAgICAgIGlmIChzY3JpYmJsZU1v
ZGUgPT0gU2NyaWJibGUpCi0gICAgICAgICAgICAgICAgc2NyaWJibGUoY2VsbCwgY2VsbFNpemUp
OwotICAgICAgICAgICAgKytjb3VudDsKKyAgICBpZiAoZW1wdHlNb2RlID09IE5vdEVtcHR5KSB7
CisgICAgICAgIGlmIChtYXJrc01vZGUgPT0gTWFya3NOb3RTdGFsZSAmJiBuZXdseUFsbG9jYXRl
ZE1vZGUgPT0gSGFzTmV3bHlBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBlbmRXb3JkSW5kZXg7ICsraSkgeworICAgICAgICAgICAgICAgIEF0b21zQml0
bWFwOjpXb3JkIHZhbHVlID0gbWFya3NbaV0gfCBuZXdseUFsbG9jYXRlZFtpXTsKKyAgICAgICAg
ICAgICAgICBhbnlCaXRzIHw9IHZhbHVlOworICAgICAgICAgICAgICAgIGZyZWVbaV0gXj0gdmFs
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAobWFya3NNb2RlID09IE1hcmtz
Tm90U3RhbGUpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbmRXb3Jk
SW5kZXg7ICsraSkgeworICAgICAgICAgICAgICAgIEF0b21zQml0bWFwOjpXb3JkIHZhbHVlID0g
bWFya3NbaV07CisgICAgICAgICAgICAgICAgYW55Qml0cyB8PSB2YWx1ZTsKKyAgICAgICAgICAg
ICAgICBmcmVlW2ldIF49IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYg
KG5ld2x5QWxsb2NhdGVkTW9kZSA9PSBIYXNOZXdseUFsbG9jYXRlZCkgeworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVuZFdvcmRJbmRleDsgKytpKSB7CisgICAgICAgICAg
ICAgICAgQXRvbXNCaXRtYXA6OldvcmQgdmFsdWUgPSBuZXdseUFsbG9jYXRlZFtpXTsKKyAgICAg
ICAgICAgICAgICBhbnlCaXRzIHw9IHZhbHVlOworICAgICAgICAgICAgICAgIGZyZWVbaV0gXj0g
dmFsdWU7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9OworICAgIH0KIAotICAgIGJv
b2wgaXNFbXB0eSA9IHRydWU7CisgICAgYm9vbCBpc0VtcHR5ID0gIWFueUJpdHM7CiAKLSAgICBB
dG9tc0JpdG1hcCBjZWxsTG9jYXRpb25zOwotICAgIGNlbGxMb2NhdGlvbnMuc2V0RWFjaE50aEJp
dChtX2F0b21zUGVyQ2VsbCwgMCwgbV9lbmRBdG9tKTsKKyAgICAvLyBBdCB0aGlzIHBvaW50LCBh
IHNldCBiaXQgaW4gZnJlZUF0b21zIHJlcHJlc2VudHMgbGl2ZSBjZWxscy4KIAotICAgIGlmIChl
bXB0eU1vZGUgPT0gTm90RW1wdHkpIHsKLSAgICAgICAgaWYgKG1hcmtzTW9kZSA9PSBNYXJrc05v
dFN0YWxlKSB7Ci0gICAgICAgICAgICBmcmVlQXRvbXMgPSBmb290ZXIubV9tYXJrczsKLSAgICAg
ICAgICAgIGlmIChuZXdseUFsbG9jYXRlZE1vZGUgPT0gSGFzTmV3bHlBbGxvY2F0ZWQpCi0gICAg
ICAgICAgICAgICAgZnJlZUF0b21zIHw9IGZvb3Rlci5tX25ld2x5QWxsb2NhdGVkOwotICAgICAg
ICB9IGVsc2UgaWYgKG5ld2x5QWxsb2NhdGVkTW9kZSA9PSBIYXNOZXdseUFsbG9jYXRlZCkKLSAg
ICAgICAgICAgIGZyZWVBdG9tcyA9IGZvb3Rlci5tX25ld2x5QWxsb2NhdGVkOwotICAgICAgICAv
LyBBdCB0aGlzIHBvaW50LCBhIHNldCBiaXQgaW4gZnJlZUF0b21zIHJlcHJlc2VudHMgbGl2ZSBj
ZWxscy4KLSAgICAgICAgaXNFbXB0eSA9IGZyZWVBdG9tcy5pc0VtcHR5KCk7Ci0KLSAgICAgICAg
Ly8gSW52ZXJ0IHRoZSBiaXRzIGF0IGVhY2ggY2VsbCBsb2NhdGlvbiBzbyB0aGF0IHRoZSBvbmVz
IGZvciBsaXZlIGNlbGxzCi0gICAgICAgIC8vIGFyZSBjbGVhcmVkLCBhbmQgdGhlIG9uZXMgZm9y
IGRlYWQgY2VsbHMgYXJlIHNldC4KLSAgICAgICAgZnJlZUF0b21zIF49IGNlbGxMb2NhdGlvbnM7
Ci0gICAgfSBlbHNlCi0gICAgICAgIGZyZWVBdG9tcyA9IGNlbGxMb2NhdGlvbnM7IC8vIGFsbCBj
ZWxscyBhcmUgZnJlZS4KLSAgICAKICAgICAvLyBXZSBvbmx5IHdhbnQgdG8gZGlzY2FyZCB0aGUg
bmV3bHlBbGxvY2F0ZWQgYml0cyBpZiB3ZSdyZSBjcmVhdGluZyBhIEZyZWVMaXN0LAogICAgIC8v
IG90aGVyd2lzZSB3ZSB3b3VsZCBsb3NlIGluZm9ybWF0aW9uIG9uIHdoYXQncyBjdXJyZW50bHkg
YWxpdmUuCiAgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QgJiYgbmV3bHlBbGxv
Y2F0ZWRNb2RlID09IEhhc05ld2x5QWxsb2NhdGVkKQpAQCAtMzUwLDggKzM4MCwyMCBAQCB2b2lk
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlCiAgICAgaWYgKHNwYWNlKCktPmlz
TWFya2luZygpKQogICAgICAgICBmb290ZXIubV9sb2NrLnVubG9jaygpOwogCi0gICAgaWYgKGRl
c3RydWN0aW9uTW9kZSAhPSBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMpCi0gICAgICAgIGZyZWVBdG9t
cy5mb3JFYWNoU2V0Qml0KGhhbmRsZURlYWRDZWxsKTsKKyAgICAvLyBIYW5kbGUgZGVhZCBjZWxs
cy4KKyAgICBzaXplX3QgY291bnQgPSAwOworICAgIGZyZWVBdG9tcy5mb3JFYWNoU2V0Qml0KFsm
XSAoc2l6ZV90IGkpIHsKKyAgICAgICAgSGVhcENlbGwqIGNlbGwgPSByZWludGVycHJldF9jYXN0
X3B0cjxIZWFwQ2VsbCo+KGF0b21BdChpKSk7CisKKyAgICAgICAgaWYgKGRlc3RydWN0aW9uTW9k
ZSAhPSBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMpCisgICAgICAgICAgICBkZXN0cm95KGNlbGwpOwor
CisgICAgICAgIGlmIChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KSB7CisgICAgICAgICAg
ICBpZiAoc2NyaWJibGVNb2RlID09IFNjcmliYmxlKQorICAgICAgICAgICAgICAgIHNjcmliYmxl
KGNlbGwsIGNlbGxTaXplKTsKKyAgICAgICAgICAgICsrY291bnQ7CisgICAgICAgIH0KKyAgICB9
KTsKIAogICAgIGlmIChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KSB7CiAgICAgICAgIGZy
ZWVMaXN0LT5pbml0aWFsaXplQXRvbXNCaXRtYXAodGhpcywgZnJlZUF0b21zLCBjb3VudCAqIGNl
bGxTaXplKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5jcHAJKHJldmlzaW9uIDI2MzE5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTkxLDEwICs1OTEsMTAgQEAg
dm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZVdpdGhObwogICAgIHsKICAgICAgICAg
Ly8gTG9hZCB0aGUgbmV4dCByb3cgYml0bWFwIGFuZCBwb2ludCBtX2N1cnJlbnRNYXJrZWRCbG9j
a1Jvd0FkZHJlc3MgdG8gdGhlIG5leHQgcm93LgogCi0gICAgICAgIC8vIE5vdGU6IG9mZnNldE9m
Qml0bWFwUm93cygpIHBvaW50cyB0byAxIHdvcmQgYmVmb3JlIG1fYml0bWFwLiBXZSBkbyB0aGlz
CisgICAgICAgIC8vIE5vdGU6IG9mZnNldE9mQml0bWFwUm93c01pbnVzT25lKCkgcG9pbnRzIHRv
IDEgd29yZCBiZWZvcmUgbV9iaXRtYXAuIFdlIGRvIHRoaXMKICAgICAgICAgLy8gZGVsaWJlcmF0
ZWx5IGJlY2F1c2UgaXQgYWxsb3dzIHVzIHRvIHNjaGVkdWxlIGluc3RydWN0aW9ucyBiZXR0ZXIg
YW5kCiAgICAgICAgIC8vIGRvIHRoaXMgbG9hZCBiZWZvcmUgdGhlIGRlY3JlbWVudCBiZWxvdy4K
LSAgICAgICAgbG9hZDY0KEJhc2VJbmRleChhbGxvY2F0b3JHUFIsIHJvd0luZGV4R1BSLCBUaW1l
c0VpZ2h0LCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9m
ZnNldE9mQml0bWFwUm93cygpKSwgcm93Qml0bWFwR1BSKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJ
bmRleChhbGxvY2F0b3JHUFIsIHJvd0luZGV4R1BSLCBUaW1lc0VpZ2h0LCBMb2NhbEFsbG9jYXRv
cjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mQml0bWFwUm93c01pbnVz
T25lKCkpLCByb3dCaXRtYXBHUFIpOwogCiAgICAgICAgIHN1YjY0KFRydXN0ZWRJbW0zMigxKSwg
cm93SW5kZXhHUFIpOwogICAgICAgICBzdWJQdHIoVHJ1c3RlZEltbTMyKEZyZWVMaXN0OjphdG9t
c1Jvd0J5dGVzKSwgcm93QWRkcmVzc0dQUik7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjYzMTk1KQorKysg
U291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0MyBAQAorMjAy
MC0wNi0xOCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgVW5pZnkg
Qml0bWFwIG1hdGggbG9vcHMgaW4gTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2Vl
cCgpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEz
MzQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgMS4g
UmVtb3ZlZCBCaXRtYXA6OndvcmRzLiAgVXNlIEJpdG1hcDo6bnVtYmVyT2ZXb3JkcyBpbnN0ZWFk
LgorICAgICAgICAyLiBSZW1vdmVkIEJpdG1hcDo6d29yZFNpemUuICBVc2UgQml0bWFwOjpiaXRz
SW5Xb3JkIGluc3RlYWQuCisgICAgICAgIDMuIEFkZGVkIGEgbmV3IEJpdG1hcDo6d29yZHMoKSBt
ZXRob2Qgd2hpY2ggcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgdW5kZXJseWluZworICAgICAg
ICAgICBiaXRtYXAgc3RvcmFnZSBhcyBhIEJpdG1hcDo6V29yZCouICBUaGlzIGVuYWJsZXMgY2xp
ZW50cyB0byBkbyBkaXJlY3QgYml0CisgICAgICAgICAgIG1hbmlwdWxhdGlvbiBvbiB0aGUgQml0
bWFwIHdvcmRzIGlmIG5lZWRlZC4KKworICAgICAgICAqIHd0Zi9CaXRtYXAuaDoKKyAgICAgICAg
KFdURjo6V29yZFR5cGU+OjpnZXQgY29uc3QpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46OnNl
dCk6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6dGVzdEFuZFNldCk6CisgICAgICAgIChXVEY6
OldvcmRUeXBlPjo6dGVzdEFuZENsZWFyKToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+Ojpjb25j
dXJyZW50VGVzdEFuZFNldCk6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6Y29uY3VycmVudFRl
c3RBbmRDbGVhcik6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6Y2xlYXIpOgorICAgICAgICAo
V1RGOjpXb3JkVHlwZT46OmludmVydCk6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6bmV4dFBv
c3NpYmx5VW5zZXQgY29uc3QpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46OmNvdW50IGNvbnN0
KToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+Ojppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6V29yZFR5cGU+Ojppc0Z1bGwgY29uc3QpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46Om1l
cmdlKToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+OjpmaWx0ZXIpOgorICAgICAgICAoV1RGOjpX
b3JkVHlwZT46OmV4Y2x1ZGUpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46OmNvbmN1cnJlbnRG
aWx0ZXIpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46OnN1YnN1bWVzIGNvbnN0KToKKyAgICAg
ICAgKFdURjo6V29yZFR5cGU+Ojpmb3JFYWNoU2V0Qml0IGNvbnN0KToKKyAgICAgICAgKFdURjo6
V29yZFR5cGU+OjpmaW5kQml0IGNvbnN0KToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+OjptZXJn
ZUFuZENsZWFyKToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+OjpzZXRBbmRDbGVhcik6CisgICAg
ICAgIChXVEY6OldvcmRUeXBlPjo6c2V0RWFjaE50aEJpdCk6CisgICAgICAgIChXVEY6Oj0gY29u
c3QpOgorICAgICAgICAoV1RGOjo9KToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+OjpoYXNoIGNv
bnN0KToKKwogMjAyMC0wNi0xNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmVwbGFjZSBKU0M6OkZyZWVMaXN0IGxpbmtlZCBsaXN0IHdpdGggYSBCaXRtYXAuCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9CaXRtYXAuaAkocmV2aXNpb24gMjYzMTk1KQorKysgU291cmNlL1dURi93dGYvQml0bWFwLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEzNSwxMSArMTM1LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgYml0c0luV29yZCA9IGNvdW50T2ZCaXRzPFdvcmRUeXBlPjsKICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mV29yZHMgPSAoYml0bWFwU2l6ZSAr
IGJpdHNJbldvcmQgLSAxKSAvIGJpdHNJbldvcmQ7CiAgICAgV29yZFR5cGUgd29yZEF0KHNpemVf
dCB3b3JkSW5kZXgpIGNvbnN0IHsgcmV0dXJuIGJpdHNbd29yZEluZGV4XTsgfQorICAgIFdvcmQq
IHdvcmRzKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFdvcmQqPigmYml0cyk7IH0KIAogcHJpdmF0
ZToKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHdvcmRTaXplID0gYml0c0luV29yZDsK
LSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHdvcmRzID0gbnVtYmVyT2ZXb3JkczsKLQog
ICAgIC8vIHRoZSBsaXRlcmFsICcxJyBpcyBvZiB0eXBlIHNpZ25lZCBpbnQuICBXZSB3YW50IHRv
IHVzZSBhbiB1bnNpZ25lZAogICAgIC8vIHZlcnNpb24gb2YgdGhlIGNvcnJlY3Qgc2l6ZSB3aGVu
IGRvaW5nIHRoZSBjYWxjdWxhdGlvbnMgYmVjYXVzZSBpZgogICAgIC8vIFdvcmRUeXBlIGlzIGxh
cmdlciB0aGFuIGludCwgJzEgPDwgMzEnIHdpbGwgZmlyc3QgYmUgc2lnbiBleHRlbmRlZApAQCAt
MTQ3LDcgKzE0NSw3IEBAIHByaXZhdGU6CiAgICAgLy8gYSA2NCBiaXQgdW5zaWduZWQgaW50IHdv
dWxkIGdpdmUgMHhmZmZmODAwMAogICAgIHN0YXRpYyBjb25zdGV4cHIgV29yZFR5cGUgb25lID0g
MTsKIAotICAgIHN0ZDo6YXJyYXk8V29yZFR5cGUsIHdvcmRzPiBiaXRzOworICAgIHN0ZDo6YXJy
YXk8V29yZFR5cGUsIG51bWJlck9mV29yZHM+IGJpdHM7CiB9OwogCiB0ZW1wbGF0ZTxzaXplX3Qg
Yml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CkBAIC0xNTksMTMgKzE1NywxMyBAQCBjb25z
dGV4cHIgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6CiB0ZW1wbGF0ZTxzaXplX3QgYml0
bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CiBpbmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6
ZSwgV29yZFR5cGU+OjpnZXQoc2l6ZV90IG4sIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkgY29uc3QK
IHsKLSAgICByZXR1cm4gISEoZGVwZW5kZW5jeS5jb25zdW1lKHRoaXMpLT5iaXRzW24gLyB3b3Jk
U2l6ZV0gJiAob25lIDw8IChuICUgd29yZFNpemUpKSk7CisgICAgcmV0dXJuICEhKGRlcGVuZGVu
Y3kuY29uc3VtZSh0aGlzKS0+Yml0c1tuIC8gYml0c0luV29yZF0gJiAob25lIDw8IChuICUgYml0
c0luV29yZCkpKTsKIH0KIAogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdv
cmRUeXBlPgogaW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6c2V0KHNp
emVfdCBuKQogewotICAgIGJpdHNbbiAvIHdvcmRTaXplXSB8PSAob25lIDw8IChuICUgd29yZFNp
emUpKTsKKyAgICBiaXRzW24gLyBiaXRzSW5Xb3JkXSB8PSAob25lIDw8IChuICUgYml0c0luV29y
ZCkpOwogfQogCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+
CkBAIC0xODAsOCArMTc4LDggQEAgaW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRU
eXBlPgogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgogaW5s
aW5lIGJvb2wgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6dGVzdEFuZFNldChzaXplX3Qg
bikKIHsKLSAgICBXb3JkVHlwZSBtYXNrID0gb25lIDw8IChuICUgd29yZFNpemUpOwotICAgIHNp
emVfdCBpbmRleCA9IG4gLyB3b3JkU2l6ZTsKKyAgICBXb3JkVHlwZSBtYXNrID0gb25lIDw8IChu
ICUgYml0c0luV29yZCk7CisgICAgc2l6ZV90IGluZGV4ID0gbiAvIGJpdHNJbldvcmQ7CiAgICAg
Ym9vbCByZXN1bHQgPSBiaXRzW2luZGV4XSAmIG1hc2s7CiAgICAgYml0c1tpbmRleF0gfD0gbWFz
azsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTkwLDggKzE4OCw4IEBAIGlubGluZSBib29sIEJp
dG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT4KIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0
eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlw
ZT46OnRlc3RBbmRDbGVhcihzaXplX3QgbikKIHsKLSAgICBXb3JkVHlwZSBtYXNrID0gb25lIDw8
IChuICUgd29yZFNpemUpOwotICAgIHNpemVfdCBpbmRleCA9IG4gLyB3b3JkU2l6ZTsKKyAgICBX
b3JkVHlwZSBtYXNrID0gb25lIDw8IChuICUgYml0c0luV29yZCk7CisgICAgc2l6ZV90IGluZGV4
ID0gbiAvIGJpdHNJbldvcmQ7CiAgICAgYm9vbCByZXN1bHQgPSBiaXRzW2luZGV4XSAmIG1hc2s7
CiAgICAgYml0c1tpbmRleF0gJj0gfm1hc2s7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTIwMCw4
ICsxOTgsOCBAQCBpbmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+CiB0ZW1w
bGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CiBBTFdBWVNfSU5MSU5F
IGJvb2wgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6Y29uY3VycmVudFRlc3RBbmRTZXQo
c2l6ZV90IG4sIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkKIHsKLSAgICBXb3JkVHlwZSBtYXNrID0g
b25lIDw8IChuICUgd29yZFNpemUpOwotICAgIHNpemVfdCBpbmRleCA9IG4gLyB3b3JkU2l6ZTsK
KyAgICBXb3JkVHlwZSBtYXNrID0gb25lIDw8IChuICUgYml0c0luV29yZCk7CisgICAgc2l6ZV90
IGluZGV4ID0gbiAvIGJpdHNJbldvcmQ7CiAgICAgV29yZFR5cGUqIGRhdGEgPSBkZXBlbmRlbmN5
LmNvbnN1bWUoYml0cy5kYXRhKCkpICsgaW5kZXg7CiAgICAgcmV0dXJuICFiaXR3aXNlX2Nhc3Q8
QXRvbWljPFdvcmRUeXBlPio+KGRhdGEpLT50cmFuc2FjdGlvblJlbGF4ZWQoCiAgICAgICAgIFsm
XSAoV29yZFR5cGUmIHZhbHVlKSAtPiBib29sIHsKQEAgLTIxNiw4ICsyMTQsOCBAQCBBTFdBWVNf
SU5MSU5FIGJvb2wgQml0bWFwPGJpdG1hcFNpemUsIFdvCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFw
U2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CiBBTFdBWVNfSU5MSU5FIGJvb2wgQml0bWFwPGJpdG1h
cFNpemUsIFdvcmRUeXBlPjo6Y29uY3VycmVudFRlc3RBbmRDbGVhcihzaXplX3QgbiwgRGVwZW5k
ZW5jeSBkZXBlbmRlbmN5KQogewotICAgIFdvcmRUeXBlIG1hc2sgPSBvbmUgPDwgKG4gJSB3b3Jk
U2l6ZSk7Ci0gICAgc2l6ZV90IGluZGV4ID0gbiAvIHdvcmRTaXplOworICAgIFdvcmRUeXBlIG1h
c2sgPSBvbmUgPDwgKG4gJSBiaXRzSW5Xb3JkKTsKKyAgICBzaXplX3QgaW5kZXggPSBuIC8gYml0
c0luV29yZDsKICAgICBXb3JkVHlwZSogZGF0YSA9IGRlcGVuZGVuY3kuY29uc3VtZShiaXRzLmRh
dGEoKSkgKyBpbmRleDsKICAgICByZXR1cm4gIWJpdHdpc2VfY2FzdDxBdG9taWM8V29yZFR5cGU+
Kj4oZGF0YSktPnRyYW5zYWN0aW9uUmVsYXhlZCgKICAgICAgICAgWyZdIChXb3JkVHlwZSYgdmFs
dWUpIC0+IGJvb2wgewpAQCAtMjMyLDcgKzIzMCw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBCaXRt
YXA8Yml0bWFwU2l6ZSwgV28KIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBX
b3JkVHlwZT4KIGlubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmNsZWFy
KHNpemVfdCBuKQogewotICAgIGJpdHNbbiAvIHdvcmRTaXplXSAmPSB+KG9uZSA8PCAobiAlIHdv
cmRTaXplKSk7CisgICAgYml0c1tuIC8gYml0c0luV29yZF0gJj0gfihvbmUgPDwgKG4gJSBiaXRz
SW5Xb3JkKSk7CiB9CiAKIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3Jk
VHlwZT4KQEAgLTI0NCwyMCArMjQyLDIwIEBAIGlubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXpl
LCBXb3JkVHlwZT4KIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlw
ZT4KIGlubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmludmVydCgpCiB7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JkczsgKytpKQorICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtYmVyT2ZXb3JkczsgKytpKQogICAgICAgICBiaXRzW2ldID0gfmJpdHNb
aV07Ci0gICAgaWYgY29uc3RleHByICghIShiaXRtYXBTaXplICUgd29yZFNpemUpKSB7Ci0gICAg
ICAgIGNvbnN0ZXhwciBzaXplX3QgcmVtYWluaW5nQml0cyA9IGJpdG1hcFNpemUgJSB3b3JkU2l6
ZTsKKyAgICBpZiBjb25zdGV4cHIgKCEhKGJpdG1hcFNpemUgJSBiaXRzSW5Xb3JkKSkgeworICAg
ICAgICBjb25zdGV4cHIgc2l6ZV90IHJlbWFpbmluZ0JpdHMgPSBiaXRtYXBTaXplICUgYml0c0lu
V29yZDsKICAgICAgICAgY29uc3RleHByIFdvcmRUeXBlIG1hc2sgPSAoc3RhdGljX2Nhc3Q8V29y
ZFR5cGU+KDEpIDw8IHJlbWFpbmluZ0JpdHMpIC0gMTsKLSAgICAgICAgYml0c1t3b3JkcyAtIDFd
ICY9IG1hc2s7CisgICAgICAgIGJpdHNbbnVtYmVyT2ZXb3JkcyAtIDFdICY9IG1hc2s7CiAgICAg
fQogfQogCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CiBp
bmxpbmUgc2l6ZV90IEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om5leHRQb3NzaWJseVVu
c2V0KHNpemVfdCBzdGFydCkgY29uc3QKIHsKLSAgICBpZiAoIX5iaXRzW3N0YXJ0IC8gd29yZFNp
emVdKQotICAgICAgICByZXR1cm4gKChzdGFydCAvIHdvcmRTaXplKSArIDEpICogd29yZFNpemU7
CisgICAgaWYgKCF+Yml0c1tzdGFydCAvIGJpdHNJbldvcmRdKQorICAgICAgICByZXR1cm4gKChz
dGFydCAvIGJpdHNJbldvcmQpICsgMSkgKiBiaXRzSW5Xb3JkOwogICAgIHJldHVybiBzdGFydCAr
IDE7CiB9CiAKQEAgLTI4OCwxMSArMjg2LDExIEBAIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXpl
LCB0eXBlbmFtZSBXb3IKIGlubGluZSBzaXplX3QgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBl
Pjo6Y291bnQoc2l6ZV90IHN0YXJ0KSBjb25zdAogewogICAgIHNpemVfdCByZXN1bHQgPSAwOwot
ICAgIGZvciAoIDsgKHN0YXJ0ICUgd29yZFNpemUpOyArK3N0YXJ0KSB7CisgICAgZm9yICggOyAo
c3RhcnQgJSBiaXRzSW5Xb3JkKTsgKytzdGFydCkgewogICAgICAgICBpZiAoZ2V0KHN0YXJ0KSkK
ICAgICAgICAgICAgICsrcmVzdWx0OwogICAgIH0KLSAgICBmb3IgKHNpemVfdCBpID0gc3RhcnQg
LyB3b3JkU2l6ZTsgaSA8IHdvcmRzOyArK2kpCisgICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0IC8g
Yml0c0luV29yZDsgaSA8IG51bWJlck9mV29yZHM7ICsraSkKICAgICAgICAgcmVzdWx0ICs9IFdU
Rjo6Yml0Q291bnQoYml0c1tpXSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTMwMCwyMCAr
Mjk4LDIxIEBAIGlubGluZSBzaXplX3QgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXAKIHRlbXBs
YXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSBib29sIEJp
dG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmlzRW1wdHkoKSBjb25zdAogewotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgd29yZHM7ICsraSkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG51bWJlck9mV29yZHM7ICsraSkgewogICAgICAgICBpZiAoYml0c1tpXSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHRlbXBsYXRlPHNp
emVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSBib29sIEJpdG1hcDxi
aXRtYXBTaXplLCBXb3JkVHlwZT46OmlzRnVsbCgpIGNvbnN0CiB7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB3b3JkczsgKytpKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVy
T2ZXb3JkczsgKytpKSB7CiAgICAgICAgIGlmICh+Yml0c1tpXSkgewotICAgICAgICAgICAgaWYg
Y29uc3RleHByICghIShiaXRtYXBTaXplICUgd29yZFNpemUpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGkgPT0gd29yZHMgLSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBzaXpl
X3QgcmVtYWluaW5nQml0cyA9IGJpdG1hcFNpemUgJSB3b3JkU2l6ZTsKKyAgICAgICAgICAgIGlm
IGNvbnN0ZXhwciAoISEoYml0bWFwU2l6ZSAlIGJpdHNJbldvcmQpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGkgPT0gbnVtYmVyT2ZXb3JkcyAtIDEpIHsKKyAgICAgICAgICAgICAgICAgICAgY29u
c3RleHByIHNpemVfdCByZW1haW5pbmdCaXRzID0gYml0bWFwU2l6ZSAlIGJpdHNJbldvcmQ7CiAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBXb3JkVHlwZSBtYXNrID0gKHN0YXRpY19jYXN0
PFdvcmRUeXBlPigxKSA8PCByZW1haW5pbmdCaXRzKSAtIDE7CiAgICAgICAgICAgICAgICAgICAg
IGlmICgoYml0c1tpXSAmIG1hc2spID09IG1hc2spCiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTMyMSwzNCArMzIwLDM1IEBAIGlubGluZSBib29sIEJpdG1hcDxiaXRt
YXBTaXplLCBXb3JkVHlwZT4KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQorICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdGVtcGxhdGU8c2l6
ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgogaW5saW5lIHZvaWQgQml0bWFwPGJp
dG1hcFNpemUsIFdvcmRUeXBlPjo6bWVyZ2UoY29uc3QgQml0bWFwJiBvdGhlcikKIHsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmRzOyArK2kpCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBudW1iZXJPZldvcmRzOyArK2kpCiAgICAgICAgIGJpdHNbaV0gfD0gb3RoZXIuYml0c1tp
XTsKIH0KIAogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgog
aW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6ZmlsdGVyKGNvbnN0IEJp
dG1hcCYgb3RoZXIpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JkczsgKytpKQor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZXb3JkczsgKytpKQogICAgICAgICBi
aXRzW2ldICY9IG90aGVyLmJpdHNbaV07CiB9CiAKIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXpl
LCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3Jk
VHlwZT46OmV4Y2x1ZGUoY29uc3QgQml0bWFwJiBvdGhlcikKIHsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHdvcmRzOyArK2kpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJP
ZldvcmRzOyArK2kpCiAgICAgICAgIGJpdHNbaV0gJj0gfm90aGVyLmJpdHNbaV07CiB9CiAKIHRl
bXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSB2b2lk
IEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmNvbmN1cnJlbnRGaWx0ZXIoY29uc3QgQml0
bWFwJiBvdGhlcikKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmRzOyArK2kpIHsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mV29yZHM7ICsraSkgewogICAgICAg
ICBmb3IgKDs7KSB7CiAgICAgICAgICAgICBXb3JkVHlwZSBvdGhlckJpdHMgPSBvdGhlci5iaXRz
W2ldOwogICAgICAgICAgICAgaWYgKCFvdGhlckJpdHMpIHsKQEAgLTM2OCw3ICszNjgsNyBAQCBp
bmxpbmUgdm9pZCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+CiB0ZW1wbGF0ZTxzaXplX3Qg
Yml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CiBpbmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFw
U2l6ZSwgV29yZFR5cGU+OjpzdWJzdW1lcyhjb25zdCBCaXRtYXAmIG90aGVyKSBjb25zdAogewot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29yZHM7ICsraSkgeworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtYmVyT2ZXb3JkczsgKytpKSB7CiAgICAgICAgIFdvcmRUeXBlIG15Qml0
cyA9IGJpdHNbaV07CiAgICAgICAgIFdvcmRUeXBlIG90aGVyQml0cyA9IG90aGVyLmJpdHNbaV07
CiAgICAgICAgIGlmICgobXlCaXRzIHwgb3RoZXJCaXRzKSAhPSBteUJpdHMpCkBAIC0zODEsMTYg
KzM4MSwxNiBAQCB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jPgogaW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRU
eXBlPjo6Zm9yRWFjaFNldEJpdChjb25zdCBGdW5jJiBmdW5jKSBjb25zdAogewotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgd29yZHM7ICsraSkgeworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbnVtYmVyT2ZXb3JkczsgKytpKSB7CiAgICAgICAgIFdvcmRUeXBlIHdvcmQgPSBiaXRzW2ld
OwotICAgICAgICBzaXplX3QgYmFzZSA9IGkgKiB3b3JkU2l6ZTsKKyAgICAgICAgc2l6ZV90IGJh
c2UgPSBpICogYml0c0luV29yZDsKICAgICAgICAgc2l6ZV90IGogPSAwOwogICAgICAgICBmb3Ig
KDsgd29yZDsgKytqKSB7CiAgICAgICAgICAgICBpZiAod29yZCAmIDEpCiAgICAgICAgICAgICAg
ICAgZnVuYyhiYXNlICsgaik7CiAgICAgICAgICAgICB3b3JkID4+PSAxOwogICAgICAgICB9Ci0g
ICAgICAgIEFTU0VSVChqIDw9IHdvcmRTaXplKTsKKyAgICAgICAgQVNTRVJUKGogPD0gYml0c0lu
V29yZCk7CiAgICAgfQogfQogCkBAIC0zOTgsMTUgKzM5OCwxNSBAQCB0ZW1wbGF0ZTxzaXplX3Qg
Yml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yCiBpbmxpbmUgc2l6ZV90IEJpdG1hcDxiaXRtYXBTaXpl
LCBXb3JkVHlwZT46OmZpbmRCaXQoc2l6ZV90IHN0YXJ0SW5kZXgsIGJvb2wgdmFsdWUpIGNvbnN0
CiB7CiAgICAgV29yZFR5cGUgc2tpcFZhbHVlID0gLShzdGF0aWNfY2FzdDxXb3JkVHlwZT4odmFs
dWUpIF4gMSk7Ci0gICAgc2l6ZV90IHdvcmRJbmRleCA9IHN0YXJ0SW5kZXggLyB3b3JkU2l6ZTsK
LSAgICBzaXplX3Qgc3RhcnRJbmRleEluV29yZCA9IHN0YXJ0SW5kZXggLSB3b3JkSW5kZXggKiB3
b3JkU2l6ZTsKKyAgICBzaXplX3Qgd29yZEluZGV4ID0gc3RhcnRJbmRleCAvIGJpdHNJbldvcmQ7
CisgICAgc2l6ZV90IHN0YXJ0SW5kZXhJbldvcmQgPSBzdGFydEluZGV4IC0gd29yZEluZGV4ICog
Yml0c0luV29yZDsKICAgICAKLSAgICB3aGlsZSAod29yZEluZGV4IDwgd29yZHMpIHsKKyAgICB3
aGlsZSAod29yZEluZGV4IDwgbnVtYmVyT2ZXb3JkcykgewogICAgICAgICBXb3JkVHlwZSB3b3Jk
ID0gYml0c1t3b3JkSW5kZXhdOwogICAgICAgICBpZiAod29yZCAhPSBza2lwVmFsdWUpIHsKICAg
ICAgICAgICAgIHNpemVfdCBpbmRleCA9IHN0YXJ0SW5kZXhJbldvcmQ7Ci0gICAgICAgICAgICBp
ZiAoZmluZEJpdEluV29yZCh3b3JkLCBpbmRleCwgd29yZFNpemUsIHZhbHVlKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gd29yZEluZGV4ICogd29yZFNpemUgKyBpbmRleDsKKyAgICAgICAgICAg
IGlmIChmaW5kQml0SW5Xb3JkKHdvcmQsIGluZGV4LCBiaXRzSW5Xb3JkLCB2YWx1ZSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHdvcmRJbmRleCAqIGJpdHNJbldvcmQgKyBpbmRleDsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgd29yZEluZGV4Kys7CkBAIC00MTksNyArNDE5LDcgQEAg
aW5saW5lIHNpemVfdCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cAogdGVtcGxhdGU8c2l6ZV90
IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgogaW5saW5lIHZvaWQgQml0bWFwPGJpdG1h
cFNpemUsIFdvcmRUeXBlPjo6bWVyZ2VBbmRDbGVhcihCaXRtYXAmIG90aGVyKQogewotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgd29yZHM7ICsraSkgeworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtYmVyT2ZXb3JkczsgKytpKSB7CiAgICAgICAgIGJpdHNbaV0gfD0gb3RoZXIuYml0
c1tpXTsKICAgICAgICAgb3RoZXIuYml0c1tpXSA9IDA7CiAgICAgfQpAQCAtNDI4LDcgKzQyOCw3
IEBAIGlubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT4KIHRlbXBsYXRlPHNp
emVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSB2b2lkIEJpdG1hcDxi
aXRtYXBTaXplLCBXb3JkVHlwZT46OnNldEFuZENsZWFyKEJpdG1hcCYgb3RoZXIpCiB7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JkczsgKytpKSB7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBudW1iZXJPZldvcmRzOyArK2kpIHsKICAgICAgICAgYml0c1tpXSA9IG90aGVyLmJp
dHNbaV07CiAgICAgICAgIG90aGVyLmJpdHNbaV0gPSAwOwogICAgIH0KQEAgLTQ0MCwzNSArNDQw
LDM1IEBAIGlubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT4KICAgICBBU1NF
UlQoc3RhcnQgPD0gZW5kKTsKICAgICBBU1NFUlQoZW5kIDw9IGJpdG1hcFNpemUpOwogCi0gICAg
c2l6ZV90IHdvcmRJbmRleCA9IHN0YXJ0IC8gd29yZFNpemU7Ci0gICAgc2l6ZV90IGVuZFdvcmRJ
bmRleCA9IGVuZCAvIHdvcmRTaXplOwotICAgIHNpemVfdCBpbmRleCA9IHN0YXJ0IC0gd29yZElu
ZGV4ICogd29yZFNpemU7CisgICAgc2l6ZV90IHdvcmRJbmRleCA9IHN0YXJ0IC8gYml0c0luV29y
ZDsKKyAgICBzaXplX3QgZW5kV29yZEluZGV4ID0gZW5kIC8gYml0c0luV29yZDsKKyAgICBzaXpl
X3QgaW5kZXggPSBzdGFydCAtIHdvcmRJbmRleCAqIGJpdHNJbldvcmQ7CiAgICAgd2hpbGUgKHdv
cmRJbmRleCA8IGVuZFdvcmRJbmRleCkgewotICAgICAgICB3aGlsZSAoaW5kZXggPCB3b3JkU2l6
ZSkgeworICAgICAgICB3aGlsZSAoaW5kZXggPCBiaXRzSW5Xb3JkKSB7CiAgICAgICAgICAgICBi
aXRzW3dvcmRJbmRleF0gfD0gKG9uZSA8PCBpbmRleCk7CiAgICAgICAgICAgICBpbmRleCArPSBu
OwogICAgICAgICB9Ci0gICAgICAgIGluZGV4IC09IHdvcmRTaXplOworICAgICAgICBpbmRleCAt
PSBiaXRzSW5Xb3JkOwogICAgICAgICB3b3JkSW5kZXgrKzsKICAgICB9CiAKLSAgICBzaXplX3Qg
ZW5kSW5kZXggPSBlbmQgLSBlbmRXb3JkSW5kZXggKiB3b3JkU2l6ZTsKKyAgICBzaXplX3QgZW5k
SW5kZXggPSBlbmQgLSBlbmRXb3JkSW5kZXggKiBiaXRzSW5Xb3JkOwogICAgIHdoaWxlIChpbmRl
eCA8IGVuZEluZGV4KSB7CiAgICAgICAgIGJpdHNbd29yZEluZGV4XSB8PSAob25lIDw8IGluZGV4
KTsKICAgICAgICAgaW5kZXggKz0gbjsKICAgICB9CiAKLSAgICBpZiBjb25zdGV4cHIgKCEhKGJp
dG1hcFNpemUgJSB3b3JkU2l6ZSkpIHsKLSAgICAgICAgY29uc3RleHByIHNpemVfdCByZW1haW5p
bmdCaXRzID0gYml0bWFwU2l6ZSAlIHdvcmRTaXplOworICAgIGlmIGNvbnN0ZXhwciAoISEoYml0
bWFwU2l6ZSAlIGJpdHNJbldvcmQpKSB7CisgICAgICAgIGNvbnN0ZXhwciBzaXplX3QgcmVtYWlu
aW5nQml0cyA9IGJpdG1hcFNpemUgJSBiaXRzSW5Xb3JkOwogICAgICAgICBjb25zdGV4cHIgV29y
ZFR5cGUgbWFzayA9IChzdGF0aWNfY2FzdDxXb3JkVHlwZT4oMSkgPDwgcmVtYWluaW5nQml0cykg
LSAxOwotICAgICAgICBiaXRzW3dvcmRzIC0gMV0gJj0gbWFzazsKKyAgICAgICAgYml0c1tudW1i
ZXJPZldvcmRzIC0gMV0gJj0gbWFzazsKICAgICB9CiB9CiAKIHRlbXBsYXRlPHNpemVfdCBiaXRt
YXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSBib29sIEJpdG1hcDxiaXRtYXBTaXpl
LCBXb3JkVHlwZT46Om9wZXJhdG9yPT0oY29uc3QgQml0bWFwJiBvdGhlcikgY29uc3QKIHsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmRzOyArK2kpIHsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG51bWJlck9mV29yZHM7ICsraSkgewogICAgICAgICBpZiAoYml0c1tpXSAhPSBv
dGhlci5iaXRzW2ldKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTQ4NCwy
MSArNDg0LDIxIEBAIGlubGluZSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT4KIHRl
bXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSB2b2lk
IEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om9wZXJhdG9yfD0oY29uc3QgQml0bWFwJiBv
dGhlcikKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmRzOyArK2kpCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZldvcmRzOyArK2kpCiAgICAgICAgIGJpdHNbaV0g
fD0gb3RoZXIuYml0c1tpXTsKIH0KIAogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVu
YW1lIFdvcmRUeXBlPgogaW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6
b3BlcmF0b3ImPShjb25zdCBCaXRtYXAmIG90aGVyKQogewotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgd29yZHM7ICsraSkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mV29y
ZHM7ICsraSkKICAgICAgICAgYml0c1tpXSAmPSBvdGhlci5iaXRzW2ldOwogfQogCiB0ZW1wbGF0
ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CiBpbmxpbmUgdm9pZCBCaXRt
YXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpvcGVyYXRvcl49KGNvbnN0IEJpdG1hcCYgb3RoZXIp
CiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JkczsgKytpKQorICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZXb3JkczsgKytpKQogICAgICAgICBiaXRzW2ldIF49IG90
aGVyLmJpdHNbaV07CiB9CiAKQEAgLTUwNiw3ICs1MDYsNyBAQCB0ZW1wbGF0ZTxzaXplX3QgYml0
bWFwU2l6ZSwgdHlwZW5hbWUgV29yCiBpbmxpbmUgdW5zaWduZWQgQml0bWFwPGJpdG1hcFNpemUs
IFdvcmRUeXBlPjo6aGFzaCgpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmRzOyArK2kpCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBudW1iZXJPZldvcmRzOyArK2kpCiAgICAgICAgIHJlc3VsdCBePSBJbnRIYXNoPFdv
cmRUeXBlPjo6aGFzaChiaXRzW2ldKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402225</attachid>
            <date>2020-06-18 12:19:08 -0700</date>
            <delta_ts>2020-06-18 19:14:17 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-213345.patch</filename>
            <type>text/plain</type>
            <size>28772</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjYzMjIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBA
CisyMDIwLTA2LTE4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBV
bmlmeSBCaXRtYXAgbWF0aCBsb29wcyBpbiBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXpl
ZFN3ZWVwKCkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTMzNDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIGNoYW5nZSBhcHBlYXJzIHRvIGJlIHBlcmZvcm1hbmNlIG5ldXRyYWwuICBIb3dldmVy
LCB3ZSdsbCB0YWtlIHRoZSBjaGFuZ2UKKyAgICAgICAgYmVjYXVzZSB3ZSBrbm93IHRoYXQgaXQg
ZG9lcyBsZXNzIHdvcmssIGFuZCB0aGUgbmV3IHdheSBvZiBleHByZXNzaW5nIHRoZSBCaXRtYXAK
KyAgICAgICAgbWF0aCBpbiBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZWVwKCkg
ZG9lcyBhcHBlYXIgdG8gYmUgZWFzaWVyIHRvCisgICAgICAgIHVuZGVyc3RhbmQgdGhhbiB0aGVu
IG9sZCBjb2RlLgorCisgICAgICAgIEFsc28gYWRkcmVzc2VkIGZlZWRiYWNrIGZyb20gUm9iaW4g
YW5kIFNhYW0gaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzA3
MS4KKworICAgICAgICBDaGFuZ2VzIG1hZGU6CisKKyAgICAgICAgMS4gVXNlIHRoZSBuZXcgQml0
bWFwOjp3b3JkcygpIEFQSSB0byBnZXQgZGlyZWN0IGFjY2VzcyB0byB0aGUgdW5kZXJseWluZyBi
aXRzCisgICAgICAgICAgIHN0b3JhZ2UuICBXaXRoIHRoaXMsIHdlIGNhbiBkbyB0aGUgbWVyZ2lu
ZyBvZiB0aGUgbWFya2VkIGFuZCBuZXdseUFsbG9jYXRlZAorICAgICAgICAgICBiaXRzIHdpdGgg
YSBzaW5nbGUgcGFzcyBsb29waW5nIHRocnUgdGhlIGJpdG1hcCB3b3Jkcy4KKworICAgICAgICAy
LiBJbiBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZWVwKCkncyBCaXRtYXAgZnJl
ZSBsaXN0IGNvZGUsIG1vdmVkIHRoZQorICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiBvZiBoYW5k
bGVEZWFkQ2VsbHMgbGFtYmRhIGRvd24gdG8gdGhlIGNhbGwgdG8gZnJlZUF0b21zLmZvckVhY2hT
ZXRCaXQoKQorICAgICAgICAgICBiZWNhdXNlIHRoaXMgaXMgdGhlIG9ubHkgcGxhY2UgaXQgaXMg
dXNlZC4KKworICAgICAgICAzLiBGaXhlZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXpl
ZFN3ZWVwKCkncyBCaXRtYXAgZnJlZSBsaXN0IGNvZGUgdG8KKyAgICAgICAgICAgaGFuZGxlIHRo
ZSBkZWFkIGNlbGxzIHVuY29uZGl0aW9uYWxseS4gIFRoaXMgY29uZGl0aW9uIGNoZWNrIHdhcyB3
cm9uZ2x5CisgICAgICAgICAgIGFkYXB0ZWQgZnJvbSB0aGUgbGlua2VkIGxpc3QgaW1wbGVtZW50
YXRpb24gd2hlcmUgaGFuZGxlRGVhZENlbGwoKSB3YXMgY2FsbGVkCisgICAgICAgICAgIGluIDIg
cGxhY2VzIGRlcGVuZGluZyBvbiB0aGUgZGVzdHJ1Y3Rpb24gbW9kZS4gIFdpdGggdGhlIEJpdG1h
cCBmcmVlIGxpc3QsCisgICAgICAgICAgIHRoZXJlIGlzIG9ubHkgb25jZSBwbGFjZSB0byBoYW5k
bGUgdGhlIGRlYWQgY2VsbHMsIGFuZCBpdCBzaG91bGQgYmUgZXhlY3V0ZWQKKyAgICAgICAgICAg
dW5jb25kaXRpb25hbGx5LgorCisgICAgICAgICAgIFRoaXMgZml4ZXMgYSBidWcgd2hlcmUgdGhl
IEZyZWVMaXN0OjpvcmlnaW5hbFNpemUoKSBuZXZlciBnZXRzIGNvbXB1dGVkIGlmIHRoZQorICAg
ICAgICAgICBjZWxscyBpbiB0aGUgYmxvY2sgZG9lcyBub3QgbmVlZCBkZXN0cnVjdGlvbi4KKwor
ICAgICAgICA0LiBSZW5hbWVkIEZyZWVMaXN0OjpiaXRtYXBSb3dzKCkgdG8gRnJlZUxpc3Q6OmJp
dG1hcFJvd3NNaW51c09uZSgpLgorICAgICAgICAgICBSZW5hbWVkIEZyZWVMaXN0OjpvZmZzZXRP
ZkJpdG1hcFJvd3MoKSB0byBGcmVlTGlzdDo6b2Zmc2V0T2ZCaXRtYXBSb3dzTWludXNPbmUoKS4K
KworICAgICAgICA1LiBBbGRvIGZpeGVkIHNvbWUgdHlwb3MgaW4gY29tbWVudHMuCisKKyAgICAg
ICAgKiBoZWFwL0ZyZWVMaXN0Lmg6CisgICAgICAgIChKU0M6OkZyZWVMaXN0OjpiaXRtYXBJc0Vt
cHR5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6Om9mZnNldE9mQml0bWFwUm93c01p
bnVzT25lKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OmJpdG1hcFJvd3NNaW51c09uZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0OjpvZmZzZXRPZkJpdG1hcFJvd3MpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6Yml0bWFwUm93cyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogaGVhcC9GcmVlTGlzdElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6
OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OmZvckVhY2ggY29uc3QpOgorICAg
ICAgICAqIGhlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEJs
b2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXApOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhl
bHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZVdp
dGhOb25OdWxsQWxsb2NhdG9yKToKKwogMjAyMC0wNi0xOCAgQWxleGV5IFNodmF5a2EgIDxzaHZh
aWthbGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgUHJvbWlzZSBidWlsdC1pbiBmdW5jdGlvbnMg
c2hvdWxkIGJlIGFub255bW91cyBub24tY29uc3RydWN0b3JzCkBAIC0xNDgsNyArMjAxLDcgQEAK
IAogICAgICAgICA1LiBPbiB0aGUgbGF5b3V0IG9mIGZpZWxkcyBpbiBGcmVlTGlzdCAoc2VlIGNo
YW5nZXMgaW4gRnJlZUxpc3QuaCksIHdlIHRyeSB0bwogICAgICAgICAgICBwcmVzZXJ2ZSB0aGUg
cG9zaXRpb25zIG9mIHRoZSBidW1wIGFsbG9jYXRvciBmaWVsZHMuICBUaGUgb25seSBjaGFuZ2Ug
d2UgbWFkZQotICAgICAgICAgICB0aGVyZSBpcyBuIHRoZSBsb2NhdGlvbiBvZiBtX2NlbGxTaXpl
LiAgSXQgaXMgbm93IG1vdmVkIHVwIG5leHQgdG8gbV9yZW1haW5pbmcsCisgICAgICAgICAgIHRo
ZXJlIGlzIGluIHRoZSBsb2NhdGlvbiBvZiBtX2NlbGxTaXplLiAgSXQgaXMgbm93IG1vdmVkIHVw
IG5leHQgdG8gbV9yZW1haW5pbmcsCiAgICAgICAgICAgIGFuZCBtX29yaWdpbmFsU2l6ZSBpcyBt
b3ZlZCBkb3duLiAgVGhpcyBpcyBiZWNhdXNlIG1fb3JpZ2luYWxTaXplIGlzIG9ubHkKICAgICAg
ICAgICAgYWNjZXNzZWQgaW4gdGhlIHNsb3cgcGF0aCwgYW5kIG1fY2VsbFNpemUgaXMgYWNjZXNz
ZWQgaW4gdGhlIGJ1bXAgYWxsb2NhdGlvbgogICAgICAgICAgICBwYXRoLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5oCShyZXZpc2lvbiAyNjMxOTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyAr
MTA1LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgLy8gUmVtZW1iZXIsIHdlIGRvbid0IGFj
dHVhbGx5IGNsZWFyIHRoZSBiaXRzIGluIG1fYml0bWFwIGFzIHdlIGFsbG9jYXRlCiAgICAgICAg
IC8vIHRoZSBhdG9tcy4gSW5zdGVhZCwgbV9jdXJyZW50Um93Qml0bWFwIGFuZCBtX2N1cnJlbnRS
b3dJbmRleCB0ZWxscyB1cwotICAgICAgICAvLyBpZiB0aGVyZSBhdG9tcyBzdGlsbCBhdmFpbGFi
bGUgZm9yIGFsbG9jYXRpb24uIFNlZSBjb21tZW50IGJsb2IgYmVsb3cKKyAgICAgICAgLy8gaWYg
dGhlcmUgYXJlIGF0b21zIHN0aWxsIGF2YWlsYWJsZSBmb3IgYWxsb2NhdGlvbi4gU2VlIGNvbW1l
bnQgYmxvYiBiZWxvdwogICAgICAgICAvLyBhdCB0aGUgZGVjbGFyYXRpb24gb2YgbV9jdXJyZW50
Um93SW5kZXggZm9yIG1vcmUgZGV0YWlscy4KICAgICAgICAgcmV0dXJuICFtX2N1cnJlbnRSb3dC
aXRtYXAgJiYgIW1fY3VycmVudFJvd0luZGV4OwogICAgIH0KQEAgLTExNiw3ICsxMTYsNyBAQCBw
dWJsaWM6CiAgICAgLy8gV2UncmUgZGVsaWJlcmF0ZWx5IHJldHVybmluZyB0aGUgYWRkcmVzcyBv
ZiAxIHdvcmQgYmVmb3JlIG1fYml0bWFwIHNvIHRoYXQKICAgICAvLyB3ZSBjYW4gc2NoZWR1bGUg
aW5zdHJ1Y3Rpb25zIGJldHRlciBpLmUuIHRvIGRvIGEgbG9hZCBiZWZvcmUgZGVjcmVtZW50aW5n
IHRoZQogICAgIC8vIHJvdyBpbmRleC4KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQml0
bWFwUm93cygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgbV9iaXRtYXApIC0g
c2l6ZW9mKEF0b21zQml0bWFwOjpXb3JkKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZCaXRtYXBSb3dzTWludXNPbmUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3Qs
IG1fYml0bWFwKSAtIHNpemVvZihBdG9tc0JpdG1hcDo6V29yZCk7IH0KIAogICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZDdXJyZW50Um93SW5kZXgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoRnJlZUxpc3QsIG1fY3VycmVudFJvd0luZGV4KTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZDdXJyZW50TWFya2VkQmxvY2tSb3dBZGRyZXNzKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEZyZWVMaXN0LCBtX2N1cnJlbnRNYXJrZWRCbG9ja1Jvd0FkZHJlc3MpOyB9CkBAIC0x
NDEsOSArMTQxLDkgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShCSVRNQVBfRlJFRUxJU1QpCiAg
ICAgQXRvbXNCaXRtYXAmIGF0b21zQml0bWFwKCkgeyByZXR1cm4gbV9iaXRtYXA7IH0KLSAgICBB
dG9tc0JpdG1hcDo6V29yZCogYml0bWFwUm93cygpIGNvbnN0CisgICAgQXRvbXNCaXRtYXA6Oldv
cmQqIGJpdG1hcFJvd3NNaW51c09uZSgpIGNvbnN0CiAgICAgewotICAgICAgICAvLyBTZWUgY29t
bWVudCBhYm91dCBvZmZzZXRPZkJpdG1hcFJvd3MoKS4KKyAgICAgICAgLy8gU2VlIGNvbW1lbnQg
YWJvdXQgb2Zmc2V0T2ZCaXRtYXBSb3dzTWludXNPbmUoKS4KICAgICAgICAgcmV0dXJuIGJpdHdp
c2VfY2FzdDxBdG9tc0JpdG1hcDo6V29yZCo+KCZtX2JpdG1hcCkgLSAxOwogICAgIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3RJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3RJbmxpbmVzLmgJKHJldmlz
aW9uIDI2MzE5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0SW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMCArNTYsMTAgQEAgQUxXQVlTX0lOTElORSBIZWFw
Q2VsbCogRnJlZUxpc3Q6OmFsbG9jYQogICAgICAgICB1bnNpZ25lZCByb3dJbmRleCA9IG1fY3Vy
cmVudFJvd0luZGV4OwogICAgICAgICBhdXRvKiByb3dBZGRyZXNzID0gbV9jdXJyZW50TWFya2Vk
QmxvY2tSb3dBZGRyZXNzOwogICAgICAgICB3aGlsZSAocm93SW5kZXgpIHsKLSAgICAgICAgICAg
IC8vIFdlIGxvYWQgYmVmb3JlIGRlY3JlbWVudGluZyByb3dJbmRleCBiZWNhdXNlIGJpdG1hcFJv
d3MoKSBwb2ludHMKLSAgICAgICAgICAgIC8vIHRvIDEgd29yZCBiZWZvcmUgbV9iaXRtYXAuIFNl
ZSBjb21tZW50cyBhYm91dCBvZmZzZXRPZkJpdG1hcFJvd3MoKQorICAgICAgICAgICAgLy8gV2Ug
bG9hZCBiZWZvcmUgZGVjcmVtZW50aW5nIHJvd0luZGV4IGJlY2F1c2UgYml0bWFwUm93c01pbnVz
T25lKCkgcG9pbnRzCisgICAgICAgICAgICAvLyB0byAxIHdvcmQgYmVmb3JlIG1fYml0bWFwLiBT
ZWUgY29tbWVudHMgYWJvdXQgb2Zmc2V0T2ZCaXRtYXBSb3dzTWludXNPbmUoKQogICAgICAgICAg
ICAgLy8gZm9yIHdoeSB3ZSBkbyB0aGlzLgotICAgICAgICAgICAgcm93Qml0bWFwID0gYml0bWFw
Um93cygpW3Jvd0luZGV4LS1dOworICAgICAgICAgICAgcm93Qml0bWFwID0gYml0bWFwUm93c01p
bnVzT25lKClbcm93SW5kZXgtLV07CiAgICAgICAgICAgICByb3dBZGRyZXNzIC09IGF0b21zUGVy
Um93OwogICAgICAgICAgICAgaWYgKHJvd0JpdG1hcCkKICAgICAgICAgICAgICAgICBicmVhazsK
QEAgLTEwNiwxMCArMTA2LDEwIEBAIHZvaWQgRnJlZUxpc3Q6OmZvckVhY2goY29uc3QgRnVuYyYg
ZnVuYykKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgd2hpbGUgKHJvd0luZGV4KSB7Ci0g
ICAgICAgICAgICAgICAgLy8gV2UgbG9hZCBiZWZvcmUgZGVjcmVtZW50aW5nIHJvd0luZGV4IGJl
Y2F1c2UgYml0bWFwUm93cygpIHBvaW50cwotICAgICAgICAgICAgICAgIC8vIHRvIDEgd29yZCBi
ZWZvcmUgbV9iaXRtYXAuIFNlZSBjb21tZW50cyBhYm91dCBvZmZzZXRPZkJpdG1hcFJvd3MoKQor
ICAgICAgICAgICAgICAgIC8vIFdlIGxvYWQgYmVmb3JlIGRlY3JlbWVudGluZyByb3dJbmRleCBi
ZWNhdXNlIGJpdG1hcFJvd3NNaW51c09uZSgpIHBvaW50cworICAgICAgICAgICAgICAgIC8vIHRv
IDEgd29yZCBiZWZvcmUgbV9iaXRtYXAuIFNlZSBjb21tZW50cyBhYm91dCBvZmZzZXRPZkJpdG1h
cFJvd3NNaW51c09uZSgpCiAgICAgICAgICAgICAgICAgLy8gZm9yIHdoeSB3ZSBkbyB0aGlzLgot
ICAgICAgICAgICAgICAgIHJvd0JpdG1hcCA9IGJpdG1hcFJvd3MoKVtyb3dJbmRleC0tXTsKKyAg
ICAgICAgICAgICAgICByb3dCaXRtYXAgPSBiaXRtYXBSb3dzTWludXNPbmUoKVtyb3dJbmRleC0t
XTsKICAgICAgICAgICAgICAgICBjdXJyZW50TWFya2VkQmxvY2tSb3dBZGRyZXNzIC09IGF0b21z
UGVyUm93OwogICAgICAgICAgICAgICAgIGlmIChyb3dCaXRtYXApCiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDI2MzE5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQsNDQgKzMw
NCw3MCBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlCiAgICAgfQog
CiAjaWYgRU5BQkxFKEJJVE1BUF9GUkVFTElTVCkKKyAgICAvLyBUaGUgY29kZSBiZWxvdyBpcyBh
biBvcHRpbWl6ZWQgdmVyc2lvbiBvZiB0aGUgZm9sbG93aW5nIGJ5IG1lcmdpbmcgdGhlCisgICAg
Ly8gdmFyaW91cyBsb29wcyBvdmVyIHRoZSBiaXRtYXBzLgorICAgIC8vCisgICAgLy8gICAgQXRv
bXNCaXRtYXAgY2VsbExvY2F0aW9uczsKKyAgICAvLyAgICBjZWxsTG9jYXRpb25zLnNldEVhY2hO
dGhCaXQobV9hdG9tc1BlckNlbGwsIDAsIG1fZW5kQXRvbSk7CisgICAgLy8KKyAgICAvLyAgICBp
ZiAoZW1wdHlNb2RlID09IE5vdEVtcHR5KSB7CisgICAgLy8gICAgICAgIGlmIChtYXJrc01vZGUg
PT0gTWFya3NOb3RTdGFsZSkgeworICAgIC8vICAgICAgICAgICAgZnJlZUF0b21zID0gZm9vdGVy
Lm1fbWFya3M7CisgICAgLy8gICAgICAgICAgICBpZiAobmV3bHlBbGxvY2F0ZWRNb2RlID09IEhh
c05ld2x5QWxsb2NhdGVkKQorICAgIC8vICAgICAgICAgICAgICAgIGZyZWVBdG9tcyB8PSBmb290
ZXIubV9uZXdseUFsbG9jYXRlZDsKKyAgICAvLyAgICAgICAgfSBlbHNlIGlmIChuZXdseUFsbG9j
YXRlZE1vZGUgPT0gSGFzTmV3bHlBbGxvY2F0ZWQpCisgICAgLy8gICAgICAgICAgICBmcmVlQXRv
bXMgPSBmb290ZXIubV9uZXdseUFsbG9jYXRlZDsKKyAgICAvLyAgICAgICAgLy8gQXQgdGhpcyBw
b2ludCwgYSBzZXQgYml0IGluIGZyZWVBdG9tcyByZXByZXNlbnRzIGxpdmUgY2VsbHMuCisgICAg
Ly8gICAgICAgIGlzRW1wdHkgPSBmcmVlQXRvbXMuaXNFbXB0eSgpOworICAgIC8vCisgICAgLy8g
ICAgICAgIC8vIEludmVydCB0aGUgYml0cyBhdCBlYWNoIGNlbGwgbG9jYXRpb24gc28gdGhhdCB0
aGUgb25lcyBmb3IgbGl2ZSBjZWxscworICAgIC8vICAgICAgICAvLyBhcmUgY2xlYXJlZCwgYW5k
IHRoZSBvbmVzIGZvciBkZWFkIGNlbGxzIGFyZSBzZXQuCisgICAgLy8gICAgICAgIGZyZWVBdG9t
cyBePSBjZWxsTG9jYXRpb25zOworICAgIC8vICAgIH0gZWxzZQorICAgIC8vICAgICAgICBmcmVl
QXRvbXMgPSBjZWxsTG9jYXRpb25zOyAvLyBhbGwgY2VsbHMgYXJlIGZyZWUuCisKICAgICBBdG9t
c0JpdG1hcCBsb2NhbEZyZWVBdG9tczsKICAgICBBdG9tc0JpdG1hcCYgZnJlZUF0b21zID0gZnJl
ZUxpc3QgPyBmcmVlTGlzdC0+YXRvbXNCaXRtYXAoKSA6IGxvY2FsRnJlZUF0b21zOwotICAgIHNp
emVfdCBjb3VudCA9IDA7CiAKLSAgICBhdXRvIGhhbmRsZURlYWRDZWxsID0gWyZdIChzaXplX3Qg
aSkgewotICAgICAgICBIZWFwQ2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEhlYXBD
ZWxsKj4oYXRvbUF0KGkpKTsKKyAgICBBdG9tc0JpdG1hcDo6V29yZCogZnJlZSA9IGZyZWVBdG9t
cy53b3JkcygpOworICAgIEF0b21zQml0bWFwOjpXb3JkKiBtYXJrcyA9IGZvb3Rlci5tX21hcmtz
LndvcmRzKCk7CisgICAgQXRvbXNCaXRtYXA6OldvcmQqIG5ld2x5QWxsb2NhdGVkID0gZm9vdGVy
Lm1fbmV3bHlBbGxvY2F0ZWQud29yZHMoKTsKKyAgICBBdG9tc0JpdG1hcDo6V29yZCBhbnlCaXRz
ID0gMDsKKworICAgIHVuc2lnbmVkIHJvdW5kZWRVcEVuZEF0b21zID0gcm91bmRVcFRvTXVsdGlw
bGVPZjxBdG9tc0JpdG1hcDo6Yml0c0luV29yZD4obV9lbmRBdG9tKTsKKyAgICB1bnNpZ25lZCBl
bmRXb3JkSW5kZXggPSByb3VuZGVkVXBFbmRBdG9tcyAvIEF0b21zQml0bWFwOjpiaXRzSW5Xb3Jk
OworICAgIEFTU0VSVChtX2VuZEF0b20gPD0gZW5kV29yZEluZGV4ICogQXRvbXNCaXRtYXA6OmJp
dHNJbldvcmQpOworCisgICAgaWYgKGZyZWVMaXN0KQorICAgICAgICBmcmVlQXRvbXMuY2xlYXJB
bGwoKTsKKyAgICBmcmVlQXRvbXMuc2V0RWFjaE50aEJpdChtX2F0b21zUGVyQ2VsbCwgMCwgbV9l
bmRBdG9tKTsKIAotICAgICAgICBpZiAoZGVzdHJ1Y3Rpb25Nb2RlICE9IEJsb2NrSGFzTm9EZXN0
cnVjdG9ycykKLSAgICAgICAgICAgIGRlc3Ryb3koY2VsbCk7Ci0KLSAgICAgICAgaWYgKHN3ZWVw
TW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpIHsKLSAgICAgICAgICAgIGlmIChzY3JpYmJsZU1vZGUg
PT0gU2NyaWJibGUpCi0gICAgICAgICAgICAgICAgc2NyaWJibGUoY2VsbCwgY2VsbFNpemUpOwot
ICAgICAgICAgICAgKytjb3VudDsKKyAgICBpZiAoZW1wdHlNb2RlID09IE5vdEVtcHR5KSB7Cisg
ICAgICAgIGlmIChtYXJrc01vZGUgPT0gTWFya3NOb3RTdGFsZSAmJiBuZXdseUFsbG9jYXRlZE1v
ZGUgPT0gSGFzTmV3bHlBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBlbmRXb3JkSW5kZXg7ICsraSkgeworICAgICAgICAgICAgICAgIEF0b21zQml0bWFw
OjpXb3JkIHZhbHVlID0gbWFya3NbaV0gfCBuZXdseUFsbG9jYXRlZFtpXTsKKyAgICAgICAgICAg
ICAgICBhbnlCaXRzIHw9IHZhbHVlOworICAgICAgICAgICAgICAgIGZyZWVbaV0gXj0gdmFsdWU7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAobWFya3NNb2RlID09IE1hcmtzTm90
U3RhbGUpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbmRXb3JkSW5k
ZXg7ICsraSkgeworICAgICAgICAgICAgICAgIEF0b21zQml0bWFwOjpXb3JkIHZhbHVlID0gbWFy
a3NbaV07CisgICAgICAgICAgICAgICAgYW55Qml0cyB8PSB2YWx1ZTsKKyAgICAgICAgICAgICAg
ICBmcmVlW2ldIF49IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG5l
d2x5QWxsb2NhdGVkTW9kZSA9PSBIYXNOZXdseUFsbG9jYXRlZCkgeworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGVuZFdvcmRJbmRleDsgKytpKSB7CisgICAgICAgICAgICAg
ICAgQXRvbXNCaXRtYXA6OldvcmQgdmFsdWUgPSBuZXdseUFsbG9jYXRlZFtpXTsKKyAgICAgICAg
ICAgICAgICBhbnlCaXRzIHw9IHZhbHVlOworICAgICAgICAgICAgICAgIGZyZWVbaV0gXj0gdmFs
dWU7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9OworICAgIH0KIAotICAgIGJvb2wg
aXNFbXB0eSA9IHRydWU7CisgICAgYm9vbCBpc0VtcHR5ID0gIWFueUJpdHM7CiAKLSAgICBBdG9t
c0JpdG1hcCBjZWxsTG9jYXRpb25zOwotICAgIGNlbGxMb2NhdGlvbnMuc2V0RWFjaE50aEJpdCht
X2F0b21zUGVyQ2VsbCwgMCwgbV9lbmRBdG9tKTsKKyAgICAvLyBBdCB0aGlzIHBvaW50LCBhIHNl
dCBiaXQgaW4gZnJlZUF0b21zIHJlcHJlc2VudHMgbGl2ZSBjZWxscy4KIAotICAgIGlmIChlbXB0
eU1vZGUgPT0gTm90RW1wdHkpIHsKLSAgICAgICAgaWYgKG1hcmtzTW9kZSA9PSBNYXJrc05vdFN0
YWxlKSB7Ci0gICAgICAgICAgICBmcmVlQXRvbXMgPSBmb290ZXIubV9tYXJrczsKLSAgICAgICAg
ICAgIGlmIChuZXdseUFsbG9jYXRlZE1vZGUgPT0gSGFzTmV3bHlBbGxvY2F0ZWQpCi0gICAgICAg
ICAgICAgICAgZnJlZUF0b21zIHw9IGZvb3Rlci5tX25ld2x5QWxsb2NhdGVkOwotICAgICAgICB9
IGVsc2UgaWYgKG5ld2x5QWxsb2NhdGVkTW9kZSA9PSBIYXNOZXdseUFsbG9jYXRlZCkKLSAgICAg
ICAgICAgIGZyZWVBdG9tcyA9IGZvb3Rlci5tX25ld2x5QWxsb2NhdGVkOwotICAgICAgICAvLyBB
dCB0aGlzIHBvaW50LCBhIHNldCBiaXQgaW4gZnJlZUF0b21zIHJlcHJlc2VudHMgbGl2ZSBjZWxs
cy4KLSAgICAgICAgaXNFbXB0eSA9IGZyZWVBdG9tcy5pc0VtcHR5KCk7Ci0KLSAgICAgICAgLy8g
SW52ZXJ0IHRoZSBiaXRzIGF0IGVhY2ggY2VsbCBsb2NhdGlvbiBzbyB0aGF0IHRoZSBvbmVzIGZv
ciBsaXZlIGNlbGxzCi0gICAgICAgIC8vIGFyZSBjbGVhcmVkLCBhbmQgdGhlIG9uZXMgZm9yIGRl
YWQgY2VsbHMgYXJlIHNldC4KLSAgICAgICAgZnJlZUF0b21zIF49IGNlbGxMb2NhdGlvbnM7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIGZyZWVBdG9tcyA9IGNlbGxMb2NhdGlvbnM7IC8vIGFsbCBjZWxs
cyBhcmUgZnJlZS4KLSAgICAKICAgICAvLyBXZSBvbmx5IHdhbnQgdG8gZGlzY2FyZCB0aGUgbmV3
bHlBbGxvY2F0ZWQgYml0cyBpZiB3ZSdyZSBjcmVhdGluZyBhIEZyZWVMaXN0LAogICAgIC8vIG90
aGVyd2lzZSB3ZSB3b3VsZCBsb3NlIGluZm9ybWF0aW9uIG9uIHdoYXQncyBjdXJyZW50bHkgYWxp
dmUuCiAgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QgJiYgbmV3bHlBbGxvY2F0
ZWRNb2RlID09IEhhc05ld2x5QWxsb2NhdGVkKQpAQCAtMzUwLDggKzM3NiwyMCBAQCB2b2lkIE1h
cmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlCiAgICAgaWYgKHNwYWNlKCktPmlzTWFy
a2luZygpKQogICAgICAgICBmb290ZXIubV9sb2NrLnVubG9jaygpOwogCi0gICAgaWYgKGRlc3Ry
dWN0aW9uTW9kZSAhPSBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMpCi0gICAgICAgIGZyZWVBdG9tcy5m
b3JFYWNoU2V0Qml0KGhhbmRsZURlYWRDZWxsKTsKKyAgICAvLyBIYW5kbGUgZGVhZCBjZWxscy4K
KyAgICBzaXplX3QgY291bnQgPSAwOworICAgIGZyZWVBdG9tcy5mb3JFYWNoU2V0Qml0KFsmXSAo
c2l6ZV90IGkpIHsKKyAgICAgICAgSGVhcENlbGwqIGNlbGwgPSByZWludGVycHJldF9jYXN0X3B0
cjxIZWFwQ2VsbCo+KGF0b21BdChpKSk7CisKKyAgICAgICAgaWYgKGRlc3RydWN0aW9uTW9kZSAh
PSBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMpCisgICAgICAgICAgICBkZXN0cm95KGNlbGwpOworCisg
ICAgICAgIGlmIChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KSB7CisgICAgICAgICAgICBp
ZiAoc2NyaWJibGVNb2RlID09IFNjcmliYmxlKQorICAgICAgICAgICAgICAgIHNjcmliYmxlKGNl
bGwsIGNlbGxTaXplKTsKKyAgICAgICAgICAgICsrY291bnQ7CisgICAgICAgIH0KKyAgICB9KTsK
IAogICAgIGlmIChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KSB7CiAgICAgICAgIGZyZWVM
aXN0LT5pbml0aWFsaXplQXRvbXNCaXRtYXAodGhpcywgZnJlZUF0b21zLCBjb3VudCAqIGNlbGxT
aXplKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5jcHAJKHJldmlzaW9uIDI2MzE5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTkxLDEwICs1OTEsMTAgQEAgdm9p
ZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZVdpdGhObwogICAgIHsKICAgICAgICAgLy8g
TG9hZCB0aGUgbmV4dCByb3cgYml0bWFwIGFuZCBwb2ludCBtX2N1cnJlbnRNYXJrZWRCbG9ja1Jv
d0FkZHJlc3MgdG8gdGhlIG5leHQgcm93LgogCi0gICAgICAgIC8vIE5vdGU6IG9mZnNldE9mQml0
bWFwUm93cygpIHBvaW50cyB0byAxIHdvcmQgYmVmb3JlIG1fYml0bWFwLiBXZSBkbyB0aGlzCisg
ICAgICAgIC8vIE5vdGU6IG9mZnNldE9mQml0bWFwUm93c01pbnVzT25lKCkgcG9pbnRzIHRvIDEg
d29yZCBiZWZvcmUgbV9iaXRtYXAuIFdlIGRvIHRoaXMKICAgICAgICAgLy8gZGVsaWJlcmF0ZWx5
IGJlY2F1c2UgaXQgYWxsb3dzIHVzIHRvIHNjaGVkdWxlIGluc3RydWN0aW9ucyBiZXR0ZXIgYW5k
CiAgICAgICAgIC8vIGRvIHRoaXMgbG9hZCBiZWZvcmUgdGhlIGRlY3JlbWVudCBiZWxvdy4KLSAg
ICAgICAgbG9hZDY0KEJhc2VJbmRleChhbGxvY2F0b3JHUFIsIHJvd0luZGV4R1BSLCBUaW1lc0Vp
Z2h0LCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNl
dE9mQml0bWFwUm93cygpKSwgcm93Qml0bWFwR1BSKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRl
eChhbGxvY2F0b3JHUFIsIHJvd0luZGV4R1BSLCBUaW1lc0VpZ2h0LCBMb2NhbEFsbG9jYXRvcjo6
b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mQml0bWFwUm93c01pbnVzT25l
KCkpLCByb3dCaXRtYXBHUFIpOwogCiAgICAgICAgIHN1YjY0KFRydXN0ZWRJbW0zMigxKSwgcm93
SW5kZXhHUFIpOwogICAgICAgICBzdWJQdHIoVHJ1c3RlZEltbTMyKEZyZWVMaXN0OjphdG9tc1Jv
d0J5dGVzKSwgcm93QWRkcmVzc0dQUik7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjYzMTk1KQorKysgU291
cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0MyBAQAorMjAyMC0w
Ni0xOCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgVW5pZnkgQml0
bWFwIG1hdGggbG9vcHMgaW4gTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2VlcCgp
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzMzQ1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgMS4gUmVt
b3ZlZCBCaXRtYXA6OndvcmRzLiAgVXNlIEJpdG1hcDo6bnVtYmVyT2ZXb3JkcyBpbnN0ZWFkLgor
ICAgICAgICAyLiBSZW1vdmVkIEJpdG1hcDo6d29yZFNpemUuICBVc2UgQml0bWFwOjpiaXRzSW5X
b3JkIGluc3RlYWQuCisgICAgICAgIDMuIEFkZGVkIGEgbmV3IEJpdG1hcDo6d29yZHMoKSBtZXRo
b2Qgd2hpY2ggcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgdW5kZXJseWluZworICAgICAgICAg
ICBiaXRtYXAgc3RvcmFnZSBhcyBhIEJpdG1hcDo6V29yZCouICBUaGlzIGVuYWJsZXMgY2xpZW50
cyB0byBkbyBkaXJlY3QgYml0CisgICAgICAgICAgIG1hbmlwdWxhdGlvbiBvbiB0aGUgQml0bWFw
IHdvcmRzIGlmIG5lZWRlZC4KKworICAgICAgICAqIHd0Zi9CaXRtYXAuaDoKKyAgICAgICAgKFdU
Rjo6V29yZFR5cGU+OjpnZXQgY29uc3QpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46OnNldCk6
CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6dGVzdEFuZFNldCk6CisgICAgICAgIChXVEY6Oldv
cmRUeXBlPjo6dGVzdEFuZENsZWFyKToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+Ojpjb25jdXJy
ZW50VGVzdEFuZFNldCk6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6Y29uY3VycmVudFRlc3RB
bmRDbGVhcik6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6Y2xlYXIpOgorICAgICAgICAoV1RG
OjpXb3JkVHlwZT46OmludmVydCk6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6bmV4dFBvc3Np
Ymx5VW5zZXQgY29uc3QpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46OmNvdW50IGNvbnN0KToK
KyAgICAgICAgKFdURjo6V29yZFR5cGU+Ojppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdURjo6
V29yZFR5cGU+Ojppc0Z1bGwgY29uc3QpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46Om1lcmdl
KToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+OjpmaWx0ZXIpOgorICAgICAgICAoV1RGOjpXb3Jk
VHlwZT46OmV4Y2x1ZGUpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46OmNvbmN1cnJlbnRGaWx0
ZXIpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46OnN1YnN1bWVzIGNvbnN0KToKKyAgICAgICAg
KFdURjo6V29yZFR5cGU+Ojpmb3JFYWNoU2V0Qml0IGNvbnN0KToKKyAgICAgICAgKFdURjo6V29y
ZFR5cGU+OjpmaW5kQml0IGNvbnN0KToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+OjptZXJnZUFu
ZENsZWFyKToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+OjpzZXRBbmRDbGVhcik6CisgICAgICAg
IChXVEY6OldvcmRUeXBlPjo6c2V0RWFjaE50aEJpdCk6CisgICAgICAgIChXVEY6Oj0gY29uc3Qp
OgorICAgICAgICAoV1RGOjo9KToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+OjpoYXNoIGNvbnN0
KToKKwogMjAyMC0wNi0xNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVwbGFjZSBKU0M6OkZyZWVMaXN0IGxpbmtlZCBsaXN0IHdpdGggYSBCaXRtYXAuCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9C
aXRtYXAuaAkocmV2aXNpb24gMjYzMTk1KQorKysgU291cmNlL1dURi93dGYvQml0bWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEzNSwxMSArMTM1LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgYml0c0luV29yZCA9IGNvdW50T2ZCaXRzPFdvcmRUeXBlPjsKICAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mV29yZHMgPSAoYml0bWFwU2l6ZSArIGJp
dHNJbldvcmQgLSAxKSAvIGJpdHNJbldvcmQ7CiAgICAgV29yZFR5cGUgd29yZEF0KHNpemVfdCB3
b3JkSW5kZXgpIGNvbnN0IHsgcmV0dXJuIGJpdHNbd29yZEluZGV4XTsgfQorICAgIFdvcmQqIHdv
cmRzKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFdvcmQqPigmYml0cyk7IH0KIAogcHJpdmF0ZToK
LSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHdvcmRTaXplID0gYml0c0luV29yZDsKLSAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHdvcmRzID0gbnVtYmVyT2ZXb3JkczsKLQogICAg
IC8vIHRoZSBsaXRlcmFsICcxJyBpcyBvZiB0eXBlIHNpZ25lZCBpbnQuICBXZSB3YW50IHRvIHVz
ZSBhbiB1bnNpZ25lZAogICAgIC8vIHZlcnNpb24gb2YgdGhlIGNvcnJlY3Qgc2l6ZSB3aGVuIGRv
aW5nIHRoZSBjYWxjdWxhdGlvbnMgYmVjYXVzZSBpZgogICAgIC8vIFdvcmRUeXBlIGlzIGxhcmdl
ciB0aGFuIGludCwgJzEgPDwgMzEnIHdpbGwgZmlyc3QgYmUgc2lnbiBleHRlbmRlZApAQCAtMTQ3
LDcgKzE0NSw3IEBAIHByaXZhdGU6CiAgICAgLy8gYSA2NCBiaXQgdW5zaWduZWQgaW50IHdvdWxk
IGdpdmUgMHhmZmZmODAwMAogICAgIHN0YXRpYyBjb25zdGV4cHIgV29yZFR5cGUgb25lID0gMTsK
IAotICAgIHN0ZDo6YXJyYXk8V29yZFR5cGUsIHdvcmRzPiBiaXRzOworICAgIHN0ZDo6YXJyYXk8
V29yZFR5cGUsIG51bWJlck9mV29yZHM+IGJpdHM7CiB9OwogCiB0ZW1wbGF0ZTxzaXplX3QgYml0
bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CkBAIC0xNTksMTMgKzE1NywxMyBAQCBjb25zdGV4
cHIgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6CiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFw
U2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CiBpbmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwg
V29yZFR5cGU+OjpnZXQoc2l6ZV90IG4sIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkgY29uc3QKIHsK
LSAgICByZXR1cm4gISEoZGVwZW5kZW5jeS5jb25zdW1lKHRoaXMpLT5iaXRzW24gLyB3b3JkU2l6
ZV0gJiAob25lIDw8IChuICUgd29yZFNpemUpKSk7CisgICAgcmV0dXJuICEhKGRlcGVuZGVuY3ku
Y29uc3VtZSh0aGlzKS0+Yml0c1tuIC8gYml0c0luV29yZF0gJiAob25lIDw8IChuICUgYml0c0lu
V29yZCkpKTsKIH0KIAogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRU
eXBlPgogaW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6c2V0KHNpemVf
dCBuKQogewotICAgIGJpdHNbbiAvIHdvcmRTaXplXSB8PSAob25lIDw8IChuICUgd29yZFNpemUp
KTsKKyAgICBiaXRzW24gLyBiaXRzSW5Xb3JkXSB8PSAob25lIDw8IChuICUgYml0c0luV29yZCkp
OwogfQogCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CkBA
IC0xODAsOCArMTc4LDggQEAgaW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBl
PgogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgogaW5saW5l
IGJvb2wgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6dGVzdEFuZFNldChzaXplX3QgbikK
IHsKLSAgICBXb3JkVHlwZSBtYXNrID0gb25lIDw8IChuICUgd29yZFNpemUpOwotICAgIHNpemVf
dCBpbmRleCA9IG4gLyB3b3JkU2l6ZTsKKyAgICBXb3JkVHlwZSBtYXNrID0gb25lIDw8IChuICUg
Yml0c0luV29yZCk7CisgICAgc2l6ZV90IGluZGV4ID0gbiAvIGJpdHNJbldvcmQ7CiAgICAgYm9v
bCByZXN1bHQgPSBiaXRzW2luZGV4XSAmIG1hc2s7CiAgICAgYml0c1tpbmRleF0gfD0gbWFzazsK
ICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTkwLDggKzE4OCw4IEBAIGlubGluZSBib29sIEJpdG1h
cDxiaXRtYXBTaXplLCBXb3JkVHlwZT4KIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBl
bmFtZSBXb3JkVHlwZT4KIGlubGluZSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46
OnRlc3RBbmRDbGVhcihzaXplX3QgbikKIHsKLSAgICBXb3JkVHlwZSBtYXNrID0gb25lIDw8IChu
ICUgd29yZFNpemUpOwotICAgIHNpemVfdCBpbmRleCA9IG4gLyB3b3JkU2l6ZTsKKyAgICBXb3Jk
VHlwZSBtYXNrID0gb25lIDw8IChuICUgYml0c0luV29yZCk7CisgICAgc2l6ZV90IGluZGV4ID0g
biAvIGJpdHNJbldvcmQ7CiAgICAgYm9vbCByZXN1bHQgPSBiaXRzW2luZGV4XSAmIG1hc2s7CiAg
ICAgYml0c1tpbmRleF0gJj0gfm1hc2s7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTIwMCw4ICsx
OTgsOCBAQCBpbmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+CiB0ZW1wbGF0
ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CiBBTFdBWVNfSU5MSU5FIGJv
b2wgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6Y29uY3VycmVudFRlc3RBbmRTZXQoc2l6
ZV90IG4sIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkKIHsKLSAgICBXb3JkVHlwZSBtYXNrID0gb25l
IDw8IChuICUgd29yZFNpemUpOwotICAgIHNpemVfdCBpbmRleCA9IG4gLyB3b3JkU2l6ZTsKKyAg
ICBXb3JkVHlwZSBtYXNrID0gb25lIDw8IChuICUgYml0c0luV29yZCk7CisgICAgc2l6ZV90IGlu
ZGV4ID0gbiAvIGJpdHNJbldvcmQ7CiAgICAgV29yZFR5cGUqIGRhdGEgPSBkZXBlbmRlbmN5LmNv
bnN1bWUoYml0cy5kYXRhKCkpICsgaW5kZXg7CiAgICAgcmV0dXJuICFiaXR3aXNlX2Nhc3Q8QXRv
bWljPFdvcmRUeXBlPio+KGRhdGEpLT50cmFuc2FjdGlvblJlbGF4ZWQoCiAgICAgICAgIFsmXSAo
V29yZFR5cGUmIHZhbHVlKSAtPiBib29sIHsKQEAgLTIxNiw4ICsyMTQsOCBAQCBBTFdBWVNfSU5M
SU5FIGJvb2wgQml0bWFwPGJpdG1hcFNpemUsIFdvCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6
ZSwgdHlwZW5hbWUgV29yZFR5cGU+CiBBTFdBWVNfSU5MSU5FIGJvb2wgQml0bWFwPGJpdG1hcFNp
emUsIFdvcmRUeXBlPjo6Y29uY3VycmVudFRlc3RBbmRDbGVhcihzaXplX3QgbiwgRGVwZW5kZW5j
eSBkZXBlbmRlbmN5KQogewotICAgIFdvcmRUeXBlIG1hc2sgPSBvbmUgPDwgKG4gJSB3b3JkU2l6
ZSk7Ci0gICAgc2l6ZV90IGluZGV4ID0gbiAvIHdvcmRTaXplOworICAgIFdvcmRUeXBlIG1hc2sg
PSBvbmUgPDwgKG4gJSBiaXRzSW5Xb3JkKTsKKyAgICBzaXplX3QgaW5kZXggPSBuIC8gYml0c0lu
V29yZDsKICAgICBXb3JkVHlwZSogZGF0YSA9IGRlcGVuZGVuY3kuY29uc3VtZShiaXRzLmRhdGEo
KSkgKyBpbmRleDsKICAgICByZXR1cm4gIWJpdHdpc2VfY2FzdDxBdG9taWM8V29yZFR5cGU+Kj4o
ZGF0YSktPnRyYW5zYWN0aW9uUmVsYXhlZCgKICAgICAgICAgWyZdIChXb3JkVHlwZSYgdmFsdWUp
IC0+IGJvb2wgewpAQCAtMjMyLDcgKzIzMCw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBCaXRtYXA8
Yml0bWFwU2l6ZSwgV28KIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3Jk
VHlwZT4KIGlubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmNsZWFyKHNp
emVfdCBuKQogewotICAgIGJpdHNbbiAvIHdvcmRTaXplXSAmPSB+KG9uZSA8PCAobiAlIHdvcmRT
aXplKSk7CisgICAgYml0c1tuIC8gYml0c0luV29yZF0gJj0gfihvbmUgPDwgKG4gJSBiaXRzSW5X
b3JkKSk7CiB9CiAKIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlw
ZT4KQEAgLTI0NCwyMCArMjQyLDIwIEBAIGlubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBX
b3JkVHlwZT4KIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4K
IGlubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmludmVydCgpCiB7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JkczsgKytpKQorICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbnVtYmVyT2ZXb3JkczsgKytpKQogICAgICAgICBiaXRzW2ldID0gfmJpdHNbaV07
Ci0gICAgaWYgY29uc3RleHByICghIShiaXRtYXBTaXplICUgd29yZFNpemUpKSB7Ci0gICAgICAg
IGNvbnN0ZXhwciBzaXplX3QgcmVtYWluaW5nQml0cyA9IGJpdG1hcFNpemUgJSB3b3JkU2l6ZTsK
KyAgICBpZiBjb25zdGV4cHIgKCEhKGJpdG1hcFNpemUgJSBiaXRzSW5Xb3JkKSkgeworICAgICAg
ICBjb25zdGV4cHIgc2l6ZV90IHJlbWFpbmluZ0JpdHMgPSBiaXRtYXBTaXplICUgYml0c0luV29y
ZDsKICAgICAgICAgY29uc3RleHByIFdvcmRUeXBlIG1hc2sgPSAoc3RhdGljX2Nhc3Q8V29yZFR5
cGU+KDEpIDw8IHJlbWFpbmluZ0JpdHMpIC0gMTsKLSAgICAgICAgYml0c1t3b3JkcyAtIDFdICY9
IG1hc2s7CisgICAgICAgIGJpdHNbbnVtYmVyT2ZXb3JkcyAtIDFdICY9IG1hc2s7CiAgICAgfQog
fQogCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CiBpbmxp
bmUgc2l6ZV90IEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om5leHRQb3NzaWJseVVuc2V0
KHNpemVfdCBzdGFydCkgY29uc3QKIHsKLSAgICBpZiAoIX5iaXRzW3N0YXJ0IC8gd29yZFNpemVd
KQotICAgICAgICByZXR1cm4gKChzdGFydCAvIHdvcmRTaXplKSArIDEpICogd29yZFNpemU7Cisg
ICAgaWYgKCF+Yml0c1tzdGFydCAvIGJpdHNJbldvcmRdKQorICAgICAgICByZXR1cm4gKChzdGFy
dCAvIGJpdHNJbldvcmQpICsgMSkgKiBiaXRzSW5Xb3JkOwogICAgIHJldHVybiBzdGFydCArIDE7
CiB9CiAKQEAgLTI4OCwxMSArMjg2LDExIEBAIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0
eXBlbmFtZSBXb3IKIGlubGluZSBzaXplX3QgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6
Y291bnQoc2l6ZV90IHN0YXJ0KSBjb25zdAogewogICAgIHNpemVfdCByZXN1bHQgPSAwOwotICAg
IGZvciAoIDsgKHN0YXJ0ICUgd29yZFNpemUpOyArK3N0YXJ0KSB7CisgICAgZm9yICggOyAoc3Rh
cnQgJSBiaXRzSW5Xb3JkKTsgKytzdGFydCkgewogICAgICAgICBpZiAoZ2V0KHN0YXJ0KSkKICAg
ICAgICAgICAgICsrcmVzdWx0OwogICAgIH0KLSAgICBmb3IgKHNpemVfdCBpID0gc3RhcnQgLyB3
b3JkU2l6ZTsgaSA8IHdvcmRzOyArK2kpCisgICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0IC8gYml0
c0luV29yZDsgaSA8IG51bWJlck9mV29yZHM7ICsraSkKICAgICAgICAgcmVzdWx0ICs9IFdURjo6
Yml0Q291bnQoYml0c1tpXSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTMwMCwyMCArMjk4
LDIxIEBAIGlubGluZSBzaXplX3QgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXAKIHRlbXBsYXRl
PHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSBib29sIEJpdG1h
cDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmlzRW1wdHkoKSBjb25zdAogewotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgd29yZHM7ICsraSkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bWJlck9mV29yZHM7ICsraSkgewogICAgICAgICBpZiAoYml0c1tpXSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHRlbXBsYXRlPHNpemVf
dCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSBib29sIEJpdG1hcDxiaXRt
YXBTaXplLCBXb3JkVHlwZT46OmlzRnVsbCgpIGNvbnN0CiB7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB3b3JkczsgKytpKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZX
b3JkczsgKytpKSB7CiAgICAgICAgIGlmICh+Yml0c1tpXSkgewotICAgICAgICAgICAgaWYgY29u
c3RleHByICghIShiaXRtYXBTaXplICUgd29yZFNpemUpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGkgPT0gd29yZHMgLSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBzaXplX3Qg
cmVtYWluaW5nQml0cyA9IGJpdG1hcFNpemUgJSB3b3JkU2l6ZTsKKyAgICAgICAgICAgIGlmIGNv
bnN0ZXhwciAoISEoYml0bWFwU2l6ZSAlIGJpdHNJbldvcmQpKSB7CisgICAgICAgICAgICAgICAg
aWYgKGkgPT0gbnVtYmVyT2ZXb3JkcyAtIDEpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Rl
eHByIHNpemVfdCByZW1haW5pbmdCaXRzID0gYml0bWFwU2l6ZSAlIGJpdHNJbldvcmQ7CiAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBXb3JkVHlwZSBtYXNrID0gKHN0YXRpY19jYXN0PFdv
cmRUeXBlPigxKSA8PCByZW1haW5pbmdCaXRzKSAtIDE7CiAgICAgICAgICAgICAgICAgICAgIGlm
ICgoYml0c1tpXSAmIG1hc2spID09IG1hc2spCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTMyMSwzNCArMzIwLDM1IEBAIGlubGluZSBib29sIEJpdG1hcDxiaXRtYXBT
aXplLCBXb3JkVHlwZT4KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQorICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdGVtcGxhdGU8c2l6ZV90
IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgogaW5saW5lIHZvaWQgQml0bWFwPGJpdG1h
cFNpemUsIFdvcmRUeXBlPjo6bWVyZ2UoY29uc3QgQml0bWFwJiBvdGhlcikKIHsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHdvcmRzOyArK2kpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBudW1iZXJPZldvcmRzOyArK2kpCiAgICAgICAgIGJpdHNbaV0gfD0gb3RoZXIuYml0c1tpXTsK
IH0KIAogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgogaW5s
aW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6ZmlsdGVyKGNvbnN0IEJpdG1h
cCYgb3RoZXIpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JkczsgKytpKQorICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZXb3JkczsgKytpKQogICAgICAgICBiaXRz
W2ldICY9IG90aGVyLmJpdHNbaV07CiB9CiAKIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0
eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlw
ZT46OmV4Y2x1ZGUoY29uc3QgQml0bWFwJiBvdGhlcikKIHsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHdvcmRzOyArK2kpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZldv
cmRzOyArK2kpCiAgICAgICAgIGJpdHNbaV0gJj0gfm90aGVyLmJpdHNbaV07CiB9CiAKIHRlbXBs
YXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSB2b2lkIEJp
dG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmNvbmN1cnJlbnRGaWx0ZXIoY29uc3QgQml0bWFw
JiBvdGhlcikKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmRzOyArK2kpIHsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mV29yZHM7ICsraSkgewogICAgICAgICBm
b3IgKDs7KSB7CiAgICAgICAgICAgICBXb3JkVHlwZSBvdGhlckJpdHMgPSBvdGhlci5iaXRzW2ld
OwogICAgICAgICAgICAgaWYgKCFvdGhlckJpdHMpIHsKQEAgLTM2OCw3ICszNjgsNyBAQCBpbmxp
bmUgdm9pZCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+CiB0ZW1wbGF0ZTxzaXplX3QgYml0
bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CiBpbmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6
ZSwgV29yZFR5cGU+OjpzdWJzdW1lcyhjb25zdCBCaXRtYXAmIG90aGVyKSBjb25zdAogewotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29yZHM7ICsraSkgeworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbnVtYmVyT2ZXb3JkczsgKytpKSB7CiAgICAgICAgIFdvcmRUeXBlIG15Qml0cyA9
IGJpdHNbaV07CiAgICAgICAgIFdvcmRUeXBlIG90aGVyQml0cyA9IG90aGVyLmJpdHNbaV07CiAg
ICAgICAgIGlmICgobXlCaXRzIHwgb3RoZXJCaXRzKSAhPSBteUJpdHMpCkBAIC0zODEsMTYgKzM4
MSwxNiBAQCB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jPgogaW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBl
Pjo6Zm9yRWFjaFNldEJpdChjb25zdCBGdW5jJiBmdW5jKSBjb25zdAogewotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgd29yZHM7ICsraSkgeworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bnVtYmVyT2ZXb3JkczsgKytpKSB7CiAgICAgICAgIFdvcmRUeXBlIHdvcmQgPSBiaXRzW2ldOwot
ICAgICAgICBzaXplX3QgYmFzZSA9IGkgKiB3b3JkU2l6ZTsKKyAgICAgICAgc2l6ZV90IGJhc2Ug
PSBpICogYml0c0luV29yZDsKICAgICAgICAgc2l6ZV90IGogPSAwOwogICAgICAgICBmb3IgKDsg
d29yZDsgKytqKSB7CiAgICAgICAgICAgICBpZiAod29yZCAmIDEpCiAgICAgICAgICAgICAgICAg
ZnVuYyhiYXNlICsgaik7CiAgICAgICAgICAgICB3b3JkID4+PSAxOwogICAgICAgICB9Ci0gICAg
ICAgIEFTU0VSVChqIDw9IHdvcmRTaXplKTsKKyAgICAgICAgQVNTRVJUKGogPD0gYml0c0luV29y
ZCk7CiAgICAgfQogfQogCkBAIC0zOTgsMTUgKzM5OCwxNSBAQCB0ZW1wbGF0ZTxzaXplX3QgYml0
bWFwU2l6ZSwgdHlwZW5hbWUgV29yCiBpbmxpbmUgc2l6ZV90IEJpdG1hcDxiaXRtYXBTaXplLCBX
b3JkVHlwZT46OmZpbmRCaXQoc2l6ZV90IHN0YXJ0SW5kZXgsIGJvb2wgdmFsdWUpIGNvbnN0CiB7
CiAgICAgV29yZFR5cGUgc2tpcFZhbHVlID0gLShzdGF0aWNfY2FzdDxXb3JkVHlwZT4odmFsdWUp
IF4gMSk7Ci0gICAgc2l6ZV90IHdvcmRJbmRleCA9IHN0YXJ0SW5kZXggLyB3b3JkU2l6ZTsKLSAg
ICBzaXplX3Qgc3RhcnRJbmRleEluV29yZCA9IHN0YXJ0SW5kZXggLSB3b3JkSW5kZXggKiB3b3Jk
U2l6ZTsKKyAgICBzaXplX3Qgd29yZEluZGV4ID0gc3RhcnRJbmRleCAvIGJpdHNJbldvcmQ7Cisg
ICAgc2l6ZV90IHN0YXJ0SW5kZXhJbldvcmQgPSBzdGFydEluZGV4IC0gd29yZEluZGV4ICogYml0
c0luV29yZDsKICAgICAKLSAgICB3aGlsZSAod29yZEluZGV4IDwgd29yZHMpIHsKKyAgICB3aGls
ZSAod29yZEluZGV4IDwgbnVtYmVyT2ZXb3JkcykgewogICAgICAgICBXb3JkVHlwZSB3b3JkID0g
Yml0c1t3b3JkSW5kZXhdOwogICAgICAgICBpZiAod29yZCAhPSBza2lwVmFsdWUpIHsKICAgICAg
ICAgICAgIHNpemVfdCBpbmRleCA9IHN0YXJ0SW5kZXhJbldvcmQ7Ci0gICAgICAgICAgICBpZiAo
ZmluZEJpdEluV29yZCh3b3JkLCBpbmRleCwgd29yZFNpemUsIHZhbHVlKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gd29yZEluZGV4ICogd29yZFNpemUgKyBpbmRleDsKKyAgICAgICAgICAgIGlm
IChmaW5kQml0SW5Xb3JkKHdvcmQsIGluZGV4LCBiaXRzSW5Xb3JkLCB2YWx1ZSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHdvcmRJbmRleCAqIGJpdHNJbldvcmQgKyBpbmRleDsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgd29yZEluZGV4Kys7CkBAIC00MTksNyArNDE5LDcgQEAgaW5s
aW5lIHNpemVfdCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cAogdGVtcGxhdGU8c2l6ZV90IGJp
dG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgogaW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNp
emUsIFdvcmRUeXBlPjo6bWVyZ2VBbmRDbGVhcihCaXRtYXAmIG90aGVyKQogewotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgd29yZHM7ICsraSkgeworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbnVtYmVyT2ZXb3JkczsgKytpKSB7CiAgICAgICAgIGJpdHNbaV0gfD0gb3RoZXIuYml0c1tp
XTsKICAgICAgICAgb3RoZXIuYml0c1tpXSA9IDA7CiAgICAgfQpAQCAtNDI4LDcgKzQyOCw3IEBA
IGlubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT4KIHRlbXBsYXRlPHNpemVf
dCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSB2b2lkIEJpdG1hcDxiaXRt
YXBTaXplLCBXb3JkVHlwZT46OnNldEFuZENsZWFyKEJpdG1hcCYgb3RoZXIpCiB7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB3b3JkczsgKytpKSB7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBudW1iZXJPZldvcmRzOyArK2kpIHsKICAgICAgICAgYml0c1tpXSA9IG90aGVyLmJpdHNb
aV07CiAgICAgICAgIG90aGVyLmJpdHNbaV0gPSAwOwogICAgIH0KQEAgLTQ0MCwzNSArNDQwLDM1
IEBAIGlubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT4KICAgICBBU1NFUlQo
c3RhcnQgPD0gZW5kKTsKICAgICBBU1NFUlQoZW5kIDw9IGJpdG1hcFNpemUpOwogCi0gICAgc2l6
ZV90IHdvcmRJbmRleCA9IHN0YXJ0IC8gd29yZFNpemU7Ci0gICAgc2l6ZV90IGVuZFdvcmRJbmRl
eCA9IGVuZCAvIHdvcmRTaXplOwotICAgIHNpemVfdCBpbmRleCA9IHN0YXJ0IC0gd29yZEluZGV4
ICogd29yZFNpemU7CisgICAgc2l6ZV90IHdvcmRJbmRleCA9IHN0YXJ0IC8gYml0c0luV29yZDsK
KyAgICBzaXplX3QgZW5kV29yZEluZGV4ID0gZW5kIC8gYml0c0luV29yZDsKKyAgICBzaXplX3Qg
aW5kZXggPSBzdGFydCAtIHdvcmRJbmRleCAqIGJpdHNJbldvcmQ7CiAgICAgd2hpbGUgKHdvcmRJ
bmRleCA8IGVuZFdvcmRJbmRleCkgewotICAgICAgICB3aGlsZSAoaW5kZXggPCB3b3JkU2l6ZSkg
eworICAgICAgICB3aGlsZSAoaW5kZXggPCBiaXRzSW5Xb3JkKSB7CiAgICAgICAgICAgICBiaXRz
W3dvcmRJbmRleF0gfD0gKG9uZSA8PCBpbmRleCk7CiAgICAgICAgICAgICBpbmRleCArPSBuOwog
ICAgICAgICB9Ci0gICAgICAgIGluZGV4IC09IHdvcmRTaXplOworICAgICAgICBpbmRleCAtPSBi
aXRzSW5Xb3JkOwogICAgICAgICB3b3JkSW5kZXgrKzsKICAgICB9CiAKLSAgICBzaXplX3QgZW5k
SW5kZXggPSBlbmQgLSBlbmRXb3JkSW5kZXggKiB3b3JkU2l6ZTsKKyAgICBzaXplX3QgZW5kSW5k
ZXggPSBlbmQgLSBlbmRXb3JkSW5kZXggKiBiaXRzSW5Xb3JkOwogICAgIHdoaWxlIChpbmRleCA8
IGVuZEluZGV4KSB7CiAgICAgICAgIGJpdHNbd29yZEluZGV4XSB8PSAob25lIDw8IGluZGV4KTsK
ICAgICAgICAgaW5kZXggKz0gbjsKICAgICB9CiAKLSAgICBpZiBjb25zdGV4cHIgKCEhKGJpdG1h
cFNpemUgJSB3b3JkU2l6ZSkpIHsKLSAgICAgICAgY29uc3RleHByIHNpemVfdCByZW1haW5pbmdC
aXRzID0gYml0bWFwU2l6ZSAlIHdvcmRTaXplOworICAgIGlmIGNvbnN0ZXhwciAoISEoYml0bWFw
U2l6ZSAlIGJpdHNJbldvcmQpKSB7CisgICAgICAgIGNvbnN0ZXhwciBzaXplX3QgcmVtYWluaW5n
Qml0cyA9IGJpdG1hcFNpemUgJSBiaXRzSW5Xb3JkOwogICAgICAgICBjb25zdGV4cHIgV29yZFR5
cGUgbWFzayA9IChzdGF0aWNfY2FzdDxXb3JkVHlwZT4oMSkgPDwgcmVtYWluaW5nQml0cykgLSAx
OwotICAgICAgICBiaXRzW3dvcmRzIC0gMV0gJj0gbWFzazsKKyAgICAgICAgYml0c1tudW1iZXJP
ZldvcmRzIC0gMV0gJj0gbWFzazsKICAgICB9CiB9CiAKIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBT
aXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBX
b3JkVHlwZT46Om9wZXJhdG9yPT0oY29uc3QgQml0bWFwJiBvdGhlcikgY29uc3QKIHsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmRzOyArK2kpIHsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG51bWJlck9mV29yZHM7ICsraSkgewogICAgICAgICBpZiAoYml0c1tpXSAhPSBvdGhl
ci5iaXRzW2ldKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTQ4NCwyMSAr
NDg0LDIxIEBAIGlubGluZSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT4KIHRlbXBs
YXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSB2b2lkIEJp
dG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om9wZXJhdG9yfD0oY29uc3QgQml0bWFwJiBvdGhl
cikKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmRzOyArK2kpCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZldvcmRzOyArK2kpCiAgICAgICAgIGJpdHNbaV0gfD0g
b3RoZXIuYml0c1tpXTsKIH0KIAogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1l
IFdvcmRUeXBlPgogaW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6b3Bl
cmF0b3ImPShjb25zdCBCaXRtYXAmIG90aGVyKQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgd29yZHM7ICsraSkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mV29yZHM7
ICsraSkKICAgICAgICAgYml0c1tpXSAmPSBvdGhlci5iaXRzW2ldOwogfQogCiB0ZW1wbGF0ZTxz
aXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CiBpbmxpbmUgdm9pZCBCaXRtYXA8
Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpvcGVyYXRvcl49KGNvbnN0IEJpdG1hcCYgb3RoZXIpCiB7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JkczsgKytpKQorICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtYmVyT2ZXb3JkczsgKytpKQogICAgICAgICBiaXRzW2ldIF49IG90aGVy
LmJpdHNbaV07CiB9CiAKQEAgLTUwNiw3ICs1MDYsNyBAQCB0ZW1wbGF0ZTxzaXplX3QgYml0bWFw
U2l6ZSwgdHlwZW5hbWUgV29yCiBpbmxpbmUgdW5zaWduZWQgQml0bWFwPGJpdG1hcFNpemUsIFdv
cmRUeXBlPjo6aGFzaCgpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmRzOyArK2kpCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBudW1iZXJPZldvcmRzOyArK2kpCiAgICAgICAgIHJlc3VsdCBePSBJbnRIYXNoPFdvcmRU
eXBlPjo6aGFzaChiaXRzW2ldKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQo=
</data>
<flag name="review"
          id="417647"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402261</attachid>
            <date>2020-06-18 19:14:17 -0700</date>
            <delta_ts>2020-06-18 19:14:17 -0700</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-213345.patch</filename>
            <type>text/plain</type>
            <size>29900</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjYzMjIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBA
CisyMDIwLTA2LTE4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBV
bmlmeSBCaXRtYXAgbWF0aCBsb29wcyBpbiBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXpl
ZFN3ZWVwKCkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTMzNDUKKworICAgICAgICBSZXZpZXdlZCBieSBSb2JpbiBNb3Jpc3NldCBhbmQgU2FhbSBC
YXJhdGkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgYXBwZWFycyB0byBiZSBwZXJmb3JtYW5jZSBu
ZXV0cmFsLiAgSG93ZXZlciwgd2UnbGwgdGFrZSB0aGUgY2hhbmdlCisgICAgICAgIGJlY2F1c2Ug
d2Uga25vdyB0aGF0IGl0IGRvZXMgbGVzcyB3b3JrLCBhbmQgdGhlIG5ldyB3YXkgb2YgZXhwcmVz
c2luZyB0aGUgQml0bWFwCisgICAgICAgIG1hdGggaW4gTWFya2VkQmxvY2s6OkhhbmRsZTo6c3Bl
Y2lhbGl6ZWRTd2VlcCgpIGRvZXMgYXBwZWFyIHRvIGJlIGVhc2llciB0bworICAgICAgICB1bmRl
cnN0YW5kIHRoYW4gdGhlIG9sZCBjb2RlLgorCisgICAgICAgIEFsc28gYWRkcmVzc2VkIGZlZWRi
YWNrIGZyb20gUm9iaW4gYW5kIFNhYW0gaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxMzA3MS4KKworICAgICAgICBDaGFuZ2VzIG1hZGU6CisKKyAgICAgICAgMS4g
VXNlIHRoZSBuZXcgQml0bWFwOjp3b3JkcygpIEFQSSB0byBnZXQgZGlyZWN0IGFjY2VzcyB0byB0
aGUgdW5kZXJseWluZyBiaXRzCisgICAgICAgICAgIHN0b3JhZ2UuICBXaXRoIHRoaXMsIHdlIGNh
biBkbyB0aGUgbWVyZ2luZyBvZiB0aGUgbWFya2VkIGFuZCBuZXdseUFsbG9jYXRlZAorICAgICAg
ICAgICBiaXRzIHdpdGggYSBzaW5nbGUgcGFzcyBsb29waW5nIHRocnUgdGhlIGJpdG1hcCB3b3Jk
cy4KKworICAgICAgICAyLiBJbiBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZWVw
KCkncyBCaXRtYXAgZnJlZSBsaXN0IGNvZGUsIG1vdmVkIHRoZQorICAgICAgICAgICBpbXBsZW1l
bnRhdGlvbiBvZiBoYW5kbGVEZWFkQ2VsbHMgbGFtYmRhIGRvd24gdG8gdGhlIGNhbGwgdG8gZnJl
ZUF0b21zLmZvckVhY2hTZXRCaXQoKQorICAgICAgICAgICBiZWNhdXNlIHRoaXMgaXMgdGhlIG9u
bHkgcGxhY2UgaXQgaXMgdXNlZC4KKworICAgICAgICAzLiBGaXhlZCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpzcGVjaWFsaXplZFN3ZWVwKCkncyBCaXRtYXAgZnJlZSBsaXN0IGNvZGUgdG8KKyAgICAg
ICAgICAgaGFuZGxlIHRoZSBkZWFkIGNlbGxzIHVuY29uZGl0aW9uYWxseS4gIFRoaXMgY29uZGl0
aW9uIGNoZWNrIHdhcyB3cm9uZ2x5CisgICAgICAgICAgIGFkYXB0ZWQgZnJvbSB0aGUgbGlua2Vk
IGxpc3QgaW1wbGVtZW50YXRpb24gd2hlcmUgaGFuZGxlRGVhZENlbGwoKSB3YXMgY2FsbGVkCisg
ICAgICAgICAgIGluIDIgcGxhY2VzIGRlcGVuZGluZyBvbiB0aGUgZGVzdHJ1Y3Rpb24gbW9kZS4g
IFdpdGggdGhlIEJpdG1hcCBmcmVlIGxpc3QsCisgICAgICAgICAgIHRoZXJlIGlzIG9ubHkgb25j
ZSBwbGFjZSB0byBoYW5kbGUgdGhlIGRlYWQgY2VsbHMsIGFuZCBpdCBzaG91bGQgYmUgZXhlY3V0
ZWQKKyAgICAgICAgICAgdW5jb25kaXRpb25hbGx5LgorCisgICAgICAgICAgIFRoaXMgZml4ZXMg
YSBidWcgd2hlcmUgdGhlIEZyZWVMaXN0OjpvcmlnaW5hbFNpemUoKSBuZXZlciBnZXRzIGNvbXB1
dGVkIGlmIHRoZQorICAgICAgICAgICBjZWxscyBpbiB0aGUgYmxvY2sgZG9lcyBub3QgbmVlZCBk
ZXN0cnVjdGlvbi4KKworICAgICAgICA0LiBSZW5hbWVkIEZyZWVMaXN0OjpiaXRtYXBSb3dzKCkg
dG8gRnJlZUxpc3Q6OmJpdG1hcFJvd3NNaW51c09uZSgpLgorICAgICAgICAgICBSZW5hbWVkIEZy
ZWVMaXN0OjpvZmZzZXRPZkJpdG1hcFJvd3MoKSB0byBGcmVlTGlzdDo6b2Zmc2V0T2ZCaXRtYXBS
b3dzTWludXNPbmUoKS4KKworICAgICAgICA1LiBBbHNvIGZpeGVkIHNvbWUgdHlwb3MgaW4gY29t
bWVudHMuCisKKyAgICAgICAgKiBoZWFwL0ZyZWVMaXN0Lmg6CisgICAgICAgIChKU0M6OkZyZWVM
aXN0OjpiaXRtYXBJc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6Om9mZnNl
dE9mQml0bWFwUm93c01pbnVzT25lKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OmJpdG1hcFJv
d3NNaW51c09uZSBjb25zdCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0OjpvZmZzZXRPZkJpdG1h
cFJvd3MpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6Yml0bWFwUm93cyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9GcmVlTGlzdElubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6RnJlZUxpc3Q6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OmZvckVh
Y2ggY29uc3QpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXApOgorICAgICAgICAq
IGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6
OmVtaXRBbGxvY2F0ZVdpdGhOb25OdWxsQWxsb2NhdG9yKToKKwogMjAyMC0wNi0xOCAgQWxleGV5
IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgUHJvbWlzZSBidWls
dC1pbiBmdW5jdGlvbnMgc2hvdWxkIGJlIGFub255bW91cyBub24tY29uc3RydWN0b3JzCkBAIC0x
NDgsNyArMjAxLDcgQEAKIAogICAgICAgICA1LiBPbiB0aGUgbGF5b3V0IG9mIGZpZWxkcyBpbiBG
cmVlTGlzdCAoc2VlIGNoYW5nZXMgaW4gRnJlZUxpc3QuaCksIHdlIHRyeSB0bwogICAgICAgICAg
ICBwcmVzZXJ2ZSB0aGUgcG9zaXRpb25zIG9mIHRoZSBidW1wIGFsbG9jYXRvciBmaWVsZHMuICBU
aGUgb25seSBjaGFuZ2Ugd2UgbWFkZQotICAgICAgICAgICB0aGVyZSBpcyBuIHRoZSBsb2NhdGlv
biBvZiBtX2NlbGxTaXplLiAgSXQgaXMgbm93IG1vdmVkIHVwIG5leHQgdG8gbV9yZW1haW5pbmcs
CisgICAgICAgICAgIHRoZXJlIGlzIGluIHRoZSBsb2NhdGlvbiBvZiBtX2NlbGxTaXplLiAgSXQg
aXMgbm93IG1vdmVkIHVwIG5leHQgdG8gbV9yZW1haW5pbmcsCiAgICAgICAgICAgIGFuZCBtX29y
aWdpbmFsU2l6ZSBpcyBtb3ZlZCBkb3duLiAgVGhpcyBpcyBiZWNhdXNlIG1fb3JpZ2luYWxTaXpl
IGlzIG9ubHkKICAgICAgICAgICAgYWNjZXNzZWQgaW4gdGhlIHNsb3cgcGF0aCwgYW5kIG1fY2Vs
bFNpemUgaXMgYWNjZXNzZWQgaW4gdGhlIGJ1bXAgYWxsb2NhdGlvbgogICAgICAgICAgICBwYXRo
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5oCShyZXZpc2lvbiAyNjMx
OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgLy8gUmVtZW1i
ZXIsIHdlIGRvbid0IGFjdHVhbGx5IGNsZWFyIHRoZSBiaXRzIGluIG1fYml0bWFwIGFzIHdlIGFs
bG9jYXRlCiAgICAgICAgIC8vIHRoZSBhdG9tcy4gSW5zdGVhZCwgbV9jdXJyZW50Um93Qml0bWFw
IGFuZCBtX2N1cnJlbnRSb3dJbmRleCB0ZWxscyB1cwotICAgICAgICAvLyBpZiB0aGVyZSBhdG9t
cyBzdGlsbCBhdmFpbGFibGUgZm9yIGFsbG9jYXRpb24uIFNlZSBjb21tZW50IGJsb2IgYmVsb3cK
KyAgICAgICAgLy8gaWYgdGhlcmUgYXJlIGF0b21zIHN0aWxsIGF2YWlsYWJsZSBmb3IgYWxsb2Nh
dGlvbi4gU2VlIGNvbW1lbnQgYmxvYiBiZWxvdwogICAgICAgICAvLyBhdCB0aGUgZGVjbGFyYXRp
b24gb2YgbV9jdXJyZW50Um93SW5kZXggZm9yIG1vcmUgZGV0YWlscy4KICAgICAgICAgcmV0dXJu
ICFtX2N1cnJlbnRSb3dCaXRtYXAgJiYgIW1fY3VycmVudFJvd0luZGV4OwogICAgIH0KQEAgLTEx
Niw3ICsxMTYsNyBAQCBwdWJsaWM6CiAgICAgLy8gV2UncmUgZGVsaWJlcmF0ZWx5IHJldHVybmlu
ZyB0aGUgYWRkcmVzcyBvZiAxIHdvcmQgYmVmb3JlIG1fYml0bWFwIHNvIHRoYXQKICAgICAvLyB3
ZSBjYW4gc2NoZWR1bGUgaW5zdHJ1Y3Rpb25zIGJldHRlciBpLmUuIHRvIGRvIGEgbG9hZCBiZWZv
cmUgZGVjcmVtZW50aW5nIHRoZQogICAgIC8vIHJvdyBpbmRleC4KLSAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mQml0bWFwUm93cygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlz
dCwgbV9iaXRtYXApIC0gc2l6ZW9mKEF0b21zQml0bWFwOjpXb3JkKTsgfQorICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZCaXRtYXBSb3dzTWludXNPbmUoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoRnJlZUxpc3QsIG1fYml0bWFwKSAtIHNpemVvZihBdG9tc0JpdG1hcDo6V29yZCk7IH0K
IAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDdXJyZW50Um93SW5kZXgoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3QsIG1fY3VycmVudFJvd0luZGV4KTsgfQogICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDdXJyZW50TWFya2VkQmxvY2tSb3dBZGRyZXNzKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBtX2N1cnJlbnRNYXJrZWRCbG9ja1Jvd0Fk
ZHJlc3MpOyB9CkBAIC0xNDEsOSArMTQxLDkgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShCSVRN
QVBfRlJFRUxJU1QpCiAgICAgQXRvbXNCaXRtYXAmIGF0b21zQml0bWFwKCkgeyByZXR1cm4gbV9i
aXRtYXA7IH0KLSAgICBBdG9tc0JpdG1hcDo6V29yZCogYml0bWFwUm93cygpIGNvbnN0CisgICAg
QXRvbXNCaXRtYXA6OldvcmQqIGJpdG1hcFJvd3NNaW51c09uZSgpIGNvbnN0CiAgICAgewotICAg
ICAgICAvLyBTZWUgY29tbWVudCBhYm91dCBvZmZzZXRPZkJpdG1hcFJvd3MoKS4KKyAgICAgICAg
Ly8gU2VlIGNvbW1lbnQgYWJvdXQgb2Zmc2V0T2ZCaXRtYXBSb3dzTWludXNPbmUoKS4KICAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxBdG9tc0JpdG1hcDo6V29yZCo+KCZtX2JpdG1hcCkgLSAx
OwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3RJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3RJ
bmxpbmVzLmgJKHJldmlzaW9uIDI2MzE5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0ZyZWVMaXN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMCArNTYsMTAgQEAgQUxX
QVlTX0lOTElORSBIZWFwQ2VsbCogRnJlZUxpc3Q6OmFsbG9jYQogICAgICAgICB1bnNpZ25lZCBy
b3dJbmRleCA9IG1fY3VycmVudFJvd0luZGV4OwogICAgICAgICBhdXRvKiByb3dBZGRyZXNzID0g
bV9jdXJyZW50TWFya2VkQmxvY2tSb3dBZGRyZXNzOwogICAgICAgICB3aGlsZSAocm93SW5kZXgp
IHsKLSAgICAgICAgICAgIC8vIFdlIGxvYWQgYmVmb3JlIGRlY3JlbWVudGluZyByb3dJbmRleCBi
ZWNhdXNlIGJpdG1hcFJvd3MoKSBwb2ludHMKLSAgICAgICAgICAgIC8vIHRvIDEgd29yZCBiZWZv
cmUgbV9iaXRtYXAuIFNlZSBjb21tZW50cyBhYm91dCBvZmZzZXRPZkJpdG1hcFJvd3MoKQorICAg
ICAgICAgICAgLy8gV2UgbG9hZCBiZWZvcmUgZGVjcmVtZW50aW5nIHJvd0luZGV4IGJlY2F1c2Ug
Yml0bWFwUm93c01pbnVzT25lKCkgcG9pbnRzCisgICAgICAgICAgICAvLyB0byAxIHdvcmQgYmVm
b3JlIG1fYml0bWFwLiBTZWUgY29tbWVudHMgYWJvdXQgb2Zmc2V0T2ZCaXRtYXBSb3dzTWludXNP
bmUoKQogICAgICAgICAgICAgLy8gZm9yIHdoeSB3ZSBkbyB0aGlzLgotICAgICAgICAgICAgcm93
Qml0bWFwID0gYml0bWFwUm93cygpW3Jvd0luZGV4LS1dOworICAgICAgICAgICAgcm93Qml0bWFw
ID0gYml0bWFwUm93c01pbnVzT25lKClbcm93SW5kZXgtLV07CiAgICAgICAgICAgICByb3dBZGRy
ZXNzIC09IGF0b21zUGVyUm93OwogICAgICAgICAgICAgaWYgKHJvd0JpdG1hcCkKICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTEwNiwxMCArMTA2LDEwIEBAIHZvaWQgRnJlZUxpc3Q6OmZvckVh
Y2goY29uc3QgRnVuYyYgZnVuYykKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgd2hpbGUg
KHJvd0luZGV4KSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgbG9hZCBiZWZvcmUgZGVjcmVtZW50
aW5nIHJvd0luZGV4IGJlY2F1c2UgYml0bWFwUm93cygpIHBvaW50cwotICAgICAgICAgICAgICAg
IC8vIHRvIDEgd29yZCBiZWZvcmUgbV9iaXRtYXAuIFNlZSBjb21tZW50cyBhYm91dCBvZmZzZXRP
ZkJpdG1hcFJvd3MoKQorICAgICAgICAgICAgICAgIC8vIFdlIGxvYWQgYmVmb3JlIGRlY3JlbWVu
dGluZyByb3dJbmRleCBiZWNhdXNlIGJpdG1hcFJvd3NNaW51c09uZSgpIHBvaW50cworICAgICAg
ICAgICAgICAgIC8vIHRvIDEgd29yZCBiZWZvcmUgbV9iaXRtYXAuIFNlZSBjb21tZW50cyBhYm91
dCBvZmZzZXRPZkJpdG1hcFJvd3NNaW51c09uZSgpCiAgICAgICAgICAgICAgICAgLy8gZm9yIHdo
eSB3ZSBkbyB0aGlzLgotICAgICAgICAgICAgICAgIHJvd0JpdG1hcCA9IGJpdG1hcFJvd3MoKVty
b3dJbmRleC0tXTsKKyAgICAgICAgICAgICAgICByb3dCaXRtYXAgPSBiaXRtYXBSb3dzTWludXNP
bmUoKVtyb3dJbmRleC0tXTsKICAgICAgICAgICAgICAgICBjdXJyZW50TWFya2VkQmxvY2tSb3dB
ZGRyZXNzIC09IGF0b21zUGVyUm93OwogICAgICAgICAgICAgICAgIGlmIChyb3dCaXRtYXApCiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDI2MzE5NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNjQsNiArMjY0LDExIEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6
ZWRTd2UKICAgICAKICAgICBtX2RpcmVjdG9yeS0+c2V0SXNEZXN0cnVjdGlibGUoTm9Mb2NraW5n
TmVjZXNzYXJ5LCB0aGlzLCBmYWxzZSk7CiAgICAgCisgICAgY2hhciogc3RhcnRPZkxhc3RDZWxs
ID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGNlbGxBbGlnbihibG9jay5hdG9tcygpICsgbV9lbmRBdG9t
IC0gMSkpOworICAgIGNoYXIqIHBheWxvYWRFbmQgPSBzdGFydE9mTGFzdENlbGwgKyBjZWxsU2l6
ZTsKKyAgICBSRUxFQVNFX0FTU0VSVChwYXlsb2FkRW5kIC0gTWFya2VkQmxvY2s6OmJsb2NrU2l6
ZSA8PSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KCZibG9jaykpOworICAgIGNoYXIqIHBheWxvYWRCZWdp
biA9IGJpdHdpc2VfY2FzdDxjaGFyKj4oYmxvY2suYXRvbXMoKSk7CisKICAgICBpZiAoT3B0aW9u
czo6dXNlQnVtcEFsbG9jYXRvcigpCiAgICAgICAgICYmIGVtcHR5TW9kZSA9PSBJc0VtcHR5CiAg
ICAgICAgICYmIG5ld2x5QWxsb2NhdGVkTW9kZSA9PSBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVk
KSB7CkBAIC0yODAsMTEgKzI4NSw2IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lh
bGl6ZWRTd2UKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgY2hhciogc3RhcnRPZkxhc3RDZWxsID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGNlbGxBbGlnbihi
bG9jay5hdG9tcygpICsgbV9lbmRBdG9tIC0gMSkpOwotICAgICAgICBjaGFyKiBwYXlsb2FkRW5k
ID0gc3RhcnRPZkxhc3RDZWxsICsgY2VsbFNpemU7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHBh
eWxvYWRFbmQgLSBNYXJrZWRCbG9jazo6YmxvY2tTaXplIDw9IGJpdHdpc2VfY2FzdDxjaGFyKj4o
JmJsb2NrKSk7Ci0gICAgICAgIGNoYXIqIHBheWxvYWRCZWdpbiA9IGJpdHdpc2VfY2FzdDxjaGFy
Kj4oYmxvY2suYXRvbXMoKSk7Ci0gICAgICAgIAogICAgICAgICBpZiAoc3dlZXBNb2RlID09IFN3
ZWVwVG9GcmVlTGlzdCkKICAgICAgICAgICAgIHNldElzRnJlZUxpc3RlZCgpOwogICAgICAgICBp
ZiAoc3BhY2UoKS0+aXNNYXJraW5nKCkpCkBAIC0zMDQsNDQgKzMwNCw2MCBAQCB2b2lkIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlCiAgICAgfQogCiAjaWYgRU5BQkxFKEJJVE1B
UF9GUkVFTElTVCkKKyAgICAvLyBUaGUgY29kZSBiZWxvdyBpcyBhbiBvcHRpbWl6ZWQgdmVyc2lv
biBvZiB0aGUgZm9sbG93aW5nIGJ5IG1lcmdpbmcgdGhlCisgICAgLy8gdmFyaW91cyBsb29wcyBv
dmVyIHRoZSBiaXRtYXBzLgorICAgIC8vCisgICAgLy8gICAgQXRvbXNCaXRtYXAgY2VsbExvY2F0
aW9uczsKKyAgICAvLyAgICBjZWxsTG9jYXRpb25zLnNldEVhY2hOdGhCaXQobV9hdG9tc1BlckNl
bGwsIDAsIG1fZW5kQXRvbSk7CisgICAgLy8KKyAgICAvLyAgICBpZiAoZW1wdHlNb2RlID09IE5v
dEVtcHR5KSB7CisgICAgLy8gICAgICAgIGlmIChtYXJrc01vZGUgPT0gTWFya3NOb3RTdGFsZSkg
eworICAgIC8vICAgICAgICAgICAgZnJlZUF0b21zID0gZm9vdGVyLm1fbWFya3M7CisgICAgLy8g
ICAgICAgICAgICBpZiAobmV3bHlBbGxvY2F0ZWRNb2RlID09IEhhc05ld2x5QWxsb2NhdGVkKQor
ICAgIC8vICAgICAgICAgICAgICAgIGZyZWVBdG9tcyB8PSBmb290ZXIubV9uZXdseUFsbG9jYXRl
ZDsKKyAgICAvLyAgICAgICAgfSBlbHNlIGlmIChuZXdseUFsbG9jYXRlZE1vZGUgPT0gSGFzTmV3
bHlBbGxvY2F0ZWQpCisgICAgLy8gICAgICAgICAgICBmcmVlQXRvbXMgPSBmb290ZXIubV9uZXds
eUFsbG9jYXRlZDsKKyAgICAvLyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgYSBzZXQgYml0IGlu
IGZyZWVBdG9tcyByZXByZXNlbnRzIGxpdmUgY2VsbHMuCisgICAgLy8gICAgICAgIGlzRW1wdHkg
PSBmcmVlQXRvbXMuaXNFbXB0eSgpOworICAgIC8vCisgICAgLy8gICAgICAgIC8vIEludmVydCB0
aGUgYml0cyBhdCBlYWNoIGNlbGwgbG9jYXRpb24gc28gdGhhdCB0aGUgb25lcyBmb3IgbGl2ZSBj
ZWxscworICAgIC8vICAgICAgICAvLyBhcmUgY2xlYXJlZCwgYW5kIHRoZSBvbmVzIGZvciBkZWFk
IGNlbGxzIGFyZSBzZXQuCisgICAgLy8gICAgICAgIGZyZWVBdG9tcyBePSBjZWxsTG9jYXRpb25z
OworICAgIC8vICAgIH0gZWxzZQorICAgIC8vICAgICAgICBmcmVlQXRvbXMgPSBjZWxsTG9jYXRp
b25zOyAvLyBhbGwgY2VsbHMgYXJlIGZyZWUuCisKICAgICBBdG9tc0JpdG1hcCBsb2NhbEZyZWVB
dG9tczsKICAgICBBdG9tc0JpdG1hcCYgZnJlZUF0b21zID0gZnJlZUxpc3QgPyBmcmVlTGlzdC0+
YXRvbXNCaXRtYXAoKSA6IGxvY2FsRnJlZUF0b21zOwotICAgIHNpemVfdCBjb3VudCA9IDA7Ci0K
LSAgICBhdXRvIGhhbmRsZURlYWRDZWxsID0gWyZdIChzaXplX3QgaSkgewotICAgICAgICBIZWFw
Q2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEhlYXBDZWxsKj4oYXRvbUF0KGkpKTsK
IAotICAgICAgICBpZiAoZGVzdHJ1Y3Rpb25Nb2RlICE9IEJsb2NrSGFzTm9EZXN0cnVjdG9ycykK
LSAgICAgICAgICAgIGRlc3Ryb3koY2VsbCk7CisgICAgQXRvbXNCaXRtYXA6OldvcmQqIGZyZWUg
PSBmcmVlQXRvbXMud29yZHMoKTsKKyAgICBBdG9tc0JpdG1hcDo6V29yZCogbWFya3MgPSBmb290
ZXIubV9tYXJrcy53b3JkcygpOworICAgIEF0b21zQml0bWFwOjpXb3JkKiBuZXdseUFsbG9jYXRl
ZCA9IGZvb3Rlci5tX25ld2x5QWxsb2NhdGVkLndvcmRzKCk7CisKKyAgICB1bnNpZ25lZCByb3Vu
ZGVkVXBFbmRBdG9tcyA9IHJvdW5kVXBUb011bHRpcGxlT2Y8QXRvbXNCaXRtYXA6OmJpdHNJbldv
cmQ+KG1fZW5kQXRvbSk7CisgICAgdW5zaWduZWQgZW5kV29yZEluZGV4ID0gcm91bmRlZFVwRW5k
QXRvbXMgLyBBdG9tc0JpdG1hcDo6Yml0c0luV29yZDsKKyAgICBBU1NFUlQobV9lbmRBdG9tIDw9
IGVuZFdvcmRJbmRleCAqIEF0b21zQml0bWFwOjpiaXRzSW5Xb3JkKTsKKworICAgIGlmIChmcmVl
TGlzdCkKKyAgICAgICAgZnJlZUF0b21zLmNsZWFyQWxsKCk7CisgICAgZnJlZUF0b21zLnNldEVh
Y2hOdGhCaXQobV9hdG9tc1BlckNlbGwsIDAsIG1fZW5kQXRvbSk7CiAKLSAgICAgICAgaWYgKHN3
ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpIHsKLSAgICAgICAgICAgIGlmIChzY3JpYmJsZU1v
ZGUgPT0gU2NyaWJibGUpCi0gICAgICAgICAgICAgICAgc2NyaWJibGUoY2VsbCwgY2VsbFNpemUp
OwotICAgICAgICAgICAgKytjb3VudDsKKyAgICBpZiAoZW1wdHlNb2RlID09IE5vdEVtcHR5KSB7
CisgICAgICAgIGlmIChtYXJrc01vZGUgPT0gTWFya3NOb3RTdGFsZSAmJiBuZXdseUFsbG9jYXRl
ZE1vZGUgPT0gSGFzTmV3bHlBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBlbmRXb3JkSW5kZXg7ICsraSkKKyAgICAgICAgICAgICAgICBmcmVlW2ldIF49
IG1hcmtzW2ldIHwgbmV3bHlBbGxvY2F0ZWRbaV07CisKKyAgICAgICAgfSBlbHNlIGlmIChtYXJr
c01vZGUgPT0gTWFya3NOb3RTdGFsZSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGVuZFdvcmRJbmRleDsgKytpKQorICAgICAgICAgICAgICAgIGZyZWVbaV0gXj0gbWFy
a3NbaV07CisKKyAgICAgICAgfSBlbHNlIGlmIChuZXdseUFsbG9jYXRlZE1vZGUgPT0gSGFzTmV3
bHlBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbmRX
b3JkSW5kZXg7ICsraSkKKyAgICAgICAgICAgICAgICBmcmVlW2ldIF49IG5ld2x5QWxsb2NhdGVk
W2ldOwogICAgICAgICB9Ci0gICAgfTsKLQotICAgIGJvb2wgaXNFbXB0eSA9IHRydWU7CisgICAg
fQogCi0gICAgQXRvbXNCaXRtYXAgY2VsbExvY2F0aW9uczsKLSAgICBjZWxsTG9jYXRpb25zLnNl
dEVhY2hOdGhCaXQobV9hdG9tc1BlckNlbGwsIDAsIG1fZW5kQXRvbSk7CisgICAgLy8gQXQgdGhp
cyBwb2ludCwgYSBzZXQgYml0IGluIGZyZWVBdG9tcyByZXByZXNlbnRzIGEgZGVhZCBjZWxsLgog
Ci0gICAgaWYgKGVtcHR5TW9kZSA9PSBOb3RFbXB0eSkgewotICAgICAgICBpZiAobWFya3NNb2Rl
ID09IE1hcmtzTm90U3RhbGUpIHsKLSAgICAgICAgICAgIGZyZWVBdG9tcyA9IGZvb3Rlci5tX21h
cmtzOwotICAgICAgICAgICAgaWYgKG5ld2x5QWxsb2NhdGVkTW9kZSA9PSBIYXNOZXdseUFsbG9j
YXRlZCkKLSAgICAgICAgICAgICAgICBmcmVlQXRvbXMgfD0gZm9vdGVyLm1fbmV3bHlBbGxvY2F0
ZWQ7Ci0gICAgICAgIH0gZWxzZSBpZiAobmV3bHlBbGxvY2F0ZWRNb2RlID09IEhhc05ld2x5QWxs
b2NhdGVkKQotICAgICAgICAgICAgZnJlZUF0b21zID0gZm9vdGVyLm1fbmV3bHlBbGxvY2F0ZWQ7
Ci0gICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIGEgc2V0IGJpdCBpbiBmcmVlQXRvbXMgcmVwcmVz
ZW50cyBsaXZlIGNlbGxzLgotICAgICAgICBpc0VtcHR5ID0gZnJlZUF0b21zLmlzRW1wdHkoKTsK
LQotICAgICAgICAvLyBJbnZlcnQgdGhlIGJpdHMgYXQgZWFjaCBjZWxsIGxvY2F0aW9uIHNvIHRo
YXQgdGhlIG9uZXMgZm9yIGxpdmUgY2VsbHMKLSAgICAgICAgLy8gYXJlIGNsZWFyZWQsIGFuZCB0
aGUgb25lcyBmb3IgZGVhZCBjZWxscyBhcmUgc2V0LgotICAgICAgICBmcmVlQXRvbXMgXj0gY2Vs
bExvY2F0aW9uczsKLSAgICB9IGVsc2UKLSAgICAgICAgZnJlZUF0b21zID0gY2VsbExvY2F0aW9u
czsgLy8gYWxsIGNlbGxzIGFyZSBmcmVlLgotICAgIAogICAgIC8vIFdlIG9ubHkgd2FudCB0byBk
aXNjYXJkIHRoZSBuZXdseUFsbG9jYXRlZCBiaXRzIGlmIHdlJ3JlIGNyZWF0aW5nIGEgRnJlZUxp
c3QsCiAgICAgLy8gb3RoZXJ3aXNlIHdlIHdvdWxkIGxvc2UgaW5mb3JtYXRpb24gb24gd2hhdCdz
IGN1cnJlbnRseSBhbGl2ZS4KICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCAm
JiBuZXdseUFsbG9jYXRlZE1vZGUgPT0gSGFzTmV3bHlBbGxvY2F0ZWQpCkBAIC0zNTAsMTEgKzM2
NiwyNSBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlCiAgICAgaWYg
KHNwYWNlKCktPmlzTWFya2luZygpKQogICAgICAgICBmb290ZXIubV9sb2NrLnVubG9jaygpOwog
Ci0gICAgaWYgKGRlc3RydWN0aW9uTW9kZSAhPSBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMpCi0gICAg
ICAgIGZyZWVBdG9tcy5mb3JFYWNoU2V0Qml0KGhhbmRsZURlYWRDZWxsKTsKKyAgICAvLyBIYW5k
bGUgZGVhZCBjZWxscy4KKyAgICB1bnNpZ25lZCBkZWFkQ2VsbENvdW50ID0gMDsKKyAgICBmcmVl
QXRvbXMuZm9yRWFjaFNldEJpdChbJl0gKHNpemVfdCBpKSB7CisgICAgICAgIEhlYXBDZWxsKiBj
ZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwqPihhdG9tQXQoaSkpOworCisgICAg
ICAgIGlmIChkZXN0cnVjdGlvbk1vZGUgIT0gQmxvY2tIYXNOb0Rlc3RydWN0b3JzKQorICAgICAg
ICAgICAgZGVzdHJveShjZWxsKTsKKworICAgICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9G
cmVlTGlzdCkgeworICAgICAgICAgICAgaWYgKHNjcmliYmxlTW9kZSA9PSBTY3JpYmJsZSkKKyAg
ICAgICAgICAgICAgICBzY3JpYmJsZShjZWxsLCBjZWxsU2l6ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgKytkZWFkQ2VsbENvdW50OworICAgIH0pOwogCisgICAgdW5zaWduZWQgbnVtYmVyT2ZDZWxs
c0luQmxvY2sgPSAocGF5bG9hZEVuZCAtIHBheWxvYWRCZWdpbikgLyBjZWxsU2l6ZTsKKyAgICBi
b29sIGlzRW1wdHkgPSAoZGVhZENlbGxDb3VudCA9PSBudW1iZXJPZkNlbGxzSW5CbG9jayk7CiAg
ICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpIHsKLSAgICAgICAgZnJlZUxpc3Qt
PmluaXRpYWxpemVBdG9tc0JpdG1hcCh0aGlzLCBmcmVlQXRvbXMsIGNvdW50ICogY2VsbFNpemUp
OworICAgICAgICBmcmVlTGlzdC0+aW5pdGlhbGl6ZUF0b21zQml0bWFwKHRoaXMsIGZyZWVBdG9t
cywgZGVhZENlbGxDb3VudCAqIGNlbGxTaXplKTsKICAgICAgICAgc2V0SXNGcmVlTGlzdGVkKCk7
CiAgICAgfSBlbHNlIGlmIChpc0VtcHR5KQogICAgICAgICBtX2RpcmVjdG9yeS0+c2V0SXNFbXB0
eShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMsIHRydWUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjYzMTk1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01OTEsMTAgKzU5MSwxMCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9j
YXRlV2l0aE5vCiAgICAgewogICAgICAgICAvLyBMb2FkIHRoZSBuZXh0IHJvdyBiaXRtYXAgYW5k
IHBvaW50IG1fY3VycmVudE1hcmtlZEJsb2NrUm93QWRkcmVzcyB0byB0aGUgbmV4dCByb3cuCiAK
LSAgICAgICAgLy8gTm90ZTogb2Zmc2V0T2ZCaXRtYXBSb3dzKCkgcG9pbnRzIHRvIDEgd29yZCBi
ZWZvcmUgbV9iaXRtYXAuIFdlIGRvIHRoaXMKKyAgICAgICAgLy8gTm90ZTogb2Zmc2V0T2ZCaXRt
YXBSb3dzTWludXNPbmUoKSBwb2ludHMgdG8gMSB3b3JkIGJlZm9yZSBtX2JpdG1hcC4gV2UgZG8g
dGhpcwogICAgICAgICAvLyBkZWxpYmVyYXRlbHkgYmVjYXVzZSBpdCBhbGxvd3MgdXMgdG8gc2No
ZWR1bGUgaW5zdHJ1Y3Rpb25zIGJldHRlciBhbmQKICAgICAgICAgLy8gZG8gdGhpcyBsb2FkIGJl
Zm9yZSB0aGUgZGVjcmVtZW50IGJlbG93LgotICAgICAgICBsb2FkNjQoQmFzZUluZGV4KGFsbG9j
YXRvckdQUiwgcm93SW5kZXhHUFIsIFRpbWVzRWlnaHQsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRP
ZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZCaXRtYXBSb3dzKCkpLCByb3dCaXRtYXBH
UFIpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KGFsbG9jYXRvckdQUiwgcm93SW5kZXhHUFIs
IFRpbWVzRWlnaHQsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlz
dDo6b2Zmc2V0T2ZCaXRtYXBSb3dzTWludXNPbmUoKSksIHJvd0JpdG1hcEdQUik7CiAKICAgICAg
ICAgc3ViNjQoVHJ1c3RlZEltbTMyKDEpLCByb3dJbmRleEdQUik7CiAgICAgICAgIHN1YlB0cihU
cnVzdGVkSW1tMzIoRnJlZUxpc3Q6OmF0b21zUm93Qnl0ZXMpLCByb3dBZGRyZXNzR1BSKTsKSW5k
ZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCShyZXZpc2lvbiAyNjMxOTUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDIwLTA2LTE4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFw
cGxlLmNvbT4KKworICAgICAgICBVbmlmeSBCaXRtYXAgbWF0aCBsb29wcyBpbiBNYXJrZWRCbG9j
azo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZWVwKCkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTMzNDUKKworICAgICAgICBSZXZpZXdlZCBieSBSb2Jp
biBNb3Jpc3NldCBhbmQgU2FhbSBCYXJhdGkuCisKKyAgICAgICAgMS4gUmVtb3ZlZCBCaXRtYXA6
OndvcmRzLiAgVXNlIEJpdG1hcDo6bnVtYmVyT2ZXb3JkcyBpbnN0ZWFkLgorICAgICAgICAyLiBS
ZW1vdmVkIEJpdG1hcDo6d29yZFNpemUuICBVc2UgQml0bWFwOjpiaXRzSW5Xb3JkIGluc3RlYWQu
CisgICAgICAgIDMuIEFkZGVkIGEgbmV3IEJpdG1hcDo6d29yZHMoKSBtZXRob2Qgd2hpY2ggcmV0
dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgdW5kZXJseWluZworICAgICAgICAgICBiaXRtYXAgc3Rv
cmFnZSBhcyBhIEJpdG1hcDo6V29yZCouICBUaGlzIGVuYWJsZXMgY2xpZW50cyB0byBkbyBkaXJl
Y3QgYml0CisgICAgICAgICAgIG1hbmlwdWxhdGlvbiBvbiB0aGUgQml0bWFwIHdvcmRzIGlmIG5l
ZWRlZC4KKworICAgICAgICAqIHd0Zi9CaXRtYXAuaDoKKyAgICAgICAgKFdURjo6V29yZFR5cGU+
OjpnZXQgY29uc3QpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46OnNldCk6CisgICAgICAgIChX
VEY6OldvcmRUeXBlPjo6dGVzdEFuZFNldCk6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6dGVz
dEFuZENsZWFyKToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+Ojpjb25jdXJyZW50VGVzdEFuZFNl
dCk6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6Y29uY3VycmVudFRlc3RBbmRDbGVhcik6Cisg
ICAgICAgIChXVEY6OldvcmRUeXBlPjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46
OmludmVydCk6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6bmV4dFBvc3NpYmx5VW5zZXQgY29u
c3QpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46OmNvdW50IGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6V29yZFR5cGU+Ojppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+Ojpp
c0Z1bGwgY29uc3QpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46Om1lcmdlKToKKyAgICAgICAg
KFdURjo6V29yZFR5cGU+OjpmaWx0ZXIpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46OmV4Y2x1
ZGUpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46OmNvbmN1cnJlbnRGaWx0ZXIpOgorICAgICAg
ICAoV1RGOjpXb3JkVHlwZT46OnN1YnN1bWVzIGNvbnN0KToKKyAgICAgICAgKFdURjo6V29yZFR5
cGU+Ojpmb3JFYWNoU2V0Qml0IGNvbnN0KToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+OjpmaW5k
Qml0IGNvbnN0KToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+OjptZXJnZUFuZENsZWFyKToKKyAg
ICAgICAgKFdURjo6V29yZFR5cGU+OjpzZXRBbmRDbGVhcik6CisgICAgICAgIChXVEY6OldvcmRU
eXBlPjo6c2V0RWFjaE50aEJpdCk6CisgICAgICAgIChXVEY6Oj0gY29uc3QpOgorICAgICAgICAo
V1RGOjo9KToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+OjpoYXNoIGNvbnN0KToKKwogMjAyMC0w
Ni0xNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVwbGFjZSBK
U0M6OkZyZWVMaXN0IGxpbmtlZCBsaXN0IHdpdGggYSBCaXRtYXAuCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9CaXRtYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAkocmV2
aXNpb24gMjYzMTk1KQorKysgU291cmNlL1dURi93dGYvQml0bWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEzNSwxMSArMTM1LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgYml0c0luV29yZCA9IGNvdW50T2ZCaXRzPFdvcmRUeXBlPjsKICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIG51bWJlck9mV29yZHMgPSAoYml0bWFwU2l6ZSArIGJpdHNJbldvcmQgLSAx
KSAvIGJpdHNJbldvcmQ7CiAgICAgV29yZFR5cGUgd29yZEF0KHNpemVfdCB3b3JkSW5kZXgpIGNv
bnN0IHsgcmV0dXJuIGJpdHNbd29yZEluZGV4XTsgfQorICAgIFdvcmQqIHdvcmRzKCkgeyByZXR1
cm4gYml0d2lzZV9jYXN0PFdvcmQqPigmYml0cyk7IH0KIAogcHJpdmF0ZToKLSAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIHdvcmRTaXplID0gYml0c0luV29yZDsKLSAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIHdvcmRzID0gbnVtYmVyT2ZXb3JkczsKLQogICAgIC8vIHRoZSBsaXRl
cmFsICcxJyBpcyBvZiB0eXBlIHNpZ25lZCBpbnQuICBXZSB3YW50IHRvIHVzZSBhbiB1bnNpZ25l
ZAogICAgIC8vIHZlcnNpb24gb2YgdGhlIGNvcnJlY3Qgc2l6ZSB3aGVuIGRvaW5nIHRoZSBjYWxj
dWxhdGlvbnMgYmVjYXVzZSBpZgogICAgIC8vIFdvcmRUeXBlIGlzIGxhcmdlciB0aGFuIGludCwg
JzEgPDwgMzEnIHdpbGwgZmlyc3QgYmUgc2lnbiBleHRlbmRlZApAQCAtMTQ3LDcgKzE0NSw3IEBA
IHByaXZhdGU6CiAgICAgLy8gYSA2NCBiaXQgdW5zaWduZWQgaW50IHdvdWxkIGdpdmUgMHhmZmZm
ODAwMAogICAgIHN0YXRpYyBjb25zdGV4cHIgV29yZFR5cGUgb25lID0gMTsKIAotICAgIHN0ZDo6
YXJyYXk8V29yZFR5cGUsIHdvcmRzPiBiaXRzOworICAgIHN0ZDo6YXJyYXk8V29yZFR5cGUsIG51
bWJlck9mV29yZHM+IGJpdHM7CiB9OwogCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlw
ZW5hbWUgV29yZFR5cGU+CkBAIC0xNTksMTMgKzE1NywxMyBAQCBjb25zdGV4cHIgQml0bWFwPGJp
dG1hcFNpemUsIFdvcmRUeXBlPjo6CiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5h
bWUgV29yZFR5cGU+CiBpbmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+Ojpn
ZXQoc2l6ZV90IG4sIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkgY29uc3QKIHsKLSAgICByZXR1cm4g
ISEoZGVwZW5kZW5jeS5jb25zdW1lKHRoaXMpLT5iaXRzW24gLyB3b3JkU2l6ZV0gJiAob25lIDw8
IChuICUgd29yZFNpemUpKSk7CisgICAgcmV0dXJuICEhKGRlcGVuZGVuY3kuY29uc3VtZSh0aGlz
KS0+Yml0c1tuIC8gYml0c0luV29yZF0gJiAob25lIDw8IChuICUgYml0c0luV29yZCkpKTsKIH0K
IAogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgogaW5saW5l
IHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6c2V0KHNpemVfdCBuKQogewotICAg
IGJpdHNbbiAvIHdvcmRTaXplXSB8PSAob25lIDw8IChuICUgd29yZFNpemUpKTsKKyAgICBiaXRz
W24gLyBiaXRzSW5Xb3JkXSB8PSAob25lIDw8IChuICUgYml0c0luV29yZCkpOwogfQogCiB0ZW1w
bGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CkBAIC0xODAsOCArMTc4
LDggQEAgaW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPgogdGVtcGxhdGU8
c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgogaW5saW5lIGJvb2wgQml0bWFw
PGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6dGVzdEFuZFNldChzaXplX3QgbikKIHsKLSAgICBXb3Jk
VHlwZSBtYXNrID0gb25lIDw8IChuICUgd29yZFNpemUpOwotICAgIHNpemVfdCBpbmRleCA9IG4g
LyB3b3JkU2l6ZTsKKyAgICBXb3JkVHlwZSBtYXNrID0gb25lIDw8IChuICUgYml0c0luV29yZCk7
CisgICAgc2l6ZV90IGluZGV4ID0gbiAvIGJpdHNJbldvcmQ7CiAgICAgYm9vbCByZXN1bHQgPSBi
aXRzW2luZGV4XSAmIG1hc2s7CiAgICAgYml0c1tpbmRleF0gfD0gbWFzazsKICAgICByZXR1cm4g
cmVzdWx0OwpAQCAtMTkwLDggKzE4OCw4IEBAIGlubGluZSBib29sIEJpdG1hcDxiaXRtYXBTaXpl
LCBXb3JkVHlwZT4KIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlw
ZT4KIGlubGluZSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OnRlc3RBbmRDbGVh
cihzaXplX3QgbikKIHsKLSAgICBXb3JkVHlwZSBtYXNrID0gb25lIDw8IChuICUgd29yZFNpemUp
OwotICAgIHNpemVfdCBpbmRleCA9IG4gLyB3b3JkU2l6ZTsKKyAgICBXb3JkVHlwZSBtYXNrID0g
b25lIDw8IChuICUgYml0c0luV29yZCk7CisgICAgc2l6ZV90IGluZGV4ID0gbiAvIGJpdHNJbldv
cmQ7CiAgICAgYm9vbCByZXN1bHQgPSBiaXRzW2luZGV4XSAmIG1hc2s7CiAgICAgYml0c1tpbmRl
eF0gJj0gfm1hc2s7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTIwMCw4ICsxOTgsOCBAQCBpbmxp
bmUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+CiB0ZW1wbGF0ZTxzaXplX3QgYml0
bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CiBBTFdBWVNfSU5MSU5FIGJvb2wgQml0bWFwPGJp
dG1hcFNpemUsIFdvcmRUeXBlPjo6Y29uY3VycmVudFRlc3RBbmRTZXQoc2l6ZV90IG4sIERlcGVu
ZGVuY3kgZGVwZW5kZW5jeSkKIHsKLSAgICBXb3JkVHlwZSBtYXNrID0gb25lIDw8IChuICUgd29y
ZFNpemUpOwotICAgIHNpemVfdCBpbmRleCA9IG4gLyB3b3JkU2l6ZTsKKyAgICBXb3JkVHlwZSBt
YXNrID0gb25lIDw8IChuICUgYml0c0luV29yZCk7CisgICAgc2l6ZV90IGluZGV4ID0gbiAvIGJp
dHNJbldvcmQ7CiAgICAgV29yZFR5cGUqIGRhdGEgPSBkZXBlbmRlbmN5LmNvbnN1bWUoYml0cy5k
YXRhKCkpICsgaW5kZXg7CiAgICAgcmV0dXJuICFiaXR3aXNlX2Nhc3Q8QXRvbWljPFdvcmRUeXBl
Pio+KGRhdGEpLT50cmFuc2FjdGlvblJlbGF4ZWQoCiAgICAgICAgIFsmXSAoV29yZFR5cGUmIHZh
bHVlKSAtPiBib29sIHsKQEAgLTIxNiw4ICsyMTQsOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgQml0
bWFwPGJpdG1hcFNpemUsIFdvCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUg
V29yZFR5cGU+CiBBTFdBWVNfSU5MSU5FIGJvb2wgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBl
Pjo6Y29uY3VycmVudFRlc3RBbmRDbGVhcihzaXplX3QgbiwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5
KQogewotICAgIFdvcmRUeXBlIG1hc2sgPSBvbmUgPDwgKG4gJSB3b3JkU2l6ZSk7Ci0gICAgc2l6
ZV90IGluZGV4ID0gbiAvIHdvcmRTaXplOworICAgIFdvcmRUeXBlIG1hc2sgPSBvbmUgPDwgKG4g
JSBiaXRzSW5Xb3JkKTsKKyAgICBzaXplX3QgaW5kZXggPSBuIC8gYml0c0luV29yZDsKICAgICBX
b3JkVHlwZSogZGF0YSA9IGRlcGVuZGVuY3kuY29uc3VtZShiaXRzLmRhdGEoKSkgKyBpbmRleDsK
ICAgICByZXR1cm4gIWJpdHdpc2VfY2FzdDxBdG9taWM8V29yZFR5cGU+Kj4oZGF0YSktPnRyYW5z
YWN0aW9uUmVsYXhlZCgKICAgICAgICAgWyZdIChXb3JkVHlwZSYgdmFsdWUpIC0+IGJvb2wgewpA
QCAtMjMyLDcgKzIzMCw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwg
V28KIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGlu
ZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmNsZWFyKHNpemVfdCBuKQogewot
ICAgIGJpdHNbbiAvIHdvcmRTaXplXSAmPSB+KG9uZSA8PCAobiAlIHdvcmRTaXplKSk7CisgICAg
Yml0c1tuIC8gYml0c0luV29yZF0gJj0gfihvbmUgPDwgKG4gJSBiaXRzSW5Xb3JkKSk7CiB9CiAK
IHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KQEAgLTI0NCwy
MCArMjQyLDIwIEBAIGlubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT4KIHRl
bXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSB2b2lk
IEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmludmVydCgpCiB7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB3b3JkczsgKytpKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVt
YmVyT2ZXb3JkczsgKytpKQogICAgICAgICBiaXRzW2ldID0gfmJpdHNbaV07Ci0gICAgaWYgY29u
c3RleHByICghIShiaXRtYXBTaXplICUgd29yZFNpemUpKSB7Ci0gICAgICAgIGNvbnN0ZXhwciBz
aXplX3QgcmVtYWluaW5nQml0cyA9IGJpdG1hcFNpemUgJSB3b3JkU2l6ZTsKKyAgICBpZiBjb25z
dGV4cHIgKCEhKGJpdG1hcFNpemUgJSBiaXRzSW5Xb3JkKSkgeworICAgICAgICBjb25zdGV4cHIg
c2l6ZV90IHJlbWFpbmluZ0JpdHMgPSBiaXRtYXBTaXplICUgYml0c0luV29yZDsKICAgICAgICAg
Y29uc3RleHByIFdvcmRUeXBlIG1hc2sgPSAoc3RhdGljX2Nhc3Q8V29yZFR5cGU+KDEpIDw8IHJl
bWFpbmluZ0JpdHMpIC0gMTsKLSAgICAgICAgYml0c1t3b3JkcyAtIDFdICY9IG1hc2s7CisgICAg
ICAgIGJpdHNbbnVtYmVyT2ZXb3JkcyAtIDFdICY9IG1hc2s7CiAgICAgfQogfQogCiB0ZW1wbGF0
ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CiBpbmxpbmUgc2l6ZV90IEJp
dG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om5leHRQb3NzaWJseVVuc2V0KHNpemVfdCBzdGFy
dCkgY29uc3QKIHsKLSAgICBpZiAoIX5iaXRzW3N0YXJ0IC8gd29yZFNpemVdKQotICAgICAgICBy
ZXR1cm4gKChzdGFydCAvIHdvcmRTaXplKSArIDEpICogd29yZFNpemU7CisgICAgaWYgKCF+Yml0
c1tzdGFydCAvIGJpdHNJbldvcmRdKQorICAgICAgICByZXR1cm4gKChzdGFydCAvIGJpdHNJbldv
cmQpICsgMSkgKiBiaXRzSW5Xb3JkOwogICAgIHJldHVybiBzdGFydCArIDE7CiB9CiAKQEAgLTI4
OCwxMSArMjg2LDExIEBAIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3IK
IGlubGluZSBzaXplX3QgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6Y291bnQoc2l6ZV90
IHN0YXJ0KSBjb25zdAogewogICAgIHNpemVfdCByZXN1bHQgPSAwOwotICAgIGZvciAoIDsgKHN0
YXJ0ICUgd29yZFNpemUpOyArK3N0YXJ0KSB7CisgICAgZm9yICggOyAoc3RhcnQgJSBiaXRzSW5X
b3JkKTsgKytzdGFydCkgewogICAgICAgICBpZiAoZ2V0KHN0YXJ0KSkKICAgICAgICAgICAgICsr
cmVzdWx0OwogICAgIH0KLSAgICBmb3IgKHNpemVfdCBpID0gc3RhcnQgLyB3b3JkU2l6ZTsgaSA8
IHdvcmRzOyArK2kpCisgICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0IC8gYml0c0luV29yZDsgaSA8
IG51bWJlck9mV29yZHM7ICsraSkKICAgICAgICAgcmVzdWx0ICs9IFdURjo6Yml0Q291bnQoYml0
c1tpXSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTMwMCwyMCArMjk4LDIxIEBAIGlubGlu
ZSBzaXplX3QgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXAKIHRlbXBsYXRlPHNpemVfdCBiaXRt
YXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSBib29sIEJpdG1hcDxiaXRtYXBTaXpl
LCBXb3JkVHlwZT46OmlzRW1wdHkoKSBjb25zdAogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgd29yZHM7ICsraSkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mV29yZHM7
ICsraSkgewogICAgICAgICBpZiAoYml0c1tpXSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXpl
LCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBXb3Jk
VHlwZT46OmlzRnVsbCgpIGNvbnN0CiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3Jk
czsgKytpKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZXb3JkczsgKytpKSB7
CiAgICAgICAgIGlmICh+Yml0c1tpXSkgewotICAgICAgICAgICAgaWYgY29uc3RleHByICghIShi
aXRtYXBTaXplICUgd29yZFNpemUpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGkgPT0gd29yZHMg
LSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBzaXplX3QgcmVtYWluaW5nQml0
cyA9IGJpdG1hcFNpemUgJSB3b3JkU2l6ZTsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoISEo
Yml0bWFwU2l6ZSAlIGJpdHNJbldvcmQpKSB7CisgICAgICAgICAgICAgICAgaWYgKGkgPT0gbnVt
YmVyT2ZXb3JkcyAtIDEpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIHNpemVfdCBy
ZW1haW5pbmdCaXRzID0gYml0bWFwU2l6ZSAlIGJpdHNJbldvcmQ7CiAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0ZXhwciBXb3JkVHlwZSBtYXNrID0gKHN0YXRpY19jYXN0PFdvcmRUeXBlPigxKSA8
PCByZW1haW5pbmdCaXRzKSAtIDE7CiAgICAgICAgICAgICAgICAgICAgIGlmICgoYml0c1tpXSAm
IG1hc2spID09IG1hc2spCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTMyMSwzNCArMzIwLDM1IEBAIGlubGluZSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlw
ZT4KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQor
ICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUs
IHR5cGVuYW1lIFdvcmRUeXBlPgogaW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRU
eXBlPjo6bWVyZ2UoY29uc3QgQml0bWFwJiBvdGhlcikKIHsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHdvcmRzOyArK2kpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZldv
cmRzOyArK2kpCiAgICAgICAgIGJpdHNbaV0gfD0gb3RoZXIuYml0c1tpXTsKIH0KIAogdGVtcGxh
dGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgogaW5saW5lIHZvaWQgQml0
bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6ZmlsdGVyKGNvbnN0IEJpdG1hcCYgb3RoZXIpCiB7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JkczsgKytpKQorICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtYmVyT2ZXb3JkczsgKytpKQogICAgICAgICBiaXRzW2ldICY9IG90aGVy
LmJpdHNbaV07CiB9CiAKIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3Jk
VHlwZT4KIGlubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmV4Y2x1ZGUo
Y29uc3QgQml0bWFwJiBvdGhlcikKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmRz
OyArK2kpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZldvcmRzOyArK2kpCiAg
ICAgICAgIGJpdHNbaV0gJj0gfm90aGVyLmJpdHNbaV07CiB9CiAKIHRlbXBsYXRlPHNpemVfdCBi
aXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBT
aXplLCBXb3JkVHlwZT46OmNvbmN1cnJlbnRGaWx0ZXIoY29uc3QgQml0bWFwJiBvdGhlcikKIHsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmRzOyArK2kpIHsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG51bWJlck9mV29yZHM7ICsraSkgewogICAgICAgICBmb3IgKDs7KSB7CiAg
ICAgICAgICAgICBXb3JkVHlwZSBvdGhlckJpdHMgPSBvdGhlci5iaXRzW2ldOwogICAgICAgICAg
ICAgaWYgKCFvdGhlckJpdHMpIHsKQEAgLTM2OCw3ICszNjgsNyBAQCBpbmxpbmUgdm9pZCBCaXRt
YXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+CiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlw
ZW5hbWUgV29yZFR5cGU+CiBpbmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+
OjpzdWJzdW1lcyhjb25zdCBCaXRtYXAmIG90aGVyKSBjb25zdAogewotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgd29yZHM7ICsraSkgeworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVt
YmVyT2ZXb3JkczsgKytpKSB7CiAgICAgICAgIFdvcmRUeXBlIG15Qml0cyA9IGJpdHNbaV07CiAg
ICAgICAgIFdvcmRUeXBlIG90aGVyQml0cyA9IG90aGVyLmJpdHNbaV07CiAgICAgICAgIGlmICgo
bXlCaXRzIHwgb3RoZXJCaXRzKSAhPSBteUJpdHMpCkBAIC0zODEsMTYgKzM4MSwxNiBAQCB0ZW1w
bGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yCiB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgogaW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6Zm9yRWFjaFNl
dEJpdChjb25zdCBGdW5jJiBmdW5jKSBjb25zdAogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgd29yZHM7ICsraSkgeworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZXb3Jk
czsgKytpKSB7CiAgICAgICAgIFdvcmRUeXBlIHdvcmQgPSBiaXRzW2ldOwotICAgICAgICBzaXpl
X3QgYmFzZSA9IGkgKiB3b3JkU2l6ZTsKKyAgICAgICAgc2l6ZV90IGJhc2UgPSBpICogYml0c0lu
V29yZDsKICAgICAgICAgc2l6ZV90IGogPSAwOwogICAgICAgICBmb3IgKDsgd29yZDsgKytqKSB7
CiAgICAgICAgICAgICBpZiAod29yZCAmIDEpCiAgICAgICAgICAgICAgICAgZnVuYyhiYXNlICsg
aik7CiAgICAgICAgICAgICB3b3JkID4+PSAxOwogICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChq
IDw9IHdvcmRTaXplKTsKKyAgICAgICAgQVNTRVJUKGogPD0gYml0c0luV29yZCk7CiAgICAgfQog
fQogCkBAIC0zOTgsMTUgKzM5OCwxNSBAQCB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlw
ZW5hbWUgV29yCiBpbmxpbmUgc2l6ZV90IEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmZp
bmRCaXQoc2l6ZV90IHN0YXJ0SW5kZXgsIGJvb2wgdmFsdWUpIGNvbnN0CiB7CiAgICAgV29yZFR5
cGUgc2tpcFZhbHVlID0gLShzdGF0aWNfY2FzdDxXb3JkVHlwZT4odmFsdWUpIF4gMSk7Ci0gICAg
c2l6ZV90IHdvcmRJbmRleCA9IHN0YXJ0SW5kZXggLyB3b3JkU2l6ZTsKLSAgICBzaXplX3Qgc3Rh
cnRJbmRleEluV29yZCA9IHN0YXJ0SW5kZXggLSB3b3JkSW5kZXggKiB3b3JkU2l6ZTsKKyAgICBz
aXplX3Qgd29yZEluZGV4ID0gc3RhcnRJbmRleCAvIGJpdHNJbldvcmQ7CisgICAgc2l6ZV90IHN0
YXJ0SW5kZXhJbldvcmQgPSBzdGFydEluZGV4IC0gd29yZEluZGV4ICogYml0c0luV29yZDsKICAg
ICAKLSAgICB3aGlsZSAod29yZEluZGV4IDwgd29yZHMpIHsKKyAgICB3aGlsZSAod29yZEluZGV4
IDwgbnVtYmVyT2ZXb3JkcykgewogICAgICAgICBXb3JkVHlwZSB3b3JkID0gYml0c1t3b3JkSW5k
ZXhdOwogICAgICAgICBpZiAod29yZCAhPSBza2lwVmFsdWUpIHsKICAgICAgICAgICAgIHNpemVf
dCBpbmRleCA9IHN0YXJ0SW5kZXhJbldvcmQ7Ci0gICAgICAgICAgICBpZiAoZmluZEJpdEluV29y
ZCh3b3JkLCBpbmRleCwgd29yZFNpemUsIHZhbHVlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
d29yZEluZGV4ICogd29yZFNpemUgKyBpbmRleDsKKyAgICAgICAgICAgIGlmIChmaW5kQml0SW5X
b3JkKHdvcmQsIGluZGV4LCBiaXRzSW5Xb3JkLCB2YWx1ZSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHdvcmRJbmRleCAqIGJpdHNJbldvcmQgKyBpbmRleDsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgd29yZEluZGV4Kys7CkBAIC00MTksNyArNDE5LDcgQEAgaW5saW5lIHNpemVfdCBC
aXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cAogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5
cGVuYW1lIFdvcmRUeXBlPgogaW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBl
Pjo6bWVyZ2VBbmRDbGVhcihCaXRtYXAmIG90aGVyKQogewotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgd29yZHM7ICsraSkgeworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZX
b3JkczsgKytpKSB7CiAgICAgICAgIGJpdHNbaV0gfD0gb3RoZXIuYml0c1tpXTsKICAgICAgICAg
b3RoZXIuYml0c1tpXSA9IDA7CiAgICAgfQpAQCAtNDI4LDcgKzQyOCw3IEBAIGlubGluZSB2b2lk
IEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT4KIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXpl
LCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3Jk
VHlwZT46OnNldEFuZENsZWFyKEJpdG1hcCYgb3RoZXIpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB3b3JkczsgKytpKSB7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJP
ZldvcmRzOyArK2kpIHsKICAgICAgICAgYml0c1tpXSA9IG90aGVyLmJpdHNbaV07CiAgICAgICAg
IG90aGVyLmJpdHNbaV0gPSAwOwogICAgIH0KQEAgLTQ0MCwzNSArNDQwLDM1IEBAIGlubGluZSB2
b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT4KICAgICBBU1NFUlQoc3RhcnQgPD0gZW5k
KTsKICAgICBBU1NFUlQoZW5kIDw9IGJpdG1hcFNpemUpOwogCi0gICAgc2l6ZV90IHdvcmRJbmRl
eCA9IHN0YXJ0IC8gd29yZFNpemU7Ci0gICAgc2l6ZV90IGVuZFdvcmRJbmRleCA9IGVuZCAvIHdv
cmRTaXplOwotICAgIHNpemVfdCBpbmRleCA9IHN0YXJ0IC0gd29yZEluZGV4ICogd29yZFNpemU7
CisgICAgc2l6ZV90IHdvcmRJbmRleCA9IHN0YXJ0IC8gYml0c0luV29yZDsKKyAgICBzaXplX3Qg
ZW5kV29yZEluZGV4ID0gZW5kIC8gYml0c0luV29yZDsKKyAgICBzaXplX3QgaW5kZXggPSBzdGFy
dCAtIHdvcmRJbmRleCAqIGJpdHNJbldvcmQ7CiAgICAgd2hpbGUgKHdvcmRJbmRleCA8IGVuZFdv
cmRJbmRleCkgewotICAgICAgICB3aGlsZSAoaW5kZXggPCB3b3JkU2l6ZSkgeworICAgICAgICB3
aGlsZSAoaW5kZXggPCBiaXRzSW5Xb3JkKSB7CiAgICAgICAgICAgICBiaXRzW3dvcmRJbmRleF0g
fD0gKG9uZSA8PCBpbmRleCk7CiAgICAgICAgICAgICBpbmRleCArPSBuOwogICAgICAgICB9Ci0g
ICAgICAgIGluZGV4IC09IHdvcmRTaXplOworICAgICAgICBpbmRleCAtPSBiaXRzSW5Xb3JkOwog
ICAgICAgICB3b3JkSW5kZXgrKzsKICAgICB9CiAKLSAgICBzaXplX3QgZW5kSW5kZXggPSBlbmQg
LSBlbmRXb3JkSW5kZXggKiB3b3JkU2l6ZTsKKyAgICBzaXplX3QgZW5kSW5kZXggPSBlbmQgLSBl
bmRXb3JkSW5kZXggKiBiaXRzSW5Xb3JkOwogICAgIHdoaWxlIChpbmRleCA8IGVuZEluZGV4KSB7
CiAgICAgICAgIGJpdHNbd29yZEluZGV4XSB8PSAob25lIDw8IGluZGV4KTsKICAgICAgICAgaW5k
ZXggKz0gbjsKICAgICB9CiAKLSAgICBpZiBjb25zdGV4cHIgKCEhKGJpdG1hcFNpemUgJSB3b3Jk
U2l6ZSkpIHsKLSAgICAgICAgY29uc3RleHByIHNpemVfdCByZW1haW5pbmdCaXRzID0gYml0bWFw
U2l6ZSAlIHdvcmRTaXplOworICAgIGlmIGNvbnN0ZXhwciAoISEoYml0bWFwU2l6ZSAlIGJpdHNJ
bldvcmQpKSB7CisgICAgICAgIGNvbnN0ZXhwciBzaXplX3QgcmVtYWluaW5nQml0cyA9IGJpdG1h
cFNpemUgJSBiaXRzSW5Xb3JkOwogICAgICAgICBjb25zdGV4cHIgV29yZFR5cGUgbWFzayA9IChz
dGF0aWNfY2FzdDxXb3JkVHlwZT4oMSkgPDwgcmVtYWluaW5nQml0cykgLSAxOwotICAgICAgICBi
aXRzW3dvcmRzIC0gMV0gJj0gbWFzazsKKyAgICAgICAgYml0c1tudW1iZXJPZldvcmRzIC0gMV0g
Jj0gbWFzazsKICAgICB9CiB9CiAKIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFt
ZSBXb3JkVHlwZT4KIGlubGluZSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om9w
ZXJhdG9yPT0oY29uc3QgQml0bWFwJiBvdGhlcikgY29uc3QKIHsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHdvcmRzOyArK2kpIHsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJl
ck9mV29yZHM7ICsraSkgewogICAgICAgICBpZiAoYml0c1tpXSAhPSBvdGhlci5iaXRzW2ldKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTQ4NCwyMSArNDg0LDIxIEBAIGlu
bGluZSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT4KIHRlbXBsYXRlPHNpemVfdCBi
aXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBT
aXplLCBXb3JkVHlwZT46Om9wZXJhdG9yfD0oY29uc3QgQml0bWFwJiBvdGhlcikKIHsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmRzOyArK2kpCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBudW1iZXJPZldvcmRzOyArK2kpCiAgICAgICAgIGJpdHNbaV0gfD0gb3RoZXIuYml0c1tp
XTsKIH0KIAogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgog
aW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6b3BlcmF0b3ImPShjb25z
dCBCaXRtYXAmIG90aGVyKQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29yZHM7ICsr
aSkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mV29yZHM7ICsraSkKICAgICAg
ICAgYml0c1tpXSAmPSBvdGhlci5iaXRzW2ldOwogfQogCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFw
U2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CiBpbmxpbmUgdm9pZCBCaXRtYXA8Yml0bWFwU2l6ZSwg
V29yZFR5cGU+OjpvcGVyYXRvcl49KGNvbnN0IEJpdG1hcCYgb3RoZXIpCiB7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCB3b3JkczsgKytpKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bnVtYmVyT2ZXb3JkczsgKytpKQogICAgICAgICBiaXRzW2ldIF49IG90aGVyLmJpdHNbaV07CiB9
CiAKQEAgLTUwNiw3ICs1MDYsNyBAQCB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5h
bWUgV29yCiBpbmxpbmUgdW5zaWduZWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6aGFz
aCgpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHdvcmRzOyArK2kpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJP
ZldvcmRzOyArK2kpCiAgICAgICAgIHJlc3VsdCBePSBJbnRIYXNoPFdvcmRUeXBlPjo6aGFzaChi
aXRzW2ldKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>