<?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>85945</bug_id>
          
          <creation_ts>2012-05-08 18:51:56 -0700</creation_ts>
          <short_desc>DFG variable capture analysis should work even if the variables arose through inlining</short_desc>
          <delta_ts>2012-05-23 00:29:10 -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>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>87205</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>619074</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-08 18:51:56 -0700</bug_when>
    <thetext>Currently we cannot inline functions that create arguments or access arguments reflectively, principally because variable capture analysis is not inlining-aware.  Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>619087</commentid>
    <comment_count>1</comment_count>
      <attachid>140849</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-08 18:59:36 -0700</bug_when>
    <thetext>Created attachment 140849
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>619163</commentid>
    <comment_count>2</comment_count>
      <attachid>140849</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-05-08 22:14:49 -0700</bug_when>
    <thetext>Comment on attachment 140849
the patch

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

In general this patch looks fine (aside from the bool vs. enum issue i mention), but i&apos;m somewhat tired so don&apos;t feel sufficiently focussed to r+ it.  Will re-review in the morning.

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:114
&gt; -    VariableAccessData* newVariableAccessData(int operand)
&gt; +    VariableAccessData* newVariableAccessData(int operand, bool isCaptured)

We try to use enums rather than bools in cases like this as they&apos;re more descriptive, and you also escape the automatic int-&gt;bool conversion purgatory</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>619179</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-08 22:43:26 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 140849 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=140849&amp;action=review
&gt; 
&gt; In general this patch looks fine (aside from the bool vs. enum issue i mention), but i&apos;m somewhat tired so don&apos;t feel sufficiently focussed to r+ it.  Will re-review in the morning.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:114
&gt; &gt; -    VariableAccessData* newVariableAccessData(int operand)
&gt; &gt; +    VariableAccessData* newVariableAccessData(int operand, bool isCaptured)
&gt; 
&gt; We try to use enums rather than bools in cases like this as they&apos;re more descriptive, and you also escape the automatic int-&gt;bool conversion purgatory

I agree that in general that is the right way to do it.

But here a bool is really a lot better.  Consider what would happen if this was an enum.  The most common idiom for this method is to say:

bool isCaptured = something-&gt;isCaptured();
... // bunch of code
if (isCaptured) { ... /* do special things */ ... }
... // a lot of other code
stuff = newVariableAccessData(thingy, isCaptured);

If newVariableAccessData() took an enum instead, then I&apos;d either have to make isCaptured() return that enum, or I&apos;d have to make this code absolutely horrible:

stuff = newVariableAccessData(thingy, isCaptured ? Captured : NotCaptured);

That is clearly a regression.  The alternative is to have isCaptured() and mergeIsCaptured() use the enum, but then I&apos;d lose the clarify of using boolean arithmetic.  Notice that mergeIsCaptured() does things like:

bool newIsCaptured = m_isCaptured | isCaptured

Do you really want this to become:

CaptureMode newIsCaptured = ((m_isCaptured == Captured) | (isCaptured == Captured)) ? Captured : NotCaptured;

Finally, there is only *one* place where newVariableAccessData() is called in a manner that leads the second argument to be confusing (i.e. where we pass false as the second argument).  In all other places we pass a variable called &quot;isCaptured&quot; as the second argument.

So, I just don&apos;t buy that turning this into an enum is going to make anyone&apos;s life any easier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>619818</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-09 14:06:10 -0700</bug_when>
    <thetext>Landed in Landed in http://trac.webkit.org/changeset/116555</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631322</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-23 00:28:53 -0700</bug_when>
    <thetext>Merged in http://trac.webkit.org/changeset/118136</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140849</attachid>
            <date>2012-05-08 18:59:36 -0700</date>
            <delta_ts>2012-05-09 13:08:45 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>inlinecapture_patch_1.diff</filename>
            <type>text/plain</type>
            <size>35593</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE2NDc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBA
