<?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>180783</bug_id>
          
          <creation_ts>2017-12-13 16:34:04 -0800</creation_ts>
          <short_desc>Octane/richards regressed by a whopping 20% because eliminateCommonSubexpressions has a weird fixpoint requirement</short_desc>
          <delta_ts>2017-12-13 22:06:44 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1381372</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-13 16:34:04 -0800</bug_when>
    <thetext>We accidentally introduced an extra load from arguments.  That load revealed the fact that our B3 CSE cannot handle redundant dependent chains:

BB#1:
a: Load(@x)
BB#2:
c: Load(@x)
d: Load(@c)
BB#3:
e: Load(@c)

Then CSE will build a map at the end of BB#2 that says that loads from @c are serviced by @d.

Then CSE will do this:

BB#1:
a: Load(@x)
BB#2:
c: Identity(@a)
d: Load(@a)
BB#3:
e: Load(@a)

But then, when we try to eliminate @e, we search for what loads service @a.  BB#2 tells us about @c, not @a.

The solution is either to fixpoint CSE or to perform substitution on the matches map.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381373</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-13 16:34:47 -0800</bug_when>
    <thetext>@Saam: I think that this is try-catch fallout.  We introduced some extra loads of arguments for try-catch entrypoints hacks.  CSE successfully eliminates those, but that causes it to not eliminate any loads from things loaded from arguments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381383</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-13 16:44:18 -0800</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #0)
&gt; We accidentally introduced an extra load from arguments.  That load revealed
&gt; the fact that our B3 CSE cannot handle redundant dependent chains:
&gt; 
&gt; BB#1:
&gt; a: Load(@x)
&gt; BB#2:
&gt; c: Load(@x)
&gt; d: Load(@c)
&gt; BB#3:
&gt; e: Load(@c)
&gt; 
&gt; Then CSE will build a map at the end of BB#2 that says that loads from @c
&gt; are serviced by @d.
&gt; 
&gt; Then CSE will do this:
&gt; 
&gt; BB#1:
&gt; a: Load(@x)
&gt; BB#2:
&gt; c: Identity(@a)
&gt; d: Load(@a)
&gt; BB#3:
&gt; e: Load(@a)
&gt; 
&gt; But then, when we try to eliminate @e, we search for what loads service @a. 
&gt; BB#2 tells us about @c, not @a.
&gt; 
&gt; The solution is either to fixpoint CSE or to perform substitution on the
&gt; matches map.

It&apos;s even more subtle!

We fix that value map after processing a block.  The real problem is that a load may be redundant with a load that is later in RPO because of loops.  That load&apos;s map would not have been updated.

I think that the best thing to do is to fixpoint CSE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381391</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-12-13 16:49:29 -0800</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #1)
&gt; @Saam: I think that this is try-catch fallout.  We introduced some extra
&gt; loads of arguments for try-catch entrypoints hacks.  CSE successfully
&gt; eliminates those, but that causes it to not eliminate any loads from things
&gt; loaded from arguments.

