<?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>99557</bug_id>
          
          <creation_ts>2012-10-17 00:35:57 -0700</creation_ts>
          <short_desc>Array and object allocations via &apos;new Object&apos; or &apos;new Array&apos; should be inlined in bytecode to allow allocation site profiling</short_desc>
          <delta_ts>2012-10-17 14:48:38 -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>98606</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>743958</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-17 00:35:57 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743963</commentid>
    <comment_count>1</comment_count>
      <attachid>169110</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-17 00:42:16 -0700</bug_when>
    <thetext>Created attachment 169110
possibly the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743978</commentid>
    <comment_count>2</comment_count>
      <attachid>169110</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-17 00:58:10 -0700</bug_when>
    <thetext>Comment on attachment 169110
possibly the patch

Attachment 169110 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14397471</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743983</commentid>
    <comment_count>3</comment_count>
      <attachid>169110</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-17 01:03:48 -0700</bug_when>
    <thetext>Comment on attachment 169110
possibly the patch

Attachment 169110 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14386476</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743989</commentid>
    <comment_count>4</comment_count>
      <attachid>169110</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-17 01:10:05 -0700</bug_when>
    <thetext>Comment on attachment 169110
possibly the patch

Attachment 169110 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14393501</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744007</commentid>
    <comment_count>5</comment_count>
      <attachid>169110</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-17 01:34:30 -0700</bug_when>
    <thetext>Comment on attachment 169110
possibly the patch

Attachment 169110 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14398469</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744025</commentid>
    <comment_count>6</comment_count>
      <attachid>169125</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-17 02:00:08 -0700</bug_when>
    <thetext>Created attachment 169125
the patch

Performance neutral, appears to pass things.  Now it even works on 32-bit, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744027</commentid>
    <comment_count>7</comment_count>
      <attachid>169125</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-17 02:00:42 -0700</bug_when>
    <thetext>Comment on attachment 169125
the patch

Nah, spoke too soon.  Will investigate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744057</commentid>
    <comment_count>8</comment_count>
      <attachid>169136</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-17 02:33:30 -0700</bug_when>
    <thetext>Created attachment 169136
the patch

I think it&apos;s good now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744355</commentid>
    <comment_count>9</comment_count>
      <attachid>169136</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-10-17 10:17:08 -0700</bug_when>
    <thetext>Comment on attachment 169136
the patch

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

r=me

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:438
&gt; +        // This passes NoExpectedFunction because we expect that if the function is in a
&gt; +        // local variable, then it&apos;s not one of our built-in constructors.

Slightly more accurate to say &quot;then we aren&apos;t able to prove that it&apos;s one of our built-in constructors&quot;.

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:456
&gt; +    // FIXME: Reconsider passing expectedFunction instead of NoExpectedFunction.

Are you saying we should consider *not* passing expectedFunction here? I&apos;d suggest saying something here about why we might want to make that change. Otherwise, this comment doesn&apos;t give specific direction to another reader.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744630</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-17 14:39:57 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/131644</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744634</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-17 14:42:50 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 169136 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=169136&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:438
&gt; &gt; +        // This passes NoExpectedFunction because we expect that if the function is in a
&gt; &gt; +        // local variable, then it&apos;s not one of our built-in constructors.
&gt; 
&gt; Slightly more accurate to say &quot;then we aren&apos;t able to prove that it&apos;s one of our built-in constructors&quot;.

I actually think the comment is more accurate.  Just because we resolved to a non-local variable called &quot;Object&quot; doesn&apos;t mean we proved that we have the Object constructor.  Likewise, just because resolved to a local variable called &quot;Object&quot; doesn&apos;t mean we disproved that we have the Object constructor because people could do crazy:

var x = Object;
function foo() {
   var Object = x;
   return new Object();
}

It&apos;s just a matter of likelihood.  The above snippet is less likely than someone just using the word &quot;Object&quot; to signify a local variable, or at least, that&apos;s what I&apos;m assuming in this code path.

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:456
&gt; &gt; +    // FIXME: Reconsider passing expectedFunction instead of NoExpectedFunction.
&gt; 
&gt; Are you saying we should consider *not* passing expectedFunction here? I&apos;d suggest saying something here about why we might want to make that change. Otherwise, this comment doesn&apos;t give specific direction to another reader.

