<?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>122645</bug_id>
          
          <creation_ts>2013-10-11 08:28:13 -0700</creation_ts>
          <short_desc>Transition misc cti_op_* JITStubs to JIT operations</short_desc>
          <delta_ts>2013-10-14 09:41:37 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</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>122287</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>938802</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-11 08:28:13 -0700</bug_when>
    <thetext>Transition these stubs to operations
    cti_op_check_has_instance
    cti_op_create_arguments
    cti_op_del_by_id
    cti_op_instanceof
    cti_to_object
    cti_op_push_activation
    cti_op_push_name_scope
    cti_op_push_with_scope
    cti_op_get_pnames
    cti_op_load_varargs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938817</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-11 09:02:40 -0700</bug_when>
    <thetext>Michael will take care of cti_op_push_name_scope and cti_push_with_scope in https://bugs.webkit.org/show_bug.cgi?id=122617.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939320</commentid>
    <comment_count>2</comment_count>
      <attachid>214114</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-13 14:49:07 -0700</bug_when>
    <thetext>Created attachment 214114
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939368</commentid>
    <comment_count>3</comment_count>
      <attachid>214114</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-10-13 23:21:34 -0700</bug_when>
    <thetext>Comment on attachment 214114
the patch.

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

&gt; Source/JavaScriptCore/jit/CCallHelpers.h:963
&gt; +        move(arg2, GPRInfo::argumentGPR2); // In case the incoming arg2 was in argumentGPR1.

The comment should actually read &quot;In case arg2 is argumentGPR1&quot;.

&gt; Source/JavaScriptCore/jit/JIT.h:541
&gt; +        void emitGetVirtualRegister(int index, RegisterID tag, RegisterID payload);

How is this different than emitLoad(int index, RegisterID tag, RegisterID payload, RegisterID base = callFrameRegister) below?

&gt; Source/JavaScriptCore/jit/JITInlines.h:725
&gt; +inline void JIT::emitGetVirtualRegister(int index, RegisterID tag, RegisterID payload)
&gt; +{
&gt; +    emitLoadTag(index, tag);
&gt; +    emitLoadPayload(index, payload);
&gt; +}

Remove, this is the same as inline void JIT::emitLoad(int index, RegisterID tag, RegisterID payload, RegisterID base)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939369</commentid>
    <comment_count>4</comment_count>
      <attachid>214114</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-13 23:32:03 -0700</bug_when>
    <thetext>Comment on attachment 214114
the patch.

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

&gt;&gt; Source/JavaScriptCore/jit/CCallHelpers.h:963
&gt;&gt; +        move(arg2, GPRInfo::argumentGPR2); // In case the incoming arg2 was in argumentGPR1.
&gt; 
&gt; The comment should actually read &quot;In case arg2 is argumentGPR1&quot;.

Will fix.

&gt;&gt; Source/JavaScriptCore/jit/JIT.h:541
&gt;&gt; +        void emitGetVirtualRegister(int index, RegisterID tag, RegisterID payload);
&gt; 
&gt; How is this different than emitLoad(int index, RegisterID tag, RegisterID payload, RegisterID base = callFrameRegister) below?

I was going to say that emitLoad() didn&apos;t check for the case where index is referring to a CodeBlock constant, but I was wrong.  I was thrown off by the tricky use of (base == callFrameRegister) to indicate that we need to go through emitLoadPayload() and emitLoadTag().  I will fix this.

&gt;&gt; Source/JavaScriptCore/jit/JITInlines.h:725
&gt;&gt; +}
&gt; 
&gt; Remove, this is the same as inline void JIT::emitLoad(int index, RegisterID tag, RegisterID payload, RegisterID base)

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939370</commentid>
    <comment_count>5</comment_count>
      <attachid>214129</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-13 23:53:02 -0700</bug_when>
    <thetext>Created attachment 214129
patch 2: with Michael&apos;s feedback applied.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939470</commentid>
    <comment_count>6</comment_count>
      <attachid>214129</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-10-14 09:35:20 -0700</bug_when>
    <thetext>Comment on attachment 214129
patch 2: with Michael&apos;s feedback applied.

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

r+, with whitespace changes.

&gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:1047
&gt; +

Eliminate this blank line to indicate that the links and subsequent code go together.

&gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:1064
&gt; +

Dito.

&gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:1134
&gt; +

Dito.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939473</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-14 09:41:37 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r157404: &lt;http://trac.webkit.org/r157404&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214114</attachid>
            <date>2013-10-13 14:49:07 -0700</date>
            <delta_ts>2013-10-13 23:53:02 -0700</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-122645.patch</filename>
            <type>text/plain</type>
            <size>45403</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3MzgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBA
CisyMDEzLTEwLTEzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBU
cmFuc2l0aW9uIG1pc2MgY3RpX29wXyogSklUU3R1YnMgdG8gSklUIG9wZXJhdGlvbnMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjI2NDUuCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3R1YnMgY29udmVy
dGVkOgorICAgICAgICAgICAgY3RpX29wX2NoZWNrX2hhc19pbnN0YW5jZQorICAgICAgICAgICAg
Y3RpX29wX2NyZWF0ZV9hcmd1bWVudHMKKyAgICAgICAgICAgIGN0aV9vcF9kZWxfYnlfaWQKKyAg
ICAgICAgICAgIGN0aV9vcF9pbnN0YW5jZW9mCisgICAgICAgICAgICBjdGlfdG9fb2JqZWN0Cisg
ICAgICAgICAgICBjdGlfb3BfcHVzaF9hY3RpdmF0aW9uCisgICAgICAgICAgICBjdGlfb3BfZ2V0
X3BuYW1lcworICAgICAgICAgICAgY3RpX29wX2xvYWRfdmFyYXJncworCisgICAgICAgICogZGZn
L0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAg
ICAgICogaml0L0NDYWxsSGVscGVycy5oOgorICAgICAgICAoSlNDOjpDQ2FsbEhlbHBlcnM6OnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTdG9yZUNlbGwpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAqIGppdC9K
SVRDYWxsMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyk6
CisgICAgICAgICogaml0L0pJVElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SklUOjpjYWxsT3Bl
cmF0aW9uKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKToKKyAg
ICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9n
ZXRfcG5hbWVzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV9hY3RpdmF0aW9u
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV9hcmd1bWVudHMpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2NoZWNrX2hhc19pbnN0YW5jZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9uZXdfYXJyYXlfd2l0aF9zaXplKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jaGVja19oYXNfaW5zdGFuY2UpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZ2V0X3BuYW1lcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9j
cmVhdGVfYWN0aXZhdGlvbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jcmVhdGVfYXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlf
dmFsKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L0pJ
VE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKToKKyAgICAgICAgKiBqaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlf
aWQpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgICogaml0L0pJVFN0dWJz
Lmg6CisKIDIwMTMtMTAtMTMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAg
ICAgICBGVEwgT1NSIGV4aXQgc2hvdWxkIHBlcmZvcm0gemVybyBleHRlbnNpb24gb24gdmFsdWVz
IHNtYWxsZXIgdGhhbiA2NC1iaXQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTU3MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgwLDI2ICs2ODAs
NiBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0NjRBCiAgICAgcmV0dXJu
IG5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnQ8SlNGbG9hdDY0QXJyYXk+KGV4ZWMsIHN0cnVj
dHVyZSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkNyZWF0ZUFjdGl2YXRpb24oRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IG9mZnNldCkKLXsKLSAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
JnZtLCBleGVjKTsKLSAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBKU0FjdGl2YXRpb246
OmNyZWF0ZSh2bSwgZXhlYywgZXhlYy0+cmVnaXN0ZXJzKCkgKyBvZmZzZXQsIGV4ZWMtPmNvZGVC
bG9jaygpKTsKLSAgICBleGVjLT5zZXRTY29wZShhY3RpdmF0aW9uKTsKLSAgICByZXR1cm4gYWN0
aXZhdGlvbjsKLX0KLQotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFyZ3Vt
ZW50cyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Ci0gICAgLy8gTkI6IFRoaXMg
bmVlZHMgdG8gYmUgZXhjZWVkaW5nbHkgY2FyZWZ1bCB3aXRoIHRvcCBjYWxsIGZyYW1lIHRyYWNr
aW5nLCBzaW5jZSBpdAotICAgIC8vIG1heSBiZSBjYWxsZWQgZnJvbSBPU1IgZXhpdCwgd2hpbGUg
dGhlIHN0YXRlIG9mIHRoZSBjYWxsIHN0YWNrIGlzIGJpemFycmUuCi0gICAgQXJndW1lbnRzKiBy
ZXN1bHQgPSBBcmd1bWVudHM6OmNyZWF0ZSh2bSwgZXhlYyk7Ci0gICAgQVNTRVJUKCF2bS5leGNl
cHRpb24oKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogSlNDZWxsKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkNyZWF0ZUlubGluZWRBcmd1bWVudHMoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBJ
bmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNTczMzkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtOTAs
OCArOTAsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlCiBzaXpl
X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBUZXN0KEV4ZWNTdGF0ZSosIEpTQ2VsbCos
IEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNv
bXBhcmVTdHJpY3RFcUNlbGwoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOwogc2l6ZV90IEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKLUpT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9uKEV4ZWNTdGF0ZSos
IGludDMyX3Qgb2Zmc2V0KSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQ3JlYXRlQXJndW1lbnRzKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIEpTQ2VsbCog
SklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVJbmxpbmVkQXJndW1lbnRzKEV4ZWNTdGF0ZSos
IElubGluZUNhbGxGcmFtZSopIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25UZWFyT2ZmQXJndW1lbnRzKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopIFdURl9J
TlRFUk5BTDsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmSW5saW5lZEFyZ3Vt
ZW50cyhFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqLCBJbmxpbmVDYWxsRnJhbWUqKSBXVEZf
SU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJ
KHJldmlzaW9uIDE1NzMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxw
ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3Myw2ICszNzMsMTcgQEAgcHVibGljOgogICAgICAg
ICBhZGRDYWxsQXJndW1lbnQoYXJnNSk7CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSB2b2lk
IHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQ
UlJlZyBhcmczLCBHUFJSZWcgYXJnNCwgVHJ1c3RlZEltbTMyIGFyZzUpCisgICAgeworICAgICAg
ICByZXNldENhbGxBcmd1bWVudHMoKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzEpOworICAg
ICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMik7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcz
KTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzQpOworICAgICAgICBhZGRDYWxsQXJndW1l
bnQoYXJnNSk7CisgICAgfQorCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShGUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBy
ZXNldENhbGxBcmd1bWVudHMoKTsKQEAgLTk0OSw3ICs5NjAsNyBAQCBwdWJsaWM6CiAKICAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1Q
dHIgYXJnMSwgR1BSUmVnIGFyZzIsIFRydXN0ZWRJbW0zMiBhcmczKQogICAgIHsKLSAgICAgICAg
bW92ZShhcmcyLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgICAgICBtb3ZlKGFyZzIsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMik7IC8vIEluIGNhc2UgdGhlIGluY29taW5nIGFyZzIgd2FzIGlu
IGFyZ3VtZW50R1BSMS4KICAgICAgICAgbW92ZShhcmcxLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OwogICAgICAgICBtb3ZlKGFyZzMsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CiAgICAgICAgIG1v
dmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CkBA
IC0xMDQxLDYgKzEwNTIsMTMgQEAgcHVibGljOgogICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSB2
b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIs
IEdQUlJlZyBhcmczLCBHUFJSZWcgYXJnNCwgVHJ1c3RlZEltbTMyIGFyZzUpCisgICAgeworICAg
ICAgICBwb2tlKGFyZzUsIFBPS0VfQVJHVU1FTlRfT0ZGU0VUICsgMSk7CisgICAgICAgIHBva2Uo
YXJnNCwgUE9LRV9BUkdVTUVOVF9PRkZTRVQpOworICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CisgICAgfQorCiAgICAgQUxXQVlTX0lOTElORSB2
b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tMzIgYXJnMSwgR1BSUmVn
IGFyZzIsIEdQUlJlZyBhcmczLCBHUFJSZWcgYXJnNCkKICAgICB7CiAgICAgICAgIHBva2UoYXJn
NCwgUE9LRV9BUkdVTUVOVF9PRkZTRVQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShy
ZXZpc2lvbiAxNTczMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEZ1
bmN0aW9uRXhlY3V0YWJsZTsKICAgICBjbGFzcyBKSVQ7CiAgICAgY2xhc3MgSlNQcm9wZXJ0eU5h
bWVJdGVyYXRvcjsKKyAgICBjbGFzcyBJZGVudGlmaWVyOwogICAgIGNsYXNzIEludGVycHJldGVy
OwogICAgIGNsYXNzIEpTU2NvcGU7CiAgICAgY2xhc3MgSlNTdGFjazsKQEAgLTUzNyw2ICs1Mzgs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICBib29s
IGdldE9wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChpbnQgb3AxLCBpbnQgb3AyLCBpbnQmIG9w
LCBpbnQzMl90JiBjb25zdGFudCk7CiAKKyAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCk7CiAgICAg
ICAgIHZvaWQgZW1pdExvYWRUYWcoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZyk7CiAgICAgICAg
IHZvaWQgZW1pdExvYWRQYXlsb2FkKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKIApA
QCAtNjE4LDYgKzYyMCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHBheWxvYWQpOwogICAgICAgICB9CisgICAg
ICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIHBh
eWxvYWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCBwYXlsb2FkKTsKKyAgICAgICAgfQogCiAgICAgICAgIGludDMyX3QgZ2V0Q29uc3RhbnRPcGVy
YW5kSW1tZWRpYXRlSW50KGludCBzcmMpOwogCkBAIC04NjcsMTYgKzg3MywxOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0ciYpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVu
Y3Rpb25QdHImKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHImLCBpbnQpOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9u
X0UpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3Bl
cmF0aW9uX0VPLCBHUFJSZWcpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKENfSklUT3BlcmF0aW9uX0VTdCwgU3RydWN0dXJlKik7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRVosIGludDMyX3QpOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEZfSklUT3BlcmF0aW9u
X0VKSlosIEdQUlJlZywgR1BSUmVnLCBpbnQzMl90KTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FLCBpbnQpOwotI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRP
cGVyYXRpb25fRUFhcEosIGludCwgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSosIEdQUlJlZyk7Ci0j
ZWxzZQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3Bl
cmF0aW9uX0VBYXBKLCBpbnQsIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqLCBHUFJSZWcsIEdQUlJl
Zyk7Ci0jZW5kaWYKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0pJVE9wZXJhdGlvbl9FQWFwSmNwWiwgaW50LCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiwgR1BS
UmVnLCBpbnQzMl90KTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihKX0pJVE9wZXJhdGlvbl9FQWFwSmNwWiwgaW50LCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiwg
Y29uc3QgSlNWYWx1ZSosIGludDMyX3QpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VDLCBpbnQsIEpTQ2VsbCopOworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKLCBpbnQs
IEdQUlJlZyk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9K
SVRPcGVyYXRpb25fRUpJZGMsIGludCwgR1BSUmVnLCBjb25zdCBJZGVudGlmaWVyKik7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpK
LCBpbnQsIEdQUlJlZywgR1BSUmVnKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FUCwgaW50LCB2b2lkKik7CiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25fRUNDLCBSZWdpc3Rl
cklELCBSZWdpc3RlcklEKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihTX0pJVE9wZXJhdGlvbl9FSiwgUmVnaXN0ZXJJRCk7CkBAIC04ODYsNiArODk1LDExIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oVl9KSVRPcGVyYXRpb25fRUNiLCBD
b2RlQmxvY2sqKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbldp
dGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKFpfSklUT3BlcmF0aW9uX0UpOwogI2lmIFVT
RShKU1ZBTFVFMzJfNjQpCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oRl9KSVRPcGVyYXRpb25fRUpKWiwgR1BSUmVnLCBHUFJSZWcsIEdQUlJlZywgR1BSUmVnLCBp
bnQzMl90KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJ
VE9wZXJhdGlvbl9FQWFwSiwgaW50LCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiwgR1BSUmVnLCBH
UFJSZWcpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklU
T3BlcmF0aW9uX0VKLCBpbnQsIEdQUlJlZywgR1BSUmVnKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSklkYywgaW50LCBHUFJSZWcs
IEdQUlJlZywgY29uc3QgSWRlbnRpZmllciopOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSiwgaW50LCBHUFJSZWcsIEdQUlJlZywg
R1BSUmVnLCBHUFJSZWcpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFNfSklUT3BlcmF0aW9uX0VKLCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0pJVE9wZXJhdGlvbl9FSkosIFJl
Z2lzdGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQpOwogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lv
biAxNTczMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE5MCwxMSArMTkwLDEwIEBAIHZvaWQgSklUOjpjb21waWxlTG9h
ZFZhcmFyZ3MoSW5zdHJ1Y3Rpb24KICAgICBpZiAoY2FuT3B0aW1pemUpCiAgICAgICAgIHNsb3dD
YXNlLmxpbmsodGhpcyk7CiAKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3Bf
bG9hZF92YXJhcmdzKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudCh0aGlzVmFsdWUpOwotICAg
IHN0dWJDYWxsLmFkZEFyZ3VtZW50KGFyZ3VtZW50cyk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1l
bnQoSW1tMzIoZmlyc3RGcmVlUmVnaXN0ZXIpKTsKLSAgICBzdHViQ2FsbC5jYWxsKHJlZ1QzKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWYWx1ZSwgcmVnVDEsIHJlZ1QwKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDMsIHJlZ1QyKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkxvYWRWYXJhcmdzLCByZWdUMSwgcmVnVDAsIHJlZ1QzLCBy
ZWdUMiwgZmlyc3RGcmVlUmVnaXN0ZXIpOworICAgIG1vdmUocmV0dXJuVmFsdWVSZWdpc3Rlciwg
cmVnVDMpOwogCiAgICAgaWYgKGNhbk9wdGltaXplKQogICAgICAgICBlbmQubGluayh0aGlzKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMTU3MzM5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE5LDExICsxMTksMTAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyhJbnN0
cnVjdGlvbgogICAgIGlmIChjYW5PcHRpbWl6ZSkKICAgICAgICAgc2xvd0Nhc2UubGluayh0aGlz
KTsKIAotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9sb2FkX3ZhcmFyZ3Mp
OwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHRoaXNWYWx1ZSwgcmVnVDApOwotICAgIHN0dWJD
YWxsLmFkZEFyZ3VtZW50KGFyZ3VtZW50cywgcmVnVDApOwotICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KEltbTMyKGZpcnN0RnJlZVJlZ2lzdGVyKSk7Ci0gICAgc3R1YkNhbGwuY2FsbChyZWdUMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVmFsdWUsIHJlZ1QwKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTG9hZFZhcmFyZ3MsIHJlZ1QwLCByZWdUMSwgZmlyc3RGcmVlUmVnaXN0ZXIpOwor
ICAgIG1vdmUocmV0dXJuVmFsdWVSZWdpc3RlciwgcmVnVDEpOwogCiAgICAgaWYgKGNhbk9wdGlt
aXplKQogICAgICAgICBlbmQubGluayh0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAxNTczMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDE4ICsyMzEsNTEgQEAg
QUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogICAgIHJldHVybiBjYWxs
OwogfQogCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJh
dGlvbihDX0pJVE9wZXJhdGlvbl9FIG9wZXJhdGlvbikKK3sKKyAgICBzZXR1cEFyZ3VtZW50c0V4
ZWNTdGF0ZSgpOworICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvbik7Cit9CisKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxs
T3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VPIG9wZXJhdGlvbiwgR1BSUmVnIGFyZykKK3sKKyAg
ICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnKTsKKyAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOworfQorCiBBTFdBWVNfSU5MSU5FIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FU3Qgb3Bl
cmF0aW9uLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBzZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogfQogCitBTFdBWVNfSU5MSU5FIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FWiBvcGVy
YXRpb24sIGludDMyX3QgYXJnKQoreworICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShU
cnVzdGVkSW1tMzIoYXJnKSk7CisgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2sob3BlcmF0aW9uKTsKK30KKworCisjaWYgVVNFKEpTVkFMVUU2NCkKK0FMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKEZfSklUT3BlcmF0aW9uX0VK
Slogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIGludDMyX3QgYXJnMykKK3sK
KyAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1c3RlZEltbTMy
KGFyZzMpKTsKKyAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRp
b24pOworfQorI2VuZGlmCisKIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklU
OjpjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uLCBpbnQgZHN0KQogewog
ICAgIHNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7CiAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KG9wZXJhdGlvbiwgZHN0KTsKIH0KIAorQUxX
QVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oSl9KSVRP
cGVyYXRpb25fRUFhcEogb3BlcmF0aW9uLCBpbnQgZHN0LCBBcnJheUFsbG9jYXRpb25Qcm9maWxl
KiBhcmcxLCBHUFJSZWcgYXJnMikKK3sKKyAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
VHJ1c3RlZEltbVB0cihhcmcxKSwgYXJnMik7CisgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KG9wZXJhdGlvbiwgZHN0KTsKK30KKwogQUxXQVlT
X0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oSl9KSVRPcGVy
YXRpb25fRUFhcEpjcFogb3BlcmF0aW9uLCBpbnQgZHN0LCBBcnJheUFsbG9jYXRpb25Qcm9maWxl
KiBhcmcxLCBHUFJSZWcgYXJnMiwgaW50MzJfdCBhcmczKQogewogICAgIHNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGFyZzEpLCBhcmcyLCBUcnVzdGVkSW1tMzIoYXJn
MykpOwpAQCAtMjYxLDYgKzI5NCwyNCBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIEpJVDo6CiAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1Zh
bHVlUmVzdWx0KG9wZXJhdGlvbiwgZHN0KTsKIH0KIAorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9u
LCBpbnQgZHN0LCBHUFJSZWcgYXJnMSkKK3sKKyAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoYXJnMSk7CisgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1Zh
bHVlUmVzdWx0KG9wZXJhdGlvbiwgZHN0KTsKK30KKworQUxXQVlTX0lOTElORSBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpJZGMgb3BlcmF0
aW9uLCBpbnQgZHN0LCBHUFJSZWcgYXJnMSwgY29uc3QgSWRlbnRpZmllciogYXJnMikKK3sKKyAg
ICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihhcmcyKSk7
CisgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
KG9wZXJhdGlvbiwgZHN0KTsKK30KKworQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBKSVQ6OmNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgaW50IGRz
dCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQoreworICAgIHNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxLCBhcmcyKTsKKyAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHQob3BlcmF0aW9uLCBkc3QpOworfQorCiBBTFdBWVNfSU5MSU5F
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9F
UCBvcGVyYXRpb24sIGludCBkc3QsIHZvaWQqIHBvaW50ZXIpCiB7CiAgICAgc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwpAQCAtMzI3LDEyICszNzgs
MzYgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogI2RlZmluZSBT
SDRfMzJCSVRfRFVNTVlfQVJHCiAjZW5kaWYKIAorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oRl9KSVRPcGVyYXRpb25fRUpKWiBvcGVyYXRpb24s
IEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyVGFnLCBHUFJS
ZWcgYXJnMlBheWxvYWQsIGludDMyX3QgYXJnMykKK3sKKyAgICBzZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcsIFNINF8z
MkJJVF9EVU1NWV9BUkcgYXJnMlBheWxvYWQsIGFyZzJUYWcsIFRydXN0ZWRJbW0zMihhcmczKSk7
CisgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKK30K
KwogQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24o
Sl9KSVRPcGVyYXRpb25fRUFhcEogb3BlcmF0aW9uLCBpbnQgZHN0LCBBcnJheUFsbG9jYXRpb25Q
cm9maWxlKiBhcmcxLCBHUFJSZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQogewogICAg
IHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGFyZzEpLCBFQUJJXzMy
QklUX0RVTU1ZX0FSRyBhcmcyUGF5bG9hZCwgYXJnMlRhZyk7CiAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KG9wZXJhdGlvbiwgZHN0KTsKIH0K
IAorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24o
Sl9KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBpbnQgZHN0LCBHUFJSZWcgYXJnMVRhZywgR1BS
UmVnIGFyZzFQYXlsb2FkKQoreworICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJ
XzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZyk7CisgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KG9wZXJhdGlvbiwgZHN0KTsK
K30KKworQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRp
b24oSl9KSVRPcGVyYXRpb25fRUpJZGMgb3BlcmF0aW9uLCBpbnQgZHN0LCBHUFJSZWcgYXJnMVRh
ZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBjb25zdCBJZGVudGlmaWVyKiBhcmcyKQoreworICAgIHNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9h
ZCwgYXJnMVRhZywgVHJ1c3RlZEltbVB0cihhcmcyKSk7CisgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KG9wZXJhdGlvbiwgZHN0KTsKK30KKwor
QUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oSl9K
SVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgaW50IGRzdCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJl
ZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKK3sKKyAg
ICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBh
eWxvYWQsIGFyZzFUYWcsIFNINF8zMkJJVF9EVU1NWV9BUkcgYXJnMlBheWxvYWQsIGFyZzJUYWcp
OworICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dChvcGVyYXRpb24sIGRzdCk7Cit9CisKIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgSklUOjpjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgUmVnaXN0
ZXJJRCBhcmdUYWcsIFJlZ2lzdGVySUQgYXJnUGF5bG9hZCkKIHsKICAgICBzZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnUGF5bG9hZCwgYXJnVGFnKTsK
QEAgLTM0OCwxNCArNDIzLDYgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBK
SVQ6OgogI3VuZGVmIEVBQklfMzJCSVRfRFVNTVlfQVJHCiAjdW5kZWYgU0g0XzMyQklUX0RVTU1Z
X0FSRwogCi0jZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQotCi1BTFdBWVNfSU5MSU5FIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQWFwSiBv
cGVyYXRpb24sIGludCBkc3QsIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqIGFyZzEsIEdQUlJlZyBh
cmcyKQotewotICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGFy
ZzEpLCBhcmcyKTsKLSAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHQob3BlcmF0aW9uLCBkc3QpOwotfQotCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUz
Ml82NCkKIAogQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAgSklUOjpjaGVja1N0cnVjdHVyZShSZWdp
c3RlcklEIHJlZywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC02NTEsNiArNzE4LDEyIEBAIGlu
bGluZSB2b2lkIEpJVDo6ZW1pdExvYWRQYXlsb2FkKGludCBpbmQKICAgICB1bm1hcChwYXlsb2Fk
KTsKIH0KIAoraW5saW5lIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBpbmRl
eCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCkKK3sKKyAgICBlbWl0TG9hZFRh
ZyhpbmRleCwgdGFnKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoaW5kZXgsIHBheWxvYWQpOworfQor
CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKGNvbnN0IEpTVmFsdWUmIHYsIFJlZ2lzdGVySUQg
dGFnLCBSZWdpc3RlcklEIHBheWxvYWQpCiB7CiAgICAgbW92ZShJbW0zMih2LnBheWxvYWQoKSks
IHBheWxvYWQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
czMyXzY0LmNwcAkocmV2aXNpb24gMTU3MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTYsMTAgKzI5Niw5IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19oYXNfaW5zdGFuY2UKICAgICBsaW5rU2xvd0Nh
c2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNlVmFsKTsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAK
LSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfY2hlY2tfaGFzX2luc3RhbmNl
KTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudCh2YWx1ZSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJn
dW1lbnQoYmFzZVZhbCk7Ci0gICAgc3R1YkNhbGwuY2FsbChkc3QpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlVmFsLCByZWdUMywgcmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q2hlY2tIYXNJbnN0YW5jZSwgZHN0LCByZWdUMSwgcmVnVDAsIHJlZ1QzLCByZWdUMik7CiAKICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJh
bmQpOwogfQpAQCAtMzE0LDEwICszMTMsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFu
Y2VvZihJbnN0cnVjCiAgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgcHJvdG8pOwog
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMs
IGN0aV9vcF9pbnN0YW5jZW9mKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudCh2YWx1ZSk7Ci0g
ICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocHJvdG8pOwotICAgIHN0dWJDYWxsLmNhbGwoZHN0KTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSwgcmVnVDApOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QzLCByZWdUMik7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25JbnN0YW5jZU9mLCBkc3QsIHJlZ1QxLCByZWdUMCwgcmVnVDMsIHJlZ1Qy
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC04NDksOSArODQ3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X3BuYW1lcyhJbnN0cnVjdGlvbgogICAgIC8vIFdlIGNvdWxkIGlubGluZSB0aGUgY2FzZSB3aGVy
ZSB5b3UgaGF2ZSBhIHZhbGlkIGNhY2hlLCBidXQKICAgICAvLyB0aGlzIGNhbGwgZG9lc24ndCBz
ZWVtIHRvIGJlIGhvdC4KICAgICBMYWJlbCBpc09iamVjdCh0aGlzKTsKLSAgICBKSVRTdHViQ2Fs
bCBnZXRQbmFtZXNTdHViQ2FsbCh0aGlzLCBjdGlfb3BfZ2V0X3BuYW1lcyk7Ci0gICAgZ2V0UG5h
bWVzU3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOwotICAgIGdldFBuYW1lc1N0dWJDYWxsLmNh
bGwoZHN0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldFBOYW1lcywgcmVnVDApOwor
ICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZVJlZ2lzdGVyKTsKICAgICBsb2FkMzIo
QWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lSXRlcmF0b3IsIG1f
anNTdHJpbmdzU2l6ZSkpLCByZWdUMyk7CiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSW50MzJU
YWcpLCBpbnRUYWdGb3IoaSkpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBpbnRQYXls
b2FkRm9yKGkpKTsKQEAgLTg2Miw5ICs4NTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcG5h
bWVzKEluc3RydWN0aW9uCiAgICAgaXNOb3RPYmplY3QubGluayh0aGlzKTsKICAgICBhZGRKdW1w
KGJyYW5jaDMyKEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpKSwg
YnJlYWtUYXJnZXQpOwogICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QxLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSksIGJyZWFrVGFyZ2V0KTsKLSAgICBKSVRTdHVi
Q2FsbCB0b09iamVjdFN0dWJDYWxsKHRoaXMsIGN0aV90b19vYmplY3QpOwotICAgIHRvT2JqZWN0
U3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDEsIHJlZ1QwKTsKLSAgICB0b09iamVjdFN0dWJDYWxs
LmNhbGwoYmFzZSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Ub09iamVjdCwgYmFzZSwg
cmVnVDEsIHJlZ1QwKTsKICAgICBqdW1wKCkubGlua1RvKGlzT2JqZWN0LCB0aGlzKTsKIAogICAg
IGVuZC5saW5rKHRoaXMpOwpAQCAtMTA4OSw3ICsxMDg0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y3JlYXRlX2FjdGl2YXRpb24oSW5zdAogICAgIGludCBhY3RpdmF0aW9uID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICAKICAgICBKdW1wIGFjdGl2YXRpb25DcmVhdGVkID0g
YnJhbmNoMzIoTm90RXF1YWwsIHRhZ0ZvcihhY3RpdmF0aW9uKSwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkVtcHR5VmFsdWVUYWcpKTsKLSAgICBKSVRTdHViQ2FsbCh0aGlzLCBjdGlfb3BfcHVzaF9h
Y3RpdmF0aW9uKS5jYWxsKGFjdGl2YXRpb24pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q3JlYXRlQWN0aXZhdGlvbiwgMCk7CisgICAgZW1pdFN0b3JlQ2VsbChhY3RpdmF0aW9uLCByZXR1
cm5WYWx1ZVJlZ2lzdGVyKTsKICAgICBhY3RpdmF0aW9uQ3JlYXRlZC5saW5rKHRoaXMpOwogfQog
CkBAIC0xMDk4LDEwICsxMDk0LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX2FyZ3VtZW50
cyhJbnN0cgogICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwog
CiAgICAgSnVtcCBhcmdzQ3JlYXRlZCA9IGJyYW5jaDMyKE5vdEVxdWFsLCB0YWdGb3IoZHN0KSwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKLQotICAgIEpJVFNsb3dQYXRo
Q2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfY3Jl
YXRlX2FyZ3VtZW50cyk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLQorICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ3JlYXRlQXJndW1lbnRzKTsKKyAgICBlbWl0U3RvcmVDZWxsKGRzdCwg
cmV0dXJuVmFsdWVSZWdpc3Rlcik7CisgICAgZW1pdFN0b3JlQ2VsbCh1bm1vZGlmaWVkQXJndW1l
bnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKGRzdCkpLm9mZnNldCgpLCByZXR1cm5WYWx1ZVJl
Z2lzdGVyKTsKICAgICBhcmdzQ3JlYXRlZC5saW5rKHRoaXMpOwogfQogCkBAIC0xMjU2LDkgKzEy
NTEsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhCiAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAotICAgIEpJVFN0dWJD
YWxsKHRoaXMsIGN0aV9vcF9jcmVhdGVfYXJndW1lbnRzKS5jYWxsKCk7Ci0gICAgZW1pdFN0b3Jl
KGFyZ3VtZW50cywgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmUodW5tb2RpZmllZEFyZ3Vt
ZW50c1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMpKS5vZmZzZXQoKSwgcmVnVDEs
IHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0ZUFyZ3VtZW50cyk7Cisg
ICAgZW1pdFN0b3JlQ2VsbChhcmd1bWVudHMsIHJldHVyblZhbHVlUmVnaXN0ZXIpOworICAgIGVt
aXRTdG9yZUNlbGwodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcihh
cmd1bWVudHMpKS5vZmZzZXQoKSwgcmV0dXJuVmFsdWVSZWdpc3Rlcik7CiAgICAgCiAgICAgc2tp
cEFyZ3VtZW50c0NyZWF0aW9uLmxpbmsodGhpcyk7CiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwo
dGhpcywgY3RpX29wX2dldF9ieV92YWxfZ2VuZXJpYyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDE1NzMzOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxNyw5ICs1
MTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcG5hbWVzKEluc3RydWN0aW9uCiAgICAgLy8g
V2UgY291bGQgaW5saW5lIHRoZSBjYXNlIHdoZXJlIHlvdSBoYXZlIGEgdmFsaWQgY2FjaGUsIGJ1
dAogICAgIC8vIHRoaXMgY2FsbCBkb2Vzbid0IHNlZW0gdG8gYmUgaG90LgogICAgIExhYmVsIGlz
T2JqZWN0KHRoaXMpOwotICAgIEpJVFN0dWJDYWxsIGdldFBuYW1lc1N0dWJDYWxsKHRoaXMsIGN0
aV9vcF9nZXRfcG5hbWVzKTsKLSAgICBnZXRQbmFtZXNTdHViQ2FsbC5hZGRBcmd1bWVudChyZWdU
MCk7Ci0gICAgZ2V0UG5hbWVzU3R1YkNhbGwuY2FsbChkc3QpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uR2V0UE5hbWVzLCByZWdUMCk7CisgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVy
blZhbHVlUmVnaXN0ZXIpOwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VU
T0YoSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciwgbV9qc1N0cmluZ3NTaXplKSksIHJlZ1QzKTsKICAg
ICBzdG9yZTY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgYWRkcmVzc0ZvcihpKSk7CiAgICAgc3Rv
cmUzMihUcnVzdGVkSW1tMzIoSW50MzJUYWcpLCBpbnRUYWdGb3Ioc2l6ZSkpOwpAQCAtNTMwLDEw
ICs1MjksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcG5hbWVzKEluc3RydWN0aW9uCiAgICAg
bW92ZShyZWdUMCwgcmVnVDEpOwogICAgIGFuZDMyKFRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZp
bmVkKSwgcmVnVDEpOwogICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QxLCBUcnVzdGVk
SW1tMzIoVmFsdWVOdWxsKSksIGJyZWFrVGFyZ2V0KTsKLQotICAgIEpJVFN0dWJDYWxsIHRvT2Jq
ZWN0U3R1YkNhbGwodGhpcywgY3RpX3RvX29iamVjdCk7Ci0gICAgdG9PYmplY3RTdHViQ2FsbC5h
ZGRBcmd1bWVudChyZWdUMCk7Ci0gICAgdG9PYmplY3RTdHViQ2FsbC5jYWxsKGJhc2UpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVG9PYmplY3QsIGJhc2UsIHJlZ1QwKTsKICAgICBqdW1w
KCkubGlua1RvKGlzT2JqZWN0LCB0aGlzKTsKICAgICAKICAgICBlbmQubGluayh0aGlzKTsKQEAg
LTg0MCw3ICs4MzYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfYWN0aXZhdGlvbihJbnN0
CiAgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgCiAg
ICAgSnVtcCBhY3RpdmF0aW9uQ3JlYXRlZCA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCBBZGRyZXNz
KGNhbGxGcmFtZVJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogZHN0KSk7Ci0gICAgSklUU3R1
YkNhbGwodGhpcywgY3RpX29wX3B1c2hfYWN0aXZhdGlvbikuY2FsbChkc3QpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbiwgMCk7CisgICAgZW1pdFN0b3JlQ2Vs
bChkc3QsIHJldHVyblZhbHVlUmVnaXN0ZXIpOwogICAgIGFjdGl2YXRpb25DcmVhdGVkLmxpbmso
dGhpcyk7CiB9CiAKQEAgLTg0OSw5ICs4NDYsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRl
X2FyZ3VtZW50cyhJbnN0cgogICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOwogCiAgICAgSnVtcCBhcmdzQ3JlYXRlZCA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCBB
ZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogZHN0KSk7Ci0gICAg
SklUU3R1YkNhbGwodGhpcywgY3RpX29wX2NyZWF0ZV9hcmd1bWVudHMpLmNhbGwoKTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcih1
bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKGRzdCkpKTsKKworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ3JlYXRlQXJndW1lbnRzKTsKKyAgICBlbWl0U3RvcmVD
ZWxsKGRzdCwgcmV0dXJuVmFsdWVSZWdpc3Rlcik7CisgICAgZW1pdFN0b3JlQ2VsbCh1bm1vZGlm
aWVkQXJndW1lbnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKGRzdCkpLCByZXR1cm5WYWx1ZVJl
Z2lzdGVyKTsKKwogICAgIGFyZ3NDcmVhdGVkLmxpbmsodGhpcyk7CiB9CiAKQEAgLTEwNDUsMTAg
KzEwNDQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX2hhc19pbnN0YW5jZQogCiAg
ICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZVZhbCk7CiAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOwotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9jaGVja19o
YXNfaW5zdGFuY2UpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHZhbHVlLCByZWdUMik7Ci0g
ICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoYmFzZVZhbCwgcmVnVDIpOwotICAgIHN0dWJDYWxsLmNh
bGwoZHN0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWYWwsIHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNoZWNrSGFzSW5zdGFuY2UsIGRzdCwgcmVnVDAsIHJlZ1QxKTsKIAogICAg
IGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFu
ZCk7CiB9CkBAIC0xMDYyLDEwICsxMDYxLDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mKEluc3RydWMKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCB2YWx1ZSk7
CiAgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgcHJvdG8pOwogICAgIGxpbmtTbG93
Q2FzZShpdGVyKTsKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfaW5zdGFu
Y2VvZik7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQodmFsdWUsIHJlZ1QyKTsKLSAgICBzdHVi
Q2FsbC5hZGRBcmd1bWVudChwcm90bywgcmVnVDIpOwotICAgIHN0dWJDYWxsLmNhbGwoZHN0KTsK
KworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25JbnN0YW5jZU9mLCBkc3QsIHJlZ1QwLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF90b19udW1iZXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTExMzIsOSArMTEzMSwxMCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhCiAgICAgCiAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAgICBKSVRTdHViQ2FsbCh0aGlz
LCBjdGlfb3BfY3JlYXRlX2FyZ3VtZW50cykuY2FsbCgpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYXJndW1lbnRzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHVubW9kaWZpZWRB
cmd1bWVudHNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzKSkpOworCisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25DcmVhdGVBcmd1bWVudHMpOworICAgIGVtaXRTdG9yZUNlbGwo
YXJndW1lbnRzLCByZXR1cm5WYWx1ZVJlZ2lzdGVyKTsKKyAgICBlbWl0U3RvcmVDZWxsKHVubW9k
aWZpZWRBcmd1bWVudHNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzKSksIHJldHVy
blZhbHVlUmVnaXN0ZXIpOwogICAgIAogICAgIHNraXBBcmd1bWVudHNDcmVhdGlvbi5saW5rKHRo
aXMpOwogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9nZXRfYnlfdmFsX2dl
bmVyaWMpOwpAQCAtMTI1Myw3ICsxMjUzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5
X3dpdGhfc2l6ZShJbgogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6
ZUFuZFByb2ZpbGUsIGRzdCwKICAgICAgICAgY3VycmVudEluc3RydWN0aW9uWzNdLnUuYXJyYXlB
bGxvY2F0aW9uUHJvZmlsZSwgcmVnVDApOwogI2Vsc2UKLSAgICBlbWl0TG9hZChzaXplSW5kZXgs
IHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJl
Z1QxLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXpl
QW5kUHJvZmlsZSwgZHN0LAogICAgICAgICBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5hcnJheUFs
bG9jYXRpb25Qcm9maWxlLCByZWdUMSwgcmVnVDApOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE1NzMzOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpZiBFTkFCTEUoSklUKQogI2luY2x1ZGUgIkpJVE9wZXJh
dGlvbnMuaCIKIAorI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkFycmF5Q29uc3Ry
dWN0b3IuaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJFcnJvci5o
IgpAQCAtMzQsNiArMzUsNyBAQAogI2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJuVmFsdWUuaCIKICNp
bmNsdWRlICJKSVRPcGVyYXRpb25XcmFwcGVycy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0
RnVuY3Rpb25zLmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIgogI2luY2x1
ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1
ZGUgIlJlcGF0Y2guaCIKQEAgLTc5Niw2ICs3OTgsMTAzIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTmUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFJlZ0V4cE9i
amVjdDo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVj
dHVyZSgpLCByZWdleHApKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25DaGVja0hhc0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbCkKK3sKKyAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKKworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
KyAgICBKU1ZhbHVlIGJhc2VWYWwgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWwpOwor
CisgICAgaWYgKGJhc2VWYWwuaXNPYmplY3QoKSkgeworICAgICAgICBKU09iamVjdCogYmFzZU9i
amVjdCA9IGFzT2JqZWN0KGJhc2VWYWwpOworICAgICAgICBBU1NFUlQoIWJhc2VPYmplY3QtPnN0
cnVjdHVyZSgpLT50eXBlSW5mbygpLmltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UoKSk7Cisg
ICAgICAgIGlmIChiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbXBsZW1lbnRz
SGFzSW5zdGFuY2UoKSkgeworICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBiYXNlT2JqZWN0LT5t
ZXRob2RUYWJsZSgpLT5jdXN0b21IYXNJbnN0YW5jZShiYXNlT2JqZWN0LCBleGVjLCB2YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihyZXN1bHQpKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHZtLT50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVJ
bnZhbGlkUGFyYW1ldGVyRXJyb3IoZXhlYywgImluc3RhbmNlb2YiLCBiYXNlVmFsKSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworfQorCitKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3Qg
b2Zmc2V0KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9
IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKHZtLCBleGVjLCBleGVjLT5yZWdpc3RlcnMoKSArIG9mZnNl
dCwgZXhlYy0+Y29kZUJsb2NrKCkpOworICAgIGV4ZWMtPnNldFNjb3BlKGFjdGl2YXRpb24pOwor
ICAgIHJldHVybiBhY3RpdmF0aW9uOworfQorCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQ3JlYXRlQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAg
ICAvLyBOQjogVGhpcyBuZWVkcyB0byBiZSBleGNlZWRpbmdseSBjYXJlZnVsIHdpdGggdG9wIGNh
bGwgZnJhbWUgdHJhY2tpbmcsIHNpbmNlIGl0CisgICAgLy8gbWF5IGJlIGNhbGxlZCBmcm9tIE9T
UiBleGl0LCB3aGlsZSB0aGUgc3RhdGUgb2YgdGhlIGNhbGwgc3RhY2sgaXMgYml6YXJyZS4KKyAg
ICBBcmd1bWVudHMqIHJlc3VsdCA9IEFyZ3VtZW50czo6Y3JlYXRlKHZtLCBleGVjKTsKKyAgICBB
U1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlbGV0ZUJ5SWQoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgY29uc3QgSWRlbnRpZmllciogaWRlbnRpZmll
cikKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKKworICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRCYXNlKS50b09iamVjdChleGVjKTsKKyAgICBib29sIGNvdWxkRGVsZXRl
ID0gYmFzZU9iai0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoYmFzZU9iaiwgZXhlYywg
KmlkZW50aWZpZXIpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGNvdWxkRGVsZXRl
KTsKKyAgICBpZiAoIWNvdWxkRGVsZXRlICYmIGV4ZWMtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1v
ZGUoKSkKKyAgICAgICAgdm0udGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4
ZWMsICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRQ
TmFtZXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqKQoreworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwor
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmotPnN0cnVjdHVyZSgpOworICAgIEpTUHJv
cGVydHlOYW1lSXRlcmF0b3IqIGpzUHJvcGVydHlOYW1lSXRlcmF0b3IgPSBzdHJ1Y3R1cmUtPmVu
dW1lcmF0aW9uQ2FjaGUoKTsKKyAgICBpZiAoIWpzUHJvcGVydHlOYW1lSXRlcmF0b3IgfHwganNQ
cm9wZXJ0eU5hbWVJdGVyYXRvci0+Y2FjaGVkUHJvdG90eXBlQ2hhaW4oKSAhPSBzdHJ1Y3R1cmUt
PnByb3RvdHlwZUNoYWluKGV4ZWMpKQorICAgICAgICBqc1Byb3BlcnR5TmFtZUl0ZXJhdG9yID0g
SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMsIG9iaik7CisgICAgcmV0dXJuIGpz
UHJvcGVydHlOYW1lSXRlcmF0b3I7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uSW5zdGFuY2VPZihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3RvKQoreworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwor
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBK
U1ZhbHVlIHByb3RvID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRQcm90byk7CisgICAgCisgICAg
QVNTRVJUKCF2YWx1ZS5pc09iamVjdCgpIHx8ICFwcm90by5pc09iamVjdCgpKTsKKworICAgIGJv
b2wgcmVzdWx0ID0gSlNPYmplY3Q6OmRlZmF1bHRIYXNJbnN0YW5jZShleGVjLCB2YWx1ZSwgcHJv
dG8pOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHJlc3VsdCkpOworfQor
CitDYWxsRnJhbWUqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTG9hZFZhcmFyZ3MoRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVGhpcywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEFyZ3VtZW50cywgaW50MzJfdCBmaXJzdEZyZWVSZWdpc3RlcikKK3sKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
KyAgICBKU1N0YWNrKiBzdGFjayA9ICZleGVjLT5pbnRlcnByZXRlcigpLT5zdGFjaygpOworICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRUaGlzKTsKKyAgICBK
U1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1lbnRzKTsKKyAg
ICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSA9IGxvYWRWYXJhcmdzKGV4ZWMsIHN0YWNrLCB0aGlz
VmFsdWUsIGFyZ3VtZW50cywgZmlyc3RGcmVlUmVnaXN0ZXIpOworICAgIHJldHVybiBuZXdDYWxs
RnJhbWU7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9PYmpl
Y3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkudG9P
YmplY3QoZXhlYykpOworfQorCiBKSVRIYW5kbGVyRW5jb2RlZCBKSVRfT1BFUkFUSU9OIGxvb2t1
cEV4Y2VwdGlvbkhhbmRsZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJ
KHJldmlzaW9uIDE1NzMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MiwxMyArNTIsMTUgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgQ2I6IENvZGVCbG9jayoKICAgICBEOiBkb3VibGUKICAgICBFOiBFeGVjU3RhdGUqCisg
ICAgRjogQ2FsbEZyYW1lKgogICAgIEk6IFN0cmluZ0ltcGwqCiAgICAgSWNmOiBJbmxpbmVDYWxM
RnJhbWUqCisgICAgSWRjOiBjb25zdCBJZGVudGlmaWVyKgogICAgIEo6IEVuY29kZWRKU1ZhbHVl
CiAgICAgSmNwOiBjb25zdCBKU1ZhbHVlKgogICAgIEpzczogSlNTdHJpbmcqCiAgICAgTzogSlNP
YmplY3QqCi0gICAgUDogcG9pbnRlciAodm9pZCopCisgICAgUDogcG9pbnRlciAoY2hhciopCiAg
ICAgUjogUmVnaXN0ZXIKICAgICBTOiBzaXplX3QKICAgICBTdDogU3RydWN0dXJlKgpAQCAtNjYs
OSArNjgsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgVzogV2F0Y2hwb2ludFNldCoKICAgICBa
OiBpbnQzMl90CiAqLwordHlwZWRlZiBDYWxsRnJhbWUqIEpJVF9PUEVSQVRJT04gKCpGX0pJVE9w
ZXJhdGlvbl9FSkpaKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IGludDMyX3QpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRP
cGVyYXRpb25fRSkoRXhlY1N0YXRlKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FQSkoRXhlY1N0YXRlKiwgSlNBcnJheSopOwogdHlwZWRl
ZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUFaKShFeGVj
U3RhdGUqLCBKU0FycmF5KiwgaW50MzJfdCk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FQWFwSikoRXhlY1N0YXRlKiwgQXJyYXlBbGxvY2F0
aW9uUHJvZmlsZSosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VBYXBKY3BaKShFeGVjU3RhdGUqLCBBcnJheUFs
bG9jYXRpb25Qcm9maWxlKiwgY29uc3QgSlNWYWx1ZSosIGludDMyX3QpOwogdHlwZWRlZiBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSos
IEpTQ2VsbCopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRP
cGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKIHR5cGVkZWYgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VDSSkoRXhlY1N0YXRl
KiwgSlNDZWxsKiwgU3RyaW5nSW1wbCopOwpAQCAtNzgsMTIgKzgzLDExIEBAIHR5cGVkZWYgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkoKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlv
bl9FSkEpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0FycmF5Kik7CiB0eXBlZGVmIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FSkkpKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FSklkYykoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXIqKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VKSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiAoKkpfSklUT3BlcmF0aW9uX0VKc3NaKShFeGVjU3RhdGUqLCBKU1N0cmluZyosIGludDMyX3Qp
OwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25f
RUpQKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgdm9pZCopOwogdHlwZWRlZiBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRVApKEV4ZWNTdGF0ZSosIHZv
aWQqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0
aW9uX0VBYXBKKShFeGVjU3RhdGUqLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiwgRW5jb2RlZEpT
VmFsdWUpOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVy
YXRpb25fRUFhcEpjcFopKEV4ZWNTdGF0ZSosIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqLCBjb25z
dCBKU1ZhbHVlKiwgaW50MzJfdCk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gKCpKX0pJVE9wZXJhdGlvbl9FUFApKEV4ZWNTdGF0ZSosIHZvaWQqLCB2b2lkKik7CiB0eXBl
ZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FUFMpKEV4
ZWNTdGF0ZSosIHZvaWQqLCBzaXplX3QpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRVNTKShFeGVjU3RhdGUqLCBzaXplX3QsIHNpemVfdCk7
CkBAIC05OSw2ICsxMDMsNyBAQCB0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklU
T3BlCiB0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VKc3NT
dCkoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBTdHJ1Y3R1cmUqKTsKIHR5cGVkZWYgSlNDZWxsKiBK
SVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUpzc0pzcykoRXhlY1N0YXRlKiwgSlNTdHJp
bmcqLCBKU1N0cmluZyopOwogdHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9w
ZXJhdGlvbl9FSnNzSnNzSnNzKShFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKiwgSlNT
dHJpbmcqKTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25f
RU8pKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7CiB0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElP
TiAoKkNfSklUT3BlcmF0aW9uX0VPWikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90KTsK
IHR5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRVN0KShFeGVj
U3RhdGUqLCBTdHJ1Y3R1cmUqKTsKIHR5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19K
SVRPcGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3QpOwpAQCAtMjM2LDcgKzI0MSwxNiBA
QCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5lCiBKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopIFdURl9J
TlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3UmVnZXhw
KEV4ZWNTdGF0ZSosIHZvaWQqKSBXVEZfSU5URVJOQUw7CiAKLX0KK0VuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQ2hlY2tIYXNJbnN0YW5jZShFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgYmFzZVZhbCkgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb24oRXhlY1N0YXRlKiwgaW50MzJf
dCBvZmZzZXQpIFdURl9JTlRFUk5BTDsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25D
cmVhdGVBcmd1bWVudHMoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25EZWxldGVCeUlkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlIGJhc2UsIGNvbnN0IElkZW50aWZpZXIqKSBXVEZfSU5URVJOQUw7CitKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uR2V0UE5hbWVzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KikgV1RGX0lO
VEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25JbnN0YW5jZU9m
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBwcm90bykgV1RGX0lO
VEVSTkFMOworQ2FsbEZyYW1lKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxvYWRWYXJhcmdzKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgYXJndW1l
bnRzLCBpbnQzMl90IGZpcnN0RnJlZVJlZ2lzdGVyKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvT2JqZWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlKSBXVEZfSU5URVJOQUw7CisKK30gLy8gZXh0ZXJuICJDIgogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
czMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxNTczMzkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04NSwxMSArODUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoSW5zdHJ1Y3Rpb24q
CiAgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgaW50
IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIGludCBwcm9wZXJ0
eSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgCi0gICAgSklUU3R1YkNh
bGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2RlbF9ieV9pZCk7Ci0gICAgc3R1YkNhbGwuYWRkQXJn
dW1lbnQoYmFzZSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cigmbV9j
b2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpKSk7Ci0gICAgc3R1YkNhbGwuY2FsbChkc3Qp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWQsIGRzdCwgcmVnVDEsIHJlZ1QwLCAmbV9j
b2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpKTsKIH0KIAogSklUOjpDb2RlUmVmIEpJVDo6
c3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKFZNKiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxNTczMzkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTA4LDEwICs1MDgsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dl
dHRlcl9zZXR0ZXIoSW5zdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlz
LCBjdGlfb3BfZGVsX2J5X2lkKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMik7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQo
VHJ1c3RlZEltbVB0cigmbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZCkpKTsKLSAgICBzdHViQ2FsbC5jYWxsKGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpOworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOworICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAg
ICBpbnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uRGVsZXRlQnlJZCwgZHN0LCByZWdUMCwgJm1fY29kZUJsb2NrLT5pZGVudGlmaWVyKHBy
b3BlcnR5KSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
cy5jcHAJKHJldmlzaW9uIDE1NzMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NDEsMjkgKzg0MSw2IEBAIERFRklORV9TVFVC
X0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CiB9CiAKLURFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9j
aGVja19oYXNfaW5zdGFuY2UpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJh
bWUpOwotCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsK
LSAgICBKU1ZhbHVlIHZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKLSAgICBK
U1ZhbHVlIGJhc2VWYWwgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpOwotCi0gICAgaWYg
KGJhc2VWYWwuaXNPYmplY3QoKSkgewotICAgICAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFz
T2JqZWN0KGJhc2VWYWwpOwotICAgICAgICBBU1NFUlQoIWJhc2VPYmplY3QtPnN0cnVjdHVyZSgp
LT50eXBlSW5mbygpLmltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UoKSk7Ci0gICAgICAgIGlm
IChiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbXBsZW1lbnRzSGFzSW5zdGFu
Y2UoKSkgewotICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBiYXNlT2JqZWN0LT5tZXRob2RUYWJs
ZSgpLT5jdXN0b21IYXNJbnN0YW5jZShiYXNlT2JqZWN0LCBjYWxsRnJhbWUsIHZhbHVlKTsKLSAg
ICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihyZXN1bHQpKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHN0YWNrRnJhbWUudm0tPnRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgY3JlYXRlSW52
YWxpZFBhcmFtZXRlckVycm9yKGNhbGxGcmFtZSwgImluc3RhbmNlb2YiLCBiYXNlVmFsKSk7Ci0g
ICAgVk1fVEhST1dfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKLX0KLQogI2lmIEVOQUJMRShERkdfSklUKQogREVGSU5FX1NUVUJfRlVO
Q1RJT04odm9pZCwgb3B0aW1pemUpCiB7CkBAIC0xMTAwLDU1ICsxMDc3LDYgQEAgREVGSU5FX1NU
VUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CiAKLURFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9pbnN0YW5jZW9mKQot
ewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9
IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSBwcm90byA9IHN0YWNr
RnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7Ci0gICAgCi0gICAgQVNTRVJUKCF2YWx1ZS5pc09iamVj
dCgpIHx8ICFwcm90by5pc09iamVjdCgpKTsKLQotICAgIGJvb2wgcmVzdWx0ID0gSlNPYmplY3Q6
OmRlZmF1bHRIYXNJbnN0YW5jZShjYWxsRnJhbWUsIHZhbHVlLCBwcm90byk7Ci0gICAgQ0hFQ0tf
Rk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihyZXN1bHQpKTsKLX0KLQotREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUs
IG9wX2RlbF9ieV9pZCkKLXsKLSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7
Ci0KLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotICAg
IAotICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKS50
b09iamVjdChjYWxsRnJhbWUpOwotCi0gICAgYm9vbCBjb3VsZERlbGV0ZSA9IGJhc2VPYmotPm1l
dGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KGJhc2VPYmosIGNhbGxGcmFtZSwgc3RhY2tGcmFt
ZS5hcmdzWzFdLmlkZW50aWZpZXIoKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4o
Y291bGREZWxldGUpOwotICAgIGlmICghY291bGREZWxldGUgJiYgY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKS0+aXNTdHJpY3RNb2RlKCkpCi0gICAgICAgIHN0YWNrRnJhbWUudm0tPnRocm93RXhjZXB0
aW9uKHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBjcmVhdGVUeXBlRXJyb3Ioc3RhY2tGcmFtZS5jYWxs
RnJhbWUsICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKLQotICAgIENIRUNLX0ZPUl9F
WENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwot
fQotCi1ERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX3B1c2hfYWN0aXZhdGlvbikK
LXsKLSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0KLSAgICBKU0FjdGl2
YXRpb24qIGFjdGl2YXRpb24gPSBKU0FjdGl2YXRpb246OmNyZWF0ZShzdGFja0ZyYW1lLmNhbGxG
cmFtZS0+dm0oKSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5j
b2RlQmxvY2soKSk7Ci0gICAgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnNldFNjb3BlKGFjdGl2YXRp
b24pOwotICAgIHJldHVybiBhY3RpdmF0aW9uOwotfQotCi1ERUZJTkVfU1RVQl9GVU5DVElPTihF
bmNvZGVkSlNWYWx1ZSwgb3BfY3JlYXRlX2FyZ3VtZW50cykKLXsKLSAgICBTVFVCX0lOSVRfU1RB
Q0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0KLSAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IEFyZ3Vt
ZW50czo6Y3JlYXRlKCpzdGFja0ZyYW1lLnZtLCBzdGFja0ZyYW1lLmNhbGxGcmFtZSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGFyZ3VtZW50cykpOwotfQotCiBERUZJTkVf
U1RVQl9GVU5DVElPTih2b2lkLCBvcF90ZWFyX29mZl9hY3RpdmF0aW9uKQogewogICAgIFNUVUJf
SU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKQEAgLTEzOTIsMjIgKzEzMjAsNiBAQCBERUZJ
TkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfYnlfdmFsCiAgICAgQ0hFQ0tfRk9SX0VYQ0VQ
VElPTl9BVF9FTkQoKTsKIH0KIAotREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCosIG9wX2xvYWRf
dmFyYXJncykKLXsKLSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0KLSAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotICAgIEpTU3Rh
Y2sqIHN0YWNrID0gc3RhY2tGcmFtZS5zdGFjazsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0
YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBzdGFj
a0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpOwotICAgIGludCBmaXJzdEZyZWVSZWdpc3RlciA9IHN0
YWNrRnJhbWUuYXJnc1syXS5pbnQzMigpOwotCi0gICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUg
PSBsb2FkVmFyYXJncyhjYWxsRnJhbWUsIHN0YWNrLCB0aGlzVmFsdWUsIGFyZ3VtZW50cywgZmly
c3RGcmVlUmVnaXN0ZXIpOwotICAgIGlmICghbmV3Q2FsbEZyYW1lKQotICAgICAgICBWTV9USFJP
V19FWENFUFRJT04oKTsKLSAgICByZXR1cm4gbmV3Q2FsbEZyYW1lOwotfQotCiBERUZJTkVfU1RV
Ql9GVU5DVElPTih2b2lkKiwgb3BfdGhyb3cpCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1F
KHN0YWNrRnJhbWUpOwpAQCAtMTQxNywxOSArMTMyOSw2IEBAIERFRklORV9TVFVCX0ZVTkNUSU9O
KHZvaWQqLCBvcF90aHJvdykKICAgICByZXR1cm4gaGFuZGxlci5jYWxsRnJhbWU7CiB9CiAKLURF
RklORV9TVFVCX0ZVTkNUSU9OKEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqLCBvcF9nZXRfcG5hbWVz
KQotewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgSlNPYmplY3QqIG8g
PSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNPYmplY3QoKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IG8tPnN0cnVjdHVyZSgpOwotICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGpzUHJvcGVy
dHlOYW1lSXRlcmF0b3IgPSBzdHJ1Y3R1cmUtPmVudW1lcmF0aW9uQ2FjaGUoKTsKLSAgICBpZiAo
IWpzUHJvcGVydHlOYW1lSXRlcmF0b3IgfHwganNQcm9wZXJ0eU5hbWVJdGVyYXRvci0+Y2FjaGVk
UHJvdG90eXBlQ2hhaW4oKSAhPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGNhbGxGcmFtZSkp
Ci0gICAgICAgIGpzUHJvcGVydHlOYW1lSXRlcmF0b3IgPSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
OjpjcmVhdGUoY2FsbEZyYW1lLCBvKTsKLSAgICByZXR1cm4ganNQcm9wZXJ0eU5hbWVJdGVyYXRv
cjsKLX0KLQogREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHVzaF93aXRoX3Njb3BlKQog
ewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKQEAgLTE2MTAsMTQgKzE1
MDksNiBAQCBFeGNlcHRpb25IYW5kbGVyIEpJVF9TVFVCIGN0aV92bV9oYW5kbGVfCiB9CiAjZW5k
aWYKIAotREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIHRvX29iamVjdCkKLXsK
LSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0KLSAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKS50b09iamVjdChjYWxsRnJhbWUpKTsK
LX0KLQogREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX3Jlc29sdmVfc2Nv
cGUpCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gMTU3MzM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzAsOSAr
MzMwLDYgQEAgZXh0ZXJuICJDIiB2b2lkIGN0aU1hc21Qcm9iZVRyYW1wb2xpbmUoKQogdm9pZCBw
ZXJmb3JtUGxhdGZvcm1TcGVjaWZpY0pJVEFzc2VydGlvbnMoVk0qKTsKIAogZXh0ZXJuICJDIiB7
Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfY2hlY2tfaGFzX2luc3RhbmNlKFNUVUJf
QVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIg
Y3RpX29wX2NyZWF0ZV9hcmd1bWVudHMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJO
QUw7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZGVsX2J5X2lkKFNUVUJfQVJHU19E
RUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29w
X2dldF9ieV9pZChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKIEVuY29kZWRK
U1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFpbChTVFVCX0FSR1NfREVD
TEFSQVRJT04pIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9n
ZXRfYnlfaWRfY3VzdG9tX3N0dWIoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7
CkBAIC0zNDYsMTQgKzM0Myw5IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRf
YnlfaWQKIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfdmFsKFNUVUJfQVJH
U19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3Rp
X29wX2dldF9ieV92YWxfZ2VuZXJpYyhTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5B
TDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfdmFsX3N0cmluZyhTVFVC
X0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9TVFVC
IGN0aV9vcF9pbnN0YW5jZW9mKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwot
RW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX3RvX29iamVjdChTVFVCX0FSR1NfREVDTEFSQVRJ
T04pIFdURl9JTlRFUk5BTDsKLUpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3BfcHVzaF9hY3RpdmF0
aW9uKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfU1RVQiBj
dGlfb3BfcHVzaF9uYW1lX3Njb3BlKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFM
Owogdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHVzaF93aXRoX3Njb3BlKFNUVUJfQVJHU19ERUNMQVJB
VElPTikgV1RGX0lOVEVSTkFMOwogSlNPYmplY3QqIEpJVF9TVFVCIGN0aV9vcF9wdXRfYnlfaWRf
dHJhbnNpdGlvbl9yZWFsbG9jKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwot
SlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogSklUX1NUVUIgY3RpX29wX2dldF9wbmFtZXMoU1RVQl9B
UkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Ci12b2lkKiBKSVRfU1RVQiBjdGlfb3BfbG9h
ZF92YXJhcmdzKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRf
U1RVQiBjdGlfaGFuZGxlX3dhdGNoZG9nX3RpbWVyKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RG
X0lOVEVSTkFMOwogdm9pZCBKSVRfU1RVQiBjdGlfb3BfZGVidWcoU1RVQl9BUkdTX0RFQ0xBUkFU
SU9OKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wb3Bfc2NvcGUoU1RVQl9B
UkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Cg==
</data>
<flag name="review"
          id="236618"
          type_id="1"
          status="-"
          setter="msaboff"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214129</attachid>
            <date>2013-10-13 23:53:02 -0700</date>
            <delta_ts>2013-10-14 09:35:20 -0700</delta_ts>
            <desc>patch 2: with Michael&apos;s feedback applied.</desc>
            <filename>bug-122645.patch</filename>
            <type>text/plain</type>
            <size>44030</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3Mzg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBA
CisyMDEzLTEwLTEzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBU
cmFuc2l0aW9uIG1pc2MgY3RpX29wXyogSklUU3R1YnMgdG8gSklUIG9wZXJhdGlvbnMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjI2NDUuCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3R1YnMgY29udmVy
dGVkOgorICAgICAgICAgICAgY3RpX29wX2NoZWNrX2hhc19pbnN0YW5jZQorICAgICAgICAgICAg
Y3RpX29wX2NyZWF0ZV9hcmd1bWVudHMKKyAgICAgICAgICAgIGN0aV9vcF9kZWxfYnlfaWQKKyAg
ICAgICAgICAgIGN0aV9vcF9pbnN0YW5jZW9mCisgICAgICAgICAgICBjdGlfdG9fb2JqZWN0Cisg
ICAgICAgICAgICBjdGlfb3BfcHVzaF9hY3RpdmF0aW9uCisgICAgICAgICAgICBjdGlfb3BfZ2V0
X3BuYW1lcworICAgICAgICAgICAgY3RpX29wX2xvYWRfdmFyYXJncworCisgICAgICAgICogZGZn
L0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAg
ICAgICogaml0L0NDYWxsSGVscGVycy5oOgorICAgICAgICAoSlNDOjpDQ2FsbEhlbHBlcnM6OnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTdG9yZUNlbGwpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAqIGppdC9K
SVRDYWxsMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyk6
CisgICAgICAgICogaml0L0pJVElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SklUOjpjYWxsT3Bl
cmF0aW9uKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9nZXRfcG5hbWVzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0
ZV9hY3RpdmF0aW9uKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV9hcmd1bWVu
dHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2NoZWNrX2hhc19pbnN0YW5jZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbCk6CisgICAgICAgICogaml0
L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfY2hl
Y2tfaGFzX2luc3RhbmNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0YW5j
ZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9wbmFtZXMpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX2FjdGl2YXRpb24pOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfY3JlYXRlX2FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3Bw
OgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgICogaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV9pZCk6Cisg
ICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfZGVsX2J5X2lkKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAg
ICAgICAqIGppdC9KSVRTdHVicy5oOgorCiAyMDEzLTEwLTEzICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CiAKICAgICAgICAgRlRMIE9TUiBleGl0IHNob3VsZCBwZXJmb3JtIHplcm8g
ZXh0ZW5zaW9uIG9uIHZhbHVlcyBzbWFsbGVyIHRoYW4gNjQtYml0CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE1NzMzOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY4MCwyNiArNjgwLDYgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdG
bG9hdDY0QQogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50PEpTRmxvYXQ2
NEFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSk7CiB9CiAKLUpTQ2VsbCogSklU
X09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgaW50
MzJfdCBvZmZzZXQpCi17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Ci0gICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0
aW9uID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUodm0sIGV4ZWMsIGV4ZWMtPnJlZ2lzdGVycygpICsg
b2Zmc2V0LCBleGVjLT5jb2RlQmxvY2soKSk7Ci0gICAgZXhlYy0+c2V0U2NvcGUoYWN0aXZhdGlv
bik7Ci0gICAgcmV0dXJuIGFjdGl2YXRpb247Ci19Ci0KLUpTQ2VsbCogSklUX09QRVJBVElPTiBv
cGVyYXRpb25DcmVhdGVBcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjKQotewotICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OwotICAgIC8vIE5COiBUaGlzIG5lZWRzIHRvIGJlIGV4Y2VlZGluZ2x5IGNhcmVmdWwgd2l0aCB0
b3AgY2FsbCBmcmFtZSB0cmFja2luZywgc2luY2UgaXQKLSAgICAvLyBtYXkgYmUgY2FsbGVkIGZy
b20gT1NSIGV4aXQsIHdoaWxlIHRoZSBzdGF0ZSBvZiB0aGUgY2FsbCBzdGFjayBpcyBiaXphcnJl
LgotICAgIEFyZ3VtZW50cyogcmVzdWx0ID0gQXJndW1lbnRzOjpjcmVhdGUodm0sIGV4ZWMpOwot
ICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIEpT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVJbmxpbmVkQXJndW1lbnRzKAogICAg
IEV4ZWNTdGF0ZSogZXhlYywgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24g
MTU3MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTkwLDggKzkwLDYgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25SZQogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdChF
eGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CiBzaXplX3QgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5B
TDsKIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcShFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ay
KSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQWN0
aXZhdGlvbihFeGVjU3RhdGUqLCBpbnQzMl90IG9mZnNldCkgV1RGX0lOVEVSTkFMOwotSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFyZ3VtZW50cyhFeGVjU3RhdGUqKSBXVEZf
SU5URVJOQUw7CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlSW5saW5lZEFy
Z3VtZW50cyhFeGVjU3RhdGUqLCBJbmxpbmVDYWxsRnJhbWUqKSBXVEZfSU5URVJOQUw7CiB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZkFyZ3VtZW50cyhFeGVjU3RhdGUqLCBKU0Nl
bGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
VGVhck9mZklubGluZWRBcmd1bWVudHMoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKiwgSW5s
aW5lQ2FsbEZyYW1lKikgV1RGX0lOVEVSTkFMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAxNTczMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNzMsNiArMzczLDE3
IEBAIHB1YmxpYzoKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzUpOwogICAgIH0KIAorICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFy
ZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMywgR1BSUmVnIGFyZzQsIFRydXN0ZWRJbW0zMiBh
cmc1KQorICAgIHsKKyAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7CisgICAgICAgIGFkZENh
bGxBcmd1bWVudChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIGFkZENhbGxB
cmd1bWVudChhcmcxKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzIpOworICAgICAgICBh
ZGRDYWxsQXJndW1lbnQoYXJnMyk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc0KTsKKyAg
ICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzUpOworICAgIH0KKwogICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRlBSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
KQogICAgIHsKICAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7CkBAIC05NDksNyArOTYwLDcg
QEAgcHVibGljOgogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShUcnVzdGVkSW1tUHRyIGFyZzEsIEdQUlJlZyBhcmcyLCBUcnVzdGVkSW1tMzIgYXJn
MykKICAgICB7Ci0gICAgICAgIG1vdmUoYXJnMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAg
ICAgICAgbW92ZShhcmcyLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOyAvLyBJbiBjYXNlIGFyZzIg
aXMgYXJndW1lbnRHUFIxLgogICAgICAgICBtb3ZlKGFyZzEsIEdQUkluZm86OmFyZ3VtZW50R1BS
MSk7CiAgICAgICAgIG1vdmUoYXJnMywgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKICAgICAgICAg
bW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
QEAgLTEwNDEsNiArMTA1MiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJn
MiwgR1BSUmVnIGFyZzMsIEdQUlJlZyBhcmc0LCBUcnVzdGVkSW1tMzIgYXJnNSkKKyAgICB7Cisg
ICAgICAgIHBva2UoYXJnNSwgUE9LRV9BUkdVTUVOVF9PRkZTRVQgKyAxKTsKKyAgICAgICAgcG9r
ZShhcmc0LCBQT0tFX0FSR1VNRU5UX09GRlNFVCk7CisgICAgICAgIHNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKKyAgICB9CisKICAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMiBhcmcxLCBHUFJS
ZWcgYXJnMiwgR1BSUmVnIGFyZzMsIEdQUlJlZyBhcmc0KQogICAgIHsKICAgICAgICAgcG9rZShh
cmc0LCBQT0tFX0FSR1VNRU5UX09GRlNFVCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJ
KHJldmlzaW9uIDE1NzMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3Mg
RnVuY3Rpb25FeGVjdXRhYmxlOwogICAgIGNsYXNzIEpJVDsKICAgICBjbGFzcyBKU1Byb3BlcnR5
TmFtZUl0ZXJhdG9yOworICAgIGNsYXNzIElkZW50aWZpZXI7CiAgICAgY2xhc3MgSW50ZXJwcmV0
ZXI7CiAgICAgY2xhc3MgSlNTY29wZTsKICAgICBjbGFzcyBKU1N0YWNrOwpAQCAtNjE4LDYgKzYx
OSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHBheWxvYWQpOwogICAgICAgICB9CisgICAgICAgIHZvaWQgZW1p
dFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIHBheWxvYWQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBwYXlsb2FkKTsK
KyAgICAgICAgfQogCiAgICAgICAgIGludDMyX3QgZ2V0Q29uc3RhbnRPcGVyYW5kSW1tZWRpYXRl
SW50KGludCBzcmMpOwogCkBAIC04NjcsMTYgKzg3MiwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhj
b25zdCBGdW5jdGlvblB0ciYpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRD
YWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVuY3Rpb25QdHImKTsK
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHImLCBpbnQpOworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0UpOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VPLCBH
UFJSZWcpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklU
T3BlcmF0aW9uX0VTdCwgU3RydWN0dXJlKik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRVosIGludDMyX3QpOworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEZfSklUT3BlcmF0aW9uX0VKSlosIEdQUlJl
ZywgR1BSUmVnLCBpbnQzMl90KTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FLCBpbnQpOwotI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUFh
cEosIGludCwgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSosIEdQUlJlZyk7Ci0jZWxzZQotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VBYXBK
LCBpbnQsIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqLCBHUFJSZWcsIEdQUlJlZyk7Ci0jZW5kaWYK
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlv
bl9FQWFwSmNwWiwgaW50LCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiwgR1BSUmVnLCBpbnQzMl90
KTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJh
dGlvbl9FQWFwSmNwWiwgaW50LCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiwgY29uc3QgSlNWYWx1
ZSosIGludDMyX3QpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfSklUT3BlcmF0aW9uX0VDLCBpbnQsIEpTQ2VsbCopOworICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKLCBpbnQsIEdQUlJlZyk7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25f
RUpJZGMsIGludCwgR1BSUmVnLCBjb25zdCBJZGVudGlmaWVyKik7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKLCBpbnQsIEdQUlJl
ZywgR1BSUmVnKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0pJVE9wZXJhdGlvbl9FUCwgaW50LCB2b2lkKik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25fRUNDLCBSZWdpc3RlcklELCBSZWdpc3Rl
cklEKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0pJVE9w
ZXJhdGlvbl9FSiwgUmVnaXN0ZXJJRCk7CkBAIC04ODYsNiArODk0LDExIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aENhbGxG
cmFtZVJvbGxiYWNrT25FeGNlcHRpb24oVl9KSVRPcGVyYXRpb25fRUNiLCBDb2RlQmxvY2sqKTsK
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVS
b2xsYmFja09uRXhjZXB0aW9uKFpfSklUT3BlcmF0aW9uX0UpOwogI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRl9KSVRPcGVy
YXRpb25fRUpKWiwgR1BSUmVnLCBHUFJSZWcsIEdQUlJlZywgR1BSUmVnLCBpbnQzMl90KTsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9F
QWFwSiwgaW50LCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiwgR1BSUmVnLCBHUFJSZWcpOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VK
LCBpbnQsIEdQUlJlZywgR1BSUmVnKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSklkYywgaW50LCBHUFJSZWcsIEdQUlJlZywgY29u
c3QgSWRlbnRpZmllciopOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfSklUT3BlcmF0aW9uX0VKSiwgaW50LCBHUFJSZWcsIEdQUlJlZywgR1BSUmVnLCBHUFJS
ZWcpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3Bl
cmF0aW9uX0VKLCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsKICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0pJVE9wZXJhdGlvbl9FSkosIFJlZ2lzdGVySUQsIFJl
Z2lzdGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQpOwogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAxNTczMzkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE5MCwxMSArMTkwLDEwIEBAIHZvaWQgSklUOjpjb21waWxlTG9hZFZhcmFyZ3MoSW5z
dHJ1Y3Rpb24KICAgICBpZiAoY2FuT3B0aW1pemUpCiAgICAgICAgIHNsb3dDYXNlLmxpbmsodGhp
cyk7CiAKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfbG9hZF92YXJhcmdz
KTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudCh0aGlzVmFsdWUpOwotICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KGFyZ3VtZW50cyk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tMzIoZmly
c3RGcmVlUmVnaXN0ZXIpKTsKLSAgICBzdHViQ2FsbC5jYWxsKHJlZ1QzKTsKKyAgICBlbWl0TG9h
ZCh0aGlzVmFsdWUsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdExvYWQoYXJndW1lbnRzLCByZWdU
MywgcmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MsIHJlZ1Qx
LCByZWdUMCwgcmVnVDMsIHJlZ1QyLCBmaXJzdEZyZWVSZWdpc3Rlcik7CisgICAgbW92ZShyZXR1
cm5WYWx1ZVJlZ2lzdGVyLCByZWdUMyk7CiAKICAgICBpZiAoY2FuT3B0aW1pemUpCiAgICAgICAg
IGVuZC5saW5rKHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3Bw
CShyZXZpc2lvbiAxNTczMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksMTEgKzExOSwxMCBAQCB2b2lkIEpJVDo6Y29tcGls
ZUxvYWRWYXJhcmdzKEluc3RydWN0aW9uCiAgICAgaWYgKGNhbk9wdGltaXplKQogICAgICAgICBz
bG93Q2FzZS5saW5rKHRoaXMpOwogCi0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3Rp
X29wX2xvYWRfdmFyYXJncyk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQodGhpc1ZhbHVlLCBy
ZWdUMCk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tMzIoZmlyc3RGcmVlUmVnaXN0ZXIpKTsKLSAgICBzdHVi
Q2FsbC5jYWxsKHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWYWx1ZSwg
cmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMSk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Mb2FkVmFyYXJncywgcmVnVDAsIHJlZ1QxLCBmaXJz
dEZyZWVSZWdpc3Rlcik7CisgICAgbW92ZShyZXR1cm5WYWx1ZVJlZ2lzdGVyLCByZWdUMSk7CiAK
ICAgICBpZiAoY2FuT3B0aW1pemUpCiAgICAgICAgIGVuZC5saW5rKHRoaXMpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDE1NzMzOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzEsMTggKzIzMSw1MSBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6
CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgSklUOjpjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uKQoreworICAg
IHNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7CisgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKK30KKworQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRU8gb3BlcmF0aW9uLCBH
UFJSZWcgYXJnKQoreworICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcpOworICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7Cit9CisKIEFM
V0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKENfSklU
T3BlcmF0aW9uX0VTdCBvcGVyYXRpb24sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIHNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOwogICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiB9CiAKK0FM
V0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKENfSklU
T3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwgaW50MzJfdCBhcmcpCit7CisgICAgc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihhcmcpKTsKKyAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOworfQorCisKKyNpZiBVU0UoSlNWQUxVRTY0
KQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24o
Rl9KSVRPcGVyYXRpb25fRUpKWiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwg
aW50MzJfdCBhcmczKQoreworICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBh
cmcyLCBUcnVzdGVkSW1tMzIoYXJnMykpOworICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvbik7Cit9CisjZW5kaWYKKwogQUxXQVlTX0lOTElORSBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRSBvcGVyYXRp
b24sIGludCBkc3QpCiB7CiAgICAgc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQob3BlcmF0aW9u
LCBkc3QpOwogfQogCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2Fs
bE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQWFwSiBvcGVyYXRpb24sIGludCBkc3QsIEFycmF5
QWxsb2NhdGlvblByb2ZpbGUqIGFyZzEsIEdQUlJlZyBhcmcyKQoreworICAgIHNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGFyZzEpLCBhcmcyKTsKKyAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQob3BlcmF0aW9uLCBk
c3QpOworfQorCiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9w
ZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQWFwSmNwWiBvcGVyYXRpb24sIGludCBkc3QsIEFycmF5
QWxsb2NhdGlvblByb2ZpbGUqIGFyZzEsIEdQUlJlZyBhcmcyLCBpbnQzMl90IGFyZzMpCiB7CiAg
ICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoYXJnMSksIGFyZzIs
IFRydXN0ZWRJbW0zMihhcmczKSk7CkBAIC0yNjEsNiArMjk0LDI0IEBAIEFMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQob3BlcmF0aW9uLCBkc3QpOwogfQogCitBTFdBWVNf
SU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJh
dGlvbl9FSiBvcGVyYXRpb24sIGludCBkc3QsIEdQUlJlZyBhcmcxKQoreworICAgIHNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKKyAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQob3BlcmF0aW9uLCBkc3QpOworfQorCitBTFdBWVNf
SU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJh
dGlvbl9FSklkYyBvcGVyYXRpb24sIGludCBkc3QsIEdQUlJlZyBhcmcxLCBjb25zdCBJZGVudGlm
aWVyKiBhcmcyKQoreworICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVz
dGVkSW1tUHRyKGFyZzIpKTsKKyAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldEpTVmFsdWVSZXN1bHQob3BlcmF0aW9uLCBkc3QpOworfQorCitBTFdBWVNfSU5MSU5FIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkog
b3BlcmF0aW9uLCBpbnQgZHN0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCit7CisgICAgc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOworICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChvcGVyYXRpb24sIGRzdCk7Cit9
CisKIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9u
KEpfSklUT3BlcmF0aW9uX0VQIG9wZXJhdGlvbiwgaW50IGRzdCwgdm9pZCogcG9pbnRlcikKIHsK
ICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihwb2ludGVyKSk7
CkBAIC0zMjcsMTIgKzM3OCwzNiBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IEpJVDo6CiAjZGVmaW5lIFNINF8zMkJJVF9EVU1NWV9BUkcKICNlbmRpZgogCitBTFdBWVNfSU5M
SU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihGX0pJVE9wZXJhdGlv
bl9FSkpaIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BS
UmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCwgaW50MzJfdCBhcmczKQoreworICAgIHNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9h
ZCwgYXJnMVRhZywgU0g0XzMyQklUX0RVTU1ZX0FSRyBhcmcyUGF5bG9hZCwgYXJnMlRhZywgVHJ1
c3RlZEltbTMyKGFyZzMpKTsKKyAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
ayhvcGVyYXRpb24pOworfQorCiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJ
VDo6Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQWFwSiBvcGVyYXRpb24sIGludCBkc3Qs
IEFycmF5QWxsb2NhdGlvblByb2ZpbGUqIGFyZzEsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJn
MlBheWxvYWQpCiB7CiAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1Q
dHIoYXJnMSksIEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzJQYXlsb2FkLCBhcmcyVGFnKTsKICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQob3Bl
cmF0aW9uLCBkc3QpOwogfQogCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJ
VDo6Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRpb24sIGludCBkc3QsIEdQ
UlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCit7CisgICAgc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnKTsK
KyAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQo
b3BlcmF0aW9uLCBkc3QpOworfQorCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IEpJVDo6Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSklkYyBvcGVyYXRpb24sIGludCBk
c3QsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIGNvbnN0IElkZW50aWZpZXIq
IGFyZzIpCit7CisgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVN
TVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBUcnVzdGVkSW1tUHRyKGFyZzIpKTsKKyAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQob3BlcmF0
aW9uLCBkc3QpOworfQorCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6
Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBpbnQgZHN0LCBHUFJS
ZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMlRhZywgR1BSUmVnIGFy
ZzJQYXlsb2FkKQoreworICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklU
X0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgU0g0XzMyQklUX0RVTU1ZX0FSRyBhcmcy
UGF5bG9hZCwgYXJnMlRhZyk7CisgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRKU1ZhbHVlUmVzdWx0KG9wZXJhdGlvbiwgZHN0KTsKK30KKwogQUxXQVlTX0lOTElORSBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25fRUog
b3BlcmF0aW9uLCBSZWdpc3RlcklEIGFyZ1RhZywgUmVnaXN0ZXJJRCBhcmdQYXlsb2FkKQogewog
ICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmdQ
YXlsb2FkLCBhcmdUYWcpOwpAQCAtMzQ4LDE0ICs0MjMsNiBAQCBBTFdBWVNfSU5MSU5FIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAjdW5kZWYgRUFCSV8zMkJJVF9EVU1NWV9BUkcKICN1bmRl
ZiBTSDRfMzJCSVRfRFVNTVlfQVJHCiAKLSNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCi0KLUFM
V0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKEpfSklU
T3BlcmF0aW9uX0VBYXBKIG9wZXJhdGlvbiwgaW50IGRzdCwgQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSogYXJnMSwgR1BSUmVnIGFyZzIpCi17Ci0gICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KFRydXN0ZWRJbW1QdHIoYXJnMSksIGFyZzIpOwotICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChvcGVyYXRpb24sIGRzdCk7Ci19Ci0KICNlbmRp
ZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiBBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmNo
ZWNrU3RydWN0dXJlKFJlZ2lzdGVySUQgcmVnLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlz
aW9uIDE1NzMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk2LDEwICsyOTYsOSBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfY2hlY2tfaGFzX2luc3RhbmNlCiAgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRl
ciwgYmFzZVZhbCk7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCi0gICAgSklUU3R1YkNhbGwg
c3R1YkNhbGwodGhpcywgY3RpX29wX2NoZWNrX2hhc19pbnN0YW5jZSk7Ci0gICAgc3R1YkNhbGwu
YWRkQXJndW1lbnQodmFsdWUpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KGJhc2VWYWwpOwot
ICAgIHN0dWJDYWxsLmNhbGwoZHN0KTsKKyAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1Qw
KTsKKyAgICBlbWl0TG9hZChiYXNlVmFsLCByZWdUMywgcmVnVDIpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ2hlY2tIYXNJbnN0YW5jZSwgZHN0LCByZWdUMSwgcmVnVDAsIHJlZ1QzLCBy
ZWdUMik7CiAKICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlv
bls0XS51Lm9wZXJhbmQpOwogfQpAQCAtMzE0LDEwICszMTMsOSBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5zdGFuY2VvZihJbnN0cnVjCiAgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRl
ciwgcHJvdG8pOwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAotICAgIEpJVFN0dWJDYWxsIHN0
dWJDYWxsKHRoaXMsIGN0aV9vcF9pbnN0YW5jZW9mKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVu
dCh2YWx1ZSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocHJvdG8pOwotICAgIHN0dWJDYWxs
LmNhbGwoZHN0KTsKKyAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0
TG9hZChwcm90bywgcmVnVDMsIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklu
c3RhbmNlT2YsIGRzdCwgcmVnVDEsIHJlZ1QwLCByZWdUMywgcmVnVDIpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc191bmRlZmluZWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTg0OSw5ICs4NDcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcG5hbWVzKEluc3RydWN0
aW9uCiAgICAgLy8gV2UgY291bGQgaW5saW5lIHRoZSBjYXNlIHdoZXJlIHlvdSBoYXZlIGEgdmFs
aWQgY2FjaGUsIGJ1dAogICAgIC8vIHRoaXMgY2FsbCBkb2Vzbid0IHNlZW0gdG8gYmUgaG90Lgog
ICAgIExhYmVsIGlzT2JqZWN0KHRoaXMpOwotICAgIEpJVFN0dWJDYWxsIGdldFBuYW1lc1N0dWJD
YWxsKHRoaXMsIGN0aV9vcF9nZXRfcG5hbWVzKTsKLSAgICBnZXRQbmFtZXNTdHViQ2FsbC5hZGRB
cmd1bWVudChyZWdUMCk7Ci0gICAgZ2V0UG5hbWVzU3R1YkNhbGwuY2FsbChkc3QpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0UE5hbWVzLCByZWdUMCk7CisgICAgZW1pdFN0b3JlQ2Vs
bChkc3QsIHJldHVyblZhbHVlUmVnaXN0ZXIpOwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBP
QkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciwgbV9qc1N0cmluZ3NTaXplKSks
IHJlZ1QzKTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihJbnQzMlRhZyksIGludFRhZ0Zvcihp
KSk7CiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIGludFBheWxvYWRGb3IoaSkpOwpAQCAt
ODYyLDkgKzg1OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wbmFtZXMoSW5zdHJ1Y3Rpb24K
ICAgICBpc05vdE9iamVjdC5saW5rKHRoaXMpOwogICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWws
IHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZykpLCBicmVha1RhcmdldCk7CiAg
ICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpV
bmRlZmluZWRUYWcpKSwgYnJlYWtUYXJnZXQpOwotICAgIEpJVFN0dWJDYWxsIHRvT2JqZWN0U3R1
YkNhbGwodGhpcywgY3RpX3RvX29iamVjdCk7Ci0gICAgdG9PYmplY3RTdHViQ2FsbC5hZGRBcmd1
bWVudChyZWdUMSwgcmVnVDApOwotICAgIHRvT2JqZWN0U3R1YkNhbGwuY2FsbChiYXNlKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRvT2JqZWN0LCBiYXNlLCByZWdUMSwgcmVnVDApOwog
ICAgIGp1bXAoKS5saW5rVG8oaXNPYmplY3QsIHRoaXMpOwogCiAgICAgZW5kLmxpbmsodGhpcyk7
CkBAIC0xMDg5LDcgKzEwODQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfYWN0aXZhdGlv
bihJbnN0CiAgICAgaW50IGFjdGl2YXRpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOwogICAgIAogICAgIEp1bXAgYWN0aXZhdGlvbkNyZWF0ZWQgPSBicmFuY2gzMihOb3RFcXVh
bCwgdGFnRm9yKGFjdGl2YXRpb24pLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRh
ZykpOwotICAgIEpJVFN0dWJDYWxsKHRoaXMsIGN0aV9vcF9wdXNoX2FjdGl2YXRpb24pLmNhbGwo
YWN0aXZhdGlvbik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9u
LCAwKTsKKyAgICBlbWl0U3RvcmVDZWxsKGFjdGl2YXRpb24sIHJldHVyblZhbHVlUmVnaXN0ZXIp
OwogICAgIGFjdGl2YXRpb25DcmVhdGVkLmxpbmsodGhpcyk7CiB9CiAKQEAgLTEwOTgsMTAgKzEw
OTQsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfYXJndW1lbnRzKEluc3RyCiAgICAgaW50
IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAKICAgICBKdW1wIGFyZ3ND
cmVhdGVkID0gYnJhbmNoMzIoTm90RXF1YWwsIHRhZ0Zvcihkc3QpLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwotCi0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2Fs
bCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9jcmVhdGVfYXJndW1lbnRzKTsK
LSAgICBzbG93UGF0aENhbGwuY2FsbCgpOwotCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
cmVhdGVBcmd1bWVudHMpOworICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZVJlZ2lz
dGVyKTsKKyAgICBlbWl0U3RvcmVDZWxsKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIoZHN0KSkub2Zmc2V0KCksIHJldHVyblZhbHVlUmVnaXN0ZXIpOwogICAgIGFy
Z3NDcmVhdGVkLmxpbmsodGhpcyk7CiB9CiAKQEAgLTEyNTYsOSArMTI1MSw5IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmEKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCi0gICAgSklUU3R1YkNhbGwodGhpcywgY3RpX29w
X2NyZWF0ZV9hcmd1bWVudHMpLmNhbGwoKTsKLSAgICBlbWl0U3RvcmUoYXJndW1lbnRzLCByZWdU
MSwgcmVnVDApOwotICAgIGVtaXRTdG9yZSh1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoVmly
dHVhbFJlZ2lzdGVyKGFyZ3VtZW50cykpLm9mZnNldCgpLCByZWdUMSwgcmVnVDApOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ3JlYXRlQXJndW1lbnRzKTsKKyAgICBlbWl0U3RvcmVDZWxs
KGFyZ3VtZW50cywgcmV0dXJuVmFsdWVSZWdpc3Rlcik7CisgICAgZW1pdFN0b3JlQ2VsbCh1bm1v
ZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cykpLm9mZnNl
dCgpLCByZXR1cm5WYWx1ZVJlZ2lzdGVyKTsKICAgICAKICAgICBza2lwQXJndW1lbnRzQ3JlYXRp
b24ubGluayh0aGlzKTsKICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfZ2V0
X2J5X3ZhbF9nZW5lcmljKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAkocmV2aXNpb24gMTU3MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE3LDkgKzUxNyw4IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9wbmFtZXMoSW5zdHJ1Y3Rpb24KICAgICAvLyBXZSBjb3VsZCBpbmxpbmUg
dGhlIGNhc2Ugd2hlcmUgeW91IGhhdmUgYSB2YWxpZCBjYWNoZSwgYnV0CiAgICAgLy8gdGhpcyBj
YWxsIGRvZXNuJ3Qgc2VlbSB0byBiZSBob3QuCiAgICAgTGFiZWwgaXNPYmplY3QodGhpcyk7Ci0g
ICAgSklUU3R1YkNhbGwgZ2V0UG5hbWVzU3R1YkNhbGwodGhpcywgY3RpX29wX2dldF9wbmFtZXMp
OwotICAgIGdldFBuYW1lc1N0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QwKTsKLSAgICBnZXRQbmFt
ZXNTdHViQ2FsbC5jYWxsKGRzdCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRQTmFt
ZXMsIHJlZ1QwKTsKKyAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVSZWdpc3Rlcik7
CiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yLCBtX2pzU3RyaW5nc1NpemUpKSwgcmVnVDMpOwogICAgIHN0b3JlNjQodGFnVHlw
ZU51bWJlclJlZ2lzdGVyLCBhZGRyZXNzRm9yKGkpKTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0z
MihJbnQzMlRhZyksIGludFRhZ0ZvcihzaXplKSk7CkBAIC01MzAsMTAgKzUyOSw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9wbmFtZXMoSW5zdHJ1Y3Rpb24KICAgICBtb3ZlKHJlZ1QwLCByZWdU
MSk7CiAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZWdUMSk7CiAg
ICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihWYWx1ZU51bGwp
KSwgYnJlYWtUYXJnZXQpOwotCi0gICAgSklUU3R1YkNhbGwgdG9PYmplY3RTdHViQ2FsbCh0aGlz
LCBjdGlfdG9fb2JqZWN0KTsKLSAgICB0b09iamVjdFN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1Qw
KTsKLSAgICB0b09iamVjdFN0dWJDYWxsLmNhbGwoYmFzZSk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Ub09iamVjdCwgYmFzZSwgcmVnVDApOwogICAgIGp1bXAoKS5saW5rVG8oaXNPYmpl
Y3QsIHRoaXMpOwogICAgIAogICAgIGVuZC5saW5rKHRoaXMpOwpAQCAtODQwLDcgKzgzNiw4IEBA
IHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV9hY3RpdmF0aW9uKEluc3QKICAgICBpbnQgZHN0ID0g
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICAKICAgICBKdW1wIGFjdGl2YXRp
b25DcmVhdGVkID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0
ZXIsIHNpemVvZihSZWdpc3RlcikgKiBkc3QpKTsKLSAgICBKSVRTdHViQ2FsbCh0aGlzLCBjdGlf
b3BfcHVzaF9hY3RpdmF0aW9uKS5jYWxsKGRzdCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25DcmVhdGVBY3RpdmF0aW9uLCAwKTsKKyAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFs
dWVSZWdpc3Rlcik7CiAgICAgYWN0aXZhdGlvbkNyZWF0ZWQubGluayh0aGlzKTsKIH0KIApAQCAt
ODQ5LDkgKzg0NiwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfYXJndW1lbnRzKEluc3Ry
CiAgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAKICAgICBK
dW1wIGFyZ3NDcmVhdGVkID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIEFkZHJlc3MoY2FsbEZyYW1l
UmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBkc3QpKTsKLSAgICBKSVRTdHViQ2FsbCh0aGlz
LCBjdGlfb3BfY3JlYXRlX2FyZ3VtZW50cykuY2FsbCgpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHVubW9kaWZpZWRBcmd1bWVu
dHNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIoZHN0KSkpOworCisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25DcmVhdGVBcmd1bWVudHMpOworICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5W
YWx1ZVJlZ2lzdGVyKTsKKyAgICBlbWl0U3RvcmVDZWxsKHVubW9kaWZpZWRBcmd1bWVudHNSZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXIoZHN0KSksIHJldHVyblZhbHVlUmVnaXN0ZXIpOworCiAgICAg
YXJnc0NyZWF0ZWQubGluayh0aGlzKTsKIH0KIApAQCAtMTA0NSwxMCArMTA0NCwxMCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfaGFzX2luc3RhbmNlCiAKICAgICBsaW5rU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChpdGVyLCBiYXNlVmFsKTsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0gICAg
SklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2NoZWNrX2hhc19pbnN0YW5jZSk7Ci0g
ICAgc3R1YkNhbGwuYWRkQXJndW1lbnQodmFsdWUsIHJlZ1QyKTsKLSAgICBzdHViQ2FsbC5hZGRB
cmd1bWVudChiYXNlVmFsLCByZWdUMik7Ci0gICAgc3R1YkNhbGwuY2FsbChkc3QpOworCisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZVZhbCwgcmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2hl
Y2tIYXNJbnN0YW5jZSwgZHN0LCByZWdUMCwgcmVnVDEpOwogCiAgICAgZW1pdEp1bXBTbG93VG9I
b3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKTsKIH0KQEAgLTEwNjIs
MTAgKzEwNjEsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoSW5zdHJ1Ywog
ICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIHZhbHVlKTsKICAgICBsaW5rU2xvd0Nh
c2VJZk5vdEpTQ2VsbChpdGVyLCBwcm90byk7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotICAg
IEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9pbnN0YW5jZW9mKTsKLSAgICBzdHVi
Q2FsbC5hZGRBcmd1bWVudCh2YWx1ZSwgcmVnVDIpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50
KHByb3RvLCByZWdUMik7Ci0gICAgc3R1YkNhbGwuY2FsbChkc3QpOworCisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvdG8sIHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2YsIGRz
dCwgcmVnVDAsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RvX251bWJlcihJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQpAQCAtMTEzMiw5ICsxMTMxLDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYXJndW1lbnRfYnlfdmEKICAgICAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOwotICAgIEpJVFN0dWJDYWxsKHRoaXMsIGN0aV9vcF9jcmVhdGVf
YXJndW1lbnRzKS5jYWxsKCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVy
KFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMpKSk7CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNyZWF0ZUFyZ3VtZW50cyk7CisgICAgZW1pdFN0b3JlQ2VsbChhcmd1bWVudHMsIHJldHVy
blZhbHVlUmVnaXN0ZXIpOworICAgIGVtaXRTdG9yZUNlbGwodW5tb2RpZmllZEFyZ3VtZW50c1Jl
Z2lzdGVyKFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMpKSwgcmV0dXJuVmFsdWVSZWdpc3Rlcik7
CiAgICAgCiAgICAgc2tpcEFyZ3VtZW50c0NyZWF0aW9uLmxpbmsodGhpcyk7CiAgICAgSklUU3R1
YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2dldF9ieV92YWxfZ2VuZXJpYyk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE1
NzMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpZiBFTkFCTEUoSklUKQogI2luY2x1ZGUg
IkpJVE9wZXJhdGlvbnMuaCIKIAorI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkFy
cmF5Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRl
ICJFcnJvci5oIgpAQCAtMzQsNiArMzUsNyBAQAogI2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJuVmFs
dWUuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25XcmFwcGVycy5oIgogI2luY2x1ZGUgIkpTR2xv
YmFsT2JqZWN0RnVuY3Rpb25zLmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5o
IgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5o
IgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKQEAgLTc5Niw2ICs3OTgsMTAzIEBAIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KFJlZ0V4cE9iamVjdDo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJl
Z0V4cFN0cnVjdHVyZSgpLCByZWdleHApKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25DaGVja0hhc0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbCkKK3sKKyAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKKworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWwgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJh
c2VWYWwpOworCisgICAgaWYgKGJhc2VWYWwuaXNPYmplY3QoKSkgeworICAgICAgICBKU09iamVj
dCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWwpOworICAgICAgICBBU1NFUlQoIWJhc2VP
YmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLmltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFu
Y2UoKSk7CisgICAgICAgIGlmIChiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5p
bXBsZW1lbnRzSGFzSW5zdGFuY2UoKSkgeworICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBiYXNl
T2JqZWN0LT5tZXRob2RUYWJsZSgpLT5jdXN0b21IYXNJbnN0YW5jZShiYXNlT2JqZWN0LCBleGVj
LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihy
ZXN1bHQpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZtLT50aHJvd0V4Y2VwdGlvbihleGVj
LCBjcmVhdGVJbnZhbGlkUGFyYW1ldGVyRXJyb3IoZXhlYywgImluc3RhbmNlb2YiLCBiYXNlVmFs
KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworfQorCitKU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbihFeGVjU3RhdGUqIGV4ZWMs
IGludDMyX3Qgb2Zmc2V0KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTQWN0aXZhdGlvbiogYWN0
aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKHZtLCBleGVjLCBleGVjLT5yZWdpc3RlcnMo
KSArIG9mZnNldCwgZXhlYy0+Y29kZUJsb2NrKCkpOworICAgIGV4ZWMtPnNldFNjb3BlKGFjdGl2
YXRpb24pOworICAgIHJldHVybiBhY3RpdmF0aW9uOworfQorCitKU0NlbGwqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQ3JlYXRlQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKKyAgICAvLyBOQjogVGhpcyBuZWVkcyB0byBiZSBleGNlZWRpbmdseSBjYXJlZnVsIHdp
dGggdG9wIGNhbGwgZnJhbWUgdHJhY2tpbmcsIHNpbmNlIGl0CisgICAgLy8gbWF5IGJlIGNhbGxl
ZCBmcm9tIE9TUiBleGl0LCB3aGlsZSB0aGUgc3RhdGUgb2YgdGhlIGNhbGwgc3RhY2sgaXMgYml6
YXJyZS4KKyAgICBBcmd1bWVudHMqIHJlc3VsdCA9IEFyZ3VtZW50czo6Y3JlYXRlKHZtLCBleGVj
KTsKKyAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlbGV0ZUJ5SWQoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgY29uc3QgSWRlbnRpZmllciog
aWRlbnRpZmllcikKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKworICAgIEpTT2JqZWN0KiBiYXNlT2JqID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKS50b09iamVjdChleGVjKTsKKyAgICBib29sIGNv
dWxkRGVsZXRlID0gYmFzZU9iai0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoYmFzZU9i
aiwgZXhlYywgKmlkZW50aWZpZXIpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGNv
dWxkRGVsZXRlKTsKKyAgICBpZiAoIWNvdWxkRGVsZXRlICYmIGV4ZWMtPmNvZGVCbG9jaygpLT5p
c1N0cmljdE1vZGUoKSkKKyAgICAgICAgdm0udGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlVHlw
ZUVycm9yKGV4ZWMsICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVy
YXRpb25HZXRQTmFtZXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqKQoreworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0s
IGV4ZWMpOworCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmotPnN0cnVjdHVyZSgpOwor
ICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGpzUHJvcGVydHlOYW1lSXRlcmF0b3IgPSBzdHJ1
Y3R1cmUtPmVudW1lcmF0aW9uQ2FjaGUoKTsKKyAgICBpZiAoIWpzUHJvcGVydHlOYW1lSXRlcmF0
b3IgfHwganNQcm9wZXJ0eU5hbWVJdGVyYXRvci0+Y2FjaGVkUHJvdG90eXBlQ2hhaW4oKSAhPSBz
dHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpKQorICAgICAgICBqc1Byb3BlcnR5TmFtZUl0
ZXJhdG9yID0gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMsIG9iaik7CisgICAg
cmV0dXJuIGpzUHJvcGVydHlOYW1lSXRlcmF0b3I7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uSW5zdGFuY2VPZihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3RvKQoreworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0s
IGV4ZWMpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKKyAgICBKU1ZhbHVlIHByb3RvID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRQcm90byk7Cisg
ICAgCisgICAgQVNTRVJUKCF2YWx1ZS5pc09iamVjdCgpIHx8ICFwcm90by5pc09iamVjdCgpKTsK
KworICAgIGJvb2wgcmVzdWx0ID0gSlNPYmplY3Q6OmRlZmF1bHRIYXNJbnN0YW5jZShleGVjLCB2
YWx1ZSwgcHJvdG8pOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHJlc3Vs
dCkpOworfQorCitDYWxsRnJhbWUqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTG9hZFZhcmFyZ3Mo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVGhpcywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEFyZ3VtZW50cywgaW50MzJfdCBmaXJzdEZyZWVSZWdpc3RlcikKK3sKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKyAgICBKU1N0YWNrKiBzdGFjayA9ICZleGVjLT5pbnRlcnByZXRlcigpLT5zdGFj
aygpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRUaGlz
KTsKKyAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1l
bnRzKTsKKyAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSA9IGxvYWRWYXJhcmdzKGV4ZWMsIHN0
YWNrLCB0aGlzVmFsdWUsIGFyZ3VtZW50cywgZmlyc3RGcmVlUmVnaXN0ZXIpOworICAgIHJldHVy
biBuZXdDYWxsRnJhbWU7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uVG9PYmplY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
JnZtLCBleGVjKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWU6OmRlY29kZSh2
YWx1ZSkudG9PYmplY3QoZXhlYykpOworfQorCiBKSVRIYW5kbGVyRW5jb2RlZCBKSVRfT1BFUkFU
SU9OIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmgJKHJldmlzaW9uIDE1NzMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MiwxMyArNTIsMTUgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgQ2I6IENvZGVCbG9jayoKICAgICBEOiBkb3VibGUKICAgICBFOiBFeGVj
U3RhdGUqCisgICAgRjogQ2FsbEZyYW1lKgogICAgIEk6IFN0cmluZ0ltcGwqCiAgICAgSWNmOiBJ
bmxpbmVDYWxMRnJhbWUqCisgICAgSWRjOiBjb25zdCBJZGVudGlmaWVyKgogICAgIEo6IEVuY29k
ZWRKU1ZhbHVlCiAgICAgSmNwOiBjb25zdCBKU1ZhbHVlKgogICAgIEpzczogSlNTdHJpbmcqCiAg
ICAgTzogSlNPYmplY3QqCi0gICAgUDogcG9pbnRlciAodm9pZCopCisgICAgUDogcG9pbnRlciAo
Y2hhciopCiAgICAgUjogUmVnaXN0ZXIKICAgICBTOiBzaXplX3QKICAgICBTdDogU3RydWN0dXJl
KgpAQCAtNjYsOSArNjgsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgVzogV2F0Y2hwb2ludFNl
dCoKICAgICBaOiBpbnQzMl90CiAqLwordHlwZWRlZiBDYWxsRnJhbWUqIEpJVF9PUEVSQVRJT04g
KCpGX0pJVE9wZXJhdGlvbl9FSkpaKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUsIGludDMyX3QpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
ICgqSl9KSVRPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FQSkoRXhlY1N0YXRlKiwgSlNBcnJheSop
OwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25f
RUFaKShFeGVjU3RhdGUqLCBKU0FycmF5KiwgaW50MzJfdCk7Cit0eXBlZGVmIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FQWFwSikoRXhlY1N0YXRlKiwgQXJy
YXlBbGxvY2F0aW9uUHJvZmlsZSosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VBYXBKY3BaKShFeGVjU3RhdGUq
LCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiwgY29uc3QgSlNWYWx1ZSosIGludDMyX3QpOwogdHlw
ZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUMpKEV4
ZWNTdGF0ZSosIEpTQ2VsbCopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
ICgqSl9KSVRPcGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKIHR5
cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VDSSko
RXhlY1N0YXRlKiwgSlNDZWxsKiwgU3RyaW5nSW1wbCopOwpAQCAtNzgsMTIgKzgzLDExIEBAIHR5
cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkoKIHR5cGVkZWYgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJ
VE9wZXJhdGlvbl9FSkEpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0FycmF5Kik7CiB0
eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FSkkp
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKik7Cit0eXBlZGVmIEVuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FSklkYykoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXIqKTsKIHR5cGVkZWYgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VKSikoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VKc3NaKShFeGVjU3RhdGUqLCBKU1N0cmluZyos
IGludDMyX3QpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRP
cGVyYXRpb25fRUpQKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgdm9pZCopOwogdHlwZWRl
ZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRVApKEV4ZWNT
dGF0ZSosIHZvaWQqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpf
SklUT3BlcmF0aW9uX0VBYXBKKShFeGVjU3RhdGUqLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiwg
RW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgq
Sl9KSVRPcGVyYXRpb25fRUFhcEpjcFopKEV4ZWNTdGF0ZSosIEFycmF5QWxsb2NhdGlvblByb2Zp
bGUqLCBjb25zdCBKU1ZhbHVlKiwgaW50MzJfdCk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FUFApKEV4ZWNTdGF0ZSosIHZvaWQqLCB2b2lk
Kik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlv
bl9FUFMpKEV4ZWNTdGF0ZSosIHZvaWQqLCBzaXplX3QpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRVNTKShFeGVjU3RhdGUqLCBzaXplX3Qs
IHNpemVfdCk7CkBAIC05OSw2ICsxMDMsNyBAQCB0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElP
TiAoKkNfSklUT3BlCiB0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0
aW9uX0VKc3NTdCkoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBTdHJ1Y3R1cmUqKTsKIHR5cGVkZWYg
SlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUpzc0pzcykoRXhlY1N0YXRl
KiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwogdHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04g
KCpDX0pJVE9wZXJhdGlvbl9FSnNzSnNzSnNzKShFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3Ry
aW5nKiwgSlNTdHJpbmcqKTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRP
cGVyYXRpb25fRU8pKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7CiB0eXBlZGVmIEpTQ2VsbCogSklU
X09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VPWikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBp
bnQzMl90KTsKIHR5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25f
RVN0KShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKIHR5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFU
SU9OICgqQ19KSVRPcGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3QpOwpAQCAtMjM2LDcg
KzI0MSwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5lCiBKU0Nl
bGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0KEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TmV3UmVnZXhwKEV4ZWNTdGF0ZSosIHZvaWQqKSBXVEZfSU5URVJOQUw7CiAKLX0KK0VuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2hlY2tIYXNJbnN0YW5jZShFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgYmFzZVZhbCkgV1RGX0lOVEVSTkFMOwor
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb24oRXhlY1N0YXRl
KiwgaW50MzJfdCBvZmZzZXQpIFdURl9JTlRFUk5BTDsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBv
cGVyYXRpb25DcmVhdGVBcmd1bWVudHMoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWxldGVCeUlkKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlIGJhc2UsIGNvbnN0IElkZW50aWZpZXIqKSBXVEZfSU5URVJOQUw7CitKU0Nl
bGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0UE5hbWVzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25J
bnN0YW5jZU9mKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBwcm90
bykgV1RGX0lOVEVSTkFMOworQ2FsbEZyYW1lKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxvYWRW
YXJhcmdzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgYXJndW1lbnRzLCBpbnQzMl90IGZpcnN0RnJlZVJlZ2lzdGVyKSBXVEZfSU5URVJOQUw7CitF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvT2JqZWN0KEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CisKK30gLy8gZXh0ZXJuICJDIgogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxNTczMzkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NSwxMSArODUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoSW5z
dHJ1Y3Rpb24qCiAgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
CiAgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIGlu
dCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgCi0gICAg
SklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2RlbF9ieV9pZCk7Ci0gICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQoYmFzZSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZElt
bVB0cigmbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpKSk7Ci0gICAgc3R1YkNhbGwu
Y2FsbChkc3QpOworICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkLCBkc3QsIHJlZ1QxLCByZWdUMCwgJm1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KSk7CiB9CiAKIEpJVDo6Q29kZVJlZiBKSVQ6OnN0cmlu
Z0dldEJ5VmFsU3R1YkdlbmVyYXRvcihWTSogdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTU3MzM5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUwOCwxMCArNTA4LDExIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJf
c2V0dGVyKEluc3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3Rp
X29wX2RlbF9ieV9pZCk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCwgcmVnVDIpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0
ZWRJbW1QdHIoJm1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQpKSk7Ci0gICAgc3R1YkNhbGwuY2FsbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKTsKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
KyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgaW50
IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkRlbGV0ZUJ5SWQsIGRzdCwgcmVnVDAsICZtX2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0
eSkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3Bw
CShyZXZpc2lvbiAxNTczMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQxLDI5ICs4NDEsNiBAQCBERUZJTkVfU1RVQl9GVU5D
VElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOwogfQogCi1ERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfY2hlY2tf
aGFzX2luc3RhbmNlKQotewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsK
LQotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAg
SlNWYWx1ZSB2YWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1
ZSBiYXNlVmFsID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKLQotICAgIGlmIChiYXNl
VmFsLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVj
dChiYXNlVmFsKTsKLSAgICAgICAgQVNTRVJUKCFiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlw
ZUluZm8oKS5pbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKCkpOwotICAgICAgICBpZiAoYmFz
ZU9iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkuaW1wbGVtZW50c0hhc0luc3RhbmNlKCkp
IHsKLSAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gYmFzZU9iamVjdC0+bWV0aG9kVGFibGUoKS0+
Y3VzdG9tSGFzSW5zdGFuY2UoYmFzZU9iamVjdCwgY2FsbEZyYW1lLCB2YWx1ZSk7Ci0gICAgICAg
ICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ocmVzdWx0KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBzdGFja0ZyYW1lLnZtLT50aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIGNyZWF0ZUludmFsaWRQ
YXJhbWV0ZXJFcnJvcihjYWxsRnJhbWUsICJpbnN0YW5jZW9mIiwgYmFzZVZhbCkpOwotICAgIFZN
X1RIUk9XX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoKSk7Ci19Ci0KICNpZiBFTkFCTEUoREZHX0pJVCkKIERFRklORV9TVFVCX0ZVTkNUSU9O
KHZvaWQsIG9wdGltaXplKQogewpAQCAtMTEwMCw1NSArMTA3Nyw2IEBAIERFRklORV9TVFVCX0ZV
TkNUSU9OKHZvaWQsIG9wdGltaXplKQogfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCi1E
RUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfaW5zdGFuY2VvZikKLXsKLSAg
ICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0KLSAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotICAgIEpTVmFsdWUgdmFsdWUgPSBzdGFj
a0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOwotICAgIEpTVmFsdWUgcHJvdG8gPSBzdGFja0ZyYW1l
LmFyZ3NbMV0uanNWYWx1ZSgpOwotICAgIAotICAgIEFTU0VSVCghdmFsdWUuaXNPYmplY3QoKSB8
fCAhcHJvdG8uaXNPYmplY3QoKSk7Ci0KLSAgICBib29sIHJlc3VsdCA9IEpTT2JqZWN0OjpkZWZh
dWx0SGFzSW5zdGFuY2UoY2FsbEZyYW1lLCB2YWx1ZSwgcHJvdG8pOwotICAgIENIRUNLX0ZPUl9F
WENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
cmVzdWx0KSk7Ci19Ci0KLURFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9k
ZWxfYnlfaWQpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0g
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAgICAKLSAg
ICBKU09iamVjdCogYmFzZU9iaiA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkudG9PYmpl
Y3QoY2FsbEZyYW1lKTsKLQotICAgIGJvb2wgY291bGREZWxldGUgPSBiYXNlT2JqLT5tZXRob2RU
YWJsZSgpLT5kZWxldGVQcm9wZXJ0eShiYXNlT2JqLCBjYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJn
c1sxXS5pZGVudGlmaWVyKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGNvdWxk
RGVsZXRlKTsKLSAgICBpZiAoIWNvdWxkRGVsZXRlICYmIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkt
PmlzU3RyaWN0TW9kZSgpKQotICAgICAgICBzdGFja0ZyYW1lLnZtLT50aHJvd0V4Y2VwdGlvbihz
dGFja0ZyYW1lLmNhbGxGcmFtZSwgY3JlYXRlVHlwZUVycm9yKHN0YWNrRnJhbWUuY2FsbEZyYW1l
LCAiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKSk7Ci0KLSAgICBDSEVDS19GT1JfRVhDRVBU
SU9OX0FUX0VORCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLX0KLQot
REVGSU5FX1NUVUJfRlVOQ1RJT04oSlNPYmplY3QqLCBvcF9wdXNoX2FjdGl2YXRpb24pCi17Ci0g
ICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0gICAgSlNBY3RpdmF0aW9u
KiBhY3RpdmF0aW9uID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUoc3RhY2tGcmFtZS5jYWxsRnJhbWUt
PnZtKCksIHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJs
b2NrKCkpOwotICAgIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5zZXRTY29wZShhY3RpdmF0aW9uKTsK
LSAgICByZXR1cm4gYWN0aXZhdGlvbjsKLX0KLQotREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2Rl
ZEpTVmFsdWUsIG9wX2NyZWF0ZV9hcmd1bWVudHMpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZS
QU1FKHN0YWNrRnJhbWUpOwotCi0gICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBBcmd1bWVudHM6
OmNyZWF0ZSgqc3RhY2tGcmFtZS52bSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShhcmd1bWVudHMpKTsKLX0KLQogREVGSU5FX1NUVUJf
RlVOQ1RJT04odm9pZCwgb3BfdGVhcl9vZmZfYWN0aXZhdGlvbikKIHsKICAgICBTVFVCX0lOSVRf
U1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CkBAIC0xMzkyLDIyICsxMzIwLDYgQEAgREVGSU5FX1NU
VUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5X3ZhbAogICAgIENIRUNLX0ZPUl9FWENFUFRJT05f
QVRfRU5EKCk7CiB9CiAKLURFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCBvcF9sb2FkX3ZhcmFy
Z3MpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0gICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAgICBKU1N0YWNrKiBz
dGFjayA9IHN0YWNrRnJhbWUuc3RhY2s7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGFja0Zy
YW1lLmFyZ3NbMF0uanNWYWx1ZSgpOwotICAgIEpTVmFsdWUgYXJndW1lbnRzID0gc3RhY2tGcmFt
ZS5hcmdzWzFdLmpzVmFsdWUoKTsKLSAgICBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIgPSBzdGFja0Zy
YW1lLmFyZ3NbMl0uaW50MzIoKTsKLQotICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gbG9h
ZFZhcmFyZ3MoY2FsbEZyYW1lLCBzdGFjaywgdGhpc1ZhbHVlLCBhcmd1bWVudHMsIGZpcnN0RnJl
ZVJlZ2lzdGVyKTsKLSAgICBpZiAoIW5ld0NhbGxGcmFtZSkKLSAgICAgICAgVk1fVEhST1dfRVhD
RVBUSU9OKCk7Ci0gICAgcmV0dXJuIG5ld0NhbGxGcmFtZTsKLX0KLQogREVGSU5FX1NUVUJfRlVO
Q1RJT04odm9pZCosIG9wX3Rocm93KQogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFj
a0ZyYW1lKTsKQEAgLTE0MTcsMTkgKzEzMjksNiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lk
Kiwgb3BfdGhyb3cpCiAgICAgcmV0dXJuIGhhbmRsZXIuY2FsbEZyYW1lOwogfQogCi1ERUZJTkVf
U1RVQl9GVU5DVElPTihKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiwgb3BfZ2V0X3BuYW1lcykKLXsK
LSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0KLSAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotICAgIEpTT2JqZWN0KiBvID0gc3Rh
Y2tGcmFtZS5hcmdzWzBdLmpzT2JqZWN0KCk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBv
LT5zdHJ1Y3R1cmUoKTsKLSAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBqc1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yID0gc3RydWN0dXJlLT5lbnVtZXJhdGlvbkNhY2hlKCk7Ci0gICAgaWYgKCFqc1By
b3BlcnR5TmFtZUl0ZXJhdG9yIHx8IGpzUHJvcGVydHlOYW1lSXRlcmF0b3ItPmNhY2hlZFByb3Rv
dHlwZUNoYWluKCkgIT0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihjYWxsRnJhbWUpKQotICAg
ICAgICBqc1Byb3BlcnR5TmFtZUl0ZXJhdG9yID0gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3Jl
YXRlKGNhbGxGcmFtZSwgbyk7Ci0gICAgcmV0dXJuIGpzUHJvcGVydHlOYW1lSXRlcmF0b3I7Ci19
Ci0KIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1c2hfd2l0aF9zY29wZSkKIHsKICAg
ICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CkBAIC0xNjEwLDE0ICsxNTA5LDYg
QEAgRXhjZXB0aW9uSGFuZGxlciBKSVRfU1RVQiBjdGlfdm1faGFuZGxlXwogfQogI2VuZGlmCiAK
LURFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCB0b19vYmplY3QpCi17Ci0gICAg
U1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0gICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkudG9PYmplY3QoY2FsbEZyYW1lKSk7Ci19Ci0K
IERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9yZXNvbHZlX3Njb3BlKQog
ewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHJldmlzaW9uIDE1NzMzOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzMwLDkgKzMzMCw2
IEBAIGV4dGVybiAiQyIgdm9pZCBjdGlNYXNtUHJvYmVUcmFtcG9saW5lKCkKIHZvaWQgcGVyZm9y
bVBsYXRmb3JtU3BlY2lmaWNKSVRBc3NlcnRpb25zKFZNKik7CiAKIGV4dGVybiAiQyIgewotRW5j
b2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2NoZWNrX2hhc19pbnN0YW5jZShTVFVCX0FSR1Nf
REVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9v
cF9jcmVhdGVfYXJndW1lbnRzKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwot
RW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2RlbF9ieV9pZChTVFVCX0FSR1NfREVDTEFS
QVRJT04pIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRf
YnlfaWQoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1
ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX2FycmF5X2ZhaWwoU1RVQl9BUkdTX0RFQ0xBUkFU
SU9OKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5
X2lkX2N1c3RvbV9zdHViKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwpAQCAt
MzQ2LDE0ICszNDMsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lk
CiBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbChTVFVCX0FSR1NfREVD
TEFSQVRJT04pIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9n
ZXRfYnlfdmFsX2dlbmVyaWMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiBF
bmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbF9zdHJpbmcoU1RVQl9BUkdT
X0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlf
b3BfaW5zdGFuY2VvZihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKLUVuY29k
ZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV90b19vYmplY3QoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBX
VEZfSU5URVJOQUw7Ci1KU09iamVjdCogSklUX1NUVUIgY3RpX29wX3B1c2hfYWN0aXZhdGlvbihT
VFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX1NUVUIgY3RpX29w
X3B1c2hfbmFtZV9zY29wZShTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKIHZv
aWQgSklUX1NUVUIgY3RpX29wX3B1c2hfd2l0aF9zY29wZShTVFVCX0FSR1NfREVDTEFSQVRJT04p
IFdURl9JTlRFUk5BTDsKIEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X2lkX3RyYW5z
aXRpb25fcmVhbGxvYyhTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKLUpTUHJv
cGVydHlOYW1lSXRlcmF0b3IqIEpJVF9TVFVCIGN0aV9vcF9nZXRfcG5hbWVzKFNUVUJfQVJHU19E
RUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwotdm9pZCogSklUX1NUVUIgY3RpX29wX2xvYWRfdmFy
YXJncyhTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX1NUVUIg
Y3RpX2hhbmRsZV93YXRjaGRvZ190aW1lcihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRF
Uk5BTDsKIHZvaWQgSklUX1NUVUIgY3RpX29wX2RlYnVnKFNUVUJfQVJHU19ERUNMQVJBVElPTikg
V1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfU1RVQiBjdGlfb3BfcG9wX3Njb3BlKFNUVUJfQVJHU19E
RUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwo=
</data>
<flag name="review"
          id="236632"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
      

    </bug>

</bugzilla>