Interesting. Do you know where I emitted more loads? I thought I just refactored things to do argument type speculations on the call entrypoint edge of the EntrySwitch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381392</commentid>
    <comment_count>4</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-12-13 16:50:08 -0800</bug_when>
    <thetext>What are the control flow edges in your example?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381393</commentid>
    <comment_count>5</comment_count>
      <attachid>329288</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-13 16:50:09 -0800</bug_when>
    <thetext>Created attachment 329288
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381394</commentid>
    <comment_count>6</comment_count>
      <attachid>329289</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-13 16:50:58 -0800</bug_when>
    <thetext>Created attachment 329289
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381397</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-13 16:55:35 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #3)
&gt; (In reply to Filip Pizlo from comment #1)
&gt; &gt; @Saam: I think that this is try-catch fallout.  We introduced some extra
&gt; &gt; loads of arguments for try-catch entrypoints hacks.  CSE successfully
&gt; &gt; eliminates those, but that causes it to not eliminate any loads from things
&gt; &gt; loaded from arguments.
&gt; 
&gt; Interesting. Do you know where I emitted more loads? I thought I just
&gt; refactored things to do argument type speculations on the call entrypoint
&gt; edge of the EntrySwitch.

I&apos;m not sure you actually emitted new ones.  I think that the first load is the one in lower() right after setting up multiple entrypoints.  It may be that by moving the code, it became less obvious to eliminate.  Not sure about the mechanism by which this happened...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381398</commentid>
    <comment_count>8</comment_count>
      <attachid>329289</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-12-13 16:57:15 -0800</bug_when>
    <thetext>Comment on attachment 329289
the patch

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

r=me

&gt; Source/JavaScriptCore/b3/B3EliminateCommonSubexpressions.cpp:419
&gt; +                    if (B3EliminateCommonSubexpressionsInternal::verbose)

so much verbose 😥

&gt; Source/JavaScriptCore/b3/B3Generate.cpp:89
&gt; +        if (eliminateCommonSubexpressions(procedure))
&gt; +            eliminateCommonSubexpressions(procedure);

Why only twice?

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:74
&gt; +static const bool verbose = true;

oops

&gt; Source/JavaScriptCore/dfg/DFGSSAConversionPhase.cpp:86
&gt; +        if (m_graph.m_numberOfEntrypoints &gt; 1) {

The reason I didn&apos;t do this before is I thought it&apos;d add nice test coverage for EntrySwitch. However, it gets eliminated almost immediately inside B3. So I agree it&apos;s probably better to just do it here because it&apos;ll make the compiler faster by processing fewer BBs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381403</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-13 17:00:29 -0800</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #7)
&gt; (In reply to Saam Barati from comment #3)
&gt; &gt; (In reply to Filip Pizlo from comment #1)
&gt; &gt; &gt; @Saam: I think that this is try-catch fallout.  We introduced some extra
&gt; &gt; &gt; loads of arguments for try-catch entrypoints hacks.  CSE successfully
&gt; &gt; &gt; eliminates those, but that causes it to not eliminate any loads from things
&gt; &gt; &gt; loaded from arguments.
&gt; &gt; 
&gt; &gt; Interesting. Do you know where I emitted more loads? I thought I just
&gt; &gt; refactored things to do argument type speculations on the call entrypoint
&gt; &gt; edge of the EntrySwitch.
&gt; 
&gt; I&apos;m not sure you actually emitted new ones.  I think that the first load is
&gt; the one in lower() right after setting up multiple entrypoints.  It may be
&gt; that by moving the code, it became less obvious to eliminate.  Not sure
&gt; about the mechanism by which this happened...

Actually, no longer sure that&apos;s what did it.  It may be because we&apos;re now speculating cell on that argument, causing the load of the argument in arguments checking to not be dead.

I&apos;m going to stop doing the archeology now.  I&apos;m getting too confused.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381404</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-13 17:02:13 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #8)
&gt; Comment on attachment 329289 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=329289&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3EliminateCommonSubexpressions.cpp:419
&gt; &gt; +                    if (B3EliminateCommonSubexpressionsInternal::verbose)
&gt; 
&gt; so much verbose 😥
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Generate.cpp:89
&gt; &gt; +        if (eliminateCommonSubexpressions(procedure))
&gt; &gt; +            eliminateCommonSubexpressions(procedure);
&gt; 
&gt; Why only twice?

I don&apos;t like unbounded fixpointing of optimizations, because *usually* you don&apos;t need to fixpoint at all, and if you need to rerun a second time, then the likelihood of a third time being profitable is epsilon.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:74
&gt; &gt; +static const bool verbose = true;
&gt; 
&gt; oops

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSSAConversionPhase.cpp:86
&gt; &gt; +        if (m_graph.m_numberOfEntrypoints &gt; 1) {
&gt; 
&gt; The reason I didn&apos;t do this before is I thought it&apos;d add nice test coverage
&gt; for EntrySwitch. However, it gets eliminated almost immediately inside B3.
&gt; So I agree it&apos;s probably better to just do it here because it&apos;ll make the
&gt; compiler faster by processing fewer BBs.

Yeah, and we&apos;ve already enjoyed that test coverage before.  This is mostly useful because it makes diffing IR easier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381508</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-13 22:05:11 -0800</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/225893/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381509</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-12-13 22:06:44 -0800</bug_when>
    <thetext>&lt;rdar://problem/36040919&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329288</attachid>
            <date>2017-12-13 16:50:09 -0800</date>
            <delta_ts>2017-12-13 16:50:58 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>16913</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI1ODgwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBA
CisyMDE3LTEyLTEzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
T2N0YW5lL3JpY2hhcmRzIHJlZ3Jlc3NlZCBieSBhIHdob3BwaW5nIDIwJSBiZWNhdXNlIGVsaW1p
bmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zIGhhcyBhIHdlaXJkIGZpeHBvaW50IHJlcXVpcmVtZW50
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA3ODMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAg
IFRoaXMgZml4ZXMgdGhlIHJlZ3Jlc3Npb24gYnkgZml4cG9pbnRpbmcgQ1NFLiBXZSBuZWVkIHRv
IGZpeHBvaW50IENTRSBiZWNhdXNlIG9mIHRoaXMgY2FzZToKKyAgICAgICAgCisgICAgICAgICAg
ICBCQiMxOgorICAgICAgICAgICAgICAgIGE6IExvYWQoQHgpCisgICAgICAgICAgICAgICAgYjog
TG9hZChAeCkKKyAgICAgICAgICAgICAgICBjOiBMb2FkKEBiKQorICAgICAgICAgICAgQkIjMjoK
KyAgICAgICAgICAgICAgICBkOiBMb2FkKEBiKQorICAgICAgICAgICAgQkIjMzoKKyAgICAgICAg
ICAgICAgICBlOiBMb2FkKEBiKQorICAgICAgICAKKyAgICAgICAgTGV0cyBhc3N1bWUgdGhhdCAj
MyBsb29wcyBhcm91bmQgdG8gIzIsIHNvIHRvIGVsaW1pbmF0ZSBAZCwgd2UgbmVlZCB0byBwcm92
ZSB0aGF0IGl0J3MgcmVkdW5kYW50CisgICAgICAgIHdpdGggYm90aCBAYyBhbmQgQGUuIFRoZSBw
cm9ibGVtIGlzIHRoYXQgYnkgdGhlIHRpbWUgd2UgZ2V0IHRvIEBkLCB0aGUgQ1NFIHN0YXRlIHdp
bGwgbG9vayBsaWtlCisgICAgICAgIHRoaXM6CisKKyAgICAgICAgICAgIEJCIzE6CisgICAgICAg
ICAgICAgICAgYTogTG9hZChAeCkKKyAgICAgICAgICAgICAgICBiOiBMb2FkKEB4KQorICAgICAg
ICAgICAgICAgIGM6IExvYWQoQGEpCisgICAgICAgICAgICAgICAgbWVtb3J5QXRUYWlsOiB7QHg9
PkBhLCBAYT0+QGN9CisgICAgICAgICAgICBCQiMyOgorICAgICAgICAgICAgICAgIGQ6IExvYWQo
QGEpIFtzaWNdCisgICAgICAgICAgICAgICAgbWVtb3J5QXRUYWlsOiB7QGI9PkBkfQorICAgICAg
ICAgICAgQkIjMzoKKyAgICAgICAgICAgICAgICBlOiBMb2FkKEBiKQorICAgICAgICAgICAgICAg
IG1lbW9yeUF0VGFpbDoge0BiPT5AZX0gW3NpY10KKyAgICAgICAgCisgICAgICAgIE5vdGUgdGhh
dCAjMydzIGF0VGFpbCBtYXAgaXMga2V5ZWQgb24gQGIsIHdoaWNoIHdhcyB0aGUgb2xkIChubyBs
b25nZXIgY2Fub25pY2FsKSB2ZXJzaW9uIG9mIEBhLgorICAgICAgICBCdXQgQGQncyBjaGlsZHJl
biB3ZXJlIGFscmVhZHkgc3Vic3RpdHV0ZWQsIHNvIGl0IHJlZmVycyB0byBAYS4gU2luY2UgQGEg
aXMgbm90IGluICMzJ3MgYXRUYWlsCisgICAgICAgIG1hcCwgd2UgZG9uJ3QgZmluZCBpdCBhbmQg
bGVhdmUgdGhlIHJlZHVuZGFuY3kuCisgICAgICAgIAorICAgICAgICBJIHRoaW5rIHRoYXQgdGhl
IGNsZWFuZXN0IHNvbHV0aW9uIGlzIHRvIGZpeHBvaW50LiBDU0UgaXMgcHJldHR5IGNoZWFwLCBz
byBob3BlZnVsbHkgd2UgY2FuIGFmZm9yZAorICAgICAgICB0aGlzLiBJdCBmaXhlcyB0aGUgcmlj
aGFyZHMgcmVncmVzc2lvbiwgc2luY2UgcmljaGFyZHMgaXMgc3VwZXIgZGVwZW5kZW50IG9uIEIz
IENTRS4KKworICAgICAgICAqIGIzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3Bw
OgorICAgICAgICAqIGIzL0IzR2VuZXJhdGUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJh
dGVUb0Fpcik6CisgICAgICAgICogYjMvYWlyL0FpclJlcG9ydFVzZWRSZWdpc3RlcnMuY3BwOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKToKKyAgICAgICAgKiBk
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAqIGRmZy9ERkdTU0FDb252ZXJzaW9u
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6cnVuKToK
KyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9CMzo6bG93ZXIpOgorCiAyMDE3LTEyLTEzICBTYWFtIEJhcmF0aSAgPHNi
YXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIFRha2UgYSB2YWx1ZSBkcml2ZW4gYXBwcm9hY2gg
dG8gaG93IHdlIGVtaXQgc3RydWN0dXJlIGNoZWNrcyBpbiBUeXBlQ2hlY2tIb2lzdGluZ1BoYXNl
IHRvIG9idmlhdGUgdGhlIG5lZWQgZm9yIHN0YXRpY19hc3NlcnQgZ3VhcmRzCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWxpbWluYXRlQ29tbW9u
U3ViZXhwcmVzc2lvbnMuY3BwCShyZXZpc2lvbiAyMjU4NzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNiw4ICsxMDYsMTQgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+CiAgICAgTWVtb3J5VmFsdWUqIGZpbmQoVmFsdWUqIHB0ciwgY29uc3QgRnVuY3RvciYg
ZnVuY3RvcikKICAgICB7CisgICAgICAgIGlmIChCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Np
b25zSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIExvb2tp
bmcgZm9yICIsIHBvaW50ZXJEdW1wKHB0ciksICIgaW4gIiwgKnRoaXMsICJcbiIpOwogICAgICAg
ICBpZiAoTWF0Y2hlcyogbWF0Y2hlcyA9IGZpbmQocHRyKSkgeworICAgICAgICAgICAgaWYgKEIz
RWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnNJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgICAgIE1hdGNoZXM6ICIsIHBvaW50ZXJMaXN0RHVtcCgqbWF0
Y2hlcyksICJcbiIpOwogICAgICAgICAgICAgZm9yIChWYWx1ZSogY2FuZGlkYXRlVmFsdWUgOiAq
bWF0Y2hlcykgeworICAgICAgICAgICAgICAgIGlmIChCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJl
c3Npb25zSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
ICAgICAgSGF2aW5nIGNhbmRpZGF0ZTogIiwgcG9pbnRlckR1bXAoY2FuZGlkYXRlVmFsdWUpLCAi
XG4iKTsKICAgICAgICAgICAgICAgICBpZiAoTWVtb3J5VmFsdWUqIGNhbmRpZGF0ZU1lbW9yeSA9
IGNhbmRpZGF0ZVZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKSkgewogICAgICAgICAgICAgICAgICAg
ICBpZiAoZnVuY3RvcihjYW5kaWRhdGVNZW1vcnkpKQogICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGNhbmRpZGF0ZU1lbW9yeTsKQEAgLTQwNSwxNSArNDExLDI2IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBoYW5kbGVNZW1vcnlWYWx1ZSgKICAgICAgICAgICAgICAgICBwdHIsIHJhbmdl
LAogICAgICAgICAgICAgICAgIFsmXSAoTWVtb3J5VmFsdWUqIGNhbmRpZGF0ZSkgLT4gYm9vbCB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25z
SW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
ICAgIENvbnNkZXJpbmcgIiwgcG9pbnRlckR1bXAoY2FuZGlkYXRlKSwgIlxuIik7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPm9mZnNldCgpICE9IG9mZnNldCkKICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQorICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnNJbnRl
cm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAg
ICAgIG9mZnNldCBvay5cbiIpOworICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgaWYgKGNhbmRpZGF0ZS0+b3Bjb2RlKCkgPT0gTG9hZCAmJiBjYW5kaWRhdGUtPnR5cGUo
KSA9PSB0eXBlKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnNJbnRlcm5h
bDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgICAg
IG5vdCBhIGxvYWQgd2l0aCBvayB0eXBlLlxuIik7CisgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBTdG9yZSAmJiBjYW5k
aWRhdGUtPmNoaWxkKDApLT50eXBlKCkgPT0gdHlwZSkKICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogCisgICAgICAgICAgICAgICAgICAgIGlmIChCM0VsaW1pbmF0ZUNvbW1v
blN1YmV4cHJlc3Npb25zSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgICAgICAgICBub3QgYSBzdG9yZSB3aXRoIG9rIHR5cGUuXG4iKTsKKwog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTYxNyw4ICs2MzQsMTAgQEAgcHJpdmF0ZToKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGaWx0ZXI+CiAgICAgTWVtb3J5TWF0Y2hlcyBmaW5kTWVtb3J5VmFsdWUo
VmFsdWUqIHB0ciwgSGVhcFJhbmdlIHJhbmdlLCBjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICB7
Ci0gICAgICAgIGlmIChCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zSW50ZXJuYWw6OnZl
cmJvc2UpCisgICAgICAgIGlmIChCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zSW50ZXJu
YWw6OnZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coKm1fdmFsdWUsICI6IGxvb2tpbmcg
YmFja3dhcmQgZm9yICIsICpwdHIsICIuLi5cbiIpOworICAgICAgICAgICAgZGF0YUxvZygiICAg
IEZ1bGwgdmFsdWU6ICIsIGRlZXBEdW1wKG1fdmFsdWUpLCAiXG4iKTsKKyAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgaWYgKG1fdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5oYXNGZW5jZSgp
KSB7CiAgICAgICAgICAgICBpZiAoQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9uc0ludGVy
bmFsOjp2ZXJib3NlKQpAQCAtNjUwLDYgKzY2OSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBJ
bXB1cmVCbG9ja0RhdGEmIGRhdGEgPSBtX2ltcHVyZUJsb2NrRGF0YVtibG9ja107CiAKICAgICAg
ICAgICAgIE1lbW9yeVZhbHVlKiBtYXRjaCA9IGRhdGEubWVtb3J5VmFsdWVzQXRUYWlsLmZpbmQo
cHRyLCBmaWx0ZXIpOworICAgICAgICAgICAgaWYgKEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVz
c2lvbnNJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgQ29u
c2RlcmluZyBtYXRjaDogIiwgcG9pbnRlckR1bXAobWF0Y2gpLCAiXG4iKTsKICAgICAgICAgICAg
IGlmIChtYXRjaCAmJiBtYXRjaCAhPSBtX3ZhbHVlKSB7CiAgICAgICAgICAgICAgICAgaWYgKEIz
RWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnNJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiICAgIEZvdW5kIG1hdGNoOiAiLCAqbWF0Y2gsICJcbiIpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkocmV2aXNpb24gMjI1
ODcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NSw3ICs4NSw4IEBAIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHBy
b2NlZHVyZSkKICAgICAgICAgcmVkdWNlRG91YmxlVG9GbG9hdChwcm9jZWR1cmUpOwogICAgICAg
ICByZWR1Y2VTdHJlbmd0aChwcm9jZWR1cmUpOwogICAgICAgICBob2lzdExvb3BJbnZhcmlhbnRW
YWx1ZXMocHJvY2VkdXJlKTsKLSAgICAgICAgZWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMo
cHJvY2VkdXJlKTsKKyAgICAgICAgaWYgKGVsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zKHBy
b2NlZHVyZSkpCisgICAgICAgICAgICBlbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucyhwcm9j
ZWR1cmUpOwogICAgICAgICBpbmZlclN3aXRjaGVzKHByb2NlZHVyZSk7CiAgICAgICAgIGR1cGxp
Y2F0ZVRhaWxzKHByb2NlZHVyZSk7CiAgICAgICAgIGZpeFNTQShwcm9jZWR1cmUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlcG9ydFVzZWRS
ZWdpc3RlcnMuY3BwCShyZXZpc2lvbiAyMjU4NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclJlcG9ydFVzZWRSZWdpc3RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwx
NCArMzksMjUgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZQogdm9p
ZCByZXBvcnRVc2VkUmVnaXN0ZXJzKENvZGUmIGNvZGUpCiB7CiAgICAgUGhhc2VTY29wZSBwaGFz
ZVNjb3BlKGNvZGUsICJyZXBvcnRVc2VkUmVnaXN0ZXJzIik7CisgICAgCisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgZGF0YUxvZygiRG9pbmcgcmVwb3J0VXNlZFJlZ2lzdGVycyBvbjpcbiIsIGNvZGUpOwog
CiAgICAgUmVnTGl2ZW5lc3MgbGl2ZW5lc3MoY29kZSk7CiAKICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogY29kZSkgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFM
b2coIkxvb2tpbmcgYXQ6ICIsICpibG9jaywgIlxuIik7CisgICAgICAgIAogICAgICAgICBSZWdM
aXZlbmVzczo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOwogCiAgICAgICAg
IGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7
CiAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgIExvb2tpbmcgYXQ6ICIsIGluc3QsICJcbiIpOwogCiAgICAgICAgICAgICAvLyBLaWxsIGRl
YWQgYXNzaWdubWVudHMgdG8gcmVnaXN0ZXJzLiBGb3Igc2ltcGxpY2l0eSB3ZSBzYXkgdGhhdCBh
IHN0b3JlIGlzIGtpbGxhYmxlIGlmCiAgICAgICAgICAgICAvLyBpdCBoYXMgb25seSBsYXRlIGRl
ZnMgYW5kIHRob3NlIGxhdGUgZGVmcyBhcmUgdG8gcmVnaXN0ZXJzIHRoYXQgYXJlIGRlYWQgcmln
aHQgbm93LgpAQCAtNTUsMTYgKzY2LDIyIEBAIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhDb2Rl
JiBjb2RlKQogICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygKICAgICAgICAgICAgICAg
ICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgQ2Fubm90IGRlbGV0ZSBiZWNhdXNlIG9mICIsIGFy
ZywgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuRGVsZXRlID0gZmFsc2U7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzTGF0ZURlZihyb2xl
KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIWFyZy5pc1JlZygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
ICAgICAgQ2Fubm90IGRlbGV0ZSBiZWNhdXNlIGFyZyBpcyBub3QgcmVnOiAiLCBhcmcsICJcbiIp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbkRlbGV0ZSA9IGZhbHNlOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbENhbGMuaXNMaXZlKGFyZy5yZWcoKSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICBDYW5ub3QgZGVsZXRlIGJlY2F1
c2UgYXJnIGlzIGxpdmU6ICIsIGFyZywgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FuRGVsZXRlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtODcsNiArMTA0LDkgQEAgdm9pZCByZXBv
cnRVc2VkUmVnaXN0ZXJzKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuICFpbnN0
OwogICAgICAgICAgICAgfSk7CiAgICAgfQorCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRh
dGFMb2coIkFmdGVyIHJlcG9ydFVzZWRSZWdpc3RlcnM6XG4iLCBjb2RlKTsKIH0KIAogfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDIyNTg3MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MSw3ICs3MSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogbmFt
ZXNwYWNlIERGR0J5dGVDb2RlUGFyc2VySW50ZXJuYWwgewogI2lmZGVmIE5ERUJVRwotc3RhdGlj
IGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9
IHRydWU7CiAjZWxzZQogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IHRydWU7CiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNp
b25QaGFzZS5jcHAJKHJldmlzaW9uIDIyNTg3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDYgKzM3
LDE0IEBACiAjaW5jbHVkZSAiREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIgogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKIAorI3VuZGVmIFJFTEVBU0VfQVNTRVJUCisjZGVmaW5lIFJFTEVBU0Vf
QVNTRVJUKGFzc2VydGlvbikgZG8geyBcCisgICAgaWYgKCEoYXNzZXJ0aW9uKSkgeyBcCisgICAg
ICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJF
VFRZX0ZVTkNUSU9OLCAjYXNzZXJ0aW9uKTsgXAorICAgICAgICBDUkFTSCgpOyBcCisgICAgfSBc
Cit9IHdoaWxlICgwKQorCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNz
IFNTQUNvbnZlcnNpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CkBAIC02MCwxNiArNjgsMjggQEAg
cHVibGljOgogCiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIEJhc2ljQmxvY2sqLCBXVEY6Oklu
dEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2ln
bmVkPj4gZW50cnlwb2ludEluZGV4VG9Bcmd1bWVudHNCbG9jazsKIAotICAgICAgICB7Ci0gICAg
ICAgICAgICBtX2dyYXBoLm1fbnVtYmVyT2ZFbnRyeXBvaW50cyA9IG1fZ3JhcGgubV9yb290cy5z
aXplKCk7CisgICAgICAgIG1fZ3JhcGgubV9udW1iZXJPZkVudHJ5cG9pbnRzID0gbV9ncmFwaC5t
X3Jvb3RzLnNpemUoKTsKKyAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0cy5yZXNpemUo
bV9ncmFwaC5tX251bWJlck9mRW50cnlwb2ludHMpOwogCisgICAgICAgIGZvciAodW5zaWduZWQg
ZW50cnlwb2ludEluZGV4ID0gMDsgZW50cnlwb2ludEluZGV4IDwgbV9ncmFwaC5tX251bWJlck9m
RW50cnlwb2ludHM7ICsrZW50cnlwb2ludEluZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBvbGRSb290ID0gbV9ncmFwaC5tX3Jvb3RzW2VudHJ5cG9pbnRJbmRleF07CisgICAgICAgICAg
ICBlbnRyeXBvaW50SW5kZXhUb0FyZ3VtZW50c0Jsb2NrLmFkZChlbnRyeXBvaW50SW5kZXgsIG9s
ZFJvb3QpOworICAgICAgICAgICAgCisgICAgICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG9s
ZFJvb3QtPmF0KDApLT5vcmlnaW47CisgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAorICAgICAgICAgICAgICAgIDAsIFNwZWNOb25lLCBJbml0aWFsaXplRW50cnlwb2ludEFy
Z3VtZW50cywgb3JpZ2luLCBPcEluZm8oZW50cnlwb2ludEluZGV4KSk7CisgICAgICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgIDAsIFNwZWNOb25lLCBF
eGl0T0ssIG9yaWdpbik7CisgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKG9sZFJv
b3QpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fZ3JhcGgubV9udW1iZXJPZkVudHJ5cG9p
bnRzID4gMSkgewogICAgICAgICAgICAgQmxvY2tJbnNlcnRpb25TZXQgYmxvY2tJbnNlcnRpb25T
ZXQobV9ncmFwaCk7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBuZXdSb290ID0gYmxvY2tJbnNl
cnRpb25TZXQuaW5zZXJ0KDAsIDEuMGYpOwogCiAgICAgICAgICAgICBFbnRyeVN3aXRjaERhdGEq
IGVudHJ5U3dpdGNoRGF0YSA9IG1fZ3JhcGgubV9lbnRyeVN3aXRjaERhdGEuYWRkKCk7CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA9IDA7IGVudHJ5cG9pbnRJbmRl
eCA8IG1fZ3JhcGgubV9udW1iZXJPZkVudHJ5cG9pbnRzOyArK2VudHJ5cG9pbnRJbmRleCkgewog
ICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIG9sZFJvb3QgPSBtX2dyYXBoLm1fcm9vdHNbZW50
cnlwb2ludEluZGV4XTsKLSAgICAgICAgICAgICAgICBlbnRyeXBvaW50SW5kZXhUb0FyZ3VtZW50
c0Jsb2NrLmFkZChlbnRyeXBvaW50SW5kZXgsIG9sZFJvb3QpOwogICAgICAgICAgICAgICAgIGVu
dHJ5U3dpdGNoRGF0YS0+Y2FzZXMuYXBwZW5kKG9sZFJvb3QpOwogCiAgICAgICAgICAgICAgICAg
QVNTRVJUKG9sZFJvb3QtPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpOwpAQCAtNzksMTkgKzk5LDEw
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCEhZW50cnlwb2ludEluZGV4
KTsKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2VudHJ5cG9pbnRJbmRleFRvQ2F0Y2hC
eXRlY29kZU9mZnNldC5hZGQoZW50cnlwb2ludEluZGV4LCBvbGRSb290LT5ieXRlY29kZUJlZ2lu
KTsKICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBOb2RlT3JpZ2luIG9yaWdp
biA9IG9sZFJvb3QtPmF0KDApLT5vcmlnaW47Ci0gICAgICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgMCwgU3BlY05vbmUsIEluaXRpYWxp
emVFbnRyeXBvaW50QXJndW1lbnRzLCBvcmlnaW4sIE9wSW5mbyhlbnRyeXBvaW50SW5kZXgpKTsK
LSAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAg
ICAgICAgICAwLCBTcGVjTm9uZSwgRXhpdE9LLCBvcmlnaW4pOwotICAgICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0LmV4ZWN1dGUob2xkUm9vdCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGVudHJ5U3dpdGNoRGF0YS0+Y2FzZXNbMF0gPT0gbV9ncmFwaC5i
bG9jaygwKSk7IC8vIFdlIHN0cm9uZ2x5IGFzc3VtZSB0aGUgbm9ybWFsIGNhbGwgZW50cnlwb2lu
dCBpcyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC4KIAotICAgICAgICAgICAgbV9ncmFwaC5t
X2FyZ3VtZW50Rm9ybWF0cy5yZXNpemUobV9ncmFwaC5tX251bWJlck9mRW50cnlwb2ludHMpOwot
CiAgICAgICAgICAgICBjb25zdCBib29sIGV4aXRPSyA9IGZhbHNlOwogICAgICAgICAgICAgTm9k
ZU9yaWdpbiBvcmlnaW4geyBDb2RlT3JpZ2luKDApLCBDb2RlT3JpZ2luKDApLCBleGl0T0sgfTsK
ICAgICAgICAgICAgIG5ld1Jvb3QtPmFwcGVuZE5vZGUoCkBAIC0xMDIsNyArMTEzLDcgQEAgcHVi
bGljOgogCiAgICAgICAgICAgICBibG9ja0luc2VydGlvblNldC5leGVjdXRlKCk7CiAgICAgICAg
IH0KLQorICAgICAgICAKICAgICAgICAgU1NBQ2FsY3VsYXRvciBjYWxjdWxhdG9yKG1fZ3JhcGgp
OwogCiAgICAgICAgIG1fZ3JhcGguZW5zdXJlU1NBRG9taW5hdG9ycygpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjI1
ODcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5MywxNCBAQAogI2luY2x1ZGUgPHd0Zi9Cb3guaD4KICNp
bmNsdWRlIDx3dGYvR2lnYWNhZ2UuaD4KIAorI3VuZGVmIFJFTEVBU0VfQVNTRVJUCisjZGVmaW5l
IFJFTEVBU0VfQVNTRVJUKGFzc2VydGlvbikgZG8geyBcCisgICAgaWYgKCEoYXNzZXJ0aW9uKSkg
eyBcCisgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoX19GSUxFX18sIF9fTElORV9f
LCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjYXNzZXJ0aW9uKTsgXAorICAgICAgICBDUkFTSCgpOyBc
CisgICAgfSBcCit9IHdoaWxlICgwKQorCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CiAKIHVzaW5nIG5hbWVzcGFjZSBCMzsKQEAgLTE4Nyw4ICsxOTUsMTAgQEAgcHVibGljOgogICAg
ICAgICAvLyBXZSB1c2UgcHJvbG9ndWUgZnJlcXVlbmN5IGZvciBhbGwgb2YgdGhlIGluaXRpYWxp
emF0aW9uIGNvZGUuCiAgICAgICAgIG1fb3V0LnNldEZyZXF1ZW5jeSgxKTsKICAgICAgICAgCisg
ICAgICAgIGJvb2wgaGFzTXVsdGlwbGVFbnRyeXBvaW50cyA9IG1fZ3JhcGgubV9udW1iZXJPZkVu
dHJ5cG9pbnRzID4gMTsKKyAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgcHJvbG9ndWUgPSBtX291
dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9jayBjYWxsRW50cnlwb2ludEFyZ3VtZW50
U3BlY3VsYXRpb25zID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY2Fs
bEVudHJ5cG9pbnRBcmd1bWVudFNwZWN1bGF0aW9ucyA9IGhhc011bHRpcGxlRW50cnlwb2ludHMg
PyBtX291dC5uZXdCbG9jaygpIDogbnVsbHB0cjsKICAgICAgICAgbV9oYW5kbGVFeGNlcHRpb25z
ID0gbV9vdXQubmV3QmxvY2soKTsKIAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsK
QEAgLTIwMiw3ICsyMTIsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIEJhY2sgdG8gcHJvbG9ndWUg
ZnJlcXVlbmN5IGZvciBhbnkgYm9ja3MgdGhhdCBnZXQgc25lYWtpbHkgY3JlYXRlZCBpbiB0aGUg
aW5pdGlhbGl6YXRpb24gY29kZS4KICAgICAgICAgbV9vdXQuc2V0RnJlcXVlbmN5KDEpOwogICAg
ICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8ocHJvbG9ndWUsIGNhbGxFbnRyeXBvaW50QXJn
dW1lbnRTcGVjdWxhdGlvbnMpOworICAgICAgICBtX291dC5hcHBlbmRUbyhwcm9sb2d1ZSwgaGFz
TXVsdGlwbGVFbnRyeXBvaW50cyA/IGNhbGxFbnRyeXBvaW50QXJndW1lbnRTcGVjdWxhdGlvbnMg
OiBtX2hhbmRsZUV4Y2VwdGlvbnMpOwogICAgICAgICBtX291dC5pbml0aWFsaXplQ29uc3RhbnRz
KG1fcHJvYywgcHJvbG9ndWUpOwogICAgICAgICBjcmVhdGVQaGlWYXJpYWJsZXMoKTsKIApAQCAt
Mjg3LDE5ICsyOTcsMjEgQEAgcHVibGljOgogICAgICAgICBMQmFzaWNCbG9jayBmaXJzdERGR0Jh
c2ljQmxvY2sgPSBsb3dCbG9jayhtX2dyYXBoLmJsb2NrKDApKTsKIAogICAgICAgICB7Ci0gICAg
ICAgICAgICBWZWN0b3I8TEJhc2ljQmxvY2s+IHN1Y2Nlc3NvcnMobV9ncmFwaC5tX251bWJlck9m
RW50cnlwb2ludHMpOwotICAgICAgICAgICAgc3VjY2Vzc29yc1swXSA9IGNhbGxFbnRyeXBvaW50
QXJndW1lbnRTcGVjdWxhdGlvbnM7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDwgbV9ncmFwaC5tX251bWJlck9mRW50cnlwb2ludHM7ICsraSkgewotICAgICAgICAgICAgICAg
IC8vIEN1cnJlbnRseSwgdGhlIG9ubHkgb3RoZXIgZW50cnlwb2ludCBpcyBhbiBvcF9jYXRjaCBl
bnRyeXBvaW50LgotICAgICAgICAgICAgICAgIC8vIFdlIGRvIE9TUiBlbnRyeSBhdCBvcF9jYXRj
aCwgYW5kIHdlIHByb3ZlIGFyZ3VtZW50IGZvcm1hdHMgYmVmb3JlCi0gICAgICAgICAgICAgICAg
Ly8ganVtcGluZyB0byBGVEwgY29kZSwgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBhcmd1bWVu
dCB0eXBlcyBoZXJlCi0gICAgICAgICAgICAgICAgLy8gZm9yIHRoZXNlIGVudHJ5cG9pbnRzLgot
ICAgICAgICAgICAgICAgIHN1Y2Nlc3NvcnNbaV0gPSBmaXJzdERGR0Jhc2ljQmxvY2s7CisgICAg
ICAgICAgICBpZiAoaGFzTXVsdGlwbGVFbnRyeXBvaW50cykgeworICAgICAgICAgICAgICAgIFZl
Y3RvcjxMQmFzaWNCbG9jaz4gc3VjY2Vzc29ycyhtX2dyYXBoLm1fbnVtYmVyT2ZFbnRyeXBvaW50
cyk7CisgICAgICAgICAgICAgICAgc3VjY2Vzc29yc1swXSA9IGNhbGxFbnRyeXBvaW50QXJndW1l
bnRTcGVjdWxhdGlvbnM7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8
IG1fZ3JhcGgubV9udW1iZXJPZkVudHJ5cG9pbnRzOyArK2kpIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gQ3VycmVudGx5LCB0aGUgb25seSBvdGhlciBlbnRyeXBvaW50IGlzIGFuIG9wX2NhdGNo
IGVudHJ5cG9pbnQuCisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvIE9TUiBlbnRyeSBhdCBv
cF9jYXRjaCwgYW5kIHdlIHByb3ZlIGFyZ3VtZW50IGZvcm1hdHMgYmVmb3JlCisgICAgICAgICAg
ICAgICAgICAgIC8vIGp1bXBpbmcgdG8gRlRMIGNvZGUsIHNvIHdlIGRvbid0IG5lZWQgdG8gY2hl
Y2sgYXJndW1lbnQgdHlwZXMgaGVyZQorICAgICAgICAgICAgICAgICAgICAvLyBmb3IgdGhlc2Ug
ZW50cnlwb2ludHMuCisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NvcnNbaV0gPSBmaXJzdERG
R0Jhc2ljQmxvY2s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIG1fb3V0LmVudHJ5U3dpdGNoKHN1Y2Nlc3NvcnMpOworICAgICAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNhbGxFbnRyeXBvaW50QXJndW1lbnRTcGVjdWxhdGlvbnMsIG1faGFu
ZGxlRXhjZXB0aW9ucyk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG1fb3V0LmVudHJ5
U3dpdGNoKHN1Y2Nlc3NvcnMpOwotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY2FsbEVudHJ5
cG9pbnRBcmd1bWVudFNwZWN1bGF0aW9ucywgbV9oYW5kbGVFeGNlcHRpb25zKTsKLQogICAgICAg
ICAgICAgbV9ub2RlID0gbnVsbHB0cjsKICAgICAgICAgICAgIG1fb3JpZ2luID0gTm9kZU9yaWdp
bihDb2RlT3JpZ2luKDApLCBDb2RlT3JpZ2luKDApLCB0cnVlKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329289</attachid>
            <date>2017-12-13 16:50:58 -0800</date>
            <delta_ts>2017-12-13 16:57:15 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>17092</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI1ODgwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBA
CisyMDE3LTEyLTEzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
T2N0YW5lL3JpY2hhcmRzIHJlZ3Jlc3NlZCBieSBhIHdob3BwaW5nIDIwJSBiZWNhdXNlIGVsaW1p
bmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zIGhhcyBhIHdlaXJkIGZpeHBvaW50IHJlcXVpcmVtZW50
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA3ODMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAg
IFRoaXMgZml4ZXMgdGhlIHJlZ3Jlc3Npb24gYnkgZml4cG9pbnRpbmcgQ1NFLiBXZSBuZWVkIHRv
IGZpeHBvaW50IENTRSBiZWNhdXNlIG9mIHRoaXMgY2FzZToKKyAgICAgICAgCisgICAgICAgICAg
ICBCQiMxOgorICAgICAgICAgICAgICAgIGE6IExvYWQoQHgpCisgICAgICAgICAgICAgICAgYjog
TG9hZChAeCkKKyAgICAgICAgICAgICAgICBjOiBMb2FkKEBiKQorICAgICAgICAgICAgQkIjMjoK
KyAgICAgICAgICAgICAgICBkOiBMb2FkKEBiKQorICAgICAgICAgICAgQkIjMzoKKyAgICAgICAg
ICAgICAgICBlOiBMb2FkKEBiKQorICAgICAgICAKKyAgICAgICAgTGV0cyBhc3N1bWUgdGhhdCAj
MyBsb29wcyBhcm91bmQgdG8gIzIsIHNvIHRvIGVsaW1pbmF0ZSBAZCwgd2UgbmVlZCB0byBwcm92
ZSB0aGF0IGl0J3MgcmVkdW5kYW50CisgICAgICAgIHdpdGggYm90aCBAYyBhbmQgQGUuIFRoZSBw
cm9ibGVtIGlzIHRoYXQgYnkgdGhlIHRpbWUgd2UgZ2V0IHRvIEBkLCB0aGUgQ1NFIHN0YXRlIHdp
bGwgbG9vayBsaWtlCisgICAgICAgIHRoaXM6CisKKyAgICAgICAgICAgIEJCIzE6CisgICAgICAg
ICAgICAgICAgYTogTG9hZChAeCkKKyAgICAgICAgICAgICAgICBiOiBMb2FkKEB4KQorICAgICAg
ICAgICAgICAgIGM6IExvYWQoQGEpCisgICAgICAgICAgICAgICAgbWVtb3J5QXRUYWlsOiB7QHg9
PkBhLCBAYT0+QGN9CisgICAgICAgICAgICBCQiMyOgorICAgICAgICAgICAgICAgIGQ6IExvYWQo
QGEpIFtzaWNdCisgICAgICAgICAgICAgICAgbWVtb3J5QXRUYWlsOiB7QGI9PkBkfQorICAgICAg
ICAgICAgQkIjMzoKKyAgICAgICAgICAgICAgICBlOiBMb2FkKEBiKQorICAgICAgICAgICAgICAg
IG1lbW9yeUF0VGFpbDoge0BiPT5AZX0gW3NpY10KKyAgICAgICAgCisgICAgICAgIE5vdGUgdGhh
dCAjMydzIGF0VGFpbCBtYXAgaXMga2V5ZWQgb24gQGIsIHdoaWNoIHdhcyB0aGUgb2xkIChubyBs
b25nZXIgY2Fub25pY2FsKSB2ZXJzaW9uIG9mIEBhLgorICAgICAgICBCdXQgQGQncyBjaGlsZHJl
biB3ZXJlIGFscmVhZHkgc3Vic3RpdHV0ZWQsIHNvIGl0IHJlZmVycyB0byBAYS4gU2luY2UgQGEg
aXMgbm90IGluICMzJ3MgYXRUYWlsCisgICAgICAgIG1hcCwgd2UgZG9uJ3QgZmluZCBpdCBhbmQg
bGVhdmUgdGhlIHJlZHVuZGFuY3kuCisgICAgICAgIAorICAgICAgICBJIHRoaW5rIHRoYXQgdGhl
IGNsZWFuZXN0IHNvbHV0aW9uIGlzIHRvIGZpeHBvaW50LiBDU0UgaXMgcHJldHR5IGNoZWFwLCBz
byBob3BlZnVsbHkgd2UgY2FuIGFmZm9yZAorICAgICAgICB0aGlzLiBJdCBmaXhlcyB0aGUgcmlj
aGFyZHMgcmVncmVzc2lvbiwgc2luY2UgcmljaGFyZHMgaXMgc3VwZXIgZGVwZW5kZW50IG9uIEIz
IENTRS4KKworICAgICAgICAqIGIzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3Bw
OiBMb2dnaW5nLgorICAgICAgICAqIGIzL0IzR2VuZXJhdGUuY3BwOgorICAgICAgICAoSlNDOjpC
Mzo6Z2VuZXJhdGVUb0Fpcik6IEZpeCB0aGUgYnVnLgorICAgICAgICAqIGIzL2Fpci9BaXJSZXBv
cnRVc2VkUmVnaXN0ZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6cmVwb3J0VXNlZFJl
Z2lzdGVycyk6IExvZ2dpbmcuCisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoK
KyAgICAgICAgKiBkZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OnJ1bik6IERvbid0IGdlbmVyYXRlIEVudHJ5U3dpdGNo
IGlmIHdlIGRvbid0IG5lZWQgaXQgKG1ha2VzIElSIGVhc2llciB0byByZWFkKS4KKyAgICAgICAg
KiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6bG93ZXIpOiBEb24ndCBnZW5lcmF0ZSBFbnRyeVN3aXRjaCBpZiB3ZSBkb24ndCBu
ZWVkIGl0IChtYWtlcyBJUiBlYXNpZXIgdG8gcmVhZCkuCisKIDIwMTctMTItMTMgIFNhYW0gQmFy
YXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgVGFrZSBhIHZhbHVlIGRyaXZlbiBh
cHByb2FjaCB0byBob3cgd2UgZW1pdCBzdHJ1Y3R1cmUgY2hlY2tzIGluIFR5cGVDaGVja0hvaXN0
aW5nUGhhc2UgdG8gb2J2aWF0ZSB0aGUgbmVlZCBmb3Igc3RhdGljX2Fzc2VydCBndWFyZHMKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Np
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5h
dGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAJKHJldmlzaW9uIDIyNTg3MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA2LDggKzEwNiwxNCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KICAgICBNZW1vcnlWYWx1ZSogZmluZChWYWx1ZSogcHRyLCBjb25zdCBG
dW5jdG9yJiBmdW5jdG9yKQogICAgIHsKKyAgICAgICAgaWYgKEIzRWxpbWluYXRlQ29tbW9uU3Vi
ZXhwcmVzc2lvbnNJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICAg
ICAgTG9va2luZyBmb3IgIiwgcG9pbnRlckR1bXAocHRyKSwgIiBpbiAiLCAqdGhpcywgIlxuIik7
CiAgICAgICAgIGlmIChNYXRjaGVzKiBtYXRjaGVzID0gZmluZChwdHIpKSB7CisgICAgICAgICAg
ICBpZiAoQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9uc0ludGVybmFsOjp2ZXJib3NlKQor
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgTWF0Y2hlczogIiwgcG9pbnRlckxpc3RE
dW1wKCptYXRjaGVzKSwgIlxuIik7CiAgICAgICAgICAgICBmb3IgKFZhbHVlKiBjYW5kaWRhdGVW
YWx1ZSA6ICptYXRjaGVzKSB7CisgICAgICAgICAgICAgICAgaWYgKEIzRWxpbWluYXRlQ29tbW9u
U3ViZXhwcmVzc2lvbnNJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygiICAgICAgICBIYXZpbmcgY2FuZGlkYXRlOiAiLCBwb2ludGVyRHVtcChjYW5kaWRhdGVW
YWx1ZSksICJcbiIpOwogICAgICAgICAgICAgICAgIGlmIChNZW1vcnlWYWx1ZSogY2FuZGlkYXRl
TWVtb3J5ID0gY2FuZGlkYXRlVmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChmdW5jdG9yKGNhbmRpZGF0ZU1lbW9yeSkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY2FuZGlkYXRlTWVtb3J5OwpAQCAtNDA1LDE1ICs0MTEsMjYgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGhhbmRsZU1lbW9yeVZhbHVlKAogICAgICAgICAgICAgICAgIHB0
ciwgcmFuZ2UsCiAgICAgICAgICAgICAgICAgWyZdIChNZW1vcnlWYWx1ZSogY2FuZGlkYXRlKSAt
PiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEIzRWxpbWluYXRlQ29tbW9uU3ViZXhw
cmVzc2lvbnNJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIiAgICAgICAgQ29uc2RlcmluZyAiLCBwb2ludGVyRHVtcChjYW5kaWRhdGUpLCAiXG4iKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+b2Zmc2V0KCkgIT0gb2Zmc2V0KQog
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNz
aW9uc0ludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
ICAgICAgICAgICAgb2Zmc2V0IG9rLlxuIik7CisgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcGNvZGUoKSA9PSBMb2FkICYmIGNhbmRpZGF0
ZS0+dHlwZSgpID09IHR5cGUpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
IAorICAgICAgICAgICAgICAgICAgICBpZiAoQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9u
c0ludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
ICAgICAgICAgbm90IGEgbG9hZCB3aXRoIG9rIHR5cGUuXG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPm9wY29kZSgpID09IFN0b3Jl
ICYmIGNhbmRpZGF0ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSB0eXBlKQogICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKKyAgICAgICAgICAgICAgICAgICAgaWYgKEIzRWxpbWlu
YXRlQ29tbW9uU3ViZXhwcmVzc2lvbnNJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgICAgIG5vdCBhIHN0b3JlIHdpdGggb2sgdHlwZS5c
biIpOworCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjE3LDggKzYzNCwxMCBAQCBwcml2YXRlOgog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZpbHRlcj4KICAgICBNZW1vcnlNYXRjaGVzIGZpbmRNZW1v
cnlWYWx1ZShWYWx1ZSogcHRyLCBIZWFwUmFuZ2UgcmFuZ2UsIGNvbnN0IEZpbHRlciYgZmlsdGVy
KQogICAgIHsKLSAgICAgICAgaWYgKEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnNJbnRl
cm5hbDo6dmVyYm9zZSkKKyAgICAgICAgaWYgKEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lv
bnNJbnRlcm5hbDo6dmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygqbV92YWx1ZSwgIjog
bG9va2luZyBiYWNrd2FyZCBmb3IgIiwgKnB0ciwgIi4uLlxuIik7CisgICAgICAgICAgICBkYXRh
TG9nKCIgICAgRnVsbCB2YWx1ZTogIiwgZGVlcER1bXAobV92YWx1ZSksICJcbiIpOworICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBpZiAobV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPmhh
c0ZlbmNlKCkpIHsKICAgICAgICAgICAgIGlmIChCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Np
b25zSW50ZXJuYWw6OnZlcmJvc2UpCkBAIC02NTAsNiArNjY5LDggQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIEltcHVyZUJsb2NrRGF0YSYgZGF0YSA9IG1faW1wdXJlQmxvY2tEYXRhW2Jsb2NrXTsK
IAogICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1hdGNoID0gZGF0YS5tZW1vcnlWYWx1ZXNBdFRh
aWwuZmluZChwdHIsIGZpbHRlcik7CisgICAgICAgICAgICBpZiAoQjNFbGltaW5hdGVDb21tb25T
dWJleHByZXNzaW9uc0ludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgICBDb25zZGVyaW5nIG1hdGNoOiAiLCBwb2ludGVyRHVtcChtYXRjaCksICJcbiIpOwogICAg
ICAgICAgICAgaWYgKG1hdGNoICYmIG1hdGNoICE9IG1fdmFsdWUpIHsKICAgICAgICAgICAgICAg
ICBpZiAoQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9uc0ludGVybmFsOjp2ZXJib3NlKQog
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRm91bmQgbWF0Y2g6ICIsICptYXRjaCwg
IlxuIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCShyZXZp
c2lvbiAyMjU4NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDggQEAgdm9pZCBnZW5lcmF0ZVRvQWlyKFByb2Nl
ZHVyZSYgcHJvY2VkdXJlKQogICAgICAgICByZWR1Y2VEb3VibGVUb0Zsb2F0KHByb2NlZHVyZSk7
CiAgICAgICAgIHJlZHVjZVN0cmVuZ3RoKHByb2NlZHVyZSk7CiAgICAgICAgIGhvaXN0TG9vcElu
dmFyaWFudFZhbHVlcyhwcm9jZWR1cmUpOwotICAgICAgICBlbGltaW5hdGVDb21tb25TdWJleHBy
ZXNzaW9ucyhwcm9jZWR1cmUpOworICAgICAgICBpZiAoZWxpbWluYXRlQ29tbW9uU3ViZXhwcmVz
c2lvbnMocHJvY2VkdXJlKSkKKyAgICAgICAgICAgIGVsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Np
b25zKHByb2NlZHVyZSk7CiAgICAgICAgIGluZmVyU3dpdGNoZXMocHJvY2VkdXJlKTsKICAgICAg
ICAgZHVwbGljYXRlVGFpbHMocHJvY2VkdXJlKTsKICAgICAgICAgZml4U1NBKHByb2NlZHVyZSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlcG9ydFVzZWRSZWdpc3Rl
cnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVw
b3J0VXNlZFJlZ2lzdGVycy5jcHAJKHJldmlzaW9uIDIyNTg3MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDE0ICszOSwyNSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlCiB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoQ29kZSYgY29kZSkKIHsKICAgICBQaGFzZVNj
b3BlIHBoYXNlU2NvcGUoY29kZSwgInJlcG9ydFVzZWRSZWdpc3RlcnMiKTsKKyAgICAKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworICAgIAorICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICBkYXRhTG9nKCJEb2luZyByZXBvcnRVc2VkUmVnaXN0ZXJzIG9uOlxuIiwg
Y29kZSk7CiAKICAgICBSZWdMaXZlbmVzcyBsaXZlbmVzcyhjb2RlKTsKIAogICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgZGF0YUxvZygiTG9va2luZyBhdDogIiwgKmJsb2NrLCAiXG4iKTsKKyAgICAgICAgCiAgICAg
ICAgIFJlZ0xpdmVuZXNzOjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CiAK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5k
ZXgtLTspIHsKICAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAg
ZGF0YUxvZygiICAgTG9va2luZyBhdDogIiwgaW5zdCwgIlxuIik7CiAKICAgICAgICAgICAgIC8v
IEtpbGwgZGVhZCBhc3NpZ25tZW50cyB0byByZWdpc3RlcnMuIEZvciBzaW1wbGljaXR5IHdlIHNh
eSB0aGF0IGEgc3RvcmUgaXMga2lsbGFibGUgaWYKICAgICAgICAgICAgIC8vIGl0IGhhcyBvbmx5
IGxhdGUgZGVmcyBhbmQgdGhvc2UgbGF0ZSBkZWZzIGFyZSB0byByZWdpc3RlcnMgdGhhdCBhcmUg
ZGVhZCByaWdodCBub3cuCkBAIC01NSwxNiArNjYsMjIgQEAgdm9pZCByZXBvcnRVc2VkUmVnaXN0
ZXJzKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAogICAgICAg
ICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQmFuaywgV2lkdGgp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFybHlEZWYocm9sZSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICBDYW5ub3QgZGVsZXRlIGJlY2F1c2Ug
b2YgIiwgYXJnLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5EZWxldGUg
PSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFyZzo6aXNMYXRl
RGVmKHJvbGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghYXJnLmlzUmVnKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygiICAgICAgICBDYW5ub3QgZGVsZXRlIGJlY2F1c2UgYXJnIGlzIG5vdCByZWc6ICIsIGFy
ZywgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuRGVsZXRlID0gZmFsc2U7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsQ2FsYy5pc0xpdmUoYXJn
LnJlZygpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIENhbm5vdCBkZWxl
dGUgYmVjYXVzZSBhcmcgaXMgbGl2ZTogIiwgYXJnLCAiXG4iKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYW5EZWxldGUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC04Nyw2ICsxMDQsOSBAQCB2
b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICByZXR1
cm4gIWluc3Q7CiAgICAgICAgICAgICB9KTsKICAgICB9CisKKyAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgZGF0YUxvZygiQWZ0ZXIgcmVwb3J0VXNlZFJlZ2lzdGVyczpcbiIsIGNvZGUpOwogfQog
CiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMjI1ODcwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogCiBuYW1lc3BhY2UgREZHQnl0ZUNvZGVQYXJzZXJJbnRlcm5hbCB7CiAjaWZkZWYgTkRFQlVH
Ci1zdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CitzdGF0aWMgY29uc3QgYm9vbCB2
ZXJib3NlID0gdHJ1ZTsKICNlbHNlCiBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gdHJ1ZTsK
ICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9u
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NB
Q29udmVyc2lvblBoYXNlLmNwcAkocmV2aXNpb24gMjI1ODcwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzcsNiArMzcsMTQgQEAKICNpbmNsdWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmgiCiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCisjdW5kZWYgUkVMRUFTRV9BU1NFUlQKKyNkZWZpbmUg
UkVMRUFTRV9BU1NFUlQoYXNzZXJ0aW9uKSBkbyB7IFwKKyAgICBpZiAoIShhc3NlcnRpb24pKSB7
IFwKKyAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShfX0ZJTEVfXywgX19MSU5FX18s
IFdURl9QUkVUVFlfRlVOQ1RJT04sICNhc3NlcnRpb24pOyBcCisgICAgICAgIENSQVNIKCk7IFwK
KyAgICB9IFwKK30gd2hpbGUgKDApCisKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IAogY2xhc3MgU1NBQ29udmVyc2lvblBoYXNlIDogcHVibGljIFBoYXNlIHsKQEAgLTYwLDE2ICs2
OCwyOCBAQCBwdWJsaWM6CiAKICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgQmFzaWNCbG9jayos
IFdURjo6SW50SGFzaDx1bnNpZ25lZD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFp
dHM8dW5zaWduZWQ+PiBlbnRyeXBvaW50SW5kZXhUb0FyZ3VtZW50c0Jsb2NrOwogCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1fZ3JhcGgubV9udW1iZXJPZkVudHJ5cG9pbnRzID0gbV9ncmFwaC5t
X3Jvb3RzLnNpemUoKTsKKyAgICAgICAgbV9ncmFwaC5tX251bWJlck9mRW50cnlwb2ludHMgPSBt
X2dyYXBoLm1fcm9vdHMuc2l6ZSgpOworICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRGb3JtYXRz
LnJlc2l6ZShtX2dyYXBoLm1fbnVtYmVyT2ZFbnRyeXBvaW50cyk7CiAKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggPSAwOyBlbnRyeXBvaW50SW5kZXggPCBtX2dyYXBoLm1f
bnVtYmVyT2ZFbnRyeXBvaW50czsgKytlbnRyeXBvaW50SW5kZXgpIHsKKyAgICAgICAgICAgIEJh
c2ljQmxvY2sqIG9sZFJvb3QgPSBtX2dyYXBoLm1fcm9vdHNbZW50cnlwb2ludEluZGV4XTsKKyAg
ICAgICAgICAgIGVudHJ5cG9pbnRJbmRleFRvQXJndW1lbnRzQmxvY2suYWRkKGVudHJ5cG9pbnRJ
bmRleCwgb2xkUm9vdCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE5vZGVPcmlnaW4gb3Jp
Z2luID0gb2xkUm9vdC0+YXQoMCktPm9yaWdpbjsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgMCwgU3BlY05vbmUsIEluaXRpYWxpemVFbnRy
eXBvaW50QXJndW1lbnRzLCBvcmlnaW4sIE9wSW5mbyhlbnRyeXBvaW50SW5kZXgpKTsKKyAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgMCwgU3Bl
Y05vbmUsIEV4aXRPSywgb3JpZ2luKTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1
dGUob2xkUm9vdCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9ncmFwaC5tX251bWJlck9m
RW50cnlwb2ludHMgPiAxKSB7CiAgICAgICAgICAgICBCbG9ja0luc2VydGlvblNldCBibG9ja0lu
c2VydGlvblNldChtX2dyYXBoKTsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIG5ld1Jvb3QgPSBi
bG9ja0luc2VydGlvblNldC5pbnNlcnQoMCwgMS4wZik7CiAKICAgICAgICAgICAgIEVudHJ5U3dp
dGNoRGF0YSogZW50cnlTd2l0Y2hEYXRhID0gbV9ncmFwaC5tX2VudHJ5U3dpdGNoRGF0YS5hZGQo
KTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgZW50cnlwb2ludEluZGV4ID0gMDsgZW50cnlw
b2ludEluZGV4IDwgbV9ncmFwaC5tX251bWJlck9mRW50cnlwb2ludHM7ICsrZW50cnlwb2ludElu
ZGV4KSB7CiAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogb2xkUm9vdCA9IG1fZ3JhcGgubV9y
b290c1tlbnRyeXBvaW50SW5kZXhdOwotICAgICAgICAgICAgICAgIGVudHJ5cG9pbnRJbmRleFRv
QXJndW1lbnRzQmxvY2suYWRkKGVudHJ5cG9pbnRJbmRleCwgb2xkUm9vdCk7CiAgICAgICAgICAg
ICAgICAgZW50cnlTd2l0Y2hEYXRhLT5jYXNlcy5hcHBlbmQob2xkUm9vdCk7CiAKICAgICAgICAg
ICAgICAgICBBU1NFUlQob2xkUm9vdC0+cHJlZGVjZXNzb3JzLmlzRW1wdHkoKSk7CkBAIC03OSwx
OSArOTksMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoISFlbnRyeXBv
aW50SW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fZW50cnlwb2ludEluZGV4
VG9DYXRjaEJ5dGVjb2RlT2Zmc2V0LmFkZChlbnRyeXBvaW50SW5kZXgsIG9sZFJvb3QtPmJ5dGVj
b2RlQmVnaW4pOwogICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIE5vZGVPcmln
aW4gb3JpZ2luID0gb2xkUm9vdC0+YXQoMCktPm9yaWdpbjsKLSAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAwLCBTcGVjTm9uZSwg
SW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHMsIG9yaWdpbiwgT3BJbmZvKGVudHJ5cG9pbnRJ
bmRleCkpOwotICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAg
ICAgICAgICAgICAgICAgIDAsIFNwZWNOb25lLCBFeGl0T0ssIG9yaWdpbik7Ci0gICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShvbGRSb290KTsKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZW50cnlTd2l0Y2hEYXRhLT5jYXNlc1swXSA9PSBt
X2dyYXBoLmJsb2NrKDApKTsgLy8gV2Ugc3Ryb25nbHkgYXNzdW1lIHRoZSBub3JtYWwgY2FsbCBl
bnRyeXBvaW50IGlzIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LgogCi0gICAgICAgICAgICBt
X2dyYXBoLm1fYXJndW1lbnRGb3JtYXRzLnJlc2l6ZShtX2dyYXBoLm1fbnVtYmVyT2ZFbnRyeXBv
aW50cyk7Ci0KICAgICAgICAgICAgIGNvbnN0IGJvb2wgZXhpdE9LID0gZmFsc2U7CiAgICAgICAg
ICAgICBOb2RlT3JpZ2luIG9yaWdpbiB7IENvZGVPcmlnaW4oMCksIENvZGVPcmlnaW4oMCksIGV4
aXRPSyB9OwogICAgICAgICAgICAgbmV3Um9vdC0+YXBwZW5kTm9kZSgKQEAgLTEwMiw3ICsxMTMs
NyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIGJsb2NrSW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKTsK
ICAgICAgICAgfQotCisgICAgICAgIAogICAgICAgICBTU0FDYWxjdWxhdG9yIGNhbGN1bGF0b3Io
bV9ncmFwaCk7CiAKICAgICAgICAgbV9ncmFwaC5lbnN1cmVTU0FEb21pbmF0b3JzKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZp
c2lvbiAyMjU4NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDE0IEBACiAjaW5jbHVkZSA8d3RmL0Jv
eC5oPgogI2luY2x1ZGUgPHd0Zi9HaWdhY2FnZS5oPgogCisjdW5kZWYgUkVMRUFTRV9BU1NFUlQK
KyNkZWZpbmUgUkVMRUFTRV9BU1NFUlQoYXNzZXJ0aW9uKSBkbyB7IFwKKyAgICBpZiAoIShhc3Nl
cnRpb24pKSB7IFwKKyAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShfX0ZJTEVfXywg
X19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICNhc3NlcnRpb24pOyBcCisgICAgICAgIENS
QVNIKCk7IFwKKyAgICB9IFwKK30gd2hpbGUgKDApCisKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKIAogdXNpbmcgbmFtZXNwYWNlIEIzOwpAQCAtMTg3LDggKzE5NSwxMCBAQCBwdWJs
aWM6CiAgICAgICAgIC8vIFdlIHVzZSBwcm9sb2d1ZSBmcmVxdWVuY3kgZm9yIGFsbCBvZiB0aGUg
aW5pdGlhbGl6YXRpb24gY29kZS4KICAgICAgICAgbV9vdXQuc2V0RnJlcXVlbmN5KDEpOwogICAg
ICAgICAKKyAgICAgICAgYm9vbCBoYXNNdWx0aXBsZUVudHJ5cG9pbnRzID0gbV9ncmFwaC5tX251
bWJlck9mRW50cnlwb2ludHMgPiAxOworICAgIAogICAgICAgICBMQmFzaWNCbG9jayBwcm9sb2d1
ZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNhbGxFbnRyeXBvaW50
QXJndW1lbnRTcGVjdWxhdGlvbnMgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNC
bG9jayBjYWxsRW50cnlwb2ludEFyZ3VtZW50U3BlY3VsYXRpb25zID0gaGFzTXVsdGlwbGVFbnRy
eXBvaW50cyA/IG1fb3V0Lm5ld0Jsb2NrKCkgOiBudWxscHRyOwogICAgICAgICBtX2hhbmRsZUV4
Y2VwdGlvbnMgPSBtX291dC5uZXdCbG9jaygpOwogCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJ
bmRleCkgewpAQCAtMjAyLDcgKzIxMiw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gQmFjayB0byBw
cm9sb2d1ZSBmcmVxdWVuY3kgZm9yIGFueSBib2NrcyB0aGF0IGdldCBzbmVha2lseSBjcmVhdGVk
IGluIHRoZSBpbml0aWFsaXphdGlvbiBjb2RlLgogICAgICAgICBtX291dC5zZXRGcmVxdWVuY3ko
MSk7CiAgICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhwcm9sb2d1ZSwgY2FsbEVudHJ5
cG9pbnRBcmd1bWVudFNwZWN1bGF0aW9ucyk7CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHByb2xv
Z3VlLCBoYXNNdWx0aXBsZUVudHJ5cG9pbnRzID8gY2FsbEVudHJ5cG9pbnRBcmd1bWVudFNwZWN1
bGF0aW9ucyA6IG1faGFuZGxlRXhjZXB0aW9ucyk7CiAgICAgICAgIG1fb3V0LmluaXRpYWxpemVD
b25zdGFudHMobV9wcm9jLCBwcm9sb2d1ZSk7CiAgICAgICAgIGNyZWF0ZVBoaVZhcmlhYmxlcygp
OwogCkBAIC0yODcsMTkgKzI5NywyMSBAQCBwdWJsaWM6CiAgICAgICAgIExCYXNpY0Jsb2NrIGZp
cnN0REZHQmFzaWNCbG9jayA9IGxvd0Jsb2NrKG1fZ3JhcGguYmxvY2soMCkpOwogCiAgICAgICAg
IHsKLSAgICAgICAgICAgIFZlY3RvcjxMQmFzaWNCbG9jaz4gc3VjY2Vzc29ycyhtX2dyYXBoLm1f
bnVtYmVyT2ZFbnRyeXBvaW50cyk7Ci0gICAgICAgICAgICBzdWNjZXNzb3JzWzBdID0gY2FsbEVu
dHJ5cG9pbnRBcmd1bWVudFNwZWN1bGF0aW9uczsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDE7IGkgPCBtX2dyYXBoLm1fbnVtYmVyT2ZFbnRyeXBvaW50czsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gQ3VycmVudGx5LCB0aGUgb25seSBvdGhlciBlbnRyeXBvaW50IGlzIGFuIG9w
X2NhdGNoIGVudHJ5cG9pbnQuCi0gICAgICAgICAgICAgICAgLy8gV2UgZG8gT1NSIGVudHJ5IGF0
IG9wX2NhdGNoLCBhbmQgd2UgcHJvdmUgYXJndW1lbnQgZm9ybWF0cyBiZWZvcmUKLSAgICAgICAg
ICAgICAgICAvLyBqdW1waW5nIHRvIEZUTCBjb2RlLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNr
IGFyZ3VtZW50IHR5cGVzIGhlcmUKLSAgICAgICAgICAgICAgICAvLyBmb3IgdGhlc2UgZW50cnlw
b2ludHMuCi0gICAgICAgICAgICAgICAgc3VjY2Vzc29yc1tpXSA9IGZpcnN0REZHQmFzaWNCbG9j
azsKKyAgICAgICAgICAgIGlmIChoYXNNdWx0aXBsZUVudHJ5cG9pbnRzKSB7CisgICAgICAgICAg
ICAgICAgVmVjdG9yPExCYXNpY0Jsb2NrPiBzdWNjZXNzb3JzKG1fZ3JhcGgubV9udW1iZXJPZkVu
dHJ5cG9pbnRzKTsKKyAgICAgICAgICAgICAgICBzdWNjZXNzb3JzWzBdID0gY2FsbEVudHJ5cG9p
bnRBcmd1bWVudFNwZWN1bGF0aW9uczsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAxOyBpIDwgbV9ncmFwaC5tX251bWJlck9mRW50cnlwb2ludHM7ICsraSkgeworICAgICAgICAg
ICAgICAgICAgICAvLyBDdXJyZW50bHksIHRoZSBvbmx5IG90aGVyIGVudHJ5cG9pbnQgaXMgYW4g
b3BfY2F0Y2ggZW50cnlwb2ludC4KKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG8gT1NSIGVu
dHJ5IGF0IG9wX2NhdGNoLCBhbmQgd2UgcHJvdmUgYXJndW1lbnQgZm9ybWF0cyBiZWZvcmUKKyAg
ICAgICAgICAgICAgICAgICAgLy8ganVtcGluZyB0byBGVEwgY29kZSwgc28gd2UgZG9uJ3QgbmVl
ZCB0byBjaGVjayBhcmd1bWVudCB0eXBlcyBoZXJlCisgICAgICAgICAgICAgICAgICAgIC8vIGZv
ciB0aGVzZSBlbnRyeXBvaW50cy4KKyAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yc1tpXSA9
IGZpcnN0REZHQmFzaWNCbG9jazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgbV9vdXQuZW50cnlTd2l0Y2goc3VjY2Vzc29ycyk7CisgICAgICAg
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY2FsbEVudHJ5cG9pbnRBcmd1bWVudFNwZWN1bGF0aW9u
cywgbV9oYW5kbGVFeGNlcHRpb25zKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbV9v
dXQuZW50cnlTd2l0Y2goc3VjY2Vzc29ycyk7Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhj
YWxsRW50cnlwb2ludEFyZ3VtZW50U3BlY3VsYXRpb25zLCBtX2hhbmRsZUV4Y2VwdGlvbnMpOwot
CiAgICAgICAgICAgICBtX25vZGUgPSBudWxscHRyOwogICAgICAgICAgICAgbV9vcmlnaW4gPSBO
b2RlT3JpZ2luKENvZGVPcmlnaW4oMCksIENvZGVPcmlnaW4oMCksIHRydWUpOwogCg==
</data>
<flag name="review"
          id="348393"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>