Actually this comment is just plain wrong.  I&apos;ve removed the comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744643</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-17 14:48:38 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #9)
&gt; &gt; (From update of attachment 169136 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=169136&amp;action=review
&gt; &gt; 
&gt; &gt; r=me
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:438
&gt; &gt; &gt; +        // This passes NoExpectedFunction because we expect that if the function is in a
&gt; &gt; &gt; +        // local variable, then it&apos;s not one of our built-in constructors.
&gt; &gt; 
&gt; &gt; Slightly more accurate to say &quot;then we aren&apos;t able to prove that it&apos;s one of our built-in constructors&quot;.
&gt; 
&gt; I actually think the comment is more accurate.  Just because we resolved to a non-local variable called &quot;Object&quot; doesn&apos;t mean we proved that we have the Object constructor.  Likewise, just because resolved to a local variable called &quot;Object&quot; doesn&apos;t mean we disproved that we have the Object constructor because people could do crazy:
&gt; 
&gt; var x = Object;
&gt; function foo() {
&gt;    var Object = x;
&gt;    return new Object();
&gt; }
&gt; 
&gt; It&apos;s just a matter of likelihood.  The above snippet is less likely than someone just using the word &quot;Object&quot; to signify a local variable, or at least, that&apos;s what I&apos;m assuming in this code path.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:456
&gt; &gt; &gt; +    // FIXME: Reconsider passing expectedFunction instead of NoExpectedFunction.
&gt; &gt; 
&gt; &gt; Are you saying we should consider *not* passing expectedFunction here? I&apos;d suggest saying something here about why we might want to make that change. Otherwise, this comment doesn&apos;t give specific direction to another reader.
&gt; 
&gt; Actually this comment is just plain wrong.  I&apos;ve removed the comment.

Removed the comment in http://trac.webkit.org/changeset/131646</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169110</attachid>
            <date>2012-10-17 00:42:16 -0700</date>
            <delta_ts>2012-10-17 02:00:08 -0700</delta_ts>
            <desc>possibly the patch</desc>
            <filename>jneq_1.patch</filename>
            <type>text/plain</type>
            <size>35784</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMxNTU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBA
CisyMDEyLTEwLTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QXJyYXkgYW5kIG9iamVjdCBhbGxvY2F0aW9ucyB2aWEgJ25ldyBPYmplY3QnIG9yICduZXcgQXJy
YXknIHNob3VsZCBiZSBpbmxpbmVkIGluIGJ5dGVjb2RlIHRvIGFsbG93IGFsbG9jYXRpb24gc2l0
ZSBwcm9maWxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk5NTU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyB1c2VzIHRoZSBvbGQgam5lcV9wdHIgdHJpY2sgdG8gYWxsb3cgZm9yIHRoZSBieXRl
Y29kZSB0byAic2VlIiB0aGF0IHRoZQorICAgICAgICBvcGVyYXRpb24gaW4gcXVlc3Rpb24gaXMg
d2hhdCB3ZSBhbG1vc3QgY2VydGFpbmx5IGtub3cgaXQgdG8gYmUuCisKKyAgICAgICAgKiBieXRl
Y29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXApOgorICAg
ICAgICAqIGJ5dGVjb2RlL09wY29kZS5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
cGFkT3Bjb2RlTmFtZSk6CisgICAgICAgICogYnl0ZWNvZGUvU3BlY2lhbFBvaW50ZXIuaDoKKyAg
ICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdENhbGxFdmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmV4cGVjdGVkRnVuY3Rpb25Gb3JJZGVudGlmaWVyKToKKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXhwZWN0ZWRGdW5jdGlvblNuaXBwZXQpOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0cnVjdCk6CisgICAgICAg
ICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChCeXRlY29kZUdl
bmVyYXRvcik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAg
ICAgIChKU0M6Ok5ld0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5j
dGlvbkNhbGxWYWx1ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9u
Q2FsbFJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNh
bGxCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxs
RG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q2FsbEZ1bmN0aW9uQ2FsbERv
dE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkFwcGx5RnVuY3Rpb25DYWxsRG90
Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAg
ICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuQ29tcGls
ZU9wY29kZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSklU
KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogaml0
L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuaDoKKyAgICAgICAgKiBsbGludC9M
TEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhf
REVDTCk6CisgICAgICAgIChMTEludCk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMu
aDoKKyAgICAgICAgKExMSW50KToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmg6CisgICAgICAgICog
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
OjpyZXNldCk6CisgICAgICAgIChKU0MpOgorCiAyMDEyLTEwLTE2ICBDc2FiYSBPc3p0cm9nb27D
oWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQg
cjEzMTUxNiBhbmQgcjEzMTU1MC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxMzEzODgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzA0LDYgKzcw
NCwxMyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMsIGNvCiAgICAgICAg
ICAgICBkdW1wQnl0ZWNvZGVDb21tZW50QW5kTmV3TGluZShsb2NhdGlvbik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6
IHsKKyAgICAgICAgICAgIGludCBkc3QgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAg
IGludCBsZW5ndGggPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGRhdGFMb2coIlsl
NGRdIG5ld19hcnJheV93aXRoX3NpemVcdCAlcywgJXMiLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1l
KGV4ZWMsIGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZXhlYywgbGVuZ3RoKS5kYXRhKCkpOwor
ICAgICAgICAgICAgZHVtcEJ5dGVjb2RlQ29tbWVudEFuZE5ld0xpbmUobG9jYXRpb24pOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVm
ZmVyOiB7CiAgICAgICAgICAgICBpbnQgZHN0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAg
ICAgICBpbnQgYXJndiA9ICgrK2l0KS0+dS5vcGVyYW5kOwpAQCAtMTI0NSw5ICsxMjUyLDkgQEAg
dm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjbwogICAgICAgICB9CiAgICAg
ICAgIGNhc2Ugb3Bfam5lcV9wdHI6IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5v
cGVyYW5kOwotICAgICAgICAgICAgdm9pZCogcG9pbnRlciA9ICgrK2l0KS0+dS5wb2ludGVyOwor
ICAgICAgICAgICAgU3BlY2lhbDo6UG9pbnRlciBwb2ludGVyID0gKCsraXQpLT51LnNwZWNpYWxQ
b2ludGVyOwogICAgICAgICAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAg
ICAgICAgICAgZGF0YUxvZygiWyU0ZF0gam5lcV9wdHJcdFx0ICVzLCAlcCwgJWQoLT4lZCkiLCBs
b2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCksIHBvaW50ZXIsIG9mZnNldCwg
bG9jYXRpb24gKyBvZmZzZXQpOworICAgICAgICAgICAgZGF0YUxvZygiWyU0ZF0gam5lcV9wdHJc
dFx0ICVzLCAlZCAoJXApLCAlZCgtPiVkKSIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywg
cjApLmRhdGEoKSwgcG9pbnRlciwgbV9nbG9iYWxPYmplY3QtPmFjdHVhbFBvaW50ZXJGb3IocG9p
bnRlciksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOwogICAgICAgICAgICAgZHVtcEJ5dGVj
b2RlQ29tbWVudEFuZE5ld0xpbmUobG9jYXRpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHJldmlz
aW9uIDEzMTM4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
XAogICAgICAgICBtYWNybyhvcF9uZXdfb2JqZWN0LCAyKSBcCiAgICAgICAgIG1hY3JvKG9wX25l
d19hcnJheSwgNCkgXAorICAgICAgICBtYWNybyhvcF9uZXdfYXJyYXlfd2l0aF9zaXplLCAzKSBc
CiAgICAgICAgIG1hY3JvKG9wX25ld19hcnJheV9idWZmZXIsIDQpIFwKICAgICAgICAgbWFjcm8o
b3BfbmV3X3JlZ2V4cCwgMykgXAogICAgICAgICBtYWNybyhvcF9tb3YsIDMpIFwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjaWFsUG9pbnRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjaWFsUG9pbnRlci5oCShyZXZp
c2lvbiAxMzEzODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY2lhbFBv
aW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBAQCBuYW1lc3BhY2UgU3BlY2lh
bCB7CiBlbnVtIFBvaW50ZXIgewogICAgIENhbGxGdW5jdGlvbiwKICAgICBBcHBseUZ1bmN0aW9u
LAorICAgIE9iamVjdENvbnN0cnVjdG9yLAorICAgIEFycmF5Q29uc3RydWN0b3IsCiAgICAgVGFi
bGVTaXplIC8vIE5vdCBhIHJlYWwgc3BlY2lhbCBwb2ludGVyLiBVc2UgdGhpcyB0byBkZXRlcm1p
bmUgdGhlIG51bWJlciBvZiBwb2ludGVycy4KIH07CiB9IC8vIG5hbWVzcGFjZSBTcGVjaWFsCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTMxMzg4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIwMTMsOSArMjAxMyw5IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
TmV3RnUKICAgICByZXR1cm4gcjA7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0Q2FsbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIENhbGxBcmd1bWVu
dHMmIGNhbGxBcmd1bWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwg
dW5zaWduZWQgZW5kT2Zmc2V0KQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRD
YWxsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgRXhwZWN0ZWRGdW5jdGlvbiBl
eHBlY3RlZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRzJiBjYWxsQXJndW1lbnRzLCB1bnNpZ25lZCBk
aXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKIHsKLSAgICBy
ZXR1cm4gZW1pdENhbGwob3BfY2FsbCwgZHN0LCBmdW5jLCBjYWxsQXJndW1lbnRzLCBkaXZvdCwg
c3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CisgICAgcmV0dXJuIGVtaXRDYWxsKG9wX2NhbGwsIGRz
dCwgZnVuYywgZXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QsIHN0YXJ0T2Zm
c2V0LCBlbmRPZmZzZXQpOwogfQogCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVhdGVBcmd1
bWVudHNJZk5lY2Vzc2FyeSgpCkBAIC0yMDQ4LDEwICsyMDQ4LDg1IEBAIHZvaWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmNyZWF0ZUFjdGl2YXRpb24KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRDYWxsRXZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIENhbGxB
cmd1bWVudHMmIGNhbGxBcmd1bWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9m
ZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQogewotICAgIHJldHVybiBlbWl0Q2FsbChvcF9jYWxs
X2V2YWwsIGRzdCwgZnVuYywgY2FsbEFyZ3VtZW50cywgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXQpOworICAgIHJldHVybiBlbWl0Q2FsbChvcF9jYWxsX2V2YWwsIGRzdCwgZnVuYywgTm9F
eHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9m
ZnNldCk7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChPcGNv
ZGVJRCBvcGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBDYWxsQXJn
dW1lbnRzJiBjYWxsQXJndW1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKK0V4cGVjdGVkRnVuY3Rpb24gQnl0ZWNvZGVHZW5lcmF0
b3I6OmV4cGVjdGVkRnVuY3Rpb25Gb3JJZGVudGlmaWVyKGNvbnN0IElkZW50aWZpZXImIGlkZW50
aWZpZXIpCit7CisgICAgaWYgKGlkZW50aWZpZXIgPT0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5h
bWVzLT5PYmplY3QpCisgICAgICAgIHJldHVybiBFeHBlY3RPYmplY3RDb25zdHJ1Y3RvcjsKKyAg
ICBpZiAoaWRlbnRpZmllciA9PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPkFycmF5KQor
ICAgICAgICByZXR1cm4gRXhwZWN0QXJyYXlDb25zdHJ1Y3RvcjsKKyAgICByZXR1cm4gTm9FeHBl
Y3RlZEZ1bmN0aW9uOworfQorCitFeHBlY3RlZEZ1bmN0aW9uIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0RXhwZWN0ZWRGdW5jdGlvblNuaXBwZXQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBm
dW5jLCBFeHBlY3RlZEZ1bmN0aW9uIGV4cGVjdGVkRnVuY3Rpb24sIENhbGxBcmd1bWVudHMmIGNh
bGxBcmd1bWVudHMsIExhYmVsKiBkb25lKQoreworICAgIFJlZlB0cjxMYWJlbD4gcmVhbENhbGwg
PSBuZXdMYWJlbCgpOworICAgIHN3aXRjaCAoZXhwZWN0ZWRGdW5jdGlvbikgeworICAgIGNhc2Ug
RXhwZWN0T2JqZWN0Q29uc3RydWN0b3I6IHsKKyAgICAgICAgLy8gSWYgdGhlIG51bWJlciBvZiBh
cmd1bWVudHMgaXMgbm9uLXplcm8sIHRoZW4gd2UgY2FuJ3QgZG8gYW55dGhpbmcgaW50ZXJlc3Rp
bmcuCisgICAgICAgIGlmIChjYWxsQXJndW1lbnRzLmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KCkgPj0gMikKKyAgICAgICAgICAgIHJldHVybiBOb0V4cGVjdGVkRnVuY3Rpb247CisgICAgICAg
IAorICAgICAgICBzaXplX3QgYmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7CisgICAgICAg
IGVtaXRPcGNvZGUob3Bfam5lcV9wdHIpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
ZnVuYy0+aW5kZXgoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChTcGVjaWFsOjpP
YmplY3RDb25zdHJ1Y3Rvcik7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZWFsQ2Fs
bC0+YmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7CisgICAgICAgIAorICAgICAg
ICBpZiAoZHN0ICE9IGlnbm9yZWRSZXN1bHQoKSkgeworICAgICAgICAgICAgZW1pdE9wY29kZShv
cF9uZXdfb2JqZWN0KTsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmlu
ZGV4KCkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBFeHBlY3RBcnJheUNvbnN0cnVjdG9yOiB7CisgICAgICAgIC8vIElmIHlvdSdyZSBkb2lu
ZyBhbnl0aGluZyBvdGhlciB0aGFuICJuZXcgQXJyYXkoKSIgb3IgIm5ldyBBcnJheShmb28pIiB0
aGVuIHdlCisgICAgICAgIC8vIGRvbid0IGRvIGlubGluZSBpdCwgZm9yIG5vdy4gVGhlIG9ubHkg
cmVhc29uIGlzIHRoYXQgY2FsbCBhcmd1bWVudHMgYXJlIGluCisgICAgICAgIC8vIHRoZSBvcHBv
c2l0ZSBvcmRlciBvZiB3aGF0IG9wX25ld19hcnJheSBleHBlY3RzLCBzbyB3ZSdkIGVpdGhlciBu
ZWVkIHRvIGNoYW5nZQorICAgICAgICAvLyBob3cgb3BfbmV3X2FycmF5IHdvcmtzIG9yIHdlJ2Qg
bmVlZCBhbiBvcF9uZXdfYXJyYXlfcmV2ZXJzZS4gTmVpdGhlciBvZiB0aGVzZQorICAgICAgICAv
LyB0aGluZ3Mgc291bmRzIGxpa2UgaXQncyB3b3J0aCBpdC4KKyAgICAgICAgaWYgKGNhbGxBcmd1
bWVudHMuYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA+IDIpCisgICAgICAgICAgICByZXR1
cm4gTm9FeHBlY3RlZEZ1bmN0aW9uOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IGJlZ2luID0g
aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAgICAgICBlbWl0T3Bjb2RlKG9wX2puZXFfcHRyKTsK
KyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZ1bmMtPmluZGV4KCkpOworICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoU3BlY2lhbDo6QXJyYXlDb25zdHJ1Y3Rvcik7CisgICAgICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChyZWFsQ2FsbC0+YmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICBpZiAoZHN0ICE9IGlnbm9yZWRSZXN1bHQo
KSkgeworICAgICAgICAgICAgaWYgKGNhbGxBcmd1bWVudHMuYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoKSA9PSAyKSB7CisgICAgICAgICAgICAgICAgZW1pdE9wY29kZShvcF9uZXdfYXJyYXlf
d2l0aF9zaXplKTsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5p
bmRleCgpKTsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoY2FsbEFyZ3Vt
ZW50cy5hcmd1bWVudFJlZ2lzdGVyKDApLT5pbmRleCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgQVNTRVJUKGNhbGxBcmd1bWVudHMuYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMoKSA9PSAxKTsKKyAgICAgICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX25ld19hcnJh
eSk7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7
CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOworICAgICAgICAgICAg
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFT
U0VSVChleHBlY3RlZEZ1bmN0aW9uID09IE5vRXhwZWN0ZWRGdW5jdGlvbik7CisgICAgICAgIHJl
dHVybiBOb0V4cGVjdGVkRnVuY3Rpb247CisgICAgfQorICAgIAorICAgIHNpemVfdCBiZWdpbiA9
IGluc3RydWN0aW9ucygpLnNpemUoKTsKKyAgICBlbWl0T3Bjb2RlKG9wX2ptcCk7CisgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGRvbmUtPmJpbmQoYmVnaW4sIGluc3RydWN0aW9ucygpLnNpemUo
KSkpOworICAgIGVtaXRMYWJlbChyZWFsQ2FsbC5nZXQoKSk7CisgICAgCisgICAgcmV0dXJuIGV4
cGVjdGVkRnVuY3Rpb247Cit9CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
Q2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5j
LCBFeHBlY3RlZEZ1bmN0aW9uIGV4cGVjdGVkRnVuY3Rpb24sIENhbGxBcmd1bWVudHMmIGNhbGxB
cmd1bWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQg
ZW5kT2Zmc2V0KQogewogICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9jYWxsIHx8IG9wY29kZUlE
ID09IG9wX2NhbGxfZXZhbCk7CiAgICAgQVNTRVJUKGZ1bmMtPnJlZkNvdW50KCkpOwpAQCAtMjA3
Niw2ICsyMTUxLDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKAog
CiAgICAgZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsK
IAorICAgIFJlZlB0cjxMYWJlbD4gZG9uZSA9IG5ld0xhYmVsKCk7CisgICAgZXhwZWN0ZWRGdW5j
dGlvbiA9IGVtaXRFeHBlY3RlZEZ1bmN0aW9uU25pcHBldChkc3QsIGZ1bmMsIGV4cGVjdGVkRnVu
Y3Rpb24sIGNhbGxBcmd1bWVudHMsIGRvbmUuZ2V0KCkpOworICAgIAogICAgIC8vIEVtaXQgY2Fs
bC4KICAgICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IG5ld0FycmF5UHJvZmlsZSgpOwog
ICAgIGVtaXRPcGNvZGUob3Bjb2RlSUQpOwpAQCAtMjA5Myw2ICsyMTcxLDkgQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKAogICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoZHN0LT5pbmRleCgpKTsgLy8gZHN0CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChwcm9maWxlKTsKICAgICB9CisgICAgCisgICAgaWYgKGV4cGVjdGVkRnVuY3Rpb24gIT0gTm9F
eHBlY3RlZEZ1bmN0aW9uKQorICAgICAgICBlbWl0TGFiZWwoZG9uZS5nZXQoKSk7CiAKICAgICBp
ZiAobV9zaG91bGRFbWl0UHJvZmlsZUhvb2tzKSB7CiAgICAgICAgIGVtaXRPcGNvZGUob3BfcHJv
ZmlsZV9kaWRfY2FsbCk7CkBAIC0yMTYyLDcgKzIyNDMsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdFVuYXJ5CiAgICAgcmV0dXJuIHNyYzsKIH0KIAotUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb25zdHJ1Y3QoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBmdW5jLCBDYWxsQXJndW1lbnRzJiBjYWxsQXJndW1lbnRzLCB1bnNpZ25lZCBkaXZvdCwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKK1JlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29uc3RydWN0KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJ
RCogZnVuYywgRXhwZWN0ZWRGdW5jdGlvbiBleHBlY3RlZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRz
JiBjYWxsQXJndW1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVu
c2lnbmVkIGVuZE9mZnNldCkKIHsKICAgICBBU1NFUlQoZnVuYy0+cmVmQ291bnQoKSk7CiAKQEAg
LTIxODcsNiArMjI2OCw5IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29u
c3QKICAgICAgICAgY2FsbEZyYW1lLmFwcGVuZChuZXdUZW1wb3JhcnkoKSk7CiAKICAgICBlbWl0
RXhwcmVzc2lvbkluZm8oZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworICAgIAorICAg
IFJlZlB0cjxMYWJlbD4gZG9uZSA9IG5ld0xhYmVsKCk7CisgICAgZXhwZWN0ZWRGdW5jdGlvbiA9
IGVtaXRFeHBlY3RlZEZ1bmN0aW9uU25pcHBldChkc3QsIGZ1bmMsIGV4cGVjdGVkRnVuY3Rpb24s
IGNhbGxBcmd1bWVudHMsIGRvbmUuZ2V0KCkpOwogCiAgICAgZW1pdE9wY29kZShvcF9jb25zdHJ1
Y3QpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmdW5jLT5pbmRleCgpKTsgLy8gZnVuYwpA
QCAtMjIwNCw2ICsyMjg4LDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRD
b25zdAogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CiAgICAgfQogCisg
ICAgaWYgKGV4cGVjdGVkRnVuY3Rpb24gIT0gTm9FeHBlY3RlZEZ1bmN0aW9uKQorICAgICAgICBl
bWl0TGFiZWwoZG9uZS5nZXQoKSk7CisKICAgICBpZiAobV9zaG91bGRFbWl0UHJvZmlsZUhvb2tz
KSB7CiAgICAgICAgIGVtaXRPcGNvZGUob3BfcHJvZmlsZV9kaWRfY2FsbCk7CiAgICAgICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChjYWxsQXJndW1lbnRzLnByb2ZpbGVIb29rUmVnaXN0ZXIoKS0+
aW5kZXgoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxMzEzODgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUxLDYgKzUxLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIExhYmVs
OwogICAgIGNsYXNzIEpTU2NvcGU7CiAKKyAgICBlbnVtIEV4cGVjdGVkRnVuY3Rpb24geworICAg
ICAgICBOb0V4cGVjdGVkRnVuY3Rpb24sCisgICAgICAgIEV4cGVjdE9iamVjdENvbnN0cnVjdG9y
LAorICAgICAgICBFeHBlY3RBcnJheUNvbnN0cnVjdG9yCisgICAgfTsKKwogICAgIGNsYXNzIENh
bGxBcmd1bWVudHMgewogICAgIHB1YmxpYzoKICAgICAgICAgQ2FsbEFyZ3VtZW50cyhCeXRlY29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBBcmd1bWVudHNOb2RlKiBhcmd1bWVudHNOb2RlKTsKQEAg
LTQ4Myw4ICs0ODksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1p
dERlbGV0ZUJ5VmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJ
RCogcHJvcGVydHkpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0UHV0QnlJbmRleChSZWdpc3Rl
cklEKiBiYXNlLCB1bnNpZ25lZCBpbmRleCwgUmVnaXN0ZXJJRCogdmFsdWUpOwogICAgICAgICB2
b2lkIGVtaXRQdXRHZXR0ZXJTZXR0ZXIoUmVnaXN0ZXJJRCogYmFzZSwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHksIFJlZ2lzdGVySUQqIGdldHRlciwgUmVnaXN0ZXJJRCogc2V0dGVyKTsKLQot
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q2FsbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQq
IGZ1bmMsIENhbGxBcmd1bWVudHMmLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CisgICAgICAgIAorICAgICAgICBFeHBlY3RlZEZ1bmN0
aW9uIGV4cGVjdGVkRnVuY3Rpb25Gb3JJZGVudGlmaWVyKGNvbnN0IElkZW50aWZpZXImKTsKKyAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBm
dW5jLCBFeHBlY3RlZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRzJiwgdW5zaWduZWQgZGl2b3QsIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOwogICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0Q2FsbEV2YWwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBDYWxs
QXJndW1lbnRzJiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25l
ZCBlbmRPZmZzZXQpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q2FsbFZhcmFyZ3MoUmVnaXN0
ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBSZWdpc3RlcklEKiB0aGlzUmVnaXN0ZXIsIFJl
Z2lzdGVySUQqIGFyZ3VtZW50cywgUmVnaXN0ZXJJRCogZmlyc3RGcmVlUmVnaXN0ZXIsIFJlZ2lz
dGVySUQqIHByb2ZpbGVIb29rUmVnaXN0ZXIsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFy
dE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExv
YWRWYXJhcmdzKFJlZ2lzdGVySUQqIGFyZ0NvdW50RHN0LCBSZWdpc3RlcklEKiB0aGlzUmVnaXN0
ZXIsIFJlZ2lzdGVySUQqIGFyZ3MpOwpAQCAtNDkyLDcgKzQ5OSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmV0dXJuKFJlZ2lzdGVySUQqIHNyYyk7CiAgICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXRFbmQoUmVnaXN0ZXJJRCogc3JjKSB7IHJldHVybiBlbWl0VW5h
cnlOb0RzdE9wKG9wX2VuZCwgc3JjKTsgfQogCi0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRDb25z
dHJ1Y3QoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBDYWxsQXJndW1lbnRzJiwg
dW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQp
OworICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q29uc3RydWN0KFJlZ2lzdGVySUQqIGRzdCwgUmVn
aXN0ZXJJRCogZnVuYywgRXhwZWN0ZWRGdW5jdGlvbiwgQ2FsbEFyZ3VtZW50cyYsIHVuc2lnbmVk
IGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKICAgICAg
ICAgUmVnaXN0ZXJJRCogZW1pdFN0cmNhdChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNy
YywgaW50IGNvdW50KTsKICAgICAgICAgdm9pZCBlbWl0VG9QcmltaXRpdmUoUmVnaXN0ZXJJRCog
ZHN0LCBSZWdpc3RlcklEKiBzcmMpOwogCkBAIC01OTAsNyArNTk3LDEyIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB0eXBlZGVmIEhhc2hNYXA8ZG91YmxlLCBKU1ZhbHVlPiBOdW1iZXJNYXA7
CiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmdJbXBsKiwgSlNTdHJpbmcqLCBJZGVudGlm
aWVyUmVwSGFzaD4gSWRlbnRpZmllclN0cmluZ01hcDsKICAgICAgICAgCi0gICAgICAgIFJlZ2lz
dGVySUQqIGVtaXRDYWxsKE9wY29kZUlELCBSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1
bmMsIENhbGxBcmd1bWVudHMmLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQs
IHVuc2lnbmVkIGVuZE9mZnNldCk7CisgICAgICAgIC8vIEhlbHBlciBmb3IgZW1pdENhbGwoKSBh
bmQgZW1pdENvbnN0cnVjdCgpLiBUaGlzIHdvcmtzIGJlY2F1c2UgdGhlIHNldCBvZgorICAgICAg
ICAvLyBleHBlY3RlZCBmdW5jdGlvbnMgaGF2ZSBpZGVudGljYWwgYmVoYXZpb3IgZm9yIGJvdGgg
Y2FsbCBhbmQgY29uc3RydWN0CisgICAgICAgIC8vIChpLmUuICJPYmplY3QoKSIgaXMgaWRlbnRp
Y2FsIHRvICJuZXcgT2JqZWN0KCkiKS4KKyAgICAgICAgRXhwZWN0ZWRGdW5jdGlvbiBlbWl0RXhw
ZWN0ZWRGdW5jdGlvblNuaXBwZXQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBF
eHBlY3RlZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRzJiwgTGFiZWwqIGRvbmUpOworICAgICAgICAK
KyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGwoT3Bjb2RlSUQsIFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogZnVuYywgRXhwZWN0ZWRGdW5jdGlvbiwgQ2FsbEFyZ3VtZW50cyYsIHVuc2ln
bmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKIAog
ICAgICAgICBSZWdpc3RlcklEKiBuZXdSZWdpc3RlcigpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lv
biAxMzEzODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29k
ZWdlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Niw5ICszNjYsMTQgQEAgUmVnaXN0ZXJJRCog
QXJndW1lbnRMaXN0Tm9kZTo6ZW1pdEJ5dGVjbwogCiBSZWdpc3RlcklEKiBOZXdFeHByTm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRz
dCkKIHsKKyAgICBFeHBlY3RlZEZ1bmN0aW9uIGV4cGVjdGVkRnVuY3Rpb247CisgICAgaWYgKG1f
ZXhwci0+aXNSZXNvbHZlTm9kZSgpKQorICAgICAgICBleHBlY3RlZEZ1bmN0aW9uID0gZ2VuZXJh
dG9yLmV4cGVjdGVkRnVuY3Rpb25Gb3JJZGVudGlmaWVyKHN0YXRpY19jYXN0PFJlc29sdmVOb2Rl
Kj4obV9leHByKS0+aWRlbnRpZmllcigpKTsKKyAgICBlbHNlCisgICAgICAgIGV4cGVjdGVkRnVu
Y3Rpb24gPSBOb0V4cGVjdGVkRnVuY3Rpb247CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMg
PSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByKTsKICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1
bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENvbnN0
cnVjdChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QpLCBmdW5jLmdldCgp
LCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7Cisg
ICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q29uc3RydWN0KGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uT3JJZ25vcmVkKGRzdCksIGZ1bmMuZ2V0KCksIGV4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1
bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKIH0KIAogaW5saW5l
IENhbGxBcmd1bWVudHM6OkNhbGxBcmd1bWVudHMoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgQXJndW1lbnRzTm9kZSogYXJndW1lbnRzTm9kZSkKQEAgLTQxNSwyMCArNDIwLDIzIEBAIFJl
Z2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6ZW1pdEIKICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIpOwogICAgIENhbGxBcmd1bWVu
dHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgZ2VuZXJhdG9yLmVtaXRM
b2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwotICAgIHJl
dHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9y
ZWQoZHN0LCBmdW5jLmdldCgpKSwgZnVuYy5nZXQoKSwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwg
c3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENh
bGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0LCBmdW5jLmdldCgpKSwg
ZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBz
dGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQog
eworICAgIEV4cGVjdGVkRnVuY3Rpb24gZXhwZWN0ZWRGdW5jdGlvbiA9IGdlbmVyYXRvci5leHBl
Y3RlZEZ1bmN0aW9uRm9ySWRlbnRpZmllcihtX2lkZW50KTsKICAgICBSZXNvbHZlUmVzdWx0IHJl
c29sdmVSZXN1bHQgPSBnZW5lcmF0b3IucmVzb2x2ZShtX2lkZW50KTsKIAogICAgIGlmIChSZWdp
c3RlcklEKiBsb2NhbCA9IHJlc29sdmVSZXN1bHQubG9jYWwoKSkgewogICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5lbWl0TW92ZShnZW5lcmF0b3IudGVtcERlc3Rp
bmF0aW9uKGRzdCksIGxvY2FsKTsKICAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRz
KGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGNhbGxBcmd1
bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICByZXR1cm4gZ2Vu
ZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwg
Y2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSksIGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMs
IGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAgICAgICAgLy8gVGhpcyBw
YXNzZXMgTm9FeHBlY3RlZEZ1bmN0aW9uIGJlY2F1c2Ugd2UgZXhwZWN0IHRoYXQgaWYgdGhlIGZ1
bmN0aW9uIGlzIGluIGEKKyAgICAgICAgLy8gbG9jYWwgdmFyaWFibGUsIHRoZW4gaXQncyBub3Qg
b25lIG9mIG91ciBidWlsdC1pbiBjb25zdHJ1Y3RvcnMuCisgICAgICAgIHJldHVybiBnZW5lcmF0
b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0LCBjYWxs
QXJndW1lbnRzLnRoaXNSZWdpc3RlcigpKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9u
LCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiAg
ICAgfQogCiAgICAgaWYgKHJlc29sdmVSZXN1bHQuaXNTdGF0aWMoKSkgewpAQCAtNDM2LDcgKzQ0
NCw3IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWkKICAgICAgICAg
Q2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAg
Z2VuZXJhdG9yLmVtaXRHZXRTdGF0aWNWYXIoZnVuYy5nZXQoKSwgcmVzb2x2ZVJlc3VsdCwgbV9p
ZGVudCk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRoaXNSZWdp
c3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2Fs
bChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGZ1bmMuZ2V0KCkpLCBm
dW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZz
ZXQoKSk7CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFs
RGVzdGluYXRpb25Pcklnbm9yZWQoZHN0LCBmdW5jLmdldCgpKSwgZnVuYy5nZXQoKSwgZXhwZWN0
ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zm
c2V0KCkpOwogICAgIH0KIAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpOwpAQCAtNDQ1LDcgKzQ1Myw4IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9u
Q2FsbFJlc29sdmVOb2RlOjplbWkKIAogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8o
aWRlbnRpZmllclN0YXJ0ICsgbV9pZGVudC5sZW5ndGgoKSwgbV9pZGVudC5sZW5ndGgoKSwgMCk7
CiAgICAgZ2VuZXJhdG9yLmVtaXRSZXNvbHZlV2l0aFRoaXMoY2FsbEFyZ3VtZW50cy50aGlzUmVn
aXN0ZXIoKSwgZnVuYy5nZXQoKSwgcmVzb2x2ZVJlc3VsdCwgbV9pZGVudCk7Ci0gICAgcmV0dXJu
IGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChk
c3QsIGZ1bmMuZ2V0KCkpLCBmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFy
dE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CisgICAgLy8gRklYTUU6IFJlY29uc2lkZXIgcGFzc2lu
ZyBleHBlY3RlZEZ1bmN0aW9uIGluc3RlYWQgb2YgTm9FeHBlY3RlZEZ1bmN0aW9uLgorICAgIHJl
dHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9y
ZWQoZHN0LCBmdW5jLmdldCgpKSwgZnVuYy5nZXQoKSwgZXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFy
Z3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogfQogCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25DYWxsQnJhY2tldE5vZGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDU4LDcgKzQ2Nyw3IEBAIFJlZ2lz
dGVySUQqIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWkKICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGdlbmVyYXRvci50ZW1wRGVzdGlu
YXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgcHJvcGVydHkpOwogICAgIENhbGxBcmd1bWVudHMgY2Fs
bEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNh
bGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGJhc2UuZ2V0KCkpOwotICAgIHJldHVybiBnZW5l
cmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0LCBm
dW5jdGlvbi5nZXQoKSksIGZ1bmN0aW9uLmdldCgpLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBz
dGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2Fs
bChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGZ1bmN0aW9uLmdldCgp
KSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2
b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25DYWxsRG90Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCkBAIC00NzEsNyArNDgwLDcgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25D
YWxsRG90Tm9kZTo6ZW1pdEJ5dAogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2
b3QoKSAtIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0LCBzdGFydE9mZnNldCgpIC0gbV9zdWJl
eHByZXNzaW9uRGl2b3RPZmZzZXQsIG1fc3ViZXhwcmVzc2lvbkVuZE9mZnNldCk7CiAgICAgZ2Vu
ZXJhdG9yLmVtaXRNZXRob2RDaGVjaygpOwogICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJZChmdW5j
dGlvbi5nZXQoKSwgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9pZGVudCk7Ci0gICAg
cmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdu
b3JlZChkc3QsIGZ1bmN0aW9uLmdldCgpKSwgZnVuY3Rpb24uZ2V0KCksIGNhbGxBcmd1bWVudHMs
IGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJh
dG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVu
Y3Rpb24uZ2V0KCkpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJn
dW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiB9CiAKIFJlZ2lz
dGVySUQqIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAtNDkxLDcgKzUwMCw3IEBAIFJl
Z2lzdGVySUQqIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWkKICAgICAgICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiByZWFsRnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9y
LnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpKTsKICAgICAgICAgICAgIENhbGxBcmd1
bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgICAgICBnZW5l
cmF0b3IuZW1pdE5vZGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgb2xkTGlzdC0+bV9l
eHByKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJ
Z25vcmVkLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIGNhbGxBcmd1bWVudHMsIGRpdm90KCks
IHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0
Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCks
IE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQo
KSwgZW5kT2Zmc2V0KCkpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQo
KSk7CiAKICAgICAgICAgICAgIG1fYXJncy0+bV9saXN0Tm9kZSA9IG9sZExpc3Q7CkBAIC00OTks
NyArNTA4LDcgQEAgUmVnaXN0ZXJJRCogQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaQogICAg
ICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlYWxGdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0
TW92ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCkpOwogICAgICAg
ICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAg
ICAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rlcigp
LCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChmaW5hbERl
c3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIGNhbGxBcmd1bWVu
dHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAgICAgICAgICAgIGdl
bmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCByZWFsRnVu
Y3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwg
c3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRK
dW1wKGVuZC5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC01MDcsNyArNTE2LDcgQEAgUmVn
aXN0ZXJJRCogQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaQogICAgIHsKICAgICAgICAgQ2Fs
bEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGJhc2UuZ2V0KCkp
OwotICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5n
ZXQoKSwgZnVuY3Rpb24uZ2V0KCksIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0
KCksIGVuZE9mZnNldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKGZpbmFsRGVzdGlu
YXRpb25Pcklnbm9yZWQuZ2V0KCksIGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24s
IGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKICAg
ICB9CiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChlbmQuZ2V0KCkpOwogICAgIHJldHVybiBmaW5h
bERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpOwpAQCAtNTQ0LDIwICs1NTMsMjAgQEAgUmVnaXN0
ZXJJRCogQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbQogICAgICAgICAgICAgICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gcmVhbEZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVy
YXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAg
ICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShjYWxsQXJndW1lbnRzLnRoaXNSZWdp
c3RlcigpLCBvbGRMaXN0LT5tX2V4cHIpOwotICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3Iu
ZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdl
dCgpLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7
CisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9u
T3JJZ25vcmVkLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwg
Y2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIG1fYXJncy0+bV9saXN0
Tm9kZSA9IG1fYXJncy0+bV9saXN0Tm9kZS0+bV9uZXh0OwogICAgICAgICAgICAgICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gcmVhbEZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVy
YXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAg
ICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShjYWxsQXJndW1lbnRzLnRoaXNSZWdp
c3RlcigpLCBvbGRMaXN0LT5tX2V4cHIpOwotICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3Iu
ZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdl
dCgpLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7
CisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9u
T3JJZ25vcmVkLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwg
Y2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBtX2FyZ3MtPm1fbGlzdE5vZGUgPSBvbGRM
aXN0OwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gcmVhbEZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVz
dGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgQ2FsbEFyZ3VtZW50
cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAgICAgICAgICBnZW5l
cmF0b3IuZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQo
KSk7Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKGZpbmFsRGVzdGluYXRpb25P
cklnbm9yZWQuZ2V0KCksIHJlYWxGdW5jdGlvbi5nZXQoKSwgY2FsbEFyZ3VtZW50cywgZGl2b3Qo
KSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIGdlbmVyYXRv
ci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCByZWFsRnVuY3Rpb24u
Z2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRP
ZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgQVNTRVJUKG1fYXJncy0+bV9saXN0Tm9kZSAmJiBtX2FyZ3MtPm1fbGlzdE5v
ZGUtPm1fbmV4dCk7CkBAIC01ODYsNyArNTk1LDcgQEAgUmVnaXN0ZXJJRCogQXBwbHlGdW5jdGlv
bkNhbGxEb3ROb2RlOjplbQogICAgIHsKICAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1l
bnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxB
cmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGJhc2UuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3Iu
ZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwgZnVuY3Rpb24uZ2V0KCks
IGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQuZ2V0KCks
IGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90
KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKICAgICB9CiAgICAgZ2VuZXJhdG9yLmVt
aXRMYWJlbChlbmQuZ2V0KCkpOwogICAgIHJldHVybiBmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVk
LmdldCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAJKHJldmlzaW9uIDEzMTM4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTY2LDYgKzE5NjYs
MTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfbmV3X2FycmF5KTsKICAgICAgICAgfQogICAgICAgICAgICAgCisg
ICAgICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZTogeworICAgICAgICAgICAgaW50IGxl
bmd0aE9wZXJhbmQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgICAgICAg
ICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoTmV3QXJy
YXlXaXRoU2l6ZSwgZ2V0KGxlbmd0aE9wZXJhbmQpKSk7CisgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9uZXdfYXJyYXlfd2l0aF9zaXplKTsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjogewogICAgICAgICAgICAgaW50IHN0YXJ0Q29u
c3RhbnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgICAgICAgICAgaW50
IG51bUNvbnN0YW50cyA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHJldmlzaW9uIDEz
MTM4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE2Miw2ICsxNjIsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNh
bkNvbXBpbGVPcGNvZGUoCiAgICAgY2FzZSBvcF9yZXNvbHZlX2dsb2JhbDoKICAgICBjYXNlIG9w
X25ld19vYmplY3Q6CiAgICAgY2FzZSBvcF9uZXdfYXJyYXk6CisgICAgY2FzZSBvcF9uZXdfYXJy
YXlfd2l0aF9zaXplOgogICAgIGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjoKICAgICBjYXNlIG9w
X3N0cmNhdDoKICAgICBjYXNlIG9wX3RvX3ByaW1pdGl2ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAJKHJldmlzaW9uIDEzMTM4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEyLDYgKzMxMiw3IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX25lcSkKICAgICAg
ICAgREVGSU5FX09QKG9wX25lcV9udWxsKQogICAgICAgICBERUZJTkVfT1Aob3BfbmV3X2FycmF5
KQorICAgICAgICBERUZJTkVfT1Aob3BfbmV3X2FycmF5X3dpdGhfc2l6ZSkKICAgICAgICAgREVG
SU5FX09QKG9wX25ld19hcnJheV9idWZmZXIpCiAgICAgICAgIERFRklORV9PUChvcF9uZXdfZnVu
YykKICAgICAgICAgREVGSU5FX09QKG9wX25ld19mdW5jX2V4cCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAkocmV2aXNpb24gMTMxMzg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNzE4LDYgKzcxOCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGVtaXRfb3BfbmVxKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9uZXFfbnVsbChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbmV3
X2FycmF5KEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9uZXdfYXJyYXlfd2l0
aF9zaXplKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9uZXdfYXJyYXlfYnVm
ZmVyKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9uZXdfZnVuYyhJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbmV3X2Z1bmNfZXhwKEluc3RydWN0aW9uKik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9u
IDEzMTM4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE2OTQsNiArMTY5NCwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bmV3X2FycmF5KEluc3RydWN0CiAgICAgc3R1YkNhbGwuY2FsbChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6
ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFN0dWJDYWxsIHN0
dWJDYWxsKHRoaXMsIGN0aV9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKTsKKyAgICBzdHViQ2FsbC5h
ZGRBcmd1bWVudChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMik7CisgICAg
c3R1YkNhbGwuY2FsbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKK30KKwogdm9p
ZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X2J1ZmZlcihJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9uZXdfYXJy
YXlfYnVmZmVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShy
ZXZpc2lvbiAxMzEzODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjM2MCw2ICsyMzYwLDIwIEBAIERFRklORV9TVFVCX0ZVTkNU
SU9OKEpTT2JqZWN0Kiwgb3BfbmV3X2EKICAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoc3RhY2tG
cmFtZS5jYWxsRnJhbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KCZzdGFja0ZyYW1lLmNh
bGxGcmFtZS0+cmVnaXN0ZXJzKClbc3RhY2tGcmFtZS5hcmdzWzBdLmludDMyKCldKSwgc3RhY2tG
cmFtZS5hcmdzWzFdLmludDMyKCkpOwogfQogCitERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVj
dCosIG9wX25ld19hcnJheV93aXRoX3NpemUpCit7CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1F
KHN0YWNrRnJhbWUpOworICAgIAorICAgIEpTVmFsdWUgbGVuZ3RoID0gc3RhY2tGcmFtZS5hcmdz
WzBdLmpzVmFsdWUoKTsKKyAgICBKU0FycmF5KiByZXN1bHQ7CisgICAgaWYgKGxlbmd0aC5pc051
bWJlcigpKQorICAgICAgICByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KHN0YWNrRnJhbWUu
Y2FsbEZyYW1lLCBsZW5ndGgudG9VSW50MzIoc3RhY2tGcmFtZS5jYWxsRnJhbWUpKTsKKyAgICBl
bHNlCisgICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdEFycmF5KHN0YWNrRnJhbWUuY2FsbEZyYW1l
LCAmbGVuZ3RoLCAxKTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBERUZJTkVfU1RV
Ql9GVU5DVElPTihKU09iamVjdCosIG9wX25ld19hcnJheV9idWZmZXIpCiB7CiAgICAgU1RVQl9J
TklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuaAkocmV2aXNpb24gMTMxMzg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTMsNiArNDEzLDcgQEAgZXh0ZXJuICJD
IiB7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX3Vyc2hpZnQoU1RVQl9BUkdT
X0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIg
Y3RpX3RvX29iamVjdChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICBK
U09iamVjdCogSklUX1NUVUIgY3RpX29wX25ld19hcnJheShTVFVCX0FSR1NfREVDTEFSQVRJT04p
IFdURl9JTlRFUk5BTDsKKyAgICBKU09iamVjdCogSklUX1NUVUIgY3RpX29wX25ld19hcnJheV93
aXRoX3NpemUoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgSlNPYmpl
Y3QqIEpJVF9TVFVCIGN0aV9vcF9uZXdfYXJyYXlfYnVmZmVyKFNUVUJfQVJHU19ERUNMQVJBVElP
TikgV1RGX0lOVEVSTkFMOwogICAgIEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3BfbmV3X2Z1bmMo
U1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgSlNPYmplY3QqIEpJVF9T
VFVCIGN0aV9vcF9uZXdfZnVuY19leHAoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJO
QUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRo
cy5jcHAJKHJldmlzaW9uIDEzMTM4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwNCw2ICs1MDQsMTggQEAgTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19hcnJheQogICAgIExMSU5UX1JFVFVSTihj
b25zdHJ1Y3RBcnJheShleGVjLCBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCZMTElOVF9PUCgyKSks
IHBjWzNdLnUub3BlcmFuZCkpOwogfQogCitMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
bmV3X2FycmF5X3dpdGhfc2l6ZSkKK3sKKyAgICBMTElOVF9CRUdJTigpOworICAgIEpTVmFsdWUg
bGVuZ3RoID0gTExJTlRfT1BfQygyKS5qc1ZhbHVlKCk7CisgICAgSlNBcnJheSogcmVzdWx0Owor
ICAgIGlmIChsZW5ndGguaXNOdW1iZXIoKSkKKyAgICAgICAgcmVzdWx0ID0gY29uc3RydWN0RW1w
dHlBcnJheShleGVjLCBsZW5ndGgudG9VSW50MzIoZXhlYykpOworICAgIGVsc2UKKyAgICAgICAg
cmVzdWx0ID0gY29uc3RydWN0QXJyYXkoZXhlYywgJmxlbmd0aCwgMSk7CisgICAgTExJTlRfUkVU
VVJOKHJlc3VsdCk7Cit9CisKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfYXJy
YXlfYnVmZmVyKQogewogICAgIExMSU5UX0JFR0lOKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAkocmV2aXNpb24gMTMxMzg4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEyMSw2ICsxMjEsNyBAQCBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRo
X2NyCiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NvbnZlcnRfdGhpcyk7
CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25ld19vYmplY3QpOwogTExJ
TlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9uZXdfYXJyYXkpOworTExJTlRfU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9uZXdfYXJyYXlfd2l0aF9zaXplKTsKIExMSU5U
X1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbmV3X2FycmF5X2J1ZmZlcik7CiBMTElO
VF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25ld19yZWdleHApOwogTExJTlRfU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9ub3QpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24g
MTMxMzg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC00MjgsNiArNDI4LDEyIEBAIF9sbGludF9vcF9uZXdf
YXJyYXk6CiAgICAgZGlzcGF0Y2goNCkKIAogCitfbGxpbnRfb3BfbmV3X2FycmF5X3dpdGhfc2l6
ZToKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3Bh
dGhfbmV3X2FycmF5X3dpdGhfc2l6ZSkKKyAgICBkaXNwYXRjaCgzKQorCisKIF9sbGludF9vcF9u
ZXdfYXJyYXlfYnVmZmVyOgogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAgICBjYWxsU2xvd1BhdGgo
X2xsaW50X3Nsb3dfcGF0aF9uZXdfYXJyYXlfYnVmZmVyKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCShyZXZpc2lvbiAxMzEz
ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjZGVmaW5lIEpTQ19DT01NT05fSURF
TlRJRklFUlNfRUFDSF9QUk9QRVJUWV9OQU1FKG1hY3JvKSBcCiAgICAgbWFjcm8oYXBwbHkpIFwK
ICAgICBtYWNybyhhcmd1bWVudHMpIFwKKyAgICBtYWNybyhBcnJheSkgXAogICAgIG1hY3JvKGJp
bmQpIFwKICAgICBtYWNybyhjYWxsKSBcCiAgICAgbWFjcm8oY2FsbGVlKSBcCkBAIC01NCw2ICs1
NSw3IEBACiAgICAgbWFjcm8obXVsdGlsaW5lKSBcCiAgICAgbWFjcm8obmFtZSkgXAogICAgIG1h
Y3JvKG5vdykgXAorICAgIG1hY3JvKE9iamVjdCkgXAogICAgIG1hY3JvKHBhcnNlKSBcCiAgICAg
bWFjcm8ocHJvcGVydHlJc0VudW1lcmFibGUpIFwKICAgICBtYWNybyhwcm90b3R5cGUpIFwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAJKHJldmlzaW9uIDEzMTM4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDkgKzI4OSw5IEBAIHZvaWQg
SlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8KICAgICBtX3JlZ0V4cFByb3RvdHlw
ZS0+cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIG1fcmVnRXhwQ29uc3RydWN0b3IuZ2V0KCksIERv
bnRFbnVtKTsKICAgICBtX2Vycm9yUHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rvciwg
bV9lcnJvckNvbnN0cnVjdG9yLmdldCgpLCBEb250RW51bSk7CiAKLSAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgIk9iamVj
dCIpLCBvYmplY3RDb25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLk9iamVj
dCwgb2JqZWN0Q29uc3RydWN0b3IsIERvbnRFbnVtKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJh
bnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgIkZ1bmN0aW9uIiks
IGZ1bmN0aW9uQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJh
bnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgIkFycmF5IiksIGFy
cmF5Q29uc3RydWN0b3IsIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5BcnJheSwgYXJyYXlD
b25zdHJ1Y3RvciwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4
ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiQm9vbGVhbiIpLCBib29sZWFuQ29u
c3RydWN0b3IsIERvbnRFbnVtKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVj
LT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgIlN0cmluZyIpLCBzdHJpbmdDb25zdHJ1
Y3RvciwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmds
b2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiTnVtYmVyIiksIG51bWJlckNvbnN0cnVjdG9y
LCBEb250RW51bSk7CkBAIC0zMjAsNiArMzIwLDggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVz
ZXQoSlNWYWx1ZSBwcm90bwogICAgIAogICAgIG1fc3BlY2lhbFBvaW50ZXJzW1NwZWNpYWw6OkNh
bGxGdW5jdGlvbl0gPSBtX2NhbGxGdW5jdGlvbi5nZXQoKTsKICAgICBtX3NwZWNpYWxQb2ludGVy
c1tTcGVjaWFsOjpBcHBseUZ1bmN0aW9uXSA9IG1fYXBwbHlGdW5jdGlvbi5nZXQoKTsKKyAgICBt
X3NwZWNpYWxQb2ludGVyc1tTcGVjaWFsOjpPYmplY3RDb25zdHJ1Y3Rvcl0gPSBvYmplY3RDb25z
dHJ1Y3RvcjsKKyAgICBtX3NwZWNpYWxQb2ludGVyc1tTcGVjaWFsOjpBcnJheUNvbnN0cnVjdG9y
XSA9IGFycmF5Q29uc3RydWN0b3I7CiAKICAgICBpZiAobV9leHBlcmltZW50c0VuYWJsZWQpIHsK
ICAgICAgICAgTmFtZVByb3RvdHlwZSogcHJpdmF0ZU5hbWVQcm90b3R5cGUgPSBOYW1lUHJvdG90
eXBlOjpjcmVhdGUoZXhlYywgTmFtZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKTsK
</data>
<flag name="commit-queue"
          id="182299"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169125</attachid>
            <date>2012-10-17 02:00:08 -0700</date>
            <delta_ts>2012-10-17 02:33:30 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>jneq_2.patch</filename>
            <type>text/plain</type>
            <size>35879</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMxNTU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBA
CisyMDEyLTEwLTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QXJyYXkgYW5kIG9iamVjdCBhbGxvY2F0aW9ucyB2aWEgJ25ldyBPYmplY3QnIG9yICduZXcgQXJy
YXknIHNob3VsZCBiZSBpbmxpbmVkIGluIGJ5dGVjb2RlIHRvIGFsbG93IGFsbG9jYXRpb24gc2l0
ZSBwcm9maWxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk5NTU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyB1c2VzIHRoZSBvbGQgam5lcV9wdHIgdHJpY2sgdG8gYWxsb3cgZm9yIHRoZSBieXRl
Y29kZSB0byAic2VlIiB0aGF0IHRoZQorICAgICAgICBvcGVyYXRpb24gaW4gcXVlc3Rpb24gaXMg
d2hhdCB3ZSBhbG1vc3QgY2VydGFpbmx5IGtub3cgaXQgdG8gYmUuCisKKyAgICAgICAgKiBieXRl
Y29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXApOgorICAg
ICAgICAqIGJ5dGVjb2RlL09wY29kZS5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
cGFkT3Bjb2RlTmFtZSk6CisgICAgICAgICogYnl0ZWNvZGUvU3BlY2lhbFBvaW50ZXIuaDoKKyAg
ICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdENhbGxFdmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmV4cGVjdGVkRnVuY3Rpb25Gb3JJZGVudGlmaWVyKToKKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXhwZWN0ZWRGdW5jdGlvblNuaXBwZXQpOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0cnVjdCk6CisgICAgICAg
ICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChCeXRlY29kZUdl
bmVyYXRvcik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAg
ICAgIChKU0M6Ok5ld0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5j
dGlvbkNhbGxWYWx1ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9u
Q2FsbFJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNh
bGxCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxs
RG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q2FsbEZ1bmN0aW9uQ2FsbERv
dE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkFwcGx5RnVuY3Rpb25DYWxsRG90
Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAg
ICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuQ29tcGls
ZU9wY29kZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSklU
KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogaml0
L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuaDoKKyAgICAgICAgKiBsbGludC9M
TEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhf
REVDTCk6CisgICAgICAgIChMTEludCk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMu
aDoKKyAgICAgICAgKExMSW50KToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmg6CisgICAgICAgICog
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
OjpyZXNldCk6CisgICAgICAgIChKU0MpOgorCiAyMDEyLTEwLTE2ICBDc2FiYSBPc3p0cm9nb27D
oWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQg
cjEzMTUxNiBhbmQgcjEzMTU1MC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxMzEzODgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzA0LDYgKzcw
NCwxMyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMsIGNvCiAgICAgICAg
ICAgICBkdW1wQnl0ZWNvZGVDb21tZW50QW5kTmV3TGluZShsb2NhdGlvbik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6
IHsKKyAgICAgICAgICAgIGludCBkc3QgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAg
IGludCBsZW5ndGggPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGRhdGFMb2coIlsl
NGRdIG5ld19hcnJheV93aXRoX3NpemVcdCAlcywgJXMiLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1l
KGV4ZWMsIGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZXhlYywgbGVuZ3RoKS5kYXRhKCkpOwor
ICAgICAgICAgICAgZHVtcEJ5dGVjb2RlQ29tbWVudEFuZE5ld0xpbmUobG9jYXRpb24pOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVm
ZmVyOiB7CiAgICAgICAgICAgICBpbnQgZHN0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAg
ICAgICBpbnQgYXJndiA9ICgrK2l0KS0+dS5vcGVyYW5kOwpAQCAtMTI0NSw5ICsxMjUyLDkgQEAg
dm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjbwogICAgICAgICB9CiAgICAg
ICAgIGNhc2Ugb3Bfam5lcV9wdHI6IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5v
cGVyYW5kOwotICAgICAgICAgICAgdm9pZCogcG9pbnRlciA9ICgrK2l0KS0+dS5wb2ludGVyOwor
ICAgICAgICAgICAgU3BlY2lhbDo6UG9pbnRlciBwb2ludGVyID0gKCsraXQpLT51LnNwZWNpYWxQ
b2ludGVyOwogICAgICAgICAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAg
ICAgICAgICAgZGF0YUxvZygiWyU0ZF0gam5lcV9wdHJcdFx0ICVzLCAlcCwgJWQoLT4lZCkiLCBs
b2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCksIHBvaW50ZXIsIG9mZnNldCwg
bG9jYXRpb24gKyBvZmZzZXQpOworICAgICAgICAgICAgZGF0YUxvZygiWyU0ZF0gam5lcV9wdHJc
dFx0ICVzLCAlZCAoJXApLCAlZCgtPiVkKSIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywg
cjApLmRhdGEoKSwgcG9pbnRlciwgbV9nbG9iYWxPYmplY3QtPmFjdHVhbFBvaW50ZXJGb3IocG9p
bnRlciksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOwogICAgICAgICAgICAgZHVtcEJ5dGVj
b2RlQ29tbWVudEFuZE5ld0xpbmUobG9jYXRpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHJldmlz
aW9uIDEzMTM4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
XAogICAgICAgICBtYWNybyhvcF9uZXdfb2JqZWN0LCAyKSBcCiAgICAgICAgIG1hY3JvKG9wX25l
d19hcnJheSwgNCkgXAorICAgICAgICBtYWNybyhvcF9uZXdfYXJyYXlfd2l0aF9zaXplLCAzKSBc
CiAgICAgICAgIG1hY3JvKG9wX25ld19hcnJheV9idWZmZXIsIDQpIFwKICAgICAgICAgbWFjcm8o
b3BfbmV3X3JlZ2V4cCwgMykgXAogICAgICAgICBtYWNybyhvcF9tb3YsIDMpIFwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjaWFsUG9pbnRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjaWFsUG9pbnRlci5oCShyZXZp
c2lvbiAxMzEzODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY2lhbFBv
aW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBAQCBuYW1lc3BhY2UgU3BlY2lh
bCB7CiBlbnVtIFBvaW50ZXIgewogICAgIENhbGxGdW5jdGlvbiwKICAgICBBcHBseUZ1bmN0aW9u
LAorICAgIE9iamVjdENvbnN0cnVjdG9yLAorICAgIEFycmF5Q29uc3RydWN0b3IsCiAgICAgVGFi
bGVTaXplIC8vIE5vdCBhIHJlYWwgc3BlY2lhbCBwb2ludGVyLiBVc2UgdGhpcyB0byBkZXRlcm1p
bmUgdGhlIG51bWJlciBvZiBwb2ludGVycy4KIH07CiB9IC8vIG5hbWVzcGFjZSBTcGVjaWFsCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTMxMzg4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIwMTMsOSArMjAxMyw5IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
TmV3RnUKICAgICByZXR1cm4gcjA7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0Q2FsbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIENhbGxBcmd1bWVu
dHMmIGNhbGxBcmd1bWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwg
dW5zaWduZWQgZW5kT2Zmc2V0KQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRD
YWxsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgRXhwZWN0ZWRGdW5jdGlvbiBl
eHBlY3RlZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRzJiBjYWxsQXJndW1lbnRzLCB1bnNpZ25lZCBk
aXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKIHsKLSAgICBy
ZXR1cm4gZW1pdENhbGwob3BfY2FsbCwgZHN0LCBmdW5jLCBjYWxsQXJndW1lbnRzLCBkaXZvdCwg
c3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CisgICAgcmV0dXJuIGVtaXRDYWxsKG9wX2NhbGwsIGRz
dCwgZnVuYywgZXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QsIHN0YXJ0T2Zm
c2V0LCBlbmRPZmZzZXQpOwogfQogCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVhdGVBcmd1
bWVudHNJZk5lY2Vzc2FyeSgpCkBAIC0yMDQ4LDEwICsyMDQ4LDg1IEBAIHZvaWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmNyZWF0ZUFjdGl2YXRpb24KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRDYWxsRXZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIENhbGxB
cmd1bWVudHMmIGNhbGxBcmd1bWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9m
ZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQogewotICAgIHJldHVybiBlbWl0Q2FsbChvcF9jYWxs
X2V2YWwsIGRzdCwgZnVuYywgY2FsbEFyZ3VtZW50cywgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXQpOworICAgIHJldHVybiBlbWl0Q2FsbChvcF9jYWxsX2V2YWwsIGRzdCwgZnVuYywgTm9F
eHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9m
ZnNldCk7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChPcGNv
ZGVJRCBvcGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBDYWxsQXJn
dW1lbnRzJiBjYWxsQXJndW1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKK0V4cGVjdGVkRnVuY3Rpb24gQnl0ZWNvZGVHZW5lcmF0
b3I6OmV4cGVjdGVkRnVuY3Rpb25Gb3JJZGVudGlmaWVyKGNvbnN0IElkZW50aWZpZXImIGlkZW50
aWZpZXIpCit7CisgICAgaWYgKGlkZW50aWZpZXIgPT0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5h
bWVzLT5PYmplY3QpCisgICAgICAgIHJldHVybiBFeHBlY3RPYmplY3RDb25zdHJ1Y3RvcjsKKyAg
ICBpZiAoaWRlbnRpZmllciA9PSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPkFycmF5KQor
ICAgICAgICByZXR1cm4gRXhwZWN0QXJyYXlDb25zdHJ1Y3RvcjsKKyAgICByZXR1cm4gTm9FeHBl
Y3RlZEZ1bmN0aW9uOworfQorCitFeHBlY3RlZEZ1bmN0aW9uIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0RXhwZWN0ZWRGdW5jdGlvblNuaXBwZXQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBm
dW5jLCBFeHBlY3RlZEZ1bmN0aW9uIGV4cGVjdGVkRnVuY3Rpb24sIENhbGxBcmd1bWVudHMmIGNh
bGxBcmd1bWVudHMsIExhYmVsKiBkb25lKQoreworICAgIFJlZlB0cjxMYWJlbD4gcmVhbENhbGwg
PSBuZXdMYWJlbCgpOworICAgIHN3aXRjaCAoZXhwZWN0ZWRGdW5jdGlvbikgeworICAgIGNhc2Ug
RXhwZWN0T2JqZWN0Q29uc3RydWN0b3I6IHsKKyAgICAgICAgLy8gSWYgdGhlIG51bWJlciBvZiBh
cmd1bWVudHMgaXMgbm9uLXplcm8sIHRoZW4gd2UgY2FuJ3QgZG8gYW55dGhpbmcgaW50ZXJlc3Rp
bmcuCisgICAgICAgIGlmIChjYWxsQXJndW1lbnRzLmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KCkgPj0gMikKKyAgICAgICAgICAgIHJldHVybiBOb0V4cGVjdGVkRnVuY3Rpb247CisgICAgICAg
IAorICAgICAgICBzaXplX3QgYmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7CisgICAgICAg
IGVtaXRPcGNvZGUob3Bfam5lcV9wdHIpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
ZnVuYy0+aW5kZXgoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChTcGVjaWFsOjpP
YmplY3RDb25zdHJ1Y3Rvcik7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZWFsQ2Fs
bC0+YmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7CisgICAgICAgIAorICAgICAg
ICBpZiAoZHN0ICE9IGlnbm9yZWRSZXN1bHQoKSkgeworICAgICAgICAgICAgZW1pdE9wY29kZShv
cF9uZXdfb2JqZWN0KTsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmlu
ZGV4KCkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBFeHBlY3RBcnJheUNvbnN0cnVjdG9yOiB7CisgICAgICAgIC8vIElmIHlvdSdyZSBkb2lu
ZyBhbnl0aGluZyBvdGhlciB0aGFuICJuZXcgQXJyYXkoKSIgb3IgIm5ldyBBcnJheShmb28pIiB0
aGVuIHdlCisgICAgICAgIC8vIGRvbid0IGRvIGlubGluZSBpdCwgZm9yIG5vdy4gVGhlIG9ubHkg
cmVhc29uIGlzIHRoYXQgY2FsbCBhcmd1bWVudHMgYXJlIGluCisgICAgICAgIC8vIHRoZSBvcHBv
c2l0ZSBvcmRlciBvZiB3aGF0IG9wX25ld19hcnJheSBleHBlY3RzLCBzbyB3ZSdkIGVpdGhlciBu
ZWVkIHRvIGNoYW5nZQorICAgICAgICAvLyBob3cgb3BfbmV3X2FycmF5IHdvcmtzIG9yIHdlJ2Qg
bmVlZCBhbiBvcF9uZXdfYXJyYXlfcmV2ZXJzZS4gTmVpdGhlciBvZiB0aGVzZQorICAgICAgICAv
LyB0aGluZ3Mgc291bmRzIGxpa2UgaXQncyB3b3J0aCBpdC4KKyAgICAgICAgaWYgKGNhbGxBcmd1
bWVudHMuYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA+IDIpCisgICAgICAgICAgICByZXR1
cm4gTm9FeHBlY3RlZEZ1bmN0aW9uOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IGJlZ2luID0g
aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAgICAgICBlbWl0T3Bjb2RlKG9wX2puZXFfcHRyKTsK
KyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZ1bmMtPmluZGV4KCkpOworICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoU3BlY2lhbDo6QXJyYXlDb25zdHJ1Y3Rvcik7CisgICAgICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChyZWFsQ2FsbC0+YmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICBpZiAoZHN0ICE9IGlnbm9yZWRSZXN1bHQo
KSkgeworICAgICAgICAgICAgaWYgKGNhbGxBcmd1bWVudHMuYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoKSA9PSAyKSB7CisgICAgICAgICAgICAgICAgZW1pdE9wY29kZShvcF9uZXdfYXJyYXlf
d2l0aF9zaXplKTsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5p
bmRleCgpKTsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoY2FsbEFyZ3Vt
ZW50cy5hcmd1bWVudFJlZ2lzdGVyKDApLT5pbmRleCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgQVNTRVJUKGNhbGxBcmd1bWVudHMuYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMoKSA9PSAxKTsKKyAgICAgICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX25ld19hcnJh
eSk7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7
CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOworICAgICAgICAgICAg
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFT
U0VSVChleHBlY3RlZEZ1bmN0aW9uID09IE5vRXhwZWN0ZWRGdW5jdGlvbik7CisgICAgICAgIHJl
dHVybiBOb0V4cGVjdGVkRnVuY3Rpb247CisgICAgfQorICAgIAorICAgIHNpemVfdCBiZWdpbiA9
IGluc3RydWN0aW9ucygpLnNpemUoKTsKKyAgICBlbWl0T3Bjb2RlKG9wX2ptcCk7CisgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGRvbmUtPmJpbmQoYmVnaW4sIGluc3RydWN0aW9ucygpLnNpemUo
KSkpOworICAgIGVtaXRMYWJlbChyZWFsQ2FsbC5nZXQoKSk7CisgICAgCisgICAgcmV0dXJuIGV4
cGVjdGVkRnVuY3Rpb247Cit9CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
Q2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5j
LCBFeHBlY3RlZEZ1bmN0aW9uIGV4cGVjdGVkRnVuY3Rpb24sIENhbGxBcmd1bWVudHMmIGNhbGxB
cmd1bWVudHMsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQg
ZW5kT2Zmc2V0KQogewogICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9jYWxsIHx8IG9wY29kZUlE
ID09IG9wX2NhbGxfZXZhbCk7CiAgICAgQVNTRVJUKGZ1bmMtPnJlZkNvdW50KCkpOwpAQCAtMjA3
Niw2ICsyMTUxLDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKAog
CiAgICAgZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsK
IAorICAgIFJlZlB0cjxMYWJlbD4gZG9uZSA9IG5ld0xhYmVsKCk7CisgICAgZXhwZWN0ZWRGdW5j
dGlvbiA9IGVtaXRFeHBlY3RlZEZ1bmN0aW9uU25pcHBldChkc3QsIGZ1bmMsIGV4cGVjdGVkRnVu
Y3Rpb24sIGNhbGxBcmd1bWVudHMsIGRvbmUuZ2V0KCkpOworICAgIAogICAgIC8vIEVtaXQgY2Fs
bC4KICAgICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IG5ld0FycmF5UHJvZmlsZSgpOwog
ICAgIGVtaXRPcGNvZGUob3Bjb2RlSUQpOwpAQCAtMjA5Myw2ICsyMTcxLDkgQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKAogICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoZHN0LT5pbmRleCgpKTsgLy8gZHN0CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChwcm9maWxlKTsKICAgICB9CisgICAgCisgICAgaWYgKGV4cGVjdGVkRnVuY3Rpb24gIT0gTm9F
eHBlY3RlZEZ1bmN0aW9uKQorICAgICAgICBlbWl0TGFiZWwoZG9uZS5nZXQoKSk7CiAKICAgICBp
ZiAobV9zaG91bGRFbWl0UHJvZmlsZUhvb2tzKSB7CiAgICAgICAgIGVtaXRPcGNvZGUob3BfcHJv
ZmlsZV9kaWRfY2FsbCk7CkBAIC0yMTYyLDcgKzIyNDMsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdFVuYXJ5CiAgICAgcmV0dXJuIHNyYzsKIH0KIAotUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb25zdHJ1Y3QoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBmdW5jLCBDYWxsQXJndW1lbnRzJiBjYWxsQXJndW1lbnRzLCB1bnNpZ25lZCBkaXZvdCwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKK1JlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29uc3RydWN0KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJ
RCogZnVuYywgRXhwZWN0ZWRGdW5jdGlvbiBleHBlY3RlZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRz
JiBjYWxsQXJndW1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVu
c2lnbmVkIGVuZE9mZnNldCkKIHsKICAgICBBU1NFUlQoZnVuYy0+cmVmQ291bnQoKSk7CiAKQEAg
LTIxODcsNiArMjI2OCw5IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29u
c3QKICAgICAgICAgY2FsbEZyYW1lLmFwcGVuZChuZXdUZW1wb3JhcnkoKSk7CiAKICAgICBlbWl0
RXhwcmVzc2lvbkluZm8oZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworICAgIAorICAg
IFJlZlB0cjxMYWJlbD4gZG9uZSA9IG5ld0xhYmVsKCk7CisgICAgZXhwZWN0ZWRGdW5jdGlvbiA9
IGVtaXRFeHBlY3RlZEZ1bmN0aW9uU25pcHBldChkc3QsIGZ1bmMsIGV4cGVjdGVkRnVuY3Rpb24s
IGNhbGxBcmd1bWVudHMsIGRvbmUuZ2V0KCkpOwogCiAgICAgZW1pdE9wY29kZShvcF9jb25zdHJ1
Y3QpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmdW5jLT5pbmRleCgpKTsgLy8gZnVuYwpA
QCAtMjIwNCw2ICsyMjg4LDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRD
b25zdAogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CiAgICAgfQogCisg
ICAgaWYgKGV4cGVjdGVkRnVuY3Rpb24gIT0gTm9FeHBlY3RlZEZ1bmN0aW9uKQorICAgICAgICBl
bWl0TGFiZWwoZG9uZS5nZXQoKSk7CisKICAgICBpZiAobV9zaG91bGRFbWl0UHJvZmlsZUhvb2tz
KSB7CiAgICAgICAgIGVtaXRPcGNvZGUob3BfcHJvZmlsZV9kaWRfY2FsbCk7CiAgICAgICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChjYWxsQXJndW1lbnRzLnByb2ZpbGVIb29rUmVnaXN0ZXIoKS0+
aW5kZXgoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxMzEzODgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUxLDYgKzUxLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIExhYmVs
OwogICAgIGNsYXNzIEpTU2NvcGU7CiAKKyAgICBlbnVtIEV4cGVjdGVkRnVuY3Rpb24geworICAg
ICAgICBOb0V4cGVjdGVkRnVuY3Rpb24sCisgICAgICAgIEV4cGVjdE9iamVjdENvbnN0cnVjdG9y
LAorICAgICAgICBFeHBlY3RBcnJheUNvbnN0cnVjdG9yCisgICAgfTsKKwogICAgIGNsYXNzIENh
bGxBcmd1bWVudHMgewogICAgIHB1YmxpYzoKICAgICAgICAgQ2FsbEFyZ3VtZW50cyhCeXRlY29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBBcmd1bWVudHNOb2RlKiBhcmd1bWVudHNOb2RlKTsKQEAg
LTQ4Myw4ICs0ODksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1p
dERlbGV0ZUJ5VmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJ
RCogcHJvcGVydHkpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0UHV0QnlJbmRleChSZWdpc3Rl
cklEKiBiYXNlLCB1bnNpZ25lZCBpbmRleCwgUmVnaXN0ZXJJRCogdmFsdWUpOwogICAgICAgICB2
b2lkIGVtaXRQdXRHZXR0ZXJTZXR0ZXIoUmVnaXN0ZXJJRCogYmFzZSwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHksIFJlZ2lzdGVySUQqIGdldHRlciwgUmVnaXN0ZXJJRCogc2V0dGVyKTsKLQot
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q2FsbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQq
IGZ1bmMsIENhbGxBcmd1bWVudHMmLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CisgICAgICAgIAorICAgICAgICBFeHBlY3RlZEZ1bmN0
aW9uIGV4cGVjdGVkRnVuY3Rpb25Gb3JJZGVudGlmaWVyKGNvbnN0IElkZW50aWZpZXImKTsKKyAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBm
dW5jLCBFeHBlY3RlZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRzJiwgdW5zaWduZWQgZGl2b3QsIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOwogICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0Q2FsbEV2YWwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBDYWxs
QXJndW1lbnRzJiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25l
ZCBlbmRPZmZzZXQpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q2FsbFZhcmFyZ3MoUmVnaXN0
ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBSZWdpc3RlcklEKiB0aGlzUmVnaXN0ZXIsIFJl
Z2lzdGVySUQqIGFyZ3VtZW50cywgUmVnaXN0ZXJJRCogZmlyc3RGcmVlUmVnaXN0ZXIsIFJlZ2lz
dGVySUQqIHByb2ZpbGVIb29rUmVnaXN0ZXIsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFy
dE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExv
YWRWYXJhcmdzKFJlZ2lzdGVySUQqIGFyZ0NvdW50RHN0LCBSZWdpc3RlcklEKiB0aGlzUmVnaXN0
ZXIsIFJlZ2lzdGVySUQqIGFyZ3MpOwpAQCAtNDkyLDcgKzQ5OSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmV0dXJuKFJlZ2lzdGVySUQqIHNyYyk7CiAgICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXRFbmQoUmVnaXN0ZXJJRCogc3JjKSB7IHJldHVybiBlbWl0VW5h
cnlOb0RzdE9wKG9wX2VuZCwgc3JjKTsgfQogCi0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRDb25z
dHJ1Y3QoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBDYWxsQXJndW1lbnRzJiwg
dW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQp
OworICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q29uc3RydWN0KFJlZ2lzdGVySUQqIGRzdCwgUmVn
aXN0ZXJJRCogZnVuYywgRXhwZWN0ZWRGdW5jdGlvbiwgQ2FsbEFyZ3VtZW50cyYsIHVuc2lnbmVk
IGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKICAgICAg
ICAgUmVnaXN0ZXJJRCogZW1pdFN0cmNhdChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNy
YywgaW50IGNvdW50KTsKICAgICAgICAgdm9pZCBlbWl0VG9QcmltaXRpdmUoUmVnaXN0ZXJJRCog
ZHN0LCBSZWdpc3RlcklEKiBzcmMpOwogCkBAIC01OTAsNyArNTk3LDEyIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB0eXBlZGVmIEhhc2hNYXA8ZG91YmxlLCBKU1ZhbHVlPiBOdW1iZXJNYXA7
CiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmdJbXBsKiwgSlNTdHJpbmcqLCBJZGVudGlm
aWVyUmVwSGFzaD4gSWRlbnRpZmllclN0cmluZ01hcDsKICAgICAgICAgCi0gICAgICAgIFJlZ2lz
dGVySUQqIGVtaXRDYWxsKE9wY29kZUlELCBSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1
bmMsIENhbGxBcmd1bWVudHMmLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQs
IHVuc2lnbmVkIGVuZE9mZnNldCk7CisgICAgICAgIC8vIEhlbHBlciBmb3IgZW1pdENhbGwoKSBh
bmQgZW1pdENvbnN0cnVjdCgpLiBUaGlzIHdvcmtzIGJlY2F1c2UgdGhlIHNldCBvZgorICAgICAg
ICAvLyBleHBlY3RlZCBmdW5jdGlvbnMgaGF2ZSBpZGVudGljYWwgYmVoYXZpb3IgZm9yIGJvdGgg
Y2FsbCBhbmQgY29uc3RydWN0CisgICAgICAgIC8vIChpLmUuICJPYmplY3QoKSIgaXMgaWRlbnRp
Y2FsIHRvICJuZXcgT2JqZWN0KCkiKS4KKyAgICAgICAgRXhwZWN0ZWRGdW5jdGlvbiBlbWl0RXhw
ZWN0ZWRGdW5jdGlvblNuaXBwZXQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBF
eHBlY3RlZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRzJiwgTGFiZWwqIGRvbmUpOworICAgICAgICAK
KyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGwoT3Bjb2RlSUQsIFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogZnVuYywgRXhwZWN0ZWRGdW5jdGlvbiwgQ2FsbEFyZ3VtZW50cyYsIHVuc2ln
bmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKIAog
ICAgICAgICBSZWdpc3RlcklEKiBuZXdSZWdpc3RlcigpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lv
biAxMzEzODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29k
ZWdlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Niw5ICszNjYsMTQgQEAgUmVnaXN0ZXJJRCog
QXJndW1lbnRMaXN0Tm9kZTo6ZW1pdEJ5dGVjbwogCiBSZWdpc3RlcklEKiBOZXdFeHByTm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRz
dCkKIHsKKyAgICBFeHBlY3RlZEZ1bmN0aW9uIGV4cGVjdGVkRnVuY3Rpb247CisgICAgaWYgKG1f
ZXhwci0+aXNSZXNvbHZlTm9kZSgpKQorICAgICAgICBleHBlY3RlZEZ1bmN0aW9uID0gZ2VuZXJh
dG9yLmV4cGVjdGVkRnVuY3Rpb25Gb3JJZGVudGlmaWVyKHN0YXRpY19jYXN0PFJlc29sdmVOb2Rl
Kj4obV9leHByKS0+aWRlbnRpZmllcigpKTsKKyAgICBlbHNlCisgICAgICAgIGV4cGVjdGVkRnVu
Y3Rpb24gPSBOb0V4cGVjdGVkRnVuY3Rpb247CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMg
PSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByKTsKICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1
bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENvbnN0
cnVjdChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QpLCBmdW5jLmdldCgp
LCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7Cisg
ICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q29uc3RydWN0KGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uT3JJZ25vcmVkKGRzdCksIGZ1bmMuZ2V0KCksIGV4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1
bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKIH0KIAogaW5saW5l
IENhbGxBcmd1bWVudHM6OkNhbGxBcmd1bWVudHMoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgQXJndW1lbnRzTm9kZSogYXJndW1lbnRzTm9kZSkKQEAgLTQxNSwyMCArNDIwLDIzIEBAIFJl
Z2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6ZW1pdEIKICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIpOwogICAgIENhbGxBcmd1bWVu
dHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgZ2VuZXJhdG9yLmVtaXRM
b2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwotICAgIHJl
dHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9y
ZWQoZHN0LCBmdW5jLmdldCgpKSwgZnVuYy5nZXQoKSwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwg
c3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENh
bGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0LCBmdW5jLmdldCgpKSwg
ZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBz
dGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQog
eworICAgIEV4cGVjdGVkRnVuY3Rpb24gZXhwZWN0ZWRGdW5jdGlvbiA9IGdlbmVyYXRvci5leHBl
Y3RlZEZ1bmN0aW9uRm9ySWRlbnRpZmllcihtX2lkZW50KTsKICAgICBSZXNvbHZlUmVzdWx0IHJl
c29sdmVSZXN1bHQgPSBnZW5lcmF0b3IucmVzb2x2ZShtX2lkZW50KTsKIAogICAgIGlmIChSZWdp
c3RlcklEKiBsb2NhbCA9IHJlc29sdmVSZXN1bHQubG9jYWwoKSkgewogICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5lbWl0TW92ZShnZW5lcmF0b3IudGVtcERlc3Rp
bmF0aW9uKGRzdCksIGxvY2FsKTsKICAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRz
KGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGNhbGxBcmd1
bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICByZXR1cm4gZ2Vu
ZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwg
Y2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSksIGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMs
IGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAgICAgICAgLy8gVGhpcyBw
YXNzZXMgTm9FeHBlY3RlZEZ1bmN0aW9uIGJlY2F1c2Ugd2UgZXhwZWN0IHRoYXQgaWYgdGhlIGZ1
bmN0aW9uIGlzIGluIGEKKyAgICAgICAgLy8gbG9jYWwgdmFyaWFibGUsIHRoZW4gaXQncyBub3Qg
b25lIG9mIG91ciBidWlsdC1pbiBjb25zdHJ1Y3RvcnMuCisgICAgICAgIHJldHVybiBnZW5lcmF0
b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0LCBjYWxs
QXJndW1lbnRzLnRoaXNSZWdpc3RlcigpKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9u
LCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiAg
ICAgfQogCiAgICAgaWYgKHJlc29sdmVSZXN1bHQuaXNTdGF0aWMoKSkgewpAQCAtNDM2LDcgKzQ0
NCw3IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWkKICAgICAgICAg
Q2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAg
Z2VuZXJhdG9yLmVtaXRHZXRTdGF0aWNWYXIoZnVuYy5nZXQoKSwgcmVzb2x2ZVJlc3VsdCwgbV9p
ZGVudCk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRoaXNSZWdp
c3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2Fs
bChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGZ1bmMuZ2V0KCkpLCBm
dW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZz
ZXQoKSk7CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFs
RGVzdGluYXRpb25Pcklnbm9yZWQoZHN0LCBmdW5jLmdldCgpKSwgZnVuYy5nZXQoKSwgZXhwZWN0
ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zm
c2V0KCkpOwogICAgIH0KIAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpOwpAQCAtNDQ1LDcgKzQ1Myw4IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9u
Q2FsbFJlc29sdmVOb2RlOjplbWkKIAogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8o
aWRlbnRpZmllclN0YXJ0ICsgbV9pZGVudC5sZW5ndGgoKSwgbV9pZGVudC5sZW5ndGgoKSwgMCk7
CiAgICAgZ2VuZXJhdG9yLmVtaXRSZXNvbHZlV2l0aFRoaXMoY2FsbEFyZ3VtZW50cy50aGlzUmVn
aXN0ZXIoKSwgZnVuYy5nZXQoKSwgcmVzb2x2ZVJlc3VsdCwgbV9pZGVudCk7Ci0gICAgcmV0dXJu
IGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChk
c3QsIGZ1bmMuZ2V0KCkpLCBmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFy
dE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CisgICAgLy8gRklYTUU6IFJlY29uc2lkZXIgcGFzc2lu
ZyBleHBlY3RlZEZ1bmN0aW9uIGluc3RlYWQgb2YgTm9FeHBlY3RlZEZ1bmN0aW9uLgorICAgIHJl
dHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9y
ZWQoZHN0LCBmdW5jLmdldCgpKSwgZnVuYy5nZXQoKSwgZXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFy
Z3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogfQogCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25DYWxsQnJhY2tldE5vZGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDU4LDcgKzQ2Nyw3IEBAIFJlZ2lz
dGVySUQqIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWkKICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGdlbmVyYXRvci50ZW1wRGVzdGlu
YXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgcHJvcGVydHkpOwogICAgIENhbGxBcmd1bWVudHMgY2Fs
bEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNh
bGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGJhc2UuZ2V0KCkpOwotICAgIHJldHVybiBnZW5l
cmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0LCBm
dW5jdGlvbi5nZXQoKSksIGZ1bmN0aW9uLmdldCgpLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBz
dGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2Fs
bChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGZ1bmN0aW9uLmdldCgp
KSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2
b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25DYWxsRG90Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCkBAIC00NzEsNyArNDgwLDcgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25D
YWxsRG90Tm9kZTo6ZW1pdEJ5dAogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2
b3QoKSAtIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0LCBzdGFydE9mZnNldCgpIC0gbV9zdWJl
eHByZXNzaW9uRGl2b3RPZmZzZXQsIG1fc3ViZXhwcmVzc2lvbkVuZE9mZnNldCk7CiAgICAgZ2Vu
ZXJhdG9yLmVtaXRNZXRob2RDaGVjaygpOwogICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJZChmdW5j
dGlvbi5nZXQoKSwgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9pZGVudCk7Ci0gICAg
cmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdu
b3JlZChkc3QsIGZ1bmN0aW9uLmdldCgpKSwgZnVuY3Rpb24uZ2V0KCksIGNhbGxBcmd1bWVudHMs
IGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJh
dG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVu
Y3Rpb24uZ2V0KCkpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJn
dW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiB9CiAKIFJlZ2lz
dGVySUQqIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAtNDkxLDcgKzUwMCw3IEBAIFJl
Z2lzdGVySUQqIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWkKICAgICAgICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiByZWFsRnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9y
LnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpKTsKICAgICAgICAgICAgIENhbGxBcmd1
bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgICAgICBnZW5l
cmF0b3IuZW1pdE5vZGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgb2xkTGlzdC0+bV9l
eHByKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJ
Z25vcmVkLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIGNhbGxBcmd1bWVudHMsIGRpdm90KCks
IHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0
Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCks
IE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQo
KSwgZW5kT2Zmc2V0KCkpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQo
KSk7CiAKICAgICAgICAgICAgIG1fYXJncy0+bV9saXN0Tm9kZSA9IG9sZExpc3Q7CkBAIC00OTks
NyArNTA4LDcgQEAgUmVnaXN0ZXJJRCogQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaQogICAg
ICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlYWxGdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0
TW92ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCkpOwogICAgICAg
ICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAg
ICAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rlcigp
LCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChmaW5hbERl
c3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIGNhbGxBcmd1bWVu
dHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAgICAgICAgICAgIGdl
bmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCByZWFsRnVu
Y3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwg
c3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRK
dW1wKGVuZC5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC01MDcsNyArNTE2LDcgQEAgUmVn
aXN0ZXJJRCogQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaQogICAgIHsKICAgICAgICAgQ2Fs
bEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGJhc2UuZ2V0KCkp
OwotICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5n
ZXQoKSwgZnVuY3Rpb24uZ2V0KCksIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0
KCksIGVuZE9mZnNldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKGZpbmFsRGVzdGlu
YXRpb25Pcklnbm9yZWQuZ2V0KCksIGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24s
IGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKICAg
ICB9CiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChlbmQuZ2V0KCkpOwogICAgIHJldHVybiBmaW5h
bERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpOwpAQCAtNTQ0LDIwICs1NTMsMjAgQEAgUmVnaXN0
ZXJJRCogQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbQogICAgICAgICAgICAgICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gcmVhbEZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVy
YXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAg
ICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShjYWxsQXJndW1lbnRzLnRoaXNSZWdp
c3RlcigpLCBvbGRMaXN0LT5tX2V4cHIpOwotICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3Iu
ZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdl
dCgpLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7
CisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9u
T3JJZ25vcmVkLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwg
Y2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIG1fYXJncy0+bV9saXN0
Tm9kZSA9IG1fYXJncy0+bV9saXN0Tm9kZS0+bV9uZXh0OwogICAgICAgICAgICAgICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gcmVhbEZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVy
YXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAg
ICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShjYWxsQXJndW1lbnRzLnRoaXNSZWdp
c3RlcigpLCBvbGRMaXN0LT5tX2V4cHIpOwotICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3Iu
ZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdl
dCgpLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7
CisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9u
T3JJZ25vcmVkLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwg
Y2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBtX2FyZ3MtPm1fbGlzdE5vZGUgPSBvbGRM
aXN0OwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gcmVhbEZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVz
dGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgQ2FsbEFyZ3VtZW50
cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAgICAgICAgICBnZW5l
cmF0b3IuZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQo
KSk7Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKGZpbmFsRGVzdGluYXRpb25P
cklnbm9yZWQuZ2V0KCksIHJlYWxGdW5jdGlvbi5nZXQoKSwgY2FsbEFyZ3VtZW50cywgZGl2b3Qo
KSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIGdlbmVyYXRv
ci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCByZWFsRnVuY3Rpb24u
Z2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRP
ZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgQVNTRVJUKG1fYXJncy0+bV9saXN0Tm9kZSAmJiBtX2FyZ3MtPm1fbGlzdE5v
ZGUtPm1fbmV4dCk7CkBAIC01ODYsNyArNTk1LDcgQEAgUmVnaXN0ZXJJRCogQXBwbHlGdW5jdGlv
bkNhbGxEb3ROb2RlOjplbQogICAgIHsKICAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1l
bnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxB
cmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGJhc2UuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3Iu
ZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwgZnVuY3Rpb24uZ2V0KCks
IGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQuZ2V0KCks
IGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90
KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKICAgICB9CiAgICAgZ2VuZXJhdG9yLmVt
aXRMYWJlbChlbmQuZ2V0KCkpOwogICAgIHJldHVybiBmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVk
LmdldCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAJKHJldmlzaW9uIDEzMTM4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTY2LDYgKzE5NjYs
MTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfbmV3X2FycmF5KTsKICAgICAgICAgfQogICAgICAgICAgICAgCisg
ICAgICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZTogeworICAgICAgICAgICAgaW50IGxl
bmd0aE9wZXJhbmQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgICAgICAg
ICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoTmV3QXJy
YXlXaXRoU2l6ZSwgZ2V0KGxlbmd0aE9wZXJhbmQpKSk7CisgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9uZXdfYXJyYXlfd2l0aF9zaXplKTsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjogewogICAgICAgICAgICAgaW50IHN0YXJ0Q29u
c3RhbnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgICAgICAgICAgaW50
IG51bUNvbnN0YW50cyA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHJldmlzaW9uIDEz
MTM4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE2Miw2ICsxNjIsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNh
bkNvbXBpbGVPcGNvZGUoCiAgICAgY2FzZSBvcF9yZXNvbHZlX2dsb2JhbDoKICAgICBjYXNlIG9w
X25ld19vYmplY3Q6CiAgICAgY2FzZSBvcF9uZXdfYXJyYXk6CisgICAgY2FzZSBvcF9uZXdfYXJy
YXlfd2l0aF9zaXplOgogICAgIGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjoKICAgICBjYXNlIG9w
X3N0cmNhdDoKICAgICBjYXNlIG9wX3RvX3ByaW1pdGl2ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAJKHJldmlzaW9uIDEzMTM4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEyLDYgKzMxMiw3IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX25lcSkKICAgICAg
ICAgREVGSU5FX09QKG9wX25lcV9udWxsKQogICAgICAgICBERUZJTkVfT1Aob3BfbmV3X2FycmF5
KQorICAgICAgICBERUZJTkVfT1Aob3BfbmV3X2FycmF5X3dpdGhfc2l6ZSkKICAgICAgICAgREVG
SU5FX09QKG9wX25ld19hcnJheV9idWZmZXIpCiAgICAgICAgIERFRklORV9PUChvcF9uZXdfZnVu
YykKICAgICAgICAgREVGSU5FX09QKG9wX25ld19mdW5jX2V4cCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAkocmV2aXNpb24gMTMxMzg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNzE4LDYgKzcxOCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGVtaXRfb3BfbmVxKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9uZXFfbnVsbChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbmV3
X2FycmF5KEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9uZXdfYXJyYXlfd2l0
aF9zaXplKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9uZXdfYXJyYXlfYnVm
ZmVyKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9uZXdfZnVuYyhJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbmV3X2Z1bmNfZXhwKEluc3RydWN0aW9uKik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9u
IDEzMTM4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE2OTQsNiArMTY5NCwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bmV3X2FycmF5KEluc3RydWN0CiAgICAgc3R1YkNhbGwuY2FsbChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6
ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFN0dWJDYWxsIHN0
dWJDYWxsKHRoaXMsIGN0aV9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKTsKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQsIHJlZ1QyKTsKKyNlbHNlCisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisjZW5kaWYKKyAgICBzdHViQ2FsbC5jYWxsKGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworfQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
YXJyYXlfYnVmZmVyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgSklU
U3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX25ld19hcnJheV9idWZmZXIpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDEzMTM4OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzYwLDYgKzIzNjAsMjAgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNPYmplY3QqLCBvcF9u
ZXdfYQogICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShzdGFja0ZyYW1lLmNhbGxGcmFtZSwgcmVp
bnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4oJnN0YWNrRnJhbWUuY2FsbEZyYW1lLT5yZWdpc3RlcnMo
KVtzdGFja0ZyYW1lLmFyZ3NbMF0uaW50MzIoKV0pLCBzdGFja0ZyYW1lLmFyZ3NbMV0uaW50MzIo
KSk7CiB9CiAKK0RFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfbmV3X2FycmF5X3dp
dGhfc2l6ZSkKK3sKKyAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CisgICAg
CisgICAgSlNWYWx1ZSBsZW5ndGggPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOworICAg
IEpTQXJyYXkqIHJlc3VsdDsKKyAgICBpZiAobGVuZ3RoLmlzTnVtYmVyKCkpCisgICAgICAgIHJl
c3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIGxlbmd0aC50
b1VJbnQzMihzdGFja0ZyYW1lLmNhbGxGcmFtZSkpOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0
ID0gY29uc3RydWN0QXJyYXkoc3RhY2tGcmFtZS5jYWxsRnJhbWUsICZsZW5ndGgsIDEpOworICAg
IAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKIERFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0
Kiwgb3BfbmV3X2FycmF5X2J1ZmZlcikKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3Rh
Y2tGcmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCShyZXZpc2lv
biAxMzEzODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQxMyw2ICs0MTMsNyBAQCBleHRlcm4gIkMiIHsKICAgICBFbmNvZGVkSlNW
YWx1ZSBKSVRfU1RVQiBjdGlfb3BfdXJzaGlmdChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9J
TlRFUk5BTDsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfdG9fb2JqZWN0KFNUVUJf
QVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIEpTT2JqZWN0KiBKSVRfU1RVQiBj
dGlfb3BfbmV3X2FycmF5KFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOworICAg
IEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShTVFVCX0FSR1Nf
REVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICBKU09iamVjdCogSklUX1NUVUIgY3RpX29w
X25ld19hcnJheV9idWZmZXIoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAg
ICAgSlNPYmplY3QqIEpJVF9TVFVCIGN0aV9vcF9uZXdfZnVuYyhTVFVCX0FSR1NfREVDTEFSQVRJ
T04pIFdURl9JTlRFUk5BTDsKICAgICBKU09iamVjdCogSklUX1NUVUIgY3RpX29wX25ld19mdW5j
X2V4cChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTMx
Mzg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTA0LDYgKzUwNCwxOCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfbmV3X2FycmF5CiAgICAgTExJTlRfUkVUVVJOKGNvbnN0cnVjdEFycmF5KGV4ZWMs
IGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oJkxMSU5UX09QKDIpKSwgcGNbM10udS5vcGVyYW5kKSk7
CiB9CiAKK0xMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfYXJyYXlfd2l0aF9zaXpl
KQoreworICAgIExMSU5UX0JFR0lOKCk7CisgICAgSlNWYWx1ZSBsZW5ndGggPSBMTElOVF9PUF9D
KDIpLmpzVmFsdWUoKTsKKyAgICBKU0FycmF5KiByZXN1bHQ7CisgICAgaWYgKGxlbmd0aC5pc051
bWJlcigpKQorICAgICAgICByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIGxlbmd0
aC50b1VJbnQzMihleGVjKSk7CisgICAgZWxzZQorICAgICAgICByZXN1bHQgPSBjb25zdHJ1Y3RB
cnJheShleGVjLCAmbGVuZ3RoLCAxKTsKKyAgICBMTElOVF9SRVRVUk4ocmVzdWx0KTsKK30KKwog
TExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19hcnJheV9idWZmZXIpCiB7CiAgICAg
TExJTlRfQkVHSU4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5oCShyZXZpc2lvbiAxMzEzODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDYgKzEyMSw3IEBA
IExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY3IKIExMSU5UX1NMT1dfUEFU
SF9ISURERU5fREVDTChzbG93X3BhdGhfY29udmVydF90aGlzKTsKIExMSU5UX1NMT1dfUEFUSF9I
SURERU5fREVDTChzbG93X3BhdGhfbmV3X29iamVjdCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVO
X0RFQ0woc2xvd19wYXRoX25ld19hcnJheSk7CitMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0wo
c2xvd19wYXRoX25ld19hcnJheV93aXRoX3NpemUpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9E
RUNMKHNsb3dfcGF0aF9uZXdfYXJyYXlfYnVmZmVyKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5f
REVDTChzbG93X3BhdGhfbmV3X3JlZ2V4cCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0wo
c2xvd19wYXRoX25vdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxMzEzODgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29w
eSkKQEAgLTQyOCw2ICs0MjgsMTIgQEAgX2xsaW50X29wX25ld19hcnJheToKICAgICBkaXNwYXRj
aCg0KQogCiAKK19sbGludF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplOgorICAgIHRyYWNlRXhlY3V0
aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9uZXdfYXJyYXlfd2l0aF9z
aXplKQorICAgIGRpc3BhdGNoKDMpCisKKwogX2xsaW50X29wX25ld19hcnJheV9idWZmZXI6CiAg
ICAgdHJhY2VFeGVjdXRpb24oKQogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX25l
d19hcnJheV9idWZmZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25JZGVudGlmaWVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vbklkZW50aWZpZXJzLmgJKHJldmlzaW9uIDEzMTM4OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDYgKzI5LDcgQEAKICNkZWZpbmUgSlNDX0NPTU1PTl9JREVOVElGSUVSU19FQUNIX1BST1BF
UlRZX05BTUUobWFjcm8pIFwKICAgICBtYWNybyhhcHBseSkgXAogICAgIG1hY3JvKGFyZ3VtZW50
cykgXAorICAgIG1hY3JvKEFycmF5KSBcCiAgICAgbWFjcm8oYmluZCkgXAogICAgIG1hY3JvKGNh
bGwpIFwKICAgICBtYWNybyhjYWxsZWUpIFwKQEAgLTU0LDYgKzU1LDcgQEAKICAgICBtYWNybyht
dWx0aWxpbmUpIFwKICAgICBtYWNybyhuYW1lKSBcCiAgICAgbWFjcm8obm93KSBcCisgICAgbWFj
cm8oT2JqZWN0KSBcCiAgICAgbWFjcm8ocGFyc2UpIFwKICAgICBtYWNybyhwcm9wZXJ0eUlzRW51
bWVyYWJsZSkgXAogICAgIG1hY3JvKHByb3RvdHlwZSkgXApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTMxMzg4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yODksOSArMjg5LDkgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVz
ZXQoSlNWYWx1ZSBwcm90bwogICAgIG1fcmVnRXhwUHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25z
dHJ1Y3RvciwgbV9yZWdFeHBDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOwogICAgIG1fZXJy
b3JQcm90b3R5cGUtPnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEo
KSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBtX2Vycm9yQ29uc3RydWN0b3Iu
Z2V0KCksIERvbnRFbnVtKTsKIAotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiT2JqZWN0IiksIG9iamVjdENvbnN0cnVj
dG9yLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xv
YmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuT2JqZWN0LCBvYmplY3RDb25zdHJ1Y3Rv
ciwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiRnVuY3Rpb24iKSwgZnVuY3Rpb25Db25zdHJ1Y3Rv
ciwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiQXJyYXkiKSwgYXJyYXlDb25zdHJ1Y3RvciwgRG9u
dEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEo
KSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLkFycmF5LCBhcnJheUNvbnN0cnVjdG9yLCBEb250RW51
bSk7CiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJ
ZGVudGlmaWVyKGV4ZWMsICJCb29sZWFuIiksIGJvb2xlYW5Db25zdHJ1Y3RvciwgRG9udEVudW0p
OwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRl
bnRpZmllcihleGVjLCAiU3RyaW5nIiksIHN0cmluZ0NvbnN0cnVjdG9yLCBEb250RW51bSk7CiAg
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlm
aWVyKGV4ZWMsICJOdW1iZXIiKSwgbnVtYmVyQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKQEAgLTMy
MCw2ICszMjAsOCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiAg
ICAgCiAgICAgbV9zcGVjaWFsUG9pbnRlcnNbU3BlY2lhbDo6Q2FsbEZ1bmN0aW9uXSA9IG1fY2Fs
bEZ1bmN0aW9uLmdldCgpOwogICAgIG1fc3BlY2lhbFBvaW50ZXJzW1NwZWNpYWw6OkFwcGx5RnVu
Y3Rpb25dID0gbV9hcHBseUZ1bmN0aW9uLmdldCgpOworICAgIG1fc3BlY2lhbFBvaW50ZXJzW1Nw
ZWNpYWw6Ok9iamVjdENvbnN0cnVjdG9yXSA9IG9iamVjdENvbnN0cnVjdG9yOworICAgIG1fc3Bl
Y2lhbFBvaW50ZXJzW1NwZWNpYWw6OkFycmF5Q29uc3RydWN0b3JdID0gYXJyYXlDb25zdHJ1Y3Rv
cjsKIAogICAgIGlmIChtX2V4cGVyaW1lbnRzRW5hYmxlZCkgewogICAgICAgICBOYW1lUHJvdG90
eXBlKiBwcml2YXRlTmFtZVByb3RvdHlwZSA9IE5hbWVQcm90b3R5cGU6OmNyZWF0ZShleGVjLCBO
YW1lUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBt
X29iamVjdFByb3RvdHlwZS5nZXQoKSkpOwo=
</data>
<flag name="review"
          id="182312"
          type_id="1"
          status="-"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169136</attachid>
            <date>2012-10-17 02:33:30 -0700</date>
            <delta_ts>2012-10-17 10:17:08 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>jneq_3.patch</filename>
            <type>text/plain</type>
            <size>38428</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMxNTY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBA
CisyMDEyLTEwLTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QXJyYXkgYW5kIG9iamVjdCBhbGxvY2F0aW9ucyB2aWEgJ25ldyBPYmplY3QnIG9yICduZXcgQXJy
YXknIHNob3VsZCBiZSBpbmxpbmVkIGluIGJ5dGVjb2RlIHRvIGFsbG93IGFsbG9jYXRpb24gc2l0
ZSBwcm9maWxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk5NTU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyB1c2VzIHRoZSBvbGQgam5lcV9wdHIgdHJpY2sgdG8gYWxsb3cgZm9yIHRoZSBieXRl
Y29kZSB0byAic2VlIiB0aGF0IHRoZQorICAgICAgICBvcGVyYXRpb24gaW4gcXVlc3Rpb24gaXMg
d2hhdCB3ZSBhbG1vc3QgY2VydGFpbmx5IGtub3cgaXQgdG8gYmUuCisKKyAgICAgICAgKiBieXRl
Y29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXApOgorICAg
ICAgICAqIGJ5dGVjb2RlL09wY29kZS5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
cGFkT3Bjb2RlTmFtZSk6CisgICAgICAgICogYnl0ZWNvZGUvU3BlY2lhbFBvaW50ZXIuaDoKKyAg
ICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdENhbGxFdmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmV4cGVjdGVkRnVuY3Rpb25Gb3JJZGVudGlmaWVyKToKKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXhwZWN0ZWRGdW5jdGlvblNuaXBwZXQpOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0cnVjdCk6CisgICAgICAg
ICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChCeXRlY29kZUdl
bmVyYXRvcik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAg
ICAgIChKU0M6Ok5ld0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5j
dGlvbkNhbGxWYWx1ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9u
Q2FsbFJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNh
bGxCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxs
RG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q2FsbEZ1bmN0aW9uQ2FsbERv
dE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkFwcGx5RnVuY3Rpb25DYWxsRG90
Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAg
ICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuQ29tcGls
ZU9wY29kZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSklU
KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogaml0
L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuaDoKKyAgICAgICAgKiBsbGludC9M
TEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhf
REVDTCk6CisgICAgICAgIChMTEludCk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMu
aDoKKyAgICAgICAgKExMSW50KToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbToKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
SlNDOjpjb25zdHJ1Y3RBcnJheVdpdGhTaXplUXVpcmspOgorICAgICAgICAoSlNDKToKKyAgICAg
ICAgKiBydW50aW1lL0FycmF5Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAg
ICogcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAg
ICAgICAoSlNDKToKKwogMjAxMi0xMC0xNiAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzE1MTYgYW5kIHIx
MzE1NTAuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkocmV2aXNpb24gMTMxMzg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwNCw2ICs3MDQsMTMgQEAgdm9pZCBD
b2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjbwogICAgICAgICAgICAgZHVtcEJ5dGVj
b2RlQ29tbWVudEFuZE5ld0xpbmUobG9jYXRpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOiB7CisgICAgICAgICAg
ICBpbnQgZHN0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgbGVuZ3RoID0g
KCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSBuZXdfYXJyYXlf
d2l0aF9zaXplXHQgJXMsICVzIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCBkc3QpLmRh
dGEoKSwgcmVnaXN0ZXJOYW1lKGV4ZWMsIGxlbmd0aCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGR1
bXBCeXRlY29kZUNvbW1lbnRBbmROZXdMaW5lKGxvY2F0aW9uKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjogewogICAgICAg
ICAgICAgaW50IGRzdCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGFyZ3Yg
PSAoKytpdCktPnUub3BlcmFuZDsKQEAgLTEyNDUsOSArMTI1Miw5IEBAIHZvaWQgQ29kZUJsb2Nr
OjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY28KICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2pu
ZXFfcHRyOiB7CiAgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIHZvaWQqIHBvaW50ZXIgPSAoKytpdCktPnUucG9pbnRlcjsKKyAgICAgICAgICAgIFNw
ZWNpYWw6OlBvaW50ZXIgcG9pbnRlciA9ICgrK2l0KS0+dS5zcGVjaWFsUG9pbnRlcjsKICAgICAg
ICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGRhdGFM
b2coIlslNGRdIGpuZXFfcHRyXHRcdCAlcywgJXAsICVkKC0+JWQpIiwgbG9jYXRpb24sIHJlZ2lz
dGVyTmFtZShleGVjLCByMCkuZGF0YSgpLCBwb2ludGVyLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zm
c2V0KTsKKyAgICAgICAgICAgIGRhdGFMb2coIlslNGRdIGpuZXFfcHRyXHRcdCAlcywgJWQgKCVw
KSwgJWQoLT4lZCkiLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCksIHBv
aW50ZXIsIG1fZ2xvYmFsT2JqZWN0LT5hY3R1YWxQb2ludGVyRm9yKHBvaW50ZXIpLCBvZmZzZXQs
IGxvY2F0aW9uICsgb2Zmc2V0KTsKICAgICAgICAgICAgIGR1bXBCeXRlY29kZUNvbW1lbnRBbmRO
ZXdMaW5lKGxvY2F0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCShyZXZpc2lvbiAxMzEzODgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDYgKzQ5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFwKICAgICAgICAgbWFj
cm8ob3BfbmV3X29iamVjdCwgMikgXAogICAgICAgICBtYWNybyhvcF9uZXdfYXJyYXksIDQpIFwK
KyAgICAgICAgbWFjcm8ob3BfbmV3X2FycmF5X3dpdGhfc2l6ZSwgMykgXAogICAgICAgICBtYWNy
byhvcF9uZXdfYXJyYXlfYnVmZmVyLCA0KSBcCiAgICAgICAgIG1hY3JvKG9wX25ld19yZWdleHAs
IDMpIFwKICAgICAgICAgbWFjcm8ob3BfbW92LCAzKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3BlY2lhbFBvaW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY2lhbFBvaW50ZXIuaAkocmV2aXNpb24gMTMxMzg4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWNpYWxQb2ludGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDYgKzM1LDggQEAgbmFtZXNwYWNlIFNwZWNpYWwgewogZW51bSBQb2lu
dGVyIHsKICAgICBDYWxsRnVuY3Rpb24sCiAgICAgQXBwbHlGdW5jdGlvbiwKKyAgICBPYmplY3RD
b25zdHJ1Y3RvciwKKyAgICBBcnJheUNvbnN0cnVjdG9yLAogICAgIFRhYmxlU2l6ZSAvLyBOb3Qg
YSByZWFsIHNwZWNpYWwgcG9pbnRlci4gVXNlIHRoaXMgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIg
b2YgcG9pbnRlcnMuCiB9OwogfSAvLyBuYW1lc3BhY2UgU3BlY2lhbApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAJKHJldmlzaW9uIDEzMTM4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEzLDkgKzIw
MTMsOSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0Z1CiAgICAgcmV0
dXJuIHIwOwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoUmVn
aXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBDYWxsQXJndW1lbnRzJiBjYWxsQXJndW1l
bnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9m
ZnNldCkKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChSZWdpc3RlcklE
KiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIEV4cGVjdGVkRnVuY3Rpb24gZXhwZWN0ZWRGdW5jdGlv
biwgQ2FsbEFyZ3VtZW50cyYgY2FsbEFyZ3VtZW50cywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCiB7Ci0gICAgcmV0dXJuIGVtaXRDYWxs
KG9wX2NhbGwsIGRzdCwgZnVuYywgY2FsbEFyZ3VtZW50cywgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBl
bmRPZmZzZXQpOworICAgIHJldHVybiBlbWl0Q2FsbChvcF9jYWxsLCBkc3QsIGZ1bmMsIGV4cGVj
dGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0
KTsKIH0KIAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6Y3JlYXRlQXJndW1lbnRzSWZOZWNlc3Nh
cnkoKQpAQCAtMjA0OCwxMCArMjA0OCw4NSBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVh
dGVBY3RpdmF0aW9uCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbEV2
YWwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBDYWxsQXJndW1lbnRzJiBjYWxs
QXJndW1lbnRzLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVk
IGVuZE9mZnNldCkKIHsKLSAgICByZXR1cm4gZW1pdENhbGwob3BfY2FsbF9ldmFsLCBkc3QsIGZ1
bmMsIGNhbGxBcmd1bWVudHMsIGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKyAgICBy
ZXR1cm4gZW1pdENhbGwob3BfY2FsbF9ldmFsLCBkc3QsIGZ1bmMsIE5vRXhwZWN0ZWRGdW5jdGlv
biwgY2FsbEFyZ3VtZW50cywgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwogfQogCi1S
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoT3Bjb2RlSUQgb3Bjb2RlSUQs
IFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgQ2FsbEFyZ3VtZW50cyYgY2FsbEFy
Z3VtZW50cywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBl
bmRPZmZzZXQpCitFeHBlY3RlZEZ1bmN0aW9uIEJ5dGVjb2RlR2VuZXJhdG9yOjpleHBlY3RlZEZ1
bmN0aW9uRm9ySWRlbnRpZmllcihjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQoreworICAg
IGlmIChpZGVudGlmaWVyID09IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+T2JqZWN0KQor
ICAgICAgICByZXR1cm4gRXhwZWN0T2JqZWN0Q29uc3RydWN0b3I7CisgICAgaWYgKGlkZW50aWZp
ZXIgPT0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5BcnJheSkKKyAgICAgICAgcmV0dXJu
IEV4cGVjdEFycmF5Q29uc3RydWN0b3I7CisgICAgcmV0dXJuIE5vRXhwZWN0ZWRGdW5jdGlvbjsK
K30KKworRXhwZWN0ZWRGdW5jdGlvbiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEV4cGVjdGVkRnVu
Y3Rpb25TbmlwcGV0KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgRXhwZWN0ZWRG
dW5jdGlvbiBleHBlY3RlZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRzJiBjYWxsQXJndW1lbnRzLCBM
YWJlbCogZG9uZSkKK3sKKyAgICBSZWZQdHI8TGFiZWw+IHJlYWxDYWxsID0gbmV3TGFiZWwoKTsK
KyAgICBzd2l0Y2ggKGV4cGVjdGVkRnVuY3Rpb24pIHsKKyAgICBjYXNlIEV4cGVjdE9iamVjdENv
bnN0cnVjdG9yOiB7CisgICAgICAgIC8vIElmIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGlzIG5v
bi16ZXJvLCB0aGVuIHdlIGNhbid0IGRvIGFueXRoaW5nIGludGVyZXN0aW5nLgorICAgICAgICBp
ZiAoY2FsbEFyZ3VtZW50cy5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpID49IDIpCisgICAg
ICAgICAgICByZXR1cm4gTm9FeHBlY3RlZEZ1bmN0aW9uOworICAgICAgICAKKyAgICAgICAgc2l6
ZV90IGJlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAgICAgICBlbWl0T3Bjb2RlKG9w
X2puZXFfcHRyKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZ1bmMtPmluZGV4KCkp
OworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoU3BlY2lhbDo6T2JqZWN0Q29uc3RydWN0
b3IpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocmVhbENhbGwtPmJpbmQoYmVnaW4s
IGluc3RydWN0aW9ucygpLnNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgaWYgKGRzdCAhPSBp
Z25vcmVkUmVzdWx0KCkpIHsKKyAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfbmV3X29iamVjdCk7
CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgRXhwZWN0QXJy
YXlDb25zdHJ1Y3RvcjogeworICAgICAgICAvLyBJZiB5b3UncmUgZG9pbmcgYW55dGhpbmcgb3Ro
ZXIgdGhhbiAibmV3IEFycmF5KCkiIG9yICJuZXcgQXJyYXkoZm9vKSIgdGhlbiB3ZQorICAgICAg
ICAvLyBkb24ndCBkbyBpbmxpbmUgaXQsIGZvciBub3cuIFRoZSBvbmx5IHJlYXNvbiBpcyB0aGF0
IGNhbGwgYXJndW1lbnRzIGFyZSBpbgorICAgICAgICAvLyB0aGUgb3Bwb3NpdGUgb3JkZXIgb2Yg
d2hhdCBvcF9uZXdfYXJyYXkgZXhwZWN0cywgc28gd2UnZCBlaXRoZXIgbmVlZCB0byBjaGFuZ2UK
KyAgICAgICAgLy8gaG93IG9wX25ld19hcnJheSB3b3JrcyBvciB3ZSdkIG5lZWQgYW4gb3BfbmV3
X2FycmF5X3JldmVyc2UuIE5laXRoZXIgb2YgdGhlc2UKKyAgICAgICAgLy8gdGhpbmdzIHNvdW5k
cyBsaWtlIGl0J3Mgd29ydGggaXQuCisgICAgICAgIGlmIChjYWxsQXJndW1lbnRzLmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKCkgPiAyKQorICAgICAgICAgICAgcmV0dXJuIE5vRXhwZWN0ZWRG
dW5jdGlvbjsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBiZWdpbiA9IGluc3RydWN0aW9ucygp
LnNpemUoKTsKKyAgICAgICAgZW1pdE9wY29kZShvcF9qbmVxX3B0cik7CisgICAgICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChmdW5jLT5pbmRleCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKFNwZWNpYWw6OkFycmF5Q29uc3RydWN0b3IpOworICAgICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQocmVhbENhbGwtPmJpbmQoYmVnaW4sIGluc3RydWN0aW9ucygpLnNpemUoKSkpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGRzdCAhPSBpZ25vcmVkUmVzdWx0KCkpIHsKKyAgICAgICAg
ICAgIGlmIChjYWxsQXJndW1lbnRzLmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPT0gMikg
eworICAgICAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfbmV3X2FycmF5X3dpdGhfc2l6ZSk7Cisg
ICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CisgICAg
ICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNhbGxBcmd1bWVudHMuYXJndW1lbnRS
ZWdpc3RlcigwKS0+aW5kZXgoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIEFTU0VSVChjYWxsQXJndW1lbnRzLmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPT0g
MSk7CisgICAgICAgICAgICAgICAgZW1pdE9wY29kZShvcF9uZXdfYXJyYXkpOworICAgICAgICAg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOworICAgICAgICAgICAg
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlQoZXhwZWN0ZWRG
dW5jdGlvbiA9PSBOb0V4cGVjdGVkRnVuY3Rpb24pOworICAgICAgICByZXR1cm4gTm9FeHBlY3Rl
ZEZ1bmN0aW9uOworICAgIH0KKyAgICAKKyAgICBzaXplX3QgYmVnaW4gPSBpbnN0cnVjdGlvbnMo
KS5zaXplKCk7CisgICAgZW1pdE9wY29kZShvcF9qbXApOworICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChkb25lLT5iaW5kKGJlZ2luLCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKKyAgICBlbWl0
TGFiZWwocmVhbENhbGwuZ2V0KCkpOworICAgIAorICAgIHJldHVybiBleHBlY3RlZEZ1bmN0aW9u
OworfQorCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoT3Bjb2RlSUQg
b3Bjb2RlSUQsIFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgRXhwZWN0ZWRGdW5j
dGlvbiBleHBlY3RlZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRzJiBjYWxsQXJndW1lbnRzLCB1bnNp
Z25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKIHsK
ICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF9jYWxsX2V2
YWwpOwogICAgIEFTU0VSVChmdW5jLT5yZWZDb3VudCgpKTsKQEAgLTIwNzYsNiArMjE1MSw5IEBA
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbCgKIAogICAgIGVtaXRFeHBy
ZXNzaW9uSW5mbyhkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CiAKKyAgICBSZWZQdHI8
TGFiZWw+IGRvbmUgPSBuZXdMYWJlbCgpOworICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBlbWl0RXhw
ZWN0ZWRGdW5jdGlvblNuaXBwZXQoZHN0LCBmdW5jLCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJn
dW1lbnRzLCBkb25lLmdldCgpKTsKKyAgICAKICAgICAvLyBFbWl0IGNhbGwuCiAgICAgQXJyYXlQ
cm9maWxlKiBhcnJheVByb2ZpbGUgPSBuZXdBcnJheVByb2ZpbGUoKTsKICAgICBlbWl0T3Bjb2Rl
KG9wY29kZUlEKTsKQEAgLTIwOTMsNiArMjE3MSw5IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0Q2FsbCgKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5k
ZXgoKSk7IC8vIGRzdAogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CiAg
ICAgfQorICAgIAorICAgIGlmIChleHBlY3RlZEZ1bmN0aW9uICE9IE5vRXhwZWN0ZWRGdW5jdGlv
bikKKyAgICAgICAgZW1pdExhYmVsKGRvbmUuZ2V0KCkpOwogCiAgICAgaWYgKG1fc2hvdWxkRW1p
dFByb2ZpbGVIb29rcykgewogICAgICAgICBlbWl0T3Bjb2RlKG9wX3Byb2ZpbGVfZGlkX2NhbGwp
OwpAQCAtMjE2Miw3ICsyMjQzLDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRVbmFyeQogICAgIHJldHVybiBzcmM7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0Q29uc3RydWN0KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgQ2Fs
bEFyZ3VtZW50cyYgY2FsbEFyZ3VtZW50cywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdENvbnN0cnVjdChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIEV4cGVj
dGVkRnVuY3Rpb24gZXhwZWN0ZWRGdW5jdGlvbiwgQ2FsbEFyZ3VtZW50cyYgY2FsbEFyZ3VtZW50
cywgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZz
ZXQpCiB7CiAgICAgQVNTRVJUKGZ1bmMtPnJlZkNvdW50KCkpOwogCkBAIC0yMTg3LDYgKzIyNjgs
OSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0CiAgICAgICAgIGNh
bGxGcmFtZS5hcHBlbmQobmV3VGVtcG9yYXJ5KCkpOwogCiAgICAgZW1pdEV4cHJlc3Npb25JbmZv
KGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKyAgICAKKyAgICBSZWZQdHI8TGFiZWw+
IGRvbmUgPSBuZXdMYWJlbCgpOworICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBlbWl0RXhwZWN0ZWRG
dW5jdGlvblNuaXBwZXQoZHN0LCBmdW5jLCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRz
LCBkb25lLmdldCgpKTsKIAogICAgIGVtaXRPcGNvZGUob3BfY29uc3RydWN0KTsKICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoZnVuYy0+aW5kZXgoKSk7IC8vIGZ1bmMKQEAgLTIyMDQsNiArMjI4
OCw5IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29uc3QKICAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOwogICAgIH0KIAorICAgIGlmIChleHBlY3Rl
ZEZ1bmN0aW9uICE9IE5vRXhwZWN0ZWRGdW5jdGlvbikKKyAgICAgICAgZW1pdExhYmVsKGRvbmUu
Z2V0KCkpOworCiAgICAgaWYgKG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcykgewogICAgICAgICBl
bWl0T3Bjb2RlKG9wX3Byb2ZpbGVfZGlkX2NhbGwpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoY2FsbEFyZ3VtZW50cy5wcm9maWxlSG9va1JlZ2lzdGVyKCktPmluZGV4KCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTMxMzg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2
ICs1MSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBMYWJlbDsKICAgICBjbGFzcyBK
U1Njb3BlOwogCisgICAgZW51bSBFeHBlY3RlZEZ1bmN0aW9uIHsKKyAgICAgICAgTm9FeHBlY3Rl
ZEZ1bmN0aW9uLAorICAgICAgICBFeHBlY3RPYmplY3RDb25zdHJ1Y3RvciwKKyAgICAgICAgRXhw
ZWN0QXJyYXlDb25zdHJ1Y3RvcgorICAgIH07CisKICAgICBjbGFzcyBDYWxsQXJndW1lbnRzIHsK
ICAgICBwdWJsaWM6CiAgICAgICAgIENhbGxBcmd1bWVudHMoQnl0ZWNvZGVHZW5lcmF0b3ImIGdl
bmVyYXRvciwgQXJndW1lbnRzTm9kZSogYXJndW1lbnRzTm9kZSk7CkBAIC00ODMsOCArNDg5LDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXREZWxldGVCeVZhbChS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5KTsK
ICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFB1dEJ5SW5kZXgoUmVnaXN0ZXJJRCogYmFzZSwgdW5z
aWduZWQgaW5kZXgsIFJlZ2lzdGVySUQqIHZhbHVlKTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2V0
dGVyU2V0dGVyKFJlZ2lzdGVySUQqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5LCBS
ZWdpc3RlcklEKiBnZXR0ZXIsIFJlZ2lzdGVySUQqIHNldHRlcik7Ci0KLSAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdENhbGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBDYWxsQXJn
dW1lbnRzJiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBl
bmRPZmZzZXQpOworICAgICAgICAKKyAgICAgICAgRXhwZWN0ZWRGdW5jdGlvbiBleHBlY3RlZEZ1
bmN0aW9uRm9ySWRlbnRpZmllcihjb25zdCBJZGVudGlmaWVyJik7CisgICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXRDYWxsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgRXhwZWN0ZWRG
dW5jdGlvbiwgQ2FsbEFyZ3VtZW50cyYsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9m
ZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGxF
dmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgQ2FsbEFyZ3VtZW50cyYsIHVu
c2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsK
ICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGxWYXJhcmdzKFJlZ2lzdGVySUQqIGRzdCwgUmVn
aXN0ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVyLCBSZWdpc3RlcklEKiBhcmd1
bWVudHMsIFJlZ2lzdGVySUQqIGZpcnN0RnJlZVJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9maWxl
SG9va1JlZ2lzdGVyLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2ln
bmVkIGVuZE9mZnNldCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRMb2FkVmFyYXJncyhSZWdp
c3RlcklEKiBhcmdDb3VudERzdCwgUmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVyLCBSZWdpc3RlcklE
KiBhcmdzKTsKQEAgLTQ5Miw3ICs0OTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVn
aXN0ZXJJRCogZW1pdFJldHVybihSZWdpc3RlcklEKiBzcmMpOwogICAgICAgICBSZWdpc3RlcklE
KiBlbWl0RW5kKFJlZ2lzdGVySUQqIHNyYykgeyByZXR1cm4gZW1pdFVuYXJ5Tm9Ec3RPcChvcF9l
bmQsIHNyYyk7IH0KIAotICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q29uc3RydWN0KFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgQ2FsbEFyZ3VtZW50cyYsIHVuc2lnbmVkIGRpdm90
LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKKyAgICAgICAgUmVn
aXN0ZXJJRCogZW1pdENvbnN0cnVjdChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMs
IEV4cGVjdGVkRnVuY3Rpb24sIENhbGxBcmd1bWVudHMmLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CiAgICAgICAgIFJlZ2lzdGVySUQq
IGVtaXRTdHJjYXQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMsIGludCBjb3VudCk7
CiAgICAgICAgIHZvaWQgZW1pdFRvUHJpbWl0aXZlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJ
RCogc3JjKTsKIApAQCAtNTkwLDcgKzU5NywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dHlwZWRlZiBIYXNoTWFwPGRvdWJsZSwgSlNWYWx1ZT4gTnVtYmVyTWFwOwogICAgICAgICB0eXBl
ZGVmIEhhc2hNYXA8U3RyaW5nSW1wbCosIEpTU3RyaW5nKiwgSWRlbnRpZmllclJlcEhhc2g+IElk
ZW50aWZpZXJTdHJpbmdNYXA7CiAgICAgICAgIAotICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q2Fs
bChPcGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBDYWxsQXJndW1l
bnRzJiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRP
ZmZzZXQpOworICAgICAgICAvLyBIZWxwZXIgZm9yIGVtaXRDYWxsKCkgYW5kIGVtaXRDb25zdHJ1
Y3QoKS4gVGhpcyB3b3JrcyBiZWNhdXNlIHRoZSBzZXQgb2YKKyAgICAgICAgLy8gZXhwZWN0ZWQg
ZnVuY3Rpb25zIGhhdmUgaWRlbnRpY2FsIGJlaGF2aW9yIGZvciBib3RoIGNhbGwgYW5kIGNvbnN0
cnVjdAorICAgICAgICAvLyAoaS5lLiAiT2JqZWN0KCkiIGlzIGlkZW50aWNhbCB0byAibmV3IE9i
amVjdCgpIikuCisgICAgICAgIEV4cGVjdGVkRnVuY3Rpb24gZW1pdEV4cGVjdGVkRnVuY3Rpb25T
bmlwcGV0KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgRXhwZWN0ZWRGdW5jdGlv
biwgQ2FsbEFyZ3VtZW50cyYsIExhYmVsKiBkb25lKTsKKyAgICAgICAgCisgICAgICAgIFJlZ2lz
dGVySUQqIGVtaXRDYWxsKE9wY29kZUlELCBSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1
bmMsIEV4cGVjdGVkRnVuY3Rpb24sIENhbGxBcmd1bWVudHMmLCB1bnNpZ25lZCBkaXZvdCwgdW5z
aWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CiAKICAgICAgICAgUmVnaXN0
ZXJJRCogbmV3UmVnaXN0ZXIoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMTMxMzg4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjYsOSArMzY2LDE0IEBAIFJlZ2lzdGVySUQqIEFyZ3VtZW50TGlzdE5v
ZGU6OmVtaXRCeXRlY28KIAogUmVnaXN0ZXJJRCogTmV3RXhwck5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CisgICAgRXhw
ZWN0ZWRGdW5jdGlvbiBleHBlY3RlZEZ1bmN0aW9uOworICAgIGlmIChtX2V4cHItPmlzUmVzb2x2
ZU5vZGUoKSkKKyAgICAgICAgZXhwZWN0ZWRGdW5jdGlvbiA9IGdlbmVyYXRvci5leHBlY3RlZEZ1
bmN0aW9uRm9ySWRlbnRpZmllcihzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fZXhwciktPmlk
ZW50aWZpZXIoKSk7CisgICAgZWxzZQorICAgICAgICBleHBlY3RlZEZ1bmN0aW9uID0gTm9FeHBl
Y3RlZEZ1bmN0aW9uOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLmVt
aXROb2RlKG1fZXhwcik7CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRv
ciwgbV9hcmdzKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDb25zdHJ1Y3QoZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0KSwgZnVuYy5nZXQoKSwgY2FsbEFyZ3VtZW50
cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOworICAgIHJldHVybiBnZW5l
cmF0b3IuZW1pdENvbnN0cnVjdChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChk
c3QpLCBmdW5jLmdldCgpLCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgp
LCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiB9CiAKIGlubGluZSBDYWxsQXJndW1lbnRz
OjpDYWxsQXJndW1lbnRzKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIEFyZ3VtZW50c05v
ZGUqIGFyZ3VtZW50c05vZGUpCkBAIC00MTUsMjAgKzQyMCwyMyBAQCBSZWdpc3RlcklEKiBGdW5j
dGlvbkNhbGxWYWx1ZU5vZGU6OmVtaXRCCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBn
ZW5lcmF0b3IuZW1pdE5vZGUobV9leHByKTsKICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVu
dHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1l
bnRzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9y
LmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuYy5n
ZXQoKSksIGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCks
IGVuZE9mZnNldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuYy5nZXQoKSksIGZ1bmMuZ2V0KCksIE5v
RXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwg
ZW5kT2Zmc2V0KCkpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVu
Y3Rpb25DYWxsUmVzb2x2ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
CiBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKKyAgICBFeHBlY3Rl
ZEZ1bmN0aW9uIGV4cGVjdGVkRnVuY3Rpb24gPSBnZW5lcmF0b3IuZXhwZWN0ZWRGdW5jdGlvbkZv
cklkZW50aWZpZXIobV9pZGVudCk7CiAgICAgUmVzb2x2ZVJlc3VsdCByZXNvbHZlUmVzdWx0ID0g
Z2VuZXJhdG9yLnJlc29sdmUobV9pZGVudCk7CiAKICAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwg
PSByZXNvbHZlUmVzdWx0LmxvY2FsKCkpIHsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1
bmMgPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBs
b2NhbCk7CiAgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1f
YXJncyk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRoaXNSZWdp
c3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2Fs
bChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGNhbGxBcmd1bWVudHMu
dGhpc1JlZ2lzdGVyKCkpLCBmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFy
dE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CisgICAgICAgIC8vIFRoaXMgcGFzc2VzIE5vRXhwZWN0
ZWRGdW5jdGlvbiBiZWNhdXNlIHdlIGV4cGVjdCB0aGF0IGlmIHRoZSBmdW5jdGlvbiBpcyBpbiBh
CisgICAgICAgIC8vIGxvY2FsIHZhcmlhYmxlLCB0aGVuIGl0J3Mgbm90IG9uZSBvZiBvdXIgYnVp
bHQtaW4gY29uc3RydWN0b3JzLgorICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdl
bmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgY2FsbEFyZ3VtZW50cy50aGlz
UmVnaXN0ZXIoKSksIGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50
cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAgIH0KIAogICAgIGlm
IChyZXNvbHZlUmVzdWx0LmlzU3RhdGljKCkpIHsKQEAgLTQzNiw3ICs0NDQsNyBAQCBSZWdpc3Rl
cklEKiBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZW1pCiAgICAgICAgIENhbGxBcmd1bWVudHMg
Y2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0
R2V0U3RhdGljVmFyKGZ1bmMuZ2V0KCksIHJlc29sdmVSZXN1bHQsIG1faWRlbnQpOwogICAgICAg
ICBnZW5lcmF0b3IuZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwganNVbmRl
ZmluZWQoKSk7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZp
bmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0LCBmdW5jLmdldCgpKSwgZnVuYy5nZXQoKSwgY2Fs
bEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOworICAgICAg
ICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJ
Z25vcmVkKGRzdCwgZnVuYy5nZXQoKSksIGZ1bmMuZ2V0KCksIGV4cGVjdGVkRnVuY3Rpb24sIGNh
bGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKICAgICB9
CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KTsKQEAgLTQ0NSw3ICs0NTMsOCBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxSZXNvbHZlTm9k
ZTo6ZW1pCiAKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGlkZW50aWZpZXJTdGFy
dCArIG1faWRlbnQubGVuZ3RoKCksIG1faWRlbnQubGVuZ3RoKCksIDApOwogICAgIGdlbmVyYXRv
ci5lbWl0UmVzb2x2ZVdpdGhUaGlzKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGZ1bmMu
Z2V0KCksIHJlc29sdmVSZXN1bHQsIG1faWRlbnQpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1p
dENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0LCBmdW5jLmdldCgp
KSwgZnVuYy5nZXQoKSwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5k
T2Zmc2V0KCkpOworICAgIC8vIEZJWE1FOiBSZWNvbnNpZGVyIHBhc3NpbmcgZXhwZWN0ZWRGdW5j
dGlvbiBpbnN0ZWFkIG9mIE5vRXhwZWN0ZWRGdW5jdGlvbi4KKyAgICByZXR1cm4gZ2VuZXJhdG9y
LmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuYy5n
ZXQoKSksIGZ1bmMuZ2V0KCksIGV4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90
KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ1OCw3ICs0NjcsNyBAQCBSZWdpc3RlcklEKiBGdW5jdGlv
bkNhbGxCcmFja2V0Tm9kZTo6ZW1pCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmN0aW9uID0g
Z2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJh
c2UuZ2V0KCksIHByb3BlcnR5KTsKICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2Vu
ZXJhdG9yLCBtX2FyZ3MpOwogICAgIGdlbmVyYXRvci5lbWl0TW92ZShjYWxsQXJndW1lbnRzLnRo
aXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxs
KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuY3Rpb24uZ2V0KCkp
LCBmdW5jdGlvbi5nZXQoKSwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwg
ZW5kT2Zmc2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZp
bmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0LCBmdW5jdGlvbi5nZXQoKSksIGZ1bmN0aW9uLmdl
dCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zm
c2V0KCksIGVuZE9mZnNldCgpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIEZ1bmN0aW9uQ2FsbERvdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQpAQCAtNDcxLDcgKzQ4MCw3IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVt
aXRCeXQKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCkgLSBtX3N1YmV4
cHJlc3Npb25EaXZvdE9mZnNldCwgc3RhcnRPZmZzZXQoKSAtIG1fc3ViZXhwcmVzc2lvbkRpdm90
T2Zmc2V0LCBtX3N1YmV4cHJlc3Npb25FbmRPZmZzZXQpOwogICAgIGdlbmVyYXRvci5lbWl0TWV0
aG9kQ2hlY2soKTsKICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZnVuY3Rpb24uZ2V0KCksIGNh
bGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG1faWRlbnQpOwotICAgIHJldHVybiBnZW5lcmF0
b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0LCBmdW5j
dGlvbi5nZXQoKSksIGZ1bmN0aW9uLmdldCgpLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFy
dE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGZ1bmN0aW9uLmdldCgpKSwg
ZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3Qo
KSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogfQogCiBSZWdpc3RlcklEKiBDYWxsRnVu
Y3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKQEAgLTQ5MSw3ICs1MDAsNyBAQCBSZWdpc3RlcklEKiBDYWxs
RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pCiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
cmVhbEZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRp
b24oZHN0KSwgYmFzZS5nZXQoKSk7CiAgICAgICAgICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1
bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2Rl
KGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG9sZExpc3QtPm1fZXhwcik7Ci0gICAgICAg
ICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwg
cmVhbEZ1bmN0aW9uLmdldCgpLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgp
LCBlbmRPZmZzZXQoKSk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0
aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVu
Y3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgp
KTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOwogCiAgICAgICAg
ICAgICBtX2FyZ3MtPm1fbGlzdE5vZGUgPSBvbGRMaXN0OwpAQCAtNDk5LDcgKzUwOCw3IEBAIFJl
Z2lzdGVySUQqIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWkKICAgICAgICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiByZWFsRnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9y
LnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpKTsKICAgICAgICAgICAgIENhbGxBcmd1
bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgICAgICBnZW5l
cmF0b3IuZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQo
KSk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9ySWdu
b3JlZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBz
dGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENh
bGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBO
b0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCks
IGVuZE9mZnNldCgpKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkp
OwogICAgICAgICB9CiAgICAgfQpAQCAtNTA3LDcgKzUxNiw3IEBAIFJlZ2lzdGVySUQqIENhbGxG
dW5jdGlvbkNhbGxEb3ROb2RlOjplbWkKICAgICB7CiAgICAgICAgIENhbGxBcmd1bWVudHMgY2Fs
bEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0TW92
ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRDYWxsKGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQuZ2V0KCksIGZ1bmN0aW9u
LmdldCgpLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQo
KSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVk
LmdldCgpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRz
LCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiAgICAgfQogICAgIGdlbmVy
YXRvci5lbWl0TGFiZWwoZW5kLmdldCgpKTsKICAgICByZXR1cm4gZmluYWxEZXN0aW5hdGlvbk9y
SWdub3JlZC5nZXQoKTsKQEAgLTU0NCwyMCArNTUzLDIwIEBAIFJlZ2lzdGVySUQqIEFwcGx5RnVu
Y3Rpb25DYWxsRG90Tm9kZTo6ZW0KICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHJlYWxGdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0TW92ZShnZW5lcmF0b3IudGVtcERlc3Rp
bmF0aW9uKGRzdCksIGJhc2UuZ2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBDYWxsQXJndW1l
bnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAgICAgICAgICAgICAg
ICBnZW5lcmF0b3IuZW1pdE5vZGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgb2xkTGlz
dC0+bV9leHByKTsKLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKGZpbmFs
RGVzdGluYXRpb25Pcklnbm9yZWQuZ2V0KCksIHJlYWxGdW5jdGlvbi5nZXQoKSwgY2FsbEFyZ3Vt
ZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOworICAgICAgICAgICAg
ICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQo
KSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMs
IGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBtX2FyZ3MtPm1fbGlzdE5vZGUgPSBtX2FyZ3Mt
Pm1fbGlzdE5vZGUtPm1fbmV4dDsKICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHJlYWxGdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0TW92ZShnZW5lcmF0b3IudGVtcERlc3Rp
bmF0aW9uKGRzdCksIGJhc2UuZ2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBDYWxsQXJndW1l
bnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAgICAgICAgICAgICAg
ICBnZW5lcmF0b3IuZW1pdE5vZGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgb2xkTGlz
dC0+bV9leHByKTsKLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKGZpbmFs
RGVzdGluYXRpb25Pcklnbm9yZWQuZ2V0KCksIHJlYWxGdW5jdGlvbi5nZXQoKSwgY2FsbEFyZ3Vt
ZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOworICAgICAgICAgICAg
ICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQo
KSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMs
IGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgbV9hcmdzLT5tX2xpc3ROb2RlID0gb2xkTGlzdDsKICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlYWxGdW5j
dGlvbiA9IGdlbmVyYXRvci5lbWl0TW92ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCks
IGJhc2UuZ2V0KCkpOwogICAgICAgICAgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50
cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb2Fk
KGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICAg
ICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgp
LCByZWFsRnVuY3Rpb24uZ2V0KCksIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0
KCksIGVuZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmlu
YWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBOb0V4cGVj
dGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9m
ZnNldCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFT
U0VSVChtX2FyZ3MtPm1fbGlzdE5vZGUgJiYgbV9hcmdzLT5tX2xpc3ROb2RlLT5tX25leHQpOwpA
QCAtNTg2LDcgKzU5NSw3IEBAIFJlZ2lzdGVySUQqIEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6
ZW0KICAgICB7CiAgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3Is
IG1fYXJncyk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShjYWxsQXJndW1lbnRzLnRoaXNS
ZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKGZpbmFs
RGVzdGluYXRpb25Pcklnbm9yZWQuZ2V0KCksIGZ1bmN0aW9uLmdldCgpLCBjYWxsQXJndW1lbnRz
LCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CisgICAgICAgIGdlbmVyYXRv
ci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCBmdW5jdGlvbi5nZXQo
KSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNl
dCgpLCBlbmRPZmZzZXQoKSk7CiAgICAgfQogICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoZW5kLmdl
dCgpKTsKICAgICByZXR1cm4gZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShy
ZXZpc2lvbiAxMzEzODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2Niw2ICsxOTY2LDEyIEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIE5FWFRfT1BDT0RF
KG9wX25ld19hcnJheSk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9w
X25ld19hcnJheV93aXRoX3NpemU6IHsKKyAgICAgICAgICAgIGludCBsZW5ndGhPcGVyYW5kID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHNldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKE5ld0FycmF5V2l0aFNpemUsIGdl
dChsZW5ndGhPcGVyYW5kKSkpOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbmV3X2FycmF5
X3dpdGhfc2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX25l
d19hcnJheV9idWZmZXI6IHsKICAgICAgICAgICAgIGludCBzdGFydENvbnN0YW50ID0gY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBudW1Db25zdGFudHMg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAxMzEzODgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjIsNiArMTYyLDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlT3Bjb2Rl
KAogICAgIGNhc2Ugb3BfcmVzb2x2ZV9nbG9iYWw6CiAgICAgY2FzZSBvcF9uZXdfb2JqZWN0Ogog
ICAgIGNhc2Ugb3BfbmV3X2FycmF5OgorICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZToK
ICAgICBjYXNlIG9wX25ld19hcnJheV9idWZmZXI6CiAgICAgY2FzZSBvcF9zdHJjYXQ6CiAgICAg
Y2FzZSBvcF90b19wcmltaXRpdmU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShy
ZXZpc2lvbiAxMzEzODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxMiw2ICszMTIsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVN
YWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9uZXEpCiAgICAgICAgIERFRklORV9PUChv
cF9uZXFfbnVsbCkKICAgICAgICAgREVGSU5FX09QKG9wX25ld19hcnJheSkKKyAgICAgICAgREVG
SU5FX09QKG9wX25ld19hcnJheV93aXRoX3NpemUpCiAgICAgICAgIERFRklORV9PUChvcF9uZXdf
YXJyYXlfYnVmZmVyKQogICAgICAgICBERUZJTkVfT1Aob3BfbmV3X2Z1bmMpCiAgICAgICAgIERF
RklORV9PUChvcF9uZXdfZnVuY19leHApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJl
dmlzaW9uIDEzMTM4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtp
bmcgY29weSkKQEAgLTcxOCw2ICs3MTgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBlbWl0X29wX25lcShJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbmVxX251
bGwoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX25ld19hcnJheShJbnN0cnVj
dGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbmV3X2FycmF5X2J1ZmZlcihJbnN0cnVjdGlv
biopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbmV3X2Z1bmMoSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX25ld19mdW5jX2V4cChJbnN0cnVjdGlvbiopOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxMzEzODgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjk0LDYgKzE2OTQsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19hcnJheShJbnN0
cnVjdAogICAgIHN0dWJDYWxsLmNhbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7
CiB9CiAKK3ZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBj
dGlfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBzdHVi
Q2FsbC5hZGRBcmd1bWVudChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMik7
CisjZWxzZQorICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpOworI2VuZGlmCisgICAgc3R1YkNhbGwuY2FsbChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKTsKK30KKwogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X2J1ZmZlcihJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIEpJVFN0dWJDYWxsIHN0dWJD
YWxsKHRoaXMsIGN0aV9vcF9uZXdfYXJyYXlfYnVmZmVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxMzEzODgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBA
QAogCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiQXJndW1lbnRzLmgi
CisjaW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKQEAgLTIz
NjAsNiArMjM2MSwxMyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX25ld19h
CiAgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KHN0YWNrRnJhbWUuY2FsbEZyYW1lLCByZWludGVy
cHJldF9jYXN0PEpTVmFsdWUqPigmc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnJlZ2lzdGVycygpW3N0
YWNrRnJhbWUuYXJnc1swXS5pbnQzMigpXSksIHN0YWNrRnJhbWUuYXJnc1sxXS5pbnQzMigpKTsK
IH0KIAorREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNPYmplY3QqLCBvcF9uZXdfYXJyYXlfd2l0aF9z
aXplKQoreworICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKKyAgICAKKyAg
ICByZXR1cm4gY29uc3RydWN0QXJyYXlXaXRoU2l6ZVF1aXJrKHN0YWNrRnJhbWUuY2FsbEZyYW1l
LCBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzdGFja0ZyYW1l
LmFyZ3NbMF0uanNWYWx1ZSgpKTsKK30KKwogREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNPYmplY3Qq
LCBvcF9uZXdfYXJyYXlfYnVmZmVyKQogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFj
a0ZyYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHJldmlzaW9u
IDEzMTM4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEzLDYgKzQxMyw3IEBAIGV4dGVybiAiQyIgewogICAgIEVuY29kZWRKU1Zh
bHVlIEpJVF9TVFVCIGN0aV9vcF91cnNoaWZ0KFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lO
VEVSTkFMOwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV90b19vYmplY3QoU1RVQl9B
UkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgSlNPYmplY3QqIEpJVF9TVFVCIGN0
aV9vcF9uZXdfYXJyYXkoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CisgICAg
SlNPYmplY3QqIEpJVF9TVFVCIGN0aV9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKFNUVUJfQVJHU19E
RUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3Bf
bmV3X2FycmF5X2J1ZmZlcihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAg
ICBKU09iamVjdCogSklUX1NUVUIgY3RpX29wX25ld19mdW5jKFNUVUJfQVJHU19ERUNMQVJBVElP
TikgV1RGX0lOVEVSTkFMOwogICAgIEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3BfbmV3X2Z1bmNf
ZXhwKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxMzEz
ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKExMSU5UKQogCiAjaW5j
bHVkZSAiQXJndW1lbnRzLmgiCisjaW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5oIgogI2luY2x1
ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUg
IkdldHRlclNldHRlci5oIgpAQCAtNTA0LDYgKzUwNSwxMiBAQCBMTElOVF9TTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfbmV3X2FycmF5CiAgICAgTExJTlRfUkVUVVJOKGNvbnN0cnVjdEFycmF5KGV4
ZWMsIGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oJkxMSU5UX09QKDIpKSwgcGNbM10udS5vcGVyYW5k
KSk7CiB9CiAKK0xMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfYXJyYXlfd2l0aF9z
aXplKQoreworICAgIExMSU5UX0JFR0lOKCk7CisgICAgTExJTlRfUkVUVVJOKGNvbnN0cnVjdEFy
cmF5V2l0aFNpemVRdWlyayhleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIExMSU5U
X09QX0MoMikuanNWYWx1ZSgpKSk7Cit9CisKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9uZXdfYXJyYXlfYnVmZmVyKQogewogICAgIExMSU5UX0JFR0lOKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAkocmV2aXNpb24gMTMxMzg4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEyMSw2ICsxMjEsNyBAQCBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0wo
c2xvd19wYXRoX2NyCiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NvbnZl
cnRfdGhpcyk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25ld19vYmpl
Y3QpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9uZXdfYXJyYXkpOwor
TExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9uZXdfYXJyYXlfd2l0aF9zaXpl
KTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbmV3X2FycmF5X2J1ZmZl
cik7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25ld19yZWdleHApOwog
TExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9ub3QpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQko
cmV2aXNpb24gMTMxMzg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC00MjgsNiArNDI4LDEyIEBAIF9sbGlu
dF9vcF9uZXdfYXJyYXk6CiAgICAgZGlzcGF0Y2goNCkKIAogCitfbGxpbnRfb3BfbmV3X2FycmF5
X3dpdGhfc2l6ZToKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQYXRoKF9sbGlu
dF9zbG93X3BhdGhfbmV3X2FycmF5X3dpdGhfc2l6ZSkKKyAgICBkaXNwYXRjaCgzKQorCisKIF9s
bGludF9vcF9uZXdfYXJyYXlfYnVmZmVyOgogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAgICBjYWxs
U2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9uZXdfYXJyYXlfYnVmZmVyKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDEzMTM4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NywxNyArNzcsMjQgQEAgYm9vbCBBcnJh
eUNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlcwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitKU09i
amVjdCogY29uc3RydWN0QXJyYXlXaXRoU2l6ZVF1aXJrKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBsZW5ndGgpCit7CisgICAgaWYgKCFsZW5n
dGguaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIGdsb2Jh
bE9iamVjdCwgJmxlbmd0aCwgMSk7CisgICAgCisgICAgdWludDMyX3QgbiA9IGxlbmd0aC50b1VJ
bnQzMihleGVjKTsKKyAgICBpZiAobiAhPSBsZW5ndGgudG9OdW1iZXIoZXhlYykpCisgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRl
cmFsKCJBcnJheSBzaXplIGlzIG5vdCBhIHNtYWxsIGVub3VnaCBwb3NpdGl2ZSBpbnRlZ2VyLiIp
KSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgZ2xvYmFsT2JqZWN0LCBu
KTsKK30KKwogc3RhdGljIGlubGluZSBKU09iamVjdCogY29uc3RydWN0QXJyYXlXaXRoU2l6ZVF1
aXJrKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgp
KS0+Z2xvYmFsT2JqZWN0KCk7CiAKICAgICAvLyBhIHNpbmdsZSBudW1lcmljIGFyZ3VtZW50IGRl
bm90ZXMgdGhlIGFycmF5IHNpemUgKCEpCi0gICAgaWYgKGFyZ3Muc2l6ZSgpID09IDEgJiYgYXJn
cy5hdCgwKS5pc051bWJlcigpKSB7Ci0gICAgICAgIHVpbnQzMl90IG4gPSBhcmdzLmF0KDApLnRv
VUludDMyKGV4ZWMpOwotICAgICAgICBpZiAobiAhPSBhcmdzLmF0KDApLnRvTnVtYmVyKGV4ZWMp
KQotICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihl
eGVjLCBBU0NJSUxpdGVyYWwoIkFycmF5IHNpemUgaXMgbm90IGEgc21hbGwgZW5vdWdoIHBvc2l0
aXZlIGludGVnZXIuIikpKTsKLSAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhl
YywgZ2xvYmFsT2JqZWN0LCBuKTsKLSAgICB9CisgICAgaWYgKGFyZ3Muc2l6ZSgpID09IDEpCisg
ICAgICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheVdpdGhTaXplUXVpcmsoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBhcmdzLmF0KDApKTsKIAogICAgIC8vIG90aGVyd2lzZSB0aGUgYXJyYXkgaXMgY29uc3Ry
dWN0ZWQgd2l0aCB0aGUgYXJndW1lbnRzIGluIGl0CiAgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5
KGV4ZWMsIGdsb2JhbE9iamVjdCwgYXJncyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAxMzEzODgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDYgKzI2LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQXJy
YXlQcm90b3R5cGU7CisgICAgY2xhc3MgSlNBcnJheTsKIAogICAgIGNsYXNzIEFycmF5Q29uc3Ry
dWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CiAgICAgcHVibGljOgpAQCAtNTksNiAr
NjAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxE
YXRhKEpTQ2VsbCosIENhbGxEYXRhJik7CiAgICAgfTsKIAorICAgIEpTT2JqZWN0KiBjb25zdHJ1
Y3RBcnJheVdpdGhTaXplUXVpcmsoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBBcnJheUNvbnN0cnVjdG9yX2gK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRp
ZmllcnMuaAkocmV2aXNpb24gMTMxMzg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tbW9uSWRlbnRpZmllcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
I2RlZmluZSBKU0NfQ09NTU9OX0lERU5USUZJRVJTX0VBQ0hfUFJPUEVSVFlfTkFNRShtYWNybykg
XAogICAgIG1hY3JvKGFwcGx5KSBcCiAgICAgbWFjcm8oYXJndW1lbnRzKSBcCisgICAgbWFjcm8o
QXJyYXkpIFwKICAgICBtYWNybyhiaW5kKSBcCiAgICAgbWFjcm8oY2FsbCkgXAogICAgIG1hY3Jv
KGNhbGxlZSkgXApAQCAtNTQsNiArNTUsNyBAQAogICAgIG1hY3JvKG11bHRpbGluZSkgXAogICAg
IG1hY3JvKG5hbWUpIFwKICAgICBtYWNybyhub3cpIFwKKyAgICBtYWNybyhPYmplY3QpIFwKICAg
ICBtYWNybyhwYXJzZSkgXAogICAgIG1hY3JvKHByb3BlcnR5SXNFbnVtZXJhYmxlKSBcCiAgICAg
bWFjcm8ocHJvdG90eXBlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAxMzEzODgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4OSw5ICsyODksOSBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3Rv
CiAgICAgbV9yZWdFeHBQcm90b3R5cGUtPnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBtX3JlZ0V4
cENvbnN0cnVjdG9yLmdldCgpLCBEb250RW51bSk7CiAgICAgbV9lcnJvclByb3RvdHlwZS0+cHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuY29uc3RydWN0b3IsIG1fZXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0p
OwogCi0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJ
ZGVudGlmaWVyKGV4ZWMsICJPYmplY3QiKSwgb2JqZWN0Q29uc3RydWN0b3IsIERvbnRFbnVtKTsK
KyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5PYmplY3QsIG9iamVjdENvbnN0cnVjdG9yLCBEb250RW51bSk7CiAg
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlm
aWVyKGV4ZWMsICJGdW5jdGlvbiIpLCBmdW5jdGlvbkNvbnN0cnVjdG9yLCBEb250RW51bSk7Ci0g
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlm
aWVyKGV4ZWMsICJBcnJheSIpLCBhcnJheUNvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuQXJyYXksIGFycmF5Q29uc3RydWN0b3IsIERvbnRFbnVtKTsKICAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywg
IkJvb2xlYW4iKSwgYm9vbGVhbkNvbnN0cnVjdG9yLCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJT
dHJpbmciKSwgc3RyaW5nQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKICAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgIk51bWJl
ciIpLCBudW1iZXJDb25zdHJ1Y3RvciwgRG9udEVudW0pOwpAQCAtMzIwLDYgKzMyMCw4IEBAIHZv
aWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8KICAgICAKICAgICBtX3NwZWNp
YWxQb2ludGVyc1tTcGVjaWFsOjpDYWxsRnVuY3Rpb25dID0gbV9jYWxsRnVuY3Rpb24uZ2V0KCk7
CiAgICAgbV9zcGVjaWFsUG9pbnRlcnNbU3BlY2lhbDo6QXBwbHlGdW5jdGlvbl0gPSBtX2FwcGx5
RnVuY3Rpb24uZ2V0KCk7CisgICAgbV9zcGVjaWFsUG9pbnRlcnNbU3BlY2lhbDo6T2JqZWN0Q29u
c3RydWN0b3JdID0gb2JqZWN0Q29uc3RydWN0b3I7CisgICAgbV9zcGVjaWFsUG9pbnRlcnNbU3Bl
Y2lhbDo6QXJyYXlDb25zdHJ1Y3Rvcl0gPSBhcnJheUNvbnN0cnVjdG9yOwogCiAgICAgaWYgKG1f
ZXhwZXJpbWVudHNFbmFibGVkKSB7CiAgICAgICAgIE5hbWVQcm90b3R5cGUqIHByaXZhdGVOYW1l
UHJvdG90eXBlID0gTmFtZVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIE5hbWVQcm90b3R5cGU6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBl
LmdldCgpKSk7Cg==
</data>
<flag name="review"
          id="182325"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>