CisyMDEyLTA1LTA4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHZhcmlhYmxlIGNhcHR1cmUgYW5hbHlzaXMgc2hvdWxkIHdvcmsgZXZlbiBpZiB0aGUgdmFy
aWFibGVzIGFyb3NlIHRocm91Z2ggaW5saW5pbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTg1OTQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGp1c3QgY2hhbmdlcyBob3cgdGhlIERG
RyBxdWVyaWVzIHdoZXRoZXIgYSB2YXJpYWJsZSBpcyBjYXB0dXJlZC4gSXQgZG9lcyBub3QKKyAg
ICAgICAgY2hhbmdlIGFueSB1c2VyLXZpc2libGUgYmVoYXZpb3IuCisgICAgICAgIAorICAgICAg
ICBBcyBwYXJ0IG9mIHRoaXMgY2hhbmdlLCBJIGZ1cnRoZXIgc29saWRpZmllZCB0aGUgcG9saWN5
IHRoYXQgdGhlIENGQSBiZWhhdmVzIGluIGFuCisgICAgICAgIHVuZGVmaW5lZCB3YXkgZm9yIGNh
cHR1cmVkIGxvY2FscyBhbmQgcXVlcmllcyBhYm91dCB0aGVpciB2YWx1ZXMgd2lsbCBub3QgeWll
bGQKKyAgICAgICAgcmVsaWFibGUgcmVzdWx0cy4gVGhpcyB3aWxsIGxpa2VseSBiZSBjaGFuZ2Vk
IGluIHRoZSBmdXR1cmUsIGJ1dCBmb3Igbm93IGl0IG1ha2VzCisgICAgICAgIHNlbnNlLgorICAg
ICAgICAKKyAgICAgICAgT25lIGZ1biBwYXJ0IGFib3V0IHRoaXMgY2hhbmdlIGlzIHRoYXQgaXQg
cmVjb2duaXplcyB0aGF0IHRoZSBzYW1lIHZhcmlhYmxlIG1heQorICAgICAgICBiZSBib3RoIGNh
cHR1cmVkIGFuZCBub3QsIGF0IHRoZSBzYW1lIHRpbWUsIGJlY2F1c2UgdGhlaXIgbGl2ZSBpbnRl
cnZhbCBzcGFucworICAgICAgICBpbmxpbmluZyBib3VuZGFyaWVzLiBUaGlzIG9ubHkgaGFwcGVu
cyBpbiB0aGUgY2FzZSBvZiBhcmd1bWVudHMgdG8gZnVuY3Rpb25zIHRoYXQKKyAgICAgICAgY2Fw
dHVyZSB0aGVpciBhcmd1bWVudHMsIGFuZCB0aGlzIGNoYW5nZSB0cmVhdHMgdGhlbSB3aXRoIGp1
c3QgdGhlIHJpZ2h0IHRvdWNoIG9mCisgICAgICAgIGNvbnNlcnZhdGlzbTogdGhleSB3aWxsIGJl
IHRyZWF0ZWQgYXMgaWYgY2FwdHVyZWQgYnkgdGhlIGNhbGxlciBhcyB3ZWxsIGFzIHRoZSAKKyAg
ICAgICAgY2FsbGVlLgorICAgICAgICAKKyAgICAgICAgRmluYWxseSwgdGhpcyBhbHNvIGFkZHMg
Y2FwdHVyZWQgdmFyaWFibGUgcmVhc29uaW5nIHRvIHRoZSBJbmxpbmVDYWxsRnJhbWUsIHdoaWNo
CisgICAgICAgIEkgdGhvdWdodCBtaWdodCBiZSB1c2VmdWwgZm9yIGxhdGVyIHRvb2xpbmcuCisg
ICAgICAgIAorICAgICAgICBUaGlzIGlzIHBlcmYtbmV1dHJhbCwgc2luY2UgaXQgZG9lcyBpdCBk
b2VzIG5vdCBtYWtlIHRoZSBERkcgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcworICAgICAgICBuZXcg
ZnVuY3Rpb25hbGl0eSBpbiBhbnkgd2F5LiBJbiBwYXJ0aWN1bGFyLCBpdCBpcyBzdGlsbCB0aGUg
Y2FzZSB0aGF0IHRoZSBERkcgd2lsbAorICAgICAgICBub3QgaW5saW5lIGZ1bmN0aW9ucyB0aGF0
IHVzZSBhcmd1bWVudHMgcmVmbGVjdGl2ZWx5IG9yIHRoYXQgY3JlYXRlIGFjdGl2YXRpb25zLgor
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChDb2RlQmxvY2spOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om5lZWRzQWN0aXZhdGlvbik6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6YXJndW1lbnRJc0NhcHR1cmVkKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
Ojpsb2NhbElzQ2FwdHVyZWQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzQ2FwdHVyZWQp
OgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVPcmlnaW4uaDoKKyAgICAgICAgKElubGluZUNhbGxG
cmFtZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUpOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdl
KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpuZXdWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OnNldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6Z2V0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRB
cmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZsdXNoQXJndW1l
bnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Zml4VmFyaWFibGVBY2Nlc3NQcmVkaWN0aW9u
cyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6
OklubGluZVN0YWNrRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBo
YXNlLmNwcDoKKyAgICAgICAgKENGR1NpbXBsaWZpY2F0aW9uUGhhc2UpOgorICAgICAgICAoSlND
OjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6OmtlZXBPcGVyYW5kQWxpdmUpOgorICAgICAg
ICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6OmZpeFBvc3NpYmxlR2V0TG9jYWwp
OgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6OmZpeFRhaWxPcGVy
YW5kKToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uLmg6CisgICAgICAgICogZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6bmFt
ZU9mVmFyaWFibGVBY2Nlc3NEYXRhKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6bmVlZHNBY3RpdmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZH
OjpHcmFwaDo6dXNlc0FyZ3VtZW50cyk6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZTo6ZG9Sb3VuZE9mRG91YmxlVm90aW5nKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZSk6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOgorICAgICAgICAo
SlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAgICAg
ICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6Om1lcmdlSXNDYXB0dXJlZCk6CisgICAg
ICAgIChWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlQWNj
ZXNzRGF0YTo6aXNDYXB0dXJlZCk6CisKIDIwMTItMDUtMDggIEZpbGlwIFBpemxvICA8ZnBpemxv
QGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgc2hvdWxkIHN1cHBvcnQgb3BfZ2V0X2FyZ3VtZW50
X2J5X3ZhbCBhbmQgb3BfZ2V0X2FyZ3VtZW50c19sZW5ndGgKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDExNjM3OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
NDYzLDYgKzQ2MywzMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBtX2Fj
dGl2YXRpb25SZWdpc3RlcjsKICAgICAgICAgfQogICAgICAgICBib29sIHVzZXNBcmd1bWVudHMo
KSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50c1JlZ2lzdGVyICE9IC0xOyB9CisgICAgICAgIAor
ICAgICAgICBib29sIG5lZWRzQWN0aXZhdGlvbigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBuZWVkc0Z1bGxTY29wZUNoYWluKCkgJiYgY29kZVR5cGUoKSAhPSBHbG9iYWxD
b2RlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGFyZ3VtZW50SXNDYXB0dXJl
ZChpbnQpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZWVkc0FjdGl2YXRp
b24oKSB8fCB1c2VzQXJndW1lbnRzKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJv
b2wgbG9jYWxJc0NhcHR1cmVkKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBpbnQg
b3BlcmFuZCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJh
bWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhbmQgPCBtX251bUNhcHR1cmVkVmFyczsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIGlubGluZUNhbGxGcmFtZS0+Y2FwdHVy
ZWRWYXJzLmdldChvcGVyYW5kKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBp
c0NhcHR1cmVkKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBpbnQgb3BlcmFuZCkg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJh
bmQpKQorICAgICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudElzQ2FwdHVyZWQob3BlcmFuZFRv
QXJndW1lbnQob3BlcmFuZCkpOworICAgICAgICAgICAgcmV0dXJuIGxvY2FsSXNDYXB0dXJlZChp
bmxpbmVDYWxsRnJhbWUsIG9wZXJhbmQpOworICAgICAgICB9CiAKICAgICAgICAgQ29kZVR5cGUg
Y29kZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVUeXBlOyB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkocmV2aXNpb24gMTE2Mzc4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiVmFsdWVSZWNvdmVyeS5oIgogI2lu
Y2x1ZGUgIldyaXRlQmFycmllci5oIgorI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KICNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC05
Miw2ICs5Myw3IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIFdyaXRlQmFycmllcjxF
eGVjdXRhYmxlQmFzZT4gZXhlY3V0YWJsZTsKICAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4g
Y2FsbGVlOwogICAgIENvZGVPcmlnaW4gY2FsbGVyOworICAgIEJpdFZlY3RvciBjYXB0dXJlZFZh
cnM7IC8vIEluZGV4ZWQgYnkgdGhlIG1hY2hpbmUgY2FsbCBmcmFtZSdzIHZhcmlhYmxlIG51bWJl
cmluZy4KICAgICB1bnNpZ25lZCBzdGFja09mZnNldCA6IDMxOwogICAgIGJvb2wgaXNDYWxsIDog
MTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RT
dGF0ZS5jcHAJKHJldmlzaW9uIDExNjM3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBAQCB2
b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoR3JhcGgmIGdyCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGdyYXBoLmFyZ3VtZW50SXND
YXB0dXJlZChpKSkgeworICAgICAgICBpZiAobm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXND
YXB0dXJlZCgpKSB7CiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSku
bWFrZVRvcCgpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTE0OSw3ICsx
NDksOCBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoR3JhcGgmIGdyCiAgICAgICAg
IHJvb3QtPnZhbHVlc0F0VGFpbC5hcmd1bWVudChpKS5jbGVhcigpOwogICAgIH0KICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHJvb3QtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyAr
K2kpIHsKLSAgICAgICAgaWYgKGdyYXBoLmxvY2FsSXNDYXB0dXJlZChpKSkKKyAgICAgICAgTm9k
ZUluZGV4IG5vZGVJbmRleCA9IHJvb3QtPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKTsKKyAgICAg
ICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUgJiYgZ3JhcGhbbm9kZUluZGV4XS52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFk
LmxvY2FsKGkpLm1ha2VUb3AoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcm9vdC0+dmFs
dWVzQXRIZWFkLmxvY2FsKGkpLmNsZWFyKCk7CkBAIC0xOTcsNyArMTk4LDggQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjplbmRCYXNpY0Jsb2NrKE1lcmdlTQogICAgICAgICAgICAgZGF0YUxvZygiICAg
ICAgICBNZXJnaW5nIHN0YXRlIGZvciBhcmd1bWVudCAlenUuXG4iLCBhcmd1bWVudCk7CiAjZW5k
aWYKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxvY2stPnZhbHVl
c0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCk7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5hcmd1
bWVudElzQ2FwdHVyZWQoYXJndW1lbnQpKSB7CisgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUlu
ZGV4ID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCk7CisgICAgICAg
ICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSAmJiBtX2dyYXBoW25vZGVJbmRleF0udmFyaWFi
bGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkgewogICAgICAgICAgICAgICAgIGlmICghZGVz
dGluYXRpb24uaXNUb3AoKSkgewogICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5tYWtl
VG9wKCk7CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwpAQCAtMjExLDcgKzIx
Myw4IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZW5kQmFzaWNCbG9jayhNZXJnZU0KICAgICAgICAg
ICAgIGRhdGFMb2coIiAgICAgICAgTWVyZ2luZyBzdGF0ZSBmb3IgbG9jYWwgJXp1LlxuIiwgbG9j
YWwpOwogI2VuZGlmCiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGJs
b2NrLT52YWx1ZXNBdFRhaWwubG9jYWwobG9jYWwpOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
bG9jYWxJc0NhcHR1cmVkKGxvY2FsKSkgeworICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRl
eCA9IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpOworICAgICAgICAgICAgaWYg
KG5vZGVJbmRleCAhPSBOb05vZGUgJiYgbV9ncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIWRlc3RpbmF0aW9u
LmlzVG9wKCkpIHsKICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24ubWFrZVRvcCgpOwog
ICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKQEAgLTI1Nyw3ICsyNjAsNyBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgfQogICAgICAgICAg
ICAgCiAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICBpZiAobV9ncmFwaC5pc0NhcHR1cmVk
KG5vZGUubG9jYWwoKSkpCisgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5p
c0NhcHR1cmVkKCkpCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkgPSBtX3ZhcmlhYmxl
cy5vcGVyYW5kKG5vZGUubG9jYWwoKSk7CkBAIC0yNjUsNyArMjY4LDcgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBT
ZXRMb2NhbDogewotICAgICAgICBpZiAobV9ncmFwaC5pc0NhcHR1cmVkKG5vZGUubG9jYWwoKSkp
CisgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkgewpAQCAtMTQxNyw3ICsxNDIwLDgg
QEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2UoQmFzaWNCbAogICAgIAogICAgIGZv
ciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBmcm9tLT52YXJpYWJsZXNBdFRhaWwu
bnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkgewogICAgICAgICBBYnN0cmFjdFZhbHVl
JiBkZXN0aW5hdGlvbiA9IHRvLT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpOwotICAg
ICAgICBpZiAobV9ncmFwaC5hcmd1bWVudElzQ2FwdHVyZWQoYXJndW1lbnQpKSB7CisgICAgICAg
IE5vZGVJbmRleCBub2RlSW5kZXggPSBmcm9tLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJn
dW1lbnQpOworICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSAmJiBtX2dyYXBoW25vZGVJ
bmRleF0udmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkgewogICAgICAgICAgICAg
aWYgKGRlc3RpbmF0aW9uLmlzVG9wKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICBkZXN0aW5hdGlvbi5tYWtlVG9wKCk7CkBAIC0xNDI5LDcgKzE0MzMsOCBAQCBpbmxp
bmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZShCYXNpY0JsCiAgICAgCiAgICAgZm9yIChzaXpl
X3QgbG9jYWwgPSAwOyBsb2NhbCA8IGZyb20tPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2Fs
cygpOyArK2xvY2FsKSB7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gdG8t
PnZhbHVlc0F0SGVhZC5sb2NhbChsb2NhbCk7Ci0gICAgICAgIGlmIChtX2dyYXBoLmxvY2FsSXND
YXB0dXJlZChsb2NhbCkpIHsKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGZyb20tPnZh
cmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCk7CisgICAgICAgIGlmIChub2RlSW5kZXggIT0gTm9O
b2RlICYmIG1fZ3JhcGhbbm9kZUluZGV4XS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJl
ZCgpKSB7CiAgICAgICAgICAgICBpZiAoZGVzdGluYXRpb24uaXNUb3AoKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGRlc3RpbmF0aW9uLm1ha2VUb3AoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShy
ZXZpc2lvbiAxMTYzNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDExICsxMTEsMTEgQEAgcHJpdmF0ZToK
ICAgICAvLyBBZGQgc3BpbGwgbG9jYXRpb25zIHRvIG5vZGVzLgogICAgIHZvaWQgYWxsb2NhdGVW
aXJ0dWFsUmVnaXN0ZXJzKCk7CiAgICAgCi0gICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJp
YWJsZUFjY2Vzc0RhdGEoaW50IG9wZXJhbmQpCisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdW
YXJpYWJsZUFjY2Vzc0RhdGEoaW50IG9wZXJhbmQsIGJvb2wgaXNDYXB0dXJlZCkKICAgICB7CiAg
ICAgICAgIEFTU0VSVChvcGVyYW5kIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwogICAg
ICAgICAKLSAgICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5hcHBlbmQoVmFyaWFi
bGVBY2Nlc3NEYXRhKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpKTsKKyAg
ICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5hcHBlbmQoVmFyaWFibGVBY2Nlc3NE
YXRhKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCksIGlzQ2FwdHVyZWQpKTsK
ICAgICAgICAgcmV0dXJuICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmxhc3QoKTsKICAg
ICB9CiAgICAgCkBAIC0xNzYsNiArMTc2LDcgQEAgcHJpdmF0ZToKICAgICBOb2RlSW5kZXggZ2V0
TG9jYWwodW5zaWduZWQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIE5vZGVJbmRleCBub2RlSW5k
ZXggPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpOworICAg
ICAgICBib29sIGlzQ2FwdHVyZWQgPSBtX2NvZGVCbG9jay0+bG9jYWxJc0NhcHR1cmVkKG1faW5s
aW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lLCBvcGVyYW5kKTsKICAgICAgICAgCiAgICAg
ICAgIGlmIChub2RlSW5kZXggIT0gTm9Ob2RlKSB7CiAgICAgICAgICAgICBOb2RlKiBub2RlUHRy
ID0gJm1fZ3JhcGhbbm9kZUluZGV4XTsKQEAgLTE4Nyw2ICsxODgsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIE5vZGUmIGZsdXNoQ2hpbGQgPSBtX2dyYXBoW25vZGVJbmRleF07CiAgICAg
ICAgICAgICAgICAgaWYgKGZsdXNoQ2hpbGQub3AoKSA9PSBQaGkpIHsKICAgICAgICAgICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBmbHVzaENoaWxk
LnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFjY2Vz
c0RhdGEtPm1lcmdlSXNDYXB0dXJlZChpc0NhcHR1cmVkKTsKICAgICAgICAgICAgICAgICAgICAg
bm9kZUluZGV4ID0gaW5qZWN0TGF6eU9wZXJhbmRQcmVkaWN0aW9uKGFkZFRvR3JhcGgoR2V0TG9j
YWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlSW5kZXgpKTsKICAgICAgICAgICAg
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9
IG5vZGVJbmRleDsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKQEAgLTE5
Nyw3ICsxOTksOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgQVNTRVJUKCZtX2dyYXBoW25vZGVJ
bmRleF0gPT0gbm9kZVB0cik7CiAgICAgICAgICAgICBBU1NFUlQobm9kZVB0ci0+b3AoKSAhPSBG
bHVzaCk7CiAKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmxvY2FsSXNDYXB0dXJlZChvcGVyYW5k
KSkgeworICAgICAgICAgICAgbm9kZVB0ci0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPm1lcmdlSXND
YXB0dXJlZChpc0NhcHR1cmVkKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChp
c0NhcHR1cmVkKSB7CiAgICAgICAgICAgICAgICAgLy8gV2Ugd2lzaCB0byB1c2UgdGhlIHNhbWUg
dmFyaWFibGUgYWNjZXNzIGRhdGEgYXMgdGhlIHByZXZpb3VzIGFjY2VzcywKICAgICAgICAgICAg
ICAgICAvLyBidXQgZm9yIGFsbCBvdGhlciBwdXJwb3NlcyB3ZSB3YW50IHRvIGlzc3VlIGEgbG9h
ZCBzaW5jZSBmb3IgYWxsIHdlCiAgICAgICAgICAgICAgICAgLy8ga25vdywgYXQgdGhpcyBzdGFn
ZSBvZiBjb21waWxhdGlvbiwgdGhlIGxvY2FsIGhhcyBiZWVuIGNsb2JiZXJlZC4KQEAgLTIxOSw3
ICsyMjMsNyBAQCBwcml2YXRlOgogICAgICAgICAvLyBleHBhbmQgbV9wcmVzZXJ2ZWRWYXJzIHRv
IGNvdmVyIHRoZXNlLgogICAgICAgICBtX3ByZXNlcnZlZFZhcnMuc2V0KG9wZXJhbmQpOwogICAg
ICAgICAKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBu
ZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlz
Q2FwdHVyZWQpOwogICAgICAgICAKICAgICAgICAgTm9kZUluZGV4IHBoaSA9IGFkZFRvR3JhcGgo
UGhpLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSk7CiAgICAgICAgIG1fbG9jYWxQaGlTdGFj
ay5hcHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBvcGVyYW5kKSk7CkBA
IC0yMzIsMTEgKzIzNiwxMyBAQCBwcml2YXRlOgogICAgIH0KICAgICB2b2lkIHNldExvY2FsKHVu
c2lnbmVkIG9wZXJhbmQsIE5vZGVJbmRleCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9w
ZXJhbmQpOworICAgICAgICBib29sIGlzQ2FwdHVyZWQgPSBtX2NvZGVCbG9jay0+bG9jYWxJc0Nh
cHR1cmVkKG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lLCBvcGVyYW5kKTsKKyAg
ICAgICAgCisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0g
bmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOwogICAgICAgICBOb2Rl
SW5kZXggbm9kZUluZGV4ID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNj
ZXNzRGF0YSksIHZhbHVlKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5sb2NhbChvcGVyYW5kKSA9IG5vZGVJbmRleDsKICAgICAgICAgCi0gICAgICAgIGJvb2wgc2hv
dWxkRmx1c2ggPSBtX2dyYXBoLmxvY2FsSXNDYXB0dXJlZChvcGVyYW5kKTsKKyAgICAgICAgYm9v
bCBzaG91bGRGbHVzaCA9IGlzQ2FwdHVyZWQ7CiAgICAgICAgIAogICAgICAgICBpZiAoIXNob3Vs
ZEZsdXNoKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGluIGFyZ3VtZW50IHBvc2l0aW9u
LCB0aGVuIGl0IHNob3VsZCBiZSBmbHVzaGVkLgpAQCAtMjY1LDYgKzI3MSw5IEBAIHByaXZhdGU6
CiAgICAgTm9kZUluZGV4IGdldEFyZ3VtZW50KHVuc2lnbmVkIG9wZXJhbmQpCiAgICAgewogICAg
ICAgICB1bnNpZ25lZCBhcmd1bWVudCA9IG9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpOworICAg
ICAgICAKKyAgICAgICAgYm9vbCBpc0NhcHR1cmVkID0gbV9jb2RlQmxvY2stPmFyZ3VtZW50SXND
YXB0dXJlZChhcmd1bWVudCk7CisgICAgICAgIAogICAgICAgICBBU1NFUlQoYXJndW1lbnQgPCBt
X251bUFyZ3VtZW50cyk7CiAgICAgICAgIAogICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0g
bV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCk7CkBAIC0y
NzksNiArMjg4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBOb2RlJiBmbHVzaENoaWxk
ID0gbV9ncmFwaFtub2RlSW5kZXhdOwogICAgICAgICAgICAgICAgIGlmIChmbHVzaENoaWxkLm9w
KCkgPT0gUGhpKSB7CiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhID0gZmx1c2hDaGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0
dXJlZCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCA9IGluamVjdExhenlPcGVyYW5k
UHJlZGljdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRh
KSwgbm9kZUluZGV4KSk7CiAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwubG9jYWwob3BlcmFuZCkgPSBub2RlSW5kZXg7CiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBub2RlSW5kZXg7CkBAIC0yODksNiArMjk5LDggQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIEFTU0VSVCgmbV9ncmFwaFtub2RlSW5kZXhdID09IG5vZGVQdHIpOwogICAgICAgICAg
ICAgQVNTRVJUKG5vZGVQdHItPm9wKCkgIT0gRmx1c2gpOwogICAgICAgICAgICAgCisgICAgICAg
ICAgICBub2RlUHRyLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2Fw
dHVyZWQpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AoKSA9PSBT
ZXRBcmd1bWVudCkgewogICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGdldHRpbmcgYW4gYXJndW1l
bnQgaW4gdGhlIGZpcnN0IGJhc2ljIGJsb2NrOyBsaW5rCiAgICAgICAgICAgICAgICAgLy8gdGhl
IEdldExvY2FsIHRvIHRoZSBTZXRBcmd1bWVudC4KQEAgLTI5OCw3ICszMTAsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmFyZ3VtZW50SXNDYXB0dXJlZChhcmd1
bWVudCkpIHsKKyAgICAgICAgICAgIGlmIChpc0NhcHR1cmVkKSB7CiAgICAgICAgICAgICAgICAg
aWYgKG5vZGVQdHItPm9wKCkgPT0gR2V0TG9jYWwpCiAgICAgICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCA9IG5vZGVQdHItPmNoaWxkMSgpLmluZGV4KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGluamVjdExhenlPcGVyYW5kUHJlZGljdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8o
bm9kZVB0ci0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpLCBub2RlSW5kZXgpKTsKQEAgLTMxMSw3ICsz
MjMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIG5vZGVQdHItPmNoaWxkMSgpLmlu
ZGV4KCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOworICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxl
QWNjZXNzRGF0YShvcGVyYW5kLCBpc0NhcHR1cmVkKTsKIAogICAgICAgICBOb2RlSW5kZXggcGhp
ID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKICAgICAgICAg
bV9hcmd1bWVudFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBw
aGksIGFyZ3VtZW50KSk7CkBAIC0zMjUsOSArMzM3LDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBz
ZXRBcmd1bWVudChpbnQgb3BlcmFuZCwgTm9kZUluZGV4IHZhbHVlKQogICAgIHsKICAgICAgICAg
dW5zaWduZWQgYXJndW1lbnQgPSBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKTsKKyAgICAgICAg
Ym9vbCBpc0NhcHR1cmVkID0gbV9jb2RlQmxvY2stPmFyZ3VtZW50SXNDYXB0dXJlZChhcmd1bWVu
dCk7CisgICAgICAgIAogICAgICAgICBBU1NFUlQoYXJndW1lbnQgPCBtX251bUFyZ3VtZW50cyk7
CiAgICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0
YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKKyAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFu
ZCwgaXNDYXB0dXJlZCk7CiAgICAgICAgIElubGluZVN0YWNrRW50cnkqIHN0YWNrID0gbV9pbmxp
bmVTdGFja1RvcDsKICAgICAgICAgd2hpbGUgKHN0YWNrLT5tX2lubGluZUNhbGxGcmFtZSkgLy8g
ZmluZCB0aGUgbWFjaGluZSBzdGFjayBlbnRyeS4KICAgICAgICAgICAgIHN0YWNrID0gc3RhY2st
Pm1fY2FsbGVyOwpAQCAtMzQ0LDYgKzM1OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIHNvbWUg
b3RoZXIgbG9jYWwgdmFyaWFibGUuCiAgICAgICAgIAogICAgICAgICBvcGVyYW5kID0gbV9pbmxp
bmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICBib29sIGlzQ2FwdHVy
ZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNh
bGxGcmFtZSwgb3BlcmFuZCk7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQob3BlcmFuZCA8IEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKICAgICAgICAgCkBAIC0zNjksMTEgKzM4NCwxMiBA
QCBwcml2YXRlOgogICAgICAgICAgICAgLy8gVGhpcyBnaXZlcyB1cyBndWlkYW5jZSB0byBzZWUg
dGhhdCB0aGUgdmFyaWFibGUgYWxzbyBuZWVkcyB0byBiZSBmbHVzaGVkCiAgICAgICAgICAgICAv
LyBmb3IgYXJndW1lbnRzLCBldmVuIGlmIGl0IGFscmVhZHkgaGFkIHRvIGJlIGZsdXNoZWQgZm9y
IG90aGVyIHJlYXNvbnMuCiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICB2YXJp
YWJsZUFjY2Vzc0RhdGEtPm1lcmdlSXNDYXB0dXJlZChpc0NhcHR1cmVkKTsKICAgICAgICAgICAg
IGFkZFRvR3JhcGgoRmx1c2gsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlSW5kZXgp
OwogICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQWNjZXNzRGF0YTsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBu
ZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlz
Q2FwdHVyZWQpOwogICAgICAgICBOb2RlSW5kZXggcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5m
byh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKICAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChG
bHVzaCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSk7CiAgICAgICAgIGlmIChvcGVy
YW5kSXNBcmd1bWVudChvcGVyYW5kKSkgewpAQCAtMTQ1Myw3ICsxNDY5LDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgIGlmIChtX2N1cnJlbnRCbG9jayA9
PSBtX2dyYXBoLm1fYmxvY2tzWzBdLmdldCgpICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2lubGlu
ZUNhbGxGcmFtZSkgewogICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzLnJlc2l6ZShtX251bUFy
Z3VtZW50cyk7CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8
IG1fbnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggc2V0
QXJndW1lbnQgPSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50LCBPcEluZm8obmV3VmFyaWFibGVBY2Nl
c3NEYXRhKGFyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50KSkpKTsKKyAgICAgICAgICAgIE5vZGVJ
bmRleCBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgoU2V0QXJndW1lbnQsIE9wSW5mbyhuZXdWYXJp
YWJsZUFjY2Vzc0RhdGEoYXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpLCBtX2NvZGVCbG9jay0+
YXJndW1lbnRJc0NhcHR1cmVkKGFyZ3VtZW50KSkpKTsKICAgICAgICAgICAgIG1fZ3JhcGgubV9h
cmd1bWVudHNbYXJndW1lbnRdID0gc2V0QXJndW1lbnQ7CiAgICAgICAgICAgICBtX2N1cnJlbnRC
bG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBzZXRB
cmd1bWVudCk7CiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNl
dEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBzZXRBcmd1bWVudCk7CkBAIC0yNDI5LDcgKzI0
NDUsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiAgICAgIERpZCBub3QgZmluZCBub2RlLCBhZGRpbmcgcGhpLlxuIik7
CiAjZW5kaWYKIAotICAgICAgICAgICAgICAgIHZhbHVlSW5QcmVkZWNlc3NvciA9IGluc2VydFBo
aU5vZGUoT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShzdGFja1R5cGUgPT0gQXJndW1lbnRQ
aGlTdGFjayA/IGFyZ3VtZW50VG9PcGVyYW5kKHZhck5vKSA6IHN0YXRpY19jYXN0PGludD4odmFy
Tm8pKSksIHByZWRlY2Vzc29yQmxvY2spOworICAgICAgICAgICAgICAgIHZhbHVlSW5QcmVkZWNl
c3NvciA9IGluc2VydFBoaU5vZGUoT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShzdGFja1R5
cGUgPT0gQXJndW1lbnRQaGlTdGFjayA/IGFyZ3VtZW50VG9PcGVyYW5kKHZhck5vKSA6IHN0YXRp
Y19jYXN0PGludD4odmFyTm8pLCBmYWxzZSkpLCBwcmVkZWNlc3NvckJsb2NrKTsKICAgICAgICAg
ICAgICAgICB2YXIgPSB2YWx1ZUluUHJlZGVjZXNzb3I7CiAgICAgICAgICAgICAgICAgaWYgKHN0
YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKQogICAgICAgICAgICAgICAgICAgICBwcmVkZWNl
c3NvckJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUodmFyTm8sIHZh
bHVlSW5QcmVkZWNlc3Nvcik7CkBAIC0yNTQ2LDYgKzI1NjIsNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpmaXhWYXJpYWJsZUFjY2Vzc1ByCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
Z3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiBkYXRhID0gJm1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGFbaV07CiAg
ICAgICAgIGRhdGEtPmZpbmQoKS0+cHJlZGljdChkYXRhLT5ub25VbmlmaWVkUHJlZGljdGlvbigp
KTsKKyAgICAgICAgZGF0YS0+ZmluZCgpLT5tZXJnZUlzQ2FwdHVyZWQoZGF0YS0+aXNDYXB0dXJl
ZCgpKTsKICAgICB9CiB9CiAKQEAgLTI2NDcsNiArMjY2NCwxNyBAQCBCeXRlQ29kZVBhcnNlcjo6
SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgICAgIGlubGluZUNhbGxGcmFtZS5jYWxsZXIg
PSBieXRlQ29kZVBhcnNlci0+Y3VycmVudENvZGVPcmlnaW4oKTsKICAgICAgICAgaW5saW5lQ2Fs
bEZyYW1lLmFyZ3VtZW50cy5yZXNpemUoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOyAvLyBT
ZXQgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgaW5jbHVkaW5nIHRoaXMsIGJ1dCBkb24ndCBjb25m
aWd1cmUgdGhlIHZhbHVlIHJlY292ZXJpZXMsIHlldC4KICAgICAgICAgaW5saW5lQ2FsbEZyYW1l
LmlzQ2FsbCA9IGlzQ2FsbChraW5kKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUuY2FsbGVyLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIGlubGluZUNhbGxGcmFt
ZS5jYXB0dXJlZFZhcnMgPSBpbmxpbmVDYWxsRnJhbWUuY2FsbGVyLmlubGluZUNhbGxGcmFtZS0+
Y2FwdHVyZWRWYXJzOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSBi
eXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPm1fbnVtQ2FwdHVyZWRWYXJzOyBpLS07KQorICAg
ICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS5jYXB0dXJlZFZhcnMuc2V0KGkpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBmb3IgKGludCBpID0gY29kZUJsb2NrLT5tX251bUNhcHR1
cmVkVmFyczsgaS0tOykKKyAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS5jYXB0dXJlZFZhcnMu
c2V0KGkgKyBpbmxpbmVDYWxsRnJhbWVTdGFydCk7CisgICAgICAgIAogICAgICAgICBieXRlQ29k
ZVBhcnNlci0+bV9jb2RlQmxvY2stPmlubGluZUNhbGxGcmFtZXMoKS5hcHBlbmQoaW5saW5lQ2Fs
bEZyYW1lKTsKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUgPSAmYnl0ZUNvZGVQYXJzZXItPm1f
Y29kZUJsb2NrLT5pbmxpbmVDYWxsRnJhbWVzKCkubGFzdCgpOwogICAgICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcAkocmV2aXNpb24gMTE2Mzc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDI0
ICsyMzEsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4
XS5jbGVhcigpOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggZmluZE9wZXJhbmRTb3VyY2Uo
Y29uc3QgT3BlcmFuZHM8Tm9kZUluZGV4LCBOb2RlSW5kZXhUcmFpdHM+JiB2YXJpYWJsZXMsIGlu
dCBvcGVyYW5kKQotICAgIHsKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IHZhcmlhYmxl
cy5vcGVyYW5kKG9wZXJhbmQpOwotICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKLSAg
ICAgICAgICAgIHJldHVybiBOb05vZGU7Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGVJbmRleF0u
b3AoKSA9PSBTZXRMb2NhbCkKLSAgICAgICAgICAgIHJldHVybiBtX2dyYXBoW25vZGVJbmRleF0u
Y2hpbGQxKCkuaW5kZXgoKTsKLSAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKLSAgICB9Ci0gICAg
CiAgICAgdm9pZCBrZWVwT3BlcmFuZEFsaXZlKEJhc2ljQmxvY2sqIGJsb2NrLCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIGludCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgaWYgKG1fZ3JhcGguaXND
YXB0dXJlZChvcGVyYW5kKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgTm9kZUluZGV4
IG5vZGVJbmRleCA9IGZpbmRPcGVyYW5kU291cmNlKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwsIG9w
ZXJhbmQpOworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKCFtX2dyYXBoW25vZGVJbmRleF0uc2hv
dWxkR2VuZXJhdGUoKSkKKyAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZUluZGV4XS52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBp
ZiAobV9ncmFwaFtub2RlSW5kZXhdLm9wKCkgPT0gU2V0TG9jYWwpCisgICAgICAgICAgICBub2Rl
SW5kZXggPSBtX2dyYXBoW25vZGVJbmRleF0uY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgTm9k
ZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAgICAgaWYgKCFub2RlLnNob3VsZEdl
bmVyYXRlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIEFTU0VSVChtX2dyYXBoW25v
ZGVJbmRleF0ub3AoKSAhPSBTZXRMb2NhbCk7CiAgICAgICAgIE5vZGVJbmRleCBwaGFudG9tTm9k
ZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7CkBAIC0yNjMsNyArMjU2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW2VkZ2VdOwogICAgICAgICBpZiAoY2hpbGQub3Ao
KSAhPSBHZXRMb2NhbCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKG1fZ3JhcGgu
aXNDYXB0dXJlZChjaGlsZC5sb2NhbCgpKSkKKyAgICAgICAgaWYgKGNoaWxkLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIE5v
ZGVJbmRleCBvcmlnaW5hbE5vZGVJbmRleCA9IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZChjaGlsZC5sb2NhbCgpKTsKICAgICAgICAgQVNTRVJUKG9yaWdpbmFsTm9kZUluZGV4ICE9IE5v
Tm9kZSk7CkBAIC00MTYsMTkgKzQwOSwyMCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgTm9k
ZUluZGV4IGF0U2Vjb25kVGFpbCA9IHNlY29uZEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZChvcGVyYW5kKTsKICAgICAgICAgCi0gICAgICAgIGlmIChtX2dyYXBoLmlzQ2FwdHVyZWQob3Bl
cmFuZCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBzZWNvbmQgYmxvY2sgZGlkIHNvbWV0aGluZyB0
byBhIHZhcmlhYmxlIHRoYXQgaXMgY2FwdHVyZWQsIHNvIHJlZmxlY3QgdGhpcy4KLSAgICAgICAg
ICAgIGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0gYXRTZWNv
bmRUYWlsOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAogICAgICAg
ICBpZiAoYXRTZWNvbmRUYWlsID09IE5vTm9kZSkgewogICAgICAgICAgICAgLy8gSWYgdGhlIHZh
cmlhYmxlIGlzIGRlYWQgYXQgdGhlIGVuZCBvZiB0aGUgc2Vjb25kIGJsb2NrLCB0aGVuIGRvIG5v
dGhpbmc7IGVzc2VudGlhbGx5CiAgICAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgd2Ugd2Fu
dCB0aGUgdGFpbCBzdGF0ZSB0byByZWZsZWN0IHdoYXRldmVyIHRoZSBmaXJzdCBibG9jayBkaWQu
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgTm9k
ZSYgc2Vjb25kTm9kZSA9IG1fZ3JhcGhbYXRTZWNvbmRUYWlsXTsKKyAgICAgICAgCisgICAgICAg
IGlmIChzZWNvbmROb2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAg
ICAgICAgICAgIC8vIFRoZSBzZWNvbmQgYmxvY2sgZGlkIHNvbWV0aGluZyB0byBhIHZhcmlhYmxl
IHRoYXQgaXMgY2FwdHVyZWQsIHNvIHJlZmxlY3QgdGhpcy4KKyAgICAgICAgICAgIGZpcnN0Qmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0gYXRTZWNvbmRUYWlsOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBzd2l0Y2ggKHNl
Y29uZE5vZGUub3AoKSkgewogICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICBjYXNlIEZs
dXNoOiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9u
IDExNjM3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTc3LDkgKzc3LDYgQEAKICNkZWZpbmUgREZHX0VOQUJMRV9TVUNDRVNTX1NU
QVRTIDAKIC8vIEVuYWJsZSB2ZXJpZmljYXRpb24gdGhhdCB0aGUgREZHIGlzIGFibGUgdG8gaW5z
ZXJ0IGNvZGUgZm9yIGNvbnRyb2wgZmxvdyBlZGdlcy4KICNkZWZpbmUgREZHX0VOQUJMRV9FREdF
X0NPREVfVkVSSUZJQ0FUSU9OIDAKLS8vIFByZXRlbmQgdGhhdCBhbGwgdmFyaWFibGVzIGluIHRo
ZSB0b3AtbGV2ZWwgY29kZSBibG9jayBnb3QgY2FwdHVyZWQuIEdyZWF0Ci0vLyBmb3IgdGVzdGlu
ZyBjb2RlIGdlbiBmb3IgYWN0aXZhdGlvbnMuCi0jZGVmaW5lIERGR19FTkFCTEVfQUxMX1ZBUklB
QkxFU19DQVBUVVJFRCAwCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lv
biAxMTYzNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsNyArMjIxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgIGlmICht
X2dyYXBoLmlzQ2FwdHVyZWQobm9kZS5sb2NhbCgpKSkKKyAgICAgICAgICAgIGlmIChub2RlLnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBpZiAoIW5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURv
dWJsZUZvcm1hdCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDExNjM3OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3
IEBAIGNvbnN0IGNoYXIqIEdyYXBoOjpuYW1lT2ZWYXJpYWJsZUFjY2Vzc0QKICAgICBpZiAoIWlu
ZGV4KQogICAgICAgICByZXR1cm4gIkEiOwogCi0gICAgc3RhdGljIGNoYXIgYnVmWzEwXTsKKyAg
ICBzdGF0aWMgY2hhciBidWZbMTAwXTsKICAgICBCb3VuZHNDaGVja2VkUG9pbnRlcjxjaGFyPiBw
dHIoYnVmLCBzaXplb2YoYnVmKSk7CiAgICAgCiAgICAgd2hpbGUgKGluZGV4KSB7CkBAIC03Myw2
ICs3MywxMSBAQCBjb25zdCBjaGFyKiBHcmFwaDo6bmFtZU9mVmFyaWFibGVBY2Nlc3NECiAgICAg
ICAgIGluZGV4IC89IDI2OwogICAgIH0KICAgICAKKyAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRh
LT5pc0NhcHR1cmVkKCkpCisgICAgICAgICpwdHIrKyA9ICcqJzsKKyAgICAKKyAgICBwdHIuc3Ry
Y2F0KHByZWRpY3Rpb25Ub0FiYnJldmlhdGVkU3RyaW5nKHZhcmlhYmxlQWNjZXNzRGF0YS0+cHJl
ZGljdGlvbigpKSk7CisgICAgCiAgICAgKnB0cisrID0gMDsKICAgICAKICAgICByZXR1cm4gYnVm
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTE2Mzc4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNDksNDYgKzM0OSwxMiBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBuZWVkc0FjdGl2
YXRpb24oKSBjb25zdAogICAgIHsKLSNpZiBERkdfRU5BQkxFKEFMTF9WQVJJQUJMRVNfQ0FQVFVS
RUQpCi0gICAgICAgIHJldHVybiB0cnVlOwotI2Vsc2UKICAgICAgICAgcmV0dXJuIG1fY29kZUJs
b2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkgJiYgbV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgIT0g
R2xvYmFsQ29kZTsKLSNlbmRpZgogICAgIH0KICAgICAKICAgICBib29sIHVzZXNBcmd1bWVudHMo
KSBjb25zdAogICAgIHsKLSNpZiBERkdfRU5BQkxFKEFMTF9WQVJJQUJMRVNfQ0FQVFVSRUQpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotI2Vsc2UKICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT51
c2VzQXJndW1lbnRzKCk7Ci0jZW5kaWYKLSAgICB9Ci0gICAgCi0gICAgLy8gUGFzcyBhbiBhcmd1
bWVudCBpbmRleC4gQ3VycmVudGx5IGl0J3MgaWdub3JlZCwgYnV0IHRoYXQncyBzb21ld2hhdAot
ICAgIC8vIG9mIGEgYnVnLgotICAgIGJvb2wgYXJndW1lbnRJc0NhcHR1cmVkKGludCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBuZWVkc0FjdGl2YXRpb24oKSB8fCB1c2VzQXJndW1lbnRz
KCk7Ci0gICAgfQotICAgIGJvb2wgbG9jYWxJc0NhcHR1cmVkKGludCBvcGVyYW5kKSBjb25zdAot
ICAgIHsKLSNpZiBERkdfRU5BQkxFKEFMTF9WQVJJQUJMRVNfQ0FQVFVSRUQpCi0gICAgICAgIHJl
dHVybiBvcGVyYW5kIDwgbV9jb2RlQmxvY2stPm1fbnVtVmFyczsKLSNlbHNlCi0gICAgICAgIHJl
dHVybiBvcGVyYW5kIDwgbV9jb2RlQmxvY2stPm1fbnVtQ2FwdHVyZWRWYXJzOwotI2VuZGlmCi0g
ICAgfQotICAgIAotICAgIGJvb2wgaXNDYXB0dXJlZChpbnQgb3BlcmFuZCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKLSAgICAgICAgICAgIHJl
dHVybiBhcmd1bWVudElzQ2FwdHVyZWQob3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCkpOwotICAg
ICAgICByZXR1cm4gbG9jYWxJc0NhcHR1cmVkKG9wZXJhbmQpOwotICAgIH0KLSAgICBib29sIGlz
Q2FwdHVyZWQoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBpc0NhcHR1cmVkKHN0YXRpY19jYXN0PGludD4odmlydHVhbFJlZ2lzdGVy
KSk7CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoQmFzaWNCbG9jayog
YmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTE2Mzc4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg1NCw3ICs4NTQsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgaWYgKCF2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzUm9vdCgpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KHZhcmlhYmxlQWNjZXNz
RGF0YS0+bG9jYWwoKSkKLSAgICAgICAgICAgICAgICB8fCBtX2dyYXBoLmlzQ2FwdHVyZWQodmFy
aWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKSkKKyAgICAgICAgICAgICAgICB8fCB2YXJpYWJsZUFj
Y2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIG1fY2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPnRhbGx5Vm90ZXNGb3JTaG91
bGRVc2VEb3VibGVGb3JtYXQoKTsKICAgICAgICAgfQpAQCAtODY1LDcgKzg2NSw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlQWNjZXNzRGF0YS0+aXNSb290KCkpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQo
dmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKQotICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGgu
aXNDYXB0dXJlZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpKQorICAgICAgICAgICAgICAg
IHx8IHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgbV9jaGFuZ2VkIHw9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWFr
ZVByZWRpY3Rpb25Gb3JEb3VibGVGb3JtYXQoKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShy
ZXZpc2lvbiAxMTYzNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYwLDEyICsxODYwLDE5IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgQWJzdHJhY3RW
YWx1ZSYgdmFsdWUgPSBibG9jaygpLT52YWx1ZXNBdEhlYWQub3BlcmFuZChub2RlLmxvY2FsKCkp
OwogCiAgICAgICAgIC8vIElmIHdlIGhhdmUgbm8gcHJlZGljdGlvbiBmb3IgdGhpcyBsb2NhbCwg
dGhlbiBkb24ndCBhdHRlbXB0IHRvIGNvbXBpbGUuCi0gICAgICAgIGlmIChwcmVkaWN0aW9uID09
IFByZWRpY3ROb25lIHx8IHZhbHVlLmlzQ2xlYXIoKSkgeworICAgICAgICBpZiAocHJlZGljdGlv
biA9PSBQcmVkaWN0Tm9uZSkgewogICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVj
dXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICghbV9qaXQuZ3Jh
cGgoKS5pc0NhcHR1cmVkKG5vZGUubG9jYWwoKSkpIHsKKyAgICAgICAgaWYgKCFub2RlLnZhcmlh
YmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSBD
RkEgaXMgdHJhY2tpbmcgdGhpcyB2YXJpYWJsZSBhbmQgaXQgZm91bmQgdGhhdCB0aGUgdmFyaWFi
bGUKKyAgICAgICAgICAgIC8vIGNhbm5vdCBoYXZlIGJlZW4gYXNzaWduZWQsIHRoZW4gZG9uJ3Qg
YXR0ZW1wdCB0byBwcm9jZWVkLgorICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkgewor
ICAgICAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVD
b3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG5vZGUudmFyaWFi
bGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7CiAgICAgICAgICAgICAg
ICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgICAgICAgICBtX2ppdC5sb2Fk
RG91YmxlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwoKSksIHJlc3VsdC5mcHIo
KSk7CkBAIC0xOTI1LDcgKzE5MzIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAKICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CiAgICAgICAgIGlmIChpc0Nl
bGxQcmVkaWN0aW9uKHZhbHVlLm1fdHlwZSkKLSAgICAgICAgICAgICYmICFtX2ppdC5ncmFwaCgp
LmlzQ2FwdHVyZWQobm9kZS5sb2NhbCgpKSkKKyAgICAgICAgICAgICYmICFub2RlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICBmb3JtYXQgPSBEYXRhRm9y
bWF0SlNDZWxsOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBmb3JtYXQgPSBEYXRhRm9ybWF0
SlM7CkBAIC0xOTcwLDcgKzE5NzcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgIC8vIE9TUiBleGl0LCB3b3VsZCBub3QgYmUgdmlzaWJsZSB0byB0
aGUgb2xkIEpJVCBpbiBhbnkgd2F5LgogICAgICAgICBtX2NvZGVPcmlnaW5Gb3JPU1IgPSBuZXh0
Tm9kZS0+Y29kZU9yaWdpbjsKICAgICAgICAgCi0gICAgICAgIGlmICghbV9qaXQuZ3JhcGgoKS5p
c0NhcHR1cmVkKG5vZGUubG9jYWwoKSkpIHsKKyAgICAgICAgaWYgKCFub2RlLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKICAgICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkgewogICAgICAgICAgICAgICAg
IFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAg
ICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUodmFsdWUuZnByKCksIEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxMTYzNzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTI4LDEyICsxOTI4LDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBibG9jaygpLT52
YWx1ZXNBdEhlYWQub3BlcmFuZChub2RlLmxvY2FsKCkpOwogCiAgICAgICAgIC8vIElmIHdlIGhh
dmUgbm8gcHJlZGljdGlvbiBmb3IgdGhpcyBsb2NhbCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIGNv
bXBpbGUuCi0gICAgICAgIGlmIChwcmVkaWN0aW9uID09IFByZWRpY3ROb25lIHx8IHZhbHVlLmlz
Q2xlYXIoKSkgeworICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBQcmVkaWN0Tm9uZSkgewogICAg
ICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdl
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIGlmICghbV9qaXQuZ3JhcGgoKS5pc0NhcHR1cmVkKG5vZGUubG9j
YWwoKSkpIHsKKyAgICAgICAgaWYgKCFub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1
cmVkKCkpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSBDRkEgaXMgdHJhY2tpbmcgdGhpcyB2YXJp
YWJsZSBhbmQgaXQgZm91bmQgdGhhdCB0aGUgdmFyaWFibGUKKyAgICAgICAgICAgIC8vIGNhbm5v
dCBoYXZlIGJlZW4gYXNzaWduZWQsIHRoZW4gZG9uJ3QgYXR0ZW1wdCB0byBwcm9jZWVkLgorICAg
ICAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkgeworICAgICAgICAgICAgICAgIHRlcm1pbmF0
ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVz
ZURvdWJsZUZvcm1hdCgpKSB7CiAgICAgICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjphZGRy
ZXNzRm9yKG5vZGUubG9jYWwoKSksIHJlc3VsdC5mcHIoKSk7CkBAIC0xOTY1LDcgKzE5NzIsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIG1fZ3By
cy5yZXRhaW4ocmVzdWx0LmdwcigpLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJKUyk7CiAK
ICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7Ci0gICAgICAgIGlmIChtX2ppdC5ncmFwaCgpLmlz
Q2FwdHVyZWQobm9kZS5sb2NhbCgpKSkKKyAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NE
YXRhKCktPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgIGZvcm1hdCA9IERhdGFGb3JtYXRKUzsK
ICAgICAgICAgZWxzZSBpZiAoaXNDZWxsUHJlZGljdGlvbih2YWx1ZS5tX3R5cGUpKQogICAgICAg
ICAgICAgZm9ybWF0ID0gRGF0YUZvcm1hdEpTQ2VsbDsKQEAgLTIwMTUsNyArMjAyMiw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgLy8gT1NSIGV4
aXQsIHdvdWxkIG5vdCBiZSB2aXNpYmxlIHRvIHRoZSBvbGQgSklUIGluIGFueSB3YXkuCiAgICAg
ICAgIG1fY29kZU9yaWdpbkZvck9TUiA9IG5leHROb2RlLT5jb2RlT3JpZ2luOwogICAgICAgICAK
LSAgICAgICAgaWYgKCFtX2ppdC5ncmFwaCgpLmlzQ2FwdHVyZWQobm9kZS5sb2NhbCgpKSkgewor
ICAgICAgICBpZiAoIW5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkgewog
ICAgICAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJs
ZUZvcm1hdCgpKSB7CiAgICAgICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZURvdWJs
ZSh2YWx1ZS5mcHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAkocmV2aXNpb24gMTE2Mzc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3MCw3ICs5NzAsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAgICAgQVNTRVJUKG1fYXJndW1lbnRz
LnNpemUoKSA9PSBibG9jay52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkgewogICAg
ICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2sudmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50
KGkpOwotICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSB8fCBtX2ppdC5ncmFwaCgpLmFy
Z3VtZW50SXNDYXB0dXJlZChpKSkKKyAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUgfHwg
bV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVk
KCkpCiAgICAgICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5SZWdp
c3RlckZpbGUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZh
bHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKGF0KG5vZGVJbmRleCkudmFyaWFibGVBY2Nlc3NEYXRh
KCktPnByZWRpY3Rpb24oKSk7CkBAIC05ODIsNyArOTgyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogICAgIEFTU0VSVChtX3ZhcmlhYmxlcy5zaXplKCkgPT0g
YmxvY2sudmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgTm9kZUluZGV4
IG5vZGVJbmRleCA9IGJsb2NrLnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKTsKLSAgICAgICAgaWYg
KG5vZGVJbmRleCA9PSBOb05vZGUgfHwgbV9qaXQuZ3JhcGgoKS5sb2NhbElzQ2FwdHVyZWQoaSkp
CisgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlIHx8IG1faml0LmdyYXBoKClbbm9kZUlu
ZGV4XS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgbV92
YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKICAgICAgICAg
ZWxzZSBpZiAoYXQobm9kZUluZGV4KS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91
YmxlRm9ybWF0KCkpCiAgICAgICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlKERv
dWJsZUluUmVnaXN0ZXJGaWxlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFyaWFibGVBY2Nlc3NEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkocmV2aXNpb24gMTE2Mzc4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtNTEsMTIgKzUxLDEzIEBAIHB1YmxpYzoKICAgICAgICAgY2xlYXJWb3RlcygpOwogICAg
IH0KICAgICAKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIGxvY2FsKQor
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIGJvb2wgaXNDYXB0
dXJlZCkKICAgICAgICAgOiBtX2xvY2FsKGxvY2FsKQogICAgICAgICAsIG1fcHJlZGljdGlvbihQ
cmVkaWN0Tm9uZSkKICAgICAgICAgLCBtX2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKFByZWRpY3RO
b25lKQogICAgICAgICAsIG1fZmxhZ3MoMCkKICAgICAgICAgLCBtX2RvdWJsZUZvcm1hdFN0YXRl
KEVtcHR5RG91YmxlRm9ybWF0U3RhdGUpCisgICAgICAgICwgbV9pc0NhcHR1cmVkKGlzQ2FwdHVy
ZWQpCiAgICAgewogICAgICAgICBjbGVhclZvdGVzKCk7CiAgICAgfQpAQCAtNzIsNiArNzMsMjAg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihsb2NhbCgpKTsKICAg
ICB9CiAgICAgCisgICAgYm9vbCBtZXJnZUlzQ2FwdHVyZWQoYm9vbCBpc0NhcHR1cmVkKQorICAg
IHsKKyAgICAgICAgYm9vbCBuZXdJc0NhcHR1cmVkID0gbV9pc0NhcHR1cmVkIHwgaXNDYXB0dXJl
ZDsKKyAgICAgICAgaWYgKG5ld0lzQ2FwdHVyZWQgPT0gbV9pc0NhcHR1cmVkKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX2lzQ2FwdHVyZWQgPSBuZXdJc0NhcHR1cmVkOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0NhcHR1cmVkKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2lzQ2FwdHVyZWQ7CisgICAgfQorICAgIAogICAgIGJv
b2wgcHJlZGljdChQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCiAgICAgewogICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHNlbGYgPSBmaW5kKCk7CkBAIC0yMjAsNiArMjM1LDggQEAgcHJpdmF0
ZToKICAgICAKICAgICBmbG9hdCBtX3ZvdGVzWzJdOwogICAgIERvdWJsZUZvcm1hdFN0YXRlIG1f
ZG91YmxlRm9ybWF0U3RhdGU7CisgICAgCisgICAgYm9vbCBtX2lzQ2FwdHVyZWQ7CiB9OwogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCg==
</data>
<flag name="review"
          id="146838"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>